/* ==========================================================================
   v2 内页公共样式表（配套页面：演出/活动/商城/匠心出品/园区指南/关注我们）
   维护规则：本文件为手工维护，【不】从原型 home-pc 提取（extract_v2_css.py
   只管 v2.css），可自由迭代；所有选择器必须带 `.v2 ` 前缀。
   设计语言与 v2.css 严格对齐：tokens 复用（--c-* / --r-* / --shadow-* /
   --ease / --wrap-pad / --font-brush），视觉母题 = 米白纸面 + 白卡 + 柔绿
   主色 + 金色点缀 + 书法体标题 + 上浮卡片。
   ========================================================================== */

/* ---------- P0-0 封面比例（--cover-ratio） ---------- */
/*
 * 基准 = 首页封面比例 724 : 254（≈ 2.85 : 1）。
 * 2026-09-10：首页时效双栏（近期演出 .show-mini__poster / 活动 .acts figure）
 *   统一到同一变量 --ratio-banner:2.85（定义在 v2.css 的 .v2 tokens，原为
 *   各自的 280/98 ≈ 2.857 与 264/96 = 2.75，两张图高度不一致）。
 *
 * 【详情页】演出 / 活动详情 .dhero__img img、图文详情 .nart__cover：
 *   已按基准定稿为 724/254，本轮【不再调整】。
 * 【列表页】三个单列列表页的行卡封面 .prowc__cover（V2RowCard）：
 *   以「卡片内容高度」为基准取宽 —— 封面列给足宽度，高度按本比例同步长出，
 *   图片在卡片里显示得更大；右侧文字区（标题 / 摘要 / 时间 / 地点）版面相应收窄。
 * 【不动】品牌卡 .shopc__cover。
 *
 * 填充方式：object-fit: cover —— 等比裁切，绝不拉伸变形。
 */
.v2 { --cover-ratio: 724 / 254; }

/* ---------- P0-0b 商品图比例（--goods-ratio） ---------- */
/*
 * 基准 = 3 : 4（宽3 高4）。
 * 2026-09-11：全站商品图统一为 3:4 —— 与小程序端 App.vue 的 --goods-pad:133.33% 同口径，
 *   两端表现一致。适用范围【仅商品图（文创好物 mall 链路）】：
 *     · 首页「森灵文创」网格卡 .mall-card__img
 *     · 商城列表 / 品牌详情网格卡 .pcard__img（V2Card，默认值已改 3/4）
 *     · 商品详情主图 .gal__main img 与缩略条 .gal__thumb
 *     · 旧版（未切 v2）商城列表 / 商品详情 / 品牌作品 / 首页商品条
 * 【不动】非商品头图：演出 / 活动 / 资讯封面仍用 --cover-ratio（724/254 ≈ 2.85:1）、
 *   首页 hero、品牌卡 .shopc__cover、小程序码等。
 */
.v2 { --goods-ratio: 3 / 4; }

/* ---------- P0 内页头（phead）—— 带横幅背景图 ---------- */
/*
 * 背景图 bg-t.webp 横幅水彩（5.82:1），左右有叶饰、中部淡远山、底部米色留白。
 * 设计：
 *   1. background-size: cover：等比裁切，不变形；移动端 cover 在窄屏会裁两侧，自然形成"聚焦中心"
 *   2. min-height 兜底：任何断点下都有足够高度放书法体大标题（不与图片比例锁定，避免窄屏过高）
 *   3. flex 底部对齐：标题落在图片底部米色留白区，对比度最优
 *   4. ::before 底部淡渐变：额外保险，确保任何裁切结果下文字都可读
 *   5. overflow: hidden：cover 缩放时内部容器不被扩张撑破外层 .page 圆角
 * 【首页 hero 不受影响】——首页用 V2Hero（独立 inline backgroundImage），本规则只作用于 phead
 */
.v2 .phead {
  position: relative;
  background: url('/img/bg-t.webp') center / cover no-repeat;
  padding: clamp(40px, 7vw, 80px) var(--wrap-pad) clamp(28px, 3.6vw, 48px);
  min-height: clamp(220px, 24vw, 320px);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  text-align: center;
  overflow: hidden;
}
.v2 .phead::before {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(to bottom, rgba(242, 239, 229, .12) 0%, rgba(242, 239, 229, .55) 100%);
  pointer-events: none;
}
.v2 .phead > * { position: relative; z-index: 1; }
.v2 .phead__eyebrow {
  font-size: 11px;
  letter-spacing: .32em;
  color: var(--c-gold);
  text-transform: uppercase;
}
.v2 .phead__title {
  margin-top: 10px;
  font-family: var(--font-brush);
  font-weight: 400;
  font-size: clamp(30px, 3.4vw, 50px);
  line-height: 1.25;
  letter-spacing: .06em;
  color: var(--c-ink);
}
.v2 .phead__sub {
  margin-top: 8px;
  font-size: 12.5px;
  letter-spacing: .18em;
  color: var(--c-sub);
}
/* 头部装饰：居中小叶（与 hero 装饰叶同族） */
.v2 .phead__leaf {
  width: 20px;
  height: 20px;
  margin: 0 auto;
  margin-top: 14px;
  opacity: .55;
}
.v2 .phead__leaf path { fill: var(--c-green-deep); }

/* ---------- P1 内容区容器 ---------- */
.v2 .pbody {
  padding: clamp(18px, 2.4vw, 30px) var(--wrap-pad) clamp(48px, 6vw, 84px);
}
.v2 .psec { margin-top: clamp(34px, 4.6vw, 60px); }
.v2 .psec:first-child { margin-top: 0; }

/* 版块标题（内页通用小节头，对齐 col__head 语言） */
.v2 .psec-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: clamp(14px, 1.6vw, 20px);
}
.v2 .psec-head h2 {
  font-size: clamp(16px, 1.2vw, 20px);
  font-weight: 700;
  letter-spacing: .06em;
  color: var(--c-ink);
}
.v2 .psec-head h2 small {
  margin-left: 10px;
  font-size: 11px;
  font-weight: 400;
  letter-spacing: .26em;
  color: var(--c-gold);
}
.v2 .psec-head a {
  font-size: 12px;
  color: var(--c-sub);
}
.v2 .psec-head a:hover { color: var(--c-green); }

/* ---------- P2 通用标签 ---------- */
.v2 .tag {
  display: inline-block;
  background: var(--c-green);
  color: #fff;
  font-size: 11px;
  letter-spacing: .08em;
  padding: 3px 12px;
  border-radius: var(--r-pill);
  line-height: 1.7;
}
.v2 .tag--gold { background: var(--c-gold); }
.v2 .tag--soft {
  background: rgba(95, 127, 85, .12);
  color: var(--c-green-deep);
}

/* ---------- P3 内容卡片（pcard：列表页通用） ---------- */
.v2 .pgrid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: clamp(14px, 1.8vw, 24px);
}
@media (min-width: 860px) { .v2 .pgrid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1100px) { .v2 .pgrid--4 { grid-template-columns: repeat(4, 1fr); } }

.v2 .pcard {
  position: relative;
  display: block;
  color: inherit;
  background: var(--c-card);
  border: 1px solid var(--c-line);
  border-radius: var(--r-card);
  overflow: hidden;
  transition: transform .3s var(--ease), box-shadow .3s var(--ease);
}
.v2 .pcard:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-card);
}
.v2 .pcard__img {
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: linear-gradient(135deg, #dfe7d4, #b9c8a8);
}
.v2 .pcard__img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform .6s var(--ease);
}
.v2 .pcard:hover .pcard__img img { transform: scale(1.05); }
.v2 .pcard__badge {
  position: absolute;
  top: 12px;
  left: 12px;
  z-index: 1;
  background: rgba(255, 253, 248, .94);
  color: var(--c-green-deep);
  font-size: 11px;
  letter-spacing: .14em;
  padding: 4px 12px;
  border-radius: var(--r-pill);
}
.v2 .pcard__badge--gold {
  background: var(--c-gold);
  color: #fff;
}
.v2 .pcard__body {
  padding: clamp(12px, 1.1vw, 16px) clamp(14px, 1.2vw, 18px) clamp(14px, 1.3vw, 18px);
}
.v2 .pcard__title {
  font-size: 15px;
  font-weight: 700;
  line-height: 1.5;
  color: var(--c-ink);
}
.v2 .pcard__meta {
  margin-top: 5px;
  font-size: 12px;
  color: var(--c-sub);
  letter-spacing: .03em;
}
.v2 .pcard__foot {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-top: 10px;
}
.v2 .pcard__price {
  font-family: var(--font-brush);
  font-size: 17px;
  color: var(--c-gold);
  letter-spacing: .03em;
}
.v2 .pcard__price small { font-size: 12px; }
.v2 .pcard__price--free { color: var(--c-green); }
.v2 .pcard__go {
  font-size: 11px;
  color: var(--c-sub);
  transition: color .25s;
}
.v2 .pcard:hover .pcard__go { color: var(--c-green); }

/* ---------- P4 分页（pager） ---------- */
.v2 .pager {
  margin-top: clamp(28px, 4vw, 44px);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
}
.v2 .pager__btn {
  padding: 9px 24px;
  background: var(--c-card);
  border: 1px solid var(--c-line);
  border-radius: var(--r-pill);
  font-size: 13px;
  letter-spacing: .06em;
  color: var(--c-ink);
  transition: all .25s var(--ease);
}
.v2 .pager__btn:hover {
  background: var(--c-green);
  border-color: var(--c-green);
  color: #fff;
  text-decoration: none;
}
.v2 .pager__num {
  font-size: 13px;
  letter-spacing: .12em;
  color: var(--c-sub);
}

/* ---------- P5 分类胶囊（cats） ---------- */
.v2 .cats {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: clamp(20px, 2.6vw, 30px);
}
.v2 .cats a {
  padding: 8px 20px;
  background: var(--c-card);
  border: 1px solid var(--c-line);
  border-radius: var(--r-pill);
  font-size: 13.5px;
  letter-spacing: .04em;
  color: var(--c-sub);
  transition: all .25s var(--ease);
}
.v2 .cats a:hover {
  border-color: var(--c-green);
  color: var(--c-green);
  text-decoration: none;
}
.v2 .cats a.is-on {
  background: var(--c-green);
  border-color: var(--c-green);
  color: #fff;
}

/* ---------- P6 面包屑（crumb）—— 与 phead 同款背景窄版 ---------- */
/*
 * 详情页（演出/活动/商品/品牌详情）头部没有 phead，用 crumb 承担"页面头部"角色，
 * 因此背景与 phead 严格一致（同一张 bg-t.webp + 同一渐变 + cover），保证视觉统一。
 * 高度比 phead 矮（min-height 130-180px），flex 底部对齐让面包屑文字落在图片底部留白区。
 */
.v2 .crumb {
  position: relative;
  background: url('/img/bg-t.webp') center / cover no-repeat;
  padding: clamp(72px, 8vw, 96px) var(--wrap-pad) clamp(18px, 2.4vw, 30px);
  min-height: clamp(130px, 14vw, 180px);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  font-size: 12.5px;
  letter-spacing: .05em;
  color: var(--c-sub);
  overflow: hidden;
  /* 胶囊底色：比 --c-mist(#f2efe5) 略深一档的米色 + 适度透明度，
     叠在横幅渐变上后观感 ≈ #e9e4d4（仍远浅于文字色 #2f4a35，对比度 ≥ 4.8:1） */
  --crumb-pill: rgba(232, 227, 210, .86);
  --crumb-pill-line: rgba(212, 205, 184, .95);
}
.v2 .crumb::before {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(to bottom, rgba(242, 239, 229, .1) 0%, rgba(242, 239, 229, .55) 100%);
  pointer-events: none;
}
.v2 .crumb > * { position: relative; z-index: 1; }
/* 胶囊条：单行、米色半透底（比页面底色略深、无阴影），置于横幅底部左侧——比原先散排文字更明显 */
.v2 .crumb__bar {
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  gap: 14px;                  /* 各层级项之间的间距（拉宽） */
  max-width: 100%;
  padding: 14px 30px;         /* 上下 / 左右内边距加大 */
  background: var(--crumb-pill);
  border: 1px solid var(--crumb-pill-line);
  border-radius: var(--r-pill);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  list-style: none;
  white-space: nowrap;      /* 单行：绝不换行 */
  overflow: hidden;
  font-size: 13.5px;
  letter-spacing: .04em;
}
.v2 .crumb__item {
  display: flex;
  align-items: center;
  gap: 14px;                /* 文字与分隔符之间同距，保证间隔均匀 */
  min-width: 0;             /* 允许当前项被压缩并省略 */
}
.v2 .crumb__link {
  color: var(--c-green-deep);
  font-weight: 600;
  transition: color .25s var(--ease);
}
.v2 .crumb__link:hover {
  color: var(--c-green);
}
.v2 .crumb__now {
  color: var(--c-ink);
  font-weight: 600;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;  /* 当前项过长时省略，保证单行 */
}
.v2 .crumb__sep {
  color: var(--c-sub);
  opacity: .8;              /* ">" 比原 "/" 提亮一档，作为主要层级指示更清楚 */
  flex-shrink: 0;
}
@media (max-width: 760px) {
  .v2 .crumb__bar {
    padding: 11px 18px;
    gap: 10px;
    font-size: 12.5px;
    max-width: 100%;
  }
  .v2 .crumb__item { gap: 10px; }
  .v2 .crumb__now { max-width: 38vw; }   /* 窄屏当前项限宽，避免加大内边距后挤出胶囊 */
}

/* ---------- P7 详情头（dhero：左图右信息） ---------- */
.v2 .dhero {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(20px, 3vw, 44px);
  padding: clamp(16px, 2.4vw, 28px) var(--wrap-pad) 0;
}
@media (min-width: 860px) {
  .v2 .dhero { grid-template-columns: 1.15fr 1fr; align-items: center; }
}
.v2 .dhero__img {
  border-radius: var(--r-card);
  overflow: hidden;
  box-shadow: var(--shadow-card);
  background: linear-gradient(135deg, #dfe7d4, #b9c8a8);
}
.v2 .dhero__img img {
  width: 100%;
  aspect-ratio: var(--cover-ratio, 724 / 254);
  object-fit: cover;
  display: block;
}
.v2 .dhero__tags {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.v2 .dhero__title {
  margin-top: 12px;
  font-size: clamp(22px, 2.4vw, 34px);
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: .04em;
  color: var(--c-ink);
}
.v2 .dhero__lead {
  margin-top: 10px;
  font-size: 13.5px;
  line-height: 1.9;
  color: var(--c-sub);
}
/* 详情字段表（facts） */
.v2 .facts {
  margin-top: 18px;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 14px 22px;
}
@media (max-width: 520px) { .v2 .facts { grid-template-columns: 1fr; } }
.v2 .facts dt {
  font-size: 11px;
  letter-spacing: .16em;
  color: var(--c-sub);
  margin-bottom: 3px;
}
.v2 .facts dd {
  margin: 0;
  font-size: 14.5px;
  color: var(--c-ink);
  line-height: 1.6;
}
/* 价格行 */
.v2 .price-row {
  margin-top: 18px;
  display: flex;
  align-items: baseline;
  gap: 12px;
  flex-wrap: wrap;
}
.v2 .price-row .price {
  font-family: var(--font-brush);
  font-size: clamp(26px, 2.4vw, 34px);
  color: var(--c-gold);
  letter-spacing: .02em;
}
.v2 .price-row .price small { font-size: 15px; }
.v2 .price-row__note { font-size: 12.5px; color: var(--c-sub); }

/* ---------- P8 提示条（notice：购票/报名/销售主体声明） ---------- */
.v2 .notice {
  margin-top: 18px;
  padding: 12px 16px;
  background: rgba(95, 127, 85, .1);
  border-left: 3px solid var(--c-green);
  border-radius: 0 10px 10px 0;
  color: var(--c-green-deep);
  font-size: 13px;
  line-height: 1.85;
}
.v2 .notice--gold {
  background: rgba(201, 162, 39, .1);
  border-left-color: var(--c-gold);
  color: #8a6d14;
}
/* 居中窄版提示条（列表页声明：统一销售主体等） */
.v2 .notice--center {
  max-width: 820px;
  margin-left: auto;
  margin-right: auto;
}
/* 窄版版块（码卡等单元素居中） */
.v2 .psec--narrow {
  max-width: 380px;
  margin-left: auto;
  margin-right: auto;
}

/* ---------- P9 场次表（sess） ---------- */
.v2 .sess {
  background: var(--c-card);
  border: 1px solid var(--c-line);
  border-radius: var(--r-card);
  overflow: hidden;
}
.v2 .sess__row {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 4px 16px;
  padding: 15px 20px;
  border-bottom: 1px dashed var(--c-line);
  align-items: center;
}
.v2 .sess__row:last-child { border-bottom: 0; }
.v2 .sess__name {
  font-weight: 700;
  font-size: 14.5px;
  color: var(--c-ink);
}
.v2 .sess__time {
  grid-column: 1;
  font-size: 13px;
  color: var(--c-sub);
  letter-spacing: .04em;
}
.v2 .sess__rest {
  grid-column: 2;
  grid-row: 1 / span 2;
  justify-self: end;
  font-size: 12px;
  letter-spacing: .05em;
  color: var(--c-green-deep);
  background: rgba(95, 127, 85, .12);
  border-radius: var(--r-pill);
  padding: 4px 14px;
  white-space: nowrap;
}
.v2 .sess__rest--low {
  color: #8a6d14;
  background: rgba(201, 162, 39, .14);
}

/* ---------- P10 富文本正文（prose） ---------- */
.v2 .prose {
  font-size: 15px;
  line-height: 2;
  color: var(--c-ink);
  opacity: .92;
}
.v2 .prose p + p { margin-top: 1em; }
.v2 .prose h2, .v2 .prose h3, .v2 .prose h4 {
  margin: 1.4em 0 .5em;
  font-weight: 700;
  letter-spacing: .05em;
  color: var(--c-ink);
}
.v2 .prose h2 { font-size: 20px; }
.v2 .prose h3 { font-size: 17px; }
.v2 .prose img {
  border-radius: 12px;
  margin: 1.2em auto;
  max-width: 100%;
}
.v2 .prose blockquote {
  margin: 1.2em 0;
  padding: 10px 18px;
  border-left: 3px solid var(--c-gold);
  background: rgba(201, 162, 39, .06);
  color: var(--c-sub);
  border-radius: 0 10px 10px 0;
}
.v2 .prose a { color: var(--c-green); }
.v2 .prose ul, .v2 .prose ol { padding-left: 1.4em; list-style: disc; }
.v2 .prose ol { list-style: decimal; }
.v2 .prose li + li { margin-top: .35em; }
.v2 .prose table {
  width: 100%;
  border-collapse: collapse;
  margin: 1.2em 0;
  font-size: 14px;
}
.v2 .prose th, .v2 .prose td {
  border: 1px solid var(--c-line);
  padding: 8px 12px;
  text-align: left;
}

.v2 .prose-empty {
  color: var(--c-sub);
  font-size: 14px;
  padding: 10px 0;
}
.v2 .prose-empty::before {
  content: '— ';
  color: var(--c-gold);
}

/* ---------- P11 小程序码卡（qcard，配 V2CodeCard） ---------- */
.v2 .qcard {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  padding: clamp(22px, 3vw, 32px) clamp(18px, 2.4vw, 28px);
  background: var(--c-card);
  border: 1px solid var(--c-line);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  text-align: center;
}
.v2 .qcard__title {
  font-family: var(--font-brush);
  font-size: 19px;
  letter-spacing: .1em;
  color: var(--c-green-deep);
}
.v2 .qcard__box {
  width: 176px;
  height: 176px;
  border-radius: 14px;
  overflow: hidden;
  background: #fff;
  border: 1px solid var(--c-line);
}
.v2 .qcard__box img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.v2 .qcard__pending {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  font-size: 12.5px;
  line-height: 1.8;
  color: var(--c-sub);
  background: repeating-conic-gradient(#f2efe5 0 25%, #fff 0 50%) 0 0 / 20px 20px;
}
.v2 .qcard__pending--err { background: var(--c-mist); }
.v2 .qcard__leaf { width: 28px; height: 28px; fill: var(--c-sub); stroke: var(--c-sub); }
.v2 .qcard__spin {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 2px solid var(--c-line);
  border-top-color: var(--c-green);
  animation: v2-qspin .9s linear infinite;
}
@keyframes v2-qspin { to { transform: rotate(360deg); } }
.v2 .qcard__note {
  font-size: 12.5px;
  color: var(--c-sub);
  line-height: 1.9;
  letter-spacing: .04em;
}

/* ---------- P12 空态（pempty） ---------- */
.v2 .pempty {
  padding: clamp(48px, 8vw, 90px) 0;
  text-align: center;
}
.v2 .pempty__t {
  font-family: var(--font-brush);
  font-size: clamp(20px, 2vw, 26px);
  letter-spacing: .1em;
  color: var(--c-green-deep);
}
.v2 .pempty__s {
  margin-top: 10px;
  font-size: 13px;
  letter-spacing: .08em;
  color: var(--c-sub);
}
.v2 .pempty .btn { margin-top: 20px; }

/* ---------- P13 品牌卡（shops 专用：渐变头 + 白卡身） ---------- */
.v2 .shopc__cover {
  position: relative;
  aspect-ratio: 5 / 2.6;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.v2 .shopc__logo {
  width: clamp(64px, 5.4vw, 84px);
  height: clamp(64px, 5.4vw, 84px);
  object-fit: cover;
  border-radius: 50%;
  border: 3px solid rgba(255, 253, 248, .78);
}
.v2 .shopc__glyph {
  font-family: var(--font-brush);
  font-size: clamp(48px, 4.4vw, 66px);
  line-height: 1;
  color: rgba(255, 253, 248, .4);
  transition: transform .35s var(--ease);
}
.v2 .pcard:hover .shopc__glyph { transform: scale(1.1); }
.v2 .shopc__tag {
  position: absolute;
  top: 12px;
  left: 12px;
  background: rgba(255, 253, 248, .92);
  color: var(--c-green-deep);
  font-size: 11px;
  letter-spacing: .14em;
  padding: 4px 12px;
  border-radius: var(--r-pill);
}
.v2 .shopc__more {
  display: inline-block;
  margin-top: 12px;
  font-size: 12.5px;
  letter-spacing: .06em;
  color: var(--c-green);
}
/* 品牌简介：最多两行省略 */
.v2 .shopc__intro {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  line-height: 1.8;
}
.v2 .shopc__arrow {
  display: inline-block;
  transition: transform .25s var(--ease);
}
.v2 .pcard:hover .shopc__arrow { transform: translateX(4px); }

/* ---------- P14 品牌详情头（渐变 hero） ---------- */
.v2 .shoph__cover {
  position: relative;
  aspect-ratio: 4 / 3;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-card);
  overflow: hidden;
  box-shadow: var(--shadow-card);
}
.v2 .shoph__logo {
  width: clamp(110px, 11vw, 160px);
  height: clamp(110px, 11vw, 160px);
  object-fit: cover;
  border-radius: 50%;
  border: 4px solid rgba(255, 253, 248, .82);
}
.v2 .shoph__glyph {
  font-family: var(--font-brush);
  font-size: clamp(88px, 9vw, 132px);
  color: rgba(255, 253, 248, .42);
  line-height: 1;
}

/* ---------- P15 商品图集（mall 详情） ---------- */
.v2 .gal__main {
  border-radius: var(--r-card);
  overflow: hidden;
  border: 1px solid var(--c-line);
  background: var(--c-card);
  box-shadow: var(--shadow-card);
}
.v2 .gal__main img {
  width: 100%;
  aspect-ratio: var(--goods-ratio, 3 / 4);   /* 商品图统一 3:4 */
  object-fit: cover;
  display: block;
}
.v2 .gal__thumbs {
  margin-top: 12px;
  display: flex;
  gap: 10px;
  overflow-x: auto;
  padding-bottom: 4px;
}
.v2 .gal__thumb {
  flex: 0 0 60px;
  width: 60px;
  height: 80px;                /* 商品图统一 3:4（60 : 80），与主图比例一致 */
  padding: 0;
  border: 2px solid transparent;
  border-radius: 10px;
  overflow: hidden;
  background: var(--c-mist);
  transition: border-color .25s;
}
.v2 .gal__thumb img { width: 100%; height: 100%; object-fit: cover; }
.v2 .gal__thumb.is-on { border-color: var(--c-green); }

/* ---------- P16 详情双栏（正文 + 码卡侧栏） ---------- */
.v2 .dbody {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(22px, 3vw, 44px);
  margin-top: clamp(30px, 4vw, 52px);
  padding: 0 var(--wrap-pad);
}
@media (min-width: 900px) {
  .v2 .dbody { grid-template-columns: 1.6fr 1fr; align-items: start; }
  .v2 .dbody__aside { position: sticky; top: 92px; }
}
/* 单栏变体（商品详情：正文全宽，无侧栏） */
@media (min-width: 900px) {
  .v2 .dbody--single { grid-template-columns: 1fr; }
}
/* 商品详情：右栏内嵌码卡的上间距 */
.v2 .mall-code { margin-top: 26px; }

/* ---------- P17 园区指南（about 专用） ---------- */
.v2 .glist {
  background: var(--c-card);
  border: 1px solid var(--c-line);
  border-radius: var(--r-card);
  overflow: hidden;
}
.v2 .glist li {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  padding: 14px 20px;
  border-bottom: 1px dashed var(--c-line);
  font-size: 14px;
}
.v2 .glist li:last-child { border-bottom: 0; }
.v2 .glist span { color: var(--c-sub); }
.v2 .glist strong { font-weight: 600; color: var(--c-ink); text-align: right; }
.v2 .gmerch {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 12px;
}
@media (min-width: 760px) { .v2 .gmerch { grid-template-columns: repeat(3, 1fr); } }
.v2 .gmerch > div {
  padding: 16px 18px;
  background: var(--c-card);
  border: 1px solid var(--c-line);
  border-radius: 12px;
  transition: transform .25s var(--ease), box-shadow .25s var(--ease);
}
.v2 .gmerch > div:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-card);
}
.v2 .gmerch__name {
  display: block;
  font-family: var(--font-brush);
  font-size: 18px;
  letter-spacing: .06em;
  color: var(--c-green-deep);
}
.v2 .gmerch__desc {
  display: block;
  margin-top: 5px;
  font-size: 12.5px;
  color: var(--c-sub);
}

/* ---------- P18 社交页（social 专用） ---------- */
.v2 .sogrid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(16px, 2vw, 24px);
}
@media (min-width: 640px) { .v2 .sogrid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 960px) { .v2 .sogrid { grid-template-columns: repeat(3, 1fr); } }
.v2 .soc {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: clamp(22px, 3vw, 34px) clamp(16px, 2.2vw, 26px);
  background: var(--c-card);
  border: 1px solid var(--c-line);
  border-radius: var(--r-card);
  transition: transform .3s var(--ease), box-shadow .3s var(--ease);
}
.v2 .soc:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-card);
}
.v2 .soc__head {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 16px;
}
.v2 .soc__icon {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  color: var(--accent, var(--c-green));
  border: 1px solid color-mix(in srgb, var(--accent, var(--c-green)) 40%, transparent);
  background: color-mix(in srgb, var(--accent, var(--c-green)) 8%, transparent);
}
.v2 .soc__icon svg { width: 20px; height: 20px; }
.v2 .soc__who { text-align: left; }
.v2 .soc__name { font-size: 18px; font-weight: 700; letter-spacing: .05em; }
.v2 .soc__handle { margin-top: 2px; font-size: 12.5px; color: var(--c-sub); }
.v2 .soc__qr {
  width: min(190px, 60vw);
  aspect-ratio: 1;
  border-radius: 12px;
  overflow: hidden;
  background: #fff;
  border: 1px solid var(--c-line);
  margin-bottom: 16px;
}
.v2 .soc__qr img { width: 100%; height: 100%; object-fit: contain; }
.v2 .soc__fallback {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  font-size: 12.5px;
  line-height: 1.8;
  color: var(--c-sub);
  background: var(--c-mist);
  padding: 16px;
}
.v2 .soc__leaf { width: 28px; height: 28px; fill: var(--c-sub); stroke: var(--c-sub); }
.v2 .soc__intro {
  font-size: 13.5px;
  line-height: 1.9;
  color: var(--c-ink);
  opacity: .88;
  max-width: 32ch;
}
.v2 .soc__hint {
  margin-top: 12px;
  padding-top: 12px;
  width: 100%;
  border-top: 1px dashed var(--c-line);
  font-size: 12px;
  letter-spacing: .02em;
  color: var(--c-sub);
}

/* ---------- P19 返回按钮行（详情页底部） ---------- */
.v2 .pback {
  margin-top: clamp(34px, 5vw, 56px);
  text-align: center;
}
.v2 .pback a {
  display: inline-block;
  padding: 10px 26px;
  background: var(--c-card);
  border: 1px solid var(--c-line);
  border-radius: var(--r-pill);
  font-size: 13.5px;
  letter-spacing: .06em;
  color: var(--c-sub);
  transition: all .25s var(--ease);
}
.v2 .pback a:hover {
  border-color: var(--c-green);
  color: var(--c-green);
  text-decoration: none;
}

/* ---------- P20 内页响应式细化 ---------- */
@media (max-width: 760px) {
  .v2 .phead { padding-top: 76px; }   /* 给固定导航留出空间（手机导航高约 60px） */
  .v2 .facts { gap: 12px 16px; }
  .v2 .dbody { margin-top: 26px; }
}

/* ---------- P12 图文资讯详情（nart） ---------- */
/*
 * 单篇文章容器：宽度与列表卡一致但更窄（68ch 阅读舒适区），居中排，
 * 与 psec / dbody 同一节奏（间距 8/12/16/24/32，圆角 --r-card）。
 */
.v2 .nart {
  max-width: 68ch;
  margin: 0 auto;
}
.v2 .nart__head { margin-bottom: clamp(18px, 2.2vw, 28px); }
.v2 .nart__title {
  margin-top: 10px;
  font-size: clamp(22px, 2.4vw, 32px);
  font-weight: 700;
  line-height: 1.45;
  letter-spacing: .04em;
  color: var(--c-ink);
}
.v2 .nart__meta {
  margin-top: 10px;
  font-size: 13px;
  letter-spacing: .06em;
  color: var(--c-sub);
}
.v2 .nart__cover {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: var(--cover-ratio, 724 / 254);
  object-fit: cover;          /* 等比裁切，不拉伸 */
  border-radius: var(--r-card);
  margin-bottom: clamp(20px, 2.6vw, 34px);
}
.v2 .nart__body { margin-top: clamp(8px, 1vw, 14px); }
/* 正文图片统一约束（WP 编辑器常写死宽高，这里兜底防溢出） */
.v2 .nart__body img {
  display: block;
  height: auto;
  max-width: 100%;
}
.v2 .nart__body figure { margin: 1.4em 0; }
.v2 .nart__body figcaption {
  margin-top: .6em;
  font-size: 13px;
  color: var(--c-sub);
  text-align: center;
}
.v2 .nart__body iframe,
.v2 .nart__body video {
  max-width: 100%;
  border-radius: 12px;
}
.v2 .nart__foot {
  margin-top: clamp(28px, 3.4vw, 48px);
  padding-top: clamp(18px, 2vw, 26px);
  border-top: 1px solid var(--c-line);
}
@media (max-width: 760px) {
  .v2 .nart__title { font-size: 22px; }
}

/* ---------- P13 单列列表（行卡 .prowc + 列表容器 .prow） ---------- */
/*
 * 三个列表页（演出 / 活动 / 图文资讯）共用：单列纵向、卡片横排布局。
 * 与 .pgrid/.pcard（多列网格卡）并行：其它列表页仍走网格版，本段不动它。
 *
 * 卡片组成（与设计稿对齐）：
 *   左侧封面（方形，1:1 或 4/3）/ 右侧主体（tag + price / title / desc / meta /
 *   CTA「查看详情」） / 右侧装饰叶 SVG。
 */
.v2 .prow {
  display: flex;
  flex-direction: column;
  gap: clamp(18px, 2.4vw, 28px);
}
.v2 .prowc {
  position: relative;
  display: grid;
  /* 封面列给足宽度 → 高度按 --cover-ratio(724/254) 同步长出，图片相对旧版(24%)明显更大；
     右侧文字区随之收窄（1fr 自适应），CTA 列保持固定宽。 */
  grid-template-columns: clamp(240px, 40%, 440px) 1fr auto;
  align-items: stretch;
  gap: clamp(16px, 2vw, 28px);
  padding: clamp(16px, 1.8vw, 22px) clamp(18px, 2vw, 26px);
  background: var(--c-card);
  border: 1px solid var(--c-line);
  border-radius: var(--r-card);
  color: inherit;
  overflow: hidden;
  transition: transform .35s var(--ease), box-shadow .35s var(--ease), border-color .35s var(--ease);
}
.v2 .prowc:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-card);
  border-color: transparent;
}
/* 左侧封面：比例统一为 --cover-ratio（724/254 ≈ 2.85:1），等比裁切 */
.v2 .prowc__cover {
  position: relative;
  display: block;
  width: 100%;                                    /* 宽度先定死，aspect-ratio 只负责算高度 */
  aspect-ratio: var(--cover-ratio, 724 / 254);    /* 兜底：组件未传 ratio 时也生效 */
  align-self: center;                             /* 关键：不被 grid 的 stretch 拉高，否则 aspect-ratio 失效；居中让上下留白均分 */
  overflow: hidden;
  border-radius: 12px;
  background: linear-gradient(135deg, rgba(95,127,85,.16), rgba(201,162,39,.10));
  flex-shrink: 0;
}
.v2 .prowc__cover img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform .5s var(--ease);
}
.v2 .prowc:hover .prowc__cover img { transform: scale(1.04); }
.v2 .prowc__ph {
  position: absolute; inset: 0;
  display: grid; place-items: center;
  color: var(--c-sub);
  font-family: var(--font-brush);
  font-size: clamp(18px, 1.6vw, 24px);
  letter-spacing: .08em;
}
/* 右侧主体 */
.v2 .prowc__main {
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0;          /* 允许 title / desc 在窄屏截断省略 */
  padding-right: 8px;
}
.v2 .prowc__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.v2 .prowc__tag {
  display: inline-flex;
  align-items: center;
  height: 24px;
  padding: 0 12px;
  border-radius: var(--r-pill);
  background: rgba(95, 127, 85, .14);
  color: var(--c-green-deep);
  font-size: 12px;
  letter-spacing: .08em;
}
.v2 .prowc__price {
  display: inline-flex;
  align-items: center;
  height: 24px;
  padding: 0 12px;
  border-radius: var(--r-pill);
  background: rgba(201, 162, 39, .14);
  color: #9a7816;
  font-size: 12px;
  letter-spacing: .06em;
  font-weight: 600;
  flex-shrink: 0;
}
.v2 .prowc__price--free {
  background: rgba(95, 127, 85, .14);
  color: var(--c-green-deep);
}
.v2 .prowc__title {
  font-size: clamp(16px, 1.4vw, 19px);
  font-weight: 700;
  line-height: 1.5;
  letter-spacing: .04em;
  color: var(--c-ink);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  line-clamp: 1;
  overflow: hidden;
}
.v2 .prowc__desc {
  font-size: 13px;
  line-height: 1.7;
  color: var(--c-sub);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  overflow: hidden;
}
.v2 .prowc__meta {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: auto;          /* 顶到主体底部，与底部 CTA 对齐 */
  padding-top: 8px;
}
.v2 .prowc__meta-item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--c-sub);
  letter-spacing: .04em;
}
.v2 .prowc__icon {
  width: 16px;
  height: 16px;
  color: var(--c-green);
  flex-shrink: 0;
}
/* 右下角「查看详情」按钮 */
.v2 .prowc__cta {
  align-self: end;
  display: inline-flex;
  align-items: center;
  height: 36px;
  padding: 0 18px;
  border-radius: var(--r-pill);
  background: var(--c-green);
  color: #fff;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: .06em;
  white-space: nowrap;
  transition: background .25s var(--ease), transform .25s var(--ease);
}
.v2 .prowc:hover .prowc__cta {
  background: var(--c-green-deep);
  transform: translateX(2px);
}
/* 右侧装饰叶（与原型呼应） */
.v2 .prowc__leaf {
  position: absolute;
  right: 8px;
  bottom: -18px;
  width: 64px;
  height: 96px;
  color: var(--c-green);
  pointer-events: none;
  opacity: .55;
}
/* 移动端：卡片仍单列，但封面改为通栏置顶 —— 窄屏下若继续放左侧 110px 缩略图，
   2.85:1 只剩 ~38px 高（一条细边），通栏后可保持同一比例且视觉完整。 */
@media (max-width: 760px) {
  .v2 .prowc {
    grid-template-columns: 1fr;
    grid-template-rows: auto;
    row-gap: 12px;
    column-gap: 0;
    padding: 14px 14px 14px 14px;
  }
  .v2 .prowc__cover {
    grid-column: 1;
    grid-row: auto;
    width: 100%;               /* 通栏：宽确定 → 高度由 --cover-ratio 算出，比例与桌面一致 */
  }
  .v2 .prowc__main { padding-right: 0; }
  .v2 .prowc__cta {
    grid-column: 1;
    justify-self: end;
    height: 30px;
    padding: 0 14px;
    font-size: 12px;
  }
  .v2 .prowc__leaf { display: none; }   /* 移动端装饰叶省位 */
  .v2 .prowc__desc { -webkit-line-clamp: 2; line-clamp: 2; }
}

/* ---------- P13 分页升级（页码 + 上下页 + 当前页高亮） ---------- */
/*
 * 在原有 .pager / .pager__btn / .pager__num（保持向后兼容）之上，
 * 新增页码链接 .pager__num-link / 当前态 .pager__num-link--current。
 * 旧用法「<num> 3 / 8</num>」依然有效；列表页改用页码版。
 */
.v2 .pager {
  margin-top: clamp(32px, 4vw, 52px);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 10px;
}
.v2 .pager__btn,
.v2 .pager__num-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 40px;
  height: 40px;
  padding: 0 16px;
  border-radius: var(--r-pill);
  background: var(--c-card);
  border: 1px solid var(--c-line);
  color: var(--c-ink);
  font-size: 13px;
  letter-spacing: .06em;
  transition: background .25s var(--ease), border-color .25s var(--ease), color .25s var(--ease);
}
.v2 .pager__btn:hover,
.v2 .pager__num-link:hover,
.v2 .pager__num-link:focus-visible {
  background: var(--c-green);
  border-color: var(--c-green);
  color: #fff;
  text-decoration: none;
}
/* 当前页：实心柔绿 + 边框隐藏 */
.v2 .pager__num-link--current,
.v2 .pager__num-link--current:hover {
  background: var(--c-green);
  border-color: var(--c-green);
  color: #fff;
  cursor: default;
}
/* 省略号 */
.v2 .pager__gap {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 24px;
  height: 40px;
  color: var(--c-sub);
  font-size: 13px;
  letter-spacing: .12em;
}
/* 不可点（边界上下页） */
.v2 .pager__btn[aria-disabled="true"] {
  opacity: .45;
  pointer-events: none;
}
@media (max-width: 760px) {
  .v2 .pager__btn,
  .v2 .pager__num-link { min-width: 36px; height: 36px; padding: 0 12px; font-size: 12px; }
  .v2 .pager__gap { height: 36px; }
}


/* ---------- P17 首页时效双栏：封面 / 标题进详情（首页不再直接扫码） ---------- */
/*
 * 需求：首页「近期演出」「活动」两栏点击【封面图】或【条目标题】进入对应详情页，
 *       小程序码 / 购票 / 报名统一放到详情页（V2CodeCard）完成，首页不再唤起扫码浮层。
 * 实现：封面 <figure> 与标题 <h4> 各自包一层 NuxtLink；活动栏条目标题与演出栏同款。
 * 注意：hover 放大由原型既有规则 .show-mini:hover / .acts:hover 触发，这里只补链接样式。
 */
.v2 .show-mini__link,
.v2 .acts__link {
  display: block;
  color: inherit;
  text-decoration: none;
}
/* 活动条目标题：与 .show-mini h4（15px / 700 / margin-top 12px）保持一致 */
.v2 .acts h4 {
  margin-top: 12px;
  font-size: 15px;
  font-weight: 700;
  line-height: 1.5;
  letter-spacing: .02em;
  color: var(--c-ink);
}
/* 标题紧跟在 h4 后面时收紧间距，避免与标题行脱节 */
.v2 .acts h4 + p {
  margin-top: 6px;
}
/* 标题链接：hover 变主色 + 下划线，暗示可点击 */
.v2 .show-mini__title,
.v2 .acts__title {
  color: inherit;
  text-decoration: none;
  transition: color .25s var(--ease);
}
.v2 .show-mini__title:hover,
.v2 .show-mini__title:focus-visible,
.v2 .acts__title:hover,
.v2 .acts__title:focus-visible {
  color: var(--c-green);
  text-decoration: underline;
}
