/* Syllanote Market · 平台界面样式
   令牌与母题全部取自 DESIGN.md（纸面为地 / 墨蓝结构 / 细规线 / 直角 / 缺口页脊）。
   红色纪律：每视口只允许标志红块与错误信号两处红。 */

/* 滚动条槽位恒预留：页面间切换/内容撑高时不再整体右移（1016 帮助页实录） */
html { scrollbar-gutter: stable; }

:root {
  --paper: #F4F1E8;
  --paper-2: #ECE8DB;
  --ink: #10142B;
  --ink-hover: #232A4E;
  --slate: #5A6478;
  --rule: rgba(16, 20, 43, .16);
  --rule-strong: rgba(16, 20, 43, .38);
  --red: #D8412F;
  --font-head: Bahnschrift, Archivo, Inter, Arial, sans-serif;
  --font-body: "Segoe UI", "Noto Sans SC", "Microsoft YaHei", sans-serif;
}

* { box-sizing: border-box; }

/* 通栏 hero 的 100vw 含滚动条宽会多出 ~15px，viewport 级 clip 掐掉（clip=连程序滚动都无） */
html { overflow-x: clip; }

body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--font-body);
  font-size: 15px;
  line-height: 1.65;
  /* 通栏 hero 用 100vw（含滚动条宽）会多出 ~17px，横向溢出在此掐掉 */
  overflow-x: hidden;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

::selection { background: var(--ink); color: var(--paper); }
:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
input, select, button { caret-color: var(--ink); font-family: inherit; }

/* 页脊：缺口条带，edge-to-edge（资产原样取自工作台） */
.spine {
  height: 8px;
  background: var(--ink);
  background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="36" height="8" viewBox="0 0 36 8"><path d="M0 0h36v8H0z" fill="%2310142B"/><path d="M24 0l7 4-7 4z" fill="%23F4F1E8"/></svg>');
  background-repeat: repeat-x;
}

/* 页头：标志 + 字标 */
.topbar {
  border-bottom: 1px solid var(--rule);
  background: var(--paper);
}
.topbar-inner {
  max-width: 1120px;
  margin: 0 auto;
  padding: 14px 28px;
  display: flex;
  align-items: center;
  gap: 12px;
}
.logo { width: 21px; height: 30px; flex: none; }
.wordmark {
  font-family: var(--font-head);
  font-weight: 900;
  font-size: 16px;
  letter-spacing: .19em;
  text-transform: uppercase;
}
.brand-cn {
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .28em;
  color: var(--slate);
}
.stage-tag {
  margin-left: auto;
  font-family: var(--font-head);
  font-size: 11px;
  letter-spacing: .12em;
  color: var(--slate);
  border: 1px solid var(--rule);
  padding: 2px 10px;
  flex: none;
}

/* 页脚版本号（Ian 1004：撤骨架期角标，版本落位页脚 app_name 右侧） */
.foot-ver {
  font-family: var(--font-head);
  font-size: 11px;
  letter-spacing: .12em;
  color: var(--slate);
  margin-left: 6px;
}

/* 全站导航 */
.nav {
  margin-left: auto;
  display: flex;
  gap: 20px;
  align-items: center;
  flex-wrap: wrap;
}
.nav a {
  font-size: 13.5px;
  color: var(--ink);
  text-decoration: none;
  border-bottom: 2px solid transparent;
  padding-bottom: 3px;
}
.nav a:hover { border-bottom-color: var(--ink); }
.nav .tag {
  font-family: var(--font-head);
  font-size: 10px;
  letter-spacing: .1em;
  color: var(--slate);
  border: 1px solid var(--rule);
  padding: 0 5px;
  margin-left: 3px;
  vertical-align: 1px;
}

/* 首页 hero 与规线分栏 */
.hero { padding: 24px 0 40px; }
.hero .en-display{margin:0 0 10px}
.hero .lede { font-size: 15px; margin-bottom: 24px; }
.tiles {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 28px;
  border-top: 1px solid var(--rule-strong);
  padding-top: 28px;
  margin-top: 40px;
}
.tile { border-top: 2px solid var(--ink); padding-top: 14px; }
.tile .no {
  font-family: var(--font-head);
  font-weight: 900;
  font-size: 12px;
  letter-spacing: .1em;
  color: var(--slate);
}
.tile h3 { margin: 6px 0 4px; font-size: 16px; }
.tile p { margin: 0; color: var(--slate); font-size: 13.5px; }
.tile .tag {
  display: inline-block;
  font-family: var(--font-head);
  font-size: 10px;
  letter-spacing: .1em;
  color: var(--slate);
  border: 1px solid var(--rule);
  padding: 1px 7px;
  margin-bottom: 8px;
}

/* 原型示意件 */
.chip {
  display: inline-block;
  font-family: var(--font-head);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .12em;
  color: var(--paper);
  background: var(--ink);
  padding: 3px 12px;
  margin-bottom: 18px;
}
.demo-banner {
  border: 1px dashed var(--rule-strong);
  background: var(--paper-2);
  color: var(--slate);
  font-size: 13px;
  padding: 9px 14px;
  margin: 0 0 24px;
}
.watermark {
  position: fixed;
  right: 16px;
  bottom: 16px;
  z-index: 60;
  background: var(--ink);
  color: var(--paper);
  font-family: var(--font-head);
  font-size: 11px;
  letter-spacing: .1em;
  padding: 6px 12px;
  opacity: .92;
}
.mock-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: 24px;
  margin-top: 8px;
}
.mock-card {
  border: 1px solid var(--rule-strong);
  background: var(--paper);
  padding: 16px 16px 18px;
}
.mock-card .tier {
  font-family: var(--font-head);
  font-size: 10px;
  letter-spacing: .1em;
  color: var(--slate);
  border: 1px solid var(--rule);
  display: inline-block;
  padding: 1px 7px;
  margin: 0 4px 10px 0;
}
.mock-card h3 { margin: 2px 0 4px; font-size: 15px; }
.mock-card .sub { color: var(--slate); font-size: 12.5px; margin: 0 0 12px; }
.balance {
  font-family: var(--font-head);
  font-weight: 900;
  font-size: 52px;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
  margin: 8px 0 2px;
}
.balance small {
  font-size: 15px;
  font-weight: 600;
  color: var(--slate);
  letter-spacing: .1em;
}
.btn[disabled] { opacity: .45; cursor: not-allowed; }

main {
  flex: 1;
  width: 100%;
  max-width: 1120px;
  margin: 0 auto;
  padding: 64px 28px 72px;
}
main.narrow { max-width: 560px; }

h1 {
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 26px;
  line-height: 1.3;
  margin: 0 0 6px;
}
.lede { color: var(--slate); margin: 0 0 32px; font-size: 14px; }

/* 步骤指示：编号承载信息 + 短下划线 */
.steps {
  list-style: none;
  display: flex;
  gap: 32px;
  padding: 0;
  margin: 0 0 28px;
}
.steps li {
  font-family: var(--font-head);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .1em;
  color: var(--slate);
  padding-bottom: 6px;
  border-bottom: 2px solid var(--rule);
}
.steps li.on { color: var(--ink); border-bottom-color: var(--ink); }

/* 表单：直角、1px 规线，无阴影无圆角（W5C：无 type 的 input 与 textarea 一并收编——
   之前 admin 表单白框裸奔的根因就是 input[type=text] 匹配不到无 type 输入） */
label {
  display: block;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .12em;
  color: var(--slate);
  margin: 20px 0 6px;
}
input:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="button"]):not([type="file"]),
textarea, select {
  width: 100%;
  padding: 10px 12px;
  font-size: 15px;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--rule-strong);
  border-radius: 0;
}
input[type="file"]{padding:8px 0;font-size:13.5px;color:var(--ink)}
input[readonly] { color: var(--slate); background: var(--paper-2); }
input:focus, textarea:focus, select:focus {
  outline: 2px solid var(--ink);
  outline-offset: -1px;
}

/* 品牌化行内小下拉（1004 批，Ian：后台表内的框还是 OS 原生样）——
   appearance 收掉系统箭头改自绘墨色 chevron，纸墨直角，高度与 btn-mini 同排。
   用于 admin 用户表变更列 / 星名页授予面板与名册；页面无需再加内联样式。 */
.mini-select,
.table-wrap select,
.rp-grant select{
  -webkit-appearance:none;appearance:none;
  width:auto;min-width:0;height:30px;box-sizing:border-box;
  padding:3px 28px 3px 10px;font-size:12.5px;line-height:normal;
  color:var(--ink);background-color:var(--paper);
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%2310142B' stroke-width='1.5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 9px center;
  border:1px solid var(--rule-strong);border-radius:0;cursor:pointer;
  transition:border-color .15s ease;
}
.mini-select:hover,.table-wrap select:hover,.rp-grant select:hover{
  border-color:var(--ink);
}
/* 行内表单竖向居中：flex 默认 stretch 会把下拉拉到 2 倍高（67px vs 32px 实测） */
.table-wrap .inline-row{align-items:center}

/* admin 子导航（W5C：效率优先的紧凑规线风，无动效） */
.admin-subnav{
  display:flex;gap:2px;flex-wrap:wrap;border:1px solid var(--border-strong);
  background:var(--paper-2);margin:0 0 26px;
}
.admin-subnav a{
  padding:8px 14px;font-size:13px;color:var(--ink);text-decoration:none;
  border-right:1px solid var(--border);
}
.admin-subnav a:hover{background:var(--paper)}
.admin-subnav a.on{background:var(--ink);color:var(--primary-fg);font-weight:600}
.admin-subnav .sp{flex:1}
.admin-subnav .exit{color:var(--muted-fg)}
.admin-tile-note{font-size:12px;color:var(--muted-fg)}

.btn {
  display: inline-block;
  margin-top: 24px;
  padding: 11px 26px;
  font-family: var(--font-head);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: .08em;
  color: var(--paper);
  background: var(--ink);
  border: 1px solid var(--ink);
  border-radius: 0;
  cursor: pointer;
}
.btn:hover { background: var(--ink-hover); border-color: var(--ink-hover); }
.btn:active { transform: translateY(1px); }
.btn-ghost {
  display: inline-block;
  margin-top: 24px;
  padding: 10px 22px;
  font-size: 14px;
  color: var(--ink);
  background: transparent;
  border: 1px solid var(--rule-strong);
  border-radius: 0;
  cursor: pointer;
  text-decoration: none;
}
.btn-ghost:hover { border-color: var(--ink); }

/* 错误信号：红色块标 + 红字（红色纪律内） */
.error {
  display: flex;
  align-items: baseline;
  gap: 8px;
  color: var(--red);
  font-size: 14px;
  margin: 16px 0 0;
}
.error::before {
  content: "";
  flex: none;
  width: 8px;
  height: 8px;
  background: var(--red);
  transform: translateY(-1px);
}

.hint { color: var(--slate); font-size: 13px; margin-top: 14px; }
.hint code {
  font-family: ui-monospace, Consolas, monospace;
  font-size: 13px;
  color: var(--ink);
}
a { color: var(--ink); text-decoration: underline; text-underline-offset: 3px; }

/* 信息行：规线分栏，不用卡片 */
.rows { margin-top: 8px; border-top: 1px solid var(--rule-strong); }
.rows > div {
  display: flex;
  justify-content: space-between;
  gap: 24px;
  padding: 13px 2px;
  border-bottom: 1px solid var(--rule);
}
.rows dt {
  color: var(--slate);
  font-size: 13px;
  letter-spacing: .08em;
  flex: none;
}
.rows dd { margin: 0; font-weight: 600; font-variant-numeric: tabular-nums; }

/* 表格（admin） */
table { border-collapse: collapse; width: 100%; margin-top: 24px; }
th {
  text-align: left;
  font-family: var(--font-head);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--slate);
  border-bottom: 1px solid var(--rule-strong);
  padding: 8px 12px;
}
td {
  border-bottom: 1px solid var(--rule);
  padding: 10px 12px;
  font-variant-numeric: tabular-nums;
}

/* 页脚 */
footer {
  border-top: 1px solid var(--rule);
}
.footer-inner {
  max-width: 1120px;
  margin: 0 auto;
  padding: 16px 28px;
  display: flex;
  justify-content: space-between;
  gap: 16px;
  color: var(--slate);
  font-size: 12px;
}

/* 入场：唯一动效，尊重 reduced-motion */
@media (prefers-reduced-motion: no-preference) {
  .enter { animation: enter 240ms cubic-bezier(.16, 1, .3, 1); }
  @keyframes enter {
    from { opacity: 0; transform: translateY(7px); }
    to { opacity: 1; transform: none; }
  }
}

/* ---------- UX 打磨（0923 轮）：渲染/焦点/导航态/窄屏/表格滚动 ---------- */
body{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.nav a.active{border-bottom-color:var(--ink);font-weight:600}
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.table-wrap table{min-width:520px}
@media (max-width:640px){
  main{padding:32px 16px 48px}
  .topbar-inner{padding:12px 16px;gap:8px}
  .footer-inner{padding:12px 16px;flex-direction:column;gap:4px}
  .stage-tag{display:none}
  .balance{font-size:42px}
}

/* ---------- 首页改版（对标 StuDocu 结构）：居中搜索 + 数字条 ---------- */
.hero.center{text-align:center;padding:16px 0 20px}
.kicker{font-family:var(--font-head);font-weight:600;font-size:12px;letter-spacing:.3em;color:var(--slate);margin:0 0 14px}
.hero .sub{font-size:16px;color:var(--slate)}
.pn{color:var(--ink)}
.searchbar{
  display:flex;align-items:stretch;max-width:640px;margin:30px auto 10px;
  border:1.5px solid var(--ink);background:var(--paper);
}
.searchbar svg{width:20px;height:20px;align-self:center;margin-left:14px;flex:none}
.searchbar svg circle,.searchbar svg path{fill:none;stroke:var(--ink);stroke-width:2}
.searchbar input{border:none;background:transparent;font-size:16px;padding:13px 10px;flex:1;min-width:0}
.searchbar input:focus{outline:none}
.searchbar:focus-within{outline:2px solid var(--ink);outline-offset:2px}
.searchbar button{
  border:none;background:var(--ink);color:var(--paper);cursor:pointer;
  font-family:var(--font-head);font-weight:600;letter-spacing:.08em;padding:0 26px;font-size:14px;
}
.searchbar button:hover{background:var(--ink-hover)}
.quicklinks{color:var(--slate);font-size:13px}
.quicklinks a{color:var(--ink)}
.stats{
  display:flex;justify-content:center;gap:56px;flex-wrap:wrap;
  border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);
  padding:22px 0;margin-top:36px;
}
.stats div{text-align:center}
.stats b{display:block;font-family:var(--font-head);font-weight:900;font-size:30px;font-variant-numeric:tabular-nums}
.stats span{color:var(--slate);font-size:12px;letter-spacing:.14em}

.dropzone{
  border:1.5px dashed var(--rule-strong);padding:44px 24px;text-align:center;
  color:var(--slate);background:var(--paper);
}
.dropzone:hover{border-color:var(--ink);color:var(--ink);background:var(--paper-2)}
.dropzone p{margin:0 0 6px}
.dropzone b{color:var(--ink);font-size:15px}

/* ---------- Token 层（shadcn 式语义变量，映射到枢页色板；构想 §2） ---------- */
:root{
  --background:#F4F1E8; --foreground:#10142B;
  --muted:#ECE8DB;      --muted-fg:#5A6478;
  --border:rgba(16,20,43,.16); --border-strong:rgba(16,20,43,.38);
  --primary:#10142B;    --primary-fg:#F4F1E8; --primary-hover:#232A4E;
  --destructive:#D8412F;
  --ring:#10142B;
  --font-num:ui-monospace,Consolas,'Bahnschrift',monospace;
  --fs-poster: clamp(44px, 5vw, 84px);
  --fs-display: clamp(40px, 5.5vw, 72px);
  --fs-h1: 28px;
  --fs-h2: 18px;
  --fs-body: 15px;
  --fs-meta: 13px;
  --fs-num: 56px;
}

/* 数字规范（构想 §3.3）：金额/币额/统计一律等宽 + tabular-nums */
.num{font-family:var(--font-num);font-variant-numeric:tabular-nums}

/* creator 海报副行升级（Ian：醒目但别只放大——规线母题 + 加粗中字号） */
.slogan-cn.slogan-hero{
  display:flex;align-items:center;gap:14px;margin:14px 0 26px;
  font-size:20px;font-weight:700;color:var(--ink);letter-spacing:.02em;
}
.slogan-cn.slogan-hero::before{content:"";width:32px;height:3px;background:var(--ink);flex:none}
.hero.center .slogan-cn.slogan-hero{justify-content:center}   /* 居中 hero 变体（首页门厅） */

/* 帮助页联系卡（1003 起样式内聚在 help.html 页内；此处全局拷贝已删——cc-t/cc-phone 无人引用） */

/* 全站协议弹窗（页脚「用户协议」；正式条款分段渲染） */
.foot-legal-btn{background:none;border:none;color:inherit;font:inherit;text-decoration:underline;text-underline-offset:3px;cursor:pointer;padding:0}
.foot-legal-btn:hover{color:var(--ink)}
.legal-modal{position:fixed;inset:0;z-index:200;background:rgba(16,20,43,.55);display:grid;place-items:center;padding:24px;overflow:auto}
.legal-modal[hidden]{display:none}
.legal-modal-panel{position:relative;width:min(760px,94vw);max-height:88vh;overflow:auto;background:var(--paper);border:1px solid var(--ink);box-shadow:0 30px 80px rgba(16,20,43,.35);padding:26px 30px 30px}
.legal-modal-panel::before{content:"";position:absolute;top:0;left:0;right:0;height:6px;background-image:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="36" height="6" viewBox="0 0 36 6"><path d="M24 0l7 3-7 3z" fill="%2310142B"/></svg>');background-repeat:repeat-x}
.legal-modal-close{position:absolute;top:12px;right:14px;background:none;border:none;font-size:20px;line-height:1;cursor:pointer;color:var(--slate);padding:6px}
.legal-modal-close:hover{color:var(--ink)}
.legal-modal-title{font-family:var(--font-head);font-weight:700;font-size:17px;letter-spacing:.06em;color:var(--ink);margin:0 0 4px}
/* 确认弹窗（W5C-二）：居中窄面板 + 两按钮（品牌确认件，替代原生 confirm） */
.confirm-panel{width:min(420px,92vw);text-align:left}
.confirm-text{font-size:14.5px;line-height:1.8;color:var(--ink);margin:6px 0 22px}
.confirm-actions{display:flex;justify-content:flex-end;gap:12px}
.confirm-actions .btn,.confirm-actions .btn-ghost{margin:0}
.legal-modal-ver{font-size:12px;color:var(--slate);margin:0 0 18px;font-family:var(--font-head)}
.legal-modal-body h4{font-size:14px;font-weight:700;color:var(--ink);margin:18px 0 6px;letter-spacing:.02em}
.legal-modal-body p{font-size:13px;line-height:1.8;color:var(--ink);margin:0 0 10px;text-align:justify}

/* ===== 帮助页 v4（Ian 0925：突破页边界的大墨点 + 左侧文艺清单） ===== */
.help-hero{
  position:relative;display:grid;grid-template-columns:minmax(0,412px) minmax(320px,1fr);
  gap:32px;min-height:calc(100vh - 170px);align-items:stretch;
  width:100vw;margin-left:calc(50% - 50vw);      /* 通栏：右缘=视口缘，墨点裁切线才真实 */
  padding-left:max(28px, calc(50vw - 532px));    /* 文字栏与 main 内容网格对齐 */
  overflow:hidden;                               /* 墨点右缘/底部出画在此裁切 */
}
.help-col{max-width:640px;padding-top:6px}
.hh-kicker{font-family:var(--font-head);font-size:12px;font-weight:600;letter-spacing:.34em;color:var(--slate);margin:0 0 18px}
.hh-title{font-family:var(--font-head);font-weight:900;font-size:clamp(34px,4vw,52px);line-height:1.12;letter-spacing:.01em;color:var(--ink);margin:0 0 8px}
.hh-sec{margin-top:40px}
.hh-sec-t{font-family:var(--font-head);font-size:11.5px;font-weight:600;letter-spacing:.3em;color:var(--slate);margin-bottom:2px}
.hh-line{
  /* Ian 1003 重做（awwwards 编辑排版逻辑）：编号居右作装饰，标题行+说明行两层，
     英文大写词不再受固定列宽挤压（重叠根因=132px 列 + nowrap） */
  display:grid;grid-template-columns:minmax(0,1fr) 56px;align-items:start;gap:16px;
  padding:20px 0;border-bottom:1px solid var(--rule);
}
.hh-sec .hh-line:first-of-type{border-top:1px solid var(--rule-strong)}
.hh-i{font-family:var(--font-head);font-size:13px;font-weight:900;letter-spacing:.08em;color:var(--slate);opacity:.55;text-align:right;padding-top:4px}
.hh-body b{
  display:block;font-family:var(--font-head);font-size:17px;font-weight:900;
  letter-spacing:.04em;color:var(--ink);margin-bottom:6px;white-space:nowrap;
}
.hh-body .hh-d{display:block;font-size:13.5px;color:var(--slate);line-height:1.7}
.hh-mission{margin-top:30px;padding:24px 26px;background:var(--ink);color:var(--paper)}
.hh-mission-t{font-family:var(--font-head);font-weight:900;font-size:12px;letter-spacing:.22em;color:rgba(244,241,232,.6);margin-bottom:10px}
.hh-mission-d{font-size:15px;line-height:1.9;margin:0;font-weight:600}
.hh-mission-en{font-size:12.5px;line-height:1.7;color:rgba(244,241,232,.62);margin:10px 0 0;font-style:italic}
.hh-phone{margin-top:52px;padding-top:26px;position:relative}
.hh-phone::before{
  content:"";position:absolute;top:0;left:0;width:100%;height:6px;
  background-image:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="36" height="6" viewBox="0 0 36 6"><path d="M24 0l7 3-7 3z" fill="%2310142B"/></svg>');
  background-repeat:repeat-x;
}
.hh-phone-label{font-family:var(--font-head);font-size:11px;font-weight:600;letter-spacing:.4em;color:var(--slate)}
.hh-phone-num{
  font-family:var(--font-head);font-weight:900;font-size:clamp(38px,4.6vw,62px);
  letter-spacing:.07em;line-height:1.06;color:var(--ink);margin:10px 0 8px;
}
.hh-phone-sub{font-size:13px;color:var(--slate);letter-spacing:.02em}
.hh-fine{margin-top:28px;font-size:12.5px;color:var(--slate)}
/* 大墨点：细点阵水印（v4.2，Ian 0925 二轮：很小的点点拼出、靠右站、右缘出画约 1/4、
   低透明水印；svg 相对通栏 .help-hero 定位，top 锚定=红滴头顶天，底部墨晕渐隐入纸面，
   不与左栏文字争夺视觉；散点只落在主体周围，不进文字区） */
.hh-art{position:static}
.hh-art svg{
  position:absolute;top:0;right:0;
  height:120%;width:auto;max-width:none;
  transform:translateX(26%);
  pointer-events:none;
  -webkit-mask-image:linear-gradient(180deg,#000 68%,rgba(0,0,0,.08) 96%);
  mask-image:linear-gradient(180deg,#000 68%,rgba(0,0,0,.08) 96%);
}
@media (min-width:1600px){
  .hh-art svg{height:140%}
}
@media (max-width:980px){
  .help-hero{grid-template-columns:1fr;min-height:0;gap:0;padding-left:16px}
  .hh-art{position:absolute;right:0;bottom:0;top:auto;pointer-events:none}
  .hh-art svg{top:auto;bottom:-24px;right:0;height:62vh;transform:translateX(26%)}
  .help-col{position:relative;z-index:1}
}
@media (max-width:640px){
  .hh-line{grid-template-columns:minmax(0,1fr) 34px;gap:10px}
  .hh-body b{font-size:15px;white-space:normal;line-height:1.35}
  .hh-mission{padding:18px 16px}
}

/* Ian 1003：课程页年级按钮组（全部/大一..大五） */
.chip-grade{
  display:inline-block;padding:6px 16px;border:1px solid var(--border-strong);
  color:var(--slate);text-decoration:none;font-size:13.5px;font-weight:600;
}
.chip-grade:hover{border-color:var(--ink);color:var(--ink)}
.chip-grade.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}

/* 帮助页：六条原则 + 加入我们（Ian 1003） */
.cn-echo{
  margin:26px 0 0;padding-top:18px;border-top:1px solid var(--rule);
  font-size:13px;letter-spacing:.35em;color:var(--slate);
}
.hh-join{margin-top:30px;padding:20px 22px;border:1px solid var(--border-strong);background:var(--paper-2)}
.hh-join-t{font-family:var(--font-head);font-weight:900;font-size:12px;letter-spacing:.22em;color:var(--ink);margin-bottom:8px}
.hh-join-d{font-size:13.5px;line-height:1.8;color:var(--ink);margin:0}
.hh-join-mail{font-family:var(--font-mono);font-size:14px;font-weight:600;color:var(--ink);margin-top:10px}
.hh-join-mail span{font-family:var(--font-body);font-weight:400;font-size:12px;color:var(--slate)}

/* 书目行（构想 §5.2） */
.course-row{
  display:flex;align-items:center;gap:18px;padding:15px 4px;
  border-bottom:1px solid var(--border);color:var(--foreground);text-decoration:none;
}
.course-row:first-child{border-top:1px solid var(--border-strong)}
.course-row:hover{background:var(--muted)}
.cr-main{flex:1;min-width:0}
.cr-name{display:block;font-weight:600;font-size:15px}
.cr-meta{display:block;color:var(--muted-fg);font-size:12.5px;margin-top:2px}
/* Ian 1001：价签一排不换行 + 减重（描边替代墨蓝实心，黑块不再喧宾夺主） */
.cr-tiers{display:flex;gap:8px;flex-wrap:nowrap;justify-content:flex-end;min-width:0}
.cr-go{color:var(--muted-fg);flex:none}
.course-row:hover .cr-go{color:var(--foreground)}

/* 三档覆盖 chip：有=墨蓝实心；无=「求购中」虚线 */
.tier-chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;font-size:12px;white-space:nowrap}
.tier-chip.covered{background:transparent;color:var(--ink);border:1px solid var(--border-strong)}
.tier-chip.covered:hover{background:var(--paper-2)}
.tier-chip.want{color:var(--muted-fg);border:1px dashed var(--border-strong);background:transparent}
.tier-chip .price{font-weight:600}

/* 票据式价签（等宽数字+虚线规线） */
.price-tag{
  display:inline-block;border:1px dashed var(--border-strong);padding:4px 12px;
  font-size:15px;font-weight:600;background:var(--paper);
}

/* 市集空态（话术表） */
.empty{border:1px dashed var(--border-strong);padding:36px 20px;text-align:center;color:var(--muted-fg)}
.empty svg{display:block;margin:0 auto 10px}
.empty p{margin:0;font-size:14px;color:var(--foreground)}
.empty .sub{color:var(--muted-fg);font-size:12.5px;margin-top:4px}

/* 信任条（CHECKED, THEN SOLD.） */
.trust{
  /* Ian 1002：四项恒一行（ nowrap + 窄屏缩排，不再折行） */
  display:flex;align-items:baseline;gap:16px;flex-wrap:nowrap;white-space:nowrap;
  border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border);
  padding:12px 2px;margin:28px 0;overflow:hidden;
}
@media(max-width:1080px){.trust{gap:10px}.trust .t-en{font-size:12px}.trust .t-cn,.trust .t-item{font-size:11px}}
@media(max-width:820px){.trust{gap:6px}.trust .t-en{font-size:10.5px;letter-spacing:.08em}.trust .t-cn{letter-spacing:.08em}.trust .t-item{font-size:10px;gap:3px}}
.trust .t-en{font-family:var(--font-head);font-weight:900;letter-spacing:.14em;font-size:14px}
.trust .t-cn{color:var(--muted-fg);font-size:12.5px;letter-spacing:.2em}
.trust .t-item{display:inline-flex;align-items:center;gap:5px;color:var(--muted-fg);font-size:12.5px}

/* 货架 tabs（学校横滑） */
.shelf-tabs{display:flex;gap:22px;overflow-x:auto;border-bottom:1px solid var(--border-strong);margin:18px 0 4px}
.shelf-tabs a{
  white-space:nowrap;padding:8px 2px 10px;color:var(--muted-fg);text-decoration:none;
  border-bottom:2px solid transparent;margin-bottom:-1px;font-size:14px;
}
.shelf-tabs a.on{color:var(--foreground);border-bottom-color:var(--ink);font-weight:600}

/* 转化页：试看纸面 + 墨蓝蒙层 + 吸底购买条 */
.read-pane{border:1px solid var(--border-strong);background:#FDFCF8;padding:26px 28px;position:relative;overflow:hidden}
/* 暗色：阅读纸保持纸白（预览的是白纸文档），字强制深墨——否则浅字落白纸看不见 */
html[data-theme="dark"] .read-pane{color:#10142B}
.read-pane .rp-text{max-width:62ch;line-height:2;font-size:15px}
.read-pane .rp-text p{margin:0 0 14px}
.paywall{position:relative}
.paywall .veil{
  position:absolute;inset:0;background:linear-gradient(180deg,rgba(16,20,43,0) 0%,rgba(16,20,43,.14) 30%,rgba(16,20,43,.88) 100%);
  display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding:28px 20px;text-align:center;
}
.paywall .veil .vk{color:#E9E7DC;font-family:var(--font-head);font-weight:900;letter-spacing:.18em;font-size:13px}
.paywall .veil .vt{color:#F4F1E8;font-size:14px;margin:6px 0 0}
.sticky-buy{
  position:sticky;bottom:0;z-index:40;margin-top:32px;
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  background:var(--paper);border:1px solid var(--border-strong);
  padding:12px 18px;
}
.sticky-buy .sb-price{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-weight:600;font-size:20px}
.sticky-buy .sb-price small{font-size:12px;color:var(--muted-fg);font-weight:400}
.sticky-buy .sb-bal{color:var(--muted-fg);font-size:12.5px}
.sticky-buy .btn{margin:0 0 0 auto}
.breadcrumb{color:var(--muted-fg);font-size:12.5px;margin-bottom:14px}
.breadcrumb a{color:var(--muted-fg)}
.creator-card{display:flex;align-items:center;gap:12px;border:1px solid var(--border);padding:12px 16px;margin:14px 0}
.creator-card .cc-name{font-weight:600}
.creator-card .cc-badge{font-size:11px;color:var(--muted-fg);border:1px solid var(--border);padding:1px 8px}
.timeline{border-left:2px solid var(--border);margin:10px 0 0;padding-left:18px}
.timeline li{margin:0 0 12px;color:var(--muted-fg);font-size:13px;list-style:none;position:relative}
.timeline li::before{content:"";position:absolute;left:-23px;top:6px;width:8px;height:8px;background:var(--ink)}

.shelf-tabs{scrollbar-width:none}
.shelf-tabs::-webkit-scrollbar{display:none}

/* ---------- 市集第二批：公告栏行 / 存折小票 / 版税尺（构想 §5.5-5.8） ---------- */
.bounty-row{
  display:flex;align-items:center;gap:18px;padding:16px 4px;
  border-bottom:1px solid var(--border);color:var(--foreground);text-decoration:none;
}
.bounty-row:first-child{border-top:1px solid var(--border-strong)}
.bounty-row:hover{background:var(--muted)}
.br-coins{
  font-family:var(--font-num);font-variant-numeric:tabular-nums;font-weight:700;font-size:24px;
  min-width:96px;flex:none;
}
.br-coins small{font-size:11px;color:var(--muted-fg);font-weight:400}
.br-main{flex:1;min-width:0}
.br-title{display:block;font-weight:600;font-size:15px}
.br-meta{display:block;color:var(--muted-fg);font-size:12.5px;margin-top:2px}
.urgent{
  font-style:normal;background:var(--destructive);color:var(--primary-fg);
  font-size:11px;padding:1px 7px;margin-left:8px;vertical-align:2px;
}
.br-status{color:var(--muted-fg);font-size:12.5px;flex:none}
.br-claim{color:var(--muted-fg);flex:none}
.bounty-row:hover .br-claim{color:var(--foreground)}

/* 存折小票行：等宽对齐，虚线规线（票据母题） */
.receipt-row{
  display:grid;grid-template-columns:84px minmax(0,1fr) 78px 84px;gap:12px;align-items:baseline;
  padding:11px 4px;border-bottom:1px dashed var(--border);
}
.receipt-row .num{font-variant-numeric:tabular-nums}
.rc-time{color:var(--muted-fg);font-size:12px}
.rc-reason{font-size:13.5px;overflow-wrap:anywhere}
.rc-delta{text-align:right;font-weight:600;white-space:nowrap}
.rc-delta.in{color:var(--foreground)}
.rc-delta.out{color:var(--muted-fg)}
.rc-bal{text-align:right;color:var(--muted-fg);white-space:nowrap}
.receipt-head{
  display:grid;grid-template-columns:84px minmax(0,1fr) 78px 84px;gap:12px;
  color:var(--muted-fg);font-size:11px;letter-spacing:.1em;
  border-bottom:1px solid var(--border-strong);padding:6px 4px;
}
/* 流水标题右侧的单位标注（Ian 1004：数字列头只留「变动/余额」） */
.flow-unit{font-size:11px;font-weight:400;letter-spacing:.12em;color:var(--muted-fg);margin-left:8px}

/* 版税尺：三段，当前阶段高亮 */
.ruler{display:flex;gap:14px;margin:14px 0}
.ruler-seg{
  flex:1;border:1px dashed var(--border-strong);padding:12px 14px;color:var(--muted-fg);
}
.ruler-seg b{display:block;font-size:22px;color:var(--muted-fg)}
.ruler-seg span{font-size:12px}
.ruler-seg.now{border:1px solid var(--primary);background:var(--primary);color:var(--primary-fg)}
.ruler-seg.now b,.ruler-seg.now span{color:var(--primary-fg)}
.ruler-seg.past{border-style:solid;border-color:var(--ink)}
.ruler-seg.past b{color:var(--ink)}

/* 兑币柜台：兑币券 */
.ticket{
  border:1px solid var(--border-strong);background:var(--paper);
  padding:26px 28px;max-width:520px;position:relative;
}
.ticket::before,.ticket::after{
  content:"";position:absolute;width:18px;height:18px;border-radius:50%;
  background:var(--background);border:1px solid var(--border-strong);top:50%;
}
.ticket::before{left:-10px;margin-top:-9px}
.ticket::after{right:-10px;margin-top:-9px}
.ticket .conv{display:flex;align-items:baseline;gap:10px;margin:6px 0 2px}
.ticket .conv b{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-weight:700;font-size:44px}
.ticket .conv span{color:var(--muted-fg);font-size:13px;letter-spacing:.1em}
.ticket .tline{border-top:1px dashed var(--border-strong);margin:16px 0 0;padding-top:14px}

@media (max-width:640px){
  .receipt-row,.receipt-head{grid-template-columns:1fr 1fr;gap:4px 10px}
  .rc-time{grid-column:1}
  .rc-reason{grid-column:1 / -1;order:2}
  .rc-delta{text-align:left}
  .rc-bal{text-align:right}
  .receipt-head span:nth-child(2){display:none}
  .br-coins{min-width:72px;font-size:19px}
  .br-status{display:none}
}

/* ---------- 第三批：海报时刻 × 墨点上市集（构想 §7/§8） ---------- */

/* 海报块：英文大字升格 + 中文竖排（Bahnschrift 900，允许断词，禁渐变阴影圆角） */
.en-display{
  font-family:var(--font-head);font-weight:900;
  font-size:var(--fs-poster);
  line-height:.98;letter-spacing:.01em;
  color:var(--ink);margin:0;
  word-break:break-word;
}
.v-cn{
  writing-mode:vertical-rl;
  font-size:20px;font-weight:600;letter-spacing:.34em;
  color:var(--ink);
}
.poster{position:relative;display:flex;gap:28px;align-items:flex-start}
.poster .v-cn{position:absolute;right:8px;top:0;height:100%;display:flex;align-items:flex-start}
.poster-row{display:flex;gap:28px;align-items:stretch}

/* 货架行三块分组（§8-1）：左块两行结构 / 竖规线 / 中块 chips / 右块起价+箭头；行高 64-72px */
.course-row{
  display:flex;align-items:center;gap:0;min-height:68px;padding:10px 4px;
  border-bottom:1px solid var(--border);
}
.course-row:hover{background:var(--muted)}
.cr-main{flex:1.2;min-width:180px}
.cr-name{display:block;font-size:19px;font-weight:600;color:var(--ink);line-height:1.3}
.cr-meta{display:block;color:var(--muted-fg);font-size:13px;margin-top:3px}
.cr-sep{width:1px;align-self:stretch;background:var(--border);margin:0 22px;flex:none}
.cr-tiers{display:flex;gap:8px;flex-wrap:nowrap;justify-content:flex-end;flex:0 1 auto;margin-right:18px}
.cr-price{
  font-family:var(--font-num);font-variant-numeric:tabular-nums;
  font-weight:600;font-size:16px;min-width:88px;text-align:right;flex:none;
}
.cr-price small{display:block;font-size:11px;color:var(--muted-fg);font-weight:400}
.cr-go{color:var(--muted-fg);flex:none;margin-left:6px}
.course-row:hover .cr-go{color:var(--foreground)}

/* 墨点：尺寸/单色仲裁/气泡台词 */
.mo{display:block}
.mo-mono [fill="#D8412F"]{fill:var(--ink)}
.mo-inv [fill="var(--ink)"],.mo-inv [fill="#10142B"]{fill:#F4F1E8}
.mo-say{display:inline-flex;align-items:flex-end;gap:10px}
.mo-bubble{
  position:relative;background:var(--paper);border:1px solid var(--ink);
  color:var(--ink);font-size:13px;padding:7px 12px;white-space:nowrap;
}
.mo-bubble::after{
  content:"";position:absolute;right:-6px;bottom:10px;width:10px;height:10px;
  background:var(--paper);border-right:1px solid var(--ink);border-top:1px solid var(--ink);
  transform:rotate(45deg);
}
.empty-mo{display:block;margin:0 auto 10px}
@media (prefers-reduced-motion:reduce){
  .mo [animate],[animate]{display:none}
}

/* 存折封面（§8-5） */
.passbook{
  border:1px solid var(--border-strong);background:var(--paper);
  padding:0 0 18px;margin:18px 0;max-width:460px;
}
.passbook .pb-spine{
  height:8px;background:var(--ink);
  background-image:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="36" height="8" viewBox="0 0 36 8"><path d="M0 0h36v8H0z" fill="%2310142B"/><path d="M24 0l7 4-7 4z" fill="%23F4F1E8"/></svg>');
  background-repeat:repeat-x;
}
.passbook .pb-head{
  display:flex;justify-content:space-between;align-items:baseline;
  padding:12px 18px 0;font-family:var(--font-head);
}
.passbook .pb-head .t{font-weight:900;letter-spacing:.14em;font-size:13px}
.passbook .pb-head .no{color:var(--muted-fg);font-size:11px;letter-spacing:.08em}
.passbook .pb-user{
  padding:0 18px;color:var(--muted-fg);font-size:12px;
  border-bottom:1px dashed var(--border-strong);
  margin-top:10px;padding-bottom:10px;
}
.passbook .pb-balance{
  font-family:var(--font-num);font-variant-numeric:tabular-nums;
  font-weight:700;font-size:var(--fs-num);padding:8px 18px 0;
}
.passbook .pb-balance small{font-size:13px;color:var(--muted-fg);font-weight:400}

/* 小票行账本底纹（§8-5 横线底纹） */
.receipt-book{position:relative}
.receipt-book .receipt-row{
  background:repeating-linear-gradient(
    to bottom,
    transparent 0, transparent 33px,
    var(--border) 33px, var(--border) 34px
  );
}

/* 书签式双视角切换（§8-6 书包/书摊） */
.view-tabs{display:flex;gap:0;margin:0 0 26px;border-bottom:1px solid var(--border-strong)}
.view-tabs a{
  padding:9px 26px 8px;font-size:14px;color:var(--muted-fg);text-decoration:none;
  border:1px solid var(--border-strong);border-bottom:none;margin-right:-1px;
  position:relative;top:1px;background:var(--paper-2);
}
.view-tabs a.on{background:var(--paper);color:var(--ink);font-weight:600;border-bottom:1px solid var(--paper)}

/* 工单可点选详情卡 */
.workstep{cursor:pointer;user-select:none}
.workstep .on{color:var(--ink);border-bottom-color:var(--ink)}
.work-detail{
  border:1px solid var(--border-strong);background:var(--paper-2);
  padding:16px 20px;margin-top:14px;
}
.work-detail h4{margin:0 0 6px;font-size:15px}
.work-detail p{margin:0;color:var(--muted-fg);font-size:13.5px}

/* 海报柱（/courses 右 1/3，竖排大字+墨点收底） */
.poster-col{
  border-left:1px solid var(--border-strong);padding:8px 0 8px 30px;
  display:flex;gap:20px;min-height:520px;position:relative;
}
.poster-col .pc-en{
  writing-mode:vertical-rl;font-family:var(--font-head);font-weight:900;
  font-size:var(--fs-poster);line-height:1.02;letter-spacing:.04em;
  color:var(--ink);
}
.poster-col .pc-cn{
  writing-mode:vertical-rl;font-size:20px;font-weight:700;letter-spacing:.3em;
  color:var(--ink);padding-top:6px;
}
.poster-col .pc-mo{margin-top:auto;align-self:flex-start;padding-top:18px}

.two-col{display:grid;grid-template-columns:2fr 1fr;gap:34px;align-items:start}
@media (max-width:900px){.two-col{grid-template-columns:1fr}
  .poster-col{border-left:none;border-top:1px solid var(--border-strong);padding:24px 0 0;min-height:200px}
  .poster-col .pc-en{font-size:34px}
  .v-cn{writing-mode:horizontal-tb;letter-spacing:.3em}
}

.hero-mo{display:flex;justify-content:flex-end;margin:2px 6px 0 0}

.veil-mo{display:block;margin-top:12px}

/* ---------- 第四批：排版系统落地（§9） + 墨点陪跑 ---------- */
.wallet-grid{display:grid;grid-template-columns:5fr 6fr;gap:36px;align-items:start;margin-top:24px}
.wallet-grid .flow-col{border-left:1px solid var(--border);padding-left:32px;max-width:none}
.flow-scroll{max-height:480px;overflow-y:auto;padding-right:8px}
@media (max-width:900px){
  .wallet-grid{grid-template-columns:1fr;gap:24px}
  .wallet-grid .flow-col{border-left:none;padding-left:0;max-height:none}
}

/* 墨点陪跑（§9.3：桌面版 1:1——悬浮/可拖/双击收印章/位置记忆） */
#modot-pet{
  position:fixed;z-index:9999;width:64px;height:72px;cursor:grab;
  touch-action:none;user-select:none;left:0;top:0;
}
#modot-pet.dragging{cursor:grabbing}
#modot-pet.sealed{width:38px;height:38px}
#modot-pet.sealed svg{width:38px;height:38px}
#modot-pet .pet-bubble{
  position:absolute;bottom:calc(100% + 8px);right:0;
  background:var(--paper);border:1px solid var(--ink);color:var(--ink);
  font-size:13px;padding:7px 12px;white-space:nowrap;
}
#modot-pet .pet-bubble::after{
  content:"";position:absolute;bottom:-6px;right:14px;width:10px;height:10px;
  background:var(--paper);border-right:1px solid var(--ink);border-bottom:1px solid var(--ink);
  transform:rotate(45deg);
}
#modot-pet svg{width:64px;height:72px;display:block;pointer-events:none}
@media (max-width:640px){
  #modot-pet{width:48px;height:54px}
  #modot-pet svg{width:48px;height:54px}
  #modot-pet.sealed{width:38px;height:38px}
  #modot-pet.sealed svg{width:38px;height:38px}
}
@media (prefers-reduced-motion:reduce){
  #modot-pet svg [animate]{display:none}
}

/* 存折封面升主角（§9.2：钱包页主角 ≥50%） */
.wallet-grid .passbook{max-width:none;padding-bottom:32px}
.wallet-grid .passbook .pb-balance{font-size:var(--fs-num)}

/* 错误页样式收编（原 error.html 内联块） */
.err-page{
  font-family:var(--font-body);background:var(--background);color:var(--foreground);
  display:flex;min-height:100vh;align-items:center;justify-content:center;margin:0;text-align:center;
}
.err-page .box{padding:40px 24px}
.err-page h1{font-family:var(--font-num);font-size:56px;letter-spacing:.1em;margin:0 0 8px}
.err-page p{color:var(--muted-fg);margin:0 0 24px}
.err-page a{color:var(--foreground);text-decoration:underline;text-underline-offset:3px;margin:0 10px}
/* Ian 1004：错误页按钮化后，链接色规则不得吃掉 .btn 的纸色文字 */
.err-page a.btn,.err-page a.btn-ghost{margin:0}
.err-page a.btn{color:var(--primary-fg);text-decoration:none}

.fs-display{font-size:var(--fs-display)}

/* ---------- 第三批返工：375 溢出治理（cr-price 最小宽 + 搜索框/行内压缩） ---------- */
@media (max-width:640px){
  .course-row{flex-wrap:wrap;padding:12px 2px}
  .cr-main{flex:1 1 100%}
  .cr-sep{display:none}
  .cr-tiers{flex:1 1 auto;justify-content:flex-start}
  .cr-price{min-width:0;text-align:left;font-size:14px}
  .course-row .cr-go{position:absolute;right:2px;top:14px}
  .course-row{position:relative}
  .searchbar{max-width:none}
  .searchbar button{padding:0 14px}
}

/* ---------- Ian 视觉反馈 0924②：海报柱大字化 / 分段控件 / creator 区头 ---------- */
.pc-en{
  font-family:var(--font-head);font-weight:900;
  font-size:clamp(44px, 4.6vw, 68px);
  line-height:1.04;letter-spacing:.02em;color:var(--ink);
  margin:0 0 18px;
}
.pc-cn{font-size:17px;font-weight:600;letter-spacing:.16em;color:var(--muted-fg);margin:0 0 26px}
.pc-stats{
  display:flex;gap:32px;flex-wrap:wrap;
  border-top:1px solid var(--border-strong);padding:18px 0;margin:8px 0 26px;
}
.pc-stats div{text-align:left}
.pc-stats b{display:block;font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink)}
.pc-stats span{font-size:11.5px;letter-spacing:.12em;color:var(--muted-fg)}

/* 视角切换：分段控件（选中=墨蓝实心） */
.view-tabs{
  display:inline-flex;border:1px solid var(--border-strong);
  background:var(--paper);margin:0 0 26px;
}
.view-tabs a{
  padding:10px 28px;font-size:14px;color:var(--muted-fg);text-decoration:none;
  border-right:1px solid var(--border-strong);
}
.view-tabs a:last-child{border-right:none}
.view-tabs a.on{background:var(--ink);color:var(--primary-fg);font-weight:600}

/* creator 区头海报 */
.creator-hero{margin-bottom:8px}
.creator-hero .kicker{text-align:left;margin-bottom:10px}
/* Ian 1009：slogan 英文字号全站统一 --fs-poster（撤 --fs-display 特例） */

/* ================= W5 网页工作台（/convert，spec: docs/specs/W5-网页工作台.md） =================
   桌面工作台主链样式原样搬运（token 同名同值），全部收进 .cv 作用域，不碰全站组件。 */
.cv-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:-14px 0 20px}
.cv-chip{display:inline-flex;align-items:center;padding:4px 10px;border:1px solid var(--rule-strong);font-size:12px;color:var(--slate);background:var(--paper-2)}
.cv-chip.num{font-weight:600;color:var(--ink)}
.cv-link{font-size:12.5px;color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.cv-theme{margin-left:auto;display:inline-flex;border:1px solid var(--rule-strong)}
.cv-theme button{border:none;background:var(--paper);color:var(--slate);font-size:12px;padding:5px 13px;cursor:pointer;font-family:var(--font-head);letter-spacing:.08em}
.cv-theme button.on{background:var(--ink);color:var(--paper)}

.studio.cv{border:1px solid var(--rule-strong);background:var(--paper)}
.cv .studio-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:16px 22px;border-bottom:1px solid var(--rule);flex-wrap:wrap}
.cv .studio-title{font-family:var(--font-head);font-weight:600;font-size:14px;letter-spacing:.1em}
.cv .studio-sub{font-size:12.5px;color:var(--slate)}
.cv .studio-body{padding:26px}
.cv .drop{
  border:1.5px dashed var(--rule-strong);padding:42px 24px;text-align:center;
  cursor:pointer;transition:border-color .15s,background .15s;background:transparent;
}
.cv .drop:hover,.cv .drop.hot{border-color:var(--ink);background:var(--paper-2)}
.cv .drop-icon{width:40px;height:40px;margin:0 auto 14px;border:1px solid var(--rule-strong);display:grid;place-items:center}
.cv .drop-icon svg{width:18px;height:18px;stroke:var(--ink);fill:none}
.cv .drop-t{font-size:15px;font-weight:600;margin-bottom:5px}
.cv .drop-s{font-size:12.5px;color:var(--slate);font-family:var(--font-head);letter-spacing:.04em}
.cv .file-row{display:none;align-items:center;gap:13px;padding:13px 15px;border:1px solid var(--rule-strong);background:var(--paper-2);margin-top:16px}
.cv .file-row.show{display:flex}
.cv .file-ico{width:32px;height:32px;background:var(--ink);display:grid;place-items:center;flex-shrink:0}
.cv .file-ico svg{width:15px;height:15px;stroke:var(--paper);fill:none}
.cv .file-meta{flex:1;min-width:0}
.cv .file-name{font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cv .file-size{font-size:11.5px;color:var(--slate);font-family:var(--font-head);font-variant-numeric:tabular-nums}
.cv .x-btn{background:none;border:none;color:var(--slate);cursor:pointer;font-size:17px;line-height:1;padding:6px 9px}
.cv .x-btn:hover{color:var(--paper);background:var(--ink)}
.cv .field{margin-top:20px}
.cv .field .label{display:flex;align-items:baseline;gap:10px;margin-bottom:8px}
.cv .field .label b{font-size:13.5px;font-weight:600;color:var(--ink)}
.cv .field .label span{font-family:var(--font-head);font-weight:500;font-size:10.5px;letter-spacing:.16em;color:var(--slate);text-transform:uppercase}
.cv .style-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}
.cv .style-card{
  display:flex;gap:8px;align-items:flex-start;margin:0;padding:11px 14px;
  border:1px solid var(--rule);cursor:pointer;font-size:inherit;letter-spacing:normal;
  font-weight:400;color:var(--ink);transition:border-color .15s,background .15s;
}
.cv .style-card:hover{border-color:var(--rule-strong)}
.cv .style-card:has(input:checked){border-color:var(--ink);background:var(--paper-2)}
.cv .style-card input{margin-top:3px;accent-color:var(--ink)}
.cv .style-card b{font-size:13.5px;font-weight:600;display:block}
.cv .style-card small{display:block;font-size:12px;color:var(--slate);margin-top:2px}
.cv .btn{width:100%;display:flex;align-items:center;justify-content:center;gap:9px;margin-top:18px;padding:14px}
.cv .btn:disabled{opacity:.45;cursor:not-allowed}
.cv .spin{width:14px;height:14px;border:2px solid rgba(244,241,232,.35);border-top-color:var(--paper);border-radius:50%;animation:cvsp .7s linear infinite;display:none}
@keyframes cvsp{to{transform:rotate(360deg)}}
.cv .btn.loading .spin{display:block}
.cv .working{display:flex;align-items:center;gap:14px;margin-top:16px;padding:13px 16px;border:1px solid var(--rule-strong);background:var(--paper-2)}
.cv .working[hidden]{display:none}
.cv .working-txt{font-size:13.5px;font-weight:600}
.cv .working-sub{display:block;font-size:12px;color:var(--slate);font-weight:400;margin-top:2px}
.cv .result{margin-top:20px;border:1px solid var(--rule-strong);background:var(--paper-2);display:none}
.cv .result.show{display:block;animation:cvreveal .28s cubic-bezier(.16,1,.3,1)}
@keyframes cvreveal{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.cv .result.show{animation:none}}
.cv .result-inner{padding:20px}
.cv .res-head{display:flex;align-items:center;gap:10px;margin-bottom:12px;font-size:14.5px;font-weight:600}
.cv .res-mark{width:22px;height:22px;display:grid;place-items:center;flex-shrink:0}
.cv .res-mark svg{width:13px;height:13px;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.cv .result.ok .res-head{color:var(--ink)}
.cv .result.ok .res-mark{background:var(--ink)}
.cv .result.ok .res-mark svg{stroke:var(--paper)}
.cv .result.err{border-color:var(--red)}
.cv .result.err .res-head{color:var(--red)}
.cv .result.err .res-mark{background:var(--red)}
.cv .result.err .res-mark svg{stroke:var(--paper)}
.cv .kv{display:flex;gap:22px;font-size:12px;color:var(--slate);font-family:var(--font-head);font-variant-numeric:tabular-nums;margin-bottom:14px;flex-wrap:wrap}
.cv .dl{
  display:inline-flex;align-items:center;gap:8px;padding:11px 20px;background:var(--ink);
  color:var(--paper);text-decoration:none;font-size:13.5px;font-weight:600;
  font-family:var(--font-head);letter-spacing:.06em;transition:background .15s;
}
.cv .dl:hover{background:var(--ink-hover)}
.cv .dl svg{width:14px;height:14px;stroke:var(--paper);fill:none}
.cv .pv-btn{
  margin-left:10px;padding:11px 18px;border:1px solid var(--ink);background:var(--paper);
  color:var(--ink);font-size:13px;font-family:var(--font-head);font-weight:600;
  letter-spacing:.06em;cursor:pointer;
}
.cv .pv-btn:hover{background:var(--ink);color:var(--paper)}
.cv pre{
  margin-top:14px;padding:14px;background:var(--ink);color:var(--paper);
  font-size:11.5px;line-height:1.6;max-height:190px;overflow:auto;
  white-space:pre-wrap;word-break:break-word;
}
.cv .err-detail{margin-top:10px;font-size:12px;color:var(--slate)}
.cv .err-detail summary{cursor:pointer;user-select:none}
.cv .err-detail pre{background:transparent;color:var(--slate);border:1px solid var(--rule);padding:8px}
.cv .ai-note{margin-bottom:12px;padding:10px 14px;border:1px solid var(--red);color:var(--red);font-size:12.5px;line-height:1.7}
.cv-note{margin-top:24px;padding:12px 16px;border:1px solid var(--rule);background:var(--paper-2);font-size:12.5px;color:var(--slate);line-height:1.7}
.cv-note b{color:var(--ink)}
.cv-note a{color:var(--ink)}
.cv-hint{margin-top:16px;font-size:12.5px;color:var(--slate)}
.cv-hint a{color:var(--ink)}
.drop-overlay{
  position:fixed;inset:0;z-index:150;background:rgba(16,20,43,.9);display:none;
  place-items:center;color:var(--paper);font-family:var(--font-head);font-size:18px;
  font-weight:600;letter-spacing:.2em;pointer-events:none;
}
.drop-overlay.show{display:grid}

/* 全站深色（Ian 1007 拍板「整体暗/亮」：原 /convert 页级方案升为全站）。
   预应用脚本在 base.html head（notera_theme，与登录页/工作台同一 key）。
   令牌反转从 main 提到 body——页脚/页头后代一并生效；阅读纸面（.read-pane/docx 预览）保持纸白不翻黑。 */
html[data-theme="dark"]{background:#0E1126}
html[data-theme="dark"] body{
  --paper:#141830; --paper-2:#1B2040; --ink:#ECE9DE; --ink-hover:#DCD8C9;
  --slate:#98A1B8; --rule:rgba(236,233,222,.18); --rule-strong:rgba(236,233,222,.42);
  --red:#E05548;
  --background:#0E1126; --foreground:#ECE9DE;
  --muted:#1B2040; --muted-fg:#98A1B8;
  --border:rgba(236,233,222,.18); --border-strong:rgba(236,233,222,.42);
  --primary:#ECE9DE; --primary-fg:#141830; --primary-hover:#DCD8C9;
  --ring:#ECE9DE;
  background:#0E1126; color:var(--ink);
}
html[data-theme="dark"] .topbar{background:#0E1126;border-bottom-color:rgba(236,233,222,.18)}
html[data-theme="dark"] .topbar .nav a{color:#C9CEDD}
html[data-theme="dark"] .topbar .nav a.active{color:#F4F1E8}
html[data-theme="dark"] .topbar .brand-cn{color:#F4F1E8}
html[data-theme="dark"] .topbar .wordmark{color:#F4F1E8}
html[data-theme="dark"] .topbar .logo path{fill:#ECE9DE}
html[data-theme="dark"] .stage-tag{border-color:rgba(236,233,222,.42);color:#98A1B8}
html[data-theme="dark"] .spine{opacity:.5}
/* 帮助页「使命」卡：亮色是墨蓝底奶油字，暗色下反转成卡纸面，否则奶油字隐形 */
html[data-theme="dark"] .hh-mission{background:var(--paper-2);border:1px solid var(--rule)}
html[data-theme="dark"] .hh-mission-t,
html[data-theme="dark"] .hh-mission-en{color:var(--slate)}
html[data-theme="dark"] footer{border-top-color:var(--rule)}
html[data-theme="dark"] .foot-legal-btn{color:var(--slate)}

/* ================= Ian 1003 · 全站打磨（筛选重构 + 组件清欠 + 微交互） ================= */

/* ---- 缺失类补齐（原模板里用了但从未定义 / 只在别处作用域内生效） ---- */
.slogan-cn{color:var(--muted-fg);font-size:13.5px;letter-spacing:.06em}
.slogan-cn-page{margin:-2px 0 20px;display:block}
.slogan-cn-inline{margin-left:14px}
.lede-en{color:var(--muted-fg);font-family:var(--font-head);font-weight:600;letter-spacing:.14em;font-size:12px}
/* .tline 原只在 .ticket 作用域内生效，兑币页直用同款虚线规线 */
.tline{border-top:1px dashed var(--border-strong);margin:16px 0 0;padding-top:14px}
.tline-block{margin-top:20px}
.tline-block .hint{margin:6px 0 0}
.tline-block .hint:first-child{margin:0}
.tline-block .btn{margin-top:18px}
.section-head{margin:32px 0 8px}
.hint-actions{margin-top:14px}
.btn-ghost-gap{margin-left:10px}
.searchbar-page{margin:0 0 8px}
.vol-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.mock-card.covered{border-color:var(--ink)}
.vol-price{margin:12px 0}
.tiles-mt-lg{margin-top:36px}
.tiles-mt-sm{margin-top:8px}
/* Ian 1009：tile 升格为链接（首页怎么运作三步）+ 悬赏速览尾链 */
a.tile-link{text-decoration:none;color:inherit;transition:background .15s}
a.tile-link:hover{background:var(--paper-2)}
a.tile-link:hover h3{text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:2px}
.tile-more{margin:14px 0 0;font-size:12.5px}
.tile-more a{color:var(--ink);font-weight:600;text-decoration:none;border-bottom:1px solid var(--rule-strong);padding-bottom:1px}
.tile-more a:hover{border-bottom-color:var(--ink)}
.tile-span2{grid-column:span 2;min-width:0}
summary.hint{cursor:pointer}

/* ---- 通用小件：内联样式收纳 ---- */
.field-area{
  padding:10px 12px;border:1px solid var(--rule-strong);background:var(--paper);
  font:inherit;font-size:14px;color:var(--ink);resize:vertical;border-radius:0;
}
.field-area:focus{outline:2px solid var(--ink);outline-offset:-1px}
.form-grid{display:grid;gap:10px}
.form-grid.narrow{max-width:560px}
.claim-panel{margin:14px 0 4px;border:1px solid var(--border-strong);background:var(--paper-2);padding:18px 20px;max-width:640px}
.claim-panel-t{font-weight:700;color:var(--ink);margin-bottom:10px}
.dice-btn{
  padding:10px 12px;border:1px solid var(--ink);background:var(--paper);
  cursor:pointer;font-size:16px;line-height:1;
}
.dice-btn:hover{background:var(--paper-2)}
.btn-ghost.btn-mini{margin:0 0 0 10px;padding:3px 10px;font-size:12.5px}
.inline-row{display:flex;gap:8px}
.inline-row > input{flex:1;min-width:0}
.input-flex{flex:1;min-width:0}
.hint-flush-sm{margin:6px 0 0}
.details-gap{margin:10px 0 4px}
.form-grid-tight{gap:8px;margin-top:8px}
.err-inline{margin:8px 0 0;color:var(--red)}
.linklike{
  background:none;border:none;padding:0;font:inherit;font-weight:700;color:inherit;
  cursor:pointer;text-decoration:underline;text-underline-offset:3px;
}
.linklike:hover{opacity:.75}
.stack-gap{margin-top:28px}
.input-block{width:100%;max-width:560px}
.hint-plain{font-weight:400}
.bt-panel .hint.hint-plain,.hint.hint-plain{font-weight:400}
.hint-flush-bt{margin:0 0 10px}
.tiles-mt-bt{margin-top:24px}
.section-head-tight{margin:0 0 8px}
.notice-box{border:1px solid var(--rule-strong);padding:9px 14px}
.pb-hint{padding:0 18px}
.hint-gap{margin-top:14px}
.hint-gap-sm{margin-top:10px}
.poster-row-split{align-items:baseline;justify-content:space-between}
.view-tabs-flush{margin:0}
.section-head-flush{margin:0 0 4px}
.stall-cta{margin-top:26px;max-width:520px}
.receipt-head .r,.receipt-row .r{text-align:right}

/* ---- 共享弹窗（原 me.html 520px / topup.html 680px 两份拷贝合一） ---- */
.modal-backdrop{position:fixed;inset:0;z-index:140;background:rgba(16,20,43,.55);display:grid;place-items:center;padding:24px;overflow:auto}
.modal-backdrop[hidden]{display:none}
.modal{position:relative;width:min(560px,94vw);max-height:90vh;overflow:auto;background:var(--paper);border:1px solid var(--ink);box-shadow:0 30px 80px rgba(16,20,43,.35);text-align:left}
.modal.wide{width:min(680px,94vw)}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:22px 26px 0 28px}
.modal-title{font-family:var(--font-head);font-weight:700;font-size:13px;letter-spacing:.16em;color:var(--slate);text-transform:uppercase}
.modal-x{background:none;border:none;color:var(--slate);cursor:pointer;font-size:20px;line-height:1;padding:4px 8px}
.modal-x:hover{color:var(--ink)}
.modal-body{padding:14px 28px 0}
.modal-foot{display:flex;justify-content:flex-end;gap:14px;padding:16px 28px 22px}

/* ---- 门厅「其他」tab（Ian 1003：5 所快捷校 + 其他 → /courses） ---- */
.shelf-tabs .shelf-other{
  margin-left:auto;color:var(--ink);font-weight:600;
  display:inline-flex;align-items:center;gap:4px;
}
.shelf-tabs .shelf-other svg{transition:transform .15s}
.shelf-tabs .shelf-other:hover svg{transform:translateX(2px)}

/* ---- 课程页筛选重构（Ian 1003）：学校 combobox + 年级 chips，选中即生效 ---- */
.course-filters{
  display:grid;gap:10px;margin:0 0 6px;
  border-top:2px solid var(--ink);padding-top:12px;  /* 4.5v 复查：粗规线开场=全站区块母题，主次立现 */
}
.cf-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.cf-grades{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.course-filters .chip-grade{padding:8px 16px}
.cf-summary{margin:0;font-size:12.5px;color:var(--muted-fg);letter-spacing:.02em}
.cf-summary a{margin-left:4px}

.sch-combo{position:relative;width:280px;max-width:100%}
.sch-combo-btn{
  display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;
  padding:9px 12px;border:1px solid var(--border-strong);background:var(--paper);
  font:inherit;font-size:13.5px;color:var(--ink);cursor:pointer;text-align:left;
  transition:border-color .15s,background .15s;
}
.sch-combo-btn:hover{border-color:var(--ink)}
.sch-combo-btn[aria-expanded="true"]{border-color:var(--ink);background:var(--paper-2)}
.sch-combo-btn .scb-label{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.sch-combo-btn svg{flex:none;color:var(--muted-fg);transition:transform .15s}
.sch-combo-btn[aria-expanded="true"] svg{transform:rotate(180deg)}
.sch-combo-panel{
  position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:120;
  border:1px solid var(--ink);background:var(--paper);
  box-shadow:0 14px 34px rgba(16,20,43,.16);
}
.sch-combo-panel[hidden]{display:none}
.sch-combo-panel input[type="search"]{
  width:100%;padding:9px 12px;border:none;border-bottom:1px solid var(--border-strong);
  background:var(--paper-2);font:inherit;font-size:13.5px;color:var(--ink);
}
.sch-combo-panel input[type="search"]:focus{outline:2px solid var(--ink);outline-offset:-2px}
.sch-combo-list{max-height:264px;overflow-y:auto}
.sc-opt{padding:8px 12px;font-size:13.5px;color:var(--ink);cursor:pointer}
.sc-opt:hover,.sc-opt.active{background:var(--ink);color:var(--primary-fg)}
.sc-opt.none{color:var(--muted-fg);cursor:default}
.sc-opt.none:hover{background:transparent;color:var(--muted-fg)}

/* ---- 错误页动作（原裸链接 → 按钮语言） ---- */
.err-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.err-actions .btn,.err-actions .btn-ghost{margin-top:0}

/* ---- 首页速览行（2.4：悬赏速览 / 最新笔记接真实数据后的轻量行） ---- */
.mini-row{
  display:flex;align-items:baseline;gap:10px;padding:9px 2px;
  border-bottom:1px solid var(--border);color:var(--foreground);text-decoration:none;
}
.mini-row:last-child{border-bottom:none}
.mini-row:hover{background:var(--muted)}
.mini-row .mr-num{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-weight:700;flex:none;min-width:64px}
.mini-row .mr-num small{font-size:10.5px;font-weight:400;color:var(--muted-fg)}
.mini-row .mr-main{flex:1;min-width:0}
.mini-row .mr-t{display:block;font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mini-row .mr-m{display:block;font-size:12px;color:var(--muted-fg);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---- 微交互（克制版，Ian 1003 拍板）：150-240ms 过渡；reduced-motion 全尊重 ---- */
@media (prefers-reduced-motion: no-preference){
  .sch-combo-panel{animation:comboIn .15s ease-out}
  @keyframes comboIn{from{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:none}}
  .course-row,.bounty-row{transition:background-color .15s}
  .cr-go,.br-claim{transition:color .15s,transform .15s}
  .course-row:hover .cr-go,.bounty-row:hover .br-claim,
  .course-row:focus-visible .cr-go,.bounty-row:focus-visible .br-claim{transform:translateX(3px)}
  .cr-name{
    background-image:linear-gradient(currentColor,currentColor);
    background-size:0% 1px;background-repeat:no-repeat;background-position:0 100%;
    transition:background-size .18s ease-out;
  }
  .course-row:hover .cr-name,.course-row:focus-visible .cr-name{background-size:100% 1px}
  .chip-grade,.shelf-tabs a,.btn,.btn-ghost,.nav a{
    transition:color .15s,border-color .15s,background-color .15s;
  }
  .chip-grade:active,.btn:active{transform:translateY(1px)}
  .searchbar button{transition:background .15s}
  .mini-row{transition:background-color .15s}
}

/* 全站滚动显现（.rv；帮助页 .hp-reveal 同语言先行） */
@media (prefers-reduced-motion: no-preference){
  body.mkt-js .rv{opacity:0;transform:translateY(12px);transition:opacity .45s ease-out,transform .45s cubic-bezier(.16,1,.3,1)}
  body.mkt-js .rv.in{opacity:1;transform:none}
}
/* 悬赏列表行进场阶梯（对齐首页货架语言） */
@media (prefers-reduced-motion: no-preference){
  section[aria-label="悬赏列表"] .bounty-row{animation:rowIn .4s cubic-bezier(.16,1,.3,1) both}
  section[aria-label="悬赏列表"] .bounty-row:nth-child(3){animation-delay:.05s}
  section[aria-label="悬赏列表"] .bounty-row:nth-child(4){animation-delay:.1s}
  section[aria-label="悬赏列表"] .bounty-row:nth-child(5){animation-delay:.15s}
  section[aria-label="悬赏列表"] .bounty-row:nth-child(6){animation-delay:.2s}
  section[aria-label="悬赏列表"] .bounty-row:nth-child(7){animation-delay:.25s}
}

/* ================= Ian 1003 · 全站获奖级批次（参考对照见 market/docs/design-references.md） ================= */

/* 导航下划线滑动（参考：Obys/Grids 的规线动效语言——结构线先于颜色说话） */
.nav a{
  background-image:linear-gradient(currentColor,currentColor);
  background-size:0% 2px;background-repeat:no-repeat;background-position:0 100%;
  border-bottom:none;padding-bottom:3px;
}
@media (prefers-reduced-motion: no-preference){
  .nav a{transition:color .15s,background-size .2s ease-out}
}
.nav a:hover,.nav a.active{background-size:100% 2px}

/* 门厅 tabs 同语言下划线 + 横滑吸附（参考：获奖站 tab strips 的 snap 手感） */
.shelf-tabs{scroll-snap-type:x proximity}
.shelf-tabs > a{
  scroll-snap-align:start;
  background-image:linear-gradient(currentColor,currentColor);
  background-size:0% 2px;background-repeat:no-repeat;background-position:0 calc(100% - 9px);
  border-bottom:none;
}
@media (prefers-reduced-motion: no-preference){
  .shelf-tabs > a{transition:color .15s,background-size .2s ease-out}
}
.shelf-tabs > a:hover,.shelf-tabs > a.on{background-size:100% 2px}
.shelf-tabs > a.on{color:var(--foreground);font-weight:600}

/* 首页 hero 进场错峰（参考：Casa Lunara SOTD 的开屏排印节奏；同一克制度） */
@media (prefers-reduced-motion: no-preference){
  .hero.center .kicker,.hero.center .en-display,.hero.center .slogan-cn,.hero.center .searchbar{
    animation:heroIn .5s cubic-bezier(.16,1,.3,1) both;
  }
  .hero.center .en-display{animation-delay:.06s}
  .hero.center .slogan-cn{animation-delay:.12s}
  .hero.center .searchbar{animation-delay:.18s}
  @keyframes heroIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
}

/* 列表行进场阶梯（前 8 行，参考：InstaGallery AH Typography 的行节奏） */
@media (prefers-reduced-motion: no-preference){
  .shelf .course-row{animation:rowIn .4s cubic-bezier(.16,1,.3,1) both}
  .shelf .course-row:nth-child(2){animation-delay:.05s}
  .shelf .course-row:nth-child(3){animation-delay:.1s}
  .shelf .course-row:nth-child(4){animation-delay:.15s}
  .shelf .course-row:nth-child(5){animation-delay:.2s}
  .shelf .course-row:nth-child(6){animation-delay:.25s}
  .shelf .course-row:nth-child(7){animation-delay:.3s}
  .shelf .course-row:nth-child(8){animation-delay:.35s}
  @keyframes rowIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
}

/* 卡片与面板的聚焦/悬停描边（参考：SavoirFaire© SOTD 的卡片边界反馈） */
.mock-card{transition:border-color .2s}
.mock-card.covered:hover,.mock-card.covered:focus-within{border-color:var(--ink)}
.bt-panel{transition:border-color .2s}
.bt-panel:focus-within{border-color:var(--ink)}
.sticky-buy{transition:border-color .2s}
.sticky-buy:focus-within{border-color:var(--ink)}

/* 搜索框 hover 描边升级（按钮已有 hover；容器补齐同一语言） */
.searchbar{transition:border-color .15s}
.searchbar:hover{border-color:var(--ink)}

/* 海报柱竖排字距微调（视觉复查遗留项） */
.poster-col .pc-en{letter-spacing:.06em}

/* 页脚链接 hover（原裸 span 无反馈） */
.footer-inner .foot-links a,.footer-inner .foot-links button{transition:color .15s}
.footer-inner .foot-links a:hover,.footer-inner .foot-links button:hover{color:var(--ink)}

/* ---- W5 购买/评价 ---- */
.sticky-buy .buy-form{margin:0 0 0 auto}
.sticky-buy .buy-form .btn{margin:0}
.review-row{
  display:grid;grid-template-columns:110px minmax(0,1fr) auto;gap:14px;align-items:baseline;
  padding:11px 2px;border-bottom:1px solid var(--border);
}
.review-row .rr-stars{color:var(--muted-fg);letter-spacing:.14em;font-size:13px}
.review-row .rr-main{font-size:13.5px;color:var(--foreground);overflow-wrap:anywhere}
.review-row .rr-meta{font-size:12px;color:var(--muted-fg)}
.review-form{margin:14px 0 6px;max-width:520px}
.review-form label{margin:12px 0 4px}
.review-form .btn{margin-top:14px}
.itv-avg{margin-left:12px;color:var(--muted-fg);font-size:13px}
.itv-flash{margin:14px 0 0}
.cc-owned{background:var(--ink);color:var(--primary-fg);border-color:var(--ink)}
.sb-owned{color:var(--ink)}

/* 2017 抽搐根治（Ian 定位：字体加载后滚动条出现→内容横移）：常驻滚动条槽，
   滚动条出现/消失不再改变视口宽度 */
html{overflow-y:scroll;scrollbar-gutter:stable}

/* 2017 购买阅读页：文档栏居中（原 62ch 左贴边=只占左半）+ 商品图排版 */
.paywall{max-width:880px;margin:0 auto}
.read-pane{padding:34px 44px;box-shadow:0 18px 50px -30px rgba(16,20,43,.45)}
.read-pane .rp-text{max-width:72ch;margin:0 auto;line-height:2;font-size:15px}
.read-pane .rp-text h3{margin:26px 0 12px;font-family:var(--font-head);letter-spacing:.03em}
.read-pane .rp-text ul{margin:0 0 14px;padding-left:22px}
.read-pane .rp-img{margin:18px 0;text-align:center}
.read-pane .rp-img img{max-width:100%;border:1px solid var(--rule);border-radius:4px}
.read-pane .rp-img figcaption{font-size:12.5px;color:var(--muted-fg);margin-top:6px}
@media (max-width:720px){.read-pane{padding:22px 18px}}
