:root{--ink:#1f2937;--muted:#6b7280;--line:#d1d5db;--bg:#f3f4f6;--blue:#1d4ed8;--green:#047857;--red:#dc2626;--amber:#b45309}
*{box-sizing:border-box}
body{margin:0;font-family:"Apple SD Gothic Neo","Malgun Gothic","Noto Sans KR",sans-serif;color:var(--ink);background:var(--bg);font-size:13px}
header{background:#111827;color:#fff;padding:10px 18px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
header h1{margin:0;font-size:16px;font-weight:700}
header span{color:#9ca3af;font-size:12px;flex:1}
header a.doc{color:#93c5fd;font-size:12px;text-decoration:none}
header a.doc:hover{text-decoration:underline}
#wrap{display:grid;grid-template-columns:400px 1fr;min-height:calc(100vh - 44px)}
#side{background:#fff;border-right:1px solid var(--line);padding:12px 14px;overflow-y:auto;height:calc(100vh - 44px);position:sticky;top:44px}
#main{padding:14px 18px;min-width:0}
@media (max-width:900px){#wrap{grid-template-columns:1fr}#side{position:static;height:auto;border-right:0;border-bottom:1px solid var(--line)}}
fieldset{border:1px solid var(--line);border-radius:8px;margin:0 0 10px;padding:8px 10px}
legend{font-weight:700;font-size:12.5px;padding:0 4px;color:#374151}
.row{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:6px 8px}
label.f{display:flex;flex-direction:column;font-size:11px;color:var(--muted)}
label.f input,label.f select{margin-top:2px;padding:4px 6px;border:1px solid var(--line);border-radius:5px;font-size:12.5px;color:var(--ink);width:100%}
label.f input:focus{outline:2px solid #bfdbfe;border-color:var(--blue)}
.hint{font-size:11px;color:var(--muted);margin:4px 0 0}
button{cursor:pointer;border:1px solid var(--line);background:#fff;border-radius:6px;padding:6px 10px;font-size:12.5px;color:var(--ink)}
button:hover{background:#f9fafb}
button.primary{background:var(--blue);color:#fff;border-color:var(--blue);font-weight:700}
button.primary:hover{background:#1e40af}
button.ghost{background:#eef2ff;border-color:#c7d2fe;color:#3730a3}
button:disabled{opacity:.5;cursor:default}
.presets{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:10px}
.presets button{font-size:11.5px;padding:4px 8px}
table{border-collapse:collapse;width:100%;background:#fff;font-size:12.5px}
th,td{border:1px solid var(--line);padding:5px 7px;text-align:right;white-space:nowrap}
th{background:#f3f4f6;font-weight:600;text-align:center}
td.l,th.l{text-align:left}
#weak table{font-size:12px}
#weak input{width:100%;min-width:48px;padding:3px 4px;border:1px solid var(--line);border-radius:4px;font-size:12px;text-align:right}
#weak td{padding:2px 3px}
#weak th{font-size:11px;padding:3px 2px}
.actions{display:grid;gap:6px;margin-top:6px}
.actions button{padding:9px}
.card{background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:14px}
.card h2{margin:0 0 8px;font-size:14px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tag{display:inline-block;font-size:11px;padding:2px 8px;border-radius:999px;font-weight:700;color:#fff;background:#374151}
.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.kpi{background:#f9fafb;border:1px solid var(--line);border-radius:8px;padding:8px 10px}
.kpi .k{font-size:11px;color:var(--muted)}
.kpi .v{font-size:19px;font-weight:700;margin-top:2px}
.kpi .s{font-size:11px;color:var(--muted)}
.ok{color:var(--green);font-weight:700}.ng{color:var(--red);font-weight:700}.warn{color:var(--amber);font-weight:700}
.plot{width:100%;min-height:320px;margin-top:8px}
.plot.tall{min-height:640px}
#status{padding:8px 12px;border-radius:8px;margin-bottom:12px;font-size:13px;display:none}
#status.busy{display:block;background:#eff6ff;border:1px solid #bfdbfe;color:#1e3a8a}
#status.err{display:block;background:#fef2f2;border:1px solid #fecaca;color:#991b1b;white-space:pre-wrap}
#status.done{display:block;background:#ecfdf5;border:1px solid #a7f3d0;color:#065f46}
.note{font-size:11.5px;color:var(--muted);margin:6px 0 0;line-height:1.45}
.two{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media (max-width:1100px){.two{grid-template-columns:1fr}}
.tablewrap{overflow-x:auto}
details summary{cursor:pointer;color:var(--blue);font-size:12px}
.empty{color:var(--muted);text-align:center;padding:40px 0}
