/* ── Shared utility classes (DRY) ── */
/* Base: any interactive control (input, select, textarea) */
.ctrl{padding:5px 9px;background:var(--sf2);border:1px solid var(--bd);border-radius:6px;color:var(--tx);font-size:.78rem;font-family:'Noto Sans SC',sans-serif;outline:none;transition:.2s;box-sizing:border-box}
.ctrl:focus{border-color:var(--ac)}
/* Flex row helpers */
.fr{display:flex;align-items:center;gap:8px}
.fr-s{display:flex;align-items:stretch;gap:0}
/* Common hover: border green */
.hv-ac:hover{border-color:var(--ac);color:var(--ac)}
/* Mono number display */
.mono{font-family:'JetBrains Mono',monospace}

:root{--tr:.2s;--ff:'Noto Sans SC',sans-serif;--bg:#0f1114;--sf:#181a20;--sf2:#1e2028;--bd:#2a2d37;--ac:#4ade80;--ac2:#60a5fa;--tx:#e4e7ec;--mu:#7c8293;--er:#f87171;--r:10px;--sh:0 4px 24px rgba(0,0,0,.35);--gd:linear-gradient(90deg,#34d399,#818cf8);--hv:rgba(74,222,128,.06)}
[data-theme=light]{--bg:#f5f6fa;--sf:#ffffff;--sf2:#eef1f6;--bd:#a8b0c0;--ac:#16a34a;--ac2:#2563eb;--tx:#111827;--mu:#4b5563;--er:#dc2626;--sh:0 2px 12px rgba(0,0,0,.06);--gd:linear-gradient(90deg,#16a34a,#6366f1);--hv:rgba(22,163,74,.06)}
/* ── Light theme overrides ── */
[data-theme=light] select:focus,[data-theme=light] input:focus{box-shadow:0 0 0 3px rgba(22,163,74,.15)}
[data-theme=light] .bx{box-shadow:0 3px 12px rgba(22,163,74,.22)}
[data-theme=light] .bx:hover:not(:disabled){box-shadow:0 5px 18px rgba(22,163,74,.32)}
[data-theme=light] .modal-mask,[data-theme=light] .stat-modal-mask,[data-theme=light] .coll-modal-mask{background:rgba(0,0,0,.2);backdrop-filter:blur(3px)}
[data-theme=light] .modal{box-shadow:0 16px 48px rgba(0,0,0,.14);border-color:var(--bd)}
[data-theme=light] .dash-card{box-shadow:0 1px 8px rgba(0,0,0,.07);border-color:var(--bd)}
[data-theme=light] .dash-card:hover{border-color:rgba(22,163,74,.45);box-shadow:0 3px 16px rgba(22,163,74,.12)}
[data-theme=light] .time-card{border-color:var(--bd)}
[data-theme=light] .time-card:hover{border-color:rgba(37,99,235,.4);box-shadow:0 3px 14px rgba(37,99,235,.1)}
[data-theme=light] .cb-drop{box-shadow:0 6px 20px rgba(0,0,0,.12);border-color:var(--bd)}
[data-theme=light] .cb-opt:hover,[data-theme=light] .cb-opt.focused{background:rgba(22,163,74,.1);color:#15803d}
[data-theme=light] .cb-opt mark{background:rgba(22,163,74,.18);color:#15803d}
[data-theme=light] .cb-inp:focus{box-shadow:0 0 0 2px rgba(22,163,74,.12)}
[data-theme=light] .filter-drop{box-shadow:0 6px 20px rgba(0,0,0,.12);border-color:var(--bd)}
[data-theme=light] .filter-opt:hover{background:rgba(22,163,74,.07)}
[data-theme=light] .coll-panel{box-shadow:0 6px 22px rgba(0,0,0,.12);border-color:var(--bd)}
[data-theme=light] .coll-panel-inner{box-shadow:0 6px 16px rgba(0,0,0,.1)}
[data-theme=light] .coll-modal{box-shadow:0 16px 40px rgba(0,0,0,.12);border-color:var(--bd)}
[data-theme=light] .stat-panel{box-shadow:-4px 0 32px rgba(0,0,0,.1)}
[data-theme=light] .mgr-panel{box-shadow:4px 0 32px rgba(0,0,0,.08)}
[data-theme=light] .btn-pri{color:#fff}
[data-theme=light] .btn-pri:hover{box-shadow:0 3px 12px rgba(22,163,74,.25)}
[data-theme=light] .view-tab.active{color:#fff}
[data-theme=light] td.chk,[data-theme=light] th.chk{box-shadow:2px 0 4px rgba(0,0,0,.05)}
[data-theme=light] td.chk{box-shadow:2px 0 4px rgba(0,0,0,.04)}
[data-theme=light] .stat-table td.ac{color:var(--ac);font-weight:700}
[data-theme=light] .stat-table th{background:var(--sf2);color:#374151}
[data-theme=light] .stat-table tr:hover td{background:var(--hv)}
[data-theme=light] .stat-table-wrap{background:var(--sf);border-color:var(--bd)}
[data-theme=light] .stat-panel{background:var(--bg);border-left:1px solid var(--bd)}
[data-theme=light] .stat-head{background:var(--sf);border-color:var(--bd)}
[data-theme=light] .stat-head-btn{border-color:var(--bd);background:var(--sf)}
[data-theme=light] .stat-body{background:var(--bg)}
[data-theme=light] .stat-table .free-badge{background:rgba(220,38,38,.1);color:#dc2626}
[data-theme=light] .sku-val-sales{color:#111827}
[data-theme=light] .sku-val-inv{color:#111827}
[data-theme=light] .sku-val-inv.low{color:var(--er)}
[data-theme=light] .dash-bar-val{color:#111827}

[data-theme=light] .dash-pie-center-text{fill:#111827}
[data-theme=light] .time-card-time{color:#111827}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--ff);background:var(--bg);color:var(--tx);min-height:100vh;transition:background .4s ease,color .4s ease}
body.theme-switching,body.theme-switching *{transition:background-color .4s ease,border-color .4s ease,color .3s ease,box-shadow .3s ease!important}
body.theme-switching canvas,body.theme-switching .coll-modal-mask,body.theme-switching #loginScreen,body.theme-switching #unlockScreen,body.theme-switching #appMain{transition:none!important}
.w{position:relative;z-index:1}
.w{max-width:1060px;margin:0 auto;padding:28px 16px 60px}
header{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}
.hl{display:flex;align-items:center;gap:12px}
.hi{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;overflow:hidden;padding:0}.hi img{width:100%;height:100%;object-fit:cover;display:block}
h1{font-size:1.25rem;font-weight:700}h1 em{font-style:normal;color:var(--ac)}
.hs{font-size:.68rem;color:var(--mu);font-family:'JetBrains Mono',monospace;margin-top:2px}
.hbtns{display:flex;gap:8px;align-items:center}
.tbtn{width:38px;height:38px;border-radius:10px;border:1.5px solid var(--bd);background:var(--sf);color:var(--tx);cursor:pointer;font-size:16px;display:grid;place-items:center;transition:var(--tr)}
.tbtn:hover{border-color:#60a5fa;background:rgba(96,165,250,.06)}
/* Theme dropdown */
.theme-wrap{position:relative}
.theme-drop{display:none;position:absolute;top:calc(100% + 6px);right:0;background:var(--sf);border:1px solid var(--bd);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.35);z-index:500;padding:6px;min-width:156px;animation:popIn .15s ease}
.theme-drop.open{display:block}
.theme-drop-label{font-size:.58rem;color:var(--mu);padding:4px 10px 2px;letter-spacing:.08em;text-transform:uppercase;font-weight:600}
.theme-opt{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:7px;cursor:pointer;font-size:.76rem;color:var(--tx);transition:.15s;white-space:nowrap}
.theme-opt:hover{background:rgba(99,102,241,.1)}
.theme-opt.active{background:rgba(99,102,241,.12);font-weight:600}
.theme-dot{width:28px;height:10px;border-radius:5px;flex-shrink:0;border:1px solid rgba(255,255,255,.12)}
[data-theme=light] .theme-drop{box-shadow:0 8px 24px rgba(0,0,0,.12)}
[data-theme=light] .theme-opt:hover{background:rgba(79,70,229,.08)}
[data-theme=light] .theme-opt.active{background:rgba(79,70,229,.1)}
[data-theme=light] .theme-dot{border-color:rgba(0,0,0,.08)}
/* ── Color Schemes (each has --gd for bar gradients) ── */
/* Dark C: 黑金高级 */
[data-scheme=dark-c]{--bg:#020202;--sf:#0A0A0A;--sf2:#141414;--bd:rgba(255,255,255,0.06);--ac:#D4AF37;--ac2:#FACC15;--tx:#F5F5F5;--mu:#A1A1AA;--er:#EF4444;--gd:linear-gradient(90deg,#B8860B,#FFD700);--hv:rgba(212,175,55,.06)}
/* Dark E: 极简紫 */
[data-scheme=dark-e]{--bg:#0A0A0A;--sf:#111111;--sf2:#1A1A1A;--bd:#27272A;--ac:#A78BFA;--ac2:#7C3AED;--tx:#F5F5F5;--mu:#A1A1AA;--er:#F87171;--gd:linear-gradient(90deg,#6D28D9,#C4B5FD);--hv:rgba(167,139,250,.06)}
/* Dark F: 冷感科技 */
[data-scheme=dark-f]{--bg:#0B1220;--sf:#111827;--sf2:#1F2937;--bd:#1F2937;--ac:#38BDF8;--ac2:#2563EB;--tx:#E5E7EB;--mu:#94A3B8;--er:#F87171;--gd:linear-gradient(90deg,#1D4ED8,#67E8F9);--hv:rgba(56,189,248,.06)}
/* Light H: 极简紫 */
[data-scheme=light-h]{--bg:#FAFAFA;--sf:#FFFFFF;--sf2:#F3F0FF;--bd:#A8A8B4;--ac:#7C3AED;--ac2:#A78BFA;--tx:#111111;--mu:#6B7280;--er:#EF4444;--gd:linear-gradient(90deg,#6D28D9,#C4B5FD);--hv:rgba(124,58,237,.06)}
/* Light I: 冷感科技 */
[data-scheme=light-i]{--bg:#F8FAFC;--sf:#FFFFFF;--sf2:#EFF6FF;--bd:#9BAFC4;--ac:#2563EB;--ac2:#38BDF8;--tx:#0F172A;--mu:#64748B;--er:#EF4444;--gd:linear-gradient(90deg,#1D4ED8,#67E8F9);--hv:rgba(37,99,235,.06)}
/* Light J: 活泼增长 */
[data-scheme=light-j]{--bg:#FFF7ED;--sf:#FFFFFF;--sf2:#FFEDD5;--bd:#E8B880;--ac:#F97316;--ac2:#FB923C;--tx:#1C1917;--mu:#57534E;--er:#EF4444;--gd:linear-gradient(90deg,#EA580C,#FBBF24);--hv:rgba(249,115,22,.06)}
.mbtn{padding:0 16px;height:38px;border-radius:10px;border:1.5px solid var(--bd);background:var(--sf);color:var(--tx);cursor:pointer;font-size:.8rem;font-family:var(--ff);display:flex;align-items:center;gap:7px;white-space:nowrap;transition:var(--tr)}
.mbtn:hover{border-color:var(--ac2);color:var(--ac2);background:rgba(96,165,250,.05)}
.mbtn.active{border-color:var(--ac2);background:rgba(96,165,250,.08);color:var(--ac2)}
.card{background:var(--sf);border:1px solid var(--bd);border-radius:12px;padding:20px 22px;margin-bottom:16px;box-shadow:var(--sh)}
.ct{font-size:.63rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--mu);font-family:'JetBrains Mono',monospace;margin-bottom:13px;display:flex;align-items:center;gap:6px}
.ct::before{content:'';width:3px;height:10px;background:var(--ac);border-radius:2px;display:inline-block}
.cg{display:grid;grid-template-columns:1fr 1fr;gap:13px}
@media(max-width:600px){.cg{grid-template-columns:1fr}}
label{font-size:.75rem;color:var(--mu);display:block;margin-bottom:5px;font-weight:500}
select,input[type=text],input[type=number]{width:100%;padding:9px 13px;background:var(--sf2);border:1px solid var(--bd);border-radius:8px;color:var(--tx);font-size:.85rem;font-family:var(--ff);outline:none;transition:var(--tr);-webkit-appearance:none}
select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath fill='%238b949e' d='M5 6L0 0h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;padding-right:28px;cursor:pointer}
select:focus,input:focus{border-color:var(--ac);box-shadow:0 0 0 3px rgba(74,222,128,.1)}
.fn-row{display:flex;gap:8px;align-items:center}
.fn-row input{flex:1}
.shop-row{display:flex;gap:6px}
.shop-row select{flex:1}
.shop-add-btn{width:36px;height:36px;padding:0;background:var(--sf2);border:1px solid var(--bd);border-radius:8px;color:var(--ac);cursor:pointer;font-size:.85rem;display:grid;place-items:center;transition:var(--tr);flex-shrink:0}
.shop-add-btn:hover{border-color:var(--ac)}
.shop-del-btn{width:36px;height:36px;padding:0;background:var(--sf2);border:1px solid var(--bd);border-radius:8px;color:var(--mu);cursor:pointer;font-size:.85rem;display:grid;place-items:center;transition:var(--tr);flex-shrink:0}
.shop-del-btn:hover{border-color:var(--er);color:var(--er)}
.cfg-btn{height:36px;padding:0 14px;background:var(--sf2);border:1px solid var(--bd);border-radius:8px;color:var(--tx);cursor:pointer;font-size:.78rem;font-family:var(--ff);white-space:nowrap;transition:var(--tr);flex-shrink:0}
.cfg-btn:hover{border-color:#60a5fa}
.dz{border:2px dashed var(--bd);border-radius:12px;padding:32px 20px;text-align:center;cursor:pointer;transition:var(--tr);position:relative}
.dz:hover,.dz.ov{border-color:var(--ac);background:rgba(74,222,128,.03)}
.dz input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%}
.di{font-size:1.8rem;margin-bottom:6px}
.dt{font-size:.85rem;color:var(--mu)}.dt strong{color:var(--ac)}
.dh{font-size:.66rem;color:var(--mu);margin-top:4px;font-family:'JetBrains Mono',monospace}
.fb{display:flex;align-items:center;gap:9px;background:var(--sf2);border:1px solid var(--bd);border-radius:10px;padding:11px 14px;margin-top:10px;animation:si .2s ease}
@keyframes si{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
@keyframes maskIn{from{opacity:0}to{opacity:1}}
@keyframes maskOut{from{opacity:1}to{opacity:0}}
@keyframes modalIn{from{opacity:0;transform:scale(.92) translateY(12px)}to{opacity:1;transform:scale(1) translateY(0)}}
@keyframes modalOut{from{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(.92) translateY(12px)}}
@keyframes slideInRight{from{transform:translateX(100%)}to{transform:translateX(0)}}
@keyframes slideOutRight{from{transform:translateX(0)}to{transform:translateX(100%)}}
@keyframes popIn{from{opacity:0;transform:scale(.93)}to{opacity:1;transform:scale(1)}}
@keyframes popOut{from{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.93)}}
.fbi{flex:1;min-width:0}.fbn{font-size:.8rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fbm{font-size:.67rem;color:var(--mu);font-family:'JetBrains Mono',monospace;margin-top:2px}
.fbr{background:none;border:none;color:var(--mu);cursor:pointer;padding:4px;border-radius:4px;transition:var(--tr);font-size:.88rem}
.fbr:hover{color:var(--er)}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}
.stat{background:var(--sf);border:1px solid var(--bd);border-radius:12px;padding:16px;text-align:center}
.sv{font-size:1.5rem;font-weight:700;font-family:'JetBrains Mono',monospace;color:var(--ac)}
.sl{font-size:.7rem;color:var(--mu);margin-top:4px}
.tw{overflow-x:auto;overflow-y:hidden;border-radius:10px;border:1px solid var(--bd);position:relative}
.tw-inner{overflow-y:auto;max-height:520px;min-height:300px;will-change:scroll-position}
table{width:max-content;min-width:100%;border-collapse:collapse;font-size:.75rem;table-layout:auto}
thead{position:sticky;top:0;z-index:10;overflow:visible;overflow:visible}
thead th.chk{z-index:12;background:var(--sf2)}
th{background:var(--sf2);padding:9px 10px;text-align:left;font-size:.62rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--mu);border-bottom:1px solid var(--bd);white-space:nowrap;font-family:'JetBrains Mono',monospace;max-width:260px;min-width:60px;position:relative}
td{padding:0;border-bottom:1px solid var(--bd);max-width:260px}
tr:last-child td{border-bottom:none}
tr:hover td{background:rgba(57,211,83,.025)}
td input.ci{width:100%;min-width:60px;max-width:260px;padding:9px 10px;background:transparent;border:none;outline:none;color:var(--tx);font-size:.75rem;font-family:var(--ff);line-height:1.5;box-sizing:border-box}
td input.ci:focus{background:rgba(57,211,83,.07);border-radius:3px}
td input.ci.ca{color:var(--ac);font-family:'JetBrains Mono',monospace;font-weight:600}
td input.ci.cw{color:var(--ac2);font-weight:600}
.row-del{background:none;border:none;color:var(--mu);cursor:pointer;padding:0 8px;font-size:.85rem;height:100%;opacity:0;transition:.15s}
tr:hover .row-del{opacity:1}
.row-del:hover{color:var(--er)}
.al{padding:12px 15px;border-radius:10px;font-size:.82rem;display:flex;align-items:flex-start;gap:8px;margin-bottom:12px;animation:si .2s ease}
.ok{background:rgba(74,222,128,.08);border:1px solid rgba(74,222,128,.25);color:var(--ac)}
.er{background:rgba(248,113,113,.08);border:1px solid rgba(248,113,113,.25);color:var(--er)}
.tbar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px 0}
.tbar-right{display:flex;gap:8px;align-items:center}
/* === 预览视图选择器 === */
.pv-tabs-bar{display:none;padding:10px 16px;gap:8px;align-items:center;border-bottom:1px solid var(--bd)}
.pv-tabs-bar.active{display:flex}
.pv-select{position:relative;flex:0 0 auto}
.pv-select-btn{display:flex;align-items:center;gap:8px;padding:6px 12px 6px 14px;background:var(--sf2);border:1px solid var(--bd);border-radius:8px;color:var(--tx);font-size:.74rem;font-family:var(--ff);cursor:pointer;transition:.15s;font-weight:500;min-width:160px;justify-content:space-between}
.pv-select-btn:hover{border-color:var(--ac);background:var(--hv)}
.pv-select-btn.open{border-color:var(--ac);background:var(--hv)}
.pv-select-icon{font-size:.85rem;line-height:1}
.pv-select-label{flex:1;text-align:left}
.pv-select-badge{font-size:.6rem;padding:1px 7px;border-radius:5px;background:rgba(74,222,128,.12);color:var(--ac);font-family:'JetBrains Mono',monospace;font-weight:600;line-height:1.4}
.pv-select-arrow{font-size:.62rem;color:var(--mu);transition:.2s;margin-left:2px}
.pv-select-btn.open .pv-select-arrow{transform:rotate(180deg)}
.pv-select-menu{position:absolute;top:calc(100% + 4px);left:0;min-width:100%;background:var(--sf);border:1px solid var(--bd);border-radius:8px;box-shadow:0 8px 28px rgba(0,0,0,.25);padding:4px;z-index:200;display:none;animation:popIn .14s ease}
.pv-select-menu.open{display:block}
.pv-select-opt{display:flex;align-items:center;gap:8px;padding:6px 12px;border-radius:6px;cursor:pointer;font-size:.74rem;color:var(--tx);transition:.12s;justify-content:space-between;font-family:var(--ff)}
.pv-select-opt:hover{background:var(--hv)}
.pv-select-opt.active{color:var(--ac);font-weight:600;background:rgba(74,222,128,.05)}
.pv-select-opt-badge{font-size:.6rem;padding:1px 7px;border-radius:5px;background:var(--sf2);color:var(--mu);font-family:'JetBrains Mono',monospace;font-weight:600;line-height:1.4}
.pv-select-opt.active .pv-select-opt-badge{background:rgba(74,222,128,.12);color:var(--ac)}
.pv-pdf-btn{display:flex;align-items:center;gap:6px;padding:6px 12px;background:transparent;border:1px solid var(--bd);border-radius:8px;color:var(--mu);font-size:.74rem;font-family:var(--ff);cursor:pointer;transition:.15s}
.pv-pdf-btn:hover{border-color:var(--ac);color:var(--ac);background:var(--hv)}
.pv-pdf-btn.active{background:var(--ac);color:#0d1117;border-color:var(--ac);font-weight:600}
[data-theme=light] .pv-pdf-btn.active{color:#fff}
.pv-pdf-btn-badge{font-size:.6rem;font-family:'JetBrains Mono',monospace;opacity:.8}
[data-theme=light] .pv-select-menu{box-shadow:0 8px 24px rgba(0,0,0,.12)}
.pv-readonly-table{width:100%;border-collapse:collapse;font-size:.72rem;font-family:var(--ff)}
.pv-readonly-table thead{position:sticky;top:0;z-index:1;background:var(--sf2)}
.pv-readonly-table th{padding:8px 10px;text-align:left;font-size:.6rem;font-weight:600;letter-spacing:.06em;color:var(--mu);text-transform:uppercase;border-bottom:2px solid var(--bd);white-space:nowrap}
.pv-readonly-table td{padding:6px 10px;border-bottom:1px solid var(--bd);color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}
.pv-readonly-table tr:hover td{background:var(--hv)}
.pv-readonly-empty{text-align:center;padding:40px 20px;color:var(--mu);font-size:.82rem;line-height:1.6}
.tbtn2{padding:5px 12px;font-size:.72rem;border-radius:6px;border:1px solid var(--bd);background:var(--sf2);color:var(--mu);cursor:pointer;transition:var(--tr);font-family:var(--ff)}
.tbtn2:hover{border-color:var(--ac);color:var(--ac)}
.bx{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:14px;background:linear-gradient(135deg,var(--ac),var(--ac2));color:#0d1117;border:none;border-radius:12px;font-size:.95rem;font-weight:700;font-family:var(--ff);cursor:pointer;transition:var(--tr);box-shadow:0 4px 16px rgba(74,222,128,.18)}
.bx:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 24px rgba(74,222,128,.28)}
.bx:disabled{opacity:.4;cursor:not-allowed}
/* ── View Toggle ── */
.view-tabs{display:flex;gap:2px;background:var(--sf2);border:1px solid var(--bd);border-radius:9px;padding:2px}
.view-tab{padding:5px 16px;border:none;border-radius:7px;font-size:.78rem;cursor:pointer;font-family:'Noto Sans SC',sans-serif;transition:.18s;background:transparent;color:var(--mu);font-weight:500}
.view-tab.active{background:var(--ac);color:#0d1117;font-weight:700}
.view-tab:not(.active):hover{background:rgba(74,222,128,.1)}
/* ── Dashboard ── */
.dash-layout{display:flex;gap:14px;margin-top:12px}
.dash-sidebar{width:180px;flex-shrink:0;display:flex;flex-direction:column;gap:10px}
.dash-main{flex:1;min-width:0}
.time-card{background:var(--sf);border:1px solid var(--bd);border-radius:12px;padding:14px 16px;transition:border-color .18s,box-shadow .18s}
.time-card:hover{border-color:rgba(96,165,250,.25);box-shadow:0 2px 12px rgba(96,165,250,.06)}
.time-card-flag{font-size:.68rem;color:var(--mu);letter-spacing:.04em;margin-bottom:6px;display:flex;align-items:center;gap:5px}
.time-card-time{font-family:'JetBrains Mono',monospace;font-size:1.15rem;font-weight:700;color:var(--tx);line-height:1.2}
.time-card-date{font-family:'JetBrains Mono',monospace;font-size:.68rem;color:var(--mu);margin-top:4px}
@media(max-width:1100px){.dash-sidebar{width:150px}.time-card-time{font-size:1rem}}
@media(max-width:899px){.dash-layout{flex-direction:column}.dash-sidebar{width:100%;flex-direction:row}.time-card{flex:1}}
.dash-sortable{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.dash-card{background:var(--sf);border:1px solid var(--bd);border-radius:14px;padding:0;box-shadow:0 2px 12px rgba(0,0,0,.12);animation:si .25s ease;display:flex;flex-direction:column;overflow:hidden;transition:border-color .18s,box-shadow .18s}
.dash-card:hover{border-color:rgba(74,222,128,.3);box-shadow:0 2px 16px rgba(74,222,128,.08)}
.dash-card.full-w{grid-column:1/-1}
.dash-card-head{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;border-bottom:1px solid var(--bd)}
.dash-card-title{font-size:.84rem;font-weight:700;display:flex;align-items:center;gap:8px}
.dash-card-badge{font-size:.6rem;color:var(--mu);background:var(--sf2);border:1px solid var(--bd);padding:2px 8px;border-radius:5px;font-family:'JetBrains Mono',monospace}
.dash-empty{text-align:center;padding:48px 20px;color:var(--mu);font-size:.82rem}
/* SKU table */
.sku-table-wrap{overflow-x:auto;overflow-y:auto;flex:1;min-height:0}
.sku-table{width:max-content;min-width:100%;border-collapse:collapse;font-size:.76rem;table-layout:auto}
.sku-table thead{position:sticky;top:0;z-index:3}
.sku-table th{background:var(--sf2);padding:7px 12px;text-align:left;font-size:.62rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--mu);white-space:nowrap;border-bottom:2px solid var(--bd)}
.sku-table th:first-child{padding-left:6px}
.sku-table td{padding:6px 12px;border-bottom:1px solid var(--bd);vertical-align:middle;white-space:nowrap;line-height:1.5}
.sku-table td:first-child{padding-left:6px}
.sku-table td.col-name,.sku-table td.col-sku{overflow:hidden;text-overflow:ellipsis;max-width:280px}
/* 冻结列：必须使用不透明背景，避免横向滚动时下方内容透出 */
.sku-table th.is-frozen,.sku-table td.is-frozen{position:sticky;z-index:2;background:var(--sf)}
.sku-table thead th.is-frozen{background:var(--sf2);z-index:4}
.sku-table th.is-frozen-last,.sku-table td.is-frozen-last{box-shadow:6px 0 8px -4px rgba(0,0,0,.12)}
/* hover 时：把半透明的 hover 色叠在不透明的 sf/sf2 之上，防止透视 */
.sku-table tr:hover td{background:var(--hv)}
.sku-table tr:hover td.is-frozen{background:linear-gradient(var(--hv),var(--hv)),var(--sf)}
.sku-table tr:hover thead th.is-frozen{background:linear-gradient(var(--hv),var(--hv)),var(--sf2)}
.sku-table tr:last-child td{border-bottom:none}
.sku-table tr.sku-dragging{opacity:.4}
.sku-table tr.sku-drag-over td{border-top:2px solid var(--ac)}
.sku-th-sort{cursor:pointer;user-select:none;transition:color .15s}
.sku-th-sort:hover{color:var(--ac)}
.sku-th-sort::after{content:'';display:inline-block;margin-left:4px;font-size:.55rem;opacity:.4}
.sku-th-sort.asc::after{content:'\25b2';opacity:.9;color:var(--ac)}
.sku-th-sort.desc::after{content:'\25bc';opacity:.9;color:var(--ac)}
.sku-row-grip{opacity:0;cursor:grab;color:var(--mu);font-size:10px;letter-spacing:1px;transition:opacity .12s;user-select:none;line-height:1}
.sku-table tr:hover .sku-row-grip{opacity:.45}
.sku-row-grip:hover{opacity:.8!important}
.sku-row-grip:active{cursor:grabbing}
.sku-thumb-wrap{width:28px;height:28px;border-radius:6px;overflow:hidden;background:var(--sf2);border:1px solid var(--bd);display:flex;align-items:center;justify-content:center;cursor:pointer;position:relative;flex-shrink:0;transition:border-color .15s}
.sku-thumb-wrap img{width:100%;height:100%;object-fit:cover}
.sku-thumb-wrap .sku-thumb-ph{font-size:.55rem;color:var(--mu)}
.sku-thumb-wrap:hover{border-color:var(--ac)}
.sku-thumb-preview{position:absolute;right:-1px;bottom:-1px;width:14px;height:14px;background:rgba(0,0,0,.6);display:none;align-items:center;justify-content:center;border-radius:3px 0 5px 0;cursor:pointer;z-index:3}
.sku-thumb-preview span{font-size:.5rem;line-height:1;filter:brightness(2)}
.sku-thumb-wrap:hover .sku-thumb-preview{display:flex}
.sku-val-sales{font-family:'JetBrains Mono',monospace;font-weight:600;font-size:.78rem}
.sku-val-inv{font-family:'JetBrains Mono',monospace;font-weight:600;font-size:.78rem}
.sku-val-inv.low{color:var(--er)}
.sku-name-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px;font-weight:500}
.sku-raw{font-size:.68rem;color:var(--mu);font-family:'JetBrains Mono',monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}
/* resizer */
.dash-resizer{grid-column:1/-1;height:12px;display:flex;align-items:center;justify-content:center;cursor:row-resize;user-select:none}
.dash-resizer-line{width:40px;height:3px;border-radius:2px;background:var(--bd);transition:.18s}
.dash-resizer:hover .dash-resizer-line,.dash-resizer.dragging .dash-resizer-line{background:var(--ac);width:56px}
/* bar chart */
.dash-bar-body{padding:14px 20px;flex:1;min-height:0;overflow-y:auto}
.dash-bar-area{display:flex;flex-direction:column;gap:10px}
.dash-bar-row{display:flex;align-items:center;gap:10px;font-size:.76rem}
.dash-bar-label{width:96px;flex-shrink:0;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--tx);font-size:.72rem;font-weight:500}
.dash-bar-track{flex:1;height:22px;background:var(--sf2);border-radius:6px;overflow:hidden;position:relative}
.dash-bar-fill{height:100%;border-radius:6px;transition:width .6s cubic-bezier(.16,1,.3,1);min-width:2px}
.dash-bar-val{min-width:32px;font-family:'JetBrains Mono',monospace;font-size:.74rem;font-weight:700;color:var(--tx);text-align:left;flex-shrink:0}
.dash-bar-empty{text-align:center;padding:32px 0;color:var(--mu);font-size:.8rem}
/* pie chart */
.dash-pie-body{padding:14px 20px;flex:1;min-height:0;display:flex;align-items:center;gap:24px;overflow:hidden}
.dash-pie-svg-wrap{flex-shrink:0}
.dash-pie-center-text{font-family:'JetBrains Mono',monospace;fill:var(--tx);font-weight:700}
.dash-pie-center-sub{font-size:10px;fill:var(--mu);font-weight:400}
.dash-pie-labels{flex:1;display:flex;flex-direction:column;gap:6px;min-width:0;overflow-y:auto;max-height:200px}
.dash-pie-lbl-row{display:flex;align-items:center;gap:7px;font-size:.72rem;color:var(--tx)}
.dash-pie-lbl-dot{width:9px;height:9px;border-radius:3px;flex-shrink:0}
.dash-pie-lbl-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
.dash-pie-lbl-val{font-family:'JetBrains Mono',monospace;font-weight:600;font-size:.72rem;min-width:26px;text-align:right}
.dash-pie-lbl-pct{font-family:'JetBrains Mono',monospace;color:var(--mu);font-size:.64rem;min-width:40px;text-align:right}
.dash-pie-empty{text-align:center;padding:32px 0;color:var(--mu);font-size:.8rem}
@media(max-width:899px){.dash-sortable{grid-template-columns:1fr}.dash-card.full-w{grid-column:1}.dash-pie-body{flex-wrap:wrap;justify-content:center}}
/* modal */
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.55);backdrop-filter:blur(4px);z-index:100;display:flex;align-items:center;justify-content:center;padding:16px;animation:maskIn .22s ease}
.modal-mask.closing{animation:maskOut .18s ease forwards;pointer-events:none}
.modal{background:var(--sf);border:1px solid var(--bd);border-radius:16px;width:100%;max-width:960px;max-height:92vh;display:flex;flex-direction:column;box-shadow:0 24px 64px rgba(0,0,0,.4);animation:modalIn .25s cubic-bezier(.16,1,.3,1)}
.modal-mask.closing .modal{animation:modalOut .18s ease forwards}
.modal-head{padding:16px 20px;border-bottom:1px solid var(--bd);display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
.modal-head h2{font-size:.95rem;font-weight:700}
.modal-head h2 span{color:var(--ac2)}
.modal-close{background:none;border:none;color:var(--mu);cursor:pointer;font-size:1.2rem;padding:4px;border-radius:6px;transition:var(--tr)}
.modal-close:hover{color:var(--er)}
.modal-body{padding:18px 20px;overflow-y:auto;flex:1}
.modal-foot{padding:12px 20px;border-top:1px solid var(--bd);display:flex;gap:8px;justify-content:space-between;align-items:center;flex-shrink:0;flex-wrap:wrap}
.modal-foot-left{display:flex;gap:8px}
.modal-foot-right{display:flex;gap:8px}
.upload-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
@media(max-width:580px){}
.upload-box{border:2px dashed var(--bd);border-radius:12px;padding:14px;position:relative;transition:var(--tr)}
.upload-box:hover,.upload-box.ov{border-color:var(--ac2);background:rgba(96,165,250,.04)}
.upload-box input[type=file]{position:absolute;top:0;left:0;width:100%;height:72px;opacity:0;cursor:pointer;z-index:1}
.ub-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.ub-icon{font-size:1.3rem}
.ub-title{font-size:.8rem;font-weight:600;color:var(--ac2)}
.ub-sub{font-size:.68rem;color:var(--mu)}
.upload-box.loaded{border-color:var(--ac)}
.upload-box.loaded .ub-title{color:var(--ac)}
.row-sel-row{display:flex;align-items:center;gap:6px;margin-top:8px;position:relative;z-index:2}
.row-sel-row label{font-size:.7rem;color:var(--mu);margin:0;white-space:nowrap;position:relative;z-index:2}
.row-sel-row input[type=number]{width:60px;padding:5px 8px;font-size:.78rem;text-align:center;position:relative;z-index:3;pointer-events:all;cursor:text}
.profile-bar{display:flex;gap:7px;align-items:center;margin-bottom:14px;flex-wrap:wrap;padding:10px 13px;background:var(--sf2);border-radius:9px;border:1px solid var(--bd)}
.profile-bar label{font-size:.73rem;color:var(--mu);white-space:nowrap;margin:0}
.profile-bar select{flex:1;min-width:110px;max-width:200px;padding:6px 28px 6px 10px;font-size:.78rem}
.profile-name-inp{flex:1;min-width:90px;max-width:160px;padding:6px 10px;font-size:.78rem}
.map-hint{font-size:.73rem;color:var(--mu);margin-bottom:12px;padding:9px 13px;background:var(--sf2);border-radius:8px;border-left:3px solid var(--ac2)}
.map-table-wrap{border:1px solid var(--bd);border-radius:8px;overflow:hidden}
.map-table{width:100%;border-collapse:collapse;font-size:.8rem}
.map-table th{background:var(--sf2);padding:8px 10px;text-align:left;font-size:.64rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--mu);border-bottom:1px solid var(--bd)}
.map-table td{padding:5px 7px;border-bottom:1px solid var(--bd);vertical-align:middle}
.map-table tr:last-child td{border-bottom:none}
.map-table tr:hover td{background:rgba(57,211,83,.02)}
.map-idx{font-size:.67rem;color:var(--mu);font-family:'JetBrains Mono',monospace;text-align:center;width:28px}
.map-sel{width:100%;padding:5px 26px 5px 9px;background:var(--sf2);border:1px solid var(--bd);border-radius:6px;color:var(--tx);font-size:.78rem;font-family:var(--ff);outline:none;cursor:pointer;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='5'%3E%3Cpath fill='%238b949e' d='M4.5 5L0 0h9z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;transition:var(--tr)}
.map-sel:focus{border-color:var(--ac)}
.map-txt{width:100%;padding:5px 9px;background:var(--sf2);border:1px solid var(--bd);border-radius:6px;color:var(--tx);font-size:.78rem;font-family:var(--ff);outline:none;transition:var(--tr);box-sizing:border-box}
.map-txt:focus{border-color:var(--ac)}
.del-map-btn{background:none;border:none;color:var(--mu);cursor:pointer;padding:3px 7px;border-radius:4px;transition:var(--tr);font-size:.85rem}
.del-map-btn:hover{color:var(--er)}
.btn-sm{padding:6px 12px;border-radius:7px;border:1px solid var(--bd);background:var(--sf2);color:var(--tx);cursor:pointer;font-size:.76rem;font-family:var(--ff);transition:var(--tr);white-space:nowrap}
.btn-sm:hover{border-color:var(--ac);color:var(--ac)}
.btn-sm-d:hover{border-color:var(--er);color:var(--er)}
.btn-sec{padding:9px 18px;border-radius:10px;border:1px solid var(--bd);background:var(--sf2);color:var(--tx);cursor:pointer;font-size:.82rem;font-family:var(--ff);transition:var(--tr)}
.btn-sec:hover{border-color:var(--ac);color:var(--ac)}
.btn-pri{padding:9px 20px;border-radius:10px;border:none;background:linear-gradient(135deg,var(--ac),var(--ac2));color:#0d1117;cursor:pointer;font-size:.82rem;font-weight:700;font-family:var(--ff);transition:var(--tr)}
.btn-pri:hover{transform:translateY(-1px);box-shadow:0 4px 14px rgba(74,222,128,.25)}
/* combobox */
.cb-wrap{position:relative;display:flex;flex:1;min-width:0;max-width:100%}
.cb-wrap.fixed-dst{max-width:44%}
.cb-inp{width:100%;padding:5px 26px 5px 9px;background:var(--sf2);border:1px solid var(--bd);border-radius:6px;color:var(--tx);font-size:.78rem;font-family:var(--ff);outline:none;cursor:text;-webkit-appearance:none;box-sizing:border-box;transition:var(--tr)}
.cb-inp:focus{border-color:var(--ac);box-shadow:0 0 0 2px rgba(57,211,83,.12)}
.cb-arrow{position:absolute;right:8px;top:50%;transform:translateY(-50%);pointer-events:none;color:var(--mu);font-size:.6rem}
.cb-drop{position:absolute;top:calc(100% + 3px);left:0;right:0;background:var(--sf);border:1px solid var(--bd);border-radius:7px;box-shadow:0 8px 24px rgba(0,0,0,.35);z-index:1000;max-height:220px;overflow-y:auto;display:none}
.cb-drop.open{display:block}
.cb-opt{padding:7px 11px;font-size:.78rem;cursor:pointer;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:background .1s}
.cb-opt:hover,.cb-opt.focused{background:rgba(57,211,83,.1);color:var(--ac)}
.cb-opt.empty{color:var(--mu);font-style:italic}
.cb-opt mark{background:rgba(57,211,83,.25);color:var(--ac);border-radius:2px;font-style:normal}
::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--sf2);border-radius:4px}::-webkit-scrollbar-thumb{background:var(--bd);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--mu)}
/* 预览表格内滚动条稍宽 */
.tw::-webkit-scrollbar,.tw-inner::-webkit-scrollbar{width:9px;height:9px}
.tw::-webkit-scrollbar-track,.tw-inner::-webkit-scrollbar-track{background:var(--sf2);border-radius:5px}
.tw::-webkit-scrollbar-thumb,.tw-inner::-webkit-scrollbar-thumb{background:var(--bd);border-radius:5px}
.tw::-webkit-scrollbar-thumb:hover,.tw-inner::-webkit-scrollbar-thumb:hover{background:var(--mu)}

/* ── 列筛选 ── */
.th-inner{display:flex;align-items:center;gap:4px;white-space:nowrap}
.th-filter-btn{background:none;border:none;cursor:pointer;color:var(--mu);font-size:.75rem;padding:0 2px;line-height:1;flex-shrink:0;transition:.15s}
.th-filter-btn:hover,.th-filter-btn.active{color:var(--ac)}
.filter-drop{position:absolute;left:0;top:100%;min-width:210px;max-width:260px;background:var(--sf);border:1px solid var(--bd);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.35);z-index:200;padding:8px;display:none}
.filter-drop.open{display:block}
.filter-drop input[type=text]{padding:5px 9px;font-size:.75rem;margin-bottom:6px}
.filter-opt{display:flex;align-items:center;gap:6px;padding:4px 6px;border-radius:5px;cursor:pointer;font-size:.77rem}
.filter-opt:hover{background:rgba(57,211,83,.08)}
.filter-opt input[type=checkbox]{width:13px;height:13px;cursor:pointer;accent-color:var(--ac)}
.filter-opt label{cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.filter-foot{display:flex;gap:6px;margin-top:6px;padding-top:6px;border-top:1px solid var(--bd)}
.filter-foot button{flex:1;padding:4px;font-size:.72rem;border-radius:5px;border:1px solid var(--bd);background:var(--sf2);color:var(--tx);cursor:pointer;font-family:var(--ff)}
.filter-foot button:hover{border-color:var(--ac);color:var(--ac)}
.sinp-coll-btn{padding:0 9px;height:auto;line-height:1.4;background:var(--sf2);border:1px solid var(--bd);border-left:none;border-radius:0 6px 6px 0;cursor:pointer;color:var(--mu);font-size:.71rem;font-weight:500;white-space:nowrap;transition:var(--tr);flex-shrink:0;font-family:var(--ff);display:inline-flex;align-items:center}
.sinp-coll-btn:hover{border-color:var(--ac);color:var(--ac)}
.sinp-coll-btn.active{background:rgba(57,211,83,.08);border-color:var(--ac);color:var(--ac)}
/* ── 复选框列 ── */
td.chk,th.chk{width:32px;min-width:32px;max-width:32px;text-align:center;padding:0;border-right:1px solid var(--bd);position:sticky;left:0;z-index:3;background:var(--sf2);box-shadow:2px 0 4px rgba(0,0,0,.12)}
td.chk{background:var(--sf);z-index:3;box-shadow:2px 0 4px rgba(0,0,0,.08)}
tr:hover td.chk{background:rgba(57,211,83,.025)}
tr.selected td.chk{background:rgba(57,211,83,.06)!important}
td.chk input[type=checkbox],th.chk input[type=checkbox]{width:14px;height:14px;cursor:pointer;accent-color:var(--ac)}
/* ── 批量操作栏 ── */
.batch-bar{display:none;align-items:center;gap:10px;padding:7px 14px;background:rgba(57,211,83,.08);border:1px solid rgba(57,211,83,.25);border-radius:7px;margin-bottom:8px;animation:si .15s ease}
.batch-bar.show{display:flex}
.batch-count{font-size:.78rem;color:var(--ac);font-weight:600}
.batch-del-btn{padding:5px 14px;border-radius:6px;border:1px solid var(--er);background:none;color:var(--er);cursor:pointer;font-size:.75rem;font-family:var(--ff);transition:var(--tr)}
.batch-del-btn:hover{background:var(--er);color:#fff}
.batch-cancel-btn{padding:5px 12px;border-radius:6px;border:1px solid var(--bd);background:none;color:var(--mu);cursor:pointer;font-size:.75rem;font-family:var(--ff);transition:var(--tr)}
.batch-cancel-btn:hover{border-color:var(--ac);color:var(--ac)}
/* tr selected */
tr.selected td{background:rgba(57,211,83,.06)!important}

/* 魔仓专属选项 */
#profileOptions label:hover{color:var(--ac)}

/* ── 筛选集合 ── */
.coll-panel{position:fixed;width:200px;background:var(--sf);border:1px solid var(--bd);border-radius:9px;box-shadow:0 8px 28px rgba(0,0,0,.4);z-index:1000;padding:10px;display:none}
.coll-panel.open{display:block;animation:popIn .18s cubic-bezier(.16,1,.3,1)}
.coll-panel-inner{position:absolute;top:100%;left:0;right:0;background:var(--sf);border:1px solid var(--bd);border-radius:0 0 9px 9px;box-shadow:0 8px 20px rgba(0,0,0,.35);z-index:50;padding:8px;display:none;margin-top:-1px}
.coll-panel-inner.open{display:block;animation:popIn .18s cubic-bezier(.16,1,.3,1)}
.coll-panel-title{font-size:.68rem;font-weight:600;color:var(--mu);letter-spacing:.08em;text-transform:uppercase;margin-bottom:8px;font-family:'JetBrains Mono',monospace}
.coll-item{display:flex;align-items:center;gap:4px;padding:5px 7px;border-radius:6px;cursor:pointer;transition:.15s;margin-bottom:2px}
.coll-item:hover{background:rgba(57,211,83,.1)}
.coll-item-name{flex:1;font-size:.79rem;color:var(--tx);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.coll-item-edit{background:none;border:none;color:var(--mu);cursor:pointer;font-size:.78rem;padding:0 3px;border-radius:3px;transition:.15s;flex-shrink:0;line-height:1;display:grid;place-items:center;width:22px;height:22px}
.coll-item-edit:hover{color:var(--ac)}
.coll-item-del{background:none;border:none;color:var(--mu);cursor:pointer;font-size:.85rem;padding:0 3px;border-radius:3px;transition:.15s;flex-shrink:0;line-height:1;display:grid;place-items:center;width:22px;height:22px}
.coll-item-del:hover{color:var(--er)}
.coll-new-btn{width:100%;padding:6px;background:none;border:2px dashed var(--bd);border-radius:7px;color:var(--mu);cursor:pointer;font-size:.76rem;font-family:var(--ff);margin-top:6px;transition:var(--tr)}
.coll-new-btn:hover{border-color:var(--ac2);color:var(--ac2)}
.coll-modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:500;display:flex;align-items:center;justify-content:center;animation:maskIn .22s ease}
.coll-modal-mask.closing{animation:maskOut .18s ease forwards;pointer-events:none}
.coll-modal{background:var(--sf);border:1px solid var(--bd);border-radius:14px;width:340px;padding:22px;box-shadow:0 20px 56px rgba(0,0,0,.35);animation:modalIn .25s cubic-bezier(.16,1,.3,1)}
.coll-modal-mask.closing .coll-modal{animation:modalOut .18s ease forwards}
.coll-modal h3{font-size:.9rem;font-weight:700;margin-bottom:14px}
.coll-modal label{font-size:.74rem;color:var(--mu);display:block;margin-bottom:4px;margin-top:10px}
.coll-modal input,.coll-modal textarea{width:100%;padding:7px 10px;background:var(--sf2);border:1px solid var(--bd);border-radius:7px;color:var(--tx);font-size:.82rem;font-family:var(--ff);outline:none;box-sizing:border-box;transition:var(--tr)}
.coll-modal input:focus,.coll-modal textarea:focus{border-color:var(--ac);box-shadow:0 0 0 2px rgba(57,211,83,.12)}
.coll-modal textarea{resize:vertical;min-height:90px;line-height:1.6}
.coll-modal-foot{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}
.coll-modal-foot button{padding:7px 16px;border-radius:7px;cursor:pointer;font-size:.82rem;font-family:var(--ff);border:1px solid var(--bd);background:var(--sf2);color:var(--tx);transition:var(--tr)}
.coll-modal-foot .pri{border:none;background:linear-gradient(135deg,var(--ac),var(--ac2));color:#0d1117;font-weight:700}
/* ══ 统计系统 ══ */
.stat-modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.55);backdrop-filter:blur(4px);z-index:200;display:flex;align-items:stretch;justify-content:flex-end;animation:maskIn .22s ease}
.stat-modal-mask.closing{animation:maskOut .2s ease forwards;pointer-events:none}
.stat-panel{width:min(96vw,1080px);background:var(--bg);display:flex;flex-direction:column;height:100vh;overflow:hidden;box-shadow:-8px 0 48px rgba(0,0,0,.4);animation:slideInRight .28s cubic-bezier(.16,1,.3,1)}
.stat-modal-mask.closing .stat-panel{animation:slideOutRight .2s ease forwards}
.stat-head{padding:12px 18px;border-bottom:1px solid var(--bd);display:flex;align-items:center;justify-content:space-between;flex-shrink:0;background:var(--sf);gap:10px}
.stat-head h2{font-size:.95rem;font-weight:700;flex-shrink:0}
.stat-head-btns{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.stat-head-btn{padding:5px 13px;border-radius:7px;border:1px solid var(--bd);background:var(--sf2);color:var(--tx);cursor:pointer;font-size:.76rem;font-family:var(--ff);transition:var(--tr);white-space:nowrap}
.stat-head-btn:hover{border-color:var(--ac2);color:var(--ac2)}
.stat-close{background:none;border:none;color:var(--mu);cursor:pointer;font-size:1.3rem;padding:4px;border-radius:6px;transition:var(--tr);flex-shrink:0}
.stat-close:hover{color:var(--er)}
.stat-body{padding:14px 18px;overflow-y:auto;flex:1}
/* 日历 */
.cal-toggle-btn{display:flex;align-items:center;gap:8px;padding:7px 14px;background:var(--sf2);border:1px solid var(--bd);border-radius:8px;cursor:pointer;font-size:.78rem;font-family:var(--ff);color:var(--tx);transition:var(--tr);margin-bottom:0;width:100%;justify-content:space-between}
.cal-toggle-btn:hover{border-color:var(--ac);color:var(--ac)}
.cal-toggle-btn.active{border-color:var(--ac);background:rgba(57,211,83,.06);border-radius:8px 8px 0 0}
.cal-toggle-btn .cal-toggle-label{font-weight:500}
.cal-toggle-btn .cal-toggle-arrow{font-size:.6rem;transition:transform .2s;color:var(--mu)}
.cal-toggle-btn.active .cal-toggle-arrow{transform:rotate(180deg)}
.cal-dropdown{display:none;position:fixed;background:var(--sf);border:1px solid var(--bd);border-radius:10px;box-shadow:0 8px 32px rgba(0,0,0,.45);z-index:300;padding:12px 14px 14px;min-width:max-content}
.cal-dropdown.open{display:block}
/* 快捷按钮横排在上方 */
.cal-shortcuts{display:flex;flex-direction:row;gap:5px;flex-shrink:0;margin-bottom:10px;flex-wrap:wrap}
.cal-short-btn{padding:4px 12px;border-radius:6px;border:1px solid var(--bd);background:var(--sf2);color:var(--tx);cursor:pointer;font-size:.7rem;font-family:var(--ff);transition:var(--tr);white-space:nowrap;text-align:left}
.cal-short-btn:hover,.cal-short-btn.active{border-color:var(--ac);background:rgba(57,211,83,.1);color:var(--ac)}
/* 双月并排 */
.cal-grid{display:flex;gap:10px}
.cal-month{flex:0 0 auto}
.cal-month-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px;gap:4px}
.cal-month-title{font-size:.72rem;font-weight:600;color:var(--tx);white-space:nowrap}
.cal-nav{background:none;border:none;color:var(--mu);cursor:pointer;width:22px;height:22px;border-radius:4px;font-size:.82rem;transition:var(--tr);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.cal-nav:hover{color:var(--ac);background:rgba(57,211,83,.1)}
.cal-nav:disabled{opacity:.2;cursor:default}
.cal-weekdays{display:grid;grid-template-columns:repeat(7,26px);text-align:center;margin-bottom:2px}
.cal-weekdays span{font-size:.54rem;color:var(--mu);font-weight:600;font-family:'JetBrains Mono',monospace;line-height:20px}
.cal-days{display:grid;grid-template-columns:repeat(7,26px);grid-auto-rows:26px;gap:0}
.cal-day{width:30px;height:30px;display:flex;align-items:center;justify-content:center;flex-direction:column;border-radius:5px;cursor:pointer;font-size:.74rem;color:var(--tx);transition:.12s;user-select:none}
.cal-day:hover:not(.cal-day-other){background:rgba(57,211,83,.12);color:var(--ac)}
.cal-day.cal-day-other{color:var(--mu);opacity:.3;cursor:default}
.cal-day.cal-day-today{font-weight:700;color:var(--ac2)}
.cal-day.cal-day-sel{background:var(--ac);color:#0d1117;font-weight:700;border-radius:50%}
.cal-day.cal-day-in-range{background:rgba(57,211,83,.15);border-radius:0}
.cal-day.cal-day-range-start{background:var(--ac);color:#0d1117;font-weight:700;border-radius:50% 0 0 50%}
.cal-day.cal-day-range-end{background:var(--ac);color:#0d1117;font-weight:700;border-radius:0 50% 50% 0}
.cal-day.cal-day-range-start.cal-day-range-end{border-radius:50%}
.cal-day.cal-day-has-data{position:relative}
.cal-day.cal-day-has-data::after{content:'';position:absolute;bottom:2px;left:50%;transform:translateX(-50%);width:3px;height:3px;border-radius:50%;background:var(--ac2)}
.cal-day.cal-day-sel.cal-day-has-data::after,.cal-day.cal-day-range-start.cal-day-has-data::after,.cal-day.cal-day-range-end.cal-day-has-data::after{background:#0d1117}
.cal-range-info{font-size:.7rem;color:var(--mu);margin-top:8px;width:100%}
.cal-range-info strong{color:var(--ac)}
/* 统计表格 */
.stat-section{margin-bottom:16px}
.stat-section-title{font-size:.68rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--mu);font-family:'JetBrains Mono',monospace;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.stat-section-title::before{content:'';width:3px;height:10px;background:var(--ac2);border-radius:2px;flex-shrink:0}
.stat-table-wrap{border:1px solid var(--bd);border-radius:9px;overflow:auto;min-height:300px;max-height:360px}
.stat-table{width:100%;border-collapse:collapse;font-size:.76rem}
.stat-table th{background:var(--sf2);padding:7px 11px;text-align:left;font-size:.62rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--mu);border-bottom:1px solid var(--bd);white-space:nowrap;font-family:'JetBrains Mono',monospace;position:sticky;top:0;z-index:2;position:relative;overflow:visible}
.stat-table td{padding:7px 11px;border-bottom:1px solid var(--bd);color:var(--tx);vertical-align:middle}
.stat-table tr:last-child td{border-bottom:none}
.stat-table tr:hover td{background:var(--hv)}
.stat-table td.mono{font-family:'JetBrains Mono',monospace;font-size:.72rem}
.stat-table td.ac{color:var(--ac);font-weight:600}
.stat-table .free-badge{font-size:.6rem;background:rgba(248,81,73,.15);color:var(--er);border-radius:3px;padding:1px 4px;margin-left:4px}
/* SKU 搜索框 */
.sku-search-inp{padding:4px 8px;font-size:.72rem;border-radius:5px;border:1px solid var(--bd);background:var(--sf2);color:var(--tx);outline:none;font-family:var(--ff);width:130px;margin-left:6px;vertical-align:middle}
.sku-search-inp:focus{border-color:var(--ac)}
/* SKU别名按钮 */
.sku-alias-btn{background:none;border:1px solid var(--bd);border-radius:5px;color:var(--mu);cursor:pointer;font-size:.68rem;padding:2px 8px;font-family:var(--ff);transition:var(--tr)}
.sku-alias-btn:hover{border-color:var(--ac2);color:var(--ac2)}
/* 总结 */
.summary-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;margin-bottom:12px}
.summary-card{background:var(--sf);border:1px solid var(--bd);border-radius:12px;padding:14px;transition:var(--tr)}
.summary-card:hover{border-color:var(--ac)}
.sc-sku{font-size:.73rem;font-weight:600;color:var(--ac2);margin-bottom:5px;word-break:break-all}
.sc-qty{font-size:1.3rem;font-weight:700;font-family:'JetBrains Mono',monospace;color:var(--ac)}
.sc-label{font-size:.62rem;color:var(--mu)}
.sc-free{font-size:.7rem;color:var(--er);margin-top:3px}
/* 条形图 */
.bar-chart-wrap{margin-top:12px;margin-bottom:4px}
.bar-row{display:flex;align-items:center;gap:8px;margin-bottom:5px}
.bar-label{font-size:.72rem;color:var(--tx);width:140px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}
.bar-track{flex:1;height:16px;background:var(--sf2);border-radius:4px;overflow:hidden;position:relative}
.bar-fill{height:100%;border-radius:4px;background:var(--gd);transition:width .5s ease}
.bar-val{font-size:.7rem;font-family:'JetBrains Mono',monospace;color:var(--mu);width:36px;flex-shrink:0;text-align:right}
/* 数据管理面板（左侧抽屉）*/
.mgr-panel{position:fixed;top:0;left:0;bottom:0;width:min(94vw,740px);background:var(--bg);border-right:1px solid var(--bd);z-index:210;display:flex;flex-direction:row;transform:translateX(-100%);transition:transform .3s cubic-bezier(.16,1,.3,1);box-shadow:8px 0 48px rgba(0,0,0,.35)}
.mgr-panel.open{transform:translateX(0)}
.mgr-panel.closing{transform:translateX(-100%);transition:transform .22s ease}
.mgr-sidebar{display:none}
.mgr-sidebar-title{display:none}
.mgr-main{flex:1;display:flex;flex-direction:column;min-width:0}
.mgr-head{padding:8px 14px;border-bottom:1px solid var(--bd);display:flex;align-items:center;gap:10px;background:var(--sf);flex-shrink:0}
.mgr-body{flex:1;overflow-y:auto;padding:0 14px}
.mgr-table-head-wrap{padding:0 14px;flex-shrink:0;border-bottom:1px solid var(--bd)}
.mgr-table thead{position:sticky;top:0;z-index:5;background:var(--sf2)}
.mgr-table thead th{box-shadow:inset 0 -1px 0 var(--bd)}
.mgr-foot{padding:10px 14px;border-top:1px solid var(--bd);display:flex;gap:8px;align-items:center;flex-shrink:0;background:var(--sf)}
.mgr-count{font-size:.74rem;color:var(--mu);flex:1}
.mgr-table{width:100%;border-collapse:collapse;font-size:.74rem;table-layout:fixed}
.mgr-table-head{background:var(--sf2);border-bottom:1px solid var(--bd);flex-shrink:0}
.mgr-table th{background:var(--sf2);padding:6px 10px;text-align:left;font-size:.61rem;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--mu);white-space:nowrap}
.mgr-table td{padding:3px 4px;border-bottom:1px solid var(--bd);vertical-align:middle}
.mgr-table td input{width:100%;box-sizing:border-box;background:transparent;border:none;color:var(--tx);font-size:.73rem;font-family:'Noto Sans SC',sans-serif;padding:3px 5px;outline:none;min-width:30px}
.mgr-table td input:focus{background:rgba(57,211,83,.07);border-radius:3px}
.mgr-table th{white-space:nowrap}
.mgr-table tr:last-child td{border-bottom:none}
.mgr-table tr:hover td{background:var(--hv)}
.mgr-filter-btn{cursor:pointer;font-size:.55rem;color:var(--mu);margin-left:3px;transition:.15s}
.mgr-filter-btn:hover{color:var(--ac)}

.mgr-table input{background:transparent;border:none;outline:none;color:var(--tx);font-size:.74rem;font-family:'Noto Sans SC',monospace;width:100%;padding:2px 4px;border-radius:3px;transition:.15s}
.mgr-table input:focus{background:rgba(57,211,83,.07);border-radius:3px}
.mgr-table td.chk2{width:28px;text-align:center}
.mgr-table td.chk2 input[type=checkbox]{width:13px;height:13px;accent-color:var(--ac);cursor:pointer}
.mgr-batch-del{padding:5px 14px;border-radius:7px;border:1px solid var(--er);background:none;color:var(--er);cursor:pointer;font-size:.74rem;font-family:var(--ff);transition:var(--tr)}
.mgr-batch-del:hover{background:var(--er);color:#fff}
.mgr-save-btn{padding:5px 14px;border-radius:7px;border:none;background:linear-gradient(135deg,var(--ac),var(--ac2));color:#0d1117;cursor:pointer;font-size:.74rem;font-weight:700;font-family:var(--ff)}

/* Profile-Collection Modal helpers */
.pcoll-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.pcoll-lbl{font-size:.78rem;color:var(--tx);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pcoll-sel{flex:1;padding:5px 8px;background:var(--sf2);border:1px solid var(--bd);border-radius:6px;color:var(--tx);font-size:.76rem;font-family:var(--ff);outline:none}

/* ── stat-table column filter buttons ── */
.stat-th-wrap{display:flex;align-items:center;gap:4px;white-space:nowrap;position:relative}
.stat-th-wrap .th-filter-btn{font-size:.7rem}

/* ── Inventory stats section ── */
.inv-section{margin-top:4px}
.inv-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:10px;margin-top:8px}
.inv-card{background:var(--sf2);border:1px solid var(--bd);border-radius:12px;padding:13px 14px 11px;display:flex;flex-direction:column;gap:5px;transition:var(--tr);cursor:pointer}
.inv-card:hover{border-color:var(--ac);box-shadow:0 0 0 1px rgba(74,222,128,.15)}
.sku-chart-pop{position:fixed;z-index:400;width:380px;background:var(--sf);border:1px solid var(--bd);border-radius:12px;box-shadow:0 8px 32px rgba(0,0,0,.3);padding:16px 18px 12px;animation:popIn .18s ease}
.sku-chart-pop-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.sku-chart-pop-title{font-size:.78rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.sku-chart-pop-close{background:none;border:none;color:var(--mu);cursor:pointer;font-size:.9rem;padding:0 2px;line-height:1;transition:.15s}
.sku-chart-pop-close:hover{color:var(--er)}
.sku-chart-pop svg{display:block}
.sku-chart-pop-empty{text-align:center;color:var(--mu);font-size:.72rem;padding:20px 0}
[data-theme=light] .sku-chart-pop{box-shadow:0 8px 28px rgba(0,0,0,.12)}
.inv-card-low{border-color:rgba(248,81,73,.45)!important}
.inv-card-low:hover{border-color:var(--er)!important;box-shadow:0 0 0 1px rgba(248,81,73,.2)}
.inv-card-name{font-size:.75rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--tx)}
.inv-card-orig{font-size:.62rem;color:var(--mu);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:-3px}
.inv-card-bar-wrap{height:4px;background:rgba(57,211,83,.1);border-radius:2px;overflow:hidden}
.inv-card-bar{height:100%;width:0;border-radius:2px;background:var(--gd);transition:width .5s ease}
.inv-card-bar-low{background:linear-gradient(90deg,var(--er),#ff6b6b)}
.inv-card-nums{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;margin-top:2px}
.inv-card-box{display:flex;flex-direction:column;align-items:center;gap:1px}
.inv-card-val{font-family:'JetBrains Mono',monospace;font-size:.8rem;font-weight:700;color:var(--tx)}
.inv-card-stock{color:var(--ac)}
.inv-card-consumed{color:var(--mu);font-size:.75rem;font-weight:400}
.inv-card-low-val{color:var(--er)!important}
.inv-card-lbl{font-size:.54rem;color:var(--mu);letter-spacing:.05em;text-transform:uppercase}

/* Body scroll lock when overlay open */
body.modal-open{overflow:hidden}
/* ── Login Screen ── */
#starCanvas{position:fixed;inset:0;z-index:0}
/* ══ 加载页：首次访问时显示，主题感知 ══ */
.loading-screen{position:fixed;inset:0;z-index:10000;background:var(--bg);display:flex;align-items:center;justify-content:center;transition:opacity .4s ease,visibility .4s}
.loading-screen.hidden{opacity:0;visibility:hidden;pointer-events:none}
.loading-screen::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at center,rgba(74,222,128,.05) 0%,transparent 60%);pointer-events:none;animation:lc-bg-pulse 4s ease-in-out infinite}
[data-theme=light] .loading-screen::before{background:radial-gradient(ellipse at center,rgba(74,222,128,.07) 0%,transparent 60%)}
@keyframes lc-bg-pulse{0%,100%{opacity:.7}50%{opacity:1}}
.loading-box{position:relative;display:flex;flex-direction:column;align-items:center;gap:24px;animation:lc-fade-in .7s ease}
@keyframes lc-fade-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.loading-orbit{position:relative;width:110px;height:110px;display:grid;place-items:center}
.loading-ring{position:absolute;inset:0;transform:rotate(-90deg)}
.loading-ring-arc{transform-origin:center;animation:lc-spin 1.4s linear infinite;filter:drop-shadow(0 0 6px var(--ac))}
@keyframes lc-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
.loading-core{position:relative;z-index:2;display:grid;place-items:center;animation:lc-pulse 2.2s ease-in-out infinite}
.loading-core img{width:48px;height:48px;display:block;filter:drop-shadow(0 0 12px rgba(74,222,128,.45)) drop-shadow(0 2px 6px rgba(0,0,0,.25))}
[data-theme=light] .loading-core img{filter:drop-shadow(0 0 10px rgba(74,222,128,.35)) drop-shadow(0 2px 4px rgba(0,0,0,.1))}
@keyframes lc-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.08);opacity:.85}}
.loading-meta{display:flex;flex-direction:column;align-items:center;gap:6px}
.loading-text{font-size:.86rem;font-weight:500;color:var(--tx);letter-spacing:.04em;font-family:var(--ff);display:inline-flex;align-items:baseline}
.loading-ellipsis{display:inline-flex;width:18px;margin-left:2px;justify-content:flex-start}
.loading-ellipsis span{opacity:.2;animation:lc-dots 1.4s infinite;color:var(--ac)}
.loading-ellipsis span:nth-child(2){animation-delay:.2s}
.loading-ellipsis span:nth-child(3){animation-delay:.4s}
@keyframes lc-dots{0%,80%,100%{opacity:.2}40%{opacity:1}}
.loading-sub{font-size:.62rem;color:var(--mu);letter-spacing:.16em;font-family:'JetBrains Mono',monospace;text-transform:uppercase;opacity:.7;margin-top:4px}
/* ═══ 初始加载页 ═══ */
#loadingScreen{position:fixed;inset:0;z-index:99999;background:var(--bg);display:flex;align-items:center;justify-content:center;transition:opacity .55s ease}
#loadingScreen.fade-out{opacity:0;pointer-events:none}
#loadingScreen::before{content:"";position:absolute;inset:-50%;background:radial-gradient(ellipse at center,rgba(74,222,128,.06) 0%,transparent 60%);pointer-events:none;animation:lsBgPulse 4s ease-in-out infinite}
@keyframes lsBgPulse{0%,100%{opacity:.5}50%{opacity:1}}
.ls-content{position:relative;display:flex;flex-direction:column;align-items:center;gap:20px;animation:lsFadeIn .7s ease both}
@keyframes lsFadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
.ls-logo{position:relative;width:88px;height:88px;display:grid;place-items:center}
.ls-logo-inner{font-size:40px;line-height:1;animation:lsPulse 2.2s ease-in-out infinite;filter:drop-shadow(0 4px 18px rgba(74,222,128,.28))}
@keyframes lsPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
.ls-logo-ring,.ls-logo-ring-2{position:absolute;inset:0;border-radius:50%;border:2px solid transparent;pointer-events:none}
.ls-logo-ring{border-top-color:var(--ac);border-right-color:var(--ac);animation:lsSpin 1.4s linear infinite}
.ls-logo-ring-2{border-bottom-color:var(--ac);opacity:.4;animation:lsSpin 2.4s linear reverse infinite;inset:-6px}
@keyframes lsSpin{to{transform:rotate(360deg)}}
.ls-title{font-size:1.05rem;font-weight:700;color:var(--tx);letter-spacing:.04em;font-family:var(--ff)}
.ls-title em{font-style:normal;color:var(--ac);font-weight:700}
.ls-subtitle{font-family:'JetBrains Mono',monospace;font-size:.66rem;color:var(--mu);letter-spacing:.2em;text-transform:uppercase}
.ls-dots{display:flex;gap:7px;margin-top:4px}
.ls-dots span{width:6px;height:6px;border-radius:50%;background:var(--ac);opacity:.4;animation:lsBounce 1.2s ease-in-out infinite}
.ls-dots span:nth-child(2){animation-delay:.16s}
.ls-dots span:nth-child(3){animation-delay:.32s}
@keyframes lsBounce{0%,100%{opacity:.3;transform:translateY(0)}50%{opacity:1;transform:translateY(-5px)}}
[data-theme=light] #loadingScreen::before{background:radial-gradient(ellipse at center,rgba(74,222,128,.08) 0%,transparent 60%)}
[data-theme=light] .ls-logo-inner{filter:drop-shadow(0 4px 18px rgba(74,222,128,.25))}
/* ICP 备案脚注：底部固定 + 蒙版，主题自适应；居中单链接 */
#icpFooter{position:fixed;left:0;right:0;bottom:0;z-index:5;display:flex;align-items:center;justify-content:center;padding:10px 16px;font-size:.66rem;color:var(--tx);letter-spacing:.04em;font-family:var(--ff);user-select:none;line-height:1.4;background:rgba(13,17,23,.78);backdrop-filter:blur(12px) saturate(140%);-webkit-backdrop-filter:blur(12px) saturate(140%);border-top:1px solid var(--bd)}
[data-theme=light] #icpFooter{background:rgba(255,255,255,.82);color:var(--tx);border-top:1px solid var(--bd)}
#icpFooter a{color:var(--mu);text-decoration:none;transition:color .18s;white-space:nowrap;font-weight:500}
#icpFooter a:hover{color:var(--ac);text-decoration:underline;text-underline-offset:3px}
@media(max-width:520px){#icpFooter{font-size:.6rem;padding:8px 10px}}
#loginScreen{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .45s ease,transform .45s ease;visibility:hidden;pointer-events:none}
#loginScreen.show{opacity:1;visibility:visible;transition:none}
#loginScreen.hide{opacity:0;transform:scale(.97);pointer-events:none}
.login-card{width:380px;padding:40px;border-radius:18px;background:rgba(255,255,255,.04);backdrop-filter:blur(28px);border:1px solid rgba(255,255,255,.08);box-shadow:0 40px 120px rgba(0,0,0,.85);animation:modalIn .4s cubic-bezier(.16,1,.3,1);pointer-events:none}
#loginScreen.show .login-card{pointer-events:auto}
.login-title{text-align:center;font-size:1.15rem;font-weight:600;color:#cbd5f5;margin-bottom:24px;letter-spacing:.02em}
.login-input{width:100%;padding:12px 14px;margin-bottom:12px;border-radius:10px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);color:#fff;font-size:.88rem;font-family:var(--ff);outline:none;transition:.2s;box-sizing:border-box}
.login-input:focus{border-color:rgba(139,92,246,.5);box-shadow:0 0 0 3px rgba(139,92,246,.12)}
.login-input::placeholder{color:rgba(255,255,255,.3)}
/* ── 浅色主题：登录卡片需要不同的配色才看得清 ── */
[data-theme=light] .login-card{background:rgba(255,255,255,.92);backdrop-filter:blur(20px) saturate(140%);border:1px solid rgba(0,0,0,.08);box-shadow:0 20px 60px rgba(15,23,42,.18),0 2px 6px rgba(15,23,42,.06)}
[data-theme=light] .login-title{color:#1e293b}
[data-theme=light] .login-input{background:rgba(248,250,252,.7);border:1px solid rgba(148,163,184,.35);color:#0f172a}
[data-theme=light] .login-input:focus{border-color:#8b5cf6;background:#fff;box-shadow:0 0 0 3px rgba(139,92,246,.15)}
[data-theme=light] .login-input::placeholder{color:rgba(15,23,42,.4)}
[data-theme=light] .login-err{color:#dc2626}
[data-theme=light] .login-remember{color:rgba(15,23,42,.55)}
[data-theme=light] .login-by{color:rgba(15,23,42,.35)}
.login-btn{width:100%;padding:12px;border:none;border-radius:10px;background:linear-gradient(120deg,#6366f1,#8b5cf6);color:#fff;font-size:.88rem;font-weight:700;font-family:var(--ff);cursor:pointer;transition:.2s;margin-top:4px}
.login-btn:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(99,102,241,.35)}
.login-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}
.login-err{font-size:.74rem;color:#f87171;margin-top:12px;min-height:1.2em;text-align:center}
.login-remember{display:flex;align-items:center;gap:6px;font-size:.74rem;color:rgba(255,255,255,.45);cursor:pointer;margin:4px 0 2px;user-select:none}
.login-remember input{accent-color:#8b5cf6;width:13px;height:13px;cursor:pointer}
.login-by{font-size:.66rem;color:rgba(255,255,255,.25);text-align:center;margin-top:14px;letter-spacing:.06em}
/* UNLOCKED overlay */
#unlockScreen{position:fixed;inset:0;display:flex;justify-content:center;align-items:center;font-size:28px;color:#fff;opacity:0;transform:translateY(20px);transition:all 1s ease;z-index:9998;pointer-events:none;font-family:var(--ff);letter-spacing:.08em;font-weight:700}
[data-theme=light] #unlockScreen{color:var(--ac);text-shadow:0 1px 2px rgba(15,23,42,.18)}
#unlockScreen.show{opacity:1;transform:translateY(0)}
#unlockScreen.fade{opacity:0;transform:translateY(-12px);transition:all .6s ease}
#appMain{opacity:0;transform:translateY(10px);transition:opacity .5s ease,transform .5s ease;padding-bottom:48px}
#appMain.show{opacity:1;transform:translateY(0);transition:none}
#loginScreen{padding-bottom:48px}
