:root{--bg0: #0c1116;--bg: #101821;--bg2: #16202b;--bg3: #1d2936;--line: rgba(255,255,255,.08);--line2: rgba(255,255,255,.14);--text: #e8edf2;--text2: #93a3b3;--text3: #5e7183;--green: #00a884;--green2: #25d366;--blue: #4f8ff7;--violet: #8b7bf0;--amber: #e0a33a;--red: #e2564d;--radius: 12px;--radius-s: 8px;--shadow: 0 10px 30px rgba(0,0,0,.35);--mono: ui-monospace, SFMono-Regular, Menlo, monospace}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{background:var(--bg0);color:var(--text);font:400 14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Inter,sans-serif;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{margin:0;font-weight:600}h1{font-size:20px}h2{font-size:17px}h3{font-size:15px}a{color:var(--green2);text-decoration:none}input,select,textarea,button{font:inherit;color:inherit}.layout{display:grid;grid-template-columns:232px 1fr;min-height:100vh}.side{background:var(--bg);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:16px 12px;gap:4px;position:sticky;top:0;height:100vh}.side .brand{display:flex;align-items:center;gap:10px;padding:4px 8px 16px}.side .brand .dot{width:28px;height:28px;border-radius:9px;background:var(--green);display:grid;place-items:center;font-size:15px}.side .brand b{font-size:15px}.side .brand span{display:block;font-size:11px;color:var(--text3)}.nav-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--radius-s);color:var(--text2);cursor:pointer;-webkit-user-select:none;user-select:none;font-size:13.5px}.nav-item:hover{background:var(--bg2);color:var(--text)}.nav-item.on{background:var(--bg3);color:var(--text)}.nav-item .badge{margin-left:auto;font-size:11px;color:var(--text3)}.side .foot{margin-top:auto;padding:10px 8px 0;border-top:1px solid var(--line);font-size:12px;color:var(--text3)}.main{padding:22px 26px 60px;max-width:1360px}.page-head{display:flex;align-items:flex-start;gap:16px;margin-bottom:18px}.page-head .sub{color:var(--text2);font-size:13px;margin-top:4px;max-width:640px}.page-head .actions{margin-left:auto;display:flex;gap:8px;align-items:center}.card{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius);padding:16px}.card.tight{padding:12px 14px}.grid{display:grid;gap:12px}.grid.c2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.c3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.c4{grid-template-columns:repeat(4,minmax(0,1fr))}@media (max-width: 1100px){.grid.c4{grid-template-columns:repeat(2,minmax(0,1fr))}.layout{grid-template-columns:64px 1fr}}.metric{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}.metric .l{font-size:12px;color:var(--text2)}.metric .v{font-size:26px;font-weight:600;margin-top:4px;letter-spacing:-.02em}.metric .h{font-size:11.5px;color:var(--text3);margin-top:4px}.metric.accent{border-color:#00a88459;background:linear-gradient(180deg,rgba(0,168,132,.08),transparent)}.btn{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:var(--radius-s);border:1px solid var(--line2);background:var(--bg2);cursor:pointer;font-size:13px;white-space:nowrap}.btn:hover{background:var(--bg3)}.btn.primary{background:var(--green);border-color:var(--green);color:#05261f;font-weight:600}.btn.primary:hover{background:var(--green2)}.btn.ghost{background:transparent}.btn.danger{color:var(--red);border-color:#e2564d66}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.sm{padding:5px 10px;font-size:12px}input[type=text],input[type=password],input[type=number],input[type=date],select,textarea{width:100%;background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-s);padding:8px 11px;outline:none}input:focus,select:focus,textarea:focus{border-color:var(--green)}textarea{resize:vertical;min-height:70px}label.field{display:block;font-size:12px;color:var(--text2);margin-bottom:5px}.switch{display:inline-flex;align-items:center;gap:9px;cursor:pointer;-webkit-user-select:none;user-select:none}.switch input{display:none}.switch .track{width:38px;height:22px;border-radius:999px;background:var(--bg3);border:1px solid var(--line2);position:relative;transition:.15s}.switch .track:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--text3);transition:.15s}.switch input:checked+.track{background:#00a88459;border-color:var(--green)}.switch input:checked+.track:after{left:18px;background:var(--green2)}.badge{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;padding:3px 9px;border-radius:999px;background:var(--bg3);color:var(--text2)}.badge.green{background:#00a88429;color:#6ee7c2}.badge.blue{background:#4f8ff729;color:#9cc2ff}.badge.violet{background:#8b7bf029;color:#c3b8ff}.badge.amber{background:#e0a33a29;color:#f0cd8a}.badge.red{background:#e2564d29;color:#ffa8a2}.chip{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;border:1px solid var(--line2);background:var(--bg2);cursor:pointer;font-size:12.5px}.chip.on{background:#00a88426;border-color:var(--green);color:#7fe9cb}.chip .x{color:var(--text3)}.chip .x:hover{color:var(--red)}table.tbl{width:100%;border-collapse:collapse;font-size:13px}table.tbl th{text-align:left;font-weight:500;color:var(--text3);font-size:11.5px;padding:0 10px 8px;text-transform:uppercase;letter-spacing:.04em}table.tbl td{padding:9px 10px;border-top:1px solid var(--line);vertical-align:middle}table.tbl tr:hover td{background:var(--bg2)}.num{font-variant-numeric:tabular-nums}.mono{font-family:var(--mono);font-size:12px}.muted{color:var(--text2)}.muted3{color:var(--text3)}.funnel{display:flex;align-items:stretch;gap:10px}.funnel .step{flex:1;background:var(--bg2);border-radius:var(--radius);padding:12px 14px;border:1px solid var(--line)}.funnel .step .l{font-size:11.5px;color:var(--text2)}.funnel .step .v{font-size:22px;font-weight:600;margin-top:2px}.funnel .step.minus{border-color:#e2564d4d}.funnel .step.result{border-color:#00a88473;background:#00a88414}.funnel .arrow{display:grid;place-items:center;color:var(--text3)}.bubble{background:#005c4b;border-radius:10px 10px 10px 2px;padding:10px 12px;white-space:pre-wrap;font-size:13.5px;line-height:1.5;max-width:460px}.bubble .btnrow{margin-top:8px;border-top:1px solid rgba(255,255,255,.15);padding-top:7px;text-align:center;color:#9cd8ff;font-size:13px}.rowline{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--bg2);border-radius:var(--radius-s)}.rowline+.rowline{margin-top:6px}.rowline .grow{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.steps{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}.steps .s{display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:var(--radius-s);background:var(--bg2);border:1px solid var(--line);cursor:pointer;font-size:13px}.steps .s.on{border-color:var(--green);background:#00a8841a}.steps .s .n{width:20px;height:20px;border-radius:50%;background:var(--bg3);display:grid;place-items:center;font-size:11px;color:var(--text2)}.steps .s.on .n{background:var(--green);color:#05261f;font-weight:700}.hint{font-size:12px;color:var(--text3);line-height:1.5}.warn{background:#e0a33a1a;border:1px solid rgba(224,163,58,.3);color:#f0cd8a;padding:10px 12px;border-radius:var(--radius-s);font-size:12.5px}.err{background:#e2564d1a;border:1px solid rgba(226,86,77,.3);color:#ffa8a2;padding:10px 12px;border-radius:var(--radius-s);font-size:12.5px}.ok{background:#00a8841a;border:1px solid rgba(0,168,132,.3);color:#7fe9cb;padding:10px 12px;border-radius:var(--radius-s);font-size:12.5px}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:grid;place-items:center;z-index:50;padding:20px}.modal{background:var(--bg);border:1px solid var(--line2);border-radius:14px;box-shadow:var(--shadow);width:100%;max-width:720px;max-height:88vh;overflow:auto;padding:20px}.spinner{width:15px;height:15px;border:2px solid var(--line2);border-top-color:var(--green);border-radius:50%;animation:spin .7s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.skel{background:var(--bg2);border-radius:var(--radius-s);height:14px;animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{50%{opacity:.5}}
