:root{--bg:#f4f6fb;--card:#fff;--text:#17202e;--t2:#556174;--t3:#8a94a6;--line:#e3e8f0;--acc:#2563eb;--acc2:#7c3aed;--good:#16a34a;--warn:#d97706;--crit:#dc2626;--nav:#0f172a;--nav2:#1e293b;--r:14px;--sh:0 1px 2px rgba(15,23,42,.06),0 8px 24px rgba(15,23,42,.06)}
html[data-theme=dark]{--bg:#0b1120;--card:#111a2e;--text:#e6ebf5;--t2:#a7b1c4;--t3:#6f7b91;--line:#1f2a40;--nav:#060b16;--nav2:#0f172a;--sh:0 1px 2px rgba(0,0,0,.3)}
*{box-sizing:border-box}html,body{margin:0}body{font:14px/1.55 "Pretendard","Apple SD Gothic Neo","Malgun Gothic",system-ui,sans-serif;background:var(--bg);color:var(--text)}
a{color:var(--acc);text-decoration:none;cursor:pointer}button,input,select,textarea{font:inherit;color:inherit}
.boot .splash{min-height:100vh;display:grid;place-items:center;align-content:center;gap:10px;color:var(--t2)}
.logo{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;font-weight:800;color:#fff;background:linear-gradient(135deg,var(--acc),var(--acc2));letter-spacing:.5px}
.shell{display:grid;grid-template-columns:240px 1fr;min-height:100vh}
.side{background:linear-gradient(180deg,var(--nav),var(--nav2));color:#cbd5e1;padding:18px 12px;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:4px}
.brand{display:flex;gap:10px;align-items:center;padding:4px 8px 18px}.brand b{color:#fff;font-size:15px}.brand small{display:block;color:#64748b;font-size:11px}
.side a{display:flex;gap:10px;align-items:center;padding:10px 12px;border-radius:10px;color:#cbd5e1;font-weight:500}.side a:hover{background:rgba(255,255,255,.06)}.side a.on{background:rgba(37,99,235,.22);color:#fff;box-shadow:inset 3px 0 0 #60a5fa}
.side .sp{flex:1}.side .me{padding:10px 12px;border-top:1px solid rgba(255,255,255,.08);font-size:12.5px;color:#94a3b8}.side svg{width:18px;height:18px;flex:none;opacity:.85}
.main{padding:22px 26px 60px;min-width:0}.top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px}.top h1{font-size:20px;margin:0}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:18px}.card h2{font-size:15px;margin:0 0 12px}
.grid{display:grid;gap:14px}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g21{grid-template-columns:2fr 1fr}
.kpi{position:relative;overflow:hidden}.kpi span{color:var(--t2);font-size:12.5px}.kpi b{display:block;font-size:28px;letter-spacing:-.5px;margin-top:4px}.kpi small{color:var(--t3)}.kpi:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--c,var(--acc))}
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--card);border-radius:10px;padding:8px 14px;cursor:pointer;font-weight:600;min-height:38px;white-space:nowrap}.btn:hover{border-color:var(--acc)}
.btn.pri{background:linear-gradient(135deg,var(--acc),#4f46e5);color:#fff;border:0}.btn.dang{color:var(--crit);border-color:color-mix(in srgb,var(--crit) 40%,transparent)}.btn.sm{padding:5px 10px;min-height:30px;font-size:12.5px}.btn:disabled{opacity:.5;cursor:not-allowed}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.sp1{flex:1}
input,select,textarea{border:1px solid var(--line);background:var(--card);border-radius:10px;padding:8px 11px;min-height:38px;width:100%}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--acc);box-shadow:0 0 0 3px color-mix(in srgb,var(--acc) 18%,transparent)}
.fld{display:grid;gap:5px;margin-bottom:12px}.fld label{font-size:12.5px;font-weight:600;color:var(--t2)}.f2{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.tw{overflow:auto;border:1px solid var(--line);border-radius:12px}table{width:100%;border-collapse:collapse;font-size:13.5px}th{background:color-mix(in srgb,var(--line) 45%,var(--card));text-align:left;font-size:12px;color:var(--t2);font-weight:700;padding:10px 12px;white-space:nowrap;position:sticky;top:0}
td{padding:10px 12px;border-top:1px solid var(--line);vertical-align:middle}tr.click{cursor:pointer}tr.click:hover td{background:color-mix(in srgb,var(--acc) 5%,transparent)}.r{text-align:right}.nw{white-space:nowrap}
.bd{white-space:nowrap;display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:700;background:color-mix(in srgb,var(--c) 13%,transparent);color:var(--c)}.bd:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px}.key{font-family:ui-monospace,Consolas,monospace;font-size:18px;letter-spacing:1px;padding:14px;border:2px dashed var(--acc);border-radius:12px;text-align:center;user-select:all;word-break:break-all;background:color-mix(in srgb,var(--acc) 6%,transparent)}
.hint{color:var(--t3);font-size:12.5px}.muted{color:var(--t3)}.pill{white-space:nowrap;display:inline-block;padding:1px 8px;border:1px solid var(--line);border-radius:999px;font-size:12px;margin:1px}
.mbg{position:fixed;inset:0;background:rgba(15,23,42,.45);backdrop-filter:blur(3px);display:grid;place-items:center;z-index:50;padding:16px}.modal{background:var(--card);border-radius:18px;max-width:640px;width:100%;max-height:90vh;overflow:auto;padding:22px;box-shadow:0 30px 80px rgba(0,0,0,.25)}.modal.wide{max-width:980px}.modal h3{margin:0 0 14px;font-size:17px}
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:#0f172a;color:#fff;padding:11px 18px;border-radius:12px;z-index:60;box-shadow:0 10px 30px rgba(0,0,0,.25);max-width:90vw}
.bars{display:flex;gap:3px;align-items:flex-end;height:120px;padding-top:8px}.bars div{flex:1;display:flex;flex-direction:column-reverse;gap:1px;min-width:4px}.bars i{display:block;border-radius:3px 3px 0 0}.bars .ok{background:var(--acc)}.bars .fl{background:var(--crit)}
.login{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 20% 10%,#1e3a8a 0,transparent 45%),radial-gradient(circle at 80% 90%,#5b21b6 0,transparent 40%),#0b1120;padding:16px}.login .card{width:min(400px,100%);padding:28px}
.pg{display:flex;gap:4px;justify-content:flex-end;margin-top:12px}.tabs{display:flex;gap:4px;background:color-mix(in srgb,var(--line) 50%,transparent);padding:4px;border-radius:12px;width:max-content;max-width:100%;overflow:auto}.tabs button{border:0;background:none;padding:7px 12px;border-radius:9px;cursor:pointer;font-weight:600;color:var(--t2);white-space:nowrap}.tabs button.on{background:var(--card);color:var(--text);box-shadow:var(--sh)}
pre.code{background:#0f172a;color:#e2e8f0;padding:14px;border-radius:12px;overflow:auto;font-size:12.5px;line-height:1.6;white-space:pre}
.mb{display:none}
@media (max-width:900px){.shell{grid-template-columns:1fr}.side{position:fixed;inset:0 auto 0 0;width:250px;z-index:40;transform:translateX(-105%);transition:transform .2s}.side.open{transform:none}.mb{display:inline-flex}.main{padding:14px 12px 60px}
  .g4{grid-template-columns:repeat(2,minmax(0,1fr))}.g3,.g2,.g21,.f2{grid-template-columns:1fr}.top h1{font-size:17px}.kpi b{font-size:22px}}
[hidden]{display:none!important}
