/* ==========================================================================
   兵家典藏 · 全站样式
   色取古战：玄铁（甲）、朱砂（旗）、鎏金（钺）、宣纸（简）
   ========================================================================== */
:root{
  --xuan:#151d24;        /* 玄铁 */
  --xuan-2:#22303a;
  --zhu:#9e2f22;         /* 朱砂 */
  --zhu-2:#c04a31;
  --jin:#b08a37;         /* 鎏金 */
  --jin-2:#d8b45a;
  --qing:#2f5d63;        /* 石墨青 */
  --paper:#f6f0e2;       /* 宣纸 */
  --paper-2:#efe6d3;
  --paper-3:#e5d9c0;
  --ink:#221c14;
  --ink-2:#4a4033;
  --ink-3:#7a6f5e;
  --line:#d8cbb0;
  --bg:var(--paper);
  --bg-card:#fffdf7;
  --bg-soft:#f1e8d6;
  --tx:var(--ink);
  --tx-2:var(--ink-2);
  --tx-3:var(--ink-3);
  --bd:var(--line);
  --shadow:0 2px 10px rgba(60,42,20,.09), 0 12px 34px rgba(60,42,20,.07);
  --serif:"Songti SC","STSong","Noto Serif CJK SC","Source Han Serif SC",SimSun,"宋体",serif;
  --kai:"KaiTi","STKaiti","楷体","Kaiti SC",var(--serif);
  --sans:"PingFang SC","Microsoft YaHei","微软雅黑",system-ui,sans-serif;
  --r:10px;
  --nav-h:56px;
  --tab-h:54px;
  --fs:1;
}
body.night{
  --bg:#12161a; --bg-card:#1a2128; --bg-soft:#222b33;
  --tx:#e8e2d4; --tx-2:#bdb4a2; --tx-3:#8d8577; --bd:#31404a;
  --paper:#12161a; --paper-2:#1a2128; --paper-3:#222b33;
  --line:#31404a; --jin:#c9a24d; --jin-2:#e0bd6c; --zhu:#c85a41; --zhu-2:#dd7256;
  --shadow:0 2px 10px rgba(0,0,0,.4), 0 12px 30px rgba(0,0,0,.32);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
html.static{scroll-behavior:auto}
body{
  margin:0; background:var(--bg); color:var(--tx);
  font-family:var(--serif); font-size:calc(16px*var(--fs)); line-height:1.9;
  /* 极淡的云雷纹地 */
  background-image:
    repeating-linear-gradient(45deg, rgba(176,138,55,.035) 0 2px, transparent 2px 22px),
    repeating-linear-gradient(-45deg, rgba(158,47,34,.025) 0 2px, transparent 2px 26px);
  background-attachment:fixed;
  overflow-x:hidden;
}
[hidden]{display:none !important}
a{color:inherit;text-decoration:none}
h1,h2,h3,h4{font-family:var(--kai);font-weight:600;letter-spacing:.03em;margin:0 0 .5em}
p{margin:0 0 1em}
button{font-family:inherit;color:inherit;background:none;border:none;cursor:pointer}
img{max-width:100%;display:block}
::selection{background:rgba(176,138,55,.3)}

/* ── 布局 ─────────────────────────────────────────────── */
.wrap{max-width:1180px;margin:0 auto;padding:0 18px}
.narrow{max-width:840px;margin:0 auto;padding:0 18px}
main{padding:26px 0 60px;min-height:60vh}
section{margin:0 0 34px}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.g4{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}
.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.sp{flex:1 1 auto}
.mt0{margin-top:0}.mb0{margin-bottom:0}

/* ── 顶栏 ─────────────────────────────────────────────── */
.top{
  position:sticky;top:0;z-index:60;height:var(--nav-h);
  background:linear-gradient(180deg,var(--xuan) 0%,#1d2731 100%);
  color:#f3ecdc;border-bottom:2px solid var(--jin);
  display:flex;align-items:center;gap:14px;padding:0 16px;
  box-shadow:0 2px 12px rgba(0,0,0,.22);
}
.top .brand{display:flex;align-items:center;gap:9px;font-family:var(--kai);font-size:19px;letter-spacing:.16em;white-space:nowrap}
.seal{
  width:30px;height:30px;border-radius:5px;background:var(--zhu);color:#fff8ea;
  font-family:var(--kai);font-size:13px;line-height:1.05;display:grid;place-items:center;
  box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.55), 0 1px 4px rgba(0,0,0,.35);
  text-align:center;letter-spacing:0;flex:none;
}
.top nav{display:flex;gap:2px;overflow:auto;scrollbar-width:none}
.top nav::-webkit-scrollbar{display:none}
.top nav a{padding:7px 11px;border-radius:7px;font-size:14.5px;letter-spacing:.06em;opacity:.82;white-space:nowrap}
.top nav a:hover{background:rgba(255,255,255,.1);opacity:1}
.top nav a.on{background:var(--zhu);opacity:1;color:#fff8ea;box-shadow:inset 0 0 0 1px rgba(255,255,255,.28)}
.top .tools{display:flex;gap:6px;align-items:center;margin-left:auto}
.tbtn{border:1px solid rgba(216,180,90,.5);color:#f0e6cf;border-radius:20px;padding:4px 11px;font-size:13px;line-height:1.6}
.tbtn:hover{background:rgba(216,180,90,.18)}
body.night .top{background:linear-gradient(180deg,#0d1216,#161d24)}

/* ── 手机底栏 ─────────────────────────────────────────── */
.tabbar{display:none}
@media (max-width:860px){
  .top nav{display:none}
  .tabbar{
    display:grid;grid-template-columns:repeat(5,1fr);position:fixed;left:0;right:0;bottom:0;z-index:70;
    height:calc(var(--tab-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);
    background:linear-gradient(0deg,var(--xuan),#22303a);border-top:2px solid var(--jin);
  }
  .tabbar a{display:grid;place-items:center;gap:1px;color:#cfc6b2;font-size:11.5px;letter-spacing:.04em}
  .tabbar a b{font-family:var(--kai);font-size:17px;font-weight:400;line-height:1.1}
  .tabbar a.on{color:var(--jin-2)}
  .tabbar a.on b{text-shadow:0 0 12px rgba(216,180,90,.5)}
  main{padding-bottom:calc(74px + env(safe-area-inset-bottom))}
}

/* ── 英雄区 ───────────────────────────────────────────── */
.hero{position:relative;overflow:hidden;border-radius:0 0 var(--r) var(--r);margin:-26px 0 26px;
  background:linear-gradient(160deg,#151d24 0%,#243440 45%,#3d2f24 100%);color:#f2ead8}
.hero .art{position:absolute;inset:0;opacity:.42;mix-blend-mode:screen}
.hero .art img{width:100%;height:100%;object-fit:cover}
.hero .in{position:relative;padding:44px 22px 34px;max-width:1180px;margin:0 auto}
.hero h1{font-size:clamp(30px,6vw,50px);letter-spacing:.2em;margin:0 0 10px;text-shadow:0 2px 16px rgba(0,0,0,.5)}
.hero .sub{font-family:var(--kai);font-size:clamp(14px,2.3vw,18px);letter-spacing:.1em;opacity:.9;margin:0 0 6px}
.hero .desc{max-width:640px;font-size:14.5px;line-height:1.95;opacity:.8}
.hero .stats{display:flex;flex-wrap:wrap;gap:10px 26px;margin:20px 0 0}
.hero .stats i{font-style:normal;display:block}
.hero .stats .n{font-family:var(--kai);font-size:26px;color:var(--jin-2);line-height:1.2;letter-spacing:.04em}
.hero .stats .l{font-size:12px;opacity:.72;letter-spacing:.12em}
.rule{height:3px;background:linear-gradient(90deg,transparent,var(--jin),transparent);margin:0 0 26px}
/* 卷首横图 */
.fascia{position:relative;border-top:1px solid var(--bd);border-bottom:1px solid var(--bd);margin:0 0 30px;background:var(--bg-soft)}
.fascia img{display:block;width:100%;height:auto}
.fascia figcaption{position:absolute;right:16px;bottom:12px;font-family:var(--kai);font-size:13px;letter-spacing:.22em;
  color:var(--tx-2);background:rgba(246,240,226,.78);border:1px solid var(--bd);border-radius:5px;padding:3px 10px}
body.night .fascia figcaption{background:rgba(21,29,36,.72)}
.daily-fig{width:92px;height:92px;object-fit:cover;object-position:38% 42%;border:1px solid var(--bd);border-radius:6px;flex:0 0 auto;margin-right:16px}
@media (max-width:640px){.daily-fig{display:none}}
/* 戈矛纹分隔 */
.spear{display:flex;align-items:center;gap:10px;color:var(--jin);opacity:.6;margin:0 0 22px;font-size:13px;letter-spacing:.3em}
.spear:before,.spear:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,transparent,currentColor,transparent)}

/* ── 卡片 ─────────────────────────────────────────────── */
.card{background:var(--bg-card);border:1px solid var(--bd);border-radius:var(--r);
  padding:18px 18px 16px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.card:hover{border-color:var(--jin)}
.card .corner{position:absolute;top:0;right:0;width:42px;height:42px;
  background:linear-gradient(225deg,var(--zhu) 0%,var(--zhu) 52%,transparent 52%);opacity:.85}
.card h3{font-size:19px;margin-bottom:6px}
.card .meta{font-size:12.5px;color:var(--tx-3);letter-spacing:.05em;margin-bottom:8px}
.card .txt{font-size:14px;color:var(--tx-2);line-height:1.85}
.card.link{cursor:pointer;transition:transform .18s,box-shadow .18s}
.card.link:hover{transform:translateY(-3px);box-shadow:0 6px 18px rgba(60,42,20,.14),0 18px 40px rgba(60,42,20,.1)}
.tile{background:var(--bg-card);border:1px solid var(--bd);border-radius:var(--r);padding:14px;min-height:96px}
.tile .big{font-family:var(--kai);font-size:18px;letter-spacing:.08em}
.tile .num{font-family:var(--kai);color:var(--jin);font-size:13px;letter-spacing:.1em}

/* 竖排书脊列表 */
.slip{display:flex;gap:0;border-left:3px solid var(--zhu);padding:6px 0 6px 14px;margin-bottom:10px}
.slip .v{writing-mode:vertical-rl;font-family:var(--kai);font-size:16px;letter-spacing:.28em;color:var(--zhu);
  border-right:1px dashed var(--bd);padding-right:10px;min-height:96px}
.slip .body{padding-left:14px;flex:1}

/* ── 标签 / 芯片 ──────────────────────────────────────── */
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{border:1px solid var(--bd);background:var(--bg-soft);border-radius:20px;padding:4px 13px;font-size:13px;
  letter-spacing:.06em;color:var(--tx-2);cursor:pointer;transition:.16s}
.chip:hover{border-color:var(--jin);color:var(--tx)}
.chip.on{background:var(--xuan);color:var(--jin-2);border-color:var(--xuan)}
body.night .chip.on{background:var(--jin);color:#151d24;border-color:var(--jin)}
.tag{display:inline-block;font-size:11.5px;letter-spacing:.08em;color:var(--qing);background:rgba(47,93,99,.1);
  border-radius:3px;padding:1px 7px;margin:0 4px 4px 0}
body.night .tag{color:#7fb0b5;background:rgba(127,176,181,.13)}
.badge{font-family:var(--kai);font-size:12px;color:#fff;background:var(--zhu);border-radius:3px;padding:1px 6px;letter-spacing:.1em}
.badge.gold{background:var(--jin);color:#221c14}

/* ── 标签页 ───────────────────────────────────────────── */
.tabs{display:flex;gap:4px;border-bottom:2px solid var(--bd);margin-bottom:18px;overflow:auto;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tabs button{padding:9px 16px;font-size:15px;letter-spacing:.09em;color:var(--tx-3);border-bottom:3px solid transparent;
  margin-bottom:-2px;white-space:nowrap;font-family:var(--kai)}
.tabs button.on{color:var(--zhu);border-color:var(--zhu)}
body.night .tabs button.on{color:var(--jin-2);border-color:var(--jin-2)}
.panelfade{animation:fadein .25s ease both}
@keyframes fadein{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ── 表单 ─────────────────────────────────────────────── */
.inp,select.inp{background:var(--bg-card);border:1px solid var(--bd);color:var(--tx);border-radius:8px;
  padding:9px 12px;font-size:15px;font-family:var(--serif);min-width:0}
.inp:focus{outline:none;border-color:var(--jin);box-shadow:0 0 0 3px rgba(176,138,55,.16)}
.inp-search{position:relative;flex:1 1 240px}
.inp-search .inp{width:100%;padding-left:34px}
.inp-search:before{content:"⌕";position:absolute;left:11px;top:4px;font-size:20px;color:var(--tx-3)}
.btn{display:inline-flex;align-items:center;gap:6px;background:var(--xuan);color:#f3ecdc;border-radius:8px;
  padding:9px 18px;font-size:14.5px;letter-spacing:.1em;border:1px solid var(--xuan)}
.btn:hover{background:var(--zhu);border-color:var(--zhu)}
.btn.ghost{background:transparent;color:var(--tx-2);border-color:var(--bd)}
.btn.ghost:hover{border-color:var(--jin);color:var(--tx);background:transparent}
.btn.gold{background:var(--jin);border-color:var(--jin);color:#221c14}
.btn.sm{padding:5px 12px;font-size:13px}

/* ── 阅读台 ───────────────────────────────────────────── */
.reader{display:grid;grid-template-columns:250px minmax(0,1fr);gap:22px;align-items:start}
.reader>*{min-width:0}
@media (max-width:960px){.reader{grid-template-columns:minmax(0,1fr)}}
.rail{position:sticky;top:72px;max-height:calc(100vh - 90px);overflow:auto;background:var(--bg-card);
  border:1px solid var(--bd);border-radius:var(--r);padding:12px}
@media (max-width:960px){.rail{position:static;max-height:none}}
.rail a{display:block;padding:6px 9px;border-radius:6px;font-size:13.5px;color:var(--tx-2);border-left:2px solid transparent;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rail a:hover{background:var(--bg-soft)}
.rail a.on{background:rgba(158,47,34,.1);color:var(--zhu);border-left-color:var(--zhu);font-weight:600}
body.night .rail a.on{color:var(--jin-2);background:rgba(201,162,77,.14);border-left-color:var(--jin-2)}
.book{background:var(--bg-card);border:1px solid var(--bd);border-radius:var(--r);padding:26px clamp(18px,4vw,44px);position:relative}
.book:before,.book:after{content:"";position:absolute;top:0;bottom:0;width:3px;background:linear-gradient(180deg,transparent,var(--zhu) 12%,var(--zhu) 88%,transparent);opacity:.35}
.book:before{left:9px}.book:after{right:9px}
@media (max-width:640px){.book:before,.book:after{display:none}}
.chap-h{font-family:var(--kai);font-size:clamp(21px,3.4vw,29px);letter-spacing:.14em;color:var(--xuan);
  border-bottom:1px solid var(--bd);padding-bottom:10px;margin-bottom:18px;display:flex;align-items:baseline;gap:12px}
body.night .chap-h{color:var(--jin-2)}
.chap-h .no{font-size:13px;color:var(--zhu);letter-spacing:.1em}
.p{font-size:calc(17px*var(--fs));line-height:2.15;margin:0 0 1.15em;text-indent:2em;letter-spacing:.02em}
.p .mk{background:rgba(216,180,90,.42);border-radius:2px;padding:0 1px;color:inherit}
.p .sent{cursor:pointer;border-radius:3px}
.p .sent:hover{background:rgba(158,47,34,.09)}
/* 精读：逐段对照 */
.jpara{border:1px solid var(--bd);border-radius:8px;margin:0 0 14px;overflow:hidden;background:var(--bg-card)}
.jpara>header{padding:12px 16px;font-size:calc(16.5px*var(--fs));line-height:1.95;background:
  linear-gradient(180deg,var(--bg-soft),transparent);border-bottom:1px solid var(--bd);position:relative}
.jpara>header .idx{position:absolute;left:-99em}
.jpara .seg{padding:11px 16px;border-top:1px dashed var(--bd);font-size:calc(15px*var(--fs));line-height:1.95}
.jpara .seg b{font-family:var(--kai);color:var(--zhu);font-weight:400;letter-spacing:.1em;margin-right:8px;font-size:13px}
body.night .jpara .seg b{color:var(--jin-2)}
.jpara .seg.trans{background:rgba(47,93,99,.05)}
.jpara .seg.note{color:var(--tx-2);font-size:calc(14px*var(--fs))}
.jpara .seg.mind{background:linear-gradient(90deg,rgba(176,138,55,.12),transparent)}
.fold>summary{cursor:pointer;list-style:none;padding:11px 16px;font-family:var(--kai);letter-spacing:.1em;color:var(--tx-2)}
.fold>summary::-webkit-details-marker{display:none}
.fold>summary:before{content:"▸ ";color:var(--jin)}
.fold[open]>summary:before{content:"▾ "}
.fold>summary:hover{color:var(--zhu)}

/* ── 名句 / 战例卡 ────────────────────────────────────── */
.quote{background:var(--bg-card);border:1px solid var(--bd);border-left:4px solid var(--zhu);border-radius:var(--r);padding:16px 18px}
.quote .q{font-family:var(--kai);font-size:calc(19px*var(--fs));line-height:1.85;letter-spacing:.05em;margin:0 0 8px;color:var(--xuan)}
body.night .quote .q{color:#f0e6cf}
.quote .src{font-size:12.5px;color:var(--tx-3);letter-spacing:.08em;margin-bottom:10px}
.quote .tr{font-size:14.5px;color:var(--tx-2);margin-bottom:8px}
.quote .rd{font-size:14px;color:var(--tx-2);border-top:1px dashed var(--bd);padding-top:8px}
.quote .apps li{font-size:13.5px;margin-bottom:4px;list-style:none}
.quote ul{padding-left:0;margin:0}
.fav-star{float:right;font-size:20px;line-height:1;color:var(--tx-3);cursor:pointer;padding:2px 4px}
.fav-star.on{color:var(--jin)}

/* ── 时间轴 ───────────────────────────────────────────── */
.tl{position:relative;padding-left:26px}
.tl:before{content:"";position:absolute;left:8px;top:6px;bottom:6px;width:2px;background:linear-gradient(180deg,var(--jin),var(--zhu),var(--qing))}
.tl .it{position:relative;margin-bottom:18px}
.tl .it:before{content:"";position:absolute;left:-22px;top:9px;width:10px;height:10px;border-radius:50%;
  background:var(--bg);border:2px solid var(--jin)}
.tl .it.hot:before{background:var(--zhu);border-color:var(--zhu)}
.tl .yr{font-family:var(--kai);color:var(--zhu);font-size:14px;letter-spacing:.1em}
body.night .tl .yr{color:var(--jin-2)}

/* ── 概念谱系 ─────────────────────────────────────────── */
.hex{display:grid;gap:10px}
.node{border:1px solid var(--bd);border-radius:8px;padding:10px 12px;background:var(--bg-card);cursor:pointer;transition:.16s}
.node:hover{border-color:var(--jin);transform:translateY(-2px)}
.node .nm{font-family:var(--kai);font-size:17px;letter-spacing:.1em;color:var(--xuan)}
body.night .node .nm{color:#f0e6cf}
.node .cat{float:right;font-size:11.5px;color:var(--tx-3)}
.wheel{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px}
.wheel .c{border:1px solid var(--bd);border-radius:50%;aspect-ratio:1;display:grid;place-items:center;text-align:center;
  padding:14px;background:radial-gradient(circle at 50% 30%,var(--bg-card),var(--bg-soft));cursor:pointer}
.wheel .c:hover{border-color:var(--jin)}
.wheel .c b{font-family:var(--kai);font-size:19px;font-weight:400;display:block;letter-spacing:.1em}
.wheel .c span{font-size:11.5px;color:var(--tx-3);display:block;margin-top:4px}

/* ── 抽屉 / 弹层 ──────────────────────────────────────── */
.scrim{position:fixed;inset:0;background:rgba(20,15,8,.5);z-index:80;opacity:0;pointer-events:none;transition:opacity .2s}
.scrim.on{opacity:1;pointer-events:auto}
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(560px,92vw);background:var(--bg-card);z-index:90;
  border-left:3px solid var(--jin);transform:translateX(101%);transition:transform .24s ease;overflow:auto;
  padding:20px 20px 60px;box-shadow:-14px 0 40px rgba(0,0,0,.2)}
.drawer.on{transform:none}
.drawer .x{position:sticky;top:0;float:right;font-size:22px;color:var(--tx-3);background:var(--bg-card);padding:0 6px}
.modal{position:fixed;inset:0;z-index:95;display:grid;place-items:center;padding:18px;pointer-events:none}
.modal .box{background:var(--bg-card);border:1px solid var(--jin);border-radius:var(--r);padding:20px;max-width:520px;
  width:100%;max-height:86vh;overflow:auto;pointer-events:auto;box-shadow:0 20px 60px rgba(0,0,0,.3);visibility:hidden}
.modal.on .box{visibility:visible}
.toast{position:fixed;left:50%;bottom:calc(var(--tab-h) + 24px);transform:translateX(-50%) translateY(20px);
  background:var(--xuan);color:#f3ecdc;padding:9px 18px;border-radius:22px;font-size:14px;letter-spacing:.08em;
  opacity:0;transition:.22s;z-index:120;pointer-events:none;border:1px solid var(--jin)}
.toast.on{opacity:1;transform:translateX(-50%)}
@media (min-width:861px){.toast{bottom:30px}}

/* ── 检索高亮 / 结果 ──────────────────────────────────── */
.hit{font-size:14.5px;border-bottom:1px dashed var(--bd);padding:8px 0}
.hit .from{color:var(--zhu);font-family:var(--kai);letter-spacing:.06em;margin-right:8px}
.hit .snip{color:var(--tx-2)}
.hit .snip em{font-style:normal;color:var(--zhu);background:rgba(216,180,90,.3);border-radius:2px}
body.night .hit .snip em,body.night .hit .from{color:var(--jin-2)}
.empty{color:var(--tx-3);text-align:center;padding:40px 10px;font-family:var(--kai);letter-spacing:.1em}

/* ── 沙盘 ─────────────────────────────────────────────── */
.sbx .q-card{border:1px solid var(--bd);border-radius:var(--r);padding:16px;background:var(--bg-card);margin-bottom:14px}
.sbx .opt{display:block;width:100%;text-align:left;border:1px solid var(--bd);border-radius:8px;padding:11px 13px;
  margin-bottom:9px;font-size:14.5px;background:var(--bg);transition:.16s}
.sbx .opt:hover{border-color:var(--jin)}
.sbx .opt.on{border-color:var(--zhu);background:rgba(158,47,34,.09)}
.sbx .opt .hint{display:block;font-size:12.5px;color:var(--tx-3);margin-top:3px}
.gauge{height:8px;border-radius:4px;background:var(--bg-soft);overflow:hidden;margin-top:4px}
.gauge i{display:block;height:100%;background:linear-gradient(90deg,var(--qing),var(--jin),var(--zhu));width:0;transition:width .3s}
.result-card{border:1px solid var(--jin);border-radius:var(--r);padding:18px;background:linear-gradient(180deg,rgba(176,138,55,.09),transparent);margin-bottom:14px}
.result-card h4{color:var(--zhu);font-size:18px;margin-bottom:8px}
body.night .result-card h4{color:var(--jin-2)}
ol.steps{padding-left:1.4em;margin:0}
ol.steps li{margin-bottom:6px;font-size:14.5px}

/* ── 阵图 SVG ─────────────────────────────────────────── */
.form{background:var(--bg-card);border:1px solid var(--bd);border-radius:var(--r);padding:14px;text-align:center}
.form svg{max-width:100%;height:auto;font-family:var(--kai)}
.form .legend{font-size:13px;color:var(--tx-3);margin-top:8px}
.form-grid{display:grid;grid-template-columns:repeat(var(--n,9),1fr);gap:6px;max-width:520px;margin:0 auto}
.form-grid .fu{aspect-ratio:1;border:1.5px solid var(--bd);border-radius:5px;display:grid;place-items:center;
  font-family:var(--kai);font-size:13px;background:var(--bg);cursor:pointer;transition:.14s}
.form-grid .fu.pos{border-color:var(--qing);color:var(--qing);background:rgba(47,93,99,.08)}
.form-grid .fu.odd{border-color:var(--zhu);color:var(--zhu);background:rgba(158,47,34,.09)}
.form-grid .fu.hold{border-color:var(--jin);color:var(--jin);background:rgba(176,138,55,.13);box-shadow:0 0 0 2px rgba(176,138,55,.2)}
.form-grid .fu:hover{transform:scale(1.06)}

/* ── 工具条 / 页脚 ────────────────────────────────────── */
.bar{display:flex;gap:9px;align-items:center;flex-wrap:wrap;background:var(--bg-card);border:1px solid var(--bd);
  border-radius:var(--r);padding:12px 14px;margin-bottom:20px}
.foot{border-top:2px solid var(--jin);margin-top:40px;padding:26px 18px 40px;color:var(--tx-3);font-size:13px;
  background:linear-gradient(180deg,transparent,var(--bg-soft))}
.foot .in{max-width:1180px;margin:0 auto;display:flex;gap:20px;flex-wrap:wrap;justify-content:space-between}
.pager{display:flex;gap:10px;justify-content:space-between;align-items:center;margin-top:20px}
.kbd{font-family:var(--sans);font-size:11.5px;border:1px solid var(--bd);border-radius:4px;padding:1px 5px;color:var(--tx-3)}
.small{font-size:12.5px;color:var(--tx-3)}
.hr-dot{border:none;text-align:center;margin:26px 0}
.hr-dot:before{content:"◆ ◆ ◆";color:var(--jin);font-size:10px;letter-spacing:1.2em}
.divider{height:1px;background:var(--bd);margin:18px 0}

/* 进场（IO 驱动；静态模式直接可见） */
.rv{opacity:0;transform:translateY(14px);transition:opacity .5s ease,transform .5s ease}
.rv.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;transition:none}}

/* 打印 / 导出 */
@media print{
  .top,.tabbar,.bar,.foot,.rail,.scrim,.drawer,.modal,.toast{display:none !important}
  body{background:#fff;color:#000}
  .book{border:none;padding:0}
}
