:root{color-scheme:dark;--bg: #0f172a;--bg-inset: #131c30;--card: #1b2336;--card-soft: #232d44;--line: #2a3550;--line-strong: #475569;--text: #f1f5f9;--text-secondary: #cbd5e1;--muted: #94a3b8;--accent: #22c55e;--accent-ink: #052e16;--accent-hi: #86efac;--accent-soft: rgba(34, 197, 94, .13);--ok: #22c55e;--ok-hi: #86efac;--ok-soft: rgba(34, 197, 94, .13);--bad: #ef4444;--bad-hi: #fca5a5;--bad-soft: rgba(239, 68, 68, .14);--warn: #f59e0b;--warn-hi: #fcd34d;--warn-soft: rgba(245, 158, 11, .15);--info: #38bdf8;--info-hi: #7dd3fc;--info-soft: rgba(56, 189, 248, .13);--ring: #38bdf8;--r-sm: 6px;--r-md: 10px;--r-lg: 14px;--r-pill: 999px;--shadow-1: 0 1px 2px rgba(2, 6, 23, .5);--shadow-2: 0 10px 30px rgba(2, 6, 23, .45);--font-sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", sans-serif;--font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--t-fast: .12s;--t: .18s;--t-slow: .28s;--ease: cubic-bezier(.25, .6, .35, 1)}*{box-sizing:border-box}html{scrollbar-color:var(--line-strong) var(--bg)}body{margin:0;min-height:100vh;background:radial-gradient(900px 480px at 85% -10%,rgba(34,197,94,.09),transparent 60%),radial-gradient(720px 420px at -10% 20%,rgba(56,189,248,.07),transparent 55%),var(--bg);background-attachment:fixed;color:var(--text);font:14px/1.6 var(--font-sans);-webkit-font-smoothing:antialiased}code,.num,td.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}svg{vertical-align:-.18em}.app header{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:14px;padding:12px 28px;background:#131c30b8;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:10px;min-width:0}.brand-mark{display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:linear-gradient(140deg,var(--accent),#0ea371);color:var(--accent-ink);box-shadow:0 0 0 1px #86efac59,var(--shadow-1);flex:none}.brand-text{display:flex;flex-direction:column;line-height:1.25}.brand-text strong{font-size:15px;letter-spacing:.2px}.brand-text .muted{font-size:11px;font-family:var(--font-mono)}.app main{max-width:1080px;margin:0 auto;padding:28px 28px 56px}.spacer{flex:1}h1{font-size:21px;margin:0 0 4px;letter-spacing:.2px}h2{font-size:15px;margin:0;letter-spacing:.3px}.panel{margin-bottom:26px}.panel-head{display:flex;align-items:center;gap:10px;margin:0 2px 10px}.panel-count{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:12px;color:var(--muted);background:var(--bg-inset);border:1px solid var(--line);border-radius:var(--r-pill);padding:1px 9px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:22px}.stat{position:relative;overflow:hidden;background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 16px;box-shadow:var(--shadow-1);transition:border-color var(--t) var(--ease),transform var(--t) var(--ease)}.stat:hover{border-color:var(--line-strong);transform:translateY(-1px)}.stat-label{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--muted)}.stat-value{margin-top:6px;font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:26px;font-weight:600;line-height:1.15}.stat-sub{font-size:12px;color:var(--muted);font-family:var(--font-mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-icon{position:absolute;top:12px;right:12px;display:grid;place-items:center;width:28px;height:28px;border-radius:var(--r-md)}.stat.tone-ok .stat-icon{background:var(--ok-soft);color:var(--ok-hi)}.stat.tone-warn .stat-icon{background:var(--warn-soft);color:var(--warn-hi)}.stat.tone-info .stat-icon{background:var(--info-soft);color:var(--info-hi)}.stat.tone-bad .stat-icon{background:var(--bad-soft);color:var(--bad-hi)}.table-scroll{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1);overflow:hidden}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:9px 14px;text-align:left;border-bottom:1px solid rgba(148,163,184,.09)}th{background:var(--bg-inset);font-size:11px;font-weight:600;letter-spacing:.6px;color:var(--muted);text-transform:uppercase;white-space:nowrap}tbody tr{transition:background var(--t-fast) var(--ease)}tbody tr:hover{background:#38bdf80d}tr:last-child td,tr:last-child th{border-bottom:none}td.detail{color:var(--text-secondary);max-width:420px;word-break:break-all}.badge{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:var(--r-pill);font-size:12px;font-weight:600;font-family:var(--font-mono);white-space:nowrap;color:var(--text-secondary);background:#94a3b824;border:1px solid transparent}.badge:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}.badge.ok{color:var(--ok-hi);background:var(--ok-soft);border-color:#22c55e40}.badge.bad{color:var(--bad-hi);background:var(--bad-soft);border-color:#ef444447}.badge.warn{color:var(--warn-hi);background:var(--warn-soft);border-color:#f59e0b47}.toolbar{display:flex;align-items:center;gap:12px;margin-bottom:18px;flex-wrap:wrap}.toolbar-label{display:inline-flex;align-items:center;gap:8px;color:var(--muted);font-size:13px}button{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:7px 14px;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--card-soft);color:var(--text);cursor:pointer;font-size:13px;font-family:inherit;transition:background var(--t) var(--ease),border-color var(--t) var(--ease),color var(--t) var(--ease),transform var(--t-fast) var(--ease),box-shadow var(--t) var(--ease)}button:hover:not(:disabled){background:#2b3650;border-color:#5b6b84}button:active:not(:disabled){transform:translateY(1px)}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:2px solid var(--ring);outline-offset:2px}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--accent);border-color:transparent;color:var(--accent-ink);font-weight:600}button.primary:hover:not(:disabled){background:#2fd668;box-shadow:0 4px 16px #22c55e59}button.link{border-color:transparent;background:transparent;color:var(--muted)}button.link:hover:not(:disabled){background:#94a3b81a;color:var(--bad-hi);border-color:transparent}button.small{padding:4px 10px;font-size:12px;border-radius:var(--r-sm)}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}input,select{padding:8px 11px;border:1px solid var(--line-strong);border-radius:var(--r-md);font-size:14px;font-family:inherit;background:var(--bg-inset);color:var(--text);transition:border-color var(--t) var(--ease),box-shadow var(--t) var(--ease)}input::placeholder{color:#64748b}input:focus{outline:none;border-color:var(--ring);box-shadow:0 0 0 3px #38bdf833}input[type=date]{font-family:var(--font-mono)}input[type=date]::-webkit-calendar-picker-indicator{filter:invert(.85);cursor:pointer}.input-wrap{position:relative;display:flex}.input-wrap input{flex:1;width:100%;padding-right:40px}.input-wrap button{position:absolute;right:5px;top:50%;transform:translateY(-50%);padding:5px;border:none;background:transparent;color:var(--muted);border-radius:var(--r-sm)}.input-wrap button:hover{background:#94a3b81f;color:var(--text)}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:22px;box-shadow:var(--shadow-2)}.login-wrap{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:24px}.login-card{width:min(360px,92vw);display:flex;flex-direction:column;gap:12px;border-color:#94a3b82e}.login-head{display:flex;align-items:center;gap:12px;margin-bottom:6px}.login-head .brand-mark{width:40px;height:40px;border-radius:12px}.login-head h1{margin:0;font-size:18px}.login-head p{margin:0;font-size:12px}.error{color:var(--bad-hi);background:var(--bad-soft);border:1px solid rgba(239,68,68,.3);border-left-width:3px;border-radius:var(--r-md);padding:8px 12px;margin:10px 0;font-size:13px}.muted{color:var(--muted)}.form-row{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.form-row label{font-size:12px;font-weight:600;letter-spacing:.4px;color:var(--muted)}.field-error{color:var(--bad-hi);font-size:12px;display:flex;align-items:center;gap:5px}input[aria-invalid=true]{border-color:var(--bad)}nav{display:flex;gap:4px;margin-left:10px;padding:3px;background:var(--bg-inset);border:1px solid var(--line);border-radius:var(--r-md)}button.tab{border:none;background:transparent;padding:6px 14px;border-radius:var(--r-sm);color:var(--muted);font-size:13px;white-space:nowrap}button.tab:hover:not(:disabled){background:#94a3b81a;color:var(--text)}button.tab.active{background:var(--card-soft);color:var(--accent-hi);font-weight:600;box-shadow:var(--shadow-1)}.add-card{max-width:440px;margin-inline:auto}.notice{margin-top:16px;padding:10px 12px;border-radius:var(--r-md);background:var(--info-soft);border:1px solid rgba(56,189,248,.3);border-left-width:3px;color:var(--info-hi);font-size:13px}.notice.ok{background:var(--ok-soft);border-color:#22c55e4d;color:var(--ok-hi)}.progress{margin-top:12px;color:var(--muted)}code{display:inline-block;margin-top:6px;padding:4px 8px;background:var(--bg-inset);border:1px solid var(--line);border-radius:var(--r-sm);font-size:12px;color:var(--text-secondary);word-break:break-all}.live-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--muted);margin-right:6px;vertical-align:1px}.live-dot.on{background:var(--accent);box-shadow:0 0 #22c55e80;animation:pulse 2s var(--ease) infinite}@keyframes pulse{0%{box-shadow:0 0 #22c55e80}70%{box-shadow:0 0 0 7px #22c55e00}to{box-shadow:0 0 #22c55e00}}.empty-state{display:flex;flex-direction:column;align-items:center;gap:4px;padding:34px 16px;color:var(--muted);text-align:center}.empty-state svg{margin-bottom:6px;opacity:.65}.empty-state strong{color:var(--text-secondary);font-weight:600}.empty-state span{font-size:12px}.skeleton-row{display:block;height:12px;border-radius:var(--r-sm);background:linear-gradient(90deg,#94a3b817 25%,#94a3b82e,#94a3b817 75%);background-size:200% 100%;animation:shimmer 1.3s linear infinite}@keyframes shimmer{to{background-position:-200% 0}}.steps{display:flex;align-items:center;gap:8px;margin-top:14px;font-size:12px}.step{display:inline-flex;align-items:center;gap:6px;color:var(--muted)}.step .dot{width:8px;height:8px;border-radius:50%;border:2px solid var(--line-strong)}.step.done{color:var(--ok-hi)}.step.done .dot{background:var(--ok);border-color:var(--ok)}.step.current{color:var(--warn-hi)}.step.current .dot{border-color:var(--warn);animation:pulse 1.6s var(--ease) infinite}.step.bad{color:var(--bad-hi)}.step.bad .dot{background:var(--bad);border-color:var(--bad)}.steps .bar{flex:1;height:1px;background:var(--line);max-width:28px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media(max-width:640px){.app header{padding:10px 12px;gap:8px;flex-wrap:wrap}.brand-text .muted{display:none}.app header nav{margin-left:0;flex:1}nav button.tab{flex:1}.app main{padding:14px 12px 40px}.card{padding:16px}.toolbar{gap:8px}.stat-grid{grid-template-columns:repeat(2,1fr);gap:8px}.stat{padding:10px 12px}.stat-value{font-size:20px}.stat-icon{display:none}button{min-height:44px}button.small{min-height:36px}input,select{font-size:16px}table{display:block;width:100%}.table-scroll{background:transparent;border:none;box-shadow:none;overflow:visible}thead{display:none}tbody{display:block}tr{display:block;background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);margin-bottom:10px;padding:2px 12px;box-shadow:var(--shadow-1)}td{display:flex;align-items:baseline;gap:8px;padding:7px 0;border-bottom:1px dashed var(--line)}td:last-child{border-bottom:none}td[data-label]:before{content:attr(data-label);flex:0 0 5em;color:var(--muted);font-weight:600;font-size:12px}td.detail{max-width:none}td.empty{justify-content:center;border-bottom:none;color:var(--muted)}td:empty{display:none}}
