/* ==========================================================================
   ET音乐艺术中心 · 设计系统
   方向 B（象牙白杂志感）+ C（橙色海报感）
   字体：标题宋体 / 正文黑体 / 标签等宽
   ========================================================================== */

:root{
  /* 锁定浅色：必须写 only light，Chrome 强制深色只对这个值退出算法反色。
     写 light 时手机深色模式仍会把纸白底翻黑，深色 logo 直接消失。 */
  color-scheme:only light;
  /* 纸面 */
  --paper:#FBF8F3;
  --paper-2:#F5F0E7;
  --white:#FFFFFF;

  /* 墨色 */
  --ink:#1C1916;
  --ink-2:#3A342D;
  --muted:#6E655A;
  --muted-2:#746B5F;   /* 原 #948A7D 对纸底只有 3.2:1，改深后 4.94:1 */

  /* 品牌橙分三层：品牌色 #FC8403 的对比度只有 2.35（对纸底）/ 2.49（配白字），
     既不能直接当文字色，也不能配白字。填充、文字、白字按钮底必须分开用。
        --orange      只做填充：色块、描边、圆点、下划线、进度
        --orange-ink  纸底/白底上的橙文字，5.0 以上
        --orange-deep 需要白字时的按钮底，4.95
        --ink-on-orange 橙底上直接压墨字，7.44（最强的组合） */
  --orange:#FC8403;
  --orange-ink:#AA5200;
  --orange-deep:#B45500;
  --ink-on-orange:#1A1208;
  --orange-hover:#EF7500;  /* 主按钮 hover：仍是墨字，6.0+ */
  --orange-d:#DE6E00;      /* 仅历史兼容，勿再用于文字 */
  --orange-l:#FFF1DE;

  --line:rgba(28,25,22,.12);
  --line-2:rgba(28,25,22,.07);

  --serif:"Noto Serif SC","Source Han Serif SC","Songti SC",STSong,SimSun,serif;
  --sans:"PingFang SC","Microsoft YaHei","Noto Sans SC",system-ui,-apple-system,sans-serif;
  --mono:"JetBrains Mono","Cascadia Mono",Consolas,monospace;

  --r:4px;
  --wrap:1200px;
  --ease:cubic-bezier(.22,1,.36,1);
}

*{margin:0;padding:0;box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  background:var(--paper);color:var(--ink);
  font-family:var(--sans);font-size:16px;line-height:1.85;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
::selection{background:rgba(252,132,3,.22)}
:focus-visible{outline:2px solid var(--orange);outline-offset:3px}

.wrap{max-width:var(--wrap);margin:0 auto;padding:0 32px}
@media(max-width:640px){.wrap{padding:0 20px}}

/* ---------- 通用排版 ---------- */
.serif{font-family:var(--serif)}
.kicker{
  font-family:var(--mono);font-size:11px;letter-spacing:.28em;
  color:var(--orange-ink);text-transform:uppercase;display:flex;align-items:center;gap:10px;
}
.kicker::before{content:"";width:24px;height:1px;background:var(--orange);display:block}
.kicker.plain::before{display:none}

h1,h2,h3,h4{font-family:var(--serif);font-weight:600;line-height:1.35;letter-spacing:.01em}
h1{font-size:clamp(34px,4.4vw,60px);line-height:1.22}
h2{font-size:clamp(26px,3vw,38px)}
h3{font-size:22px}
em.acc{font-style:normal;color:var(--orange-ink)}
.lead{font-size:17px;color:var(--ink-2);line-height:2}
.dim{color:var(--muted)}

.sec{padding:104px 0}
.sec.tight{padding:72px 0}
.sec-head{margin-bottom:44px;max-width:720px}
.sec-head h2{text-wrap:balance}
.sec-head .kicker{margin-bottom:14px}
.sec-head p{color:var(--muted);margin-top:12px;font-size:15.5px}
.sec-head.split{max-width:none;display:flex;align-items:flex-end;justify-content:space-between;gap:32px}
@media(max-width:760px){.sec{padding:68px 0}.sec-head.split{flex-direction:column;align-items:flex-start;gap:12px}}

/* 链接箭头 */
.more{
  font-size:13.5px;color:var(--ink);display:inline-flex;align-items:center;gap:8px;
  border-bottom:1px solid var(--line);padding-bottom:3px;transition:.25s var(--ease);
}
.more::after{content:"→";transition:transform .25s var(--ease)}
.more:hover{color:var(--orange-ink);border-color:var(--orange)}
.more:hover::after{transform:translateX(4px)}

/* ---------- 按钮 ---------- */
/* 主 CTA 走「橙底 + 墨字」（7.44:1）：品牌色不用改，白字换成墨字就把可读性从 2.49 拉到 7.44 */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  height:50px;padding:0 26px;font-size:14.5px;letter-spacing:.04em;
  border-radius:var(--r);border:1px solid transparent;cursor:pointer;
  transition:.25s var(--ease);white-space:nowrap;
}
.btn-primary{background:var(--orange);color:var(--ink-on-orange);font-weight:600}
.btn-primary:hover{background:var(--orange-hover);transform:translateY(-1px)}
.btn-ghost{background:transparent;color:var(--ink);border-color:var(--line)}
.btn-ghost:hover{border-color:var(--ink);background:rgba(28,25,22,.03)}
.btn-dark{background:var(--ink);color:var(--paper);font-weight:500}
.btn-dark:hover{background:#000}
.btn-sm{height:42px;padding:0 20px;font-size:13px}

/* ---------- 顶部导航 ---------- */
.hd{
  position:sticky;top:0;z-index:60;background:rgba(251,248,243,.92);
  backdrop-filter:blur(12px);border-bottom:1px solid var(--line-2);
  transition:box-shadow .3s;
}
.hd.scrolled{box-shadow:0 6px 24px -18px rgba(28,25,22,.5)}
.hd-in{display:flex;align-items:center;gap:36px;height:82px}
.hd-logo img{height:38px;width:auto}
.hd-nav{display:flex;gap:30px;margin-left:auto;align-items:center}
.hd-nav a{
  font-size:14.5px;color:var(--ink-2);position:relative;padding:6px 0;transition:color .2s;
  white-space:nowrap;flex:none;
}
.hd-nav a::after{
  content:"";position:absolute;left:0;right:100%;bottom:0;height:1.5px;
  background:var(--orange);transition:right .3s var(--ease);
}
.hd-nav a:hover,.hd-nav a.on{color:var(--orange-ink)}
.hd-nav a:hover::after,.hd-nav a.on::after{right:0}
.hd-tel{font-family:var(--mono);font-size:13px;color:var(--muted);letter-spacing:.02em}
.hd-burger{display:none;margin-left:auto;width:44px;height:44px;border:1px solid var(--line);
  background:transparent;border-radius:var(--r);cursor:pointer;position:relative}
.hd-burger span{position:absolute;left:12px;right:12px;height:1.5px;background:var(--ink);transition:.3s}
.hd-burger span:nth-child(1){top:16px}
.hd-burger span:nth-child(2){top:22px}
.hd-burger span:nth-child(3){top:28px}
.hd-burger.on span:nth-child(1){top:22px;transform:rotate(45deg)}
.hd-burger.on span:nth-child(2){opacity:0}
.hd-burger.on span:nth-child(3){top:22px;transform:rotate(-45deg)}
@media(max-width:1240px){
  .hd-in{gap:22px}
  .hd-nav{gap:20px}
  .hd-nav a{font-size:14px}
}
@media(max-width:1280px){
  .hd-tel{display:none}
}
@media(max-width:1080px){
  .hd-nav{display:none}
  .hd-burger{display:block}
  .hd-in > .btn-sm{margin-left:auto !important}
  .hd-burger{margin-left:14px}
}
/* 移动抽屉 */
/* 桌面端必须整块 display:none —— 只靠 opacity:0 + pointer-events:none 时，
   键盘 Tab 仍会跳进这个看不见的菜单（8 个隐形焦点）。 */
@media(min-width:1081px){.drawer{display:none}}
.drawer{
  position:fixed;inset:82px 0 0;background:var(--paper);z-index:55;
  padding:28px 24px 40px;transform:translateY(-8px);opacity:0;pointer-events:none;
  transition:.28s var(--ease);overflow-y:auto;overscroll-behavior:contain;
}
.drawer.open{transform:none;opacity:1;pointer-events:auto}
/* 只命中抽屉的直接子链接（导航项）；用 > 是为了放行 .drawer-foot 里的电话/说明，
   同时避开 .btn 特异性冲突 */
.drawer > a{
  display:block;padding:16px 0;border-bottom:1px solid var(--line-2);
  font-size:17px;font-family:var(--serif);color:var(--ink);transition:color .2s;
}
.drawer > a[aria-current="page"]{color:var(--orange-ink);border-bottom-color:var(--orange)}
.drawer-foot{margin-top:26px;display:grid;gap:6px}
.drawer-foot p{font-size:12.5px;color:var(--muted);line-height:1.85}
.drawer-tel{
  display:inline-flex;align-items:center;gap:10px;align-self:start;
  font-family:var(--mono);font-size:16px;color:var(--ink);
  border-bottom:1px solid var(--line);padding-bottom:4px;
}
.drawer-tel i{font-style:normal;font-size:11px;letter-spacing:.14em;color:var(--orange-ink)}

/* ---------- 首屏 ---------- */
.hero{position:relative;overflow:hidden}
.hero-in{display:grid;grid-template-columns:1.02fr .98fr;gap:56px;align-items:center;padding-top:72px;padding-bottom:84px}
.hero-copy .kicker{margin-bottom:22px}
.hero h1{margin-bottom:20px}
.hero-sub{font-size:16.5px;color:var(--ink-2);line-height:2;max-width:460px;margin-bottom:30px}
.hero-btns{display:flex;gap:14px;flex-wrap:wrap}
.hero-trust{display:flex;gap:22px;margin-top:34px;padding-top:22px;border-top:1px solid var(--line-2);flex-wrap:wrap}
.hero-trust div{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:7px}
.hero-trust i{width:5px;height:5px;background:var(--orange);border-radius:50%;display:block}

.hero-media{position:relative;isolation:isolate}
.hero-media .ph{
  position:relative;overflow:hidden;border-radius:var(--r);z-index:1;
  box-shadow:0 40px 80px -50px rgba(28,25,22,.6);
}
.hero-media .ph img{width:100%;height:520px;object-fit:cover}
.hero-media::before{  /* 橙色偏移框，呼应教师卡描边（C 的海报感） */
  content:"";position:absolute;inset:22px -22px -22px 22px;
  border:1.5px solid var(--orange);border-radius:var(--r);z-index:0;
}
.hero-ip{
  position:absolute;left:-46px;bottom:-30px;width:168px;z-index:2;
  filter:drop-shadow(0 18px 24px rgba(28,25,22,.18));
  animation:float 5s ease-in-out infinite;
}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
@media(prefers-reduced-motion:reduce){.hero-ip{animation:none}}
@media(max-width:960px){
  .hero-in{grid-template-columns:1fr;gap:34px;padding-top:40px;padding-bottom:56px}
  .hero-media .ph img{height:340px}
  .hero-media::before{inset:14px -14px -14px 14px}
  .hero-ip{width:112px;left:-8px;bottom:-18px}
}
/* 首屏封面是近方形的（740×687），而面板高度写死 520px：
   窄笔记本（961–1140）面板会被压成 0.85 的竖条，左右各裁掉一成，封面自带的歌名头一个字会被切；
   平板（601–960）单列后更夸张，变成 2:1 的横条，上下裁掉一半，标题基本没了。
   两段都按图片比例把面板调回接近方寸，封面就不用被硬裁了。 */
@media(min-width:961px) and (max-width:1140px){
  .hero-media .ph img{height:430px}
}
@media(min-width:601px) and (max-width:960px){
  /* 3:2 的框套方寸的图，竖直方向还会裁掉近三成 —— 取偏上的位置，
     保住封面自带的歌名与人脸（脚那块本来也在画面边缘） */
  .hero-media .ph img{height:auto;aspect-ratio:3/2;object-position:50% 8%}
}

/* ---------- 数据条（墨黑 + 橙数字） ---------- */
/* ---------- 数据条 ----------
   原来是纯黑底 + 橙字，跟整站纸感差太远。改成暖砂浅底：
   数字用 --orange-ink（纸底 5.06:1），可点的那两项 hover 时才压深并露出「看合集」。 */
.stats{
  background:linear-gradient(180deg,#FAF4EA 0%,#F6EFE2 100%);
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);
}
/* 用 flex 等分而不是固定列数：条目增删后自动铺满，不会留空格子 */
.stats-in{display:flex}
.stats-in > div,.stats-in > a{
  flex:1 1 0;min-width:0;padding:34px 8px 30px;text-align:center;
  border-right:1px solid var(--line-2);
  color:inherit;text-decoration:none;
  transition:background .24s var(--ease);
}
.stats-in > *:last-child{border-right:none}
.stats b{
  display:block;font-family:var(--serif);font-size:42px;line-height:1.15;
  color:var(--orange-ink);font-weight:600;letter-spacing:.01em;
  font-variant-numeric:tabular-nums;
}
.stats .st-label{
  display:block;margin-top:8px;font-size:12.5px;color:var(--muted);letter-spacing:.08em;
}
/* 年份区间：两个年份比数字略小，箭头用品牌橙点一下 */
.stats .st-range b{display:flex;align-items:baseline;justify-content:center;gap:10px}
.stats .st-yr{font-size:37px}
.stats .st-now{color:var(--ink-2)}
.stats .st-arrow{
  font-family:var(--sans);font-style:normal;font-size:19px;color:var(--orange);
  transform:translateY(-2px);
}
/* 演出赛事 / 公益行动：整格可点，进对应分类页 */
.stats a.st-num:hover{background:rgba(252,132,3,.07)}
.stats a.st-num:hover b{color:var(--orange-deep)}
.stats .st-go{
  display:block;font-style:normal;font-size:11px;color:var(--orange-ink);
  margin-top:6px;opacity:.5;transition:.24s var(--ease);
}
.stats a.st-num:hover .st-go{opacity:1}
@media(hover:none){
  .stats .st-go{opacity:.8}
}
@media(max-width:900px){
  .stats-in{flex-wrap:wrap}
  .stats-in > div,.stats-in > a{flex:1 1 50%;padding:24px 6px 20px;border-bottom:1px solid var(--line-2)}
  .stats-in > *:nth-child(2n){border-right:none}
  .stats-in > *:nth-last-child(-n+2){border-bottom:none}
}
@media(max-width:720px){
  .stats b{font-size:31px}
  .stats .st-yr{font-size:27px}
  .stats-in > div,.stats-in > a{padding:20px 4px 18px}
  .stats .st-label{font-size:11.5px;letter-spacing:.04em}
}

/* ---------- 四条业务线 ---------- */
.biz{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.biz a{
  padding:26px 22px 24px;background:var(--white);border:1px solid var(--line-2);
  border-radius:var(--r);display:block;transition:.28s var(--ease);position:relative;overflow:hidden;
}
.biz a::after{
  content:"";position:absolute;left:0;bottom:0;height:2px;width:0;background:var(--orange);transition:width .35s var(--ease);
}
.biz a:hover{border-color:var(--line);transform:translateY(-3px);box-shadow:0 22px 40px -34px rgba(28,25,22,.5)}
.biz a:hover::after{width:100%}
.biz .n{font-family:var(--mono);font-size:10.5px;color:var(--orange-ink);letter-spacing:.18em;margin-bottom:14px}
.biz h3{font-size:19px;margin-bottom:8px}
.biz p{font-size:13px;color:var(--muted);line-height:1.8}
@media(max-width:900px){.biz{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.biz{grid-template-columns:1fr}}

/* ---------- 课程卡 ---------- */
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
.card{
  background:var(--white);border:1px solid var(--line-2);border-radius:var(--r);
  overflow:hidden;transition:.32s var(--ease);display:flex;flex-direction:column;
}
.card:hover{transform:translateY(-5px);box-shadow:0 30px 50px -38px rgba(28,25,22,.55);border-color:rgba(252,132,3,.4)}
.card .ph{position:relative;overflow:hidden;aspect-ratio:4/3}
.card .ph img{width:100%;height:100%;object-fit:cover;transition:transform .6s var(--ease)}
.card:hover .ph img{transform:scale(1.04)}
.card .idx{
  position:absolute;top:12px;left:12px;font-family:var(--mono);font-size:10.5px;
  letter-spacing:.12em;background:rgba(28,25,22,.62);color:#fff;padding:3px 8px;border-radius:2px;
  backdrop-filter:blur(4px);
}
.card .body{padding:20px 22px 24px;flex:1;display:flex;flex-direction:column}
.card .meta{font-family:var(--mono);font-size:10.5px;color:var(--orange-ink);letter-spacing:.16em;margin-bottom:9px}
.card h3{font-size:21px;margin-bottom:6px}
.card .tag{font-size:13.5px;color:var(--ink-2);line-height:1.75;margin-bottom:14px}
.card .foot{margin-top:auto;padding-top:14px;border-top:1px solid var(--line-2);
  font-size:12px;color:var(--muted);display:flex;justify-content:space-between;align-items:center}
@media(max-width:900px){.cards{grid-template-columns:repeat(2,1fr);gap:18px}}
@media(max-width:560px){.cards{grid-template-columns:1fr}}

/* 补齐栅格的预约卡（首页课程区第 9 格）：橙底墨字 7.44:1 */
.card-cta{background:var(--orange);border-color:transparent;color:var(--ink-on-orange);position:relative;overflow:hidden}
.card-cta:hover{background:var(--orange);border-color:transparent;box-shadow:0 30px 50px -34px rgba(180,85,0,.6)}
.card-cta .body{padding:34px 28px;justify-content:center}
.card-cta .meta{color:rgba(26,18,8,.55)}
.card-cta h3{font-family:var(--serif);font-size:26px;line-height:1.35}
.card-cta .tag{color:rgba(26,18,8,.78);margin-bottom:0}
.card-cta .cta-go{
  align-self:flex-start;display:inline-flex;align-items:center;gap:8px;margin-top:22px;
  font-size:14px;font-weight:500;padding-bottom:5px;border-bottom:2px solid rgba(26,18,8,.32);
  transition:gap .25s var(--ease),border-color .25s var(--ease);
}
.card-cta:hover .cta-go{gap:14px;border-color:rgba(26,18,8,.62)}
.card-cta .cta-mark{
  position:absolute;right:-16px;bottom:-52px;font-family:var(--serif);font-size:210px;line-height:1;
  color:rgba(26,18,8,.09);pointer-events:none;user-select:none;
}

/* 课程目录页：4 列（8 门课 = 4+4，不留空档） */
.cards-4{grid-template-columns:repeat(4,1fr);gap:20px}
@media(max-width:1180px){.cards-4{grid-template-columns:repeat(3,1fr)}}
@media(max-width:900px){.cards-4{grid-template-columns:repeat(2,1fr);gap:18px}}

/* ---------- 手机端课程：横向条列（缩略图 + 文字，一屏能看 4 条） ----------
   动机：8 张竖卡叠起来约 3700px，翻半天看不到底。
   改法：≤560px 卡片转 90°，图固定 104px 见方、文字缩到 3 行以内，单条约 120px。
   注意 .ph 用 position:absolute 填充，不能写 height:100%（img 的 width/height 属性会把高度锁死）。 */
@media(max-width:560px){
  .cards,.cards-4{grid-template-columns:1fr;gap:10px}
  .card{flex-direction:row;border-radius:12px}
  .card:hover{transform:none;box-shadow:none;border-color:var(--line-2)}
  .card .ph{flex:0 0 104px;width:104px;aspect-ratio:auto;align-self:stretch;min-height:104px}
  .card .ph img{position:absolute;inset:0;width:100%;height:100%}
  .card .idx{top:6px;left:6px;font-size:9px;padding:2px 5px;letter-spacing:.08em;z-index:2}
  .card:hover .ph img{transform:none}
  .card .body{padding:12px 14px 13px;min-width:0}
  .card .meta{margin-bottom:5px;font-size:9.5px;letter-spacing:.12em}
  .card h3{font-size:17px;margin-bottom:4px}
  .card .tag{
    font-size:12.5px;line-height:1.6;margin-bottom:0;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  }
  .card .foot{margin-top:6px;padding-top:0;border-top:0;font-size:11px}
  .card .foot span:last-child{display:none}
  /* 首页第 9 格橙底预约卡：同一条列形态，箭头收小免得压字 */
  .card-cta .body{padding:16px 16px 17px;justify-content:center}
  .card-cta h3{font-size:19px}
  .card-cta .tag{margin-bottom:0}
  .card-cta .cta-go{margin-top:10px;font-size:12.5px;padding-bottom:3px}
  /* 条列形态下卡片只有 ~120px 高，210px 的大箭头会横穿正文，手机端直接不要 */
  .card-cta .cta-mark{display:none}
}

/* ---------- 橙色区块（C） ---------- */
.orange-block{background:var(--orange);color:#1A1208;position:relative;overflow:hidden}
.orange-block::before{
  content:"";position:absolute;right:-120px;top:-120px;width:420px;height:420px;
  border:1px solid rgba(26,18,8,.14);border-radius:50%;
}
.ob-in{display:grid;grid-template-columns:1.1fr .9fr;gap:60px;align-items:center;padding:84px 32px;position:relative}
.ob-in > *{min-width:0}
.ob-in h2{font-size:clamp(28px,3.4vw,44px);line-height:1.3;margin-bottom:18px}
/* 橙块上的正文：rgba(.78) 实测 4.12，不到 4.5，提到 .88 */
.ob-in p{color:rgba(26,18,8,.88);font-size:15.5px;line-height:2;max-width:460px}
.ob-list{display:flex;gap:14px;flex-wrap:wrap;margin-top:26px}
.ob-list span{
  font-size:12.5px;border:1px solid rgba(26,18,8,.25);padding:6px 14px;border-radius:999px;
}
.ob-media{position:relative}
.ob-media .ph{width:100%;height:420px;object-fit:cover;border-radius:var(--r);box-shadow:0 30px 60px -40px rgba(0,0,0,.6)}
.ob-media .ip{
  position:absolute;right:-16px;bottom:-28px;width:150px;height:auto;max-width:none;
  object-fit:contain;z-index:2;pointer-events:none;
  filter:drop-shadow(0 14px 20px rgba(0,0,0,.22));
}
@media(max-width:900px){
  .ob-in{grid-template-columns:1fr;gap:32px;padding:60px 32px}
  .ob-media .ph{height:300px}
  .ob-media .ip{width:100px;right:-6px;bottom:-20px}
}
@media(max-width:640px){
  .ob-in{padding:52px 20px}
  .ob-media .ph{height:230px}
  .ob-media .ip{width:84px;right:0;bottom:-16px}
}

/* ---------- 师资 ---------- */
/* 一览网格：4 列 × 3 行，11 位一屏半看完；海报按 3:2 原比例显示，不裁切 */
.tw-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:32px 24px}
@media(max-width:1180px){.tw-grid{grid-template-columns:repeat(3,1fr);gap:28px 18px}}
@media(max-width:820px){.tw-grid{grid-template-columns:repeat(2,1fr);gap:24px 14px}}

.tw-cell{position:relative;display:flex;flex-direction:column}
.tw-cell-fig{
  position:relative;overflow:hidden;border-radius:var(--r);
  background:var(--paper-2);aspect-ratio:3/2;
}
.tw-cell-fig img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;transition:transform .9s var(--ease)}
.tw-cell:hover .tw-cell-fig img{transform:scale(1.04)}
.tw-cell-fig::after{
  content:"";position:absolute;inset:0;border-radius:var(--r);pointer-events:none;
  border:1px solid rgba(28,25,22,.1);transition:border-color .35s;
}
.tw-cell:hover .tw-cell-fig::after{border-color:var(--orange)}

/* 第 12 格：预约卡（与图卡等高，把 4×3 网格填满） */
.tw-cta-in{
  flex:1;display:flex;flex-direction:column;justify-content:center;gap:20px;
  background:var(--orange);color:#1A1208;border-radius:var(--r);padding:24px 22px;
  transition:background .3s var(--ease),color .3s var(--ease);
}
.tw-cta:hover .tw-cta-in{background:var(--orange-deep);color:#fff}
.tw-cta h3{font-family:var(--serif);font-size:clamp(19px,1.6vw,24px);line-height:1.45;font-weight:600}
.tw-cta-go{
  display:inline-flex;align-items:center;gap:6px;align-self:flex-start;
  font-size:13px;border-bottom:1px solid currentColor;padding-bottom:3px;
}
.tw-cta-go i{font-style:normal;transition:transform .3s var(--ease)}
.tw-cta:hover .tw-cta-go i{transform:translateX(4px)}

.tw-no{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;color:var(--orange-ink);flex:none}
.tw-cell-meta{
  display:flex;align-items:baseline;gap:9px;
  margin-top:14px;padding-top:12px;border-top:1px solid var(--line-2);
}
.tw-cell-meta h3{font-family:var(--serif);font-size:19px;font-weight:600;letter-spacing:.06em;line-height:1.4}
.tw-cell-meta h3 a{transition:color .2s}
.tw-cell:hover .tw-cell-meta h3 a{color:var(--orange-ink)}
.tw-cell-meta .tw-sub{margin-left:auto;font-size:11.5px;color:var(--muted);letter-spacing:.04em;white-space:nowrap}
@media(max-width:820px){
  .tw-cell-meta{gap:6px;margin-top:10px;padding-top:0;border-top:0}
  .tw-cell-meta .tw-no{display:none}
  .tw-cell-meta h3{font-size:15px}
  .tw-cell-meta .tw-sub{font-size:10.5px}
}
/* 详情页大图：容器定宽，图按 3:2 原比例自适应，绝不拉伸 */
/* 师资详情：海报独占一行满宽。原来是 740px 栏宽，1600 宽的海报缩到 0.46 倍，
   履历正文只剩 7px —— 详情页存在的意义就是看清资历，所以宁可把信息卡移到下方。 */
/* 师资详情栅格用类而不是 inline style —— 否则会盖掉 900px 以下的单列断点，手机上被挤成 38px 竖条。 */
.detail.detail-t{grid-template-columns:minmax(0,1fr);gap:32px}
.twcard{position:relative}
.tw-figure{margin:0}
.tw-figure .tw-media{box-shadow:0 38px 76px -52px rgba(28,25,22,.7)}
.tw-figure .tw-media img{object-fit:contain}

/* 海报容器（首页轨道 / 详情大图通用） */
.tw-media{position:relative;display:block;border-radius:5px;overflow:hidden;background:var(--paper-2);
  transition:box-shadow .5s var(--ease)}
.tw-media::after{content:"";position:absolute;inset:0;border-radius:5px;pointer-events:none;
  border:1.5px solid transparent;transition:border-color .35s}
.twcard:hover .tw-media::after{border-color:var(--orange)}
.tw-media img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;transition:transform 1s var(--ease)}
.twcard:hover .tw-media img{transform:scale(1.012)}

/* 放大按钮：桌面 hover 出现，触屏常显 */
.tw-zoom{
  position:absolute;top:14px;right:14px;z-index:2;
  display:inline-flex;align-items:center;gap:6px;
  padding:7px 13px 7px 10px;border:0;border-radius:999px;cursor:pointer;
  background:rgba(18,15,12,.74);color:#fff;font:inherit;font-size:12px;letter-spacing:.02em;
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  opacity:0;transform:translateY(-6px);transition:opacity .3s,transform .3s,background .3s;
}
.tw-zoom svg{width:15px;height:15px}
.twcard:hover .tw-zoom,.tw-zoom:focus-visible{opacity:1;transform:none}
.tw-zoom:hover{background:var(--orange-deep)}
@media(hover:none){.tw-zoom{opacity:1;transform:none}}
@media(max-width:900px){  /* 手机上挪到右下角并只留图标，不压住海报右上角的标语 */
  .tw-zoom{top:auto;bottom:12px;right:12px;padding:9px;opacity:1;transform:none}
  .tw-zoom span{display:none}
  .tw-zoom svg{width:18px;height:18px}
}

/* 浅色底卡片（首页轨道）：标题在图下 */
.twcard.light{background:#fff;border:1px solid var(--line-2);border-radius:5px;overflow:hidden;
  box-shadow:0 22px 46px -34px rgba(28,25,22,.5);transition:transform .5s var(--ease),box-shadow .5s var(--ease)}
.twcard.light:hover{transform:translateY(-4px);box-shadow:0 32px 60px -30px rgba(28,25,22,.55)}
.twcard.light .tw-media{border-radius:0;box-shadow:none;background:var(--paper-2)}
.twcard.light:hover .tw-media{box-shadow:none}
.twcard.light .tw-media::after{border-radius:0}
.tw-meta{
  display:flex;align-items:center;gap:12px;padding:14px 18px;background:#fff;color:var(--ink);
  border-top:1px solid rgba(28,25,22,.09);
}
.tw-meta b{font-family:var(--serif);font-size:16.5px;font-weight:600;letter-spacing:.05em}
.tw-meta .tw-sub{color:var(--muted)}
.tw-meta .tw-go{margin-left:auto;font-size:12.5px;color:var(--orange-ink);display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.twcard.light:hover .tw-go i{transform:translateX(4px)}
@media(max-width:900px){
  .tw-meta{padding:11px 14px;gap:9px}
  .tw-meta b{font-size:15px}
}

/* 首页横向轨道：一屏露出 3 张多，可滑可拖 */
.tw-rail{
  display:grid;grid-auto-flow:column;grid-auto-columns:calc((100% - 32px) / 3.15);gap:16px;
  overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;
  padding-bottom:6px;
}
.tw-rail::-webkit-scrollbar{display:none}
.tw-rail > *{scroll-snap-align:start}
.tw-rail .twcard{border:1px solid var(--line-2)}
/* 拖动中：关掉 snap，并把光标换成抓手 */
.tw-rail.dragging{scroll-snap-type:none;cursor:grabbing;scroll-behavior:auto}
.tw-rail.dragging *{cursor:grabbing}
@media(hover:hover){.tw-rail{cursor:grab}}
@media(max-width:980px){.tw-rail{grid-auto-columns:calc((100% - 16px) / 2.15)}}
@media(max-width:760px){.tw-rail{grid-auto-columns:78%}}

/* 轨道进度条：当前位置 / 总长 */
.rail-bar{height:2px;background:var(--line-2);margin-top:14px;border-radius:2px;overflow:hidden}
.rail-bar > i{display:block;height:100%;width:8%;background:var(--orange);border-radius:2px;transition:width .18s linear}

.rail-ctrl{display:flex;align-items:center;gap:10px;margin-top:18px}
.rail-ctrl .more{margin-left:auto}
.rail-hint{font-size:12px;color:var(--muted-2);letter-spacing:.04em}
@media(max-width:640px){.rail-hint{display:none}}
.rail-btn{
  display:grid;place-items:center;width:40px;height:40px;border-radius:999px;cursor:pointer;
  border:1px solid var(--line);background:transparent;color:var(--ink);transition:.25s var(--ease);
}
.rail-btn:hover:not(:disabled){background:var(--ink);color:#fff;border-color:var(--ink)}
.rail-btn:disabled{opacity:.28;cursor:default}
.rail-btn svg{width:16px;height:16px}

/* 全屏看大图 */
.lb{
  width:min(94vw,1400px);max-height:94vh;
  margin:auto;   /* 全局 *{margin:0} 会清掉 dialog 的自动居中，必须显式写回 */
  padding:0;border:0;background:transparent;overflow:hidden;color:#fff;
}
.lb::backdrop{background:rgba(10,8,6,.94);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.lb-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:2px 2px 12px;font-size:12.5px;letter-spacing:.08em;
  color:rgba(255,255,255,.72);text-shadow:0 1px 8px rgba(0,0,0,.55)}
.lb-btns{display:flex;align-items:center;gap:8px;flex:none}
.lb-fit{
  height:34px;padding:0 14px;border-radius:999px;cursor:pointer;
  border:1px solid rgba(255,255,255,.28);background:transparent;color:#fff;
  font:inherit;font-size:12px;letter-spacing:.06em;transition:.25s;
}
.lb-fit:hover{background:rgba(255,255,255,.14)}
.lb-x{display:grid;place-items:center;width:34px;height:34px;flex:none;border-radius:999px;cursor:pointer;
  border:1px solid rgba(255,255,255,.28);background:transparent;color:#fff;transition:.25s}
.lb-x:hover{background:#fff;color:#0B0906;border-color:#fff}
.lb-x svg{width:16px;height:16px}
/* 海报类素材是 1600 宽的整幅设计稿，屏幕上永远被缩到看不清小字 ——
   「原始尺寸」按钮把图恢复到 1:1，超出部分在容器里滚动查看 */
.lb-stage{max-height:calc(94vh - 52px);overflow:auto;overscroll-behavior:contain}
.lb-img{display:block;width:auto;height:auto;margin:0 auto;max-width:100%;max-height:calc(94vh - 52px);border-radius:3px}
.lb-img.actual{max-width:none;max-height:none}

/* ---------- 发展历程时间轴（年 / 月 / 事件） ---------- */
.tl{position:relative;padding-left:120px}
.tl::before{content:"";position:absolute;left:96px;top:8px;bottom:40px;width:1px;background:var(--line)}
.tl-hint{font-size:13px;color:var(--muted);line-height:1.8;margin:0 0 26px}
.tl-year{position:relative;margin-bottom:38px}
.tl-year > .y{
  position:absolute;left:-120px;top:-4px;font-family:var(--serif);font-size:30px;
  color:var(--orange-ink);letter-spacing:.02em;width:96px;
}
.tl-year > .y::after{
  content:"";position:absolute;right:-15px;top:14px;width:9px;height:9px;border-radius:50%;
  background:var(--paper);border:1.5px solid var(--orange);
}
.tl-list{list-style:none;display:block}
.tl-it{display:flex;gap:14px;align-items:baseline;padding:6px 0}
.tl-m{
  flex:0 0 46px;text-align:right;font-size:12.5px;color:var(--orange-ink);
  font-variant-numeric:tabular-nums;letter-spacing:.02em;
}
.tl-m.none{color:var(--muted-2);font-size:11px;letter-spacing:0}
.tl-t{font-size:14.5px;color:var(--ink-2);line-height:1.65}
.tl-src{
  margin-left:10px;font-size:12px;color:var(--muted);white-space:nowrap;text-decoration:none;
  border-bottom:1px dotted var(--line);transition:color .2s,border-color .2s;
}
.tl-src:hover{color:var(--orange-ink);border-color:var(--orange)}
@media(max-width:640px){
  .tl{padding-left:66px}
  .tl::before{left:46px}
  .tl-year > .y{left:-66px;font-size:17px;width:46px;letter-spacing:0}
  .tl-year > .y::after{right:-5px;top:8px;width:7px;height:7px}
  .tl-year{margin-bottom:30px}
  .tl-it{gap:9px;padding:5px 0}
  .tl-m{flex-basis:34px;font-size:11px}
  .tl-t{font-size:14px}
  /* 手机上标题一长，「原文」就会被挤到下一行；固定成独立一行并加个 ↳，表明是附属信息 */
  .tl-src{display:block;margin:2px 0 0;padding:5px 0;font-size:11px;border:none;color:var(--orange-ink)}
  .tl-src::before{content:"↳ ";color:var(--muted-2)}
}

/* ---------- 资质荣誉 ---------- */
.honors{display:grid;grid-template-columns:repeat(2,1fr);gap:22px}
.honor{background:var(--white);border:1px solid var(--line-2);border-radius:var(--r);padding:26px 26px 22px}
.honor h3{font-size:16px;display:flex;align-items:center;gap:10px;margin-bottom:16px}
.honor h3::before{content:"";width:3px;height:16px;background:var(--orange);display:block}
.honor ul{list-style:none;display:grid;gap:9px}
.honor li{font-size:13.5px;color:var(--ink-2);line-height:1.75;padding-left:16px;position:relative}
.honor li::before{content:"·";position:absolute;left:4px;color:var(--orange);font-weight:700}
@media(max-width:760px){.honors{grid-template-columns:1fr}}

/* 资质证书墙：两张实拍并排，点开放大 */
.honor-wall{display:grid;grid-template-columns:1.3fr 1fr;gap:16px;margin-top:28px}
.honor-wall a{display:block;overflow:hidden;border-radius:var(--r);background:var(--paper-2)}
.honor-wall img{display:block;width:100%;height:320px;object-fit:cover;transition:transform .8s var(--ease)}
.honor-wall a:hover img{transform:scale(1.03)}
@media(max-width:680px){.honor-wall{grid-template-columns:1fr}.honor-wall img{height:220px}}

/* ---------- 校区环境：拼贴画廊 ---------- */
/* 4 列 × 200px，第 1 张占 2×2；9 张正好铺满（4 + 8 = 12 格 = 3 行） */
.env-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:200px;gap:12px;margin-top:26px}
.env-grid a{position:relative;display:block;overflow:hidden;border-radius:var(--r);background:var(--paper-2)}
.env-grid a:first-child{grid-column:span 2;grid-row:span 2}
.env-grid img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .9s var(--ease),filter .4s}
.env-grid a:hover img{transform:scale(1.06)}
.env-grid a::after{content:"";position:absolute;inset:0;background:rgba(20,14,8,0);transition:background .3s var(--ease);pointer-events:none}
.env-grid a:hover::after{background:rgba(20,14,8,.10)}
.env-grid .zm{
  position:absolute;right:12px;bottom:12px;width:34px;height:34px;border-radius:999px;
  display:grid;place-items:center;background:rgba(255,255,255,.92);color:#1A1208;
  opacity:0;transform:translateY(6px);transition:.28s var(--ease);pointer-events:none;
}
.env-grid .zm svg{width:17px;height:17px}
.env-grid a:hover .zm,.env-grid a:focus-visible .zm{opacity:1;transform:none}
@media(max-width:900px){
  .env-grid{grid-template-columns:repeat(3,1fr);grid-auto-rows:170px}
}
@media(max-width:640px){
  .env-grid{grid-template-columns:repeat(2,1fr);grid-auto-rows:132px;gap:9px}
  .env-grid a:first-child{grid-column:span 2}
}

/* ---------- 表单 ---------- */
.book-in{display:grid;grid-template-columns:.9fr 1.1fr;gap:56px;align-items:start}
.form{background:var(--white);border:1px solid var(--line-2);border-radius:var(--r);padding:30px 30px 26px}
.field{margin-bottom:16px}
.field label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:7px;letter-spacing:.04em}
.field label b{color:var(--orange-ink);font-weight:400}
.field input,.field select,.field textarea{
  width:100%;height:46px;padding:0 14px;font-size:14.5px;font-family:var(--sans);
  color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:var(--r);
  transition:border-color .2s,background .2s;
}
.field textarea{height:84px;padding:12px 14px;resize:vertical;line-height:1.7}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none;border-color:var(--orange);background:#fff;
}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.check{display:flex;gap:9px;align-items:flex-start;font-size:12.5px;color:var(--muted);line-height:1.7;margin:6px 0 18px}
.check input{width:16px;height:16px;margin-top:3px;accent-color:var(--orange);flex:0 0 16px}
.hp{position:absolute;left:-9999px;opacity:0;height:0;width:0;overflow:hidden}
.form-note{font-size:12px;color:var(--muted-2);margin-top:14px;text-align:center}
.form-msg{margin-top:14px;padding:12px 14px;border-radius:var(--r);font-size:13.5px;display:none}
.form-msg.ok{display:block;background:#EAF6EC;color:#1F6B32;border:1px solid #CBE7D2}
.form-msg.err{display:block;background:#FDECEA;color:#9B2C23;border:1px solid #F6D2CE}
@media(max-width:900px){.book-in{grid-template-columns:1fr;gap:30px}.field-row{grid-template-columns:1fr}}

/* ---------- 联系方式 ---------- */
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center}
.nap{display:grid;gap:18px;margin-top:26px}
.nap-row{display:grid;grid-template-columns:76px 1fr;gap:16px;padding-bottom:16px;border-bottom:1px solid var(--line-2)}
.nap-row dt{font-size:12px;color:var(--muted-2);letter-spacing:.12em;font-family:var(--mono)}
.nap-row dd{font-size:15px;color:var(--ink);line-height:1.75}
.nap-row dd small{display:block;font-size:12.5px;color:var(--muted);margin-top:2px}
.map-box{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--paper-2);position:relative}
.map-box img{width:100%;height:340px;object-fit:cover}
@media(max-width:900px){.contact-grid{grid-template-columns:1fr;gap:28px}}

/* ---------- 页脚 ---------- */
.ft{background:var(--ink);color:rgba(251,248,243,.72);padding:64px 0 30px;font-size:13.5px}
.ft-top{display:grid;grid-template-columns:1.4fr 1fr 1fr .9fr;gap:40px;padding-bottom:44px;border-bottom:1px solid rgba(255,255,255,.1)}
.ft-logo{height:40px;margin-bottom:18px}
.ft h4{color:var(--paper);font-size:14px;margin-bottom:16px;font-family:var(--sans);font-weight:500;letter-spacing:.06em}
.ft ul{list-style:none;display:grid;gap:9px}
.ft a:hover{color:var(--orange)}
.ft .qr img{width:112px;border-radius:4px;background:#fff;padding:5px}
.ft .qr p{font-size:11.5px;margin-top:8px;color:rgba(251,248,243,.62)}
.ft-bot{display:flex;justify-content:space-between;gap:16px;padding-top:22px;font-size:11.5px;
  color:rgba(251,248,243,.6);flex-wrap:wrap}
@media(max-width:900px){
  .ft-top{grid-template-columns:1fr 1fr;gap:30px}
  .ft .qr{grid-column:span 2}
}

/* ---------- 页面头（内页） ---------- */
.ph-head{background:var(--paper-2);border-bottom:1px solid var(--line-2);padding:56px 0 48px}
.crumb{display:flex;gap:8px;font-size:12px;color:var(--muted-2);margin-bottom:18px;flex-wrap:wrap}
.crumb a:hover{color:var(--orange-ink)}
.ph-head h1{margin-bottom:12px}
.ph-head p{color:var(--muted);max-width:640px;font-size:15.5px}

/* ---------- 详情页 ---------- */
.detail{display:grid;grid-template-columns:1.55fr 1fr;gap:56px;align-items:start}
.detail .cover{border-radius:var(--r);overflow:hidden;margin-bottom:30px}
.detail .cover img{width:100%;height:400px;object-fit:cover}
.prose h2{font-size:24px;margin:34px 0 14px}
.prose p{color:var(--ink-2);margin-bottom:14px;line-height:2}
.aside{position:sticky;top:104px;background:var(--white);border:1px solid var(--line-2);border-radius:var(--r);padding:26px}
.aside h3{font-size:16px;margin-bottom:14px}
.aside .kv{display:flex;justify-content:space-between;gap:12px;padding:11px 0;border-bottom:1px dashed var(--line);font-size:13.5px}
.aside .kv span{color:var(--muted)}
.aside .kv b{font-weight:500;text-align:right}
.aside .btn{width:100%;margin-top:18px}
.aside .tel{display:block;text-align:center;margin-top:12px;font-family:var(--mono);font-size:13px;color:var(--muted)}
@media(max-width:900px){.detail{grid-template-columns:1fr;gap:32px}.aside{position:static}}

/* 师资详情的信息卡：满宽海报下面的横条（课程 chips + 预约 + 电话） */
.tw-aside{position:static;display:flex;flex-wrap:wrap;gap:26px 48px;align-items:center;justify-content:space-between;padding:22px 26px}
.tw-aside h3{font-size:13px;font-weight:500;font-family:var(--sans);letter-spacing:.08em;color:var(--muted);margin-bottom:11px}
.tw-aside-list{display:flex;flex-wrap:wrap;gap:9px}
.tw-crs{
  display:inline-flex;align-items:center;gap:14px;padding:9px 14px;
  border:1px solid var(--line);border-radius:var(--r);font-size:13.5px;color:var(--ink);
  transition:.2s var(--ease);
}
.tw-crs:hover{border-color:var(--orange);background:var(--orange-l)}
.tw-crs i{font-style:normal;font-size:11.5px;color:var(--muted)}
.tw-aside-act{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.tw-aside .btn{width:auto;margin-top:0}
.tw-aside .tel{margin-top:0;white-space:nowrap}
@media(max-width:820px){
  .tw-aside{flex-direction:column;align-items:stretch;gap:20px;padding:18px}
  .tw-aside-act .btn{width:100%}
  .tw-aside-act{gap:12px}
}

/* 学程路径 */
.road{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin:20px 0 8px;border-top:1px solid var(--line)}
.road div{padding:20px 18px 22px;border-right:1px solid var(--line-2);position:relative}
.road div:last-child{border-right:none}
.road .s{font-family:var(--serif);font-size:17px;margin-bottom:6px}
.road .d{font-family:var(--mono);font-size:10.5px;color:var(--orange-ink);letter-spacing:.1em;margin-bottom:10px}
.road .g{font-size:12.5px;color:var(--muted);line-height:1.75}
@media(max-width:760px){.road{grid-template-columns:1fr 1fr}}

/* FAQ */
.faq{border-top:1px solid var(--line);margin-top:16px}
.faq details{border-bottom:1px solid var(--line-2);padding:16px 0}
.faq summary{
  cursor:pointer;font-size:15px;font-weight:500;list-style:none;
  display:flex;justify-content:space-between;gap:16px;align-items:center;
}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";color:var(--orange-ink);font-size:18px;font-family:var(--mono)}
.faq details[open] summary::after{content:"−"}
.faq p{font-size:14px;color:var(--muted);margin-top:10px;line-height:1.95}

/* ---------- 栅格工具 ---------- */
.g2{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center}
.g3{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.g-img3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.stage-row{display:grid;grid-template-columns:1.15fr 1fr;gap:48px;align-items:center;margin-bottom:72px}
.stage-row.rev{grid-template-columns:1fr 1.15fr}
.stage-row.rev .txt{order:2}
.stage-row.rev .pic{order:1}
@media(max-width:980px){
  .g2,.g3,.g4,.g-img3{grid-template-columns:1fr 1fr}
  .stage-row,.stage-row.rev{grid-template-columns:1fr;gap:24px;margin-bottom:48px}
  .stage-row.rev .txt,.stage-row.rev .pic{order:0}
}
@media(max-width:680px){
  .g2,.g3,.g4,.g-img3{grid-template-columns:1fr}
}

/* ---------- 最新动态 ---------- */
/* 列表 · 分类筛选 */
.nw-bar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:40px;padding-bottom:24px;border-bottom:1px solid var(--line)}
.nw-chip{
  appearance:none;-webkit-appearance:none;background:transparent;border:1px solid var(--line);
  border-radius:999px;height:38px;padding:0 16px;font-family:var(--sans);font-size:13px;
  color:var(--ink-2);cursor:pointer;display:inline-flex;align-items:center;gap:8px;
  transition:.24s var(--ease);
}
.nw-chip i{font-family:var(--mono);font-style:normal;font-size:10.5px;color:var(--muted-2);letter-spacing:.06em}
.nw-chip:hover{border-color:var(--ink-2);color:var(--ink)}
.nw-chip.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.nw-chip.on i{color:rgba(251,248,243,.5)}

/* 列表 · 文章行 */
.nw-list{display:grid}
.nw-card{
  display:grid;grid-template-columns:340px 1fr;gap:40px;align-items:center;
  padding:36px 0;border-bottom:1px solid var(--line-2);
}
.nw-card:first-child{padding-top:0}
.nw-card.no-pic{grid-template-columns:1fr}
.nw-card[hidden]{display:none}
.nw-card-pic{
  display:block;overflow:hidden;border-radius:var(--r);
  background:var(--paper-2);
  position:relative;aspect-ratio:16/9;
}
/* 封面固定横版 16:9（2026-10-22 定，推翻「原比例不裁」的老方案）：
   92 篇封面里 79 篇是 2.35:1、8 篇 16:9、4 篇 1:1，混排时一行高一行矮，列表看着是散的。
   现在 16:9 框统一：2.35 只左右各裁一点，16:9 正好填满，个别 1:1 老图裁得多但版面不歪。
   图片真横版优先由采集器保证（wx_collect.py covers 读 og:image 换 2.35 原图）。
   object-position 偏上 30%，保住合影里的人头 —— 居中裁会把上半张脸切掉。
   ⚠️ 用 absolute 定位而不是 height:100%，避免 <img width height> 属性在窄屏把高度锁死。 */
.nw-card-pic img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:50% 30%;
  transition:transform .7s var(--ease);
}
.nw-card:hover .nw-card-pic img{transform:scale(1.02)}
.nw-meta{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--muted-2);
  margin-bottom:12px;
}
.nw-meta .cat{color:var(--orange-ink)}
/* 「置顶」小标签：白字压橙底只有 2.49，改墨字（7.44） */
.nw-meta .pin{font-family:var(--sans);font-size:10px;letter-spacing:.06em;color:var(--ink-on-orange);background:var(--orange);padding:2px 7px;border-radius:2px;font-weight:600}
.nw-card h2{font-size:24px;line-height:1.45;margin-bottom:10px;text-wrap:balance}
.nw-card h2 a{transition:color .2s}
.nw-card h2 a:hover{color:var(--orange-ink)}
.nw-card-txt > p{font-size:14.5px;color:var(--muted);line-height:1.95;max-width:640px;margin-bottom:16px}
.nw-none{text-align:center;color:var(--muted-2);font-size:14px;padding:60px 0}

/* 加载更多：无 JS 时按钮不显示（hidden 由脚本摘掉），全量文章直接铺开 */
.nw-more-wrap{display:flex;justify-content:center;padding:44px 0 8px}
.nw-more{padding:14px 32px;font-size:14px;letter-spacing:.02em}
/* .btn 自带 display:inline-flex，会盖掉 [hidden]，小分类里会冒出「还有 0 篇」的按钮 */
.nw-more[hidden]{display:none}
.nw-more b{font-weight:600;color:var(--orange-ink);margin:0 3px;font-variant-numeric:tabular-nums}
@media(max-width:820px){
  .nw-card{grid-template-columns:1fr;gap:20px;padding:28px 0}
  .nw-card h2{font-size:20px}
}

/* 空态（内容未上线时） */
.nw-empty-sec{padding-bottom:72px}
.nw-empty{display:grid;grid-template-columns:.92fr 1.08fr;gap:72px;align-items:start}
.nw-empty-l{border-top:1.5px solid var(--ink);padding-top:18px}
.nw-cats{list-style:none}
.nw-cats li{
  display:grid;grid-template-columns:38px 1fr;padding:18px 0;
  border-bottom:1px solid var(--line-2);
}
.nw-cats .no{font-family:var(--mono);font-size:10.5px;color:var(--orange-ink);letter-spacing:.1em;padding-top:6px}
.nw-cats .nm{font-family:var(--serif);font-size:19px;color:var(--ink);line-height:1.5}
.nw-cats .ds{grid-column:2;font-size:12.5px;color:var(--muted-2);line-height:1.75;margin-top:3px}
.nw-empty-r{padding-top:6px}
.nw-empty-r h2{font-size:clamp(30px,3.6vw,46px);line-height:1.32;margin-bottom:20px}
.nw-empty-r p{font-size:15px;color:var(--muted);line-height:2.05;max-width:440px;margin-bottom:28px}
.nw-empty-btns{display:flex;align-items:center;gap:24px;flex-wrap:wrap}
.nw-empty-ip{
  width:118px;margin-left:auto;
  filter:drop-shadow(0 16px 22px rgba(28,25,22,.16));
  animation:float 5s ease-in-out infinite;
}
@media(max-width:900px){
  .nw-empty{grid-template-columns:1fr;gap:34px}
  .nw-empty-ip{width:96px;margin-left:0}
}
@media(prefers-reduced-motion:reduce){.nw-empty-ip{animation:none}}

/* 详情 */
.nw-hd h1{font-size:clamp(28px,3.6vw,46px);line-height:1.32;max-width:900px;margin-bottom:14px;text-wrap:balance;word-break:keep-all;overflow-wrap:break-word}
.nw-hd .nw-meta{margin-bottom:14px}
.nw-sum{max-width:680px;font-size:16px;color:var(--muted);line-height:1.95}
/* 文章主体做成一张白纸卡：公众号正文自带白色底，套在纸色页面上会露出细边，索性合成一张纸 */
.nw-single{
  max-width:860px;margin:0 auto;padding:46px 52px 40px;
  background:var(--white);border:1px solid var(--line-2);border-radius:var(--r);
}
@media(max-width:900px){.nw-single{padding:26px 18px}}
.nw-cover{border-radius:var(--r);overflow:hidden;margin-bottom:38px;background:var(--paper-2)}
.nw-cover img{width:100%;height:auto;display:block}
.nw-blank{
  padding:60px 0;text-align:center;color:var(--muted-2);font-size:14px;
  border-top:1px dashed var(--line);border-bottom:1px dashed var(--line);
}
/* 公众号原文：保留内联样式，仅做响应式兜底 */
/* overflow-x:clip 是安全网：公众号爱用「<svg>+<foreignObject>」做艺术字，内部套的是固定像素宽
   的 section，430px 下比容器宽出几十 px。视觉上早被内层 svg 的 overflow:hidden 裁掉了，
   但 Chrome 仍会把它算进 documentElement.scrollWidth，导致整页能左右晃 11px。
   clip 不建立滚动容器（不影响 sticky），只是让这份「看不见的溢出」不再撑宽页面。 */
.nw-body{font-size:16.5px;line-height:2.05;color:var(--ink-2);word-break:break-word;overflow-wrap:anywhere;overflow-x:clip}
.nw-body *{max-width:100%!important;box-sizing:border-box}
.nw-body img{height:auto!important;border-radius:var(--r);margin-left:auto;margin-right:auto}
.nw-body p{margin:0 0 1.1em}
.nw-body h1,.nw-body h2,.nw-body h3,.nw-body h4{font-family:var(--serif);line-height:1.5;margin:1.8em 0 .7em}
.nw-body h1{font-size:26px}
.nw-body h2{font-size:23px}
.nw-body h3{font-size:19px}
.nw-body a{color:var(--orange-ink);text-decoration:underline;text-underline-offset:3px}
.nw-body blockquote{border-left:3px solid var(--orange);padding:2px 0 2px 18px;margin:22px 0;color:var(--muted)}
.nw-body ul,.nw-body ol{padding-left:1.5em;margin:0 0 1.1em}
.nw-body li{margin:.35em 0}
.nw-body table{width:100%;border-collapse:collapse;font-size:14px;margin:18px 0}
.nw-body th,.nw-body td{border:1px solid var(--line);padding:8px 10px;text-align:left}
.nw-body iframe,.nw-body video{max-width:100%;border:0;border-radius:var(--r)}
.nw-body hr{border:0;border-top:1px solid var(--line);margin:30px 0}

/* 公众号正文最外层通常套了两三层带 padding/margin 的容器，桌面无妨，手机上一圈圈累加会把
   正文挤成一条窄柱。手机上只清掉最外两层的水平留白，横向空间交给 .nw-single 的纸卡自己给。 */
@media(max-width:900px){
  .nw-body > *,
  .nw-body > * > *{
    padding-left:0!important;padding-right:0!important;
    margin-left:0!important;margin-right:0!important;
  }
  /* 少数文章用 transform:translate3d(50px,0,0) 做左右错位的版式。桌面宽度够，手机上把
     352px 宽的块整体右推 50px，右侧就被切掉一条。窄屏下把这段横向位移收掉，纵向上移保留。 */
  .nw-body [style*="translate3d(50px"],
  .nw-body [style*="translate3d(-50px"]{transform:none!important}
}

/* 公众号内嵌内容降级卡（视频号视频 / 语音无法外嵌） */
.nw-media-note{
  margin:26px 0;padding:20px 22px;border:1px dashed var(--line);
  border-radius:var(--r);background:var(--paper-2);
}
.nw-media-note-tag{
  display:inline-block;font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;
  color:var(--orange-ink);background:var(--orange-l);padding:3px 9px;border-radius:2px;
}
.nw-media-note p{margin:10px 0 12px;font-size:13.5px;line-height:1.85;color:var(--muted)}
.nw-media-note a{
  font-size:13px;color:var(--orange-ink);text-decoration:none;
  border-bottom:1px solid var(--orange);padding-bottom:2px;
}
.nw-media-note a:hover{color:var(--ink)}

/* 原文出处 */
.nw-src{
  margin-top:40px;padding:24px 26px;background:var(--paper-2);
  border-left:2px solid var(--orange);border-radius:0 var(--r) var(--r) 0;
}
.nw-src-k{
  font-family:var(--mono);font-size:10.5px;letter-spacing:.18em;color:var(--orange-ink);
  display:block;margin-bottom:10px;
}
.nw-src p{margin:0 0 14px;font-size:13.5px;line-height:1.9;color:var(--muted)}
.nw-src p b{color:var(--ink-2);font-weight:500}
.nw-src a{
  display:inline-flex;align-items:center;gap:8px;font-size:13.5px;color:var(--ink);
  border-bottom:1px solid var(--line);padding-bottom:3px;transition:.25s var(--ease);
}
.nw-src a i{font-style:normal;transition:transform .3s var(--ease)}
.nw-src a:hover{color:var(--orange-ink);border-color:var(--orange)}
.nw-src a:hover i{transform:translateX(3px)}
.nw-sign{
  display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;
  margin-top:46px;padding-top:18px;border-top:1px solid var(--line);
  font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--muted-2);
}
.nw-back{margin-top:26px}
.nw-back-link{
  font-size:13px;color:var(--muted);display:inline-flex;align-items:center;gap:8px;
  border-bottom:1px solid var(--line);padding-bottom:3px;transition:.25s var(--ease);
}
.nw-back-link:hover{color:var(--orange-ink);border-color:var(--orange)}

/* ---------- 自写文章的排版组件（news 里非公众号原文的稿子用） ----------
   @media(max-width:900px) 那条 `.nw-body > * / > * > *` 是 !important 清左右 padding 的，
   所以下面每个块的 padding/margin 也带 !important，靠 (0,2,0) 压过 (0,1,0)。
   千万别改成 inline style —— inline 赢不过那条媒体查询，手机上字会贴边。 */

/* 开篇结论 */
.nw-body .nw-lead{
  margin:0 0 24px!important;padding:20px 24px!important;
  background:var(--orange-l);border-left:3px solid var(--orange);
  border-radius:0 10px 10px 0;font-size:16px;line-height:1.95;color:var(--ink-2);
}
.nw-body .nw-lead b{color:var(--orange-ink);font-weight:600}

/* 关键信息卡 */
.nw-body .nw-facts{
  display:grid!important;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
  gap:10px;margin:16px 0 30px!important;padding:0!important;
}
.nw-body .nw-fact{
  margin:0!important;padding:13px 15px!important;
  background:var(--paper);border:1px solid var(--line-2);border-radius:10px;
}
.nw-body .nw-fact i{
  display:block;font-style:normal;font-family:var(--mono);font-size:10px;
  letter-spacing:.14em;color:var(--muted-2);margin-bottom:5px;
}
.nw-body .nw-fact b{display:block;font-size:14px;line-height:1.65;font-weight:600;color:var(--ink)}

/* 品牌标语块 */
.nw-body .nw-slogan{
  margin:28px 0!important;padding:28px 22px!important;
  background:var(--ink);border-radius:12px;text-align:center;
}
.nw-body .nw-slogan p{
  margin:0!important;font-family:var(--serif);font-size:19px;line-height:2;color:var(--paper)!important;
}
.nw-body .nw-slogan small{
  display:block;margin-top:12px;font-family:var(--mono);font-size:10.5px;
  letter-spacing:.2em;color:rgba(251,248,243,.5);
}

/* 问答 */
.nw-body .nw-faq{margin:6px 0 0!important;padding:0!important}
.nw-body .nw-faq-q{
  margin:0!important;padding:16px 0 8px!important;border-top:1px solid var(--line-2);
  font-family:var(--serif);font-size:16.5px!important;line-height:1.7;color:var(--ink);
}
.nw-body .nw-faq-a{margin:0 0 6px!important;font-size:15px!important;line-height:1.95!important}

/* 结尾行动块：橙底墨字（7.44:1） */
.nw-body .nw-cta{
  margin:32px 0 0!important;padding:26px 24px!important;
  background:var(--orange);border-radius:12px;text-align:center;
}
.nw-body .nw-cta p{margin:0 0 16px!important;font-size:15px!important;line-height:1.9;color:var(--ink-on-orange)!important}
.nw-body .nw-cta-btns{
  display:flex;flex-wrap:wrap;gap:10px;justify-content:center;
  margin:0!important;padding:0!important;
}
.nw-body .nw-cta-btns a{
  text-decoration:none!important;font-size:14px;font-weight:500;
  padding:11px 22px;border-radius:999px;transition:.25s var(--ease);
}
.nw-body .nw-cta-btns .nw-btn-1{background:var(--ink-on-orange);color:var(--paper)!important}
.nw-body .nw-cta-btns .nw-btn-1:hover{background:#000}
.nw-body .nw-cta-btns .nw-btn-2{border:1.5px solid rgba(26,18,8,.38);color:var(--ink-on-orange)!important}
.nw-body .nw-cta-btns .nw-btn-2:hover{border-color:var(--ink-on-orange)}

/* 相关阅读 */
.nw-rel{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
.nw-rel-pic{border-radius:var(--r);overflow:hidden;background:var(--paper-2);aspect-ratio:16/9;margin-bottom:16px}
.nw-rel-pic img{width:100%;height:100%;object-fit:cover;transition:transform .7s var(--ease)}
.nw-rel-item{display:block}
.nw-rel-item.no-pic::before{
  content:"";display:block;aspect-ratio:16/9;border-radius:var(--r);
  background:var(--paper-2);margin-bottom:16px;
}
.nw-rel-item:hover .nw-rel-pic img{transform:scale(1.04)}
.nw-rel-item .nw-meta{font-size:10.5px;margin-bottom:9px}
.nw-rel-item h3{font-size:18px;line-height:1.55;margin-bottom:8px;transition:color .2s}
.nw-rel-item:hover h3{color:var(--orange-ink)}
.nw-rel-item p{font-size:13px;color:var(--muted);line-height:1.8}
@media(max-width:900px){
  .nw-rel{grid-template-columns:1fr 1fr;gap:22px}
}
@media(max-width:620px){.nw-rel{grid-template-columns:1fr}}

/* ---------- 动效 ---------- */
/* 动效只在 JS 可用时启用初始隐藏：无 JS / 爬虫直出时内容始终可见（SEO 安全） */
.js .rv{opacity:0;transform:translateY(18px);transition:opacity .7s var(--ease),transform .7s var(--ease)}
.js .rv.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.rv,.js .rv{opacity:1;transform:none;transition:none}}

/* ---------- 触屏：去掉会「粘住」的 hover 位移 ---------- */
/* iOS/安卓点完一个卡片后，:hover 状态会一直留到下次点击别处 —— 卡片悬在半空、
   图片保持放大，看起来像卡死了。颜色类的 hover 无害（甚至算点击反馈），
   所以这里只回收 transform / box-shadow 这两类位移动效。 */
@media(hover:none){
  .btn-primary:hover,.btn-dark:hover{transform:none}
  .biz a:hover,.card:hover,.twcard.light:hover{transform:none;box-shadow:none}
  .biz a:hover{border-color:var(--line-2)}
  .card:hover{border-color:var(--line-2)}
  .card:hover .ph img,.tw-cell:hover .tw-cell-fig img,
  .twcard:hover .tw-media img,.nw-card:hover .nw-card-pic img,
  .nw-rel-item:hover .nw-rel-pic img{transform:none}
}
/* 导航项的可点区域从 39px 补到 ~63px：用伪元素向外扩，不动字号也不挪下划线 */
.hd-nav a::before{content:"";position:absolute;inset:-12px 0}

/* ---------- 404 ---------- */
.nf{text-align:center;padding-top:120px;padding-bottom:120px}
.nf img{width:200px;margin:0 auto 24px}

/* ---------- 宣传视频 ---------- */
/* 首屏：保持原来 520px 的面板（跟左侧文案齐高），播放 15 秒静音循环（1.1MB）。
   面板接近 1:1，而 MV 是 16:9 —— 硬裁两侧会裁掉 45%，所以脚本里预先按中心切好了
   740×720 的片段和同参数封面帧，浏览器不用再裁。
   手机不自动播，只出封面（69KB）；想听完整版点右下角，弹层里才加载 24MB 的 MV。 */
.hero-media .ph video{display:block;width:100%;height:520px;object-fit:cover;background:#12100D}
.hero-play{
  position:absolute;right:14px;bottom:14px;z-index:3;
  display:inline-flex;align-items:center;gap:9px;padding:8px 15px 8px 8px;
  border-radius:999px;background:rgba(16,13,10,.6);color:#fff;line-height:1;
  font-size:12.5px;letter-spacing:.02em;border:1px solid rgba(255,255,255,.24);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  transition:background .2s,transform .2s,border-color .2s;
}
.hero-play:hover,.hero-play:focus-visible{background:rgba(232,116,2,.94);border-color:transparent;transform:translateY(-1px)}
.hp-ico{display:grid;place-items:center;flex:none;width:26px;height:26px;border-radius:50%;background:#fff;color:#1A1208}
.hp-ico svg{width:13px;height:13px;margin-left:1px}
.hp-txt{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}
.hp-txt i{font-style:normal;font-size:11.5px;opacity:.62}
@media(max-width:960px){
  .hero-media .ph video{height:340px}
  .hero-play{right:10px;bottom:10px;padding:7px 13px 7px 7px;font-size:12px}
}

/* 视频卡（舞台实践页、乐队课详情页共用 partials/video.php） */
.vid{
  position:relative;display:block;border-radius:var(--r);overflow:hidden;background:#12100D;
  box-shadow:0 34px 64px -46px rgba(28,25,22,.6);
}
.vid img{display:block;width:100%;height:auto}
.vid::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(10,8,6,0) 40%,rgba(10,8,6,.66) 100%);
}
.vid-btn{
  position:absolute;left:50%;top:50%;z-index:3;display:grid;place-items:center;
  width:72px;height:72px;margin:-36px 0 0 -36px;border-radius:50%;
  background:rgba(255,255,255,.94);color:#1A1208;
  box-shadow:0 14px 34px rgba(10,8,6,.32);transition:transform .22s,background .22s;
}
.vid-btn::before{  /* 一圈呼吸光环：一眼看出这是能播的 */
  content:"";position:absolute;inset:-9px;border-radius:50%;border:1px solid rgba(255,255,255,.5);
  animation:vdpulse 2.6s ease-out infinite;
}
@keyframes vdpulse{0%{transform:scale(.92);opacity:.85}70%{transform:scale(1.16);opacity:0}100%{opacity:0}}
@media(prefers-reduced-motion:reduce){.vid-btn::before{animation:none}}
.vid-btn svg{width:26px;height:26px;margin-left:3px}
.vid:hover .vid-btn,.vid:focus-visible .vid-btn{transform:scale(1.06);background:#fff}
.vid:hover img{transform:scale(1.02)}
.vid img{transition:transform .6s var(--ease)}
.vid-meta{
  position:absolute;left:0;right:0;bottom:0;z-index:2;
  display:flex;align-items:center;gap:10px;padding:16px 20px;color:#fff;font-size:13px;
}
.vid-name{font-weight:600;letter-spacing:.02em}
.vid-len{font-size:11.5px;padding:2px 7px;border-radius:4px;background:rgba(255,255,255,.2)}
.vid-sec{background:var(--paper-2);border-top:1px solid var(--line-2);border-bottom:1px solid var(--line-2)}
@media(max-width:640px){
  .vid-btn{width:56px;height:56px;margin:-28px 0 0 -28px}
  .vid-btn svg{width:21px;height:21px}
  .vid-meta{padding:12px 14px;font-size:12px}
}

/* 弹层里的播放器 */
.vd-stage{display:flex;justify-content:center}
.vd-video{display:block;width:min(1100px,94vw);max-height:calc(94vh - 56px);background:#000;border-radius:3px}
/* B 站嵌入：默认不显示（src 也还没写），点开才切到 iframe —— 页面本身一分播放器流量都不花 */
.vd-frame{
  display:none;width:min(1100px,94vw);aspect-ratio:16/9;max-height:calc(94vh - 56px);
  background:#000;border:0;border-radius:3px;
}
.vd-stage.is-frame .vd-video{display:none}
.vd-stage.is-frame .vd-frame{display:block}

/* ---------- 舞台影像：瀑布流 ---------- */
/* 用 CSS 多列做真瀑布流（列高参差），比定高网格更像一面照片墙。
   每张图带 width/height 属性，图片没加载完也占对高度，不会跳。 */
.wall{columns:3;column-gap:16px}
.wall-i{
  position:relative;display:block;margin:0 0 16px;border-radius:var(--r);overflow:hidden;
  background:var(--paper-2);break-inside:avoid;-webkit-column-break-inside:avoid;
}
.wall-i img{display:block;width:100%;height:auto;transition:transform .55s var(--ease)}
.wall-i::after{content:"";position:absolute;inset:0;background:rgba(10,8,6,.16);opacity:0;transition:opacity .25s}
.wall-i:hover img{transform:scale(1.035)}
.wall-i:hover::after{opacity:1}
.wall-zm{
  position:absolute;right:12px;top:12px;z-index:2;display:grid;place-items:center;
  width:32px;height:32px;border-radius:50%;background:rgba(16,13,10,.52);color:#fff;
  opacity:0;transform:translateY(-4px);transition:opacity .25s,transform .25s;
}
.wall-zm svg{width:15px;height:15px}
.wall-i:hover .wall-zm,.wall-i:focus-visible .wall-zm{opacity:1;transform:none}
@media(hover:none){.wall-zm{opacity:1;transform:none}}
@media(max-width:900px){.wall{columns:2;column-gap:12px}.wall-i{margin-bottom:12px}}

/* ---------- 活动合集：可滑动分拣的卡片堆（/stage/ 第四行） ----------
   卡片绝对定位叠成一摞，深度 d=0 是当前张；拖过阈值整张飞出，
   下一张从 scale(.945)+brightness(.66) 回到 1 —— 回弹靠 cubic-bezier 的轻微过冲。 */
.deck-wrap{position:relative}
.deck{position:relative;aspect-ratio:3/2;border-radius:var(--r);outline:none;touch-action:pan-y}
.deck:focus-visible{box-shadow:0 0 0 3px var(--orange-l),0 0 0 4px var(--orange)}
.deck-card{
  position:absolute;inset:0;margin:0;overflow:hidden;border-radius:var(--r);
  background:#12100D;cursor:grab;user-select:none;-webkit-user-select:none;
  transform-origin:50% 92%;touch-action:pan-y;
  box-shadow:0 22px 46px -32px rgba(28,25,22,.55);
  transition:transform .55s cubic-bezier(.18,1.18,.36,1),opacity .4s ease,
             filter .45s ease,box-shadow .45s ease;
  will-change:transform,opacity,filter;
}
.deck-card img{display:block;width:100%;height:100%;object-fit:cover;object-position:50% 40%;pointer-events:none;-webkit-user-drag:none}
.deck-scrim{position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(12,10,8,.16),rgba(12,10,8,0) 38%,rgba(12,10,8,.28))}
.deck-card.dragging{transition:none;cursor:grabbing}
.deck-card.flying{transition:transform .36s cubic-bezier(.36,.02,.78,.34),opacity .36s ease}
.deck-tag{
  position:absolute;top:14px;z-index:60;padding:6px 13px;border-radius:999px;
  font-size:12px;font-weight:600;letter-spacing:.06em;color:#FBF8F3;
  background:rgba(22,18,14,.78);backdrop-filter:blur(6px);
  opacity:0;transform:translateY(-3px);
  transition:opacity .14s ease,transform .14s ease;pointer-events:none;
}
.deck-tag-prev{left:14px}
.deck-tag-next{right:14px}
.deck-bar{display:flex;align-items:center;gap:12px;margin-top:16px}
.deck-btn{
  width:34px;height:34px;flex:0 0 auto;display:grid;place-items:center;padding:0;
  border:1px solid var(--line);border-radius:50%;background:var(--white);color:var(--ink-2);
  cursor:pointer;transition:border-color .2s,color .2s,transform .2s;
}
.deck-btn svg{width:17px;height:17px}
.deck-btn:hover{border-color:var(--orange);color:var(--orange-ink)}
.deck-btn:active{transform:scale(.93)}
.deck-dots{display:flex;align-items:center;gap:6px;flex:1 1 auto;min-width:0;flex-wrap:wrap}
.deck-dot{display:block;width:6px;height:6px;border-radius:999px;background:var(--line);transition:width .28s ease,background .28s ease}
.deck-dot.on{width:16px;background:var(--orange)}
.deck-num{flex:0 0 auto;font-size:12px;letter-spacing:.03em;color:var(--muted-2);font-variant-numeric:tabular-nums}
.deck-num b{color:var(--ink);font-weight:600}
.deck-hint{margin-top:10px;font-size:12px;letter-spacing:.02em;color:var(--muted-2)}
@media(max-width:680px){
  .deck{aspect-ratio:4/3}
  .deck-tag{top:10px;font-size:11px;padding:5px 11px}
  .deck-tag-prev{left:10px}
  .deck-tag-next{right:10px}
}
@media(prefers-reduced-motion:reduce){
  .deck-card{transition:none}
}

/* ---------- 视频动态 · 哔哩哔哩嵌入 ----------
   列表卡：封面叠一个播放键 + 右下角时长；详情页：播放器 + 信息条 + 文案。
   视频不下载也不转码，iframe 指向 B 站官方外链播放器；但默认只渲染封面，
   点播放键才注入 iframe —— B 站播放器自身要下 1.5MB 左右，还会写第三方 cookie，
   每个访客进来都白下一遍不值得。无 JS 时播放键是一条直达 B 站的普通链接。 */
.nw-card-pic .vplay{position:absolute;inset:0;z-index:2;display:grid;place-items:center;pointer-events:none}
.nw-card-pic .vplay b{
  width:52px;height:52px;border-radius:50%;display:grid;place-items:center;
  background:rgba(18,16,13,.56);border:1px solid rgba(251,248,243,.55);
  backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);
  box-shadow:0 6px 20px -8px rgba(0,0,0,.5);
  transition:transform .3s var(--ease),background .3s;
}
.nw-card-pic .vplay b::after{
  content:"";width:0;height:0;margin-left:3px;
  border-left:13px solid #FBF8F3;border-top:8px solid transparent;border-bottom:8px solid transparent;
}
.nw-card:hover .nw-card-pic .vplay b{transform:scale(1.06);background:rgba(252,132,3,.92)}
.nw-vdur{
  position:absolute;right:10px;bottom:10px;z-index:2;
  padding:3px 7px;border-radius:3px;background:rgba(18,16,13,.72);color:#FBF8F3;
  font-family:var(--mono);font-size:11px;letter-spacing:.04em;font-variant-numeric:tabular-nums;
}

/* ---------- 「视频动态」分类 · 视频站网格 ----------
   点「视频动态」chip（或 /news/?cat=video 直达）时，列表从「文章行」切成视频站的样子：
   封面 16:9 在上、标题两行截断在下、日期一行，一行 3 张（≤900 两列，跟 B 站手机端一致）。
   分类带 layout=grid 才切（news-cats.json 里配，后台「分类管理」可选）。
   「全部」仍是文章行 —— 一行一个视频混在文章时间轴里会把节奏打断。
   只有 .nw-card-vid 变竖卡；非视频卡整行铺开，所以无 JS 直接落 ?cat=video 时
   文章也不会被挤进 1/3 宽的窄列。
   [hidden] 必须显式再写一遍：上面的 display:flex 比 .nw-card[hidden] 更具体。 */
.nw-list.vgrid{grid-template-columns:repeat(var(--vcols,3),1fr);gap:36px 26px;padding:2px 0 10px}
.nw-list.vgrid .nw-card{padding:0;border-bottom:0}
.nw-list.vgrid .nw-card:not(.nw-card-vid){grid-column:1 / -1;padding:36px 0;border-bottom:1px solid var(--line-2)}
.nw-list.vgrid .nw-card-vid{display:flex;flex-direction:column;align-items:stretch}
.nw-list.vgrid .nw-card-vid[hidden]{display:none}
.nw-list.vgrid .nw-card-vid .nw-card-pic{border-radius:10px}
.nw-list.vgrid .nw-card-vid .nw-card-pic .vplay b{width:44px;height:44px}
.nw-list.vgrid .nw-card-vid .nw-card-pic .vplay b::after{
  border-left-width:11px;border-top-width:7px;border-bottom-width:7px;
}
/* 标题在上、日期在下（.nw-meta 在 HTML 里排在标题前面，靠 order 翻过来） */
.nw-list.vgrid .nw-card-vid .nw-card-txt{display:flex;flex-direction:column;align-items:flex-start;padding:14px 2px 0}
.nw-list.vgrid .nw-card-vid h2{
  order:1;font-size:16px;font-weight:600;line-height:1.55;margin-bottom:9px;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;
}
.nw-list.vgrid .nw-card-vid .nw-meta{order:2;margin:0;font-size:11px;letter-spacing:.1em}
.nw-list.vgrid .nw-card-vid .nw-meta .cat{display:none}
.nw-list.vgrid .nw-card-vid .nw-card-txt > p,
.nw-list.vgrid .nw-card-vid .more{display:none}
@media(max-width:900px){
  .nw-list.vgrid{grid-template-columns:repeat(2,1fr);gap:28px 14px}
  .nw-list.vgrid .nw-card:not(.nw-card-vid){padding:26px 0}
}
@media(max-width:600px){
  .nw-list.vgrid .nw-card-vid h2{font-size:13.5px;line-height:1.5}
  .nw-list.vgrid .nw-card-vid .nw-card-txt{padding-top:11px}
  /* 168px 宽的卡上 38px 播放键会压掉封面自带的歌名，缩到 30px */
  .nw-list.vgrid .nw-card-vid .nw-card-pic .vplay b{width:30px;height:30px;background:rgba(18,16,13,.44)}
  .nw-list.vgrid .nw-card-vid .nw-card-pic .vplay b::after{
    border-left-width:9px;border-top-width:6px;border-bottom-width:6px;margin-left:2px;
  }
  .nw-list.vgrid .nw-card-vid .nw-vdur{right:6px;bottom:6px;font-size:10px;padding:2px 5px}
}

/* 详情页播放器：顶到纸卡边缘（负 margin 吃掉 .nw-single 的内边距），像视频页那样 */
.nw-video{
  position:relative;aspect-ratio:16/9;overflow:hidden;background:#12100D;
  margin:-46px -52px 0;
  border-radius:calc(var(--r) - 1px) calc(var(--r) - 1px) 0 0;
}
.nw-video img,.nw-video iframe{
  position:absolute;inset:0;width:100%;height:100%;border:0;display:block;
}
.nw-video iframe{z-index:3}
.nw-video img{object-fit:cover;object-position:50% 40%}
.nw-video .vp{
  position:absolute;inset:0;z-index:2;display:grid;place-items:center;gap:0;
  cursor:pointer;text-decoration:none;background:rgba(12,10,8,.14);
  transition:background .25s;
}
.nw-video .vp:hover{background:rgba(12,10,8,.24)}
.nw-video .vp b{
  width:74px;height:74px;border-radius:50%;display:grid;place-items:center;
  background:rgba(252,132,3,.94);box-shadow:0 12px 34px -12px rgba(0,0,0,.6);
  transition:transform .3s var(--ease);
}
.nw-video .vp:hover b{transform:scale(1.06)}
.nw-video .vp b::after{
  content:"";width:0;height:0;margin-left:4px;
  border-left:18px solid #fff;border-top:11px solid transparent;border-bottom:11px solid transparent;
}
@media(max-width:900px){
  .nw-video{margin:-26px -18px 0}
  .nw-video .vp b{width:60px;height:60px}
  .nw-video .vp b::after{border-left:15px solid #fff;border-top:9px solid transparent;border-bottom:9px solid transparent}
}

/* 信息条：时长 / 发布 / UP 主 / 去 B 站 */
.nw-vinfo{
  display:flex;align-items:center;gap:8px 18px;flex-wrap:wrap;
  margin:18px 0 30px;padding-bottom:18px;border-bottom:1px solid var(--line-2);
  font-family:var(--mono);font-size:11.5px;letter-spacing:.1em;color:var(--muted-2);
}
.nw-vinfo b{font-weight:500;color:var(--ink-2);font-family:var(--sans);letter-spacing:0;font-size:13px}
.nw-vinfo .nw-vout{
  margin-left:auto;color:var(--orange-ink);text-decoration:none;
  border-bottom:1px solid rgba(252,132,3,.35);padding-bottom:1px;
}
.nw-vinfo .nw-vout:hover{border-bottom-color:var(--orange)}
@media(max-width:640px){.nw-vinfo .nw-vout{margin-left:0}}

/* 视频文案：B 站简介原文分段，字号比公众号正文略大（文字量小，好读优先） */
.nw-vtxt{font-size:16px;line-height:2.05;color:var(--ink-2)}
.nw-vtxt p{margin:0 0 14px}
.nw-vtxt p:last-child{margin-bottom:0}
@media(max-width:900px){.nw-vtxt{font-size:15px;line-height:1.95}}
