/* ==========================================================================
   明日方舟：终末地 · 货币统计看板 · 设计系统
   统计嵌晶玉（通用）、衍质源石（高级稀有，可 1:5 转嵌晶玉）、武库配额（稀有）。
   视觉风格取自「终末地 Wiki · 明日方舟：终末地 公开百科」：
     · 冷调灰蓝表面 + 金黄强调（#f2cc00）+ 青色系统色（#00c7bd）
     · card = 表面色 + 40px 技术网格 + 右上金黄径向微光
     · 数字使用等宽字体与表格数字
   版式/尺寸/结构与概念图保持一致，未做改动。
   ========================================================================== */

:root {
  /* 让原生控件（日期/时间选择器、下拉、滚动条…）按浅色渲染 */
  color-scheme: light;
  /* 画布 / 面层（取自参考站 --color-surface*） */
  --canvas:        #f4f5f6;
  --surface:       #ffffff;
  --surface-2:     #eef0f2;
  --surface-3:     #e9edf1;
  --line:          #e5e7eb;
  --line-soft:     #eef0f2;
  --line-strong:   #d1d5db;

  /* 文字（参考站 --color-ink / ink-muted） */
  --ink:           #111827;
  --ink-2:         #4b5563;
  --ink-3:         #6b7280;
  --ink-4:         #6b7280;

  /* 强调色（参考站 --color-accent* / --color-system） */
  --accent:        #f2cc00;
  --accent-strong: #d9ad00;
  --accent-soft:   #fff1a6;
  --accent-glow:   #ffd84a;
  --accent-ink:    #111827;
  /* 青色是参考站的系统色，但它只适配深色底；浅色底改用同色系深青保证 ≥4.5:1 */
  --good:          #007a72;
  --good-bright:   #00c7bd;
  --good-soft:     #d9f7f5;
  --bad:           #dc2626;
  --bad-soft:      #fde8e8;
  --warn:          #d97706;
  --info:          #1f4fb8;

  /* 技术网格底纹与径向微光（参考站 --grid-line / .tech-grid / .industrial-shell） */
  --grid-line:     #1118270b;
  --grid-size:     2.5rem;
  --card-grid-size:2.5rem;

  /* 管道阶段色：由浅到深表示推进程度（原先写死在 JS 里，与主题脱节） */
  --stage-1:       var(--line-strong);
  --stage-2:       #b9bec7;
  --stage-3:       #8d939e;
  --stage-4:       #5a6068;

  /* 深色目标卡 */
  --dark:          #15171c;
  --dark-2:        #22252c;
  --dark-3:        #2f333b;
  --on-dark:       #f4f5f6;
  --on-dark-2:     #a9b0bd;
  --on-dark-3:     #8a919e;

  /* 浮层遮罩 */
  --scrim:         rgba(17, 24, 39, .42);

  /* 深色面上的淡分隔线 */
  --on-dark-line:  rgba(255, 255, 255, .08);
  --on-dark-dash:  rgba(255, 255, 255, .22);
  --hero-badge:    #2b2f37;   /* 柱状图数值徽标 */
  --hero-bar-hover:#565b65;   /* 非高亮柱的悬停色 */

  /* 等高线纹理：就是 assets/contour-lines.original.png（472×96）本身，
     不裁切、不淡化、不重采样。它首尾天然严丝合缝 —— 实测「末列 → 首列」平均像素差 0.159，
     而图内相邻列平均差 3.60，接缝只有正常纹理起伏的 4.4%，整幅平铺即无缝，周期就是它自身的宽度 472px。
     base64 内联而不是 url() 引用文件：mask-image 的图片按 CORS anonymous 抓取，
     file:// 下每个文件都是不透明来源、抓取被拒，遮罩会整块失效（选中态只剩纯金色块）。
     重新生成：node tools/inline-mask.cjs */
  --contour-tex: url("data:image/png;base64,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");

  /* 参考站信号色条：品红 / 金黄 / 青 */
  --signal-strip: linear-gradient(90deg, #ff00f0 0 35%, var(--accent) 35% 82%, var(--good-bright) 82% 100%);

  /* 目标卡（hero）：浅色下走亮面 + 金黄微光，与其余卡片同族 */
  --hero-bg:        #ffffff;
  --hero-border:    #f0e2ad;   /* 一点暖金描边，保持视觉焦点 */
  --hero-ink:       var(--ink);
  --hero-ink-2:     var(--ink-3);
  --hero-grid-line: var(--grid-line);
  --hero-glow:      16%;
  --hero-bar:       #e4e7ec;
  --hero-badge:     #1f2430;
  --hero-badge-ink: #f4f5f6;
  --hero-line:      var(--line);
  --hero-dash:      rgba(17, 24, 39, .28);

  --shadow-sm: 0 1px 2px rgba(17,24,39,.05);
  --shadow:    0 1px 2px rgba(17,24,39,.04), 0 0.5rem 1.5rem -1.125rem rgba(17,24,39,.22);
  --shadow-lg: 0 1.5rem 3.75rem -1.875rem rgba(17,24,39,.35), 0 2px 0.375rem rgba(17,24,39,.05);

  --r-sm: 0.5rem;
  --r:    0.75rem;
  --r-lg: 1rem;
  --r-full: 999px;          /* 胶囊：固定大值，不参与缩放 */

  --sidebar-w: 14.5rem;

  /* 整页缩放系数：1 = 100%，1.5 = 150% */
  --page-zoom: 1.25;

  /* 字体：正文沿用参考站 --font-sans；数字用等宽并启用表格数字 */
  --font: system-ui, -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei",
          "Hiragino Sans GB", "Noto Sans CJK SC", sans-serif;
  --font-mono: "JetBrains Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular,
               "Cascadia Mono", Consolas, "Liberation Mono", monospace;
}

/* 表格数字统一走等宽字体，形成参考站那种工业数据感 */
.num, .prob__val, .badge, .closing__amount, .foot__value,
.metric__value, .hero__value {
  font-variant-numeric: tabular-nums;
}

/* 全站设计尺寸以 rem 表达，因此根字号即是整页缩放开关：
   默认 125%（16px × 1.25 = 20px），是真正的矢量放大，文字不会糊。
   浏览器 Ctrl+0 重置的是浏览器缩放，不影响这里。
   改动缩放：只改下面的 --page-zoom（1 = 100%）。 */
html { font-size: calc(100% * var(--page-zoom)); }
html[data-zoom="1"]    { --page-zoom: 1; }
html[data-zoom="1.1"]  { --page-zoom: 1.1; }
html[data-zoom="1.25"] { --page-zoom: 1.25; }
html[data-zoom="1.5"]  { --page-zoom: 1.5; }
html[data-zoom="1.75"] { --page-zoom: 1.75; }

/* 深色模式：中性灰黑（不带蓝调）。
   参考站原值是偏蓝的冷灰（#0f1115 / #171a1f …），这里统一改为 R=G=B 的中性灰，
   只留极轻微的冷倾向，避免整页发蓝。 */
html[data-theme="dark"] {
  /* 原生控件跟随深色：没有这一行，日期/时间选择器的弹层与日历按钮仍是浅色的 */
  color-scheme: dark;
  --canvas:    #0f0f10;
  --surface:   #171718;
  --surface-2: #1f1f21;
  --surface-3: #262628;
  --line:      #2a2a2c;
  --line-soft: #222224;
  --line-strong:#3a3a3d;
  --ink:       #f4f4f5;
  --ink-2:     #b6b6b9;
  --ink-3:     #939396;
  --ink-4:     #7c7c80;
  --accent-soft:#332c05;
  --good-soft: #06302e;
  --good:      #00c7bd;   /* 深色底直接用参考站的青色系统色 */
  --bad-soft:  #2e1414;
  --grid-line: #ffffff0e;
  /* 深色下面用同一组阶段色即可，深浅关系反过来更自然 */
  --stage-1:   #3a3a3d;
  --stage-2:   #55555a;
  --stage-3:   #7d7d84;
  --stage-4:   #a6a6ad;
  --dark:      #1b1b1d;
  --dark-2:    #242427;
  --dark-3:    #323235;
  --on-dark:   #f4f4f5;   /* 深色卡主文字：两种主题下都必须显式覆盖，避免漏项 */
  --on-dark-2: #b0b0b4;
  --on-dark-3: #8c8c90;
  --scrim:     rgba(0, 0, 0, .58);
  --on-dark-line: rgba(255, 255, 255, .08);
  --on-dark-dash: rgba(255, 255, 255, .20);
  --hero-badge:    #323235;
  --hero-bar-hover:#5f5f63;
  /* 深色主题：目标卡回到参考站那种深色面板 */
  --hero-bg:        #1b1b1d;
  --hero-border:    #242427;
  --hero-ink:       #f4f4f5;
  --hero-ink-2:     #b0b0b4;
  --hero-grid-line: rgba(255, 255, 255, .045);
  --hero-glow:      13%;
  --hero-bar:       #323235;
  --hero-badge:     #323235;
  --hero-badge-ink: #f4f4f5;
  --hero-line:      rgba(255, 255, 255, .08);
  --hero-dash:      rgba(255, 255, 255, .20);
  --shadow:    0 1px 2px rgba(0,0,0,.4), 0 0.625rem 1.875rem -1.25rem rgba(0,0,0,.8);
}

* { box-sizing: border-box; }

html, body { height: 100%; }
/* 弹窗锁滚动时会隐藏右侧滚动条，页面可用宽度瞬间变大 → 整页内容右移一下。
   这里始终为滚动条预留装订线，宽度就不再随弹窗开合变化（不支持的浏览器由
   app.js 的 KeystoneModal 用 padding 补偿，见 body.modal-open 的 --modal-scroll-gap）。 */
html { scrollbar-gutter: stable; }

body {
  margin: 0;
  font-family: var(--font);
  font-size: 0.813rem;
  line-height: 1.5;
  color: var(--ink);
  /* 画布：40px 技术网格（参考站 body / .tech-grid 的写法） */
  background-color: var(--canvas);
  background-image:
    linear-gradient(var(--grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
  background-position: -1px -1px;
  background-size: var(--grid-size) var(--grid-size);
  background-attachment: fixed;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

h1, h2, h3, p, dl, dd, dt, figure, ul { margin: 0; }
ul { padding: 0; list-style: none; }
button, input { font: inherit; color: inherit; }
button { cursor: pointer; background: none; border: 0; }
table { border-collapse: collapse; }

:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; border-radius: 0.375rem; }

/* 统一图标 */
.ic {
  width: 1rem; height: 1rem;
  flex: none;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.6;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.ic--sm { width: 0.875rem; height: 0.875rem; }

/* ============================ 布局 ============================ */

.app { display: flex; min-height: 100vh; }
#legacyClaim[hidden] { display: none; }
[data-local-test-controls][hidden] { display: none; }
.local-test-actions { display: flex; justify-content: center; flex-wrap: wrap; gap: .75rem; }
.local-test-bar { flex-wrap: wrap; }

/* 防止任何子元素把页面撑宽（移动端横向溢出兜底） */
.app > * { min-width: 0; }
.main > *,
.grid-2 > *,
.metrics > * { min-width: 0; max-width: 100%; }

.sidebar {
  width: var(--sidebar-w);
  flex: none;
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  padding: 0.875rem 0.75rem 0.75rem;
  background: var(--canvas);
  border-right: 1px solid var(--line);
  position: sticky;
  top: 0;
  height: 100vh;
  overflow-y: auto;
  /* 内容超出时仍可滚动，但不显示滚动条：
     scrollbar-width 是 Firefox 的属性，Chromium / Safari 需要 ::-webkit-scrollbar，
     两者都写才能真正隐藏（否则 Chromium 下会留一条白色滑槽）。 */
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.sidebar::-webkit-scrollbar { width: 0; height: 0; display: none; }

.main {
  flex: 1;
  min-width: 0;
  padding: 1.125rem 1.375rem 1.625rem;
  background: var(--canvas);
}

/* ============================ 侧边栏 ============================ */

.sidebar__brand {
  display: flex; align-items: center; gap: 0.563rem;
  padding: 2px 0.5rem 0.25rem;
}
/* 官方「明日方舟：终末地」矢量标：近方形（214×233），本身即图形标，
   因此去掉原先给 "K" 字标用的金黄方块底，改为直接显示矢量。 */
.brand-mark {
  flex: none;
  display: flex; align-items: center; justify-content: center;
  color: var(--ink);
}
.brand-logo {
  /* 高度固定、宽度按 viewBox(214:233) 自动推算 —— 这样文字块能通过
     align-self:stretch 拿到同一高度，实现上下齐平。 */
  height: 2.2rem; width: auto;
  display: block;
}
.brand-text {
  align-self: stretch;              /* 与 logo 等高，底端才能对齐 */
  display: flex; flex-direction: column;
  justify-content: flex-end;        /* 两行作为一组靠底，中文贴着英文 */
  gap: 0.0625rem;
  min-width: 0;
}
.brand-name {
  font-size: 0.781rem; font-weight: 700; letter-spacing: -.01em;
  line-height: 1.15;
  white-space: nowrap;
}
.brand-suffix {
  font-size: 0.5rem; font-weight: 600; color: var(--ink-4);
  letter-spacing: .06em; text-transform: uppercase;
  line-height: 1.15;
  white-space: nowrap;
}

/* 搜索 */
.search {
  display: flex; align-items: center; gap: 0.438rem;
  padding: 0.438rem 0.563rem;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  background: var(--surface);
  color: var(--ink-4);
  transition: border-color .15s, box-shadow .15s;
}
.search:focus-within { border-color: var(--line-strong); box-shadow: 0 0 0 3px var(--surface-3); }
.search input {
  flex: 1; min-width: 0;
  border: 0; background: none; outline: none;
  font-size: 0.75rem; color: var(--ink);
}
.search input::placeholder { color: var(--ink-4); }
.search input::-webkit-search-cancel-button { display: none; }
.search kbd {
  font: 500 10px/1 var(--font);
  color: var(--ink-4);
  border: 1px solid var(--line);
  border-radius: 0.313rem;
  padding: 0.188rem 0.25rem;
  background: var(--surface-2);
}

/* 导航
   对齐要点：图标固定 16×16 方框（不随各图标 viewBox 比例伸缩），
   文本与角标各占独立列并统一 line-height，保证 10 个选项的
   图标左边、文字起笔、角标右缘都落在同一条竖线上。 */
.nav { display: flex; flex-direction: column; gap: 1px; }
.nav__group {
  font-size: 0.625rem; font-weight: 600;
  letter-spacing: .07em;
  text-transform: uppercase;
  color: var(--ink-4);
  padding: 0.875rem 0.563rem 0.313rem;
}
.nav__item {
  position: relative;              /* 承载选中态图层 */
  isolation: isolate;              /* 让选中态的 z-index:-1 只退到本条目背景之后 */
  display: flex; align-items: center; gap: 0.625rem;
  width: 100%;
  padding: 0.438rem 0.563rem;
  border: 1px solid transparent;   /* 预留描边位，选中态再显形，避免尺寸跳动 */
  border-radius: var(--r-sm);
  background: none;                /* 未选中：保持无底，与侧栏同面 */
  color: var(--ink-2);
  font-size: 0.781rem;
  line-height: 1;
  text-align: left;
  transition: background .14s, border-color .14s, color .14s, box-shadow .14s;
}
/* 统一图标盒子尺寸，避免不同 viewBox 比例导致基线错位 */
.nav__item > svg {
  width: 1rem; height: 1rem;
  flex: 0 0 16px;
  color: var(--ink-3);
  transition: color .14s;
}
.nav__label {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  line-height: 1.25;
}
.nav__item:hover {
  background: var(--surface);
  color: var(--ink);
}
.nav__item:hover > svg { color: var(--ink-2); }
/* --------------------------------------------------------------------------
   选中态：复刻参考站 .sidebar-link--active 的「金色彩灯 + 等高线镂空遮罩」。
   参考站的条目背景最终被 background:none 覆盖，视觉全部来自 ::after ——
   一块金黄底色，用两张 mask 相交（mask-composite: intersect）切出形状：
     1) contour-lines.original.png（原图 472×96 直接平铺，天然无缝，不做任何裁切或淡化）
     2) 横向渐变（左浓右淡，控制光源衰减）
   ::after 用 z-index:-1 退到条目背景之后、图标文字之下，因此不遮挡内容。
   -------------------------------------------------------------------------- */
.nav__item.is-active {
  --contour-tint: 62%;        /* 等高线层的金黄浓度 */
  /* 贴图按原生像素 1:1 映射：472×96 → 472px × 96px，不缩放、不变形。
     位移量必须严格等于「平铺周期」＝贴图渲染宽度 472px，否则每转一圈就错开
     一个差值（久了就是一条移动的接缝）；所以宽度与位移共用同一个变量。 */
  --contour-period: 472px;
  --contour-x: 0px;           /* 纹理对齐偏移 */
  --active-band: 40%;         /* 底层实心灯带浓度（压低，避免喧宾夺主） */
  /* 纹理流动速度：位移一个周期（472px）用 26s，≈18px/s。
     这个时长是按「看着的速度」定的，不是按周期数定的 —— 周期从早先的 150px
     变成 472px 后，同样的 6.5s 会让画面快 3 倍（73px/s），所以时长要按周期等比放大：
     6.5s × (472 / 150) ≈ 20.5s 是还原旧观感的下限，这里取 26s 再慢一档。 */
  --contour-speed: 26s;
  background: none;
  border-color: transparent;   /* 选中态由图层呈现，不要额外描边 */
  color: var(--accent-ink);   /* 金底上用深墨色 */
  font-weight: 600;
  box-shadow: none;
}
.nav__item.is-active > svg { color: var(--accent-ink); stroke-width: 1.8; }

/* 底层：金黄实心灯带。
   边缘羽化：两端都用 0 → 峰值 的渐变起收（不用单一渐隐），
   使选中态像光源一样向侧栏底色过渡，而不是切出硬边。 */
.nav__item.is-active::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -2;
  border-radius: inherit;
  pointer-events: none;
  background: linear-gradient(90deg,
    transparent 0%,
    color-mix(in srgb, var(--accent) calc(var(--active-band) * 0.34), transparent) 7%,
    color-mix(in srgb, var(--accent) var(--active-band), transparent) 30%,
    color-mix(in srgb, var(--accent) calc(var(--active-band) * 0.82), transparent) 62%,
    color-mix(in srgb, var(--accent) calc(var(--active-band) * 0.42), transparent) 84%,
    transparent 100%);
  animation: nav-band-in .3s ease-out both;
}
@keyframes nav-band-in { from { opacity: 0; } }

.nav__item.is-active::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  pointer-events: none;
  background: color-mix(in srgb, var(--accent) var(--contour-tint), transparent);
  -webkit-mask-image: var(--contour-tex),
                      linear-gradient(90deg, transparent 0%, #0000005c 14%, #0000007a 42%, #000 64% 82%, #0000 100%);
          mask-image: var(--contour-tex),
                      linear-gradient(90deg, transparent 0%, #0000005c 14%, #0000007a 42%, #000 64% 82%, #0000 100%);
  /* 掩膜尺寸＝原图原生像素 472×96，渲染即 1:1，不缩放、不变形。 */
  -webkit-mask-size: var(--contour-period) 96px, 100% 100%;
          mask-size: var(--contour-period) 96px, 100% 100%;
  -webkit-mask-repeat: repeat, no-repeat;
          mask-repeat: repeat, no-repeat;
  -webkit-mask-position: var(--contour-x, 0px) 0, 0 0;
          mask-position: var(--contour-x, 0px) 0, 0 0;
  -webkit-mask-composite: source-in;
          mask-composite: intersect;
  /* 两条动画各管一块：入场只负责淡入，位移交给下面的常驻循环，
     避免两条动画同时写 mask-position 相互覆盖。 */
  animation: nav-contour-in .5s cubic-bezier(.2,.7,.3,1) both;
}
/* 纹理常驻循环：速度 150px / 6.5s ≈ 23px/s。
   贴图横向无缝、位移又正好一个周期，所以「一轮结束 → 下一轮开始」逐像素重合。
   注意这里**不能加 delay**：任何正延迟都会让纹理先静止一段时间再开始走
   （切换工作区后看起来就是「顿一下才动」）。入场淡入与位移已经拆成两条动画，
   两者同时起跑互不干扰。 */
.nav__item.is-active::after {
  animation: nav-contour-in .5s cubic-bezier(.2,.7,.3,1),
             nav-contour-drift var(--contour-speed, 6.5s) linear 0s infinite;
}
/* 无 color-mix 支持时退回纯色 */
@supports not (background: color-mix(in srgb, red 10%, transparent)) {
  .nav__item.is-active::after { background: var(--accent); opacity: .45; }
}
/* 入场：只做淡入。位移由 nav-contour-drift 独占，两条动画不再抢同一个属性。 */
@keyframes nav-contour-in {
  from { opacity: 0; }
}
/* 常驻循环：位移正好一个纹理周期（见 --contour-period），配合横向无缝贴图，
   一轮的终点与起点逐像素重合 —— 循环接缝不可见。
   只动第 1 层（等高线）的位置；第 2 层横向渐变始终留在 0 0，灯光衰减不跟着跑。 */
@keyframes nav-contour-drift {
  from {
    -webkit-mask-position: var(--contour-x, 0px) 0, 0 0;
            mask-position: var(--contour-x, 0px) 0, 0 0;
  }
  to {
    -webkit-mask-position: calc(var(--contour-x, 0px) - var(--contour-period)) 0, 0 0;
            mask-position: calc(var(--contour-x, 0px) - var(--contour-period)) 0, 0 0;
  }
}
/* 减少动效：纹理停在起始相位，不进入循环。 */
@media (prefers-reduced-motion: reduce) {
  .nav__item.is-active::after {
    animation: none;
    -webkit-mask-position: var(--contour-x, 0px) 0, 0 0;
            mask-position: var(--contour-x, 0px) 0, 0 0;
  }
}
/* 暗色主题：照搬参考站暗色配方 —— 浓度降一档，文字/图标改用金色。
   实测遮罩实心线条 alpha≈0.7，金条会被削弱；深墨字叠上去只有约 1.1:1（不可读），
   改用 #f2cc00 文字后约 4.4:1，且与参考站暗色态观感一致。
   注意：这里必须写字面色值，写成 var(--accent) 会被浏览器当无效声明丢弃。 */
html[data-theme="dark"] .nav__item.is-active {
  --contour-tint: 42%;
  --active-band: 16%;
  color: #f2cc00;
}
html[data-theme="dark"] .nav__item.is-active > svg { color: #f2cc00; }

.badge {
  flex: 0 0 auto;
  min-width: 0.875rem;
  text-align: right;
  font-size: 0.656rem; font-style: normal;
  font-variant-numeric: tabular-nums;
  line-height: 1.25;
  color: var(--ink-4);
}
.nav__item.is-active .badge { color: rgba(17,24,39,.72); }

/* 侧栏底部 */
.sidebar__foot { margin-top: auto; display: flex; flex-direction: column; gap: 0.625rem; padding-top: 0.875rem; }

/* 构建标记：只在 tools/serve.py 注入 __KEYSTONE_BUILD__ 时出现 */
.build-stamp {
  margin: 0;
  font-size: 0.6rem;
  font-family: var(--font-mono);
  color: var(--ink-4);
  text-align: center;
  letter-spacing: .02em;
}

/* 原 .goal-mini（侧栏赛季进度块）已随重复信息一并移除，样式一并删除。 */

/* 理智 card（侧栏、登录块上方）：官方数据，取不到就整块隐藏 */
.sanity-card {
  padding: 0.5rem 0.563rem 0.563rem;
  border: 1px solid var(--line);
  border-radius: var(--r);
  background: var(--surface);
  box-shadow: var(--shadow-sm);
}
.sanity-card__head { display: flex; align-items: baseline; justify-content: space-between; gap: 0.5rem; }
.sanity-card__label { font-size: 0.75rem; font-weight: 600; color: var(--ink-2); }
.sanity-card__value { font-variant-numeric: tabular-nums; }
.sanity-card__value b { font-size: 0.875rem; font-weight: 700; color: var(--ink); }
.sanity-card__value i { font-size: 0.656rem; font-style: normal; color: var(--ink-4); }
.sanity-card__track {
  margin-top: 0.4rem; height: 0.3rem; overflow: hidden;
  border-radius: var(--r-full); background: var(--surface-3);
}
.sanity-card__fill {
  display: block; width: 100%; height: 100%;
  transform-origin: left center;
  border-radius: inherit;
  background: linear-gradient(90deg, var(--accent), var(--good));
}
.sanity-card__note { margin: 0.3rem 0 0; font-size: 0.656rem; color: var(--ink-4); }

.user {
  display: flex; align-items: center; gap: 0.563rem;
  padding: 0.5rem 0.563rem;
  border: 1px solid var(--line);
  border-radius: var(--r);
  background: var(--surface);
  box-shadow: var(--shadow-sm);
}
.user__avatar {
  width: 1.625rem; height: 1.625rem; flex: none;
  display: grid; place-items: center;
  border-radius: var(--r-full);
  background: var(--surface-3);
  color: var(--ink-2);
  font-size: 0.656rem; font-weight: 700;
}
.user__meta { display: flex; flex-direction: column; min-width: 0; line-height: 1.25; }
.user__meta b { font-size: 0.75rem; font-weight: 600; }
.user__meta i { font-size: 0.656rem; font-style: normal; color: var(--ink-4); }
.user .icon-btn { margin-left: auto; }

/* ============================ 顶栏 ============================ */

.topbar {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 1rem;
  margin-bottom: 1rem;
  padding: 2px 2px 0;
}
.topbar__title h1 { font-size: 1.25rem; font-weight: 700; letter-spacing: -.02em; }
.crumbs {
  display: flex; align-items: center; gap: 0.375rem;
  font-size: 0.719rem; color: var(--ink-4);
  margin-top: 0.188rem;
}
.dot-sep { width: 0.188rem; height: 0.188rem; border-radius: 50%; background: var(--line-strong); flex: none; }
.crumbs__asof { color: var(--ink-4); }
.link { color: var(--accent-ink); font-weight: 600; text-decoration: underline; text-underline-offset: 2px; text-decoration-color: color-mix(in srgb, var(--accent) 70%, transparent); }
html[data-theme="dark"] .link { color: var(--accent); }
.topbar__actions { display: flex; align-items: center; gap: 0.438rem; }

/* ================= 控件系统 =================
   统一高度 / 圆角 / 焦点环 / 禁用态。禁用态尤其重要：本机服务未运行时
   这些按钮是 disabled 的，以前没有任何视觉区别，用户会以为点了没反应。 */
:root {
  --control-h: 2rem;
  --control-r: .5rem;
  --focus-ring: 0 0 0 2px var(--surface-2), 0 0 0 4px var(--accent);
}

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 0.375rem;
  min-height: var(--control-h);
  padding: 0.438rem 0.85rem;
  border-radius: var(--r-full);
  border: 1px solid transparent;
  background: var(--surface-2);
  color: var(--ink-2);
  font-size: 0.75rem; font-weight: 600; line-height: 1.1;
  white-space: nowrap; cursor: pointer;
  transition: background .15s, border-color .15s, color .15s, box-shadow .15s, transform .12s;
}
.btn:hover { color: var(--ink); }
.btn:active { transform: translateY(.5px); }
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }

.btn--primary { background: var(--accent); color: var(--accent-ink); }
.btn--primary:hover { background: var(--accent-strong); color: var(--accent-ink); }

.btn--ghost-light,
.btn--ghost {
  background: var(--surface); color: var(--ink-2);
  border-color: var(--line);
  box-shadow: var(--shadow-sm);
  font-weight: 500;
}
.btn--ghost-light:hover,
.btn--ghost:hover { border-color: var(--line-strong); color: var(--ink); }

/* 无边框文字操作：用于「重新检测」这类次要动作 */
.btn--quiet {
  background: none; border-color: transparent; box-shadow: none;
  color: var(--ink-3); font-weight: 500;
}
.btn--quiet:hover { background: var(--surface-2); color: var(--ink); }

.btn--danger { background: var(--bad-soft); color: var(--bad); }
.btn--danger:hover { background: var(--bad); color: #fff; }

.btn--sm { min-height: 1.6rem; padding: 0.28rem 0.62rem; font-size: 0.7rem; }

.btn:disabled,
.btn[disabled] {
  cursor: not-allowed;
  opacity: .55;
  box-shadow: none;
  transform: none;
  filter: grayscale(.4);
}
.btn:disabled:hover,
.btn[disabled]:hover { transform: none; }
.btn--primary:disabled,
.btn--primary[disabled] { background: var(--surface-3); color: var(--ink-4); }

.icon-btn {
  width: var(--control-h); height: var(--control-h);
  display: grid; place-items: center;
  border-radius: var(--r-full);
  background: var(--surface);
  border: 1px solid var(--line);
  color: var(--ink-2);
  box-shadow: var(--shadow-sm);
  cursor: pointer;
  transition: color .15s, border-color .15s, background .15s, box-shadow .15s;
}
.icon-btn:hover { color: var(--ink); border-color: var(--line-strong); }
.icon-btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
.icon-btn:disabled { opacity: .5; cursor: not-allowed; }
.icon-btn--ghost { background: none; border-color: transparent; box-shadow: none; }
.icon-btn--ghost:hover { background: var(--surface-2); border-color: transparent; }
html[data-theme="dark"] .icon-btn--ghost { background: none; }

/* 主题图标显隐 */
.ic--sun { display: none; }
html[data-theme="dark"] .ic--sun { display: block; }
html[data-theme="dark"] .ic--moon { display: none; }

/* ============================ 卡片基础 ============================ */

/* 所有卡片共用同一套背景（含指标卡，避免漏项）：
   表面色 + 40px 技术网格 + 右上金黄径向微光（取自参考站 .industrial-shell）。
   抽成变量是为了让 .card 与 .metric 无法再"各写一套"而漏掉其中一个。

   纹理强度按层级分档：核心资源卡（.hero / .metric）保留完整的网格 + 金黄微光；
   普通记录、明细与表单区域降到 --tex-quiet，避免同一屏里堆叠多种高强度纹理。 */
:root {
  --tex-grid: 10%;          /* 普通卡片：网格与微光的基本强度 */
  --tex-glow: 10%;          /* 微光强度（径向渐变） */
  --tex-quiet: 4%;          /* 记录 / 明细 / 表单区：几乎只剩表面色 */
  --card-bg-image:
    radial-gradient(circle at 92% 4%,
      color-mix(in srgb, var(--accent) var(--tex-glow), transparent), transparent 34%),
    linear-gradient(var(--grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
  --card-bg-size: auto, var(--card-grid-size) var(--card-grid-size), var(--card-grid-size) var(--card-grid-size);
  /* 普通层级：保留网格，微光减半 */
  --tex-quiet-image:
    radial-gradient(circle at 92% 4%,
      color-mix(in srgb, var(--accent) var(--tex-quiet), transparent), transparent 30%),
    linear-gradient(var(--grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
}
@supports not (background: color-mix(in srgb, red 10%, transparent)) {
  :root {
    --card-bg-image:
      radial-gradient(circle at 92% 4%, rgba(242, 204, 0, .10), transparent 34%),
      linear-gradient(var(--grid-line) 1px, transparent 1px),
      linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
    --tex-quiet-image:
      radial-gradient(circle at 92% 4%, rgba(242, 204, 0, .04), transparent 30%),
      linear-gradient(var(--grid-line) 1px, transparent 1px),
      linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
  }
}

.card,
.metric {
  background-color: var(--surface);
  background-image: var(--card-bg-image);
  background-size: var(--card-bg-size);
  background-position: 0 0, -1px -1px, -1px -1px;
}

/* ---------- 统一的动效时长与曲线 ----------
   快速反馈 120ms / 常规过渡 180ms / 较大面板 240ms。
   只用 transform 与 opacity 做位移、缩放与淡入，不用 transition: all。 */
:root {
  --t-fast: 120ms;
  --t-base: 180ms;
  --t-panel: 240ms;
  --ease-out-soft: cubic-bezier(.2, .7, .3, 1);
}

/* ---------- 统一间距 ----------
   卡片内边距（纵向 / 横向）与卡之间的竖向间距。
   所有卡片、页脚、区块标题栏都从这三个值推导，不再各写一套。 */
:root {
  --card-pad: 1rem;
  --card-pad-x: 1rem;
  --card-gap: 1rem;
}

/* 数值变化时的一次性高亮：兑换保存成功后由 JS 短暂挂上 .is-flash。
   只闪底色，不动布局，动画取消也不会留下痕迹。 */
@keyframes balanceFlash {
  from { background-color: color-mix(in srgb, var(--accent) 34%, transparent); }
  to   { background-color: transparent; }
}
@supports not (background: color-mix(in srgb, red 10%, transparent)) {
  @keyframes balanceFlash {
    from { background-color: var(--accent-soft); }
    to   { background-color: transparent; }
  }
}
.is-flash {
  animation: balanceFlash 600ms var(--ease-out-soft);
  border-radius: 0.25rem;
}

.card {
  position: relative;
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow);
  /* 全站卡片统一用同一套内边距与卡间距，避免逐卡各写一个值 */
  padding: var(--card-pad) var(--card-pad-x);
  transition: border-color .18s ease, box-shadow .18s ease;
}
.card--table { padding: var(--card-pad-x) var(--card-pad-x) 0; display: flex; flex-direction: column; }

/* 记录 / 明细 / 表单所在卡片：纹理收到最低一档。
   同一屏里只有核心资源卡保留网格 + 金黄微光，其余区域靠面层与边框区分层级。 */
.card--quiet { background-image: var(--tex-quiet-image); }
.card__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.75rem; }
.card__title { font-size: 0.875rem; font-weight: 700; letter-spacing: -.01em; }
.card__sub { font-size: 0.688rem; color: var(--ink-4); margin-top: 2px; }
.card__sub--sm { font-size: 0.656rem; }

/* ---- 次级卡片的轻标题：左侧一小段主色轨 + 标题（+可选英文副行） ----
   全站只在「区块卡片」上用大标题栏（见 .card--section），
   同一页面里其余卡片用这个轻标题，避免每张卡都顶一条同样的横栏。 */
.card__titles { min-width: 0; }
.card__en {
  display: block;
  margin-top: .12rem;
  font-size: .6rem; font-weight: 600; letter-spacing: .2em;
  text-transform: uppercase; color: var(--ink-4);
}
.card__head--tick { align-items: center; }
.card__head--tick .card__titles {
  padding-left: .6rem;
  border-left: 2px solid var(--accent);
}

/* ---- 区块卡片：整页的主视觉标题栏（斜纹 + 中文 + 英文）---- */
:root { --stripe-soft: rgba(127, 127, 127, .10); }
.card--section { padding-top: 0; overflow: hidden; }
.card__bar {
  position: relative;
  display: flex; align-items: center; justify-content: space-between;
  gap: .5rem 1rem;
  margin: 0 calc(-1 * var(--card-pad-x)) .8rem;
  padding: .62rem var(--card-pad-x) .58rem .95rem;
  border-bottom: 1px solid var(--line);
  border-radius: var(--r-lg) var(--r-lg) 0 0;
  background-color: var(--surface-2);
  background-image:
    linear-gradient(180deg, rgba(127, 127, 127, .05), transparent 80%),
    repeating-linear-gradient(45deg, var(--stripe-soft) 0 1px, transparent 1px 8px);
}
.card__bar::before {
  content: '';
  position: absolute;
  inset: .5rem auto .5rem 0;
  width: .22rem;
  border-radius: 0 var(--r-full) var(--r-full) 0;
  background: var(--accent);
}
.card__bar .card__cn { margin: 0; font-size: 1.05rem; font-weight: 700; line-height: 1.2; color: var(--ink); }
.card__bar .card__en { margin-top: .1rem; }
.card__bar-note { margin: 0; font-size: .76rem; color: var(--ink-3); }

/* 每个页面首卡的标题自动获得与区块标题一致的主色竖标：
   不改结构就让全站标题观感统一（其余卡片沿用轻标题，避免重复条纹）。 */
.data-card > .card__title:first-child {
  position: relative;
  padding-left: .6rem;
  font-size: .95rem;
}
.data-card > .card__title:first-child::before {
  content: '';
  position: absolute;
  left: 0;
  top: .12em;
  bottom: .12em;
  width: 2px;
  border-radius: var(--r-full);
  background: var(--accent);
}

/* ---- 卡片内的分步区块 ----
   同一个页面里如果需要「两块内容」，用编号步骤而不是再摆一张几乎一样的卡片：
   卡片标题栏 + 卡片标题栏 会让人以为这是两件互不相干的事。 */
.step + .step {
  margin-top: 1.15rem;
  padding-top: 1.15rem;
  border-top: 1px dashed var(--line-soft);
}
.step__head { display: flex; align-items: flex-start; gap: .55rem; }
.step__no {
  flex: none;
  width: 1.4rem; height: 1.4rem;
  display: grid; place-items: center;
  border-radius: var(--r-full);
  background: var(--accent-soft);
  color: var(--ink);
  font-size: .7rem; font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.step__cn { margin: 0; font-size: .92rem; font-weight: 700; color: var(--ink); }
.step__en {
  margin: .08rem 0 0;
  font-size: .6rem; font-weight: 600; letter-spacing: .18em;
  text-transform: uppercase; color: var(--ink-4);
}
.step__foot { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.card__foot {
  display: flex; align-items: flex-end; justify-content: space-between; gap: 0.75rem;
  margin: 0.625rem calc(-1 * var(--card-pad-x)) 0;
  padding: 0.75rem var(--card-pad-x);
  border-top: 1px solid var(--line-soft);
  margin-top: auto;          /* 贴住卡片底部，使同行卡片页脚对齐 */
}
.card__foot--tight { align-items: center; }
.foot__right { text-align: right; display: flex; align-items: center; gap: 0.5rem; }
.foot__value {
  font-family: var(--font-mono);
  font-feature-settings: "tnum" 1;
  font-size: 1rem; font-weight: 700; letter-spacing: -.02em;
}

/* 胶囊 */
.pill {
  display: inline-flex; align-items: center;
  padding: 0.188rem 0.5rem;
  border-radius: var(--r-full);
  font-size: 0.656rem; font-weight: 600;
  white-space: nowrap;
}
.pill--accent { background: var(--accent); color: var(--accent-ink); }
.pill--solid { background: var(--hero-badge); color: var(--hero-badge-ink); }
.pill--ok { background: var(--good-soft); color: var(--good); }
.pill--warn { background: var(--accent-soft); color: var(--accent-ink); }
html[data-theme="dark"] .pill--warn { color: var(--accent); }
.pill--bad { background: var(--bad-soft); color: var(--bad); }
.pill--muted { background: var(--surface-3); color: var(--ink-4); }

/* ============================ 货币总览页 ============================ */

/* 目标卡标题里的货币图标：与文字同高、垂直居中 */
.hero__icon {
  width: 1.125rem; height: 1.125rem;
  object-fit: contain; flex: none;
}

/* 顶部三个核心货币概览块 */
.ov-cards {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.75rem; margin: 0.875rem 0 1rem;
}
.ov-card {
  display: flex; align-items: center; gap: 0.625rem;
  padding: 0.688rem 0.75rem;
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  background: var(--surface-2);
}
.ov-card__icon { width: 2rem; height: 2rem; flex: none; display: grid; place-items: center; }
.ov-card__icon .thumb__img { width: 2rem; height: 2rem; }
.ov-card__body { display: flex; flex-direction: column; gap: 0.125rem; min-width: 0; flex: 1; }
.ov-card__name {
  display: flex; align-items: center; gap: 0.375rem;
  font-size: 0.75rem; font-weight: 600; color: var(--ink-2);
  white-space: nowrap;
}
.ov-card__kind {
  flex: none; white-space: nowrap;
  font-size: 0.563rem; font-style: normal; font-weight: 700;
  padding: 0.063rem 0.313rem; border-radius: 0.25rem;
  background: var(--surface-3); color: var(--ink-4);
  letter-spacing: .04em;
}
.ov-card__val {
  font-family: var(--font-mono); font-size: 1.125rem; font-weight: 700;
  font-feature-settings: "tnum" 1; letter-spacing: -.02em;
}
.ov-card__sub { font-size: 0.625rem; color: var(--ink-4); white-space: nowrap; }

/* 可编辑表里的数量输入框 */
.table--edit td { vertical-align: middle; }
.ov-kind { font-size: 0.688rem; color: var(--ink-4); white-space: nowrap; }
/* 上次记录时间：相对时间，等宽字体便于纵列对齐 */
.ov-last {
  font-family: var(--font-mono); font-size: 0.688rem;
  color: var(--ink-4); white-space: nowrap; text-align: right;
}
.ov-input {
  width: 7.5rem; padding: 0.313rem 0.5rem;
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 600;
  font-feature-settings: "tnum" 1;
  text-align: right;
  color: var(--ink);
  background: var(--surface);
  /* 边框宽度恒定，靠颜色区分状态 —— 见文件下方「持有数量编辑框」小节的说明 */
  border: 2px solid var(--line);
  border-radius: var(--radius-sm, 0.25rem);
  transition: border-color .14s, box-shadow .14s;
}
.ov-input:hover { border-color: var(--line-strong); }
.ov-input:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 35%, transparent);
}
/* 去掉 number 输入框的上下箭头，避免误触把数量改乱 */
.ov-input::-webkit-outer-spin-button,
.ov-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.ov-input[type="number"] { -moz-appearance: textfield; appearance: textfield; }

.ov-reset {
  display: inline-grid; place-items: center;
  width: 1.5rem; height: 1.5rem;
  border-radius: 0.25rem;
  color: var(--ink-4);
  transition: background .14s, color .14s;
}
.ov-reset:hover { background: var(--surface-3); color: var(--ink); }

/* 小号图标（表格行内） */
.thumb--sm { width: 1.625rem; height: 1.5rem; border-radius: 0.313rem; }
.thumb--sm .thumb__img { width: 1.25rem; height: 1.25rem; }

/* 卡片右上角动作组 */
.card__actions { display: flex; align-items: center; gap: 0.5rem; flex: none; }

/* 窄屏：概览块改为纵向 */
@media (max-width: 900px) {
  .ov-cards { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .ov-last, .ov-kind { display: none; }
  .ov-input { width: 6rem; }
}

/* ============================ 货币转换器 ============================ */

/* 主页各区块统一用同一个竖向间距（与 .metrics / .grid-2 一致）。 */
.card--calc { margin-top: var(--card-gap); }

/* 目标货币切换标签 */
.conv-tabs, #convTabs { display: flex; align-items: center; gap: 0.375rem; flex: none; }
.conv-tab {
  display: inline-flex; align-items: center; gap: 0.375rem;
  padding: 0.313rem 0.625rem;
  font-size: 0.75rem; font-weight: 600; white-space: nowrap;
  color: var(--ink-3);
  background: var(--surface-2);
  border: 1px solid var(--line);
  border-radius: 999px;
  transition: background .14s, color .14s, border-color .14s;
}
.conv-tab:hover { border-color: var(--line-strong); color: var(--ink); }
.conv-tab.is-active {
  background: var(--accent); border-color: var(--accent);
  color: var(--accent-ink); font-weight: 700;
}

/* 来源行：第一行 = 来源名 ↕ 余额信息 · 兑换关系 ↕ 次数 ↕ 填满。
   两栏都用 flex-wrap，因此卡片变窄时自然折行，不需要按宽度重排。 */
.card--calc { container-type: inline-size; }
.conv-row {
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between;
  gap: 0.5rem 1.25rem;
  padding: 0.75rem 0;
  border-bottom: 1px solid var(--line-soft);
}
.conv-row:last-child { border-bottom: 0; }
/* 左栏：来源名与它的余额信息成组，数值不会被推到行尾 */
.conv-row__src {
  display: flex; flex-direction: column; gap: 0.2rem;
  flex: 1 1 18rem; min-width: 0;
}
.conv-row__label { display: flex; align-items: center; gap: 0.5rem; min-width: 0; }
.conv-row__name { font-size: 0.813rem; font-weight: 600; white-space: nowrap; }

.conv-row__facts {
  display: flex; flex-wrap: wrap; align-items: baseline;
  gap: 0.25rem 1.25rem;
}
.conv-row__cost { font-family: var(--font-mono); font-size: 0.688rem; color: var(--ink-3); white-space: nowrap; }
.conv-row__after { font-size: 0.656rem; color: var(--ink-3); white-space: nowrap; }
.conv-row__max { font-size: 0.625rem; color: var(--ink-4); white-space: nowrap; }

/* 右栏：兑换关系、次数输入与「填满」按同一基线排列 */
.conv-row__amount {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end;
  gap: 0.5rem 0.875rem; flex: 1 1 auto;
}
.conv-row__rate {
  display: inline-flex; align-items: center; gap: 0.25rem;
  font-family: var(--font-mono); font-size: 0.625rem;
  padding: 0.125rem 0.375rem; border-radius: 0.25rem;
  background: var(--accent-soft); color: var(--accent-ink);
  white-space: nowrap;
}
.conv-row__rate b { font-weight: 700; }
html[data-theme="dark"] .conv-row__rate { background: var(--surface-3); color: var(--accent); }
.conv-row__field { display: flex; align-items: center; gap: 0.5rem; }
.conv-row__field-label { font-size: 0.656rem; color: var(--ink-4); white-space: nowrap; }
.conv-row__use { padding: 0.25rem 0.5rem; font-size: 0.688rem; }

/* 无效输入的字段级提示：带底色的浅提示，不只靠按钮变灰表达 */
.conv-row.is-invalid { background: var(--bad-soft); border-radius: var(--r-sm); }
.conv-row.is-invalid .conv-row__input { border-color: var(--bad); }
.conv-row.is-invalid .conv-row__max { color: var(--bad); font-weight: 600; }
.conv-row__error { flex-basis: 100%; grid-column: 1 / -1; color: var(--bad); font-size: .75rem; line-height: 1.5; margin: .25rem 0; }

/* 窄卡片：右栏改为整行左对齐，输入框占满可用宽度 */
@container (max-width: 34rem) {
  .conv-row__amount { justify-content: flex-start; }
  .conv-row__field { flex: 1 1 100%; }
  .conv-row__input { flex: 1 1 auto; width: auto; min-width: 0; }
}

/* 兑换产出：把「预计扣除 / 预计获得 / 兑换后持有」收成一块，与投入行区分 */
.conv-sum {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: 0.625rem 1.75rem;
  margin-top: 0.75rem;
  padding: 0.75rem 0.875rem;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  background: var(--surface-2);
}
.conv-sum__arrow {
  display: flex; align-items: center; gap: 0.375rem;
  flex: none;
  font-size: 0.688rem; font-weight: 700; letter-spacing: .04em;
  color: var(--accent-ink);
}
html[data-theme="dark"] .conv-sum__arrow { color: var(--accent); }
.conv-sum__grid {
  display: flex; flex-wrap: wrap;
  gap: 0.625rem 2rem;
  margin: 0;
}
.conv-sum__grid > div { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.conv-sum__grid dt { font-size: 0.656rem; color: var(--ink-4); }
.conv-sum__grid dd { margin: 0; font-size: 0.813rem; font-weight: 600; color: var(--ink); }
.conv-sum__grid dd .num { font-variant-numeric: tabular-nums; }
.conv-sum__gain b { color: var(--ink); }
#convSpent { font-family: var(--font-mono); font-size: 0.75rem; font-weight: 500; color: var(--ink-2); }
#convAfter b { color: var(--ink-4); }

.conv-row__input {
  width: 100%; padding: 0.5rem 0.625rem;
  font-family: var(--font-mono); font-size: 1rem; font-weight: 700;
  font-feature-settings: "tnum" 1; text-align: right;
  color: var(--ink); background: var(--surface);
  /* 宽度恒定，只过渡颜色/阴影：border-width 影响布局，聚焦时会触发重排 */
  border: 2px solid var(--line); border-radius: var(--radius-md, 0.375rem);
  caret-color: var(--accent);
  transition: border-color .14s, box-shadow .14s;
}
.conv-row__input:hover { border-color: var(--line-strong); background: var(--surface-2); }
.conv-row__input:focus {
  outline: none; border-color: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 32%, transparent);
}
.conv-row__input::-webkit-outer-spin-button,
.conv-row__input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.conv-row__input[type="number"] { -moz-appearance: textfield; appearance: textfield; }

.conv__out {
  font-family: var(--font-mono); font-size: 0.875rem;
  color: var(--accent-ink);
}
html[data-theme="dark"] .conv__out { color: var(--accent); }
#convApply[disabled] { opacity: .45; cursor: not-allowed; }

/* 汇总块在窄屏折成一列 */
@media (max-width: 900px) {
  .conv-sum { grid-template-columns: minmax(0, 1fr); gap: 0.625rem; }
}
@media (max-width: 640px) {
  .card__head { flex-wrap: wrap; }
  #convTabs { width: 100%; }
}

/* ========================= 货币变动记录 ========================= */

/* 记录区：目标卡横跨整行（卡片自身的列数多于记录卡的列，
   放成窄栏会留出大片空白），下方是两张等宽的记录表。
   列数由 interface.css 统一给出，这里只管跨列与上边距。 */
.grid-2--ledger { margin-top: var(--card-gap); }
.target-card { grid-column: 1 / -1; }

/* 图表卡与其它区块保持同一间距；它跟在兑换卡之后，因此需要自己的上边距 */
.hero--chart { margin-top: var(--card-gap); }

.ledger {
  display: flex; flex-direction: column;
  margin: 0.375rem -1rem 0;
  max-height: 21rem; overflow-y: auto;
  scrollbar-width: none;
}
.ledger::-webkit-scrollbar { width: 0; height: 0; display: none; }
.ledger__empty {
  padding: 1.25rem 1rem; font-size: 0.75rem; color: var(--ink-4); line-height: 1.6;
}
.ledger__item {
  display: grid;
  grid-template-columns: 5.5rem minmax(7rem, 1fr) 5rem 7.5rem 4rem;
  align-items: center; gap: 0.5rem;
  padding: 0.5rem 1rem;
  border-bottom: 1px solid var(--line-soft);
  font-size: 0.75rem;
  transition: background .14s;
}
.ledger__item:hover { background: var(--surface-2); }
.ledger__time {
  font-family: var(--font-mono); font-size: 0.625rem; color: var(--ink-4);
  white-space: nowrap;
}
.ledger__cur {
  display: flex; align-items: center; gap: 0.375rem;
  font-weight: 600; min-width: 0; white-space: nowrap;
}
.ledger__delta {
  font-family: var(--font-mono); font-weight: 700; font-size: 0.75rem;
  text-align: right; white-space: nowrap;
}
.ledger__delta.is-up { color: var(--good); }
.ledger__delta.is-down { color: var(--bad); }
.ledger__flow {
  font-family: var(--font-mono); font-size: 0.688rem; color: var(--ink-4);
  text-align: right; white-space: nowrap;
}
.ledger__flow b { color: var(--ink); }
.ledger__kind {
  font-size: 0.625rem; font-weight: 700; text-align: center;
  padding: 0.125rem 0.313rem; border-radius: 0.25rem; white-space: nowrap;
  background: var(--surface-3); color: var(--ink-4);
}
.ledger__kind.is-convert { background: var(--good-soft); color: var(--good); }
.ledger__kind.is-target { background: var(--accent-soft); color: var(--accent-ink); }
html[data-theme="dark"] .ledger__kind.is-target { background: var(--surface-3); color: var(--accent); }

.thumb--xs { width: 1.25rem; height: 1.125rem; border-radius: 0.25rem; }
.thumb--xs .thumb__img { width: 1rem; height: 1rem; }

/* ===================== 数字滚轮动画（逐位） ===================== */

/* 每位数字包在 .roll-d 里，变动的那位播放「旧值转出 → 新值转入」。
   只让变化的位滚，其余保持静止，视觉上更稳。 */
.roll-d { display: inline-block; }
.roll-d.is-roll { animation: roll-in .34s cubic-bezier(.2, .7, .3, 1) both; }
@keyframes roll-in {
  0%   { opacity: 0; transform: translateY(-70%); }
  55%  { opacity: .55; }
  100% { opacity: 1; transform: translateY(0); }
}
/* 整数秒的数位略作延迟，形成轻微的「逐位落定」感 */
.roll-d.is-roll:nth-child(2n) { animation-delay: .02s; }
.roll-d.is-roll:nth-child(3n) { animation-delay: .04s; }

@media (prefers-reduced-motion: reduce) {
  .roll-d.is-roll { animation: none; }
}

/* ================= 持有数量编辑框：未选中 / 选中 ================= */

/* 未选中：像一块「可写的数值位」，实线细边 + 数字右对齐，安静不抢眼。
   注意：**边框宽度必须恒定**，不要写成「未选中 1px、选中 2px」——
   border-width 影响布局，点击聚焦时会触发整行/整表重排，
   叠加页面的 rem 缩放与卡片网格底纹，代价足以让点击明显卡顿。
   改用「颜色 + 外发光」区分状态，视觉同样清楚且零重排。 */
.ov-input {
  border-style: solid;
  border-color: var(--line);
  background: var(--surface);
  color: var(--ink-2);
  font-weight: 600;
  caret-color: var(--accent);
}
.ov-input:hover {
  border-color: var(--line-strong);
  background: var(--surface-2);
}

/* 选中：金色边框 + 外发光 + 文字转为高对比 */
.ov-input:focus {
  border-color: var(--accent);
  background: var(--surface);
  color: var(--ink);
  font-weight: 700;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 32%, transparent);
}
/* 选中时同行的货币名也提亮，形成「正在编辑这一行」的整行提示。
   用 JS 在 focusin/focusout 切换 .is-editing —— **不要**写成
   tr:has(.ov-input:focus)：:has() 会在每次焦点变化时对整棵 DOM 做回溯匹配，
   这张表有上千节点，样式重算会拖到数百毫秒，表现为「点一下输入框页面就卡住」。
   （之前输入框是 type=number，点上去拿不到焦点，所以这个问题一直没暴露。） */
tr.is-editing .stage__name { color: var(--ink); font-weight: 700; }
tr.is-editing { background: color-mix(in srgb, var(--accent) 7%, transparent); }

/* ====================== 货币修改记录悬浮窗 ====================== */

.modal {
  position: fixed; inset: 0; z-index: 90;
  display: grid; place-items: center;
  padding: 1.25rem;
}
.modal[hidden] { display: none; }
.modal__scrim {
  position: absolute; inset: 0;
  background: color-mix(in srgb, #05070c 58%, transparent);
  backdrop-filter: blur(3px);
  animation: modal-scrim-in .18s ease-out both;
}
.modal__panel {
  position: relative;
  width: min(38rem, 100%);
  max-height: min(80vh, 46rem);
  display: flex; flex-direction: column;
  /* 悬浮窗统一用干净表面：沿用 card 的表面色，但**不要**那套 2.5rem 网格底纹——
     弹窗内容密度高（表格、清单、表单），叠网格只会显得杂乱。只留一层顶部微光。 */
  background-color: var(--surface);
  background-image: linear-gradient(180deg, color-mix(in srgb, var(--accent) 12%, transparent), transparent 32%);
  background-size: 100% 100%;
  background-position: 0 0;
  border: 1px solid var(--line);
  border-radius: 0.75rem;
  box-shadow: var(--shadow-lg);
  animation: modal-panel-in .22s cubic-bezier(.2,.7,.3,1) both;
  overflow: hidden;
}
@keyframes modal-scrim-in { from { opacity: 0; } }
@keyframes modal-panel-in {
  from { opacity: 0; transform: translateY(0.75rem) scale(.97); }
}
@media (prefers-reduced-motion: reduce) {
  .modal__scrim, .modal__panel { animation: none; }
}

.modal__head {
  display: flex; align-items: center; gap: 0.75rem;
  padding: 0.875rem 1rem;
  border-bottom: 1px solid var(--line);
  flex: none;
}
/* 图标与两行文字垂直居中对齐，尺寸收小到与标题同级 */
.modal__icon {
  width: 1.75rem; height: 1.75rem; flex: none;
  display: grid; place-items: center;
}
.modal__icon .thumb__img { width: 1.75rem; height: 1.75rem; }
.modal__icon:empty { display: none; }
.modal__titles { flex: 1; min-width: 0; }
.modal__title {
  font-size: 0.875rem; font-weight: 700; letter-spacing: -.01em;
  line-height: 1.2;
}
.modal__sub {
  font-size: 0.688rem; color: var(--ink-4);
  margin-top: 0.188rem; line-height: 1.2;
}
.modal__close {
  margin-left: auto; flex: none;
  width: 1.75rem; height: 1.75rem;
  border: 0; border-radius: 0.375rem;
  display: grid; place-items: center;
  color: var(--ink-4);
  transition: background .14s, color .14s;
}
.modal__close:hover { background: var(--surface-3); color: var(--ink); }

.modal__stats {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0.625rem;
  padding: 0.75rem 1rem;
  border-bottom: 1px solid var(--line-soft);
  flex: none;
}
.modal__stat { display: flex; flex-direction: column; gap: 0.188rem; min-width: 0; }
.modal__stat-k { font-size: 0.625rem; color: var(--ink-4); }
.modal__stat-v {
  font-family: var(--font-mono); font-size: 0.938rem; font-weight: 700;
  font-feature-settings: "tnum" 1; white-space: nowrap;
}
.modal__stat-v.is-up { color: var(--good); }
.modal__stat-v.is-down { color: var(--bad); }

.modal__list {
  flex: 1; min-height: 0;
  overflow-y: auto;
  padding: 0.25rem 0;
  scrollbar-width: thin;
}
.modal__list::-webkit-scrollbar { width: 6px; }
.modal__list::-webkit-scrollbar-thumb {
  background: var(--line-strong); border-radius: 999px;
}
.modal__empty {
  padding: 2rem 1rem; text-align: center;
  font-size: 0.75rem; color: var(--ink-4); line-height: 1.7;
}
.modal__row {
  display: grid;
  grid-template-columns: 6rem 5rem minmax(0, 1fr) 4.5rem;
  align-items: center; gap: 0.5rem;
  padding: 0.5rem 1rem;
  border-bottom: 1px solid var(--line-soft);
  font-size: 0.75rem;
}
.modal__row:last-child { border-bottom: 0; }
.modal__row:hover { background: var(--surface-2); }
.modal__row-time {
  font-family: var(--font-mono); font-size: 0.625rem; color: var(--ink-4);
  white-space: nowrap;
}
.modal__row-delta {
  font-family: var(--font-mono); font-weight: 700; font-size: 0.75rem;
  text-align: right; white-space: nowrap;
}
.modal__row-delta.is-up { color: var(--good); }
.modal__row-delta.is-down { color: var(--bad); }
.modal__row-flow {
  font-family: var(--font-mono); font-size: 0.688rem; color: var(--ink-4);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.modal__row-flow b { color: var(--ink); }
.modal__row-note {
  font-size: 0.625rem; color: var(--ink-4);
  text-align: right; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis;
}

.modal__foot {
  display: flex; align-items: center; justify-content: space-between;
  gap: 0.75rem;
  padding: 0.75rem 1rem;
  border-top: 1px solid var(--line);
  flex: none;
}
.modal__foot-actions { display: flex; align-items: center; gap: 0.5rem; flex: none; }

/* 表格行里的「修改记录」入口按钮 */
.row-btn {
  position: relative;
  display: inline-grid; place-items: center;
  width: 1.5rem; height: 1.5rem;
  border-radius: 0.25rem;
  color: var(--ink-4);
  transition: background .14s, color .14s;
}
.row-btn:hover { background: var(--surface-3); color: var(--accent-ink); }
html[data-theme="dark"] .row-btn:hover { color: var(--accent); }
/* 表格行内（货币名旁边）：更小、更低调，不抢内容 */
.row-btn--inline { width: 1.25rem; height: 1.25rem; margin-left: 0.125rem; }
.row-btn--inline .ic { width: 0.75rem; height: 0.75rem; }
.ov-actions { display: flex; align-items: center; justify-content: flex-end; gap: 0.25rem; }
.row-btn__dot {
  position: absolute; top: 0; right: 0; margin: 0;
  width: 0.375rem; height: 0.375rem; border-radius: 50%;
  background: var(--good);
  pointer-events: none;
}

body.modal-open { overflow: hidden; padding-right: var(--modal-scroll-gap, 0px); }

@media (max-width: 640px) {
  .modal { padding: 0.5rem; }
  .modal__panel { max-height: 92vh; }
  .modal__row { grid-template-columns: 5rem 4.5rem minmax(0, 1fr); }
  .modal__row-note { display: none; }
}

/* ========================== 本期目标 ========================== */

.stat-rows { display: flex; flex-direction: column; gap: 0.875rem; margin-top: 0.875rem; }
.stat-row { display: flex; flex-direction: column; gap: 0.375rem; }
.stat-row__head { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; }
.stat-row__name { display: flex; align-items: center; gap: 0.438rem;
  font-size: 0.75rem; font-weight: 600; white-space: nowrap; flex: none; }
.stat-row__pct {
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 700;
  color: var(--ink-3);
}
.stat-row__pct.is-done { color: var(--good); }
.stat-row__nums {
  display: flex; align-items: baseline; gap: 0.375rem;
  font-family: var(--font-mono); font-feature-settings: "tnum" 1;
}
.stat-row__nums b { font-size: 1.125rem; font-weight: 700; letter-spacing: -.02em; }
.stat-row__sep { color: var(--ink-4); }
.stat-row__target {
  width: 5.5rem; padding: 0.188rem 0.375rem;
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 600;
  font-feature-settings: "tnum" 1; text-align: right;
  color: var(--ink-3);
  background: var(--surface-2);
  border: 1px dashed var(--line-strong);
  border-radius: 0.25rem;
}
.stat-row__target:focus {
  outline: none; border-style: solid; border-color: var(--accent);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 30%, transparent);
}
.stat-row__target::-webkit-outer-spin-button,
.stat-row__target::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.stat-row__target[type="number"] { -moz-appearance: textfield; appearance: textfield; }
.stat-row__bar {
  display: block; height: 0.375rem; border-radius: 999px;
  background: var(--surface-3); overflow: hidden;
}
.stat-row__bar i {
  display: block; height: 100%; border-radius: 999px;
  background: var(--accent); transition: width .28s ease;
}
.stat-row__bar i.is-done { background: var(--good); }
.stat-row__gap { font-size: 0.625rem; color: var(--ink-4); }
.stat-row__gap b { color: var(--ink-2); font-weight: 700; font-variant-numeric: tabular-nums; }
/* 状态不能只靠颜色表达：达成 / 未达成各有一句文字 */
.stat-row__foot { display: flex; align-items: baseline; gap: 0.375rem; }
.stat-row__foot.is-done .stat-row__gap b { color: var(--good); }
.stat-row__done {
  font-size: 0.625rem; font-weight: 700;
  padding: 0.05rem 0.3rem; border-radius: var(--r-full);
  background: var(--good-soft); color: var(--good);
}
.stat-row__done--muted { background: var(--surface-3); color: var(--ink-3); font-weight: 600; }

@media (max-width: 1100px) {
  .grid-2--ledger { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 760px) {
  .calc { grid-template-columns: 1fr; }
  .calc__arrow { flex-direction: row; justify-content: center; }
  .calc__arrow .ic { transform: rotate(90deg); }
  .calc__result { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ledger__item { grid-template-columns: 4.5rem 1fr 4.5rem; }
  .ledger__flow, .ledger__kind { display: none; }
}

/* ============================ 目标卡（可变明暗） ============================ */

/* 颜色全部走变量，两个主题各给一套：
   浅色 = 亮面 + 金黄微光（与其余卡片同族，不再是黑底）；
   深色 = 参考站那种深色面板。 */
.hero {
  position: relative;
  overflow: hidden;
  background-color: var(--hero-bg);
  background-image:
    radial-gradient(circle at 88% 8%,
      color-mix(in srgb, var(--accent) var(--hero-glow), transparent), transparent 38%),
    linear-gradient(var(--hero-grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--hero-grid-line) 1px, transparent 1px);
  background-size: auto, var(--card-grid-size) var(--card-grid-size), var(--card-grid-size) var(--card-grid-size);
  background-position: 0 0, -1px -1px, -1px -1px;
  border-color: var(--hero-border);
  color: var(--hero-ink);
  padding: 0.75rem 1.25rem 0;   /* 原 1rem，顶部收紧 */
  box-shadow: var(--shadow-lg);
}
/* 参考站信号色条：品红 / 金黄 / 青 —— 置于深色卡顶部作为工业标识 */
.hero::before {
  content: "";
  position: absolute; top: 0; left: 0; right: 0;
  height: 3px;
  background-image: var(--signal-strip);
  z-index: 2;
}
.hero__glow {
  position: absolute; inset: -40% 40% 40% -10%;
  background: radial-gradient(60% 60% at 30% 10%,
    color-mix(in srgb, var(--accent) var(--hero-glow), transparent), transparent 70%);
  pointer-events: none;
}
.hero__head { position: relative; display: flex; align-items: center; justify-content: space-between; }
.hero__title { display: flex; align-items: center; gap: 0.438rem; font-size: 0.781rem; font-weight: 600; color: var(--hero-ink); }
.hero__value {
  position: relative;
  font-family: var(--font-mono);
  font-feature-settings: "tnum" 1, "kern" 1;
  font-size: 2.5rem; font-weight: 700;
  letter-spacing: -.035em;
  line-height: 1.05;
  margin-top: 0.438rem;   /* 原 0.625rem */
}
.hero__value .cur { font-family: var(--font); font-size: 1.625rem; font-weight: 600; letter-spacing: 0; margin-right: 2px; }
.hero__sub {
  position: relative;
  display: flex; align-items: center; justify-content: space-between; gap: 0.75rem;
  font-size: 0.688rem; color: var(--hero-ink-2);
  margin-top: 0.375rem;
}
/* 柱状图 */
.chart { position: relative; margin-top: 0.75rem; }   /* 原 1.125rem */
.chart__plot {
  position: relative;
  display: flex; align-items: flex-end;
  gap: 0.25rem;
  height: 6.5rem;                                        /* 原 7.625rem */
  padding-bottom: 0;
}
.bar {
  flex: 1;
  position: relative;
  display: flex; align-items: flex-end;
  height: 100%;
  border-radius: 0.25rem;
}
.bar__fill {
  width: 100%;
  border-radius: 0.25rem 0.25rem 0.188rem 0.188rem;
  background: var(--hero-bar);
  transition: height .5s cubic-bezier(.2,.7,.3,1), background .15s;
  animation: barIn .55s cubic-bezier(.2,.7,.3,1) both;
}
.bar.is-peak .bar__fill { background: var(--accent); }
.bar:hover .bar__fill { background: var(--hero-bar-hover); }
.bar.is-peak:hover .bar__fill { background: var(--accent-glow); }
@keyframes barIn { from { height: 0 !important; } }

.chart__badge {
  position: absolute;
  bottom: 105%; left: 50%;
  transform: translateX(-50%);
  z-index: 3;
  pointer-events: none;
  background: var(--hero-badge);
  color: var(--hero-badge-ink);
  font-size: 0.625rem; font-weight: 600;
  padding: 0.188rem 0.438rem;
  border-radius: 0.375rem;
  white-space: nowrap;
  box-shadow: var(--shadow);
  opacity: 0;
  transition: opacity .16s;
}
/* 数值徽标只在悬浮 / 键盘聚焦时出现（月最大柱也不再常显） */
.bar:hover .chart__badge,
.bar:focus-within .chart__badge,
.bar.is-hover .chart__badge { opacity: 1; }
.chart__badge[hidden] { display: none; }
.chart__badge::after {
  content: "";
  position: absolute; left: 50%; bottom: -0.25rem;
  width: 0.438rem; height: 0.438rem;
  transform: translateX(-50%) rotate(45deg);
  background: inherit;
  border-radius: 1px;
}
.chart__axis {
  display: flex; gap: 0.25rem;
  margin-top: 0.5rem;
  font-size: 0.625rem;
  color: var(--hero-ink-2);
}
.chart__axis span { flex: 1; text-align: center; }
/* 目标线：只保留虚线本身，不再带任何文字标签 */
.chart__target {
  position: absolute; left: 0; right: 0;
  border-top: 1px dashed var(--hero-dash);
  pointer-events: none;
}

.hero__stats {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 0.625rem;
  /* 负边距 + 内边距必须与卡片自身的横向内边距一致，分隔线才能通到卡片边缘 */
  margin: 0.75rem calc(-1 * var(--card-pad-x)) 0;
  padding: 0.625rem var(--card-pad-x) 0.75rem;
  border-top: 1px solid var(--hero-line);
}
/* 只保留一条信息时不必占三栏高度 */
.hero__stats > :only-child { grid-column: 1 / -1; }
/* 达成度：百分比与「还差 / 已达成」并排靠右 */
.hero__sub-right { display: inline-flex; align-items: center; gap: 0.5rem; }
.hero__gap { font-weight: 600; }
.hero__stats dt { font-size: 0.656rem; color: var(--hero-ink-2); }
.hero__stats dd { font-size: 0.938rem; font-weight: 700; letter-spacing: -.02em; margin-top: 0.25rem; }

/* 收入趋势卡：与资源卡同族，但不带金黄微光——同一屏只保留一个视觉焦点。
   上边距与其它区块统一（它跟在兑换卡之后，所以需要自己的 margin-top）。 */
.hero--chart { padding-bottom: var(--card-pad); }
.hero--chart::before { background-image: var(--signal-strip); opacity: .5; }
.chart__scale {
  font-size: 0.688rem;
  color: var(--hero-ink-2);
  font-variant-numeric: tabular-nums;
}
.chart__scale b { color: var(--hero-ink); }

/* ============================ 指标卡 ============================ */

.metrics {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--card-gap);
  margin-top: var(--card-gap);
}
.metric {
  /* 背景统一由上方 .card, .metric 共享规则提供 */
  position: relative;
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow);
  padding: 0.813rem 0.938rem 0.875rem;
  display: flex; flex-direction: column;
  transition: transform .16s, box-shadow .16s;
}
.metric:hover { transform: translateY(-1px); box-shadow: var(--shadow-lg); }
.metric__label { font-size: 0.719rem; font-weight: 600; color: var(--ink); }
/* 「可兑换」小标：特许寻访凭证卡上显示的是可兑换数量，不是持有量，必须一眼看出来 */
.metric__tag {
  margin-left: 0.375rem; padding: 0.0625rem 0.3125rem;
  border-radius: var(--r-full);
  background: var(--surface-3); color: var(--ink-3);
  font-size: 0.594rem; font-weight: 600; letter-spacing: 0;
  vertical-align: 0.0625rem;
}
.metric__spark { display: block; width: 100%; height: 1.625rem; margin: 0.5rem 0 0.625rem; overflow: visible; }
.metric__spark path.line { fill: none; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.metric__spark path.area { stroke: none; }
.metric__value {
  font-family: var(--font-mono);
  font-feature-settings: "tnum" 1;
  font-size: 1.625rem; font-weight: 700; letter-spacing: -.035em; line-height: 1.1;
}
.metric__foot { display: flex; align-items: center; gap: 0.375rem; margin-top: 0.438rem; font-size: 0.656rem; }
.delta { font-weight: 600; }
.delta--up { color: var(--good); }
.delta--down { color: var(--bad); }
.metric__note { color: var(--ink-4); }
.metric__bar { height: 0.25rem; border-radius: var(--r-full); background: var(--surface-3); overflow: hidden; margin-top: 0.625rem; }
.metric__bar i { display: block; height: 100%; border-radius: inherit; }

/* ============================ 两栏 ============================ */

.grid-2 {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: var(--card-gap);
  margin-top: var(--card-gap);
  align-items: stretch;      /* 同一行的卡片等高对齐 */
}

/* 记录页首屏：登记收支（略宽）与官方流水并排。作为视图第一块，不需要上边距。 */
.grid-2--entry {
  grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr);
  margin-top: 0;
}

/* 堆叠进度条 */
.stackbar {
  display: flex; gap: 2px;
  height: 0.375rem;
  margin: 0.813rem 0 0.25rem;
  border-radius: var(--r-full);
  overflow: hidden;
}
.stackbar i { display: block; height: 100%; transition: filter .15s; }
.stackbar i:hover { filter: brightness(1.18); }

/* 表格 */
.table-wrap { margin: 0.5rem -1rem 0; overflow-x: auto; }
.table { width: 100%; font-size: 0.75rem; }
.table th, .table td { padding: 0.563rem 0.625rem; text-align: left; white-space: nowrap; }
.table th:first-child, .table td:first-child { padding-left: 1rem; }
.table th:last-child, .table td:last-child { padding-right: 1rem; }
.table thead th {
  font-size: 0.656rem; font-weight: 500;
  color: var(--ink-4);
  border-bottom: 1px solid var(--line-soft);
  padding-top: 0.375rem; padding-bottom: 0.5rem;
}
.table .num { text-align: right; }
.table tbody tr { border-bottom: 1px solid var(--line-soft); transition: background .14s; }
.table tbody tr:last-child { border-bottom: 0; }
.table tbody tr:hover { background: var(--surface-2); }
.stage { display: flex; align-items: center; gap: 0.563rem; }
.stage__dot { width: 0.5rem; height: 0.5rem; border-radius: 0.188rem; flex: none; }
.stage__name { font-weight: 500; }
.table td.num { font-family: var(--font-mono); font-variant-numeric: tabular-nums; color: var(--ink-2); }
.table td.num.strong { font-weight: 600; color: var(--ink); }
.prob { display: inline-flex; align-items: center; gap: 0.375rem; justify-content: flex-end; }
.prob__track { width: 2.125rem; height: 0.25rem; border-radius: var(--r-full); background: var(--surface-3); overflow: hidden; }
.prob__track i { display: block; height: 100%; border-radius: inherit; }
.prob__val { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-weight: 600; color: var(--ink); min-width: 1.75rem; text-align: right; }

/* 即将成交列表 */
.closing { display: flex; flex-direction: column; margin: 0.375rem -1rem 0; }
.closing__item {
  display: flex; align-items: center; gap: 0.688rem;
  padding: 0.563rem 1rem;
  border-bottom: 1px solid var(--line-soft);
  transition: background .14s;
}
.closing__item:last-child { border-bottom: 0; }
.closing__item:hover { background: var(--surface-2); }
.thumb {
  width: 2.5rem; height: 2rem; flex: none;
  border-radius: 0.438rem;
  border: 1px solid var(--line);
  background: var(--surface-3);
  overflow: hidden;
  position: relative;
  display: grid; place-items: center;
}
.thumb svg { width: 100%; height: 100%; display: block; }
/* 物品图标：256×256 透明 PNG，等比内缩留白，避免贴边 */
.thumb__img {
  width: 1.625rem; height: 1.625rem;
  object-fit: contain;
  display: block;
  image-rendering: auto;
}
.closing__body { flex: 1; min-width: 0; }
.closing__name { font-size: 0.75rem; font-weight: 600; }
.closing__addr { font-size: 0.656rem; color: var(--ink-4); margin-top: 1px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.closing__meta { display: flex; align-items: center; gap: 0.313rem; font-size: 0.656rem; color: var(--ink-4); margin-top: 0.188rem; }
.closing__right { text-align: right; display: flex; flex-direction: column; align-items: flex-end; gap: 0.25rem; }
.closing__amount {
  font-family: var(--font-mono);
  font-feature-settings: "tnum" 1;
  font-size: 0.781rem; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap;
}
.chip {
  display: inline-flex; align-items: center; gap: 0.25rem;
  font-size: 0.625rem; font-weight: 600;
  padding: 0.156rem 0.438rem;
  border-radius: var(--r-full);
  border: 1px solid var(--line);
  background: var(--surface-2);
  color: var(--ink-3);
  white-space: nowrap;
}
.chip__dot { width: 0.313rem; height: 0.313rem; border-radius: 50%; background: currentColor; }
.chip--today { background: var(--accent); border-color: transparent; color: var(--accent-ink); }
.chip--soon { background: var(--surface); color: var(--ink-2); }
.chip--alert { background: var(--bad-soft); border-color: transparent; color: var(--bad); }

/* ============================ 占位视图 ============================ */

.view { display: none; }
/* 切页：160–200ms 淡入 + 2–4px 位移。位移与切页时的平滑回顶是两回事，
   因此这里只做很短的轻微位移，不与滚动叠加成双重移动。 */
.view.is-active { display: block; animation: fadeUp var(--t-base) var(--ease-out-soft) both; }
@keyframes fadeUp { from { opacity: 0; transform: translateY(3px); } }

.placeholder {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow);
  padding: 2.25rem 2rem;
  max-width: 35rem;
}
.placeholder h2 { font-size: 1.063rem; font-weight: 700; letter-spacing: -.02em; }
.placeholder p { color: var(--ink-2); margin: 0.5rem 0 1.125rem; line-height: 1.7; }

.page-foot {
  display: flex; justify-content: space-between; gap: 0.75rem;
  margin-top: 1.125rem; padding: 0 0.25rem;
  font-size: 0.656rem; color: var(--ink-4);
}

/* 临时排查浮层：仅 ?debug 时显示 */
.debug { display: none; }
html[data-debug="1"] .debug {
  display: block;
  position: fixed; inset: 0; z-index: 99;
  margin: 0; padding: 0.625rem;
  overflow: auto;
  background: rgba(255,255,255,.97);
  color: #111; font: 11px/1.5 ui-monospace, Consolas, monospace;
  white-space: pre-wrap;
}

/* ============================ Toast ============================ */

.toast-host {
  position: fixed; z-index: 60;
  bottom: 1.125rem; left: 50%; transform: translateX(-50%);
  display: flex; flex-direction: column; gap: 0.5rem;
  align-items: center;
  pointer-events: none;
}
.toast {
  display: flex; align-items: center; gap: 0.5rem;
  background: var(--ink);
  color: var(--canvas);
  font-size: 0.75rem; font-weight: 500;
  padding: 0.563rem 0.875rem;
  border-radius: var(--r-full);
  box-shadow: var(--shadow-lg);
  animation: toastIn .22s ease both;
}
.toast.is-out { animation: toastOut .2s ease both; }
.toast__dot { width: 0.375rem; height: 0.375rem; border-radius: 50%; background: var(--accent); flex: none; }
@keyframes toastIn { from { opacity: 0; transform: translateY(8px) scale(.98); } }
@keyframes toastOut { to { opacity: 0; transform: translateY(6px) scale(.98); } }

/* ============================ 响应式 ============================ */

.mobile-bar, .nav-scrim { display: none; }

@media (max-width: 1180px) {
  .metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .grid-2 { grid-template-columns: minmax(0, 1fr); }
  /* .grid-2--entry 的选择器更具体，必须显式覆盖，否则窄屏仍挤成两栏 */
  .grid-2--entry { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 900px) {
  .mobile-bar {
    display: flex; align-items: center; gap: 0.625rem;
    position: sticky; top: 0; z-index: 50;
    padding: 0.563rem 0.875rem;
    background: color-mix(in srgb, var(--canvas) 88%, transparent);
    backdrop-filter: blur(10px);
    border-bottom: 1px solid var(--line);
  }
  .mobile-bar__brand { font-weight: 700; font-size: 0.844rem; flex: 1; }
  .nav-scrim {
    display: block;
    position: fixed; inset: 0; z-index: 55;
    background: var(--scrim);
    opacity: 0; pointer-events: none;
    transition: opacity .2s;
  }
  body.nav-open .nav-scrim { opacity: 1; pointer-events: auto; }
  .sidebar {
    position: fixed; z-index: 56; top: 0; left: 0;
    visibility: hidden;
    transform: translateX(-102%);
    transition: transform .24s cubic-bezier(.2,.7,.3,1);
    box-shadow: var(--shadow-lg);
    background: var(--canvas);
    height: 100vh;
  }
  body.nav-open .sidebar { transform: none; visibility: visible; }
  body.nav-open { overflow: hidden; }
  .main { padding: 0.875rem 0.875rem 1.5rem; }
  .topbar { flex-direction: column; align-items: stretch; }
  .topbar__actions { justify-content: flex-end; }
  .hero { padding: var(--card-pad) var(--card-pad-x) 0; }
  .hero__stats { margin-inline: calc(-1 * var(--card-pad-x)); padding-inline: var(--card-pad-x); }
  .hero__value { font-size: 2rem; }
  .chart__plot { height: 6.5rem; }
  .chart__target { display: none; }
  .chart__badge { display: none; }
  .card__foot { margin-inline: -16px; }
  .page-foot { flex-direction: column; gap: 0.25rem; }
}

@media (max-width: 560px) {
  .metrics { grid-template-columns: minmax(0, 1fr); }
  .hero__stats { grid-template-columns: 1fr; gap: 0.5rem; }
  .hero__sub { flex-direction: column; align-items: flex-start; }
  .table--edit th:nth-child(4), .table--edit td:nth-child(4) { display: none; }
}

/* 超窄屏（≤400px）：表格再收一列，避免文案把页面撑宽 */
@media (max-width: 400px) {
  .main { padding: 0.75rem 0.625rem 1.25rem; }
  .card { padding: 0.75rem 0.75rem 0; }
  .card--table { padding-bottom: 0; }
  .hero { padding: var(--card-pad) var(--card-pad-x) 0; }
  .hero__stats { margin-inline: calc(-1 * var(--card-pad-x)); padding-inline: var(--card-pad-x); }
  .card__foot { margin-inline: -12px; padding-inline: 12px; }
  .table { font-size: 0.719rem; }
  .table th, .table td { padding: 0.5rem 0.438rem; }
  .table th:first-child, .table td:first-child { padding-left: 12px; }
  .table th:last-child, .table td:last-child { padding-right: 12px; }
  .table--edit th:nth-child(2), .table--edit td:nth-child(2) { display: none; }
  .metric__value { font-size: 1.438rem; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

/* Data integrity controls and real transaction entry. */
.storage-bar { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:.5rem; margin-bottom:1rem; color:var(--ink-3); font-size:.75rem; }
.storage-bar .is-error { color:var(--bad); font-weight:600; }
.data-card { padding-bottom:1rem; margin-bottom:1rem; }
/* ================= 输入控件：全站统一 =================
   以前只有 .data-form 内部的输入框有样式，搜索框 / 文件选择 / 文本域各写各的。
   这里按元素统一，任何新加的输入都自动获得一致的观感。 */
input[type="text"], input[type="search"], input[type="number"], input[type="password"],
input[type="tel"], input[type="datetime-local"], input[type="date"], input[type="time"],
input:not([type]), select, textarea {
  min-height: var(--control-h);
  padding: 0.4rem 0.62rem;
  border: 1px solid var(--line);
  border-radius: var(--control-r);
  background: var(--surface);
  color: var(--ink);
  font: inherit;
  font-size: 0.8rem;
  box-sizing: border-box;
  min-width: 0;
  transition: border-color .15s, box-shadow .15s, background .15s;
}
input[type="text"]:hover, input[type="search"]:hover, input[type="number"]:hover,
input[type="password"]:hover, input[type="tel"]:hover,
input[type="datetime-local"]:hover, input[type="date"]:hover, input[type="time"]:hover,
input:not([type]):hover,
select:hover, textarea:hover { border-color: var(--line-strong); }
input[type="text"]:focus-visible, input[type="search"]:focus-visible,
input[type="number"]:focus-visible, input[type="password"]:focus-visible,
input[type="tel"]:focus-visible,
input[type="datetime-local"]:focus-visible, input[type="date"]:focus-visible,
input[type="time"]:focus-visible,
input:not([type]):focus-visible,
select:focus-visible, textarea:focus-visible {
  outline: none;
  border-color: var(--accent);
  box-shadow: var(--focus-ring);
}
input::placeholder, textarea::placeholder { color: var(--ink-4); }
input:disabled, select:disabled, textarea:disabled {
  background: var(--surface-2);
  color: var(--ink-3);
  cursor: not-allowed;
}
/* 日期/时间控件：内部各段与日历按钮都要跟随主题，否则深色下会是黑字压深底 */
input[type="datetime-local"], input[type="date"], input[type="time"] { cursor: text; }
input[type="datetime-local"]::-webkit-datetime-edit,
input[type="date"]::-webkit-datetime-edit,
input[type="time"]::-webkit-datetime-edit { color: inherit; }
input[type="datetime-local"]::-webkit-calendar-picker-indicator,
input[type="date"]::-webkit-calendar-picker-indicator,
input[type="time"]::-webkit-calendar-picker-indicator {
  cursor: pointer;
  opacity: .6;
  transition: opacity .15s;
}
input[type="datetime-local"]::-webkit-calendar-picker-indicator:hover,
input[type="date"]::-webkit-calendar-picker-indicator:hover,
input[type="time"]::-webkit-calendar-picker-indicator:hover { opacity: 1; }

/* 下拉：去掉系统外观，换成统一的细箭头 */
select {
  appearance: none;
  padding-right: 1.7rem;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='%238a8f98' stroke-width='1.6' stroke-linecap='round'><path d='M3 4.6 6 7.6 9 4.6'/></svg>");
  background-repeat: no-repeat;
  background-position: right .5rem center;
  background-size: .72rem;
}

textarea {
  min-height: 4.5rem;
  resize: vertical;
  line-height: 1.55;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 0.76rem;
}

/* 文件选择：把系统按钮改造成和 .btn 一致的观感 */
input[type="file"] { padding: 0.28rem; font-size: 0.74rem; color: var(--ink-3); }
input[type="file"]::file-selector-button {
  margin-right: 0.55rem;
  padding: 0.32rem 0.7rem;
  border: 1px solid var(--line);
  border-radius: var(--r-full);
  background: var(--surface-2);
  color: var(--ink-2);
  font: inherit;
  font-size: 0.72rem;
  font-weight: 600;
  cursor: pointer;
  transition: border-color .15s, color .15s, background .15s;
}
input[type="file"]::file-selector-button:hover {
  border-color: var(--line-strong);
  background: var(--surface-3);
  color: var(--ink);
}

/* 表单行：标签在上、控件在下，标签用小型说明字 */
.data-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: .75rem; margin: 1rem 0; }
.data-form label,
.field {
  display: flex; flex-direction: column; gap: .35rem;
  flex: 1 1 9rem; min-width: 0;
  font-size: .7rem; font-weight: 600; letter-spacing: .02em;
  color: var(--ink-3);
}
.data-form input,
.data-form select,
.data-form textarea { width: 100%; }
.data-form input[type="file"] { flex: 1 1 auto; }
/* 表单行里的按钮是「最后的动作」：不允许被 flex 拉长（宽度仍由内容决定） */
.data-form > .btn { flex: 0 0 auto; }

/* 折叠区：统一的箭头指示 */
details > summary {
  display: flex; align-items: center; gap: .4rem;
  cursor: pointer; list-style: none;
  color: var(--ink-3);
  transition: color .15s;
}
details > summary::-webkit-details-marker { display: none; }
details > summary::before {
  content: '';
  width: .34rem; height: .34rem;
  border-right: 1.6px solid currentColor;
  border-bottom: 1.6px solid currentColor;
  transform: rotate(-45deg);
  transition: transform .16s ease;
}
details[open] > summary::before { transform: rotate(45deg); }
details > summary:hover { color: var(--ink); }
details > summary:focus-visible { outline: none; box-shadow: var(--focus-ring); border-radius: var(--r-sm); }
.records-list { list-style:none; padding:0; margin:1rem 0; }
#backupTextPanel { margin:1rem 0; font-size:.75rem; }
#backupText { display:block; width:100%; box-sizing:border-box; margin-top:.5rem; padding:.5rem; border:1px solid var(--line); background:var(--surface); color:var(--ink); font: .7rem/1.5 var(--font-mono); }
.record-item { display:flex; flex-wrap:wrap; gap:.5rem 1rem; padding:.75rem 0; border-bottom:1px solid var(--line); font-size:.75rem; overflow-wrap:anywhere; }
.record-item span:last-child { flex-basis:100%; color:var(--ink-3); }
.nav__item:disabled { opacity:.45; cursor:not-allowed; }
.stackbar [hidden] { display:none; }
@media (max-width:640px) {
  /* 手机上输入框与「填满」各占满一行，避免挤成难读的小控件 */
  .conv-row__amount { flex: 1 1 100%; justify-content: flex-start; }
  .conv-row__field { flex: 1 1 100%; }
  .conv-row__input { width:100%; min-width:0; }
  .conv-row__use { width: 100%; }
  .card__actions { flex-wrap:wrap; }
  .data-form label { flex-basis:100%; }
}
