
.data-curve{width:100%;max-height:22rem;font-size:12px;overflow:visible}
.data-curve text{fill:var(--ink-2)}
.data-curve polyline{fill:none;stroke-width:2;vector-effect:non-scaling-stroke}
.data-curve .balance{stroke:var(--muted)}
.data-curve .equity{stroke:var(--accent)}

.ea-choice-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.55rem;margin-top:.6rem}
.ea-choice{display:flex;align-items:center;gap:.55rem;border:1px solid #dcdedb;border-radius:8px;padding:.65rem .75rem}
.ea-choice input{width:1rem;height:1rem;flex:0 0 auto}.ea-choice small{margin-left:auto;white-space:nowrap}
/* 字号基准：根字号决定全部 rem 尺寸（含内边距与控件高度）。
   三档默认按浏览器默认16px折算：小≈16px、中≈17.6px、大≈19.5px。
   用百分比而非px，以便同时尊重浏览器的“默认字号/最小字号”设置；
   档位由服务器按 Cookie 输出 html 类名，全程无内联样式。 */
html{font-size:110%}
html.fs-s{font-size:100%}
html.fs-m{font-size:110%}
html.fs-l{font-size:122%}

:root{
--paper:#efebe2; --surface:#fbf9f4; --surface-2:#f6f2e9; --surface-3:#f1ece1;
--ink:#17150f; --ink-2:#413c32; --muted:#7d7466; --faint:#a89e8c;
--rule:#dbd3c4; --rule-2:#c6bcaa;
--rail:#1a1813; --rail-ink:#ece6d9; --rail-mute:#8b8270; --rail-rule:#2c2921;
--accent:#1d3b5c; --accent-2:#2b5580; --accent-ink:#f7f4ec;
--danger:#9e2b20; --danger-bg:#f6e4e0; --ok:#1f6a48; --ok-bg:#e2efe7;
--warn:#8a5a0b; --warn-bg:#f6ebd7; --mute-bg:#eae5da;
--ui:"HarmonyOS Sans","Noto Sans SC","Microsoft YaHei UI","Microsoft YaHei",system-ui,sans-serif;
--mono:"Cascadia Mono","Maple Mono NF CN",Consolas,"Liberation Mono",monospace;
--r:2px; --rail-w:13.2rem; --maxw:1780px;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--ui);
font-size:1rem;line-height:1.62;font-variant-numeric:tabular-nums;
-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none;border-bottom:1px solid transparent}
a:hover{color:var(--accent-2);border-bottom-color:currentColor}
h1,h2,h3{margin:0;font-weight:600;letter-spacing:.01em}
p{margin:0}
.mono{font-family:var(--mono);font-size:.92em;letter-spacing:-.01em}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.muted{color:var(--muted)}
.faint{color:var(--faint)}
.right{text-align:right}
.nowrap{white-space:nowrap}
.diagnostic-log{white-space:pre-wrap;overflow-wrap:anywhere;max-height:28rem;overflow:auto}
.t-ok{color:var(--ok)}.t-warn{color:var(--warn)}.t-danger{color:var(--danger)}

/* ---------- 骨架 ---------- */
.app{display:flex;min-height:100vh}
.rail{width:var(--rail-w);flex:none;background:var(--rail);color:var(--rail-ink);
display:flex;flex-direction:column;position:sticky;top:0;height:100vh;
border-right:1px solid var(--rail-rule)}
.rail-head{display:flex;gap:.65rem;align-items:center;padding:1.3rem 1.05rem 1.05rem;
border-bottom:1px solid var(--rail-rule)}
.mark{display:grid;place-items:center;width:2.1rem;height:2.1rem;flex:none;
border:1px solid var(--rail-ink);color:var(--rail-ink);font-size:.82rem;
letter-spacing:.04em;border-radius:1px}
.mark-lg{width:2.7rem;height:2.7rem;font-size:.94rem;border-color:var(--ink);
color:var(--ink)}
.rail-title{display:flex;flex-direction:column;font-size:1rem;font-weight:600;
line-height:1.25;letter-spacing:.02em}
.rail-title em{font-style:normal;font-size:.76rem;font-weight:400;color:var(--rail-mute);
letter-spacing:.14em;margin-top:.18rem}
.rail-nav{display:flex;flex-direction:column;padding:.7rem .6rem;gap:1px;flex:1;overflow-y:auto}
/* ── 大导航块（2026-09-26 改版）：左侧 5 块，块内功能用 tab ── */
.rail-nav{gap:.24rem}
.blk{display:block;padding:.58rem .62rem .62rem;border-radius:var(--r);
color:var(--rail-ink);border-left:2px solid transparent;border-bottom:none}
.blk:hover{background:rgba(255,255,255,.06);color:#fff;border-bottom:none}
.blk.on{background:rgba(255,255,255,.10);border-left-color:var(--rail-ink)}
.blk-t{font-size:.99rem;font-weight:600}
.blk-s{display:none;font-size:.95rem;font-weight:600;text-align:center}
.blk-b{float:right;min-width:1.5rem;text-align:center;font-size:.76rem;line-height:1.4;
padding:0 .34rem;border-radius:999px;background:var(--rail-ink);color:var(--rail)}
.blk.on .blk-b{background:var(--rail);color:var(--rail-ink)}
.blk-d{display:block;margin-top:.2rem;font-size:.78rem;line-height:1.4;color:var(--rail-mute)}
.blk.on .blk-d{color:var(--rail-ink);opacity:.75}
.rail-fold{margin-left:auto;color:var(--rail-mute);font-size:1rem;line-height:1;
padding:.2rem .3rem;border-radius:var(--r);border-bottom:none}
.rail-fold:hover{color:#fff;background:rgba(255,255,255,.08);border-bottom:none}
.rail-sep{height:1px;background:var(--rail-rule);margin:.45rem 0}
.rail-mini{display:block;padding:.34rem .68rem;color:var(--rail-mute);font-size:.84rem;white-space:nowrap;
border-bottom:none}
.rail-mini:hover{color:#fff;background:rgba(255,255,255,.06);border-bottom:none}
.rail-mini.on{color:var(--rail-ink);background:rgba(255,255,255,.10)}
/* 折叠：只留短名，正文区变宽。用类而不是媒体查询，因为这是用户偏好而非屏幕尺寸。 */
.rail.collapsed{width:4.9rem}
.rail.collapsed .rail-title,.rail.collapsed .blk-t,.rail.collapsed .blk-d,
.rail.collapsed .blk-b,.rail.collapsed .rail-k,.rail.collapsed .rail-who b,
.rail.collapsed .rail-scale,.rail.collapsed .rail-out .ro-t,
.rail.collapsed .rail-mini .rm-t,.rail.collapsed .rail-sep{display:none}
.rail.collapsed .blk-s{display:block}
.rail.collapsed .blk{padding:.62rem .2rem;text-align:center}
.rail.collapsed .rail-head{flex-direction:column;gap:.5rem;align-items:center}
.rail.collapsed .rail-fold{margin-left:0}
.rail.collapsed .rail-foot{padding:.85rem .5rem 1.05rem;align-items:center}
.rail.collapsed .rail-mini{text-align:center}
.rail.collapsed .rail-mini::before{content:"说明";font-size:.8rem}
.rail.collapsed .rail-out .ro-s{display:inline}
/* ── 块内 tab 条（正文区顶部；服务端只渲染当前块那一组） ── */
.tabs{display:flex;flex-wrap:wrap;align-items:center;gap:.15rem;margin:-.15rem 0 1.15rem;
border-bottom:1px solid var(--rule)}
.tabs-k{font-size:.76rem;letter-spacing:.1em;color:var(--faint);padding:0 .6rem 0 .05rem;
margin-right:.3rem;border-right:1px solid var(--rule)}
.tab{padding:.5rem .9rem .48rem;color:var(--ink-2);font-size:.93rem;
border-bottom:2px solid transparent;border-radius:var(--r) var(--r) 0 0}
.tab:hover{background:var(--surface-3);color:var(--ink);border-bottom-color:var(--rule-2)}
.tab.on{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
.tab.on:hover{background:transparent}
.tab-b{margin-left:.4rem;font-size:.76rem;padding:0 .34rem;border-radius:999px;
background:var(--warn-bg);color:var(--warn)}
.nav-group{display:block;padding:.86rem .68rem .24rem;color:var(--rail-mute);
font-size:.78rem;letter-spacing:.12em;line-height:1.3}
.nav-group:first-child{padding-top:.36rem}
.nav-i{display:flex;align-items:center;gap:.65rem;padding:.55rem .68rem;
color:var(--rail-ink);border-radius:var(--r);border-bottom:none;font-size:.94rem}
.nav-i:hover{background:rgba(255,255,255,.06);color:#fff;border-bottom:none}
.nav-i.on{background:var(--rail-ink);color:var(--rail)}
.nav-i.on .nav-n{color:var(--rail);opacity:.55}
.nav-n{font-size:.76rem;color:var(--rail-mute);letter-spacing:.06em}
.rail-foot{padding:.85rem 1.05rem 1.05rem;border-top:1px solid var(--rail-rule);
display:flex;flex-direction:column;gap:.42rem;font-size:.82rem}
.rail-who{display:flex;justify-content:space-between;gap:.5rem;color:var(--rail-ink)}
.rail-k{color:var(--rail-mute)}
.rail-scale{display:flex;align-items:center;gap:.3rem;margin-top:.35rem;
padding-top:.55rem;border-top:1px solid var(--rail-rule)}
.rail-scale .rail-k{margin-right:auto}
.fs-b{display:inline-grid;place-items:center;min-width:1.6rem;height:1.35rem;
border:1px solid var(--rail-rule);border-radius:var(--r);color:var(--rail-mute);
font-size:.76rem;line-height:1}
.fs-b:hover{color:var(--rail-ink);border-color:var(--rail-mute);border-bottom-color:var(--rail-mute)}
.fs-b.on{background:var(--rail-ink);color:var(--rail);border-color:var(--rail-ink)}
.rail-out{margin-top:.42rem;color:var(--rail-mute);font-size:.82rem}
.rail-out:hover{color:var(--rail-ink)}
.rail-out .ro-s{display:none}
.main{flex:1;min-width:0;padding:1rem 1.2rem 2rem;max-width:var(--maxw)}
.top{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:.7rem}
.top-l{min-width:0}
.top-context{display:inline-flex;align-items:center;gap:.48rem;flex:none;
padding:.34rem .65rem;margin-top:.2rem;border:1px solid var(--rule-2);
background:var(--surface);color:var(--ink-2);font-size:.76rem;white-space:nowrap}
.crumbs{font-size:.82rem;color:var(--muted);margin-bottom:.5rem;display:flex;gap:.5rem}
.crumbs .sep{color:var(--faint)}
.crumbs .cur{color:var(--ink-2)}
.top h1{font-size:1.45rem;letter-spacing:-.01em}
.sub{color:var(--muted);font-size:.88rem;margin-top:.3rem}
.foot{margin-top:2.4rem;padding-top:.85rem;border-top:1px solid var(--rule);
color:var(--faint);font-size:.82rem}
.foot .dot{margin:0 .38rem}

/* ---------- 提示 ---------- */
.flash{display:block;position:relative;padding:.55rem 2rem .55rem .75rem;overflow-wrap:anywhere;
margin-bottom:.75rem;border:1px solid var(--rule-2);border-left-width:3px;
background:var(--surface);border-radius:var(--r);font-size:.91rem}
.flash-ok{border-left-color:var(--ok)}
.flash-err{border-left-color:var(--danger);background:var(--danger-bg)}
.flash-warn{border-left-color:var(--warn);background:var(--warn-bg)}
.flash-t{font-weight:600;margin-right:.5rem}
.flash-x{position:absolute;right:.45rem;top:.55rem;background:none;border:none;color:var(--muted);cursor:pointer;font-size:1.05rem;
line-height:1;padding:.1rem .25rem}
.empty{padding:1.3rem .25rem;color:var(--muted);font-size:.91rem;display:flex;
flex-direction:column;gap:.2rem}
.empty b{color:var(--ink-2);font-weight:600;font-size:.94rem}

/* ---------- 指标条 ---------- */
.slips{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;
border:1px solid var(--rule-2);background:var(--rule);border-radius:var(--r);
margin-bottom:.85rem;overflow:hidden}
.slip{display:flex;flex-direction:column;gap:.12rem;padding:.6rem .85rem;
background:var(--surface);min-width:0}
.slip-link:hover{background:var(--surface-2);border-bottom:none}
.slip-k{font-size:.79rem;color:var(--muted);letter-spacing:.05em}
.slip-v{font-size:1.5rem;font-weight:600;line-height:1.18}
.slip-n{font-size:.79rem;color:var(--faint)}

/* ---------- 面板 ---------- */
.pn{background:var(--surface);border:1px solid var(--rule-2);border-radius:var(--r);
margin-bottom:.85rem;min-width:0}
.pn-head{display:flex;align-items:baseline;justify-content:space-between;gap:.95rem;
padding:.55rem .8rem;border-bottom:1px solid var(--rule);flex-wrap:wrap}
.pn-head h2{font-size:1rem;letter-spacing:.02em}
.pn-act{display:flex;gap:.4rem;align-items:center;flex-wrap:wrap}
.pn-note{padding:.4rem .8rem;color:var(--muted);font-size:.82rem}
.pn-danger{border-color:var(--danger)}
.pn-danger .pn-head{border-bottom-color:var(--danger)}
.pn-body{padding:.8rem}

/* ---------- 表格 ---------- */
.tw{overflow-x:auto}
.tbl{border-collapse:collapse;width:100%}
.tbl th{position:sticky;top:0;z-index:1;background:var(--surface-2);
font-size:.79rem;font-weight:600;color:var(--muted);letter-spacing:.08em;
text-align:left;padding:.55rem .82rem;border-bottom:1px solid var(--rule-2);white-space:nowrap}
.tbl td{padding:.45rem .65rem;border-bottom:1px solid var(--rule);font-size:.94rem;
vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl tbody tr:hover td{background:var(--surface-2)}
.tbl th.right,.tbl td.right{text-align:right}
.row-link{cursor:pointer}
.row-link:hover td:first-child{box-shadow:inset 3px 0 0 var(--accent)}
.tbl .cell-main{font-weight:600}
.cell-sub{display:block;color:var(--muted);font-size:.79rem;margin-top:.1rem;
font-family:var(--ui);letter-spacing:0}

/* ---------- 徽标与芯片 ---------- */
.bdg{display:inline-block;padding:.05rem .5rem;border-radius:1px;font-size:.79rem;
border:1px solid transparent;white-space:nowrap;line-height:1.7}
.bdg-ok{background:var(--ok-bg);color:var(--ok)}
.bdg-warn{background:var(--warn-bg);color:var(--warn)}
.bdg-danger{background:var(--danger-bg);color:var(--danger)}
.bdg-mute{background:var(--mute-bg);color:var(--muted)}
.bdg-info{background:var(--surface-3);color:var(--ink-2);border-color:var(--rule-2)}
.chip{display:inline-flex;align-items:center;gap:.42rem;background:var(--surface-3);
border:1px solid var(--rule);border-radius:var(--r);padding:.05rem .45rem;cursor:pointer;
color:var(--ink-2);font-size:.85rem;font-family:var(--mono)}
.chip:hover{border-color:var(--accent);color:var(--accent)}
.chip-i{font-family:var(--ui);font-size:.76rem;color:var(--faint);letter-spacing:.06em}
.chip:hover .chip-i{color:var(--accent)}

/* ---------- 生命周期条 ---------- */
.rib{display:flex;flex-direction:column;gap:.25rem;min-width:8rem}
.rib-track{position:relative;display:block;height:.35rem;background:var(--surface-3);
border:1px solid var(--rule);border-radius:1px;overflow:hidden}
.rib-fill{position:absolute;inset:0 auto 0 0;width:0;background:var(--accent)}
.rib-clean{position:absolute;top:0;bottom:0;right:0;width:.3rem;background:var(--danger);
opacity:.5}
.rib-ok .rib-fill{background:var(--ok)}
.rib-warn .rib-fill{background:var(--warn)}
.rib-mute .rib-fill{background:var(--rule-2)}
.rib-danger .rib-fill{background:var(--danger)}
.rib-txt{font-size:.79rem;color:var(--muted)}

/* ---------- 表单 ---------- */
.frm{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:.65rem .75rem;max-width:60rem;
min-width:0;container-type:inline-size;container-name:admin-form}
.fld{display:flex;flex-direction:column;gap:.25rem;min-width:0;grid-column:span 6}
.frm-3>.fld{grid-column:span 4}
.frm>.fld-short{grid-column:span 3;max-width:15rem}
.fld-wide{grid-column:1/-1}
.frm>.fld-wide,.frm-3>.fld-wide{grid-column:1/-1;max-width:none}
.frm>.fld-size-2{grid-column:span 2;max-width:10rem}
.frm>.fld-size-3{grid-column:span 3;max-width:15rem}
.frm>.fld-size-4{grid-column:span 4;max-width:21rem}
.frm>.fld-size-6{grid-column:span 6;max-width:30rem}
.frm>.fld-size-8{grid-column:span 8;max-width:40rem}
.frm>.fld-size-12{grid-column:1/-1}
.frm-compact{max-width:50rem}
.check-line{grid-column:1/-1;display:flex;gap:.5rem;align-items:flex-start;font-size:.88rem}
.check-line input{width:1rem;height:1rem;margin-top:.2rem;flex:none}
.inl.customer-actions{flex-wrap:wrap}
.customer-actions .btn{white-space:nowrap;flex:none}
.fld-l{font-size:.82rem;color:var(--muted);display:flex;gap:.25rem .42rem;align-items:baseline;
flex-wrap:wrap;line-height:1.5}
.req{color:var(--danger);font-size:.76rem;border:1px solid currentColor;
padding:0 .25rem;border-radius:1px;letter-spacing:.06em}
.hint{font-size:.79rem;color:var(--faint);line-height:1.5;overflow-wrap:anywhere}
input,select,textarea{width:100%;min-width:0;padding:.35rem .55rem;border:1px solid var(--rule-2);
border-radius:var(--r);background:var(--surface);color:var(--ink);font:inherit;
font-size:.94rem}
input[type=search]{-webkit-appearance:none}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);
box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 22%,transparent)}
input::placeholder{color:var(--faint)}
textarea{resize:vertical;min-height:4.4rem;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}
select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),
linear-gradient(135deg,var(--muted) 50%,transparent 50%);
background-position:calc(100% - .9rem) 52%,calc(100% - .6rem) 52%;
background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:1.8rem}
.rcs{display:grid;grid-template-columns:repeat(auto-fit,minmax(11.2rem,1fr));gap:.5rem;max-width:45rem}
.pair{display:flex;align-items:center;gap:.6rem}
.pair .dash{color:var(--faint)}
.rc{display:flex;flex-direction:column;gap:.18rem;border:1px solid var(--rule-2);
border-radius:var(--r);padding:.62rem .72rem;cursor:pointer;background:var(--surface)}
.rc:hover{border-color:var(--accent)}
.rc input{position:absolute;opacity:0;pointer-events:none;width:0;height:0}
.rc-t{font-size:.91rem;font-weight:600}
.rc-d{font-size:.79rem;color:var(--muted)}
.rc:has(input:checked){border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,var(--surface));
box-shadow:inset 3px 0 0 var(--accent)}
.rc:has(input:focus-visible){box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 25%,transparent)}
.frm-act{grid-column:1/-1;display:flex;gap:.6rem;align-items:center;
border-top:1px solid var(--rule);padding-top:.65rem;margin-top:.12rem;flex-wrap:wrap}
.source-scope-form>.rcs{grid-column:1/-1;width:100%;max-width:none;min-width:0}
.source-scope-form .rc{min-width:0}
.source-scope-form .rc-t{overflow-wrap:anywhere}
.source-scope-form .frm-act>.btn{white-space:nowrap;flex:none}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.42rem;
padding:.35rem .8rem;border:1px solid transparent;border-radius:var(--r);cursor:pointer;
font:inherit;font-size:.91rem;font-weight:500;line-height:1.5}
.btn-primary{background:var(--accent);color:var(--accent-ink)}
.btn-primary:hover{background:var(--accent-2)}
.btn-danger{background:var(--danger);color:#fff}
.btn-danger:hover{filter:brightness(1.08)}
.btn-ghost{background:var(--surface);border-color:var(--rule-2);color:var(--ink-2)}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent)}
.btn-sm{padding:.24rem .68rem;font-size:.85rem}
.btn-block{width:100%;padding:.62rem;font-size:.94rem}
.btn:disabled{opacity:.5;cursor:not-allowed}
.inl{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
.srch{display:flex;gap:.5rem;align-items:center;flex:0 1 22rem;min-width:0;max-width:100%}
.srch input[type=search]{width:15.5rem;flex:1;min-width:0}
.filters .btn{flex:none}
.fsel{display:flex;align-items:center;gap:.4rem;min-width:0;max-width:100%}
.fsel select{width:auto;min-width:7.4rem;max-width:16rem}
.fsel .fs-l{font-size:.82rem;color:var(--muted);white-space:nowrap}
.filters{display:flex;gap:.5rem .65rem;align-items:flex-end;flex-wrap:wrap;min-width:0;
max-width:100%;margin-bottom:.75rem}
/* 裸 select 与带标签筛选均按内容占位，不继承普通表单的整行宽度。 */
.filters>select{width:auto;min-width:7.4rem;max-width:min(16rem,100%);flex:0 1 auto}
.filters>.fld{flex:0 1 15rem;max-width:100%}
.pn>.filters{padding:.65rem .8rem}
.pager{display:flex;gap:.5rem;align-items:center;justify-content:flex-end;
padding:.72rem 1rem;border-top:1px solid var(--rule);font-size:.85rem}
.pg{color:var(--accent);padding:.18rem .55rem;border:1px solid var(--rule-2);border-radius:var(--r)}
.pg-on{color:var(--muted);border-color:transparent}

/* ---------- 键值列表 ---------- */
.kv{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1.25rem;font-size:.94rem}
.kv-k{color:var(--muted);font-size:.82rem;padding-top:.06rem;white-space:nowrap}
.kv-v{min-width:0;word-break:break-all}
.kv{background:var(--surface);padding:.75rem .8rem;margin-bottom:.8rem;
grid-template-columns:max-content minmax(0,1fr) max-content minmax(0,1fr);gap:.35rem .8rem}
.pn-body>.kv{padding:0;margin-bottom:0}
.fold{border:1px solid var(--rule);background:var(--surface);margin-bottom:.65rem;min-width:0}
.fold>summary{cursor:pointer;padding:.5rem .75rem;font-size:.91rem;font-weight:600;
line-height:1.55;overflow-wrap:break-word}
.fold-note{margin-left:.65rem;color:var(--muted);font-size:.8rem;font-weight:400}
.fold-body{padding:.75rem;border-top:1px solid var(--rule)}
.fold-body>.pn:last-child{margin-bottom:0}
.frm>.fold{grid-column:1/-1;margin:0}
.frm>:is(.frm,.tw,.note,.ea-choice-grid,[data-wb-actions]){grid-column:1/-1;min-width:0}
.frm>.frm{max-width:100%}
[data-customer-prices]{display:none}
.fold .frm{margin:0}
.pn-body>.frm+.fold{margin-top:.65rem}
.work-tabs{display:flex;gap:.3rem;flex-wrap:wrap;margin:.6rem 0 .85rem;border-bottom:1px solid var(--rule-2)}
.work-tab{appearance:none;background:none;color:var(--muted);border:0;border-bottom:2px solid transparent;
padding:.45rem .8rem;font:inherit;font-size:.92rem;cursor:pointer}
.work-tab[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
.work-tab:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
[hidden]{display:none!important}
.runtime-summary{grid-template-columns:repeat(4,minmax(0,1fr))}
@media(max-width:1100px){.runtime-summary{grid-template-columns:repeat(2,minmax(0,1fr))}}
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap;margin-bottom:.7rem}
.toolbar-links{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
input[type=number]{max-width:12rem}
.inl input:not([type=hidden]),.inl select{max-width:22rem}
.defs{display:grid;grid-template-columns:auto 1fr;gap:.45rem 1.1rem;font-size:.88rem}
.defs dt{color:var(--muted);font-size:.82rem}
.defs dd{margin:0}

/* 以表单实际宽度换列，抽屉和双栏面板同样适用；字号放大也不会挤成窄列。 */
@container admin-form (max-width:44rem){
.frm>.fld{grid-column:span 6;max-width:none}
.frm>:is(.fld-wide,.fld-size-8,.fld-size-12){grid-column:1/-1}
}
@container admin-form (max-width:26rem){
.frm>.fld{grid-column:1/-1;max-width:none}
}

/* ---------- 提示条 ---------- */
.note{border:1px solid var(--rule);border-left:3px solid var(--accent);
background:var(--surface-2);padding:.62rem .85rem;border-radius:var(--r);
font-size:.85rem;color:var(--ink-2);margin-bottom:1.1rem}
.note-danger{border-left-color:var(--danger)}
.note-warn{border-left-color:var(--warn)}
.note-tight{margin:1rem 0 0}
.grid-2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1.2rem;
align-items:start}
@media (max-width:1180px){.grid-2{grid-template-columns:minmax(0,1fr)}}

/* ---------- 对话框与浮层 ---------- */
.dlg{border:1px solid var(--rule-2);border-radius:var(--r);padding:0;background:var(--surface);
color:var(--ink);max-width:32rem;box-shadow:0 18px 50px rgba(0,0,0,.32)}
.dlg::backdrop{background:rgba(12,10,8,.55)}
.dlg h3{padding:.9rem 1.2rem;border-bottom:1px solid var(--rule);font-size:1rem}
.dlg ul{margin:0;padding:.95rem 1.2rem .95rem 2.2rem;font-size:.91rem;color:var(--ink-2)}
.dlg li{margin-bottom:.3rem}
.dlg-act{display:flex;justify-content:flex-end;gap:.6rem;padding:.82rem 1.2rem;
border-top:1px solid var(--rule);background:var(--surface-2)}
.toast{position:fixed;left:50%;bottom:1.55rem;transform:translate(-50%,1.2rem);
background:var(--ink);color:var(--paper);padding:.55rem 1.05rem;border-radius:var(--r);
font-size:.88rem;opacity:0;pointer-events:none;transition:opacity .16s,transform .16s;
z-index:60}
.toast.on{opacity:1;transform:translate(-50%,0)}

/* ---------- 登录页 ---------- */
.login-body{background:var(--rail);min-height:100vh}
.login{display:grid;grid-template-columns:minmax(22rem,28rem) 24.5rem;
justify-content:center;align-content:center;min-height:100vh;gap:3.2rem;
padding:2.5rem 1.5rem}
.login-card{background:var(--surface);padding:2.7rem 2.85rem 2.5rem;display:flex;
flex-direction:column;justify-content:center;
background-image:repeating-linear-gradient(to bottom,transparent 0 33px,var(--rule) 33px 34px)}
.login-head{margin-bottom:1.6rem}
.login-head h1{font-size:1.65rem;margin:.85rem 0 .25rem}
.login-head p{color:var(--muted);font-size:.88rem}
.login-form{display:flex;flex-direction:column;gap:.95rem}
.login-form .btn{margin-top:.35rem}
.login-note{color:var(--faint);font-size:.79rem;margin-top:1.25rem;line-height:1.7}
.login-side{display:flex;align-items:center;color:var(--rail-ink)}
.login-side-in{max-width:24.5rem}
.login-side h2{font-size:1.09rem;margin-bottom:1rem;color:var(--rail-ink)}
.login-side ul{margin:0 0 1.25rem;padding-left:1.25rem;color:#cfc8b8;font-size:.91rem}
.login-side li{margin-bottom:.42rem}
.login-warn{color:#d8ab5e;font-size:.85rem;border-top:1px solid var(--rail-rule);
padding-top:1rem}
@media (max-width:900px){.login{grid-template-columns:1fr}.login-side{display:none}}

/* ---------- 窄屏 ---------- */
@media (max-width:1080px){
:root{--rail-w:4rem}
.rail-title,.nav-t,.nav-group,.rail-k,.rail-who b,.rail-scale{display:none}
/* 窄屏与折叠态同一套观感：大块只留短名 */
.blk-t,.blk-d,.blk-b,.rail-mini .rm-t,.rail-out .ro-t,.rail-sep{display:none}
.blk-s{display:block}
.blk{padding:.62rem .2rem;text-align:center}
.rail-mini::before{content:"说明";font-size:.8rem}
.rail-out .ro-s{display:inline}
.rail-head{justify-content:center;padding:1.05rem .5rem;flex-direction:column;gap:.5rem}
.nav-i{justify-content:center;padding:.7rem 0}
.rail-foot{padding:.85rem .5rem 1.05rem;align-items:center}
.rail-mini{text-align:center}
.main{padding:1.2rem 1.1rem 2.6rem}
.frm,.frm-3{grid-template-columns:repeat(12,minmax(0,1fr))}
.srch input[type=search]{width:100%}
}
@media (max-width:640px){.top{flex-direction:column;gap:.55rem}.top-context{margin-top:0}}
@media (max-width:700px){
.slips{grid-template-columns:repeat(2,minmax(0,1fr))}
.frm>.fld,.frm-3>.fld{grid-column:1/-1;max-width:none}
.kv{grid-template-columns:max-content minmax(0,1fr)}
.fold-note{display:block;margin-left:0}
.srch{flex-basis:100%}
.fsel{flex:1 1 12rem}.fsel select{flex:1;min-width:0;max-width:100%}
.filters>select{flex:1 1 10rem;min-width:0}
.filters>.fld{flex-basis:100%}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

[data-subscription-days][hidden]{display:none}
.rib[data-p="0"] .rib-fill{width:0%}.rib[data-p="5"] .rib-fill{width:5%}.rib[data-p="10"] .rib-fill{width:10%}.rib[data-p="15"] .rib-fill{width:15%}.rib[data-p="20"] .rib-fill{width:20%}.rib[data-p="25"] .rib-fill{width:25%}.rib[data-p="30"] .rib-fill{width:30%}.rib[data-p="35"] .rib-fill{width:35%}.rib[data-p="40"] .rib-fill{width:40%}.rib[data-p="45"] .rib-fill{width:45%}.rib[data-p="50"] .rib-fill{width:50%}.rib[data-p="55"] .rib-fill{width:55%}.rib[data-p="60"] .rib-fill{width:60%}.rib[data-p="65"] .rib-fill{width:65%}.rib[data-p="70"] .rib-fill{width:70%}.rib[data-p="75"] .rib-fill{width:75%}.rib[data-p="80"] .rib-fill{width:80%}.rib[data-p="85"] .rib-fill{width:85%}.rib[data-p="90"] .rib-fill{width:90%}.rib[data-p="95"] .rib-fill{width:95%}.rib[data-p="100"] .rib-fill{width:100%}
html{scrollbar-gutter:stable}
[hidden]{display:none!important}
.permission-columns{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1rem}
.permission-columns h3{font-size:.95rem;margin:.3rem 0 .6rem}
.choice-list{max-height:24rem;overflow:auto;border:1px solid var(--rule);padding:.4rem .6rem;border-radius:var(--r)}
.choice-list .check-line{padding:.35rem 0;margin:0;border-bottom:1px solid var(--rule)}
.choice-list .check-line:last-child{border-bottom:0}
.permission-columns input[type=search]{margin-bottom:.5rem}
@media(max-width:700px){.permission-columns{grid-template-columns:minmax(0,1fr)}}
.wb-drawer{position:fixed;right:0;top:0;bottom:0;width:min(43rem,94vw);z-index:80;background:var(--surface);border-left:1px solid var(--rule);box-shadow:-6px 0 25px #0002;padding:1rem;overflow:auto}
.wb-drawer-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem}
.wb-drawer-head h2{font-size:1.1rem;margin:0}.wb-drawer .frm{max-width:100%}
.wb-bulk{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;padding:.5rem 0}
.wb-bulk select{width:auto;min-width:10rem;max-width:100%}.wb-bulk input{width:1rem}.tbl input[type=checkbox]{width:1rem;height:1rem;vertical-align:middle}
.wb-bulk label{display:flex;align-items:center;gap:.35rem;white-space:nowrap}
.wb-action-bar{position:sticky;top:0;z-index:12;align-self:start;background:var(--surface);padding:.65rem .75rem;border-bottom:1px solid var(--rule)}
.wb-bulk-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-left:auto;min-width:0}
.wb-bulk-actions label{white-space:normal}
.wb-dialog{width:min(54rem,calc(100vw - 2rem));max-width:none;max-height:calc(100dvh - 2rem);padding:0;margin:auto;border:1px solid var(--rule);border-radius:var(--r);background:var(--surface);color:var(--ink)}
.wb-dialog[open]{display:flex;flex-direction:column}
.wb-dialog::backdrop{background:#0006}
.wb-dialog-head,.wb-dialog-foot{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.6rem;padding:.75rem 1rem;flex-shrink:0}
.wb-dialog-head{border-bottom:1px solid var(--rule)}
.wb-dialog-head h2{margin:0;font-size:1.1rem}
.wb-dialog-foot{border-top:1px solid var(--rule)}
.wb-dialog-body{overflow-y:auto;overscroll-behavior:contain;padding:.5rem 1rem;min-height:0}
.wb-dialog .frm{max-width:none}
body:has(.wb-dialog[open]){overflow:hidden}
.wb-summary{grid-column:1/-1;font-size:.9rem;margin:.2rem 0;color:var(--muted)}
.wb-options{padding:.5rem 0}.pn-body{padding:.7rem}.tbl td,.tbl th{padding:.4rem .5rem}
.pn>.frm-compact{max-width:none}
.frm>.tw,.frm>.wb-bulk,.frm>.wb-options,.frm>details,.frm>.note,.frm>.frm{grid-column:1/-1}
.frm input[name*=yuan],.frm input[name=monthly],.frm input[name=yearly],.frm input[name=rate_percent]{max-width:12rem}
.frm input[name=quantity],.frm input[name=duration_days]{max-width:7rem}
.tbl .btn{padding:.25rem .4rem;white-space:nowrap;margin:.1rem .15rem .1rem 0}
.tbl td:last-child{white-space:normal}
@media(max-width:700px){.wb-drawer{width:100vw}.wb-bulk{gap:.4rem}}
