/* Ogood Calc design system v0.1.2 — source of truth: docs/design/DESIGN.md
   Only semantic tokens below this block; no raw hex in component rules. */

/* ---------- tokens ---------- */
:root {
  --page:#f5f5f3; --card:#ffffff; --soft:#efefec; --field:#ffffff;
  --ink:#18181b; --ink-2:#3d3d43; --muted:#55555c;
  --line:rgb(0 0 0 / .08); --line-strong:rgb(0 0 0 / .16);
  --accent:#3e63dd; --on-accent:#ffffff; --money:#0f7f57; --warn:#a66a00; --danger:#c9363c; --brand:#806040;
  --dot-mycard:#e8833a; --dot-paycools:#1fa971; --dot-vollpay:#1fa971; --dot-payproo:#3e63dd; --dot-gash:#8b5cf6; --dot-payletter:#0e9fb8; --dot-pay4game:#d4537e;
  --shadow-card:0 1px 2px rgb(0 0 0 / .04), 0 1px 1px rgb(0 0 0 / .02);
  --shadow-pop:0 12px 32px -8px rgb(0 0 0 / .22), 0 0 0 1px rgb(0 0 0 / .06);
  --sans:-apple-system,"SF Pro Text","PingFang SC","Microsoft YaHei","Helvetica Neue",sans-serif;
  --mono:"SF Mono",Menlo,Consolas,monospace;
  --r-sm:6px; --r-md:10px; --r-lg:14px;
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:20px; --s6:24px; --s8:32px;
  --fs-title:20px; --fs-card:15px; --fs-body:14px; --fs-label:12px; --fs-kpi:26px; --fs-rate:20px;
  --row-h:40px; --max-w:1240px; --max-w-wide:1600px;
  --fast:120ms; --ease:cubic-bezier(.2,0,0,1);
  color-scheme: light;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --page:#0d0d10; --card:#151518; --soft:#1d1d21; --field:#101013;
    --ink:#f3f3f5; --ink-2:#c4c4ca; --muted:#9a9aa3;
    --line:rgb(255 255 255 / .09); --line-strong:rgb(255 255 255 / .18);
    --accent:#7b96ff; --on-accent:#0d0d10; --money:#34c48b; --warn:#f6b100; --danger:#ff6b70; --brand:#c9a67d;
    --shadow-card:none; --shadow-pop:0 12px 32px -8px rgb(0 0 0 / .6), 0 0 0 1px rgb(255 255 255 / .08);
    color-scheme: dark;
  }
}
:root[data-theme="dark"] {
  --page:#0d0d10; --card:#151518; --soft:#1d1d21; --field:#101013;
  --ink:#f3f3f5; --ink-2:#c4c4ca; --muted:#9a9aa3;
  --line:rgb(255 255 255 / .09); --line-strong:rgb(255 255 255 / .18);
  --accent:#7b96ff; --on-accent:#0d0d10; --money:#34c48b; --warn:#f6b100; --danger:#ff6b70; --brand:#c9a67d;
  --shadow-card:none; --shadow-pop:0 12px 32px -8px rgb(0 0 0 / .6), 0 0 0 1px rgb(255 255 255 / .08);
  color-scheme: dark;
}

/* ---------- base ---------- */
*,*::before,*::after { box-sizing:border-box; margin:0; padding:0; }
body { font:400 var(--fs-body)/20px var(--sans); background:var(--page); color:var(--ink); -webkit-font-smoothing:antialiased; }
a { color:var(--accent); text-decoration:none; }
a:hover { text-decoration:underline; }
:focus-visible { outline:2px solid var(--accent); outline-offset:2px; border-radius:var(--r-sm); }
/* iOS Safari 聚焦字号 <16px 的输入框会放大页面（2026-07-09 iPad 事故）；双击缩放延迟一并去掉 */
button, input, select, textarea, a { touch-action:manipulation; }
@media (max-width:1200px), (pointer:coarse) {
  input, select, textarea { font-size:16px !important; }
  /* iOS 仅需放大 <16px 输入框，大号费率输入保持 20px，避免全局规则压小 */
  input.c-rate__val, .c-rate__val input { font-size:var(--fs-rate) !important; }
  .c-field.c-field--sm input { width:88px; }
  .c-rate--boc .c-field--sm input { font-size:16px !important; } /* 两腿小输入框 110px 宽，16px 已够防 iOS 放大 */
  .c-field--lg input { font-size:18px !important; }
}
.c-num { font-family:var(--mono); font-variant-numeric:tabular-nums; }
.c-unit { color:var(--muted); font-size:var(--fs-label); white-space:nowrap; }
.c-muted { color:var(--muted); }
.is-money { color:var(--money); } .is-warn { color:var(--warn); } .is-danger { color:var(--danger); } .is-accent { color:var(--accent); }

/* ---------- layout ---------- */
.c-page { max-width:var(--max-w); margin:0 auto; padding:var(--s6) var(--s5) var(--s8); }
.c-page--wide { max-width:var(--max-w-wide); }
.c-grid { display:grid; grid-template-columns:repeat(12,1fr); gap:var(--s4); }
.c-col-7 { grid-column:span 7; } .c-col-5 { grid-column:span 5; } .c-col-12 { grid-column:span 12; }
.c-stack { display:flex; flex-direction:column; gap:var(--s4); }
@media (max-width:1023px) { .c-col-7,.c-col-5 { grid-column:span 12; } }

/* ---------- atoms ---------- */
.c-btn { display:inline-flex; align-items:center; gap:6px; height:32px; padding:0 var(--s3); border-radius:var(--r-sm);
  border:1px solid var(--line-strong); background:var(--card); color:var(--ink); font:500 13px/1 var(--sans); cursor:pointer;
  white-space:nowrap; transition:background var(--fast) var(--ease); }
.c-btn:hover { background:var(--soft); text-decoration:none; }
.c-btn--primary { background:var(--accent); border-color:var(--accent); color:var(--on-accent); }
.c-btn--primary:hover { background:var(--accent); filter:brightness(.92); }
.c-btn--ghost { border-color:transparent; background:transparent; color:var(--ink-2); }
.c-btn--ghost:hover { background:var(--soft); }
.c-btn--icon { width:28px; height:28px; padding:0; justify-content:center; }
.c-btn:disabled { opacity:.4; cursor:not-allowed; }

.c-field { display:inline-flex; align-items:center; gap:6px; }
.c-field input, .c-select { height:32px; border:1px solid var(--line-strong); border-radius:var(--r-sm); background:var(--field);
  color:var(--ink); font:500 var(--fs-body)/1 var(--mono); font-variant-numeric:tabular-nums; padding:0 var(--s2); }
.c-field input { width:120px; text-align:right; }
.c-field input:focus, .c-select:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent); }
.c-field--sm input { width:72px; height:28px; font-size:13px; }
.c-field--lg input { width:160px; height:40px; font-size:18px; font-weight:600; }
.c-select { font-family:var(--sans); padding-right:28px; appearance:none; min-width:220px; cursor:pointer;
  background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);
  background-position:calc(100% - 15px) 14px, calc(100% - 10px) 14px; background-size:5px 5px; background-repeat:no-repeat; }
input[type=number]::-webkit-inner-spin-button { opacity:.3; }

.c-badge { display:inline-flex; align-items:center; gap:5px; height:20px; padding:0 8px; border-radius:999px; font:500 11px/1 var(--sans);
  background:var(--soft); color:var(--ink-2); white-space:nowrap; vertical-align:middle; }
.c-badge--level { background:color-mix(in srgb, var(--accent) 12%, transparent); color:var(--accent); font-weight:600; }
.c-badge--manual { background:color-mix(in srgb, var(--warn) 14%, transparent); color:var(--warn); }
.c-badge--src { background:transparent; border:1px solid var(--line-strong); color:var(--muted); }
.c-badge[class*="c-badge--p-"]::before { content:""; width:8px; height:8px; border-radius:50%; background:var(--dot,var(--muted)); }
.c-badge--p-mycard { --dot:var(--dot-mycard); } .c-badge--p-paycools { --dot:var(--dot-paycools); } .c-badge--p-vollpay { --dot:var(--dot-vollpay); }
.c-badge--p-payproo { --dot:var(--dot-payproo); } .c-badge--p-gash { --dot:var(--dot-gash); } .c-badge--p-payletter { --dot:var(--dot-payletter); } .c-badge--p-pay4game { --dot:var(--dot-pay4game); }

.c-fresh { display:inline-flex; align-items:center; gap:6px; font-size:var(--fs-label); color:var(--muted); white-space:nowrap; }
.c-fresh::before { content:""; width:7px; height:7px; border-radius:50%; background:var(--money); }
.c-fresh--aging::before { background:var(--warn); }
.c-fresh--stale { color:var(--danger); } .c-fresh--stale::before { background:var(--danger); }

.c-check { width:16px; height:16px; accent-color:var(--accent); cursor:pointer; }
.c-link { font-size:var(--fs-label); white-space:nowrap; }

/* ---------- card ---------- */
.c-card { background:var(--card); border:1px solid var(--line); border-radius:var(--r-lg); box-shadow:var(--shadow-card); padding:var(--s5); }
.c-card__head { display:flex; align-items:center; justify-content:space-between; gap:var(--s3); flex-wrap:wrap; margin-bottom:var(--s4); }
.c-card__title { font:600 var(--fs-card)/22px var(--sans); color:var(--ink); display:flex; align-items:center; gap:var(--s2); }
.c-card__tools { display:flex; align-items:center; gap:var(--s2); flex-wrap:wrap; }
.c-card--flush { padding:0; overflow:hidden; } .c-card--flush .c-card__head { padding:var(--s4) var(--s5) 0; }

/* ---------- organism.page-head ---------- */
.c-head { display:flex; align-items:center; justify-content:space-between; gap:var(--s4); flex-wrap:wrap; margin-bottom:var(--s5); }
.c-head__title { display:flex; align-items:center; gap:var(--s2); flex-wrap:wrap; }
.c-head__title h1 { font:650 var(--fs-title)/28px var(--sans); letter-spacing:-.01em; }
.c-head__sub { color:var(--muted); font-size:13px; }
.c-flag { font-size:22px; line-height:1; }
.c-head__tools { display:flex; align-items:center; gap:var(--s2); flex-wrap:wrap; }

/* ---------- molecule.kpi / organism.kpi-strip ---------- */
.c-kpis { display:grid; grid-template-columns:repeat(5,1fr); background:var(--card); border:1px solid var(--line); border-radius:var(--r-lg);
  box-shadow:var(--shadow-card); margin-bottom:var(--s4); }
.c-kpi { padding:var(--s4) var(--s5); border-left:1px solid var(--line); min-width:0; }
.c-kpi:first-child { border-left:0; }
.c-kpi__label { font-size:var(--fs-label); color:var(--muted); font-weight:500; margin-bottom:6px; }
.c-kpi__value { font:650 var(--fs-kpi)/32px var(--mono); font-variant-numeric:tabular-nums; letter-spacing:-.02em; white-space:nowrap; }
.c-kpi__sub { font-size:var(--fs-label); color:var(--muted); margin-top:4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
@media (max-width:1023px) { .c-kpis { grid-template-columns:repeat(3,1fr); } .c-kpi:nth-child(4) { border-left:0; } .c-kpi:nth-child(n+4) { border-top:1px solid var(--line); } }
@media (max-width:639px) { .c-kpis { grid-template-columns:repeat(2,1fr); } .c-kpi { border-left:0; border-top:1px solid var(--line); } .c-kpi:nth-child(-n+2) { border-top:0; } .c-kpi:nth-child(even) { border-left:1px solid var(--line); } .c-kpi:first-child { grid-column:span 2; } .c-kpi:nth-child(2) { border-top:1px solid var(--line); border-left:0; } .c-kpi:nth-child(3) { border-left:1px solid var(--line); } .c-kpi:nth-child(4) { border-left:0; } }

/* ---------- molecule.rate-row ---------- */
.c-rates { display:flex; flex-direction:column; }
.c-rate { display:grid; grid-template-columns:minmax(0,1fr) auto 64px auto; align-items:center; column-gap:var(--s3); min-height:52px; padding:var(--s2) 0; border-top:1px solid var(--line); }
.c-rate:first-child { border-top:0; }
.c-rate__name { font-weight:500; display:flex; align-items:center; gap:var(--s2); flex-wrap:wrap; min-width:0; }
.c-rate__meta { grid-column:1; display:flex; gap:var(--s3); align-items:center; margin-top:2px; }
.c-rate__val { font:650 var(--fs-rate)/26px var(--mono); font-variant-numeric:tabular-nums; text-align:right; }
.c-rate__val input { font:inherit; width:120px; text-align:right; height:34px; border:1px solid var(--line-strong); border-radius:var(--r-sm); background:var(--field); color:var(--ink); padding:0 var(--s2); }
.c-rate__left { display:flex; flex-direction:column; min-width:0; }

/* ---------- molecule.fx-port ---------- */
.c-port { display:flex; flex-direction:column; gap:var(--s3); }
.c-port + .c-port { border-top:1px solid var(--line); padding-top:var(--s4); margin-top:var(--s4); }
.c-port__label { font:600 13px/18px var(--sans); color:var(--ink-2); display:flex; align-items:center; gap:var(--s2); }
.c-port__row { display:flex; align-items:center; gap:var(--s3); flex-wrap:wrap; }
.c-port__eff { display:flex; align-items:baseline; gap:6px; margin-left:auto; }
.c-port__eff .c-num { font-size:22px; font-weight:650; }
.c-port--quote .c-port__eff .c-num { color:var(--accent); }
.c-formula { font-size:var(--fs-label); color:var(--muted); }
.c-formula summary { cursor:pointer; list-style:none; display:inline-flex; align-items:center; gap:4px; }
.c-formula summary::-webkit-details-marker { display:none; }
.c-formula summary::before { content:"ⓘ"; }
.c-formula[open] > div { margin-top:6px; font-family:var(--mono); line-height:18px; }

/* ---------- molecule.segmented ---------- */
.c-seg { display:inline-flex; padding:2px; background:var(--soft); border-radius:var(--r-sm); gap:2px; }
.c-seg__label { font-size:var(--fs-label); color:var(--muted); margin-right:6px; align-self:center; }
.c-seg button { height:28px; padding:0 10px; border:0; border-radius:5px; background:transparent; color:var(--ink-2); font:500 13px/1 var(--mono); cursor:pointer; }
.c-seg button:hover { background:color-mix(in srgb, var(--card) 70%, transparent); }
.c-seg button[aria-pressed="true"] { background:var(--card); color:var(--ink); box-shadow:0 1px 2px rgb(0 0 0 / .12); }

/* ---------- organism.channel-table ---------- */
.c-table-wrap { overflow-x:auto; -webkit-overflow-scrolling:touch; }
.c-table { width:100%; border-collapse:separate; border-spacing:0; font-size:13px; }
.c-table th, .c-table td { height:var(--row-h); padding:0 var(--s3); border-bottom:1px solid var(--line); white-space:nowrap; text-align:left; vertical-align:middle; }
.c-table thead th { height:30px; font:500 var(--fs-label)/16px var(--sans); color:var(--muted); background:var(--card); }
.c-table thead tr.c-table__groups th { height:28px; color:var(--ink-2); font-weight:600; border-bottom:0; padding-top:var(--s2); }
.c-table .num { text-align:right; font-family:var(--mono); font-variant-numeric:tabular-nums; }
.c-table td.num .c-field input { text-align:right; }
.c-table .c-sep { border-left:1px solid var(--line-strong); }
.c-table tbody tr:hover td { background:color-mix(in srgb, var(--soft) 60%, transparent); }
.c-table tr.c-group td { height:30px; background:var(--page); color:var(--muted); font:600 var(--fs-label)/16px var(--sans); }
.c-table td.c-name { font-weight:500; position:sticky; left:0; background:var(--card); z-index:0; }
.c-table tr:hover td.c-name { background:var(--soft); }
.c-table td.c-note { color:var(--muted); font-size:var(--fs-label); }
.c-table tr.is-off td:not(:first-child) { opacity:.55; }
.c-table td.c-dash, .c-table .c-dash { color:var(--muted); }
.c-table tfoot td { border-bottom:0; color:var(--muted); font-size:var(--fs-label); height:auto; padding:var(--s3); white-space:normal; }
.c-table td:first-child, .c-table th:first-child { padding-left:var(--s5); }
.c-table td:last-child, .c-table th:last-child { padding-right:var(--s5); }

/* molecule.margin */
.c-margin { display:inline-flex; align-items:center; justify-content:flex-end; gap:4px; min-width:68px; padding:3px 6px; border-radius:5px; font-weight:600; }
.c-margin.is-ok { color:var(--money); }
.c-margin.is-low { color:var(--warn); background:color-mix(in srgb, var(--warn) 11%, transparent); }
.c-margin.is-low::before { content:"!"; font-weight:700; }
.c-margin.is-loss { color:var(--danger); background:color-mix(in srgb, var(--danger) 11%, transparent); }
.c-margin.is-loss::before { content:"▼"; font-size:10px; }
/* 韩国报价毛利硬底线（> 2.0%）：页面实时计算击穿底线标红，只做提示，拦截在产出接口 */
.c-margin.is-floor { color:var(--danger); background:color-mix(in srgb, var(--danger) 15%, transparent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--danger) 45%, transparent); }
.c-margin.is-floor::before { content:"✕"; font-size:10px; font-weight:700; }

/* dedup bar (L2) */
.c-dedup { display:flex; align-items:center; gap:var(--s3); flex-wrap:wrap; padding:var(--s3) var(--s5); border-top:1px solid var(--line); border-bottom:1px solid var(--line); background:var(--page); font-size:13px; }
.c-dedup__count { font-weight:600; }

/* ---------- organism.dialog ---------- */
.c-dialog-backdrop { position:fixed; inset:0; z-index:9999; background:rgb(0 0 0 / .45); display:flex; align-items:center; justify-content:center; padding:var(--s4); }
.c-dialog { background:var(--card); border-radius:var(--r-lg); box-shadow:var(--shadow-pop); width:min(560px,100%); max-height:92vh; overflow:auto; }
.c-dialog__head { display:flex; justify-content:space-between; align-items:flex-start; gap:var(--s3); padding:var(--s5) var(--s5) var(--s3); }
.c-dialog__title { font:600 16px/22px var(--sans); }
.c-dialog__sub { color:var(--muted); font-size:var(--fs-label); margin-top:2px; }
.c-dialog__body { padding:0 var(--s5); }
.c-dialog__foot { display:flex; justify-content:flex-end; gap:var(--s2); padding:var(--s4) var(--s5); border-top:1px solid var(--line); margin-top:var(--s3); position:sticky; bottom:0; background:var(--card); }

/* ---------- footer ---------- */
.c-foot { margin-top:var(--s5); color:var(--muted); font-size:var(--fs-label); display:flex; gap:var(--s4); flex-wrap:wrap; justify-content:space-between; }

@media (max-width:639px) {
  .c-page { padding:var(--s4) var(--s3) var(--s6); }
  .c-card { padding:var(--s4); }
  .c-rate { grid-template-columns:minmax(0,1fr) auto; } .c-rate > .c-unit, .c-rate .c-link:not(.c-link--modal) { display:none; }
  #rateCards .c-rate .cost-source-tag { grid-column:2; grid-row:2; justify-self:end; }
  .c-port__eff { margin-left:0; }
  .c-select { min-width:0; width:100%; }
}
@media (prefers-reduced-motion:reduce) { * { transition:none !important; } }

/* ---------- v0.1.1 additions ---------- */
.c-fresh--ok::before { background:var(--money); }
.c-badge--auto { background:var(--soft); color:var(--muted); }
.c-port__label small { color:var(--muted); font:400 var(--fs-label)/16px var(--sans); }
.c-port--cost .c-port__eff .c-num { color:var(--ink); }
.c-table thead tr.c-table__groups th { box-sizing:border-box; }
.c-table thead tr.c-table__groups th { background:var(--card); }
.c-table tbody tr.c-group td { background:var(--page); }
.c-grid + .c-card { margin-top:var(--s4); }
.c-card--flush > .c-table-wrap { margin-top:var(--s3); }
.c-kpis .c-field--lg input { width:100%; max-width:160px; }
.c-dialog .c-field input { width:100%; }
.c-dialog > .c-dialog__body > .c-field,
.c-dialog .c-rate:not(.c-rate--boc) .c-rate__val,
.c-dialog .c-rate:not(.c-rate--boc) .c-field { width:100%; }
.c-dialog .c-rate:not(.c-rate--boc) .c-rate__val { grid-column:2/-1; }
.c-name strong { font-weight:500; }
.c-margin--na, .c-table .num.c-dash { color:var(--muted); }
.c-kpi__value.c-dash { color:var(--muted); }
.c-rate--boc { grid-template-columns:1fr; row-gap:var(--s2); }
.c-rate--boc .c-rate__val { grid-column:1; text-align:left; }
.c-rate--boc .c-port__row { flex-wrap:nowrap; }
.c-rate--boc .c-field--sm input { width:110px; font-size:16px; }
.c-rate--boc #rmi_bocCrossResult { font:650 var(--fs-rate)/26px var(--mono); }
@media (max-width:1023px) { .c-seg, .c-seg--wrap { flex-wrap:wrap; } }

/* 毛利率单元格直接挂在 td 上时保持表格布局 */
.c-table td.c-margin { display:table-cell; border-radius:0; min-width:0; text-align:right; }

/* 成本口手工标记（updateMcCostRateBadge 插在值元素后面）：不占栅格列，跟在数值后 */
#rateCards .c-rate > .c-unit { grid-column:3; grid-row:1; }
.c-rate .cost-source-tag { grid-column:4; grid-row:1; font-size:11px; color:var(--muted); white-space:nowrap; }
.c-rate .cost-source-tag:empty { display:none; }
.c-rate .cost-source-tag.src-manual, .c-field .cost-source-tag.src-manual { color:var(--warn); }
.c-rate .cost-source-tag.src-auto, .c-field .cost-source-tag.src-auto { color:var(--accent); }
.c-field .cost-source-tag { font-size:10px; white-space:nowrap; }

/* 弹窗提示颜色由脚本写在内联样式中，仅此处用 !important 覆盖以适配主题 token */
.c-dialog > #mcRfNote { padding:0 var(--s5) var(--s3); margin-top:0 !important; color:var(--muted) !important; }
#mcRfNote span:first-child, #rmBatchNote [style*="4ade80"] { color:var(--money) !important; }
#mcRfNote span + span, #rmBatchNote [style*="fbbf24"] { color:var(--warn) !important; }
#rmBatchNote [style*="f87171"] { color:var(--danger) !important; }
#rmBatchNote [style*="8b8fa3"] { color:var(--muted) !important; }

/* ---------- v0.1.2 additions ---------- */
.c-page--pp .c-card--warn{border-color:color-mix(in srgb,var(--warn) 35%,transparent)}
.c-page--pp .c-card--info{border-color:color-mix(in srgb,var(--accent) 30%,transparent)}
.c-page--pp > .c-card + .c-card { margin-top:var(--s4); }
.c-page--pp .c-card--flush > .c-dedup { border-top:0; margin-bottom:var(--s3); }
.c-page--pp .c-card--flush > .c-dedup + .c-table-wrap { margin-top:0; }
.c-page--pp .cost-source-tag { font-size:11px; color:var(--muted); white-space:nowrap; }
.c-page--pp .cost-source-tag.src-manual { color:var(--warn); }
.c-page--pp .cost-source-tag.src-auto { color:var(--accent); }
.c-page--pp .c-rate > .chip-label { grid-column:1; grid-row:1; }
.c-page--pp .c-rate > .chip-value { grid-column:2/-1; grid-row:1; }
.c-page--pp .c-rate > .chip-source { grid-column:1/-1; grid-row:2; }
.c-page--pp .c-rate > .c-btn { grid-column:-2/-1; grid-row:2; justify-self:end; }
.c-page--pp .c-rate input.c-rate__val { width:120px; height:34px; padding:0 var(--s2); border:1px solid var(--line-strong); border-radius:var(--r-sm); background:var(--field); color:var(--ink); text-align:right; justify-self:end; }
.c-page--pp .c-rate--fixed .c-rate__name { color:var(--warn); }
.c-page--pp .bank-link { color:var(--accent); font-size:var(--fs-label); white-space:nowrap; }
.c-page--pp .c-warn-text { color:var(--warn); font-size:var(--fs-label); line-height:20px; }
.c-page--pp .c-port__note { color:var(--warn); font-size:var(--fs-label); line-height:20px; }
.c-page--pp .c-dedup .dedup-badge { display:inline-flex; align-items:center; height:24px; padding:0 10px; border-radius:999px; font:500 var(--fs-label)/1 var(--sans); }
.c-page--pp .dedup-badge.pending { color:var(--muted); background:var(--soft); }
.c-page--pp .dedup-badge.confirmed { color:var(--money); background:color-mix(in srgb, var(--money) 12%, transparent); }
.c-page--pp .dedup-badge.stale { color:var(--warn); background:color-mix(in srgb, var(--warn) 12%, transparent); }
.c-page--pp .dedup-badge.err { color:var(--danger); background:color-mix(in srgb, var(--danger) 12%, transparent); }
.c-page--pp .c-table .c-check { display:block; margin:0 auto; }
.c-page--pp #quoteLabelSmall { display:block; }
.c-page--pp #quoteLabelSmall span[style*="f59e0b"] { color:var(--warn) !important; background:color-mix(in srgb, var(--warn) 12%, transparent) !important; }
.c-page--pp #quoteLabelSmall span[style*="8b8fa3"] { color:var(--muted) !important; }
.c-page--pp #rmLocalBankRows > div { margin-bottom:var(--s3) !important; }
.c-page--pp #rmLocalBankRows > div > div { color:var(--muted) !important; font-size:var(--fs-label) !important; line-height:18px; }
.c-page--pp #rmLocalBankRows > div > div a { color:var(--accent) !important; font-size:var(--fs-label) !important; }
.c-page--pp #rmLocalBankRows input { width:100% !important; height:36px !important; padding:0 var(--s2) !important; border:1px solid var(--line-strong) !important; border-radius:var(--r-sm) !important; background:var(--field) !important; color:var(--ink) !important; font:500 var(--fs-body)/1 var(--mono) !important; text-align:right !important; }
@media (max-width:1200px), (pointer:coarse) { .c-page--pp #rmLocalBankRows input { font-size:16px !important; } }

/* rmLoad()（受保护）写入的提示 span 带白色内联色，原配实心按钮；在新按钮上改为继承色 */
.c-page--pp #btnRmBatch span[style] { font-size:var(--fs-label) !important; color: inherit !important; opacity: .7; }
.c-page--pp .c-rate:has(#rmi_bocLocal[style*="display: none"]),
.c-page--pp .c-rate:has(#rmi_bocLocal[style*="display:none"]) { display:none; }

/* ---------- v0.1.3 additions: RU calculator ---------- */
/* RU 旧脚本仍读取这些变量名；--card/--accent 直接沿用 calc.css token，避免自引用失效。 */
.c-page--ru {
  --bg:var(--page); --border:var(--line); --text:var(--ink); --text-dim:var(--muted);
  --accent-hover:color-mix(in srgb, var(--accent) 85%, #000); --green:var(--money); --red:var(--danger); --orange:var(--warn);
}
.c-page--ru > .c-card { margin-top:var(--s4); }
.c-page--ru > .c-grid { margin-bottom:var(--s4); }
/* .card 仅作 setSettleMode closest('.card') 的钩子，样式由 .c-card 提供 */
.c-page--ru .c-note { color:var(--muted); font-size:var(--fs-label); }
.c-page--ru .c-rate .c-fresh:empty { display:none; }
.c-page--ru .c-rate .cost-source-tag,
.c-page--ru .c-rate #cbrUsdTag { grid-column:2; grid-row:2; justify-self:end; }
.c-page--ru .c-rate > .c-unit { grid-column:3; grid-row:1; }
.c-page--ru .c-rate > .jump-btn { grid-column:4; grid-row:1; justify-self:end; margin-top:0; }
.c-page--ru .cost-source-tag:empty { display:none; }
.c-page--ru .cost-source-tag.src-auto {
  color:var(--accent); background:color-mix(in srgb, var(--accent) 12%, transparent);
}
.c-page--ru .tag-fixed,
.c-page--ru .cost-source-tag.src-locked {
  color:var(--accent); background:color-mix(in srgb, var(--accent) 10%, transparent);
}
.c-page--ru .rate-input[readonly] { opacity:.6; cursor:not-allowed; }
.c-page--ru .c-table td input:not([type="checkbox"]) { width:75px; text-align:right; }
.c-page--ru .c-table td .c-field input { width:75px; }
.c-page--ru .c-table td .bm-hint {
  display:inline-block; margin-left:4px; color:var(--muted); font-size:10px; cursor:pointer;
}
.c-page--ru .c-table td .bm-detail {
  margin-top:3px; color:var(--muted); font-size:10px; white-space:normal;
}
.c-page--ru .c-table .c-check { display:block; width:16px; height:16px; margin:0 auto; }
.c-page--ru input[type="number"]::-webkit-outer-spin-button,
.c-page--ru input[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance:none; margin:0;
}
.c-page--ru input[type="number"] { -moz-appearance:textfield; }
.c-page--ru #quoteLabelSmall { display:block; }
.c-page--ru #rmBatchNote { margin-top:var(--s3); }

/* setSettleMode 由受保护脚本写入内联色：仅定向两枚结算按钮覆盖，不影响六档目标利润。 */
.c-page--ru #btnSettleUSD,
.c-page--ru #btnSettleCNH {
  background:transparent!important; color:var(--ink-2)!important;
  border:1px solid transparent!important; font-weight:500!important;
}
.c-page--ru #btnSettleUSD:not([aria-pressed="true"]):hover,
.c-page--ru #btnSettleCNH:not([aria-pressed="true"]):hover {
  background:color-mix(in srgb, var(--card) 70%, transparent)!important;
}
.c-page--ru #btnSettleUSD[style*="var(--accent)"],
.c-page--ru #btnSettleCNH[style*="var(--accent)"],
.c-page--ru #btnSettleUSD[aria-pressed="true"]:not([style]),
.c-page--ru #btnSettleCNH[aria-pressed="true"]:not([style]) {
  background:var(--card)!important; color:var(--ink)!important;
  border:1px solid transparent!important; font-weight:600!important;
  box-shadow:0 1px 2px rgb(0 0 0/.12);
}
.c-page--ru #cbrUsdTag[style*="var(--red)"] { color:var(--danger)!important; }
.c-page--ru #cbrUsdTag[style*="var(--orange)"] { color:var(--warn)!important; }
.c-page--ru #cbrUsdWarn[style*="239, 68, 68"],
.c-page--ru #cbrUsdWarn[style*="239,68,68"] {
  background:color-mix(in srgb,var(--danger) 10%,transparent)!important;
  border-color:color-mix(in srgb,var(--danger) 45%,transparent)!important;
  color:var(--danger)!important;
}
.c-page--ru #cbrUsdWarn[style*="245, 158, 11"],
.c-page--ru #cbrUsdWarn[style*="245,158,11"] {
  background:color-mix(in srgb,var(--warn) 10%,transparent)!important;
  border-color:color-mix(in srgb,var(--warn) 45%,transparent)!important;
  color:var(--warn)!important;
}
/* rm_load 只给这些动态时间戳写静态灰色内联色，保留字号与主题色覆盖。 */
.c-page--ru [id^="mts_"] {
  font-size:var(--fs-label)!important; color:var(--muted)!important;
}
/* rm_load() 把时间戳插进横向 c-field，弹窗内改为上下排列，避免挤窄名称列。 */
.c-page--ru .c-dialog .c-rate:not(.c-rate--boc) {
  grid-template-columns:1fr;
  row-gap:var(--s2);
}
.c-page--ru .c-dialog .c-rate:not(.c-rate--boc) .c-rate__val {
  grid-column:1;
  justify-self:stretch;
}
.c-page--ru .c-dialog .c-field:has(> [id^="mts_"]) {
  flex-wrap:wrap;
}
.c-page--ru .c-dialog .c-field > [id^="mts_"] {
  flex-basis:100%;
  white-space:nowrap;
}
.c-page--ru .c-dialog .c-rate:not(.c-rate--boc) .c-field input {
  width:100%;
  max-width:240px;
}
.c-page--ru .c-dedup .dedup-badge {
  display:inline-flex; align-items:center; height:24px; padding:0 10px;
  border-radius:999px; font:500 var(--fs-label)/1 var(--sans);
}
.c-page--ru .dedup-badge.pending { color:var(--muted); background:var(--soft); }
.c-page--ru .dedup-badge.confirmed { color:var(--money); background:color-mix(in srgb,var(--money) 12%,transparent); }
.c-page--ru .dedup-badge.stale { color:var(--warn); background:color-mix(in srgb,var(--warn) 12%,transparent); }
.c-page--ru .dedup-badge.err { color:var(--danger); background:color-mix(in srgb,var(--danger) 12%,transparent); }
.c-page--ru .profit-pos { color:var(--money); }
.c-page--ru .profit-neg { color:var(--danger); }

/* iPad 横屏也可能命中 coarse pointer；这是 RU 页内的行为增强，已上线 PP/MC 不受影响。 */
@media (max-width:1200px), (pointer:coarse) {
  .c-dialog-backdrop.c-page--ru { align-items:flex-start!important; }
  .c-dialog-backdrop.c-page--ru .c-dialog {
    margin-top:2.5vh!important; max-height:92vh; overflow-y:auto; padding-bottom:40px;
  }
}
@media (max-width:639px) {
  .c-page--ru .c-rate > .jump-btn { grid-column:2; grid-row:2; justify-self:end; margin-top:0; }
  .c-page--ru .c-rate:has(> .jump-btn) .cost-source-tag:not(:empty),
  .c-page--ru .c-rate:has(> .jump-btn) #cbrUsdTag:not(:empty) {
    grid-column:1; grid-row:2; justify-self:start;
  }
  .c-page--ru .c-rate > .c-unit { display:none; }
}

/* ---------- v0.1.4 additions: KR calculator ---------- */
/* ---------- page.kr (批 4 · KR-P) ---------- */
.c-page--kr { --bg:var(--page); --border:var(--line); --text:var(--ink); --text-dim:var(--muted);
  --accent-hover:color-mix(in srgb, var(--accent) 85%, #000); --green:var(--money); --red:var(--danger); --orange:var(--warn); }
.c-page--kr .c-compare { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--s4); }
@media (max-width:1023px) { .c-page--kr .c-compare { grid-template-columns:1fr; } }
.c-page--kr .c-compare__panel { border:1px solid var(--line); border-radius:var(--r-md); padding:var(--s4); background:var(--card); min-width:0; }
.c-page--kr .c-compare__panel > h3 { font:600 var(--fs-card)/20px var(--sans); color:var(--ink); margin:0 0 var(--s2); }
.c-page--kr .c-compare__panel .c-formula { margin-bottom:var(--s3); }
.c-page--kr .c-note-box { flex:1 1 280px; border:1px solid var(--line); border-radius:var(--r-md); background:var(--soft); padding:var(--s3) var(--s4); font-size:13px; line-height:20px; color:var(--ink-2); }
.c-page--kr .c-note-box strong { color:var(--ink); }
.c-page--kr .actual-cost { font-family:var(--mono); font-variant-numeric:tabular-nums; color:var(--warn); font-weight:600; }
.c-page--kr .c-table td.actual-cost { text-align:right; }
.c-page--kr .chip-value.editable { cursor:pointer; border-bottom:1px dashed var(--line-strong); }
.c-page--kr .chip-value.editable:hover { border-bottom-color:var(--accent); }
.c-page--kr .chip-edit { width:96px; font:500 var(--fs-rate)/1 var(--mono); }
.c-page--kr input[type=number]::-webkit-inner-spin-button,
.c-page--kr input[type=number]::-webkit-outer-spin-button { -webkit-appearance:none; margin:0; }
.c-page--kr input[type=number] { -moz-appearance:textfield; }

/* 四面板保留语义色，但只以设计 token 的左侧色条表达。 */
.c-page--kr .c-compare__panel--kb { border-left:3px solid var(--accent); }
.c-page--kr .c-compare__panel--boc { border-left:3px solid var(--warn); }
.c-page--kr .c-compare__panel--xe { border-left:3px solid var(--money); }
.c-page--kr .c-compare__panel--cross { border-left:3px solid var(--muted); }
.c-page--kr .c-card + .c-card { margin-top:var(--s4); }
.c-page--kr .c-grid { margin-bottom:var(--s4); }
.c-page--kr .c-note-row { display:flex; gap:var(--s4); flex-wrap:wrap; }
.c-page--kr .c-warn-text { color:var(--warn); font-size:var(--fs-label); line-height:20px; }

/* 汇率行：数值、时间、来源标记分占栅格，避免 updateKrCostRateBadge 插到名称列。 */
.c-page--kr .c-rate__meta { grid-column:1/-1; grid-row:2; color:var(--muted); font-size:var(--fs-label); line-height:18px; }
.c-page--kr .c-rate--kb > .cost-source-tag,
.c-page--kr .c-rate--xe > .cost-source-tag,
.c-page--kr .c-rate--bockr > .cost-source-tag { grid-column:3; grid-row:1; justify-self:end; }
.c-page--kr .c-rate--kb > .c-btn,
.c-page--kr .c-rate--bockr > .c-btn { grid-column:4; grid-row:1; justify-self:end; }
.c-page--kr .cost-source-tag:empty { display:none; }
.c-page--kr .cost-source-tag.src-manual {
  color:var(--warn);
  background:color-mix(in srgb, var(--warn) 12%, transparent);
}
.c-page--kr .c-rate--boc { grid-template-columns:minmax(0,1fr); }
.c-page--kr .c-rate--boc .c-rate__name { grid-column:1; grid-row:1; }
.c-page--kr .c-rate--boc .c-port__row { grid-column:1; grid-row:2; align-items:center; flex-wrap:wrap; }
.c-page--kr .c-rate--boc .c-rate__meta { grid-column:1; grid-row:3; }
.c-page--kr .c-rate--boc .c-formula { grid-column:1; grid-row:3; }
.c-page--kr .c-rate--boc .c-rate__val { justify-self:start; }

/* 输入与表格：旧页内 width/字体规则迁入作用域。 */
.c-page--kr .c-kpi .c-field--lg { margin-top:2px; }
.c-page--kr .c-port__row .c-port__label { font-size:var(--fs-label); font-weight:500; }
.c-page--kr .c-table td input:not([type="checkbox"]) {
  width:75px; height:28px; padding:0 var(--s2); border:1px solid var(--line-strong);
  border-radius:var(--r-sm); background:var(--field); color:var(--ink);
  text-align:right; font-family:var(--mono);
}
.c-page--kr .c-table td input:not([type="checkbox"]):focus {
  outline:none; border-color:var(--accent); box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);
}
.c-page--kr .c-table td.is-accent { font-weight:700; }
.c-page--kr .c-table td .c-unit { margin-left:3px; }
.c-page--kr #costSettlement td:nth-child(n+2) {
  text-align:right; font-family:var(--mono); font-variant-numeric:tabular-nums;
}
.c-page--kr #costSettlement td:nth-child(4) {
  border-left:1px solid var(--line-strong); font-weight:700;
}

/* 弹窗：rm_load 将 mts_* 插进 c-field；单列后再让时间戳独占一行。 */
.c-page--kr .c-dialog > .c-dialog__sub { padding:0 var(--s5) var(--s3); }
.c-page--kr .c-dialog .c-rate:not(.c-rate--boc) {
  grid-template-columns:1fr;
  row-gap:var(--s2);
}
.c-page--kr .c-dialog .c-rate:not(.c-rate--boc) .c-rate__val {
  grid-column:1;
  justify-self:stretch;
}
.c-page--kr .c-dialog .c-field:has(> [id^="mts_"]) { flex-wrap:wrap; }
.c-page--kr .c-dialog .c-field > [id^="mts_"] {
  flex-basis:100%;
  white-space:nowrap;
}
.c-page--kr .c-dialog .c-rate:not(.c-rate--boc) .c-field input {
  width:100%;
  max-width:240px;
}
.c-page--kr .c-client-field {
  display:flex;
  width:100%;
  margin-bottom:var(--s3);
}
.c-page--kr .c-client-field input,
.c-page--kr .c-client-field .c-select {
  width:100%;
  max-width:none;
  text-align:left;
}
@media (max-width:900px) {
  .c-page--kr .c-card:not(.c-card--flush) { padding:var(--s4); }
}
/* rm_load 只给动态时间戳写静态灰色内联样式，此规则定向覆盖。 */
.c-page--kr [id^="mts_"] {
  font-size:var(--fs-label)!important;
  color:var(--muted)!important;
}

/* 旧 iPad 弹窗贴顶规则；触控与 16px 防缩放由共享基础样式承担。 */
@media (max-width:1200px), (pointer:coarse) {
  .c-page--kr .c-dialog-backdrop { align-items:flex-start!important; }
  .c-page--kr .c-dialog-backdrop .c-dialog {
    margin-top:2.5vh!important;
    max-height:92vh;
    overflow-y:auto;
    padding-bottom:40px;
  }
}

@media (max-width:639px) {
  .c-page--kr .c-rate--kb > .c-rate__meta,
  .c-page--kr .c-rate--bockr > .c-rate__meta { grid-column:1; grid-row:2; }
  .c-page--kr .c-rate--kb > .cost-source-tag { grid-column:2; grid-row:2; justify-self:end; }
  .c-page--kr .c-rate--kb > .c-btn { grid-column:2; grid-row:3; justify-self:end; }
  .c-page--kr .c-rate--bockr > .c-btn { grid-column:2; grid-row:2; justify-self:end; }
}

/* ---------- v0.1.5 additions: L2 batch-calculator skeleton ---------- */
/* 旧脚本继续读取这些变量名；--card/--accent 沿用共享 token，避免自引用。 */
.c-page--l2 {
  --bg:var(--page); --border:var(--line); --text:var(--ink); --text-dim:var(--muted);
  --accent-hover:color-mix(in srgb, var(--accent) 85%, #000); --green:var(--money);
  --red:var(--danger); --orange:var(--warn);
}
.c-page--l2 .card {
  background:var(--card); border:1px solid var(--line); border-radius:var(--r-lg);
  box-shadow:var(--shadow-card); padding:var(--s5);
}
.c-page--l2 > .card + .card,
.c-page--l2 > .card + .c-grid,
.c-page--l2 > .c-grid + .card { margin-top:var(--s4); }
.c-page--l2 .c-col-5 > .card + .card,
.c-page--l2 .c-col-7 > .card + .card { margin-top:var(--s4); }
.c-page--l2 .card-title {
  display:flex; align-items:center; gap:var(--s2); flex-wrap:wrap;
  margin-bottom:var(--s4); color:var(--ink); font:600 var(--fs-card)/22px var(--sans);
}
.c-page--l2 .rate-row {
  display:flex; align-items:center; gap:var(--s3); flex-wrap:wrap;
  margin-bottom:var(--s2);
}
.c-page--l2 .rate-label {
  flex:0 0 auto; min-width:72px; color:var(--muted);
  font-size:var(--fs-label); font-weight:500;
}
.c-page--l2 .rate-label small { color:var(--muted); font-weight:400; }
.c-page--l2 .rate-input {
  height:32px; padding:0 var(--s2); border:1px solid var(--line-strong);
  border-radius:var(--r-sm); background:var(--field); color:var(--ink);
  font:500 var(--fs-body)/1 var(--mono); font-variant-numeric:tabular-nums;
  text-align:right;
}
.c-page--l2 .c-field--lg .rate-input { height:40px; font-size:18px; font-weight:600; }
.c-page--l2 .rate-select { width:100%; }
.c-page--l2 .rate-unit { width:auto; color:var(--muted); font-size:var(--fs-label); white-space:nowrap; }
.c-page--l2 .derived-rate {
  padding:2px 8px; border-radius:var(--r-sm); background:color-mix(in srgb,var(--accent) 10%,transparent);
  color:var(--accent); font-family:var(--mono); font-weight:650;
}
.c-page--l2 .formula-display { margin-top:var(--s2); color:var(--muted); font:var(--fs-label)/18px var(--mono); }
.c-page--l2 .c-warn-bar {
  display:block; margin-bottom:var(--s3); padding:var(--s2) var(--s3);
  border:1px solid color-mix(in srgb,var(--danger) 35%,transparent);
  border-radius:var(--r-sm); background:color-mix(in srgb,var(--danger) 8%,transparent);
  color:var(--danger); font-size:var(--fs-label);
}
.c-page--l2 .c-warn-text { color:var(--danger); font-size:var(--fs-label); line-height:20px; }
.c-page--l2 .profit-pos { color:var(--money); }
.c-page--l2 .profit-neg { color:var(--danger); }

/* updateL2RateMeta() 把状态标签插在值后；只按语义 token 着色。 */
.c-page--l2 .c-rate__meta {
  grid-column:1/-1; grid-row:2; display:flex; align-items:center; gap:var(--s2);
  flex-wrap:wrap; color:var(--muted); font-size:var(--fs-label); line-height:18px;
}
.c-page--l2 .cost-source-tag {
  font-size:11px; color:var(--muted); white-space:nowrap; vertical-align:middle;
}
.c-page--l2 .cost-source-tag:empty { display:none; }
.c-page--l2 .cost-source-tag.src-auto {
  color:var(--accent); background:color-mix(in srgb,var(--accent) 12%,transparent);
}
.c-page--l2 .cost-source-tag.src-cached { color:var(--accent); }
.c-page--l2 .cost-source-tag.src-fallback { color:var(--danger); font-weight:600; }
.c-page--l2 .cost-source-tag.src-manual { color:var(--warn); }

/* BOC 主卡：值第 2 行、两腿第 3 行、meta 第 4 行；弹窗无独立值时两腿回到第 2 行。 */
.c-page--l2 .c-rate--boc { grid-template-columns:minmax(0,1fr); }
.c-page--l2 .c-rate--boc .c-rate__name { grid-column:1; grid-row:1; }
.c-page--l2 .c-rate--boc > .c-rate__val { grid-column:1; grid-row:2; justify-self:start; text-align:left; }
.c-page--l2 .c-rate--boc > .cost-source-tag { grid-column:1; grid-row:2; justify-self:end; }
.c-page--l2 .c-rate--boc .c-port__row { grid-column:1; grid-row:2; flex-wrap:wrap; }
.c-page--l2 .c-rate--boc:has(> .c-rate__val) .c-port__row { grid-row:3; }
.c-page--l2 .c-rate--boc .c-rate__meta { grid-column:1; grid-row:3; }
.c-page--l2 .c-rate--boc:has(> .c-rate__val) .c-rate__meta { grid-row:4; }
.c-page--l2 .c-rate--boc:not(:has(> .c-rate__val)) .c-formula { grid-column:1; grid-row:3; }

.c-page--l2 .c-table td input:not([type="checkbox"]) {
  width:75px; height:28px; padding:0 var(--s2); border:1px solid var(--line-strong);
  border-radius:var(--r-sm); background:var(--field); color:var(--ink);
  text-align:right; font-family:var(--mono); font-variant-numeric:tabular-nums;
}
.c-page--l2 .c-table td input:not([type="checkbox"]):focus {
  outline:none; border-color:var(--accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent);
}
.c-page--l2 .c-table .c-check { display:block; margin:0 auto; }
.c-page--l2 .c-table td .bm-hint {
  display:inline-block; margin-left:4px; color:var(--muted);
  font-size:10px; cursor:pointer;
}
.c-page--l2 .c-table td .bm-detail {
  margin-top:3px; color:var(--muted); font-size:10px; white-space:normal;
}
.c-page--l2 .c-table .bm-detail table {
  margin-top:3px!important; border-collapse:collapse!important;
  color:var(--muted)!important; font-size:9px!important;
}
.c-page--l2 .c-table .bm-detail th,
.c-page--l2 .c-table .bm-detail td {
  height:auto; padding:2px 4px; border:0; color:var(--muted);
  font-size:9px; line-height:14px; white-space:normal;
}
.c-page--l2 .c-table td.channel-note { font-size:var(--fs-label); }
.c-page--l2 .c-check-head { width:36px; }

.c-page--l2 .c-dedup { margin-bottom:0; }
.c-page--l2 .c-dedup .dedup-badge {
  display:inline-flex; align-items:center; height:24px; padding:0 10px;
  border-radius:999px; font:500 var(--fs-label)/1 var(--sans);
}
.c-page--l2 .dedup-badge.pending { color:var(--muted); background:var(--soft); }
.c-page--l2 .dedup-badge.confirmed { color:var(--money); background:color-mix(in srgb,var(--money) 12%,transparent); }
.c-page--l2 .dedup-badge.stale { color:var(--warn); background:color-mix(in srgb,var(--warn) 12%,transparent); }
.c-page--l2 .dedup-badge.err { color:var(--danger); background:color-mix(in srgb,var(--danger) 12%,transparent); }
.c-page--l2 #rcLoadedBanner:empty { display:none; }

/* rm_load() 恢复输入框后追加的时间戳为单列布局；本页没有 mts_ 用户，规则留给批 7/8。 */
.c-page--l2 .c-dialog .c-rate:not(.c-rate--boc) {
  grid-template-columns:1fr;
  row-gap:var(--s2);
}
.c-page--l2 .c-dialog .c-rate:not(.c-rate--boc) .c-rate__val {
  grid-column:1;
  justify-self:stretch;
}
.c-page--l2 .c-dialog .c-rate:not(.c-rate--boc) .c-field input {
  width:100%;
  max-width:240px;
}
.c-page--l2 input[type=number]::-webkit-inner-spin-button,
.c-page--l2 input[type=number]::-webkit-outer-spin-button { -webkit-appearance:none; margin:0; }
.c-page--l2 input[type=number] { -moz-appearance:textfield; }

/* renderRefreshNote() 的 innerHTML 保留 hex；span 补 rgb 两种写法兜底。 */
.c-page--l2 #l2rfNote { color:var(--muted)!important; }
.c-page--l2 #l2rfNote span[style*="#4ade80" i],
.c-page--l2 #l2rfNote span[style*="74, 222, 128"],
.c-page--l2 #l2rfNote span[style*="74,222,128"] { color:var(--money)!important; }
.c-page--l2 #l2rfNote span[style*="#fbbf24" i],
.c-page--l2 #l2rfNote span[style*="251, 191, 36"],
.c-page--l2 #l2rfNote span[style*="251,191,36"] { color:var(--warn)!important; }

/* ---------- l2 shared · 批 8b 自 kr/hk/my 提升 ---------- */
.c-page--l2 #ppCostDisplay,
.c-page--l2 #ppCostExtra .rate-row > span[style*="monospace"] { font-family:var(--mono)!important; font-size:var(--fs-rate)!important; font-weight:650; }
.c-page--l2 .c-table td span[style*="#a78bfa" i],
.c-page--l2 .c-table td span[style*="#22c55e" i],
.c-page--l2 .c-table td span[style*="#f59e0b" i] { padding:2px 8px!important; border-radius:var(--r-sm)!important; font-size:11px!important; }
.c-page--l2 .c-table td span[style*="#22c55e" i] { color:var(--money)!important; background:color-mix(in srgb,var(--money) 14%,transparent)!important; }
.c-page--l2 .c-table td span[style*="#f59e0b" i] { color:var(--warn)!important; background:color-mix(in srgb,var(--warn) 14%,transparent)!important; }
.c-page--l2 #ppMissWarn:empty { display:none; }
.c-page--l2 .c-table td.is-warn { color:var(--warn); font-size:var(--fs-label); }
.c-page--l2 .c-table td.c-note { color:var(--muted); font-size:var(--fs-label); }

/* ---------- page.kr-all (批 4b) ---------- */
.c-page--kr-all .c-num { font-family:var(--mono); font-variant-numeric:tabular-nums; }
.c-page--kr-all .c-table td span[style*="167, 139, 250"],
.c-page--kr-all .c-table td span[style*="167,139,250"] {
  padding:2px 8px!important; border-radius:var(--r-sm)!important; font-size:11px!important;
}
.c-page--kr-all .c-table td span[style*="245, 158, 11"],
.c-page--kr-all .c-table td span[style*="245,158,11"] {
  color:var(--warn)!important; background:color-mix(in srgb,var(--warn) 14%,transparent)!important;
  padding:2px 8px!important; border-radius:var(--r-sm)!important; font-size:11px!important;
}

@media (max-width:1200px), (pointer:coarse) {
  .c-dialog-backdrop.c-page--l2 { align-items:flex-start!important; }
  .c-dialog-backdrop.c-page--l2 .c-dialog {
    margin-top:2.5vh!important; max-height:92vh; overflow-y:auto; padding-bottom:40px;
  }
}
@media (max-width:639px) {
  .c-page--l2 .card { padding:var(--s4); }
  .c-page--l2 .c-dialog .c-link--modal { display:inline; }
  .c-page--l2 .c-head__tools { width:100%; }
  .c-page--l2 .c-head__tools .c-btn { flex:1 1 auto; justify-content:center; }
}

/* ---------- v0.1.6 additions: TW-G / TW-PP / TW-MC shared layer ---------- */
/* 旧脚本继续读取这些变量名；--card/--accent 沿用共享 token，避免自引用。 */
.c-page--tw {
  --bg:var(--page); --border:var(--line); --text:var(--ink); --text-dim:var(--muted);
  --accent-hover:var(--accent); --green:var(--money); --red:var(--danger); --orange:var(--warn);
}
@supports (color:color-mix(in srgb, red, blue)) {
  .c-page--tw,
  .c-dialog-backdrop.c-page--tw { --accent-hover:color-mix(in srgb, var(--accent) 85%, #000); }
}
.c-page--tw > .c-card + .c-card,
.c-page--tw > .c-grid + .c-card { margin-top:var(--s4); }
.c-page--tw .rate-label {
  flex:0 0 auto; min-width:48px; color:var(--muted);
  font-size:var(--fs-label); font-weight:500;
}
.c-page--tw .rate-label small { color:var(--muted); font-weight:400; }
.c-page--tw .rate-input {
  height:32px; padding:0 var(--s2); border:1px solid var(--line-strong);
  border-radius:var(--r-sm); background:var(--field); color:var(--ink);
  font:500 var(--fs-body)/1 var(--mono); font-variant-numeric:tabular-nums; text-align:right;
}
.c-page--tw .c-field--lg .rate-input { height:40px; font-size:18px; font-weight:600; }
.c-page--tw .c-field--sm .rate-input { height:28px; }
.c-page--tw .rate-input:focus {
  outline:none; border-color:var(--accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent);
}
.c-page--tw .rate-unit { width:auto; color:var(--muted); font-size:var(--fs-label); white-space:nowrap; }
.c-page--tw .rate-select { width:100%; }
.c-page--tw .derived-rate {
  padding:2px 8px; border-radius:var(--r-sm); color:var(--accent);
  font-family:var(--mono); font-weight:650;
}
.c-page--tw .derived-rate.cost { color:var(--ink-2); }
.c-page--tw .actual-cost,
.c-page--tw .c-table td.actual-cost {
  font-family:var(--mono); font-variant-numeric:tabular-nums;
  color:var(--warn); font-weight:600; text-align:right;
}
.c-page--tw .profit-pos { color:var(--money); }
.c-page--tw .profit-neg { color:var(--danger); }
.c-page--tw .channel-note { color:var(--muted); font-size:var(--fs-label); }
.c-page--tw .chip-value {
  font:650 var(--fs-rate)/26px var(--mono); font-variant-numeric:tabular-nums;
}
.c-page--tw .cost-source-tag { font-size:11px; color:var(--muted); white-space:nowrap; }
.c-page--tw .cost-source-tag:empty { display:none; }
.c-page--tw .cost-source-tag.src-manual { color:var(--warn); }
.c-page--tw .cost-source-tag.src-auto { color:var(--accent); }
.c-page--tw .cost-source-tag.src-locked { color:var(--muted); }
.c-page--tw .c-table td input:not([type="checkbox"]) {
  width:75px; height:28px; padding:0 var(--s2); border:1px solid var(--line-strong);
  border-radius:var(--r-sm); background:var(--field); color:var(--ink);
  text-align:right; font-family:var(--mono); font-variant-numeric:tabular-nums;
}
.c-page--tw .c-table td input:not([type="checkbox"]):focus {
  outline:none; border-color:var(--accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent);
}
.c-page--tw .c-table td input.qflat-input { width:64px; }
.c-page--tw .c-table td .c-unit { margin-left:3px; }
.c-page--tw .c-table tbody tr.c-group td { background:var(--page); color:var(--muted); }
.c-page--tw .c-tax-line {
  padding:var(--s2) var(--s5) var(--s3);
  color:var(--ink-2); font-size:var(--fs-label); line-height:20px;
}
.c-page--tw .c-tax-line strong { color:var(--money); }
.c-page--tw .c-tax-line span { font-family:var(--mono); color:var(--warn); }
.c-page--tw .c-page__notice {
  display:flex; align-items:flex-start; gap:var(--s2); flex-direction:column;
  border-left:3px solid var(--warn); color:var(--ink-2);
  font-size:var(--fs-label); line-height:20px;
}
.c-page--tw .c-page__notice strong { color:var(--warn); }
.c-page--tw .c-page__notice--inline {
  margin:0 var(--s5) var(--s3); border-left:0; border-radius:var(--r-md);
  background:color-mix(in srgb,var(--warn) 8%,transparent);
  padding:var(--s3) var(--s4);
}
.c-page--tw .jump-btn { margin-top:0; }
.c-page--tw .c-card__tools .jump-btn { display:inline-flex; align-items:center; height:28px; }
.c-page--tw input[type=number]::-webkit-inner-spin-button,
.c-page--tw input[type=number]::-webkit-outer-spin-button { -webkit-appearance:none; margin:0; }
.c-page--tw input[type=number] { -moz-appearance:textfield; }
.c-dialog-backdrop.c-page--tw [id^="mts_"] {
  font-size:var(--fs-label)!important; color:var(--muted)!important;
}
.c-dialog-backdrop.c-page--tw .c-dialog .c-rate:not(.c-rate--boc) {
  grid-template-columns:1fr; row-gap:var(--s2);
}
.c-dialog-backdrop.c-page--tw .c-dialog .c-rate:not(.c-rate--boc) .c-rate__val {
  grid-column:1; justify-self:stretch;
}
.c-dialog-backdrop.c-page--tw .c-dialog .c-rate:not(.c-rate--boc) .c-field input {
  width:100%; max-width:240px;
}
.c-dialog-backdrop.c-page--tw .c-dialog .c-field:has(> [id^="mts_"]) { flex-wrap:wrap; }
.c-dialog-backdrop.c-page--tw .c-dialog .c-field > [id^="mts_"] {
  flex-basis:100%; white-space:nowrap;
}
@media (max-width:1200px),(pointer:coarse) {
  .c-dialog-backdrop.c-page--tw { align-items:flex-start!important; }
  .c-dialog-backdrop.c-page--tw .c-dialog {
    margin-top:2.5vh!important; max-height:92vh; overflow-y:auto; padding-bottom:40px;
  }
}
@media (max-width:900px) {
  .c-page--tw .c-card:not(.c-card--flush) { padding:var(--s4); }
}
@media (max-width:639px) {
  .c-page--tw .c-head__tools { width:100%; }
  .c-page--tw .c-head__tools .c-btn { flex:1 1 auto; justify-content:center; }
}
.c-page--tw .c-table td.c-note,
.c-page--tw .c-table td.channel-note {
  white-space:normal; min-width:160px; max-width:320px;
}
/* 单页专有 */
.c-page--tw-mc .c-table { font-size:12px; }
.c-page--tw-mc .c-table tr.c-group td {
  font:600 var(--fs-label)/16px var(--sans); letter-spacing:.5px;
}
.c-page--tw-mc .c-table td.c-note {
  font-size:10px; white-space:normal; min-width:220px;
}
.c-page--tw-pp .c-table td .c-unit { font-size:10px; }
.c-page--tw-pp .c-port__row .c-port__eff { margin-left:auto; }
.c-page--tw-g .c-table td.c-taxloss { font-weight:600; }
.c-page--tw-g .c-table td:has(> .qfee-input),
.c-page--tw-g .c-table td:has(> .fee-input) { text-align:right; }

/* ---------- v0.1.7 additions: TW-ALL（L2 + TW 两层，专有收口） ---------- */
.c-page--tw-all .c-port .rate-label { min-width:72px; }
.c-page--tw-all .c-table td.c-name { white-space:normal; min-width:180px; max-width:320px; }
.c-page--tw-all .c-table td.c-name .channel-note { display:block; margin-top:2px; line-height:16px; }
.c-page--tw-all .c-table td.c-check-cell,
.c-page--tw-all .c-table th.c-check-head {
  width:36px; min-width:36px; max-width:36px; padding:0;
  text-align:center; position:sticky; left:0; z-index:2;
  background:var(--card);
}
.c-page--tw-all #costTableBody tr:hover td.c-check-cell { background:var(--soft); }
.c-page--tw-all #costTableBody td.c-name { left:36px; }
.c-page--tw-all .c-table .c-check { accent-color:var(--danger); }
.c-page--tw-all .c-table td .c-flat { color:var(--warn); font-family:var(--mono); font-size:var(--fs-label); }
.c-page--tw-all .c-table td.c-taxrate { color:var(--warn); font-family:var(--mono); font-variant-numeric:tabular-nums; }
.c-page--tw-all .c-table td input[id^="qflat_"] { width:55px; }

/* ---------- page.hk-all (批 7) ---------- */
.c-page--hk-all .c-num { font-family:var(--mono); font-variant-numeric:tabular-nums; }
.c-page--hk-all .c-port__eff .cost-source-tag { order:9; }

/* ---------- page.my-all (批 8a) ---------- */
.c-page--my-all .c-num { font-family:var(--mono); font-variant-numeric:tabular-nums; }
.c-page--my-all .c-port__eff .cost-source-tag { order:9; }

/* ---------- page.sg-all (批 8b) ---------- */
.c-page--sg-all .c-num { font-family:var(--mono); font-variant-numeric:tabular-nums; }
.c-page--sg-all .c-port__eff .cost-source-tag { order:9; }

/* ---------- page.id-all (批 8c) ---------- */
.c-page--id-all .c-num { font-family:var(--mono); font-variant-numeric:tabular-nums; }
.c-page--id-all .c-port__eff .cost-source-tag { order:9; }

/* ---------- page.th-all (批 8d) ---------- */
.c-page--th-all .c-num { font-family:var(--mono); font-variant-numeric:tabular-nums; }
.c-page--th-all .c-port__eff .cost-source-tag { order:9; }

/* ---------- page.ph-all (批 8e) ---------- */
.c-page--ph-all .c-num { font-family:var(--mono); font-variant-numeric:tabular-nums; }
.c-page--ph-all .c-port__eff .cost-source-tag { order:9; }

/* ---------- page.latam-all (批 8f) ---------- */
.c-page--latam-all .c-num { font-family:var(--mono); font-variant-numeric:tabular-nums; }

/* ---------- v0.1.18 additions: 首页（批 21）· 只新增类名 ---------- */
.c-toolbar{display:flex;align-items:center;gap:var(--s3);flex-wrap:wrap}
.c-hint{color:var(--muted);font-size:var(--fs-label);line-height:16px}
.c-section{display:flex;align-items:baseline;gap:var(--s2);flex-wrap:wrap;margin:var(--s8) 0 var(--s3);padding-bottom:var(--s2);border-bottom:1px solid var(--line);font:600 var(--fs-card)/22px var(--sans)}
.c-section__note{color:var(--muted);font:400 var(--fs-label)/16px var(--sans)}
.c-section+.c-toolbar{margin-bottom:var(--s3)}
.c-alert{margin-bottom:var(--s4)}
.c-alert__title{font:600 var(--fs-body)/20px var(--sans);color:var(--warn);margin-bottom:var(--s3)}
.c-alert.is-stable .c-alert__title,.c-alert__ok{color:var(--muted)}
.c-alert__row{display:flex;align-items:center;gap:var(--s3);flex-wrap:wrap;min-height:var(--row-h);padding:var(--s1) var(--s3);margin-bottom:var(--s1);border-radius:var(--r-sm);background:var(--soft);background:color-mix(in srgb,var(--warn) 6%,transparent)}
.c-alert__row.high{background:var(--soft);background:color-mix(in srgb,var(--danger) 8%,transparent)}
.c-alert__code{font-weight:600;min-width:48px}
.c-alert__chg{font-family:var(--mono);font-variant-numeric:tabular-nums;min-width:72px;text-align:right}
.c-alert__row>.c-btn{margin-left:auto}
.c-alert>.c-btn--ghost{margin-top:var(--s2)}
.c-guide{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s3);margin-bottom:var(--s4)}
.c-guide>.c-guide__item{padding:var(--s3) var(--s4);min-width:0}
.c-guide__head{display:flex;align-items:center;gap:var(--s2);margin-bottom:var(--s1);font-weight:600}
.c-guide__desc{color:var(--muted);font-size:var(--fs-label);line-height:20px}
.c-legend{display:flex;flex-wrap:wrap;gap:var(--s1) var(--s3);margin-bottom:var(--s4);padding:var(--s2) var(--s3);background:var(--soft);border-radius:var(--r-md);color:var(--muted);font-size:var(--fs-label);line-height:20px}
.c-chipgroups{display:flex;flex-direction:column;gap:var(--s2);margin-bottom:var(--s3)}
.c-chipgroup{padding:var(--s2) var(--s3);border:1px solid var(--line);border-left:3px solid var(--line-strong);border-radius:var(--r-md)}
.c-chipgroup__title{display:flex;align-items:center;justify-content:space-between;gap:var(--s2);flex-wrap:wrap;min-width:0;margin-bottom:var(--s2);font:600 var(--fs-label)/16px var(--sans);color:var(--ink-2)}
.c-chipgroup__btn{flex-shrink:0}
.c-chipgroup__btn.on{border-color:var(--accent);color:var(--accent);background:var(--soft);background:color-mix(in srgb,var(--accent) 12%,transparent)}
.c-chipgroup__body,.c-acc__links,.c-linkchips{display:flex;flex-wrap:wrap;gap:var(--s2)}
.c-chip,.c-acc__link,.c-linkchips>a{display:inline-flex;align-items:center;gap:var(--s2);min-height:32px;padding:0 var(--s3);border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--card);color:var(--ink);font-size:var(--fs-body)}
.c-chip{cursor:pointer;user-select:none}
.c-chip:hover,.c-acc__link:hover,.c-linkchips>a:hover{background:var(--soft);text-decoration:none}
.c-chip:has(:checked){border-color:var(--accent);background:var(--soft);background:color-mix(in srgb,var(--accent) 8%,transparent)}
.c-chip:has(:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
@supports selector(:has(*)){.c-chip .c-check:focus-visible{outline:none}}
.c-linkchips{margin-bottom:var(--s3)}
.c-entry{display:flex;align-items:center;gap:var(--s3);min-height:48px;margin-top:var(--s4);margin-bottom:var(--s4);padding:var(--s4) var(--s5);background:var(--card);border:1px solid var(--line-strong);border-color:color-mix(in srgb,var(--accent) 40%,transparent);border-radius:var(--r-lg);box-shadow:var(--shadow-card);color:var(--accent);font:600 var(--fs-card)/22px var(--sans)}
.c-entry:hover{background:var(--soft);text-decoration:none}
.c-navgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--s3)}
.c-navcard{display:flex;align-items:center;gap:var(--s3);min-width:0;padding:var(--s4);background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-card);color:var(--ink);transition:border-color var(--fast) var(--ease)}
.c-navcard:hover{border-color:var(--line-strong);text-decoration:none}
.c-navcard__flag{flex-shrink:0}
.c-navcard__flag img,.c-acc__head img{width:24px;height:18px}
.c-navcard__flag img,.c-acc__head img,.c-acc__link img{display:block;border-radius:2px}
.c-acc__link img{width:16px;height:12px}
.c-navcard__body{flex:1;min-width:0}
.c-navcard__name,.c-acc__label{font:600 var(--fs-card)/22px var(--sans)}
.c-navcard__desc,.c-navcard .rate-status{color:var(--muted);font-size:var(--fs-label);line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.c-navcard .rate-status{margin-top:var(--s1)}
.c-navcard .rate-status.fresh{color:var(--money)}
.c-navcard .rate-status.stale{color:var(--warn)}
.c-navcard .rate-status.old{color:var(--danger)}
.c-navcard__arrow,.c-acc__count,.c-acc__arrow{color:var(--muted);font-size:var(--fs-label)}
.c-acc{display:flex;flex-direction:column;gap:var(--s1)}
.c-acc__item{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.c-acc__head{display:flex;align-items:center;gap:var(--s3);min-height:48px;padding:var(--s3) var(--s5);cursor:pointer;user-select:none}
.c-acc__head:hover{background:var(--soft)}
.c-acc__head:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.c-acc__label{flex:1}
.c-acc__arrow{transition:transform var(--fast) var(--ease)}
.c-acc__item.open .c-acc__arrow{transform:rotate(90deg)}
.c-acc__body{display:none;padding:var(--s3) var(--s5) var(--s4);border-top:1px solid var(--line)}
.c-acc__item.open .c-acc__body{display:block}
@media (max-width:639px){.c-guide,.c-navgrid{grid-template-columns:1fr}.c-acc__head{padding:var(--s3) var(--s4)}}
