/* ============================================================
   pages.css —— 内页组件（基准：style.css）
   ------------------------------------------------------------
   沿用 style.css 的变量、字体、间距与命名习惯：
   .section.light / .light.alt / .dark、.wrap、.kicker、.en、
   .lead、.btn-p、.btn-g、.chip、.seam 均为共享组件，此处只新增
   内页专属组件。首页零改动。
   ============================================================ */

/* ============================================================
   0. 主题配色：每个内页一套主色
   ------------------------------------------------------------
   v29（2026-11-06）改法：把「主色」从背景降为点缀。
   原来撞色的做法是 --phead-bg = 主色本身（靛蓝 #1E4E9C 满屏一屏），
   深蓝杯子放在白房间里不抢眼，但整个房间变成深蓝，杯子就失焦。
   现在：
     --phead-deep / --phead-bg  只取主色的「墨调」（明度 8%~16%），
                                读作深色展墙，色相从暗处透出来
     --accent                   主色本体，只落在刻度、数字、按钮、
                                细线、hover 这些「物件」上
   取色与出处：
     霁蓝  故宫藏「霁蓝釉」官窑蓝，沉而不艳
     宫墙红 故宫红墙（比正红降饱和、压暗一档）
     缃金  《说文》「缃，浅黄色也」，器物、金工、琉璃瓦
     绛紫  织锦 · 陶褐  陶土 · 石墨  工具页（未改，保持原样）
   ============================================================ */
body{
  --accent:#C0603A; --accent-2:#D9764C; --accent-rgb:192,96,58;
  --accent-soft:#F1ECE1; --phead-bg:#0E0D0B; --phead-line:rgba(243,237,226,.16);
}
body[data-theme="archive"]{
  /* 霁蓝：故宫霁蓝釉。墙是墨蓝的，蓝只在刻度与按钮上亮起来 */
  --nav-frost:rgba(10,17,26,.82);
  --accent:#35597D; --accent-2:#4E7396; --accent-rgb:53,89,125;
  --accent-soft:#DFE7F1; --phead-deep:#080D14; --phead-bg:#121E2E; --phead-line:rgba(223,231,241,.18);
}
body[data-theme="courses"]{
  /* 宫墙红：故宫红墙。深到近乎砖褐，红只留给编号与主按钮 */
  --nav-frost:rgba(24,14,11,.84);
  --accent:#A03A2C; --accent-2:#C06753; --accent-rgb:160,58,44;
  --accent-soft:#F5E5E0; --phead-deep:#170D0A; --phead-bg:#2A1613; --phead-line:rgba(245,229,224,.18);
}
body[data-theme="goods"]{
  /* 缃金：《说文》「缃，浅黄色也」。暗金褐如旧木柜，金只在价签与刻线上 */
  --nav-frost:rgba(20,15,7,.84);
  --accent:#7D5E2C; --accent-2:#A08048; --accent-rgb:125,94,44;
  --accent-soft:#F1E9D9; --phead-deep:#140F06; --phead-bg:#241B0E; --phead-line:rgba(241,233,217,.18);
}
body[data-theme="join"]{
  --nav-frost:rgba(44,17,48,.82);
  --accent:#6A2C70; --accent-2:#8A3E92; --accent-rgb:106,44,112;
  --accent-soft:#EDD9EE; --phead-deep:#4A1C4F; --phead-bg:#6A2C70; --phead-line:rgba(240,220,242,.22);
}
body[data-theme="account"]{
  --nav-frost:rgba(58,33,7,.82);
  --accent:#9C5B1A; --accent-2:#C57C2A; --accent-rgb:156,91,26;
  --accent-soft:#F5E4CE; --phead-deep:#6E3D0F; --phead-bg:#9C5B1A; --phead-line:rgba(250,232,210,.22);
}
body[data-theme="editor"]{
  --nav-frost:rgba(14,14,12,.84);
  --accent:#23231F; --accent-2:#4A4A42; --accent-rgb:35,35,31;
  --accent-soft:#E8E6DF; --phead-deep:#131311; --phead-bg:#23231F; --phead-line:rgba(238,237,234,.16);
}
body[data-theme="auth"]{
  /* 登录 / 注册回到站内体系：赭石为唯一强调色，暗区暖黑 */
  --nav-frost:rgba(0,0,0,.62);
  --accent:#C0603A; --accent-2:#D9764C; --accent-rgb:192,96,58;
  --accent-soft:#F6E2D7; --phead-deep:#141210; --phead-bg:#1A1714; --phead-line:rgba(243,237,226,.18);
}
/* 有主题时，内页所有强调色统一走主色 */
body[data-theme]{--ochre:var(--accent);--ochre-2:var(--accent-2)}

/* 页头 / 收尾 / 交替区块改用主色 */
.phead{background:var(--phead-bg)}
.phead::before{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:0;opacity:.16;
  background:radial-gradient(58% 72% at 78% 14%, var(--accent-2), transparent 62%);
}
.phead .phead-inner,.phead-stats{position:relative;z-index:1}
.phead-shot{border-color:var(--phead-line)}
.cta-band{background:var(--phead-bg)}
/* 内容区统一暖白纸面：撞色只留在页头与点缀，滚动时不跳色 */
.section.light.alt{background:var(--paper-2)}

/* 明暗过渡：满屏页头后收短，仍经过主色浅调，避免硬切 */
.seam{height:clamp(72px,9vh,120px)}
.seam.to-light{background:linear-gradient(180deg,var(--phead-bg) 0%,var(--accent-soft) 34%,var(--paper) 100%)}
.seam.to-dark{background:linear-gradient(180deg,var(--paper) 0%,var(--accent-soft) 66%,var(--phead-bg) 100%)}

/* ---------- 1. 页头卡（暗场） ---------- */
.phead{position:relative;color:var(--warm);padding-top:86px;overflow:hidden;
  min-height:100vh;display:flex;flex-direction:column;
  background:linear-gradient(135deg,var(--phead-deep,#0E0D0B) 0%,var(--phead-bg) 58%)}
.phead-inner{width:100%;max-width:var(--wrap);margin:0 auto;padding:clamp(32px,4.5vh,58px) var(--gx) clamp(20px,3vh,38px);
  display:grid;grid-template-columns:minmax(0,1.04fr) minmax(0,.96fr);gap:clamp(28px,4vw,64px);
  align-items:stretch;flex:1;min-height:0}
.phead-copy{display:flex;flex-direction:column;justify-content:center;min-width:0}
.crumb{font-family:var(--mono);font-size:11.5px;letter-spacing:.14em;color:var(--warm-2);margin-bottom:22px}
.crumb a{color:var(--warm-3);transition:.2s}
.crumb a:hover{color:var(--warm)}
.crumb i{font-style:normal;margin:0 9px;color:var(--warm-3)}
.phead h1{font-size:clamp(34px,3.6vw,60px);line-height:1.1;font-weight:650;letter-spacing:.01em;color:var(--warm)}
.phead .ph-en{display:block;margin-top:18px;font-family:var(--mono);font-size:12px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--warm-2);font-weight:400}
.phead .ph-lead{margin-top:22px;max-width:600px;font-size:15.5px;line-height:2;color:rgba(255,248,244,.84);font-weight:400}
.phead-tags{display:flex;flex-wrap:wrap;gap:10px;margin-top:30px}
.phead-tags span{padding:7px 15px;font-size:12.5px;letter-spacing:.06em;color:var(--warm-2);
  border:1px solid var(--phead-line);border-radius:999px;background:rgba(255,255,255,.05)}
.phead-shot{position:relative;border-radius:2px;overflow:hidden;border:1px solid var(--hair);height:100%;min-height:320px}
.phead-shot img{width:100%;height:100%;object-fit:cover;filter:saturate(.94) contrast(1.04)}
.phead-shot::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;
  background:linear-gradient(90deg,var(--phead-bg) 0%,rgba(0,0,0,0) 24%)}
.phead-shot figcaption{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:46px 18px 16px;
  background:linear-gradient(0deg,rgba(14,13,11,.84),transparent);color:var(--warm);font-family:var(--serif);font-size:13px;line-height:1.7}
.phead-shot figcaption span{display:block;margin-top:6px;font-family:var(--mono);font-size:11.5px;letter-spacing:.07em;color:var(--warm-2)}
.phead-shot .corner{position:absolute;top:14px;right:14px;z-index:2;padding:6px 12px;background:rgba(14,13,11,.72);
  border:1px solid var(--hair);border-radius:2px;font-family:var(--mono);font-size:11.5px;letter-spacing:.1em;color:var(--warm-2)}
.phead-stats{width:100%;max-width:var(--wrap);margin:0 auto;padding:0 var(--gx) clamp(26px,4vh,46px)}
.ph-stats{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--hair)}
.ph-stat{padding:20px 18px 0;text-align:center;border-right:1px solid var(--hair)}
.ph-stat:last-child{border-right:0}
.ph-stat b{display:block;font-size:clamp(26px,2.4vw,38px);line-height:1;font-weight:400;color:var(--warm)}
.ph-stat b i{font-style:normal;font-size:13px;font-family:var(--mono);color:rgba(255,245,236,.78);margin-left:5px}
.ph-stat span{display:block;margin-top:10px;font-size:12px;letter-spacing:.13em;color:var(--warm-2)}

/* ---------- 2. 吸顶工具条 / 分节导航 ---------- */
.toolbar,.ed-bar{position:sticky;top:86px;z-index:40;background:rgba(247,244,236,.92);
  -webkit-backdrop-filter:blur(14px) saturate(1.4);backdrop-filter:blur(14px) saturate(1.4);
  border-bottom:1px solid var(--line);border-top:1px solid var(--line)}
.toolbar-inner{max-width:var(--wrap);margin:0 auto;padding:0 var(--gx);min-height:62px;
  display:flex;align-items:center;gap:18px;overflow-x:auto;scrollbar-width:none}
.toolbar-inner::-webkit-scrollbar{display:none}
.tb-label{font-family:var(--mono);font-size:11.5px;letter-spacing:.18em;color:var(--ink-3);white-space:nowrap;text-transform:uppercase}
.tb-links{display:flex;align-items:center;gap:4px;white-space:nowrap}
.tb-links a{padding:8px 13px;font-size:13.5px;color:var(--ink-2);border-radius:4px;transition:.2s}
.tb-links a:hover{background:var(--paper-2);color:var(--ink)}
.tb-links a.on{color:var(--ink);font-weight:600}
.tb-links a.on::after{content:"";display:block;height:1.5px;background:var(--ochre);margin-top:5px;border-radius:2px}
.tb-right{margin-left:auto;display:flex;align-items:center;gap:12px;white-space:nowrap}
.tb-count{font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--ink-2)}
.btn-mini{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;font-size:13px;border:1px solid var(--line);
  border-radius:2px;color:var(--ink);background:var(--card);transition:.2s;white-space:nowrap}
.btn-mini:hover{border-color:var(--ochre);color:var(--ochre)}
.btn-mini.primary{background:var(--ochre);border-color:var(--ochre);color:#FFF9F5}
.btn-mini.primary:hover{background:var(--ochre-2);color:#FFF9F5}
.btn-mini svg{width:14px;height:14px}

/* ---------- 3. 网格与通用卡片 ---------- */
.grid{display:grid;gap:clamp(14px,1.8vw,22px)}
.grid-2{grid-template-columns:repeat(2,1fr)}
.grid-3{grid-template-columns:repeat(3,1fr)}
.grid-4{grid-template-columns:repeat(4,1fr)}
.pcard{background:var(--card);border:1px solid var(--line);border-radius:2px;overflow:hidden;
  transition:border-color .22s,transform .22s;display:flex;flex-direction:column}
.pcard:hover{border-color:var(--ochre);transform:translateY(-2px)}
.pcard .thumb{position:relative;aspect-ratio:4/3;overflow:hidden;background:var(--paper-2)}
.pcard .thumb img{width:100%;height:100%;object-fit:cover;transition:transform .5s}
.pcard:hover .thumb img{transform:scale(1.04)}
.pcard .thumb .ribbon{position:absolute;left:12px;top:12px;padding:5px 10px;background:rgba(14,13,11,.78);
  font-family:var(--mono);font-size:11.5px;letter-spacing:.09em;color:var(--warm);border-radius:2px}
.pcard .body{padding:18px 20px 20px;display:flex;flex-direction:column;flex:1}
.pcard h3,.pcard h4{margin:0;font-size:17px;font-weight:650;color:var(--ink);letter-spacing:.02em}
.pcard .en-sub{display:block;margin-top:5px;font-family:var(--mono);font-size:11.5px;letter-spacing:.07em;
  color:var(--ink-3);text-transform:uppercase}
.pcard p{margin-top:10px;font-size:13.5px;line-height:1.85;color:var(--ink-2)}
.pcard .meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.pcard .foot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:auto;
  padding-top:14px;border-top:1px solid var(--line)}
.tag{display:inline-flex;align-items:center;padding:4px 10px;font-size:12px;letter-spacing:.03em;color:var(--ink-2);
  background:var(--paper-2);border:1px solid var(--line);border-radius:999px}
.tag.ochre{color:var(--ochre);border-color:rgba(var(--accent-rgb),.4);background:rgba(var(--accent-rgb),.06)}
.tag.warn{color:#8A5A2B;background:#FBF1E3;border-color:#E8D3B4}
.price{font-size:19px;font-weight:600;color:var(--ink);font-family:var(--mono)}
.price small{font-size:12.5px;color:var(--ink-2);font-weight:400;margin-left:3px}
.price del{font-size:12.5px;color:var(--ink-2);margin-right:8px;font-weight:400}
.price-none{font-size:13px;color:var(--ink-3)}

/* ---------- 4. 筛选条 / 搜索 ---------- */
.filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;padding:18px 20px;background:var(--card);
  border:1px solid var(--line);border-radius:2px;margin-bottom:26px}
.field-sel,.field-inp{display:flex;flex-direction:column;gap:7px;min-width:140px;flex:1}
.field-sel>span,.field-inp>span{font-family:var(--mono);font-size:12px;letter-spacing:.1em;color:var(--ink-2);text-transform:uppercase}
.field-sel select,.field-inp input,.field-inp textarea,.field select,.field input,.field textarea{
  width:100%;padding:10px 12px;font-family:var(--sans);font-size:14px;color:var(--ink);
  background:var(--paper);border:1px solid var(--line);border-radius:2px;outline:none;
  transition:border-color .2s,box-shadow .2s}
.field-sel select:focus,.field-inp input:focus,.field-inp textarea:focus,.field select:focus,
.field input:focus,.field textarea:focus{border-color:var(--ochre);box-shadow:0 0 0 3px rgba(var(--accent-rgb),.1)}
.search-box{display:flex;align-items:center;gap:8px;padding:0 12px;background:var(--paper);
  border:1px solid var(--line);border-radius:2px;transition:.2s}
.search-box:focus-within{border-color:var(--ochre);box-shadow:0 0 0 3px rgba(var(--accent-rgb),.1)}
.search-box svg{width:16px;height:16px;color:var(--ink-3);flex:none}
.search-box input{border:0;background:none;padding:10px 0;width:100%;outline:none;font-family:var(--sans);font-size:14px;color:var(--ink)}
.filter-hint{margin-left:auto;display:flex;align-items:center;gap:12px;font-family:var(--mono);font-size:12px;letter-spacing:.05em;color:var(--ink-2)}

/* ---------- 5. 空态 / tabs / chips ---------- */
.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;
  padding:clamp(48px,8vh,90px) 20px;border:1px dashed var(--line);border-radius:2px;background:var(--card)}
.empty-ic{width:46px;height:46px;display:grid;place-items:center;border-radius:50%;background:var(--paper-2);color:var(--ink-3)}
.empty-ic svg{width:22px;height:22px}
.empty h4{margin-top:18px;font-size:17px;font-weight:600;color:var(--ink)}
.empty p{margin-top:8px;font-size:13.5px;color:var(--ink-2);max-width:420px}
.tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:26px;border-bottom:1px solid var(--line)}
.tabs button{padding:11px 18px;font-size:14px;color:var(--ink-2);border-radius:2px 2px 0 0;position:relative;transition:.2s}
.tabs button:hover{color:var(--ink);background:var(--paper-2)}
.tabs button.on{color:var(--ink);font-weight:600}
.tabs button.on::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--ochre)}
.chips{display:flex;flex-wrap:wrap;gap:9px;margin-bottom:24px}
.chip-btn{padding:8px 16px;font-size:13px;color:var(--ink-2);background:var(--card);border:1px solid var(--line);
  border-radius:999px;transition:.2s}
.chip-btn:hover{border-color:var(--ochre);color:var(--ochre)}
.chip-btn.on{background:var(--ochre);border-color:var(--ochre);color:#FFF9F5}

/* ---------- 6. 图版样本带 ---------- */
.plates{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,2vw,24px)}
.plate{position:relative;border:1px solid var(--line);background:var(--card);border-radius:2px;overflow:hidden}
.plate .ph{aspect-ratio:4/3;overflow:hidden;background:var(--paper-2)}
.plate .ph img{width:100%;height:100%;object-fit:cover;transition:transform .5s}
.plate:hover .ph img{transform:scale(1.04)}
.plate .cap{padding:14px 16px 16px}
.plate .cap .n{font-family:var(--mono);font-size:11.5px;letter-spacing:.16em;color:var(--ochre)}
.plate .cap b{display:block;margin-top:7px;font-family:var(--serif);font-size:16px;font-weight:600;color:var(--ink)}
.plate .cap span{display:block;margin-top:7px;font-family:var(--mono);font-size:11.5px;letter-spacing:.04em;color:var(--ink-2)}

/* ---------- 7. 步骤 / 时间线 ---------- */
.steps{display:grid;grid-template-columns:repeat(5,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.step{position:relative;padding:26px 20px 28px 0}
.step::before{content:"";position:absolute;top:32px;left:0;width:9px;height:9px;border-radius:50%;background:var(--ochre)}
.step .n{font-family:var(--mono);font-size:11.5px;letter-spacing:.16em;color:var(--ochre)}
.step h4{margin:12px 0 8px;font-size:16px;font-weight:650;color:var(--ink)}
.step p{font-size:13px;line-height:1.85;color:var(--ink-2)}

/* ---------- 8. 页尾 CTA（暗场） ---------- */
.cta-band{background:var(--phead-bg);color:var(--warm);position:relative;overflow:hidden}
.cta-band .wrap{padding-top:clamp(56px,8vh,96px);padding-bottom:clamp(56px,8vh,96px);position:relative;z-index:1}

/* ============================================================
   材质层：三大板块的页头与收尾
   ------------------------------------------------------------
   三层叠加，全部内联 SVG / 渐变，零外部请求：
   ① 高频颗粒（170px tile）—— 去掉大面积纯色的塑料感
   ② 低频云斑（620px tile）—— 模拟纸/布/漆的厚薄不均，这是"真实感"的来源
   ③ 45° 双向织纹（3.6px 周期）—— 极细经纬，远看是质感、近看才见纹
   用 overlay 混合：只改明暗对比、不动色相，配色保持不变。
   ============================================================ */
body[data-theme="archive"] .phead,
body[data-theme="courses"] .phead,
body[data-theme="goods"] .phead,
body[data-theme="archive"] .cta-band,
body[data-theme="courses"] .cta-band,
body[data-theme="goods"] .cta-band{isolation:isolate}

body[data-theme="archive"] .phead::after,
body[data-theme="courses"] .phead::after,
body[data-theme="goods"] .phead::after,
body[data-theme="archive"] .cta-band::after,
body[data-theme="courses"] .cta-band::after,
body[data-theme="goods"] .cta-band::after{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  opacity:.4;mix-blend-mode:overlay;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='170' height='170'%3E%3Cfilter id='g' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.92' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeComponentTransfer%3E%3CfeFuncR type='linear' slope='2.6' intercept='-0.8'/%3E%3CfeFuncG type='linear' slope='2.6' intercept='-0.8'/%3E%3CfeFuncB type='linear' slope='2.6' intercept='-0.8'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='170' height='170' filter='url(%23g)'/%3E%3C/svg%3E"),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1600' height='1200'%3E%3Cfilter id='c' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.0042' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeComponentTransfer%3E%3CfeFuncR type='linear' slope='1.85' intercept='-0.45'/%3E%3CfeFuncG type='linear' slope='1.85' intercept='-0.45'/%3E%3CfeFuncB type='linear' slope='1.85' intercept='-0.45'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='620' height='620' filter='url(%23c)' opacity='0.6'/%3E%3C/svg%3E"),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='w' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.006 0.86' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeComponentTransfer%3E%3CfeFuncR type='linear' slope='1.9' intercept='-0.45'/%3E%3CfeFuncG type='linear' slope='1.9' intercept='-0.45'/%3E%3CfeFuncB type='linear' slope='1.9' intercept='-0.45'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23w)'/%3E%3C/svg%3E"),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='h' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.86 0.006' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeComponentTransfer%3E%3CfeFuncR type='linear' slope='1.6' intercept='-0.3'/%3E%3CfeFuncG type='linear' slope='1.6' intercept='-0.3'/%3E%3CfeFuncB type='linear' slope='1.6' intercept='-0.3'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23h)'/%3E%3C/svg%3E");
  background-size:170px 170px,cover,300px 300px,300px 300px;
  background-repeat:repeat,no-repeat,repeat,repeat;
}
/* 边缘压暗：让大色块不"平"，视觉重心落回标题区 */
body[data-theme="archive"] .phead,
body[data-theme="courses"] .phead,
body[data-theme="goods"] .phead{
  background:
    radial-gradient(128% 108% at 50% 44%,rgba(0,0,0,0) 42%,rgba(0,0,0,.16) 100%),
    linear-gradient(135deg,var(--phead-deep,#0E0D0B) 0%,var(--phead-bg) 58%);
}
/* 收尾区也走渐变+暗角，纹理才和页头表现一致（纯色底会让织纹显重） */
body[data-theme="archive"] .cta-band,
body[data-theme="courses"] .cta-band,
body[data-theme="goods"] .cta-band{
  background:
    radial-gradient(120% 150% at 50% 30%,rgba(0,0,0,0) 34%,rgba(0,0,0,.16) 100%),
    linear-gradient(135deg,var(--phead-bg) 0%,var(--phead-deep,#0E0D0B) 135%);
}
/* 靛蓝（蓝染）织物感略强，漆红偏颗粒，石绿介于两者之间 */
body[data-theme="archive"] .phead::after{opacity:.5}
body[data-theme="archive"] .cta-band::after{opacity:.3}
body[data-theme="courses"] .phead::after{opacity:.4}
body[data-theme="courses"] .cta-band::after{opacity:.3}
body[data-theme="goods"] .phead::after{opacity:.34}
body[data-theme="goods"] .cta-band::after{opacity:.3}
.cta-band .kicker{color:var(--ochre)}
.cta-band h2{margin-top:20px;font-size:clamp(28px,3.2vw,46px);line-height:1.16;font-weight:650;color:var(--warm);max-width:800px}
.cta-band h2 small{display:block;margin-top:12px;font-family:var(--mono);font-size:11.5px;font-weight:400;
  letter-spacing:.24em;color:var(--warm-2);text-transform:uppercase}
.cta-band p{margin-top:20px;max-width:640px;font-size:15px;line-height:2;color:var(--warm-2)}
.cta-band .btn-p{margin-top:28px}

/* ---------- 9. 表单 ---------- */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.field{display:flex;flex-direction:column;gap:8px}
.field.full{grid-column:1/-1}
.field>label,.field>span.lbl{font-size:13.5px;font-weight:600;color:var(--ink);letter-spacing:.02em}
.field>label i,.field>span.lbl i{font-style:normal;color:var(--ochre);margin-left:4px}
.field .hint{font-size:12.5px;color:var(--ink-3);font-weight:400}
.field textarea{min-height:120px;resize:vertical}
.form-note{margin-top:20px;padding:16px 18px;background:var(--paper-2);border-left:2px solid var(--ochre);
  font-size:13px;line-height:1.9;color:var(--ink-2)}
.form-actions{margin-top:26px;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.checkline{display:flex;align-items:flex-start;gap:9px;font-size:13.5px;color:var(--ink-2);line-height:1.8}
.checkline input{margin-top:5px;accent-color:var(--ochre);width:15px;height:15px;flex:none}
.form-ok{display:none;margin-top:26px;padding:26px;background:var(--card);border:1px solid var(--line);
  border-left:3px solid var(--ochre);border-radius:2px}
.form-ok.show{display:block}
.form-ok h3{font-size:20px;color:var(--ink)}
.form-ok p{margin-top:10px;font-size:14px;line-height:1.9;color:var(--ink-2)}
.form-ok .okno{display:inline-block;margin-top:14px;padding:9px 16px;background:var(--paper-2);
  border:1px solid var(--line);font-family:var(--mono);font-size:14px;letter-spacing:.1em;color:var(--ochre)}
.form-err{font-size:13px;color:#B3382C;min-height:18px;margin-top:10px}

/* ---------- 10. 名录列表 ---------- */
.mlist{border-top:1px solid var(--line)}
.mrow{display:grid;grid-template-columns:minmax(140px,1.2fr) minmax(120px,1fr) minmax(0,2fr);gap:16px;
  align-items:center;padding:15px 4px;border-bottom:1px solid var(--line);transition:background .18s}
.mrow:hover{background:var(--card)}
.mrow b{font-size:15px;font-weight:600;color:var(--ink)}
.mrow .m-meta{font-family:var(--mono);font-size:12px;letter-spacing:.05em;color:var(--ink-2)}
.mrow .m-proj{font-size:13px;color:var(--ink-2)}
.loadmore{display:flex;justify-content:center;margin-top:26px}

/* ---------- 10.5 分页（多省名录） ---------- */
.pager{display:flex;align-items:center;justify-content:space-between;gap:16px 24px;flex-wrap:wrap;
  margin-top:30px;padding-top:22px;border-top:1px solid var(--line)}
.pg-info{font-family:var(--mono);font-size:12.5px;letter-spacing:.04em;color:var(--ink-3)}
.pg-info b{font-weight:600;color:var(--ink)}
.pg-ctrl{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pg-num,.pg-arrow{height:38px;min-width:38px;padding:0 11px;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid var(--line);background:var(--card);border-radius:2px;cursor:pointer;
  font-family:var(--mono);font-size:13px;letter-spacing:.02em;color:var(--ink-2);
  transition:border-color .18s,color .18s,background .18s}
.pg-arrow{font-family:var(--sans);padding:0 15px}
.pg-num:hover,.pg-arrow:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}
.pg-num.on{background:var(--accent);border-color:var(--accent);color:#FFF9F5;font-weight:600}
.pg-arrow:disabled{opacity:.32;cursor:not-allowed}
.pg-gap{min-width:20px;text-align:center;font-family:var(--mono);font-size:13px;color:var(--ink-3)}
@media (max-width:760px){
  /* 窄屏放不下 7 个页码，只留前后翻页，页码信息交给下方文字 */
  .pager{flex-direction:column-reverse;align-items:center;gap:14px;margin-top:26px}
  .pg-ctrl .pg-num,.pg-ctrl .pg-gap{display:none}
  .pg-ctrl{gap:10px}
  .pg-arrow{height:40px;padding:0 22px;font-size:13.5px}
  .pg-info{text-align:center;font-size:12px}
}

/* ---------- 11. 寻访地图 ---------- */
.map-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.prov{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px 18px;background:var(--card);
  border:1px solid var(--line);border-radius:2px;text-align:left;transition:.2s}
.prov:hover,.prov.on{border-color:var(--ochre)}
.prov.on{background:rgba(var(--accent-rgb),.05)}
.prov b{font-size:16px;font-weight:600;color:var(--ink)}
.prov span{font-family:var(--mono);font-size:12px;color:var(--ink-2)}
.prov-detail{margin-top:22px;padding:clamp(22px,3vw,34px);background:var(--card);border:1px solid var(--line);border-radius:2px}
/* 名录视图：点击省份后原地展开，带轻微下落动画 */
.prov-inline{grid-column:1/-1;margin:-4px 0 8px}
.prov-inline .prov-detail{margin-top:0;border-color:var(--accent);animation:provDrop .32s cubic-bezier(.22,.61,.36,1)}
@keyframes provDrop{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.pd-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap;
  padding-bottom:18px;border-bottom:1px solid var(--line)}
.pd-head h3{font-size:24px;font-weight:650;color:var(--ink)}
.pd-head .pd-num{font-family:var(--mono);font-size:12px;color:var(--ink-3)}
.pd-cols{display:grid;grid-template-columns:1fr 1fr;gap:clamp(20px,3vw,40px);margin-top:22px}
.pd-cols h4{font-size:13px;letter-spacing:.14em;color:var(--ink-3);font-weight:600;margin-bottom:12px}
.pd-cols ul{display:flex;flex-direction:column;gap:9px}
.pd-cols li{font-size:13.5px;color:var(--ink-2);display:flex;justify-content:space-between;gap:10px}
.pd-cols li em{font-style:normal;font-family:var(--mono);font-size:11.5px;color:var(--ink-3)}
.pd-tags{display:flex;flex-wrap:wrap;gap:7px;margin-top:18px}
.pd-actions{margin-top:22px}
/* ---------- 图谱：左图右档，点节点右侧即时更新 ---------- */
.atlas-wrap{margin-top:22px;background:var(--card);border:1px solid var(--line);border-radius:2px;overflow:hidden;scroll-margin-top:112px}
.atlas-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:15px 20px;border-bottom:1px solid var(--line);background:var(--paper-2)}
.atlas-t{display:inline-flex;align-items:center;gap:9px;font-family:var(--serif);font-size:16px;
  letter-spacing:.05em;color:var(--ink);font-weight:600}
.atlas-t svg{width:17px;height:17px;color:var(--accent);flex:none}
.atlas-sp{flex:1}
.atlas-switch{display:inline-flex;background:var(--card);border:1px solid var(--line);border-radius:999px;padding:3px}
.atlas-switch button{padding:6px 16px;border:0;background:none;border-radius:999px;cursor:pointer;
  font-family:inherit;font-size:13.5px;color:var(--ink-3);transition:.2s}
.atlas-switch button:hover{color:var(--ink)}
.atlas-switch button.on{background:var(--accent);color:#fff;font-weight:600}
.atlas-main{display:grid;grid-template-columns:minmax(0,1fr) 316px;align-items:stretch}
.atlas-stage{position:relative;padding:14px 12px 4px;min-width:0}
.atlas-stage svg{display:block;width:100%;height:auto}
.atlas-ring{fill:none;stroke:#DBCEB6;stroke-width:1;stroke-dasharray:3 6}
.atlas-core-halo{fill:var(--accent);opacity:.09}
.atlas-core{fill:var(--phead-bg)}
.atlas-core-t{font-family:var(--serif);font-size:13.5px;fill:var(--warm);letter-spacing:.1em}
.atlas-node{cursor:pointer}
.atlas-node .an-hit{fill:transparent;stroke:none;pointer-events:all}
.atlas-node .an-core{transition:filter .18s ease,stroke-width .18s ease,fill .18s ease}
.atlas-node .an-core.prov{fill:#B7A588}
.atlas-node:hover .an-core{filter:brightness(1.1)}
.atlas-node:focus{outline:none}
.atlas-node:focus-visible .an-core{stroke:var(--accent);stroke-width:3.4}
.atlas-link{transition:stroke-opacity .2s,stroke-width .2s}
/* 节点文字：字号加大 + 暖墨色 + 白描边，压在连线上依然清晰 */
.atlas-node text{paint-order:stroke;stroke:#FDFBF6;stroke-width:4;stroke-linejoin:round;pointer-events:none}
.an-plate{fill:#FDFBF6;fill-opacity:.92;pointer-events:auto;cursor:pointer}
.an-name{font-family:var(--sans);font-size:14px;font-weight:600;fill:#2A231B;letter-spacing:.02em;pointer-events:auto;cursor:pointer}
.an-num{font-family:var(--mono);font-size:11.5px;fill:#6B5F4F;letter-spacing:.02em}
.an-prov{font-family:var(--sans);font-size:13px;font-weight:500;fill:#2A231B;pointer-events:auto;cursor:pointer}
.atlas-node:hover .an-name{fill:var(--accent)}
.atlas-node.on .an-name{font-weight:700}
.atlas-node.on .an-core{stroke:#FDFBF6;stroke-width:3.4}
.atlas-node.on .an-core.prov{fill:var(--accent)}
.atlas-note{margin:0;padding:4px 10px 15px;font-family:var(--mono);font-size:11.5px;
  letter-spacing:.08em;color:var(--ink-3);text-align:center}
/* 右侧档案栏 */
.atlas-side{border-left:1px solid var(--line);background:var(--paper-2);padding:24px 22px;
  max-height:668px;overflow-y:auto}
.atlas-side .as-body{animation:asIn .26s ease both}
@keyframes asIn{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
.as-kicker{font-family:var(--mono);font-size:12px;letter-spacing:.2em;color:var(--accent);
  font-weight:600;margin-bottom:9px}
.as-title{font-family:var(--serif);font-size:23px;font-weight:600;letter-spacing:.04em;
  color:var(--ink);line-height:1.35;margin-bottom:6px}
.as-sub{font-size:13px;color:var(--ink-2);margin-bottom:15px}
.as-stat{display:flex;gap:16px;padding:13px 0;margin-bottom:16px;
  border-top:1px dashed var(--line);border-bottom:1px dashed var(--line)}
.as-stat div{flex:1}
.as-stat b{display:block;font-family:var(--serif);font-size:22px;color:var(--accent);line-height:1.2}
.as-stat span{font-size:12px;color:var(--ink-2)}
.as-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}
.as-chip{font-size:12px;line-height:1.7;padding:2px 9px;border:1px solid var(--line);
  border-radius:999px;color:var(--ink-2);background:var(--card)}
.as-list{list-style:none;margin:0 0 4px;padding:0;display:grid;gap:8px}
.as-list li{position:relative;padding-left:13px;font-size:13.5px;line-height:1.75;color:var(--ink-2)}
.as-list li::before{content:"";position:absolute;left:0;top:9px;width:5px;height:5px;
  border-radius:50%;background:var(--accent);opacity:.55}
.as-list li i{font-style:normal;margin-left:6px;font-size:12px;color:var(--ink-3)}
.as-hint{font-size:13.5px;line-height:1.9;color:var(--ink-2);margin:0}
.as-hint b{color:var(--ink);font-weight:600}
.as-faint{color:var(--ink-3);font-size:12.5px;line-height:1.9;margin:0}
.as-more{display:inline-flex;align-items:center;gap:6px;margin-top:18px;font-size:12.5px;
  color:var(--accent);text-decoration:none;border-bottom:1px solid currentColor;padding-bottom:2px}
.as-more svg{width:13px;height:13px}
/* 空态：门类速览，点了直接在图谱上选中 */
.as-quick{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.as-quick li{margin:0}
.as-quick button{display:flex;align-items:center;gap:9px;width:100%;padding:8px 6px;
  border:0;border-radius:2px;background:none;cursor:pointer;font-family:inherit;text-align:left;transition:background .18s}
.as-quick button:hover{background:var(--card)}
.as-quick .qc-dot{width:8px;height:8px;border-radius:50%;flex:none}
.as-quick b{font-family:var(--serif);font-size:14px;font-weight:600;color:var(--ink);letter-spacing:.03em}
.as-quick em{margin-left:auto;font-style:normal;font-family:var(--mono);font-size:12px;color:var(--ink-3)}
@media (max-width:1080px){
  .atlas-main{grid-template-columns:1fr}
  .atlas-side{border-left:0;border-top:1px solid var(--line);max-height:none}
}
@media (max-width:640px){
  .atlas-stage{padding:8px 4px 2px;overflow-x:auto}
  .atlas-stage svg{min-width:560px}
  .atlas-side{padding:20px 18px}
  .atlas-bar{padding:13px 15px}
}

/* ---------- 12. 定制课程台 ---------- */
.cst-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:clamp(24px,3vw,44px)}
.cst-panel{background:var(--card);border:1px solid var(--line);border-radius:2px;padding:clamp(20px,2.6vw,30px)}
.cst-panel h3{font-size:16px;font-weight:650;color:var(--ink);margin-bottom:16px}
.cst-panel h3 small{display:block;margin-top:5px;font-family:var(--mono);font-size:12px;letter-spacing:.14em;
  color:var(--ink-3);text-transform:uppercase;font-weight:400}
.cst-pool{display:grid;grid-template-columns:1fr 1fr;gap:10px;max-height:440px;overflow-y:auto;padding-right:4px}
.cst-opt{display:flex;align-items:flex-start;gap:10px;padding:12px 13px;border:1px solid var(--line);
  border-radius:2px;text-align:left;transition:.2s;background:var(--paper)}
.cst-opt:hover{border-color:var(--ochre)}
.cst-opt.on{border-color:var(--ochre);background:rgba(var(--accent-rgb),.06)}
.cst-opt .bx{width:16px;height:16px;border:1px solid var(--line);border-radius:2px;flex:none;margin-top:2px;
  display:grid;place-items:center;background:var(--card)}
.cst-opt.on .bx{background:var(--ochre);border-color:var(--ochre);color:#fff}
.cst-opt .bx svg{width:11px;height:11px}
.cst-opt .co-t{font-size:13.5px;font-weight:600;color:var(--ink);line-height:1.4}
.cst-opt .co-d{display:block;margin-top:5px;font-family:var(--mono);font-size:11.5px;color:var(--ink-3)}
.cst-opt .co-p{display:block;margin-top:5px;font-size:12.5px;color:var(--ochre)}
.cst-sum{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-top:18px;
  padding-top:16px;border-top:1px solid var(--line)}
.cst-sum span{font-size:13px;color:var(--ink-2)}
.cst-sum b{font-family:var(--mono);font-size:24px;color:var(--ochre);font-weight:600}
.cst-facts{margin-top:16px;font-size:13px;line-height:1.9;color:var(--ink-2)}
.cst-facts p+p{margin-top:6px}

/* ---------- 13. 登录 / 注册 ----------
   结构：整屏暗场，表单居中成一枚卡片。
   背景只取一张实拍（织机），压到近黑，只留木料与经线的隐约肌理；
   四角用暗角收黑，视线自然落在中央。
   节奏沿用「标记 → 英文小标 → 大标题 → 字段 → 主按钮 → 分隔 → 次级入口 → 底部切换」，
   次级入口换成站内语境（游客浏览 / 非遗档案），不使用任何第三方品牌。
   ------------------------------------------------------------ */
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]){
  /* 卡通地毯纹样：内联 SVG，无缝平铺，零请求 */
  --carpet:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='340' height='340' viewBox='0 0 340 340'%3E%3Crect width='340' height='340' fill='%23B03F2C'/%3E%3Cg stroke='%238A2C1A' stroke-width='1.3' fill='none' opacity='.3'%3E%3Cpath d='M0 170L170 0L340 170L170 340Z'/%3E%3Cpath d='M-170 170L170 510M510 170L170 -170'/%3E%3C/g%3E%3Cg transform='translate(170 170)'%3E%3Cpath d='M0.0 -116.0L116.0 0.0L0.0 116.0L-116.0 0.0Z' fill='%2393321F' stroke='%2372241A' stroke-width='2.2'/%3E%3Cpath d='M0.0 -103.0L103.0 0.0L0.0 103.0L-103.0 0.0Z' fill='none' stroke='rgba(233,182,92,.42)' stroke-width='1.4' opacity='.6'/%3E%3C/g%3E%3Cg transform='translate(170 170)'%3E%3Cpath d='M61.0 25.3L20.5 20.5L25.3 61.0L0.0 29.0L-25.3 61.0L-20.5 20.5L-61.0 25.3L-29.0 0.0L-61.0 -25.3L-20.5 -20.5L-25.3 -61.0L-0.0 -29.0L25.3 -61.0L20.5 -20.5L61.0 -25.3L29.0 -0.0Z' fill='%23E9B65C' stroke='%2372241A' stroke-width='4' stroke-linejoin='round'/%3E%3Cpath d='M34.2 14.2L12.0 12.0L14.2 34.2L0.0 17.0L-14.2 34.2L-12.0 12.0L-34.2 14.2L-17.0 0.0L-34.2 -14.2L-12.0 -12.0L-14.2 -34.2L-0.0 -17.0L14.2 -34.2L12.0 -12.0L34.2 -14.2L17.0 -0.0Z' fill='%232F5D7C' stroke='%23F1E0BE' stroke-width='2.2' stroke-linejoin='round' opacity='.45'/%3E%3Ccircle r='12.5' fill='%23D65A3E' stroke='%23F1E0BE' stroke-width='3.2'/%3E%3Ccircle r='4.4' fill='%233E6E56'/%3E%3C/g%3E%3Cg transform='translate(292.0 170.0)'%3E%3Cpath d='M0.0 -12.0L9.0 0.0L0.0 12.0L-9.0 0.0Z' fill='%232F5D7C' stroke='%23F1E0BE' stroke-width='2.2' stroke-linejoin='round'/%3E%3C/g%3E%3Cg transform='translate(170.0 292.0)'%3E%3Cpath d='M0.0 -12.0L9.0 0.0L0.0 12.0L-9.0 0.0Z' fill='%232F5D7C' stroke='%23F1E0BE' stroke-width='2.2' stroke-linejoin='round'/%3E%3C/g%3E%3Cg transform='translate(48.0 170.0)'%3E%3Cpath d='M0.0 -12.0L9.0 0.0L0.0 12.0L-9.0 0.0Z' fill='%232F5D7C' stroke='%23F1E0BE' stroke-width='2.2' stroke-linejoin='round'/%3E%3C/g%3E%3Cg transform='translate(170.0 48.0)'%3E%3Cpath d='M0.0 -12.0L9.0 0.0L0.0 12.0L-9.0 0.0Z' fill='%232F5D7C' stroke='%23F1E0BE' stroke-width='2.2' stroke-linejoin='round'/%3E%3C/g%3E%3Cg transform='translate(44 44)'%3E%3Cpath d='M0.0 -20.0L15.0 0.0L0.0 20.0L-15.0 0.0Z' fill='%23E4CFA4' stroke='%2372241A' stroke-width='2.2' stroke-linejoin='round' opacity='.45'/%3E%3Cpath d='M0.0 -9.0L6.5 0.0L0.0 9.0L-6.5 0.0Z' fill='%23E9B65C' stroke='none'/%3E%3Ccircle r='4' fill='%23E9B65C' stroke='%2372241A' stroke-width='2'/%3E%3C/g%3E%3Cg transform='translate(296 44)'%3E%3Cpath d='M0.0 -20.0L15.0 0.0L0.0 20.0L-15.0 0.0Z' fill='%23E4CFA4' stroke='%2372241A' stroke-width='2.2' stroke-linejoin='round' opacity='.45'/%3E%3Cpath d='M0.0 -9.0L6.5 0.0L0.0 9.0L-6.5 0.0Z' fill='%23E9B65C' stroke='none'/%3E%3Ccircle r='4' fill='%23E9B65C' stroke='%2372241A' stroke-width='2'/%3E%3C/g%3E%3Cg transform='translate(44 296)'%3E%3Cpath d='M0.0 -20.0L15.0 0.0L0.0 20.0L-15.0 0.0Z' fill='%23E4CFA4' stroke='%2372241A' stroke-width='2.2' stroke-linejoin='round' opacity='.45'/%3E%3Cpath d='M0.0 -9.0L6.5 0.0L0.0 9.0L-6.5 0.0Z' fill='%23E9B65C' stroke='none'/%3E%3Ccircle r='4' fill='%23E9B65C' stroke='%2372241A' stroke-width='2'/%3E%3C/g%3E%3Cg transform='translate(296 296)'%3E%3Cpath d='M0.0 -20.0L15.0 0.0L0.0 20.0L-15.0 0.0Z' fill='%23E4CFA4' stroke='%2372241A' stroke-width='2.2' stroke-linejoin='round' opacity='.45'/%3E%3Cpath d='M0.0 -9.0L6.5 0.0L0.0 9.0L-6.5 0.0Z' fill='%23E9B65C' stroke='none'/%3E%3Ccircle r='4' fill='%23E9B65C' stroke='%2372241A' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
  background:#B03F2C;color:#241E18;
}

.auth-wrap{
  position:relative;
  min-height:100vh;
  min-height:100svh;
  display:grid;place-items:center;
  padding:calc(86px + clamp(16px,3vh,30px)) clamp(18px,4vw,48px) clamp(24px,3.6vh,46px);
  overflow:hidden;
  isolation:isolate;
}

/* 背景：一张实拍，压到近黑 */
.auth-bg{
  position:absolute;inset:0;z-index:-2;overflow:hidden;background-color:#B03F2C;
  background-image:var(--carpet);
  background-size:340px 340px;
  background-position:-170px -170px;   /* 错开半格：卡片正落在四颗星之间 */
  background-repeat:repeat;
}
/* 背景改为纯色 + 柔光：实拍图在低透明度下仍会留下色块，不如直接退场 */
.auth-bg img{display:none}
/* 压光：中心留透、四周收暗，纹样不抢卡片 */
.auth-bg::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(76% 60% at 50% 46%,rgba(255,238,206,.14) 0%,rgba(255,238,206,0) 62%),
    radial-gradient(132% 108% at 50% 44%,rgba(70,20,12,0) 26%,rgba(70,20,12,.26) 68%,rgba(70,20,12,.58) 100%);
}
/* 顶部压暗：给导航留出可读的底子，与下方纹样自然衔接 */
.auth-bg::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(74,22,14,.5) 0%,rgba(74,22,14,.16) 12%,rgba(74,22,14,0) 22%);
}

/* 卡片 */
.auth-card{
  position:relative;
  width:min(440px,100%);
  padding:clamp(22px,2.4vw,32px);
  background-color:#F6F1E6;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='p' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.05' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23p)' opacity='.5'/%3E%3C/svg%3E"),
    linear-gradient(158deg,#FBF7EE 0%,#F6F1E6 52%,#F1EADC 100%);
  background-blend-mode:soft-light,normal;
  -webkit-backdrop-filter:none;
  backdrop-filter:none;
  border:1px solid rgba(255,255,255,.5);
  border-radius:3px;
  box-shadow:
    0 46px 92px -36px rgba(56,14,8,.72),
    0 12px 28px -16px rgba(56,14,8,.48),
    0 0 0 1px rgba(255,255,255,.42),
    0 0 36px 8px rgba(255,240,210,.14),
    inset 0 1px 0 rgba(255,255,255,.9),
    inset 0 -1px 0 rgba(36,30,24,.07);
  animation:cardIn .56s cubic-bezier(.22,.61,.36,1) both;
}
@keyframes cardIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
/* 四角装帧线：像册页的压角，只有 16px，不抢内容 */
.auth-card::after{
  content:"";position:absolute;inset:9px;pointer-events:none;border-radius:2px;
  background:
    linear-gradient(#C0603A,#C0603A) left top/16px 1px no-repeat,
    linear-gradient(#C0603A,#C0603A) left top/1px 16px no-repeat,
    linear-gradient(#C0603A,#C0603A) right top/16px 1px no-repeat,
    linear-gradient(#C0603A,#C0603A) right top/1px 16px no-repeat,
    linear-gradient(#C0603A,#C0603A) left bottom/16px 1px no-repeat,
    linear-gradient(#C0603A,#C0603A) left bottom/1px 16px no-repeat,
    linear-gradient(#C0603A,#C0603A) right bottom/16px 1px no-repeat,
    linear-gradient(#C0603A,#C0603A) right bottom/1px 16px no-repeat;
  opacity:.26;
}
/* 上沿一条赭石细光：让卡片看起来有厚度，而不是一块平色 */
.auth-card::before{
  content:"";position:absolute;left:1px;right:1px;top:0;height:1px;pointer-events:none;
  background:linear-gradient(90deg,transparent 12%,rgba(192,96,58,.42) 50%,transparent 88%);
}
@media (prefers-reduced-motion:reduce){
  .auth-card{animation:none}
  .auth-bg img{animation:none;transform:none}
}

/* 印记：一方小章，替代品牌 logo */
.auth-mark{
  position:relative;
  width:38px;height:38px;margin:0 auto 16px;
  display:grid;place-items:center;
  color:#C0603A;
}
/* 印记后面一圈极淡的赭光，让它从纸面上"浮"起来一点点 */
.auth-mark::before{
  content:"";position:absolute;inset:-12px;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,rgba(192,96,58,.14) 0%,rgba(192,96,58,0) 68%);
}
.auth-mark svg{width:100%;height:100%;display:block;overflow:visible}

.auth-card .en{
  display:flex;align-items:center;justify-content:center;gap:12px;
  font-family:var(--mono);font-size:10.5px;letter-spacing:.34em;
  text-indent:.34em;   /* 补偿末字符的字距，保持真正居中 */
  text-transform:uppercase;color:#A75A36;
}
.auth-card .en::before,
.auth-card .en::after{
  content:"";width:22px;height:1px;flex:none;text-indent:0;
  background:linear-gradient(90deg,rgba(167,90,54,0),rgba(167,90,54,.5));
}
.auth-card .en::after{background:linear-gradient(90deg,rgba(167,90,54,.5),rgba(167,90,54,0))}
.auth-card h1{
  margin-top:14px;text-align:center;
  font-family:var(--serif);font-weight:600;
  font-size:clamp(25px,2.6vw,34px);line-height:1.16;letter-spacing:.03em;
  color:#241E18;
}
.auth-card .lead{
  margin-top:10px;text-align:center;
  font-size:13px;line-height:1.8;color:#6E6252;
}

/* 表单 */
.auth-form{margin-top:18px;display:flex;flex-direction:column;gap:11px}
.auth-form .field{display:flex;flex-direction:column;gap:7px}
.auth-form .field>label{
  font-family:var(--mono);font-size:11px;font-weight:400;letter-spacing:.06em;
  text-transform:uppercase;color:#796B57;
}
.auth-form input[type="text"],
.auth-form input[type="password"]{
  width:100%;height:44px;padding:0 15px;
  background:#FFFFFF;
  border:1px solid #D8CCB7;
  border-radius:2px;
  font-size:15px;letter-spacing:.02em;color:#241E18;
  box-shadow:inset 0 1px 2px rgba(36,30,24,.05);
  transition:border-color .2s,background .2s,box-shadow .2s;
}
.auth-form input::placeholder{color:#94866F}
.auth-form input[type="text"]:hover,
.auth-form input[type="password"]:hover{border-color:#C9BDA8}
.auth-form input:focus{
  outline:none;
  border-color:rgba(192,96,58,.9);
  background:#FFFFFF;
  box-shadow:0 0 0 3px rgba(192,96,58,.14),inset 0 1px 2px rgba(36,30,24,.03);
}

/* 密码框：右侧可见切换 */
.pw{position:relative;display:block}
.pw input{padding-right:47px}
.pw .ipt-eye{
  position:absolute;right:6px;top:50%;transform:translateY(-50%);
  width:34px;height:34px;display:grid;place-items:center;border-radius:2px;
  color:#9A8C77;transition:color .2s,background .2s;
}
.pw .ipt-eye:hover{color:#241E18;background:#EFE7D8}
.pw .ipt-eye svg{width:17px;height:17px}
.pw .ipt-eye .eye-off{display:none}
.pw .ipt-eye.on .eye-on{display:none}
.pw .ipt-eye.on .eye-off{display:block}

/* 提示与错误 */
.auth-msg{font-size:12.8px;line-height:1.7;color:#B0552F;margin:-1px 0}
.auth-msg:empty{display:none}
.auth-msg.err{color:#B3382C}
.auth-msg.err::before{
  content:"!";display:inline-grid;place-items:center;width:15px;height:15px;
  margin-right:7px;border:1px solid currentColor;border-radius:50%;
  font-size:10px;line-height:1;vertical-align:-2px;
}

/* 主按钮 */
.auth-submit{
  width:100%;height:48px;margin-top:4px;
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  background:#C0603A;color:#FFF9F5;
  border-radius:2px;font-size:15px;letter-spacing:.12em;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.22),
    inset 0 -2px 0 rgba(88,28,14,.22),
    0 12px 22px -16px rgba(120,50,26,.75);
  transition:background .22s,transform .18s,box-shadow .22s;
}
.auth-submit svg{width:16px;height:16px;transition:transform .22s}
.auth-submit:hover{
  background:#CE6E45;transform:translateY(-1px);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.28),
    inset 0 -2px 0 rgba(88,28,14,.18),
    0 18px 28px -16px rgba(150,62,32,.85);
}
.auth-submit:hover svg{transform:translateX(3px)}
.auth-submit:active{transform:translateY(0);box-shadow:none}
.auth-submit[disabled]{opacity:.7;cursor:progress;transform:none;box-shadow:none}

/* 或 */
.auth-or{
  margin:13px 0 12px;
  display:flex;align-items:center;gap:14px;
  font-family:var(--mono);font-size:11px;letter-spacing:.22em;
  color:#9A8C77;
}
.auth-or::before,.auth-or::after{content:"";flex:1;height:1px}
.auth-or::before{background:linear-gradient(90deg,rgba(220,208,187,0),rgba(220,208,187,.95))}
.auth-or::after{background:linear-gradient(90deg,rgba(220,208,187,.95),rgba(220,208,187,0))}

/* 次级入口 */
.auth-alt{display:flex;flex-direction:column;gap:9px}
.alt-btn{
  height:42px;display:flex;align-items:center;justify-content:center;gap:9px;
  background:rgba(255,255,255,.55);
  border:1px solid #DED4C2;border-radius:2px;
  font-size:13.5px;letter-spacing:.06em;color:#4E4438;
  transition:border-color .2s,background .2s,color .2s;
}
.alt-btn svg{width:15px;height:15px;color:#9A8C77;transition:color .2s}
.alt-btn:hover{border-color:#C0603A;background:#FFFDF8;color:#241E18}
.alt-btn:hover svg{color:#C0603A}

/* 底部 */
.auth-foot{
  margin-top:12px;text-align:center;
  font-size:13px;color:#8B7C67;
}
.auth-foot a{color:#B0552F;border-bottom:1px solid rgba(192,96,58,.34);transition:border-color .2s,color .2s}
.auth-foot a:hover{color:#8E3F1F;border-color:rgba(142,63,31,.7)}

.auth-tip{
  margin-top:10px;text-align:center;
  font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;line-height:1.8;
  color:#7D7059;
}

/* 复选框（注册页） */
.checkline{
  position:relative;display:flex;gap:11px;align-items:flex-start;margin:2px 0 1px;
  font-size:12.5px;line-height:1.7;color:#5E5346;cursor:pointer;
}
.checkline input{position:absolute;left:0;top:1px;width:17px;height:17px;margin:0;opacity:0;cursor:pointer;z-index:1}
.checkline .box{
  flex:none;width:17px;height:17px;margin-top:2px;position:relative;
  border:1px solid #C9BDA8;border-radius:2px;background:#FFFDF8;
  transition:background .18s,border-color .18s;
}
.checkline .box::after{
  content:"";position:absolute;left:4.5px;top:1.5px;width:5px;height:9px;
  border:solid #FFF9F5;border-width:0 1.6px 1.6px 0;
  transform:rotate(45deg) scale(0);transition:transform .16s ease;
}
.checkline input:checked+.box{background:var(--accent);border-color:var(--accent)}
.checkline input:checked+.box::after{transform:rotate(45deg) scale(1)}
.checkline input:focus-visible+.box{box-shadow:0 0 0 3px rgba(192,96,58,.22)}
.checkline:hover .box{border-color:#C0603A}

/* 登录页窄屏：单栏时卡片贴边、标题降一档；纹样同步缩小，避免一个星撑满屏 */
@media (max-width:760px){
  .auth-wrap{padding:calc(78px + 18px) 20px 40px}
  .auth-card{padding:26px 22px}
  .auth-bg{background-size:150px 150px;background-position:-75px -75px}
}
@media (max-width:520px){
  .auth-card{padding:24px 18px}
  .auth-card h1{font-size:27px}
  .auth-mark{width:30px;height:30px;margin-bottom:14px}
  .auth-card .lead{font-size:13px}
}

/* ---------- 14. 个人空间 ---------- */
.acct-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(14px,2vw,22px)}
.acct-card{background:var(--card);border:1px solid var(--line);border-radius:2px;padding:clamp(20px,2.6vw,30px)}
.acct-card .ach{display:flex;align-items:center;gap:10px;margin-bottom:16px}
.acct-card .ach .ic{width:34px;height:34px;display:grid;place-items:center;border-radius:50%;background:var(--paper-2);color:var(--ochre)}
.acct-card .ach svg{width:18px;height:18px}
.acct-card .ach h3{font-size:16px;font-weight:650;color:var(--ink)}
.acct-card ul{display:flex;flex-direction:column;gap:10px}
.acct-card li{font-size:13.5px;color:var(--ink-2);padding-bottom:10px;border-bottom:1px solid var(--line)}
.acct-card li:last-child{border-bottom:0;padding-bottom:0}
.acct-card li .sub{display:block;margin-top:4px;font-size:12px;color:var(--ink-3)}
.acct-empty{display:flex;flex-direction:column;align-items:center;text-align:center;
  padding:clamp(50px,8vh,90px) 20px;background:var(--card);border:1px solid var(--line);border-radius:2px}
.acct-empty h2{font-size:clamp(24px,2.6vw,34px);color:var(--ink)}
.acct-empty p{margin-top:14px;max-width:520px;font-size:14.5px;line-height:1.95;color:var(--ink-2)}
.acct-empty .acts{display:flex;gap:14px;margin-top:26px;flex-wrap:wrap;justify-content:center}
.acct-top{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:26px}

/* ---------- 15. 图片编辑台 ---------- */
.ed-bar .wrap{padding-top:14px;padding-bottom:14px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.ed-tabs{display:flex;gap:6px;flex-wrap:wrap}
.ed-tabs button{padding:8px 14px;font-size:13px;color:var(--ink-2);border:1px solid var(--line);
  border-radius:2px;background:var(--card);transition:.2s}
.ed-tabs button:hover{border-color:var(--ochre)}
.ed-tabs button.on{background:var(--ochre);border-color:var(--ochre);color:#FFF9F5}
.ed-actions{margin-left:auto;display:flex;gap:10px}
.ed-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.ed-card{background:var(--card);border:1px solid var(--line);border-radius:2px;overflow:hidden}
.ed-card .eh{aspect-ratio:4/3;background:var(--paper-2);position:relative;overflow:hidden}
.ed-card .eh img{width:100%;height:100%;object-fit:cover}
.ed-card .eb{padding:13px 14px 15px}
.ed-card .eb h3{font-size:13.5px;font-weight:600;color:var(--ink);line-height:1.5}
.ed-card .eb p{margin-top:6px;font-family:var(--mono);font-size:11.5px;letter-spacing:.02em;color:var(--ink-2);word-break:break-all}
.ed-card .eb .ef{display:flex;align-items:center;gap:8px;margin-top:11px;flex-wrap:wrap}
.ed-badge{display:inline-block;padding:3px 8px;font-size:11.5px;letter-spacing:.05em;border-radius:999px}
.ed-badge.off{background:#FBE9E6;color:#B3382C}
.ed-badge.part{background:#FBF1E3;color:#8A5A2B}
.ed-badge.ok{background:#EAF2EE;color:#3B6A57}
.ed-badge.free{background:#E9EDF5;color:#3E5484}
.ed-badge.done{background:rgba(192,96,58,.1);color:var(--ochre)}
.ed-hint{margin-top:16px;font-size:13px;line-height:1.9;color:var(--ink-2)}

/* ---------- 16. 项目详解 ---------- */
.profile-head{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:clamp(24px,4vw,56px);align-items:start}
.profile-head .pfig{position:relative;aspect-ratio:4/3;overflow:hidden;border-radius:2px;border:1px solid var(--line)}
.profile-head .pfig img{width:100%;height:100%;object-fit:cover}
.profile-kv{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:20px}
.profile-kv div{padding:12px 14px;background:var(--card);border:1px solid var(--line);border-radius:2px}
.profile-kv dt{font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--ink-3)}
.profile-kv dd{margin-top:6px;font-size:14px;color:var(--ink)}
.profile-sec{margin-top:34px}
.profile-sec h3{font-size:19px;font-weight:650;color:var(--ink);padding-bottom:10px;border-bottom:1px solid var(--line)}
.profile-sec p{margin-top:14px;font-size:15px;line-height:2.1;color:var(--ink-2)}
.profile-masters{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:20px}
.pm{padding:18px;background:var(--card);border:1px solid var(--line);border-radius:2px}
.pm b{font-size:15px;color:var(--ink)}
.pm span{display:block;margin-top:6px;font-size:12px;color:var(--ochre)}
.pm p{margin-top:9px;font-size:12.5px;line-height:1.85;color:var(--ink-2)}

/* ---------- 17. 内页通用补充 ---------- */
.sub-h3{font-size:13px;letter-spacing:.16em;color:var(--ink-3);font-weight:600;margin-bottom:16px}
.plate-note{margin-top:22px;font-family:var(--mono);font-size:11.5px;letter-spacing:.08em;color:var(--ink-3)}
.notice{padding:14px 18px;background:var(--card);border:1px solid var(--line);border-left:2px solid var(--ochre);
  font-size:13px;line-height:1.9;color:var(--ink-2)}
.bullet-list{display:flex;flex-direction:column;gap:11px}
.bullet-list li{position:relative;padding-left:20px;font-size:14px;line-height:1.9;color:var(--ink-2)}
.bullet-list li::before{content:"";position:absolute;left:0;top:11px;width:7px;height:7px;border-radius:50%;background:var(--ochre)}
.num-list{display:flex;flex-direction:column;gap:0;border-top:1px solid var(--line)}
.num-list li{display:flex;gap:18px;padding:16px 0;border-bottom:1px solid var(--line)}
.num-list .nn{font-family:var(--mono);font-size:11.5px;letter-spacing:.14em;color:var(--ochre);flex:none;width:36px;padding-top:3px}
.num-list .nt b{display:block;font-size:15px;color:var(--ink)}
.num-list .nt p{margin-top:5px;font-size:13.5px;line-height:1.85;color:var(--ink-2)}
.mini-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:26px}
.mini-stats div{padding:18px 16px;background:var(--card);border:1px solid var(--line);border-radius:2px;text-align:center}
.mini-stats b{display:block;font-family:var(--mono);font-size:24px;color:var(--ochre);font-weight:600}
.mini-stats span{display:block;margin-top:8px;font-size:12.5px;color:var(--ink-2)}

/* ============================================================
   响应式（与 style.css 的 1080 / 640 断点保持一致）
   ============================================================ */
@media(max-width:1080px){
  .toolbar,.ed-bar{top:64px}
  .phead{padding-top:64px}
  .phead-inner{grid-template-columns:1fr;gap:26px}
  .phead-shot{order:-1;max-height:320px}
  .ph-stats{grid-template-columns:repeat(2,1fr)}
  .ph-stat:nth-child(2){border-right:0}
  .ph-stat:nth-child(n+3){border-top:1px solid var(--hair);padding-top:18px}
  .grid-4,.grid-3{grid-template-columns:repeat(2,1fr)}
  .map-grid{grid-template-columns:repeat(2,1fr)}
  .steps{grid-template-columns:repeat(2,1fr)}
  .cst-grid{grid-template-columns:1fr}
  .ed-grid{grid-template-columns:repeat(2,1fr)}
  .profile-head{grid-template-columns:1fr}
  .profile-masters{grid-template-columns:1fr}
  .mini-stats{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:640px){
  .grid-2,.grid-3,.grid-4{grid-template-columns:1fr}
  .plates{grid-template-columns:1fr}
  .form-grid{grid-template-columns:1fr}
  .field.full{grid-column:auto}
  .map-grid{grid-template-columns:1fr}
  .steps{grid-template-columns:1fr}
  .pd-cols{grid-template-columns:1fr}
  .cst-pool{grid-template-columns:1fr}
  .mrow{grid-template-columns:1fr;gap:5px}
  .ed-grid{grid-template-columns:1fr}
  .filters{flex-direction:column;align-items:stretch}
  .filter-hint{margin-left:0}
  .toolbar-inner{min-height:54px}
  .ph-stats{grid-template-columns:1fr 1fr}
  .acct-grid{grid-template-columns:1fr}
  .profile-kv{grid-template-columns:1fr}
  .ed-actions{margin-left:0;width:100%}
}

/* 导航：默认浮在暖褐背景上（暖白字 + 极淡顶光）；
   一旦滚动到米白卡片高度，切成米白磨砂 + 深字，避免白字压在浅底上 */
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav{
  color:var(--warm);
  position:fixed;
  /* 深红玻璃带：既能压住纹样，又透出底色，和地毯是"同一块料子" */
  background:rgba(86,28,19,.85);
  -webkit-backdrop-filter:blur(18px) saturate(1.15);
  backdrop-filter:blur(16px) saturate(1.15);
  border-bottom:2px solid rgba(233,182,92,.72);
  box-shadow:0 1px 0 rgba(114,36,26,.55),0 14px 30px -22px rgba(40,10,5,.9);
}
/* 连珠边：一排小金点，呼应地毯的织边，让分隔像"收口"而不是"贴条" */
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-inner::after{
  content:"";position:absolute;left:0;right:0;bottom:-11px;height:7px;pointer-events:none;
  background-image:radial-gradient(circle,rgba(233,182,92,.5) 1.3px,transparent 1.6px);
  background-size:16px 7px;
  background-position:5px 1px;
  background-repeat:repeat-x;
}
/* 下沿淡出 22px：边界清楚，但不是一刀切的硬线 */
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav::after{
  content:"";position:absolute;left:0;right:0;top:100%;height:22px;pointer-events:none;
  background:linear-gradient(180deg,rgba(58,14,10,.46) 0%,rgba(58,14,10,0) 100%);
}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.frosted{
  background:rgba(86,28,19,.9);
}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-inner{position:relative}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .brand i{color:var(--warm-3)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-link{color:var(--warm-2)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-link:hover,
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-link.on{color:var(--warm)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-link:hover{background:rgba(243,237,226,.1)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-r a{color:var(--warm-2)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-r a:hover{color:var(--warm)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-r .pill{border-color:rgba(243,237,226,.38)}

/* 滚动后加深一档，但仍是深红玻璃，避免页面中间闪出一条白带 */
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.scrolled{
  color:var(--warm);
  background:rgba(76,24,16,.92);
  -webkit-backdrop-filter:blur(18px) saturate(1.1);
  backdrop-filter:blur(18px) saturate(1.1);
  border-bottom-color:rgba(255,238,206,.34);
}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.scrolled .brand i{color:var(--warm-3)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.scrolled .nav-link{color:var(--warm-2)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.scrolled .nav-link:hover,
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.scrolled .nav-link.on{color:var(--warm)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.scrolled .nav-link:hover{background:rgba(243,237,226,.12)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.scrolled .nav-r a{color:var(--warm-2)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.scrolled .nav-r a:hover{color:var(--warm)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.scrolled .nav-r .pill{border-color:rgba(243,237,226,.4)}

/* 矮屏（1366×768 / 1280×800 / 1024×768 这类）：整体降一档，保证一屏放下 */
@media (max-height:860px){
  .auth-card{padding:20px 22px}
  .auth-mark{width:30px;height:30px;margin-bottom:9px}
  .auth-card h1{margin-top:10px;font-size:24px}
  .auth-card .lead{margin-top:6px;font-size:12px}
  .auth-form{margin-top:13px;gap:9px}
  .auth-form .field{gap:5px}
  .auth-form input[type="text"],
  .auth-form input[type="password"]{height:40px;font-size:14.5px}
  .auth-submit{height:42px;margin-top:2px}
  .auth-or{margin:10px 0 9px}
  .alt-btn{height:37px;font-size:13px}
  .auth-foot{margin-top:10px}
  .auth-tip{margin-top:7px}
  .checkline{font-size:11.5px}
}

/* 大屏：卡片略放宽，避免 1920 上显得像一枚小盒子 */
@media (min-width:1600px){
  .auth-card{width:500px;padding:38px 38px 36px}
  .auth-card h1{font-size:38px}
  .auth-wrap{padding-top:calc(86px + 46px);padding-bottom:58px}
}

/* 键盘可见焦点：暗底上浏览器默认描边不够清楚 */
body.auth-page a:focus-visible,
body.auth-page button:focus-visible,
body.auth-page label:focus-visible{
  outline:2px solid rgba(214,124,86,.9);
  outline-offset:3px;
}
body.auth-page input:focus-visible{outline:none}

/* ============================================================
   v29 · 收口（2026-11-06）
   ------------------------------------------------------------
   1) 页头主色降为墨调后，收尾区（.cta-band）原写法
      linear-gradient(135deg, phead-bg, phead-deep 135%) 走不到终点，
      底部仍停在主色中途，与纯黑页脚接出一条可见分界。
      改为 62% 就抵达 phead-deep，最后 38% 直接压到黑，
      让深色块「沉进」页脚，而不是「截断」在页脚上。
   2) 页头光晕在深底上会重新变成一块亮蓝/亮红，已降到 .16（见上）。
   ============================================================ */
body[data-theme="archive"] .cta-band,
body[data-theme="courses"] .cta-band,
body[data-theme="goods"] .cta-band{
  background:
    radial-gradient(120% 150% at 50% 30%,rgba(0,0,0,0) 34%,rgba(0,0,0,.16) 100%),
    linear-gradient(165deg,var(--phead-bg) 0%,var(--phead-deep) 62%,#000 100%);
}

/* ---------- v29 · 让传统色在页头上「认得出」 ----------
   主色压成墨调之后，页头里几乎只剩暖白字，霁蓝/宫墙红/缃金
   只剩下很淡的色相，读不出出处。这里只把英文眉批那一行
   混入 58% 的主色亮调 —— 12px 等宽小字，面积不到千分之一，
   却足以让「这是蓝 / 是红 / 是金」被眼睛确认。
   对比度实测（6.4~7.2:1），不影响可读性。 */
body[data-theme="archive"] .phead .ph-en{color:color-mix(in srgb,var(--accent-2) 58%,#F3EDE2)}
body[data-theme="courses"] .phead .ph-en{color:color-mix(in srgb,var(--accent-2) 58%,#F3EDE2)}
body[data-theme="goods"]   .phead .ph-en{color:color-mix(in srgb,var(--accent-2) 58%,#F3EDE2)}

/* ============================================================
   v30 · 页面底色（带文物出处）+ 绢纹 + 色源条（2026-11-09）
   ------------------------------------------------------------
   评审要求：
     ① 除首页外，每页要有底色，而不是统一的米白；
     ② 底色取中国传统色，纸面加细腻纹理，通透不压字；
     ③ 每色标注文物出处，作为非遗站区别于主站的说服力；
     ④ 小面积浓烈、大面积通透。
   做法：
     · 只改「纸」这一层：把 --paper / --paper-2 换成主色的极浅调，
       主色自身（--accent）仍只落在刻度、编号、按钮上（沿用 v29 的分配）；
     · 纹理用 1px 经纬重复线，5px 间距，叠加在纸面上，不改任何组件；
     · 每页末尾加一条色源说明（.tone-src），逐色写出处。
   ⚠️ 首页不在此列：index.html 没有 data-theme，--paper 仍是 #F7F4EC。
   ============================================================ */

/* ---------- 一、每页的「纸」：主色 5% 极浅调 ---------- */
/* 明度统一抬到 96% 以上：底色只在白纸里透出一点色相，
   两个相邻区块的落差压到 3% 以内 —— 落差一大就成「色块」，就读作堵。 */
body[data-theme="archive"]{  /* 霁蓝 · 故宫霁蓝釉 */
  --paper:#F7F9FA;--paper-2:#F0F4F6;
}
body[data-theme="courses"]{  /* 宫墙红 · 故宫红墙 */
  --paper:#FBF7F4;--paper-2:#F6EEEA;
}
body[data-theme="goods"]{    /* 缃金 · 《说文》缃，浅黄色也 */
  --paper:#FBF9F2;--paper-2:#F6F2E7;
}
body[data-theme="join"]{     /* 绛紫 · 织锦 */
  --paper:#FAF7FA;--paper-2:#F4EEF4;
}
body[data-theme="account"]{  /* 陶褐 · 陶土 */
  --paper:#FBF7F2;--paper-2:#F6EFE7;
}
body[data-theme="auth"]{     /* 赭石 · 矿物赭 */
  --paper:#FBF7F3;--paper-2:#F6EEE8;
}

/* ---------- 二、绢纹：1px 经纬，5px 间距 ----------
   只加在浅色区块上；深色区块（页头 / CTA / 页脚）不加，
   否则纹理在深底上会变成噪点。 */
/* 绢纹 + 顶部透光：
     1) 顶部一层大半径白，读作「光从上面透进来」，这是通透感的主要来源；
     2) 横向纤维极淡（.008），纵向更淡（.12），间距 5/13 不等，避免摩尔纹，
        也避免上一版那种「方格纸」的错觉。
   三层叠在一起，平均亮度比纯色只低 1~2 个点，但纸面不再是死的。 */
.section.light,
.section.light.alt{
  background-image:
    radial-gradient(120% 66% at 50% -6%, rgba(255,255,255,.85) 0%, rgba(255,255,255,0) 58%),
    repeating-linear-gradient(0deg, rgba(31,26,18,.008) 0 1px, rgba(0,0,0,0) 1px 5px),
    repeating-linear-gradient(90deg, rgba(255,255,255,.12) 0 1px, rgba(255,255,255,0) 1px 13px);
}
.section.light.alt{
  background-image:
    radial-gradient(120% 66% at 50% -6%, rgba(255,255,255,.62) 0%, rgba(255,255,255,0) 58%),
    repeating-linear-gradient(0deg, rgba(31,26,18,.011) 0 1px, rgba(0,0,0,0) 1px 5px),
    repeating-linear-gradient(90deg, rgba(255,255,255,.10) 0 1px, rgba(255,255,255,0) 1px 13px);
}

/* ---------- 三、色源条（页末） ---------- */
.tone-src-band{
  padding:clamp(34px,4.6vh,52px) 0 clamp(38px,5vh,58px);
  border-top:1px solid var(--line);
}
.tone-src-h{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.tone-src-h b{font-family:var(--serif,"Songti SC",serif);font-size:15px;font-weight:600;letter-spacing:.08em;color:var(--ink)}
.tone-src-h .k{
  font-size:10.5px;letter-spacing:.24em;text-transform:uppercase;
  color:var(--accent);border:1px solid currentColor;border-radius:2px;
  padding:2px 7px;opacity:.9;
}
.tone-src-h .en{font-size:10.5px;letter-spacing:.26em;text-transform:uppercase;color:var(--ink-3)}
.tone-src-l{
  list-style:none;display:grid;gap:14px 40px;
  grid-template-columns:repeat(2,minmax(0,1fr));
}
.tone-src-l li{display:grid;grid-template-columns:18px minmax(0,1fr);gap:3px 10px;font-size:12.5px;line-height:1.75;color:var(--ink-2)}
.tone-sw{
  width:18px;height:18px;margin-top:3px;border-radius:2px;
  border:1px solid rgba(31,26,18,.22);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.6);
}
.tone-src-l b{font-size:12.8px;font-weight:600;color:var(--ink)}
.tone-src-l code{font-size:11px;color:var(--ink-3);margin-left:6px;letter-spacing:.02em}
.tone-src-l em{grid-column:2;font-style:normal;color:var(--ink-2)}
.tone-src-l em i{font-style:normal;color:var(--ink-3)}
.tone-src-n{margin-top:14px;font-size:12px;line-height:1.85;color:var(--ink-3);max-width:900px}
@media(max-width:820px){
  .tone-src-l{grid-template-columns:1fr;gap:11px}
}

/* ---------- 四、寻访手记 · 按门类归档（原独立分节并入技艺档案） ---------- */
.note-groups{margin-top:clamp(28px,4vh,44px)}
.note-group{margin-top:clamp(26px,3.6vh,38px)}
.note-group:first-child{margin-top:0}
.note-group-h{
  display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;
  margin-bottom:18px;padding-bottom:9px;border-bottom:1px solid var(--line);
}
.note-group-h h3{font-size:var(--fs-h4,17px);font-weight:600;letter-spacing:.05em}
.note-group-h .n{font-size:11px;letter-spacing:.18em;color:var(--accent)}
.note-group-h .cnt{margin-left:auto;font-size:12px;color:var(--ink-3);letter-spacing:.08em}

/* ---------- 五、寻访地图：该省手记（并入省份详情卡） ---------- */
.pd-notes{margin-top:22px;padding-top:16px;border-top:1px dashed var(--line)}
.pd-notes h4{font-size:13px;letter-spacing:.1em;color:var(--ink-3);margin-bottom:10px}
.pd-notes ul{list-style:none;display:grid;gap:8px}
.pd-notes li{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;font-size:13px;color:var(--ink-2)}
.pd-notes li i{font-style:normal;font-size:11px;letter-spacing:.08em;color:var(--accent);flex:none}
.pd-notes li b{font-weight:600}
.pd-notes li span{font-size:12px;color:var(--ink-3)}
.pd-notes .pd-note-empty{font-size:12.5px;color:var(--ink-3)}

/* 门类切换条：28 个门类排不下一行时，按钮被 flex 压成一字一行（v2 既有问题）。
   这里让按钮保持内容宽度，整条横向滚动，不再纵向叠字。 */
.tabs button{flex:0 0 auto;white-space:nowrap}

/* 卡片里的项目标签：.pcard .body 是纵向 flex，inline 标签会被拉满整行。
   只让标签按内容宽度排，不动其它按钮。 */
.pcard .body > .tag{align-self:flex-start}

/* ============================================================
   v30b · 登录 / 注册改浅底（2026-11-09）
   ------------------------------------------------------------
   原来是一整屏地毯红（v21 设计）：色相浓、纹样满、四周收暗，
   是站内最「堵」的一屏。这里把同一块地毯纹降到 5.5% 当水印，
   底色换成赭石极浅调，卡片由「厚纸压在暗底」改为「白纸浮在浅底」，
   纹样记忆保留，观感回到通透。
   ============================================================ */
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]){
  background:var(--paper);
  color:var(--ink-2);
}
/* 背景：地毯纹退成水印，不再铺满 */
.auth-bg{
  background-color:transparent;
  background-image:none;
}
.auth-bg::before{
  background-image:var(--carpet);
  background-size:340px 340px;
  background-position:-170px -170px;
  background-repeat:repeat;
  opacity:.055;
}
/* 顶部透光取代原来的四周压暗 */
.auth-bg::after{
  background:
    radial-gradient(120% 68% at 50% -8%, rgba(255,255,255,.92) 0%, rgba(255,255,255,0) 62%),
    radial-gradient(96% 60% at 50% 106%, rgba(192,96,58,.05) 0%, rgba(192,96,58,0) 70%);
  opacity:1;
}
/* 导航：浅场（默认是给暗底用的暖白字，这里必须换） */
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav{
  color:var(--ink);
  background:rgba(251,247,243,.84);
  -webkit-backdrop-filter:blur(14px) saturate(1.2);
  backdrop-filter:blur(14px) saturate(1.2);
  border-bottom-color:rgba(31,26,18,.08);
}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.frosted{
  background:rgba(251,247,243,.92)!important;
  -webkit-backdrop-filter:blur(18px) saturate(1.2)!important;
  backdrop-filter:blur(18px) saturate(1.2)!important;
  border-bottom-color:rgba(31,26,18,.10)!important;
}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav::after{display:none}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .brand b{color:var(--ink)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .brand i{color:var(--ink-3)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-link{color:var(--ink-2)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-link:hover,
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-link.on{color:var(--ink);background:rgba(31,26,18,.05)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav-r a{color:var(--ink-2)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav-r a:hover{color:var(--ink)}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav-r .pill{border-color:rgba(31,26,18,.16)}
/* 卡片：白纸 + 发丝线 + 轻投影，不再用厚纸压暗底 */
.auth-card{
  background-color:#FFFDFA;
  background-image:none;
  border:1px solid rgba(31,26,18,.10);
  box-shadow:
    0 26px 64px -38px rgba(56,14,8,.30),
    0 2px 8px -4px rgba(56,14,8,.08);
}
.auth-card::after{opacity:.16}
.auth-card::before{background:linear-gradient(90deg,transparent 12%,rgba(192,96,58,.55) 50%,transparent 88%)}
/* 分隔线原来是米色，在浅底上会消失 */
.auth-or::before{background:linear-gradient(90deg,rgba(31,26,18,0),rgba(31,26,18,.16))}
.auth-or::after{background:linear-gradient(90deg,rgba(31,26,18,.16),rgba(31,26,18,0))}
.alt-btn{border-color:rgba(31,26,18,.14);background:#FFFDFA}
/* 色源行：账户页的用色出处，压在卡片最底部，不占版面 */
.auth-src{
  margin:14px 0 0;padding-top:12px;
  border-top:1px solid rgba(31,26,18,.08);
  font-size:10.5px;line-height:1.7;letter-spacing:.02em;
  color:var(--ink-3);text-align:center;
}
.auth-src code{font-size:10px;color:var(--ink-3);opacity:.85}

/* 导航右侧（登录 / 加入我们）：默认色是给暗场用的暖白，
   在浅底上几乎看不见，这里强制换成墨色。 */
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-r a,
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-r a:hover,
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-r .pill{color:var(--ink-2)!important}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-r a:hover,
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-r .pill:hover{color:var(--ink)!important;border-color:rgba(31,26,18,.28)!important}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-link{color:var(--ink-2)!important}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-link.on,
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .nav-link:hover{color:var(--ink)!important}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .brand b{color:var(--ink)!important}
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav .brand i{color:var(--ink-3)!important}

/* ============================================================
   v30c · 磨砂层跟着纸色走（2026-11-09）
   ------------------------------------------------------------
   吸顶导航与分节条的磨砂底原来是写死的暖米 rgba(247,244,236,.92)，
   底色改成冷调/暖调各不相同之后，它们会变成一条明显的「米色带」，
   横在页面上方最显眼的位置——这是上一版仍显「堵」的主要原因。
   改成从 --paper 派生，纸是什么色，磨砂就是什么色。
   ============================================================ */
/* 磨砂不铺「实色 + 透明度」，而是「薄白 + 模糊」：
   实色磨砂叠在深浅不同的区块上会显出一条比正文亮的带子；
   薄白模糊是把底下的纸色糊开，区块切换时看不出断层。 */
body[data-theme] .nav.scrolled{
  background:color-mix(in srgb, #fff 46%, transparent);
  -webkit-backdrop-filter:blur(16px) saturate(1.08);
  backdrop-filter:blur(16px) saturate(1.08);
  border-bottom-color:rgba(31,26,18,.07);
  color:var(--ink);
}
body[data-theme] .toolbar,
body[data-theme] .ed-bar{
  background:color-mix(in srgb, #fff 74%, transparent);
  -webkit-backdrop-filter:blur(18px) saturate(1.06);
  backdrop-filter:blur(18px) saturate(1.06);
  border-bottom-color:rgba(31,26,18,.06);
}
/* 登录页的导航也用同一套纸色 */
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav,
:is(:is(body.auth-page,body[data-theme="auth"]),body[data-theme="auth"]) .nav.frosted{
  background:color-mix(in srgb, var(--paper) 86%, transparent)!important;
}

/* 分节条：去掉硬边线，改成一根极淡的投影，
   两道边线（导航 + 分节条）挨在一起最容易读成「割裂」。 */
body[data-theme] .toolbar,
body[data-theme] .ed-bar{
  border-bottom:0;
  box-shadow:0 1px 0 rgba(31,26,18,.045), 0 10px 24px -20px rgba(31,26,18,.22);
}

/* 磨砂条落在图片上会变灰（图片很暗，74% 白也压不住）。
   加一层 brightness 把底下的画面提亮，比继续加白更有效：
   既有玻璃感，文字也不会糊在灰底上。 */
body[data-theme] .nav.scrolled{
  background:color-mix(in srgb, #fff 60%, transparent);
  -webkit-backdrop-filter:blur(20px) saturate(1.08) brightness(1.22);
  backdrop-filter:blur(20px) saturate(1.08) brightness(1.22);
}
body[data-theme] .toolbar,
body[data-theme] .ed-bar{
  background:color-mix(in srgb, #fff 64%, transparent);
  -webkit-backdrop-filter:blur(20px) saturate(1.06) brightness(1.2);
  backdrop-filter:blur(20px) saturate(1.06) brightness(1.2);
}

/* 最终取值：磨砂条接近不透明（86% / 90%）。
   底色已经是各自很浅的纸色，实色不会像之前那样出现"米色带"；
   而 60~70% 叠在深色实拍图上仍会透灰，标题发糊。
   宁可牺牲一点玻璃感，也要保证吸顶时文字清楚。 */
body[data-theme] .nav.scrolled{
  background:color-mix(in srgb, #fff 86%, transparent);
  -webkit-backdrop-filter:blur(18px) saturate(1.06);
  backdrop-filter:blur(18px) saturate(1.06);
}
body[data-theme] .toolbar,
body[data-theme] .ed-bar{
  background:color-mix(in srgb, #fff 90%, transparent);
  -webkit-backdrop-filter:blur(18px) saturate(1.04);
  backdrop-filter:blur(18px) saturate(1.04);
}

/* 最终：吸顶条取「纸色实底」。透明度方案在实拍图上一定会透灰，
   在浅色区又一定会出现一条比正文亮的带子 —— 两难。底色已经很浅，
   实底在浅色区几乎看不出边界，在图片区又足够干净。 */
body[data-theme] .nav.scrolled{
  background:color-mix(in srgb, var(--paper) 97%, #fff);
  backdrop-filter:blur(12px) saturate(1.02);
  -webkit-backdrop-filter:blur(12px) saturate(1.02);
}
body[data-theme] .toolbar,
body[data-theme] .ed-bar{
  background:color-mix(in srgb, var(--paper) 97%, #fff);
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
}

/* ============================================================
   v30d · 「非遗上课了」「非遗好东西」页头改浅场（2026-11-09）
   ------------------------------------------------------------
   原来两页首屏是一整屏近黑的深褐墙（--phead-bg #2A1613 / #241B0E，
   高度等于视口），在 1440 屏上 100% 是暗色，读起来像进了没开灯的库房。
   档案页保留深色展墙（看文物需要暗背景），但「上课」是教室、
   「好物」是货架，都该是亮的：
     · 页头底 = 主色的极浅调，与正文同一张纸，只深半档做展台；
     · 文字全部转墨色，英文眉批吃主色；
     · 照片仍是照片（保留自身的暗部渐变与图注），只是从「暗墙上的洞」
       变成「浅桌面上的一张照片」——加细边框与轻投影；
     · 这两页不再需要 暗→亮 的 seam 过渡，隐藏。
   ============================================================ */

/* ---------- 1. 底色：主色极浅调 ---------- */
body[data-theme="courses"] .phead{
  background:
    radial-gradient(60% 80% at 84% 6%, rgba(192,103,83,.10), rgba(192,103,83,0) 62%),
    linear-gradient(168deg,#FCF8F5 0%,#FAF3EF 58%,#FBF7F4 100%);
}
body[data-theme="goods"] .phead{
  background:
    radial-gradient(60% 80% at 84% 6%, rgba(160,128,72,.12), rgba(160,128,72,0) 62%),
    linear-gradient(168deg,#FCFAF3 0%,#FAF5EC 58%,#FBF9F2 100%);
}
body[data-theme="courses"] .phead::before,
body[data-theme="goods"] .phead::before{opacity:.35}

/* ---------- 2. 文字转墨色 ---------- */
body[data-theme="courses"] .phead,
body[data-theme="goods"] .phead{color:var(--ink)}
body[data-theme="courses"] .phead h1,
body[data-theme="goods"] .phead h1{color:var(--ink)}
body[data-theme="courses"] .phead .ph-en{color:var(--accent)}
body[data-theme="goods"] .phead .ph-en{color:var(--accent)}
body[data-theme="courses"] .phead .ph-lead,
body[data-theme="goods"] .phead .ph-lead{color:var(--ink-2)}
body[data-theme="courses"] .phead .crumb,
body[data-theme="goods"] .phead .crumb{color:var(--ink-3)}
body[data-theme="courses"] .phead .crumb a,
body[data-theme="goods"] .phead .crumb a{color:var(--ink-3)}
body[data-theme="courses"] .phead .crumb a:hover,
body[data-theme="goods"] .phead .crumb a:hover{color:var(--accent)}
body[data-theme="courses"] .phead .crumb i,
body[data-theme="goods"] .phead .crumb i{color:rgba(31,26,18,.28)}

/* ---------- 3. 照片：从暗墙上的洞 → 浅桌上的实物 ---------- */
body[data-theme="courses"] .phead-shot,
body[data-theme="goods"] .phead-shot{
  border:1px solid rgba(31,26,18,.12);
  box-shadow:0 18px 44px -26px rgba(56,30,16,.42), 0 2px 6px -3px rgba(56,30,16,.12);
}
/* 图注仍在照片内部：保留照片自身的暗部渐变，只把上沿压薄一点 */
body[data-theme="courses"] .phead-shot::after,
body[data-theme="goods"] .phead-shot::after{opacity:.92}

/* ---------- 4. 数据条：细线灰、数字吃主色 ---------- */
body[data-theme="courses"] .ph-stats,
body[data-theme="goods"] .ph-stats{border-top-color:rgba(31,26,18,.12)}
body[data-theme="courses"] .ph-stat,
body[data-theme="goods"] .ph-stat{border-right-color:rgba(31,26,18,.08)}
body[data-theme="courses"] .ph-stat b{color:var(--accent)}
body[data-theme="goods"] .ph-stat b{color:var(--accent)}
body[data-theme="courses"] .ph-stat b i,
body[data-theme="goods"] .ph-stat b i{color:var(--ink-3)}
body[data-theme="courses"] .ph-stat span,
body[data-theme="goods"] .ph-stat span{color:var(--ink-3)}

/* ---------- 5. 不需要 暗→亮 seam ---------- */
body[data-theme="courses"] .seam.to-light,
body[data-theme="goods"] .seam.to-light{display:none}

/* ---------- 6. 导航在这两页从首屏起就是浅场 ---------- */
body[data-theme="courses"] .nav,
body[data-theme="goods"] .nav{
  color:var(--ink);
  background:transparent;
  border-bottom-color:transparent;
}
body[data-theme="courses"] .nav .brand b,
body[data-theme="goods"] .nav .brand b{color:var(--ink)}
body[data-theme="courses"] .nav .brand i,
body[data-theme="goods"] .nav .brand i{color:var(--ink-3)}
body[data-theme="courses"] .nav .nav-link,
body[data-theme="goods"] .nav .nav-link{color:var(--ink-2)}
body[data-theme="courses"] .nav .nav-link.on,
body[data-theme="goods"] .nav .nav-link.on{color:var(--ink)}
body[data-theme="courses"] .nav .nav-link:hover,
body[data-theme="goods"] .nav .nav-link:hover{color:var(--ink);background:rgba(31,26,18,.05)}
body[data-theme="courses"] .nav-r a,
body[data-theme="goods"] .nav-r a{color:var(--ink-2)}
body[data-theme="courses"] .nav-r a:hover,
body[data-theme="goods"] .nav-r a:hover{color:var(--ink)}
body[data-theme="courses"] .nav-r .pill,
body[data-theme="goods"] .nav-r .pill{border-color:rgba(31,26,18,.16)}
body[data-theme="courses"] .nav.frosted,
body[data-theme="goods"] .nav.frosted{
  background:color-mix(in srgb, #fff 86%, transparent)!important;
  -webkit-backdrop-filter:blur(16px) saturate(1.05)!important;
  backdrop-filter:blur(16px) saturate(1.05)!important;
  border-bottom-color:rgba(31,26,18,.08)!important;
}
body[data-theme="courses"] .nav::after,
body[data-theme="goods"] .nav::after{display:none}
