:root{--c-bg:#f5f7fa;--c-surface:#ffffff;--c-ink:#1b2430;--c-ink-2:#4a5566;--c-ink-3:#8592a3;--c-line:#dde3ea;--c-brand:#12355b;--c-brand-2:#1f5c99;--c-accent:#0e8f7e;--c-ok:#1e8e4e;--c-ok-bg:#e5f5ec;--c-warn:#b7791f;--c-warn-bg:#fdf3e1;--c-bad:#c0392b;--c-bad-bg:#fbe9e7;--c-src-public:#1e8e4e;--c-src-real:#1f5c99;--c-src-demo:#7b3fb5;--c-src-demo-bg:#f3ebfb;--c-test:#d35400;--r:10px;--r-s:6px;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--sp-7:48px;--shadow:0 1px 2px rgba(18,53,91,.06),0 4px 16px rgba(18,53,91,.06);--font:"Pretendard","Apple SD Gothic Neo","Malgun Gothic",system-ui,sans-serif}*{box-sizing:border-box}body{margin:0;font:15px/1.6 var(--font);color:var(--c-ink);background:var(--c-bg)}a{color:var(--c-brand-2);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{line-height:1.3;margin:0 0 var(--sp-3)}h1{font-size:26px}h2{font-size:19px}h3{font-size:16px}p{margin:0 0 var(--sp-3)}.muted,small{color:var(--c-ink-3)}.mock-bar{background:var(--c-ink);color:#fff;font-size:12px;padding:var(--sp-1) var(--sp-4);display:flex;gap:var(--sp-4);flex-wrap:wrap}.mock-bar a{color:#9cc3ef}.test-bar{background:var(--c-test);color:#fff;text-align:center;font-size:13px;font-weight:600;padding:var(--sp-1)}.top{background:var(--c-surface);border-bottom:1px solid var(--c-line)}.top .in{max-width:1120px;margin:0 auto;padding:var(--sp-3) var(--sp-4);display:flex;align-items:center;gap:var(--sp-5);flex-wrap:wrap}.logo{font-weight:800;font-size:19px;color:var(--c-brand);letter-spacing:-.3px}.logo span{color:var(--c-accent)}.top nav{gap:var(--sp-4);flex-wrap:wrap}.top .right,.top nav{display:flex;font-size:14px}.top .right{margin-left:auto;gap:var(--sp-3);align-items:center}.wrap{max-width:1120px;margin:0 auto;padding:var(--sp-6) var(--sp-4)}.shell{display:grid;grid-template-columns:220px 1fr;min-height:calc(100vh - 90px)}.side{background:var(--c-brand);color:#cfe0f3;padding:var(--sp-5) 0}.side a{display:block;color:#cfe0f3;padding:var(--sp-2) var(--sp-5);font-size:14px}.side a.on{background:rgba(255,255,255,.12);color:#fff;font-weight:600}.side .grp{font-size:11px;text-transform:uppercase;letter-spacing:1px;color:#7fa2c8;padding:var(--sp-4) var(--sp-5) var(--sp-1)}.main{padding:var(--sp-6);min-width:0}@media (max-width:800px){.shell{grid-template-columns:1fr}.side{display:flex;flex-wrap:wrap;padding:var(--sp-2)}.side .grp{display:none}.side a{padding:var(--sp-1) var(--sp-3)}.main{padding:var(--sp-4)}}.card{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r);padding:var(--sp-5);box-shadow:var(--shadow);margin-bottom:var(--sp-5)}.grid{display:grid;grid-gap:var(--sp-4);gap:var(--sp-4)}.g2{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.g3{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.g4{grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.row{display:flex;gap:var(--sp-3);align-items:center;flex-wrap:wrap}.between{justify-content:space-between}.hero{background:linear-gradient(135deg,var(--c-brand),var(--c-brand-2));color:#fff;padding:var(--sp-7) var(--sp-4)}.hero .in{max-width:860px;margin:0 auto;text-align:center}.hero h1{font-size:34px}.hero p{color:#d3e3f5;font-size:17px}.search{display:flex;gap:var(--sp-2);max-width:560px;margin:var(--sp-5) auto 0}.search input{flex:1 1;font-size:18px;padding:var(--sp-3) var(--sp-4);border-radius:var(--r-s);border:0}label{display:block;font-size:13px;color:var(--c-ink-2);margin:var(--sp-3) 0 var(--sp-1)}input,select,textarea{font:inherit;width:100%;padding:var(--sp-2) var(--sp-3);border:1px solid var(--c-line);border-radius:var(--r-s);background:#fff}input[type=checkbox],input[type=radio]{width:auto}.check{display:flex;gap:var(--sp-2);align-items:flex-start;font-size:14px;margin:var(--sp-2) 0}.btn{display:inline-block;font:inherit;font-weight:600;padding:var(--sp-2) var(--sp-4);border-radius:var(--r-s);border:1px solid var(--c-brand);background:var(--c-brand);color:#fff;cursor:pointer}.btn,.btn:hover{text-decoration:none}.btn:hover{filter:brightness(1.1)}.btn.ghost{background:#fff;color:var(--c-brand)}.btn.accent{background:var(--c-accent);border-color:var(--c-accent)}.btn.danger{background:var(--c-bad);border-color:var(--c-bad)}.btn[disabled]{opacity:.45;cursor:not-allowed}.btn.lg{font-size:17px;padding:var(--sp-3) var(--sp-5)}table{width:100%;border-collapse:collapse;font-size:14px}td,th{text-align:left;padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--c-line);vertical-align:top}th{color:var(--c-ink-2);font-weight:600;background:#f9fbfd;white-space:nowrap}.tbl{overflow-x:auto}dl.kv{display:grid;grid-template-columns:minmax(64px,max-content) minmax(0,1fr);grid-gap:var(--sp-2) var(--sp-4);gap:var(--sp-2) var(--sp-4);margin:0;font-size:14px}dl.kv dt{color:var(--c-ink-2)}dl.kv dd{margin:0}.g3 dl.kv,.g4 dl.kv{grid-template-columns:minmax(0,1fr);gap:0}.g3 dl.kv dd,.g4 dl.kv dd{margin-bottom:var(--sp-2)}.src{display:inline-block;font-size:11px;font-weight:700;padding:1px 7px;border-radius:999px;border:1px solid;vertical-align:middle;white-space:nowrap}.src.public{color:var(--c-src-public)}.src.real{color:var(--c-src-real)}.src.demo{color:var(--c-src-demo);background:var(--c-src-demo-bg)}.src.derived,.tag{color:var(--c-ink-2)}.tag{display:inline-block;font-size:12px;padding:1px 8px;border-radius:var(--r-s);background:#eef2f6}.tag.ok{background:var(--c-ok-bg);color:var(--c-ok)}.tag.warn{background:var(--c-warn-bg);color:var(--c-warn)}.tag.bad{background:var(--c-bad-bg);color:var(--c-bad)}.light{display:flex;gap:var(--sp-4);align-items:center;padding:var(--sp-4);border-radius:var(--r)}.light.green{background:var(--c-ok-bg)}.light.yellow{background:var(--c-warn-bg)}.light.red{background:var(--c-bad-bg)}.dot{width:44px;height:44px;border-radius:50%;flex:none}.light.green .dot{background:var(--c-ok)}.light.yellow .dot{background:var(--c-warn)}.light.red .dot{background:var(--c-bad)}.light strong{font-size:18px}.note{border-left:4px solid var(--c-src-demo);background:var(--c-src-demo-bg);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-s);font-size:14px;margin-bottom:var(--sp-4)}.note.info{border-color:var(--c-brand-2);background:#eaf2fb}.note.warn{border-color:var(--c-warn);background:var(--c-warn-bg)}.stat{font-size:26px;font-weight:800;color:var(--c-brand)}.foot{border-top:1px solid var(--c-line);font-size:13px;padding:var(--sp-5) var(--sp-4)}.empty,.foot{color:var(--c-ink-3);text-align:center}.empty{padding:var(--sp-6)}code{background:#eef2f6;padding:0 4px;border-radius:4px;font-size:13px}