:root{--bg: #f3f5fc;--surface: #ffffff;--surface-2: #f7f9ff;--ink: #121828;--ink-2: #414c66;--muted: #66718a;--muted-2: #8a93a8;--line: #e5eaf6;--line-strong: #d3dbf0;--gray-soft: #eef1f9;--brand: #4f6ef7;--brand-dark: #3a52d0;--brand-light: #7d93ff;--brand-soft: #edf1ff;--brand-tint: #dbe3ff;--grape: #8b5cf6;--grape-soft: #f1eafe;--sky: #0ea5e9;--sky-soft: #e3f5ff;--mint: #0f9d74;--mint-soft: #e5f8f0;--amber: #d98206;--amber-soft: #fff4e2;--coral: #e04a43;--coral-soft: #fdecea;--fs-xs: 12px;--fs-sm: 13px;--fs-base: 14px;--fs-lg: 16px;--fs-xl: 20px;--fs-2xl: 28px;--radius-xs: 10px;--radius-sm: 12px;--radius: 18px;--radius-lg: 24px;--shadow-xs: 0 1px 2px rgba(19, 26, 60, .05);--shadow-sm: 0 1px 2px rgba(19, 26, 60, .04), 0 4px 14px rgba(19, 26, 60, .05);--shadow-md: 0 10px 30px rgba(28, 40, 90, .1);--shadow-lg: 0 18px 48px rgba(28, 40, 90, .16);--shadow-brand: 0 10px 26px rgba(79, 110, 247, .28);--font: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", system-ui, sans-serif;--mono: "SF Mono", "JetBrains Mono", Consolas, monospace}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{font-family:var(--font);background:var(--bg);color:var(--ink);font-size:var(--fs-base);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;line-height:1.55}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;border:none;background:none}a{color:var(--brand);text-decoration:none}h1,h2,h3,h4{line-height:1.28;font-weight:700;letter-spacing:-.2px}::selection{background:var(--brand-tint)}:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:6px}.ico{flex:0 0 auto;vertical-align:-.18em}.ico-lg{width:22px;height:22px}.shell{max-width:480px;margin:0 auto;padding:0 16px 96px}.shell-wide{max-width:1200px;margin:0 auto;padding:0 24px 48px}.row{display:flex;align-items:center;gap:10px}.row-between{display:flex;align-items:center;justify-content:space-between;gap:12px}.wrap{flex-wrap:wrap}.grow{flex:1}.stack{display:flex;flex-direction:column;gap:14px}.muted{color:var(--muted)}.small{font-size:13px}.tiny{font-size:12px}.mono{font-family:var(--mono)}.center{text-align:center}.mt8{margin-top:8px}.mt16{margin-top:16px}.mt24{margin-top:24px}.hidden{display:none!important}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 0 10px;margin-bottom:6px}.brand{display:flex;align-items:center;gap:10px}.brand-mark{width:38px;height:38px;border-radius:12px;background:linear-gradient(135deg,var(--brand),#8566f8);color:#fff;display:grid;place-items:center;font-weight:800;font-size:18px;letter-spacing:.5px;box-shadow:0 6px 16px #4f6ef74d}.brand-text{display:flex;flex-direction:column;line-height:1.25}.brand-text strong{font-size:16px}.brand-text small{color:var(--muted);font-size:12px}.topbar-right{display:flex;align-items:center;gap:10px}.who{font-size:13px;color:var(--ink-2);background:var(--surface);border:1px solid var(--line);padding:5px 12px;border-radius:999px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:10px 16px;border-radius:var(--radius-sm);font-size:var(--fs-base);font-weight:600;transition:transform .12s ease,box-shadow .18s ease,background .18s ease,color .18s ease;border:1px solid transparent;white-space:nowrap}.btn:hover{transform:translateY(-1px)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn-primary{background:linear-gradient(135deg,#5b78ff 0%,var(--brand) 55%,#6d5bf6 100%);color:#fff;box-shadow:var(--shadow-brand)}.btn-primary:hover{background:linear-gradient(135deg,#6a85ff,#4a68f0 55%,#7a68f8);box-shadow:0 12px 30px #4f6ef757}.btn-ghost{background:var(--surface);border-color:var(--line-strong);color:var(--ink-2)}.btn-ghost:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}.btn-soft{background:var(--brand-soft);color:var(--brand-dark)}.btn-mint{background:var(--mint-soft);color:var(--mint)}.btn-danger{background:var(--coral-soft);color:var(--coral)}.btn-sm{padding:6px 12px;font-size:var(--fs-sm);border-radius:var(--radius-xs)}.btn-lg{padding:14px 22px;font-size:var(--fs-lg);border-radius:15px}.btn-block{width:100%}.btn-icon{width:38px;height:38px;border-radius:var(--radius-sm);display:grid;place-items:center;background:var(--surface);border:1px solid var(--line);color:var(--ink-2)}.btn-icon:hover{color:var(--brand);border-color:var(--brand)}.card{background:var(--surface);border-radius:var(--radius);border:1px solid var(--line);box-shadow:var(--shadow-sm);padding:18px;transition:box-shadow .2s ease,border-color .2s ease}.card-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.card-tight{padding:14px}.card-title h3{font-size:var(--fs-lg);display:flex;align-items:center;gap:7px}.card-title h3 .ico{color:var(--brand)}.card-title .sub{font-size:var(--fs-xs);color:var(--muted)}.input,.select,.textarea{width:100%;background:var(--surface-2);border:1px solid var(--line-strong);border-radius:13px;padding:11px 13px;font-size:var(--fs-base);outline:none;transition:border-color .15s,box-shadow .15s,background .15s}.input:hover,.select:hover,.textarea:hover{border-color:#c2cdec}.input:focus,.select:focus,.textarea:focus{border-color:var(--brand);box-shadow:0 0 0 4px #4f6ef721;background:#fff}.field{display:flex;flex-direction:column;gap:6px;font-size:var(--fs-sm);color:var(--ink-2)}.input-row{display:flex;gap:8px}.input-row .input{flex:1}.label{font-size:var(--fs-xs);color:var(--muted)}.badge{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;padding:3px 9px;border-radius:999px}.badge-green{background:var(--mint-soft);color:var(--mint)}.badge-yellow{background:var(--amber-soft);color:var(--amber)}.badge-red{background:var(--coral-soft);color:var(--coral)}.badge-gray{background:var(--gray-soft);color:var(--muted)}.badge-brand{background:var(--brand-soft);color:var(--brand-dark)}.dot{width:8px;height:8px;border-radius:50%;display:inline-block}.dot-green{background:var(--mint)}.dot-yellow{background:var(--amber)}.dot-red{background:var(--coral)}.dot-gray{background:#b7bfd0}.table{width:100%;border-collapse:collapse;font-size:var(--fs-base)}.table th{text-align:left;font-size:var(--fs-xs);font-weight:600;color:var(--muted);padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap;background:var(--surface-2);letter-spacing:.2px}.table th:first-child{border-top-left-radius:var(--radius-xs)}.table th:last-child{border-top-right-radius:var(--radius-xs)}.table td{padding:12px;border-bottom:1px solid var(--line);vertical-align:middle}.table tr:last-child td{border-bottom:none}.table tbody tr{transition:background .15s ease}.table tbody tr:hover{background:var(--brand-soft)}.table .num{font-variant-numeric:tabular-nums}.empty{text-align:center;padding:40px 20px;color:var(--muted);font-size:var(--fs-base)}.empty .big{font-size:30px;display:block;margin-bottom:10px}.empty .ico{color:var(--line-strong);margin-bottom:10px}.empty strong{display:block;color:var(--ink-2);font-size:var(--fs-base);margin-bottom:4px}.empty p{margin-bottom:12px;font-size:var(--fs-sm)}.modal-backdrop{position:fixed;inset:0;background:#0f162873;display:grid;place-items:center;padding:20px;z-index:200;backdrop-filter:blur(2px)}.modal{background:#fff;border-radius:20px;padding:22px;width:min(420px,100%);box-shadow:var(--shadow-md)}.modal h3{font-size:17px;margin-bottom:6px}.modal p{color:var(--ink-2);font-size:14px}.modal p.pre-line{white-space:pre-line;line-height:1.7}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.toast{position:fixed;left:50%;bottom:32px;transform:translate(-50%,16px);background:#1c2436;color:#fff;padding:11px 18px;border-radius:12px;font-size:14px;opacity:0;pointer-events:none;transition:all .22s ease;z-index:300;max-width:min(90vw,420px);text-align:center}.toast.show{opacity:1;transform:translate(-50%)}.toast[data-kind=error]{background:#b3352f}.toast[data-kind=warn]{background:#9a6106}.login-page{min-height:100vh;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.login-hero{position:relative;overflow:hidden;color:#fff;background:radial-gradient(760px 420px at 88% 8%,rgba(255,255,255,.18),transparent 60%),radial-gradient(620px 380px at 6% 92%,rgba(124,92,247,.55),transparent 62%),linear-gradient(150deg,#4b63f0,#6355f4 48%,#8a5cf6);padding:44px 56px 36px;display:flex;flex-direction:column;justify-content:space-between;gap:40px}.login-hero:before{content:"";position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(rgba(255,255,255,.22) 1px,transparent 1px);background-size:26px 26px;opacity:.35;mask-image:radial-gradient(circle at 30% 40%,#000 0%,transparent 72%)}.login-hero:after{content:"";position:absolute;width:420px;height:420px;right:-140px;bottom:-180px;background:radial-gradient(circle,rgba(255,255,255,.22),transparent 65%);pointer-events:none}.login-hero-top{display:flex;align-items:center;justify-content:space-between;gap:16px}.login-brand{display:flex;align-items:center;gap:12px}.login-brand .brand-mark{box-shadow:0 6px 20px #0f19464d}.login-brand div{display:flex;flex-direction:column}.login-brand strong{font-size:18px}.login-brand small{color:#ffffffbf;font-size:12px}.login-role-badge{font-size:12px;font-weight:700;padding:5px 12px;border-radius:999px;background:#ffffff29;border:1px solid rgba(255,255,255,.3);backdrop-filter:blur(4px)}.login-hero-body{display:flex;flex-direction:column;gap:18px}.login-hero h1{font-size:42px;letter-spacing:-1.2px;line-height:1.22}.login-hero-sub{font-size:15px;color:#ffffffe0}.login-features{list-style:none;display:flex;flex-direction:column;gap:12px;margin-top:10px}.login-features li{display:flex;align-items:flex-start;gap:12px;font-size:var(--fs-base);color:#fffffff0}.login-features .ico-wrap{width:34px;height:34px;flex:0 0 auto;border-radius:11px;display:grid;place-items:center;color:#fff;background:#ffffff29;border:1px solid rgba(255,255,255,.24)}.login-features li>span{padding-top:5px}.login-features strong{font-weight:700;margin-right:8px}.login-hero-foot{font-size:12px;color:#ffffffad}.login-pane{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 40px 28px;gap:26px;background:var(--bg)}.login-pane-inner{width:min(520px,100%);display:flex;flex-direction:column;gap:20px}.login-card{background:var(--surface);border:1px solid var(--line);border-radius:26px;padding:38px 40px;box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:20px}.login-form-head h2{font-size:25px;letter-spacing:-.3px}.login-form-head p{font-size:13.5px;color:var(--muted);margin-top:5px}.login-card .field{gap:8px;font-size:13.5px}.login-card .input{padding:13px 15px;font-size:15px;border-radius:13px}.login-card .input-row{gap:10px}.login-card .input-row .btn{flex:0 0 auto;padding:10px 16px;font-size:14px}.captcha-btn{flex:0 0 auto;width:118px;height:48px;padding:0;border:1px solid var(--line);border-radius:13px;background:#eef2fc;overflow:hidden;cursor:pointer;display:grid;place-items:center;transition:border-color .15s ease,box-shadow .15s ease}.captcha-btn:hover{border-color:#c3cff5;box-shadow:var(--shadow-sm)}.captcha-btn:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.captcha-img{width:100%;height:100%;object-fit:contain;display:block}.captcha-img.is-loading{opacity:.35}.login-card .btn-lg{padding:15px 22px;font-size:16.5px;border-radius:15px}.login-hint{font-size:12.5px;color:var(--muted);text-align:center}.login-alt{font-size:13.5px;color:var(--muted);text-align:center}.login-alt:hover{color:var(--brand)}.demo-box{display:flex;flex-direction:column;gap:11px}.demo-title{font-size:var(--fs-xs);color:var(--muted)}.demo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.demo-grid:has(.demo-chip:only-child){grid-template-columns:1fr}.demo-chip{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--surface);border:1px dashed var(--line-strong);border-radius:14px;padding:13px 16px;text-align:left;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.demo-chip-main{display:flex;flex-direction:column;min-width:0}.demo-chip strong{font-size:var(--fs-sm);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.demo-chip small{color:var(--muted);font-size:var(--fs-xs);font-family:var(--mono)}.demo-chip em{font-style:normal;font-size:11px;color:var(--brand);background:var(--brand-soft);border-radius:999px;padding:2px 8px;white-space:nowrap}.demo-chip:hover{border-color:var(--brand);box-shadow:var(--shadow-sm);transform:translateY(-1px)}.login-copyright{font-size:11px;color:var(--muted);text-align:center}@media(max-width:860px){.login-page{grid-template-columns:1fr}.login-hero{display:none}.login-pane{padding:32px 16px 20px;justify-content:center;width:100%;max-width:100vw}.login-pane-inner{width:100%;max-width:420px}.login-card,.demo-box{width:100%}.demo-grid{grid-template-columns:1fr}}.kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.kpi-card{position:relative;overflow:hidden;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;transition:transform .15s ease,box-shadow .2s ease,border-color .2s ease}.kpi-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--brand);border-radius:0 3px 3px 0}.kpi-card:nth-child(2):before{background:var(--mint)}.kpi-card:nth-child(3):before{background:var(--amber)}.kpi-card:nth-child(4):before{background:var(--grape)}.kpi-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm);border-color:var(--brand-tint)}.kpi-card strong{display:block;font-size:27px;font-variant-numeric:tabular-nums;letter-spacing:-.7px}.kpi-card span{font-size:var(--fs-xs);color:var(--muted)}.kpi-card em{font-style:normal;font-size:var(--fs-xs);color:var(--mint)}.tabs{display:flex;gap:6px;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:5px}.tab{flex:1;padding:8px 6px;border-radius:10px;font-size:13px;color:var(--muted);font-weight:600}.tab.active{background:var(--brand);color:#fff;box-shadow:0 4px 12px #4f6ef747}.progress{height:6px;border-radius:999px;background:var(--line);overflow:hidden}.progress>i{display:block;height:100%;background:linear-gradient(90deg,var(--brand),#7c5cf7);border-radius:inherit;transition:width .25s}.divider{height:1px;background:var(--line);margin:14px 0}.notice{background:var(--brand-soft);border:1px solid #dbe3ff;color:var(--brand-dark);border-radius:12px;padding:10px 12px;font-size:13px}.warn-note{background:var(--amber-soft);border:1px solid #ffe2b3;color:#8a5a06;border-radius:12px;padding:10px 12px;font-size:13px}@media(max-width:900px){.kpi{grid-template-columns:repeat(2,1fr)}.shell-wide{padding:0 14px 40px}}
