/* ==========================================================
   卡修世界 — 设计系统 v3「全息卡修」（ui-director v3）
   一句话：界面和全息卡是同一种材料——深空卡底 + 发丝金属边 + 蚀刻能量回路。
   · 卡与卡包是画面里最亮的东西；界面永远比卡暗一档
   · 能量青 = 能按 / 在充能；每屏只有一个实心青色主按钮
   · 彩虹镭射（粉/金/薄荷/天蓝/紫，硬分段）只出现在卡边、卡包封口、传说揭晓
   · 仪器感细节（角标刻线、刻度、等宽数字）代替发光与毛玻璃
   旧类名 / 旧变量全部保留并映射：.glass .paper .btn .btn-gold .btn-cyan .btn-ghost .chip .icon-btn .badge .r-N…r-UR
   说明见 docs/UI-v3.md
   ========================================================== */
/* ---- 自托管字体（stability）：大陆访问不了 fonts.googleapis.com，所以三个字体都做成 woff2 子集放在 assets/fonts/（tools/fonts/build_fonts.py 生成，
   Google Fonts 官方 GitHub 取源，SIL OFL 1.1）。font-display: swap = 字体到之前先用后备字体（PingFang SC 等系统字体）显示文字，绝不阻塞首屏；
   子集没收录的字自动回落到字体栈里的系统字体。 ---- */
/* FONTS:BEGIN（tools/fonts/build_fonts.py 生成，勿手改） */
@font-face { font-family: "Noto Sans SC"; font-style: normal; font-weight: 400 900; font-display: swap;
  src: url("../../assets/fonts/NotoSansSC-subset.woff2") format("woff2"); }
@font-face { font-family: "ZCOOL QingKe HuangYou"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../../assets/fonts/ZCOOLQingKeHuangYou-subset.woff2") format("woff2"); }
@font-face { font-family: "Chakra Petch"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("data:font/woff2;base64,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") format("woff2"); }
@font-face { font-family: "Chakra Petch"; font-style: normal; font-weight: 600; font-display: swap;
  src: url("data:font/woff2;base64,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") format("woff2"); }
@font-face { font-family: "Chakra Petch"; font-style: normal; font-weight: 700; font-display: swap;
  src: url("data:font/woff2;base64,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") format("woff2"); }
/* FONTS:END */

:root {
  /* ---- 深空卡底（v3 主色板） ---- */
  --space-0: #03060d;     /* 最深：投影 / 厚度影 / 遮罩 */
  --space-1: #070d1b;     /* 应用底：深空墨蓝 */
  --space-2: #0d1730;     /* 卡底面板 */
  --space-3: #152244;     /* 抬起的面板 / 次按钮 */
  --space-4: #1b2b52;     /* 按下 / 选中槽 */
  --line: #24365c;        /* 发丝线（1px） */
  --line-hi: #4a6599;     /* 亮发丝线 / 角标刻线 */
  --line-faint: rgba(122,160,230,.14);
  --energy: #5fe1ff;      /* 能量青：交互主色（主按钮 / 进度 / 选中 / 聚焦） */
  --energy-hi: #c2f5ff;
  --energy-lo: #1d7f9c;
  --energy-ink: #03161f;  /* 青底上的字 */
  --signal: #ff5d73;      /* 信号：角标 / NEW / 提醒（只做小面积） */
  --signal-ink: #1a0309;
  --star: #e9f1ff;        /* 星白：正文 */

  /* 稀有度（只用于卡与稀有时刻） */
  --r-N: #9aa3b2;
  --r-R: #4aa8ff;
  --r-SR: #b36bff;
  --r-SSR: #ffcf5a;
  --r-UR: #ff8fb8;
  /* 彩虹镭射：五段硬分段（不是柔和渐变）——这是 v3 的签名 */
  --foil-1: #ff8fb8; --foil-2: #ffd27a; --foil-3: #7cf0c4; --foil-4: #7cc8ff; --foil-5: #b79bff;
  --foil: linear-gradient(135deg, var(--foil-1) 0 20%, var(--foil-2) 20% 40%, var(--foil-3) 40% 60%, var(--foil-4) 60% 80%, var(--foil-5) 80% 100%);
  --foil-h: linear-gradient(90deg, var(--foil-1) 0 20%, var(--foil-2) 20% 40%, var(--foil-3) 40% 60%, var(--foil-4) 60% 80%, var(--foil-5) 80% 100%);
  --r-UR-grad: var(--foil);

  /* 文字（对 --space-2 的对比度：15.6 / 9.0 / 6.4） */
  --text: #e9f1ff;
  --text-2: #a9b9d8;
  --text-3: #8a9cc0;
  --danger: #ff6b6b;
  --ok: #5fe3a1;

  /* ---- 兼容 v1/v2 变量：映射到 v3，其他模块不改代码也会换肤 ---- */
  --night: var(--space-1); --night-2: var(--space-2); --night-3: var(--space-3);
  --ink: var(--space-0); --ink-2: var(--text-2);
  --wood-0: var(--space-0); --wood-1: var(--space-1); --wood-2: var(--space-2); --wood-3: var(--space-3);
  --cyan: var(--energy); --cyan-dim: var(--energy-lo);
  /* 黄铜 → 能量青（交互）/ 星白（标题字）。--brass-hi 多被用作标题色，所以给近白的冰蓝，不给青色，避免满屏发青 */
  --brass: var(--energy); --brass-hi: #dcefff; --brass-lo: var(--energy-lo);
  --gold: var(--energy); --gold-hi: #dcefff; --gold-dim: var(--energy-lo);
  --copper: #5b7bb8;      /* 铜回路 → 钢蓝回路 */
  --cinnabar: var(--signal); --cinnabar-hi: #ff8394;
  /* 卡纸 → 抬起的卡底；纸上的墨 → 星白（成对使用的地方自动变成深底浅字） */
  --paper: var(--space-3); --paper-2: var(--space-2); --paper-ink: var(--text); --paper-ink-2: var(--text-2);
  --glass-bg: rgba(13, 23, 48, .96);
  --glass-bg-strong: rgba(9, 16, 34, .98);
  --glass-line: var(--line-hi);
  --glass-line-cyan: var(--line);
  --blur: 0px;

  /* ---- 程序化纹理 ---- */
  /* 星尘：稀疏、低对比（应用底） */
  --tex-stars: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cg fill='%23cfe2ff'%3E%3Ccircle cx='17' cy='31' r='.7' opacity='.5'/%3E%3Ccircle cx='71' cy='12' r='.5' opacity='.35'/%3E%3Ccircle cx='133' cy='47' r='.9' opacity='.45'/%3E%3Ccircle cx='201' cy='22' r='.6' opacity='.3'/%3E%3Ccircle cx='226' cy='97' r='.7' opacity='.4'/%3E%3Ccircle cx='158' cy='121' r='.5' opacity='.3'/%3E%3Ccircle cx='96' cy='88' r='.6' opacity='.35'/%3E%3Ccircle cx='38' cy='139' r='.8' opacity='.4'/%3E%3Ccircle cx='112' cy='177' r='.6' opacity='.3'/%3E%3Ccircle cx='188' cy='191' r='.9' opacity='.45'/%3E%3Ccircle cx='63' cy='214' r='.5' opacity='.3'/%3E%3Ccircle cx='9' cy='226' r='.6' opacity='.35'/%3E%3C/g%3E%3Ccircle cx='133' cy='47' r='.8' fill='%237cf0ff' opacity='.5'/%3E%3Ccircle cx='38' cy='139' r='.6' fill='%237cf0ff' opacity='.45'/%3E%3C/svg%3E");
  /* 蚀刻能量回路：和卡框上的回路同一笔法（钢蓝，极淡） */
  --tex-circuit: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160' fill='none' stroke='%235b7bb8' stroke-width='1' stroke-opacity='.10'%3E%3Cpath d='M0 40h46l14 14v36l12 12h88M30 160v-34l16-16h30M100 0v22l-18 18H60M160 70h-32l-14-14V30M120 160v-28l10-10h30'/%3E%3Ccircle cx='60' cy='54' r='2.5'/%3E%3Ccircle cx='76' cy='110' r='2.5'/%3E%3Ccircle cx='114' cy='56' r='2'/%3E%3Ccircle cx='130' cy='122' r='2'/%3E%3C/svg%3E");
  /* 网格：32px，极淡（仪器坐标纸） */
  --tex-grid: linear-gradient(rgba(122,160,230,.035) 1px, transparent 1px), linear-gradient(90deg, rgba(122,160,230,.035) 1px, transparent 1px);
  /* 旧材质纹理：v3 不要木纹 / 皮革颗粒 / 纸纤维 / 拉丝 → 透明层（保持语法有效） */
  --tex-none: linear-gradient(transparent, transparent);
  --tex-grain: var(--tex-none);
  --tex-wood: var(--tex-none);
  --tex-paper: var(--tex-none);
  --tex-brushed: var(--tex-none);
  /* 仪器角标：四角 8px 的 L 形刻线（面板、目标卡、弹层共用） */
  --tick-c: #3d5687;
  --ticks:
    linear-gradient(var(--tick-c), var(--tick-c)) left 6px top 6px / 8px 1px no-repeat,
    linear-gradient(var(--tick-c), var(--tick-c)) left 6px top 6px / 1px 8px no-repeat,
    linear-gradient(var(--tick-c), var(--tick-c)) right 6px top 6px / 8px 1px no-repeat,
    linear-gradient(var(--tick-c), var(--tick-c)) right 6px top 6px / 1px 8px no-repeat,
    linear-gradient(var(--tick-c), var(--tick-c)) left 6px bottom 6px / 8px 1px no-repeat,
    linear-gradient(var(--tick-c), var(--tick-c)) left 6px bottom 6px / 1px 8px no-repeat,
    linear-gradient(var(--tick-c), var(--tick-c)) right 6px bottom 6px / 8px 1px no-repeat,
    linear-gradient(var(--tick-c), var(--tick-c)) right 6px bottom 6px / 1px 8px no-repeat;

  /* 尺寸：按层级给圆角（克制） */
  --radius: 12px;        /* 面板 */
  --radius-sm: 10px;     /* 按钮 */
  --radius-card: 9px;    /* 卡 */
  --radius-tag: 4px;     /* 标签 / 角标 */
  --safe-t: env(safe-area-inset-top, 0px);
  --safe-b: env(safe-area-inset-bottom, 0px);
  --safe-l: env(safe-area-inset-left, 0px);
  --safe-r: env(safe-area-inset-right, 0px);
  --nav-h: 62px;
  --nav-space: 0px;            /* 导航显示时由 app.js 设为 nav 高度+安全区 */

  /* 字体：三个家族——显示（青柯黄油：方折、像蚀刻电路的笔画）/ 正文（思源黑体）/ 数字与英文（Chakra Petch） */
  --font: "Noto Sans SC", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif;
  --font-title: "Noto Sans SC", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif;  /* 结构字：卡名 / 词条（用字重区分） */
  --font-display: "ZCOOL QingKe HuangYou", "Noto Sans SC", "PingFang SC", sans-serif;                        /* 品牌 / 屏标题 / 章节 / 横幅：每屏最多 1 处 */
  --font-brush: var(--font-display);                                                                            /* 旧名：v2 的毛笔位置全部换成显示字 */
  --font-num: "Chakra Petch", "Noto Sans SC", "PingFang SC", system-ui, sans-serif;                            /* 数字 / N R SR SSR UR / 计数 */

  /* v3.1 字阶：6 级（每屏最多 3 级 + 1 处显示字）。12px 只给角标 / 读数标签 */
  --fs-d1: 40px;     /* D1 显示大：章节卡、开包结果、胜利、横屏遮罩（矮屏 32） */
  --fs-d2: 26px;     /* D2 显示中：屏标题、主城品牌、地图章名（22–28） */
  --fs-t: 17px;      /* T 标题：卡名、目标句、面板标题 */
  --fs-b: 15px;      /* B 正文：说明、对话 */
  --fs-c: 13px;      /* C 注释：眉题、次要说明、按钮小字 */
  --fs-tag: 12px;    /* 角标 / 读数标签（只限 Chakra 数字或 ≤4 字） */
  --fs-n-l: 22px; --fs-n-m: 16px; --fs-n-s: 13px;   /* N 数字（Chakra，等宽）：大 / 中 / 小 */
  --fs-btn: var(--fs-n-m);                           /* 按钮字 = N 中号（16，与读数同高）；L1 主按钮可用 --fs-t */
  --ls-cn: .04em;    /* 中文正文 / 按钮 / 标签字距上限 */
  --ls-disp: .06em;  /* 显示字字距（最多 .08em） */
  /* 旧字号阶（v3）：保留为别名 */
  --fs-xs: var(--fs-tag); --fs-sm: var(--fs-c); --fs-body: var(--fs-b); --fs-lg: var(--fs-t); --fs-xl: var(--fs-n-l); --fs-2xl: 28px;

  /* 动效 */
  --ease-out: cubic-bezier(.2, .8, .2, 1);
  --ease-spring: cubic-bezier(.34, 1.56, .64, 1); /* 只给卡（扇卡、揭晓）；界面不用回弹 */
  --ease-paper: cubic-bezier(.2, .9, .25, 1);    /* 旧名：v3 是“扫描显现”，不再回弹 */
  --ease-scan: cubic-bezier(.6, 0, .2, 1);
  --ease-count: cubic-bezier(.2, .7, .1, 1);      /* 数值滚动 */
  --press: 2px;                                   /* 按压下沉距离 */
  /* v3.1 动效时长：界面快、卡慢 */
  --dur-press: 80ms;     /* 按压下沉 */
  --dur-fast: 160ms;     /* 开关、选中、颜色变化 */
  --dur-base: 240ms;     /* 弹层进出、toast、提示条扫描显现 */
  --dur-screen: 320ms;   /* 切屏扫描 */
  --dur-count: 400ms;    /* 数值滚动 */
  --dur-slow: 480ms;     /* 奖励飞入读数签（= --dur-fly） */
  --dur-fly: var(--dur-slow);
  --dur-reveal: 640ms;   /* 节点解锁、章节牌、目标物换场 */
  --dur-breath: 2400ms;  /* 唯一的自发动效：目标物 / 目标节点呼吸 */

  /* v3.1 层级与避让 */
  --z-hud: 40; --z-talk: 60; --z-tut: 70; --z-toast: 80; --z-sheet: 85;
  --hud-main: 72px;                                    /* 底部主键区高度（hub / map 挂载后按实测写入） */
  --hud-b: calc(var(--nav-space) + var(--hud-main));   /* 底部 HUD 占用：导航 + 主键区（地图镜头、对话条避让用） */
  --talk-h: 0px;                                       /* 对话条出现时写入实际高度 */
  /* 读数签（资源、进度） */
  --chip-h: 32px;
  --chip-num: 600 16px/1 var(--font-num);
  /* 状态 */
  --locked-alpha: .35;   /* 锁定：降透明度并去色，不显示名牌 */
  --done-sat: .45;       /* 已完成：降饱和 */

  /* 投影：硬接触影 + 短软影（深空里没有暖色阴影） */
  --shadow-plate: 0 1px 0 rgba(3,6,13,.9), 0 14px 24px -16px rgba(0,0,0,.9);
  --shadow-paper: 0 1px 0 var(--space-0), 0 12px 22px -12px rgba(0,0,0,.85);
}

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html, body {
  margin: 0; height: 100%; overflow: hidden;
  background: var(--space-1); color: var(--text);
  font-family: var(--font); font-size: var(--fs-b); line-height: 1.5;
  -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: 100%;
  overscroll-behavior: none; touch-action: manipulation;
  user-select: none; -webkit-user-select: none; -webkit-touch-callout: none;
  font-variant-numeric: tabular-nums;
}
button { font: inherit; color: inherit; }
img { -webkit-user-drag: none; }
h1, h2, h3 { margin: 0; font-weight: 800; }
p { margin: 0; }
[hidden] { display: none !important; }
:focus-visible { outline: 2px solid var(--energy); outline-offset: 2px; }
.num { font-family: var(--font-num); font-variant-numeric: tabular-nums; letter-spacing: .02em; }

/* ---------- App 骨架：深空 ---------- */
#app { position: fixed; inset: 0; overflow: hidden;
  background:
    radial-gradient(120% 60% at 50% -10%, rgba(74,120,200,.12), transparent 60%),
    radial-gradient(140% 80% at 50% 115%, rgba(0,0,0,.55), transparent 60%),
    var(--tex-stars), var(--tex-grid),
    linear-gradient(180deg, #0a1326 0%, var(--space-1) 55%, #050a15 100%);
  background-size: auto, auto, 240px 240px, 32px 32px, 32px 32px, auto; }
#screens { position: absolute; left: 0; right: 0; top: 0; bottom: var(--nav-space); transition: bottom var(--dur-base) var(--ease-out); }
.screen {
  position: absolute; inset: 0; overflow: hidden;
  display: flex; flex-direction: column;
  padding-left: var(--safe-l); padding-right: var(--safe-r);
  isolation: isolate;
}
.screen.scroll { overflow-y: auto; -webkit-overflow-scrolling: touch; }

/* 共享全息画布宿主（由 app.js 移入当前屏） */
.holo-host { position: absolute; inset: 0; z-index: 0; pointer-events: none; opacity: 0; transition: opacity var(--dur-base) ease; }
.holo-host.active { pointer-events: auto; opacity: 1; }
.holo-host > canvas { display: block; width: 100%; height: 100%; }

/* ---------- 转场：一道扫描线从下往上掠过，新屏逐行显现 ---------- */
.screen.enter { animation: scr-in var(--dur-screen) var(--ease-out) both; }
.screen.leave { animation: scr-out var(--dur-base) ease both; pointer-events: none; }
/* 结束帧回到 none：translate / clip-path 不残留（否则会给屏内 position:fixed 的弹层建立包含块、或把它们裁掉） */
@keyframes scr-in { from { opacity: 0; translate: 0 6px; clip-path: inset(0 0 22% 0); } 99% { opacity: 1; translate: 0 0; clip-path: inset(0 0 0 0); } to { opacity: 1; translate: none; clip-path: none; } }
@keyframes scr-out { to { opacity: 0; } }
.sweep { position: fixed; inset: 0; z-index: 60; pointer-events: none; overflow: hidden; visibility: hidden; }
.sweep::before {
  content: ""; position: absolute; left: 0; right: 0; height: 30%; top: 100%;
  background: linear-gradient(180deg, transparent 0%, rgba(95,225,255,.05) 60%, rgba(95,225,255,.16) 97%, rgba(194,245,255,.9) 99%, transparent 100%);
}
.sweep.run { visibility: visible; }
.sweep.run::before { animation: sweep-line var(--dur-screen) var(--ease-scan) both; }
@keyframes sweep-line { from { top: 100%; } to { top: -32%; } }

/* ---------- 面板：深空卡底 + 发丝线 + 仪器角标（旧名 .glass） ---------- */
.glass {
  background: var(--ticks), var(--space-2);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  box-shadow: inset 0 1px 0 rgba(170,205,255,.05), var(--shadow-plate);
}
.glass.gold { border-color: var(--line-hi); }
.glass.strong { background: var(--ticks), #0a132a; }
.ticks { background-image: var(--ticks); }
/* v2 的铆钉角 → 仪器角标（同一套刻线） */
.plate-rivets { position: relative; }
.plate-rivets::before { content: ""; position: absolute; inset: 0; pointer-events: none; border-radius: inherit; background: var(--ticks); }

/* v2 的卡纸片 → 抬起的卡底（目标、提示、术语、toast 共用） */
.paper {
  color: var(--text);
  background: var(--ticks), var(--space-3);
  border: 1px solid var(--line-hi);
  border-radius: 10px;
  box-shadow: var(--shadow-paper);
}

/* ---------- 按钮 ----------
   形状呼应卡框：外边 + 3px 内发丝线（卡面的“双线框”）。按压用独立 translate，不覆盖元素自身 transform */
.btn {
  position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 48px; padding: 0 20px; border-radius: var(--radius-sm); cursor: pointer;
  border: 1px solid var(--line-hi); color: var(--text);
  background: var(--space-3);
  box-shadow: 0 var(--press) 0 var(--space-0), inset 0 1px 0 rgba(170,205,255,.08);
  font-size: var(--fs-btn); font-weight: 700; letter-spacing: var(--ls-cn);
  transition: translate var(--dur-press) ease-out, box-shadow var(--dur-press) ease-out, background-color var(--dur-fast), border-color var(--dur-fast);
}
.btn::after { content: ""; position: absolute; inset: 3px; border-radius: 7px; pointer-events: none; border: 1px solid rgba(150,190,255,.10); }
.btn:active, .press:active, .btn.pressed { translate: 0 var(--press); box-shadow: 0 0 0 var(--space-0), inset 0 1px 0 rgba(170,205,255,.05); background-color: var(--space-4); }
.btn[disabled] { opacity: .45; pointer-events: none; }
.btn svg { flex: none; }
/* 主按钮：实心能量青（每屏只有一个）。不加外发光；“亮”来自色块本身 */
.btn-gold {
  color: var(--energy-ink); border-color: #0b4a5e;
  background: linear-gradient(180deg, #8beeff 0%, #5fe1ff 46%, #46d3f4 100%);
  text-shadow: none;
  box-shadow: 0 var(--press) 0 #0a4f64, inset 0 1px 0 rgba(255,255,255,.7), inset 0 -1px 0 rgba(0,70,90,.3);
}
.btn-gold::after { border-color: rgba(3,22,31,.22); }
.btn-gold:active, .btn-gold.pressed { background: linear-gradient(180deg, #6fe6ff, #3fcdf0); box-shadow: 0 0 0 #0a4f64, inset 0 1px 0 rgba(255,255,255,.5), inset 0 2px 5px rgba(0,60,80,.3); }
/* 能量描边按钮（少用）：青线 + 青字 */
.btn-cyan { color: var(--energy-hi); border-color: rgba(95,225,255,.6); background: rgba(95,225,255,.06); box-shadow: 0 var(--press) 0 var(--space-0); }
.btn-cyan::after { border-color: rgba(95,225,255,.16); }
.btn-cyan:active { box-shadow: 0 0 0 var(--space-0); background: rgba(95,225,255,.12); }
/* 次要：透明底 + 发丝线 */
.btn-ghost { background: rgba(7,13,27,.55); border-color: var(--line-hi); box-shadow: 0 var(--press) 0 rgba(3,6,13,.7); color: var(--text); }
.btn-ghost::after { display: none; }
.btn-ghost:active { box-shadow: 0 0 0 rgba(0,0,0,.45); background: rgba(27,43,82,.7); }
.btn-sm { min-height: 40px; padding: 0 14px; font-size: var(--fs-c); border-radius: 8px; --press: 2px; }
.btn-sm::after { border-radius: 5px; }
.btn-block { display: flex; width: 100%; }

/* 图标按钮：仪器按键（圆角方形，与按钮同圆角） */
.icon-btn {
  width: 44px; height: 44px; border-radius: var(--radius-sm); display: inline-grid; place-items: center; cursor: pointer; padding: 0;
  background: rgba(13,23,48,.86); border: 1px solid var(--line-hi); color: var(--text);
  box-shadow: 0 2px 0 var(--space-0), inset 0 1px 0 rgba(170,205,255,.08);
  transition: translate var(--dur-press) ease-out, box-shadow var(--dur-press), color var(--dur-fast);
}
.icon-btn:active { translate: 0 2px; box-shadow: 0 0 0 var(--space-0); color: var(--energy); }
.icon-btn svg { width: 22px; height: 22px; }

/* 标签：发丝线小签 */
.chip {
  display: inline-flex; align-items: center; gap: 4px; min-height: 40px; padding: 0 14px;
  border-radius: 8px; border: 1px solid var(--line); background: rgba(13,23,48,.8);
  color: var(--text-2); font-size: var(--fs-c); font-weight: 600; cursor: pointer; white-space: nowrap;
  transition: translate var(--dur-press), background var(--dur-fast), color var(--dur-fast), border-color var(--dur-fast);
}
.chip:active { translate: 0 1px; }
/* 选中 = 青色细边 + 底部 2px 指示线（和导航、tab 一致）；实心青只留给主操作 */
.chip.on { color: var(--energy-hi); background: rgba(95,225,255,.07); border-color: rgba(95,225,255,.55); box-shadow: inset 0 -2px 0 var(--energy); }

/* 角标：信号色小方签（数字用 Chakra Petch） */
.badge { display: inline-block; min-width: 20px; padding: 0 5px; height: 20px; line-height: 20px; border-radius: var(--radius-tag);
  font: 700 var(--fs-tag)/20px var(--font-num); text-align: center; color: var(--signal-ink);
  background: var(--signal); box-shadow: 0 0 0 2px var(--space-1); }
.badge[hidden] { display: none !important; }

/* 稀有度工具类 */
.r-N { --rc: var(--r-N); } .r-R { --rc: var(--r-R); } .r-SR { --rc: var(--r-SR); }
.r-SSR { --rc: var(--r-SSR); } .r-UR { --rc: var(--r-UR); }
.rtag { display: inline-block; padding: 0 7px; border-radius: var(--radius-tag); font: 700 var(--fs-tag)/20px var(--font-num); letter-spacing: .06em;
  color: #070d1b; background: var(--rc, var(--r-N)); box-shadow: inset 0 1px 0 rgba(255,255,255,.35); }
/* UR 标签：五段硬分段镭射，静止（动效留给卡本身） */
.r-UR .rtag, .rtag.r-UR { background: var(--foil-h); }

/* ---------- 共鸣卡（两张同名卡合成）：双层镭射描边 + 「共鸣」角标 ----------
   用法：给卡的根元素加 .is-resonance（元素需 position 非 static；battle 的 .bt-card 已是 absolute）。
   ::before = 外环 + 角标，::after = 内环；两环都是五段硬分段镭射。可用 --reso-r 指定卡的圆角。
   只占用 .is-resonance 自身的两个伪元素，不碰子元素。 */
.is-resonance { --reso-r: var(--radius-card); }
.is-resonance::before, .is-resonance::after {
  content: ""; position: absolute; pointer-events: none; z-index: 6;
  border: 1.5px solid transparent;
  background: var(--foil) border-box;
  -webkit-mask: linear-gradient(#000 0 0) padding-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) padding-box exclude, linear-gradient(#000 0 0);
}
.is-resonance::after { inset: -3px; border-radius: calc(var(--reso-r) + 3px); }
.is-resonance::before {
  inset: -7px; border-radius: calc(var(--reso-r) + 7px);
  /* 角标「共鸣」：深空底 + 薄荷描边，12px 字；用 mask 的额外一层把它留出来 */
  background:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='38' height='18'%3E%3Crect width='38' height='18' rx='4' fill='%23070d1b'/%3E%3Crect x='.75' y='.75' width='36.5' height='16.5' rx='3.4' fill='none' stroke='%237cf0c4' stroke-width='1.5'/%3E%3Ctext x='19' y='13.2' text-anchor='middle' font-family='Noto Sans SC,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif' font-size='12' font-weight='700' fill='%23e9f1ff'%3E%E5%85%B1%E9%B8%A3%3C/text%3E%3C/svg%3E") right 6px top 0 / 38px 18px no-repeat border-box,
    var(--foil) border-box;
  -webkit-mask:
    linear-gradient(#000 0 0) right 6px top 0 / 38px 18px no-repeat border-box,
    linear-gradient(#000 0 0) padding-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: source-over, xor;
  mask:
    linear-gradient(#000 0 0) right 6px top 0 / 38px 18px no-repeat border-box add,
    linear-gradient(#000 0 0) padding-box exclude, linear-gradient(#000 0 0);
}
/* 需要真实 DOM 角标时（可读屏）：<span class="reso-chip">共鸣</span> */
.reso-chip { display: inline-block; height: 20px; padding: 0 6px; border-radius: var(--radius-tag); font: 700 var(--fs-tag)/18px var(--font); color: var(--text);
  background: var(--space-1); border: 1px solid var(--foil-3); white-space: nowrap; }

/* ---------- 底部导航：深空底栏 + 发丝线；选中项顶部亮一条青色指示线 ---------- */
.nav {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 40;
  height: calc(var(--nav-h) + var(--safe-b)); padding: 0 calc(6px + var(--safe-r)) var(--safe-b) calc(6px + var(--safe-l));
  display: grid; grid-template-columns: repeat(5, 1fr); align-items: stretch;
  background: rgba(5,10,21,.97);
  border-top: 1px solid var(--line);
  box-shadow: 0 -12px 24px -12px rgba(0,0,0,.7);
  transform: translateY(0); transition: transform var(--dur-base) var(--ease-out);
}
.nav::before { content: ""; position: absolute; left: 0; right: 0; top: -1px; height: 1px; pointer-events: none;
  background: linear-gradient(90deg, transparent, rgba(95,225,255,.18) 50%, transparent); }
.nav.hidden { transform: translateY(110%); }
.nav-item {
  position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
  background: none; border: 0; cursor: pointer; color: var(--text-3); font-size: var(--fs-tag); font-weight: 700; min-width: 0;
  transition: color var(--dur-fast), translate var(--dur-press);
}
.nav-item:active { translate: 0 2px; }
.nav-item svg { width: 24px; height: 24px; }
.nav-item span { font-size: var(--fs-c); letter-spacing: var(--ls-cn); }
.nav-item.on { color: var(--text); }
.nav-item.on svg { color: var(--energy); }
/* v3.1：选中态只留顶部 2px 青线 + 青色图标（去掉淡青内框槽） */
.nav-item.on::after { content: ""; position: absolute; top: 0; width: 22px; height: 2px; border-radius: 0 0 2px 2px; background: var(--energy); }
.nav-item .badge { position: absolute; top: 5px; left: calc(50% + 8px); }
.nav-item.primary svg { color: var(--text-2); }
.nav-item.on.primary svg { color: var(--energy); }

/* ---------- Toast：一条扫描显现的读数条 ---------- */
.toasts { position: fixed; left: 0; right: 0; top: calc(var(--safe-t) + 64px); z-index: 80; display: flex; flex-direction: column; align-items: center; gap: 8px; pointer-events: none; }
.toasts.at-bottom { top: auto; bottom: var(--toast-b, calc(var(--safe-b) + var(--nav-space) + 96px)); flex-direction: column-reverse; }
.toast {
  position: relative; max-width: min(86vw, 360px); padding: 10px 18px 10px 20px; font-size: var(--fs-b); font-weight: 600; text-align: center;
  color: var(--text); background: var(--space-3); border: 1px solid var(--line-hi); border-radius: 10px;
  box-shadow: var(--shadow-paper);
  animation: toast-in var(--dur-base) var(--ease-scan) both;
}
.toast::before { content: ""; position: absolute; left: 7px; top: 10px; bottom: 10px; width: 2px; border-radius: 1px; background: var(--energy); }
.toast.out { animation: toast-out var(--dur-fast) ease both; }
@keyframes toast-in { from { opacity: 0; clip-path: inset(0 0 100% 0); } to { opacity: 1; clip-path: inset(0 0 0 0); } }
@keyframes toast-out { to { opacity: 0; translate: 0 -4px; } }

/* ---------- 加载画面 ---------- */
.boot-sigil { animation: sigil 2.6s ease-in-out infinite; }
@keyframes sigil { 50% { opacity: .7; } }
.boot-title { position: relative; text-align: center; }
.boot-title h1 { font-family: var(--font-display); font-size: 64px; line-height: 1; font-weight: 400; letter-spacing: .08em; margin-right: -.08em;
  color: var(--star); text-shadow: 0 2px 0 var(--space-0); }
.boot-title p { margin-top: 10px; font: 600 var(--fs-c)/1.2 var(--font-num); letter-spacing: .32em; margin-right: -.32em; color: var(--text-3); }
.boot-bar { position: relative; width: min(64vw, 260px); height: 3px; border-radius: 2px; background: rgba(95,225,255,.12); overflow: visible; }
.boot-bar::after { content: ""; position: absolute; left: 0; right: 0; top: 7px; height: 4px;
  background: repeating-linear-gradient(90deg, var(--line-hi) 0 1px, transparent 1px 10%); opacity: .8; }
.boot-bar i { position: absolute; left: 0; top: 0; bottom: 0; width: 0%; border-radius: 2px;
  background: var(--energy); transition: width var(--dur-base) var(--ease-out); }
.boot-tip { font-size: var(--fs-c); color: var(--text-2); min-height: 21px; }

/* ---------- 建设中占位 ---------- */
.wip { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 18px; padding: 24px; text-align: center; }
.wip-icon { width: 96px; height: 96px; border-radius: var(--radius-card); display: grid; place-items: center; font-size: 44px;
  border: 1px dashed var(--line-hi); background: rgba(95,225,255,.04); }
.wip-icon svg { width: 44px; height: 44px; color: var(--text-2); }
.wip h2 { font-family: var(--font-display); font-weight: 400; font-size: var(--fs-d2); color: var(--text); letter-spacing: var(--ls-disp); }
.wip p { color: var(--text-2); font-size: var(--fs-b); max-width: 280px; }

/* ---------- 新手引导 ---------- */
.tut { position: fixed; inset: 0; z-index: 70; }
.tut-mask { position: absolute; inset: 0; pointer-events: auto; }
.tut-ring { position: absolute; border-radius: 12px; pointer-events: none;
  box-shadow: 0 0 0 9999px rgba(3,6,13,.72), 0 0 0 2px var(--energy);
  transition: all var(--dur-base) var(--ease-out); animation: ring-pulse 1.8s ease-in-out infinite; }
@keyframes ring-pulse { 50% { box-shadow: 0 0 0 9999px rgba(3,6,13,.72), 0 0 0 4px rgba(95,225,255,.55); } }
.tut-bubble { position: absolute; left: 16px; right: 16px; padding: 16px 16px 12px; z-index: 2;
  animation: toast-in var(--dur-base) var(--ease-scan) both; }
.tut-bubble .who { display: flex; align-items: center; gap: 8px; color: var(--energy-hi); font-weight: 800; font-size: var(--fs-c); margin-bottom: 6px; }
.tut-bubble .txt { font-size: var(--fs-b); line-height: 1.6; color: var(--text); }
.tut-bubble .row { display: flex; justify-content: space-between; align-items: center; margin-top: 12px; }
.tut-bubble .dots { display: flex; gap: 6px; }
.tut-bubble .dots i { width: 7px; height: 7px; border-radius: 2px; background: rgba(169,185,216,.3); }
.tut-bubble .dots i.on { background: var(--energy); }

/* ---------- 通用头部 ---------- */
.topbar { position: relative; z-index: 2; display: flex; align-items: center; gap: 10px;
  padding: calc(var(--safe-t) + 10px) 16px 10px; }
.topbar h2 { flex: 1; font-family: var(--font-display); font-weight: 400; font-size: var(--fs-d2); letter-spacing: var(--ls-disp); color: var(--text); }

/* ---------- 设置面板（主城右上齿轮） ---------- */
.sheet-mask { position: fixed; inset: 0; z-index: 85; background: rgba(3,6,13,.66); display: flex; align-items: flex-end; justify-content: center;
  animation: fade-in var(--dur-fast) ease both; }
@keyframes fade-in { from { opacity: 0; } }
.sheet { width: 100%; max-width: 480px; padding: 18px 18px calc(18px + var(--safe-b)); border-radius: 16px 16px 0 0;
  border-bottom: 0; animation: sheet-up var(--dur-base) var(--ease-out) both; }
@keyframes sheet-up { from { translate: 0 40px; opacity: 0; } }
.sheet h3 { font: 400 var(--fs-d2) var(--font-display); color: var(--text); letter-spacing: var(--ls-disp); margin-bottom: 8px; }
.set-row { display: flex; align-items: center; gap: 12px; min-height: 56px; padding: 6px 0; border-bottom: 1px solid var(--line); }
.set-row:last-of-type { border-bottom: 0; }
.set-row .lab { flex: 1; min-width: 0; display: grid; gap: 1px; }
.set-row .lab b { font-size: var(--fs-b); font-weight: 700; }
.set-row .lab small { font-size: var(--fs-c); color: var(--text-3); }
/* 拨杆开关：深槽 + 钢色拨片；开 = 青色槽 + 青色拨片 */
.toggle { position: relative; flex: none; width: 56px; height: 32px; border-radius: 16px; border: 1px solid var(--line-hi); cursor: pointer; padding: 0;
  background: var(--space-0); box-shadow: inset 0 2px 4px rgba(0,0,0,.6); }
.toggle::before { content: ""; position: absolute; top: 3px; left: 3px; width: 24px; height: 24px; border-radius: 50%;
  background: #4a5a7c; box-shadow: 0 1px 0 rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.15); transition: translate var(--dur-fast) var(--ease-out), background var(--dur-fast); }
.toggle[aria-checked="true"] { background: rgba(95,225,255,.18); border-color: rgba(95,225,255,.7); }
.toggle[aria-checked="true"]::before { translate: 24px 0; background: var(--energy); }
/* v3.1：开关外包一层 44px 透明热区（视觉尺寸不变） */
.toggle::after { content: ""; position: absolute; left: -4px; right: -4px; top: -7px; bottom: -7px; }
.sheet .btn-block { margin-top: 14px; }

/* ---------- 降级：减少动态 ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .08s !important; }
  .sweep { display: none; }
}
.reduced *, .reduced *::before, .reduced *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; }
.reduced .sweep { display: none; }
.tut-ava { width: 26px; height: 26px; border-radius: 6px; display: inline-grid; place-items: center; font-family: var(--font-title); font-weight: 700; font-size: var(--fs-c);
  color: var(--energy-hi); background: var(--space-3); border: 1px solid var(--line-hi); }

/* ==========================================================
   v3.1 增补（ux-shell）：读数签 / 数值滚动 / 奖励飞入 / 目标呼吸 / 横屏遮罩
   ========================================================== */
/* 读数签：32px，图标 20 + Chakra 16 数字，不是按钮（role=status） */
.chip-read { display: inline-flex; align-items: center; gap: 6px; height: var(--chip-h); padding: 0 10px 0 7px; border-radius: 8px;
  color: var(--text); background: rgba(9,16,34,.86); border: 1px solid var(--line); box-shadow: inset 0 1px 0 rgba(170,205,255,.05);
  font: var(--chip-num); letter-spacing: .02em; font-variant-numeric: tabular-nums; white-space: nowrap;
  transition: border-color var(--dur-fast), box-shadow var(--dur-fast); }
.chip-read i { flex: none; width: 20px; height: 20px; display: grid; place-items: center; color: var(--text-2); }
.chip-read i svg { width: 20px; height: 20px; }
.chip-read b { font: inherit; min-width: 1ch; }
/* 数值变化：青色描边亮一下（--dur-fast）+ 到达时轻弹 1.06（不回弹） */
.chip-read.lit { border-color: var(--energy); box-shadow: 0 0 0 1px rgba(95,225,255,.35); }
.chip-read.bump { animation: chip-bump var(--dur-fast) var(--ease-out); }
@keyframes chip-bump { 50% { scale: 1.06; } }
/* 奖励飞入：一枚图标沿弧线飞向读数签（JS 驱动 WAAPI，这里只给外观） */
.fly-ico { position: fixed; left: 0; top: 0; z-index: var(--z-toast); width: 24px; height: 24px; margin: -12px 0 0 -12px; pointer-events: none;
  display: grid; place-items: center; color: var(--energy-hi); filter: drop-shadow(0 2px 0 var(--space-0)); }
.fly-ico svg { width: 22px; height: 22px; }
/* 唯一的自发动效：目标物 / 目标节点呼吸（2.4s） */
@keyframes breath { 0%, 100% { scale: 1; filter: brightness(1); } 50% { scale: 1.03; filter: brightness(1.12); } }
/* L3 文字链（「详情」类）：不计入操作数，带 chevronDown */
.link-more { display: inline-flex; align-items: center; gap: 4px; min-height: 44px; padding: 0 12px; border: 0; background: none; cursor: pointer;
  font-size: var(--fs-c); letter-spacing: var(--ls-cn); color: var(--text-3); }
.link-more svg { width: 16px; height: 16px; transition: rotate var(--dur-fast); }
.link-more[aria-expanded="true"] svg { rotate: 180deg; }
/* 横屏保护：矮横屏时整屏遮罩「请竖过来」（显示字 + 一张旋转的卡） */
.rotate-tip { display: none; }
@media (orientation: landscape) and (max-height: 520px) {
  .rotate-tip { position: fixed; inset: 0; z-index: 200; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 18px;
    background: var(--tex-stars), radial-gradient(90% 70% at 50% 45%, #13224a 0%, var(--space-1) 62%, var(--space-0) 100%); background-size: 240px 240px, auto; color: var(--text); }
  .rotate-tip .rt-card { width: 54px; height: 72px; border-radius: var(--radius-card); border: 2px solid transparent;
    background: linear-gradient(170deg, #13214a, #070d1b) padding-box, var(--foil) border-box; animation: rt-turn 2.4s var(--ease-out) infinite; }
  .rotate-tip h2 { font: 400 32px/1.05 var(--font-display); letter-spacing: var(--ls-disp); }
  .rotate-tip p { font-size: var(--fs-c); color: var(--text-2); }
}
@keyframes rt-turn { 0%, 30% { rotate: 90deg; } 60%, 100% { rotate: 0deg; } }
