:root{--bg:#f5f7fa;--surface:#fff;--surface2:#f0f2f6;--border:#e2e6ef;--border2:#c9cfe0;--text:#111827;--text2:#374151;--muted:#6b7280;--blue:#2563eb;--blue-lt:#eff6ff;--blue-bd:#bfdbfe;--blue-dk:#1d4ed8;--green:#059669;--green-lt:#ecfdf5;--green-bd:#a7f3d0;--red:#dc2626;--red-lt:#fef2f2;--red-bd:#fecaca;--r:12px}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:Noto Sans KR,Malgun Gothic,sans-serif;font-size:15px;line-height:1.6;min-height:100vh}button,input,select{font-family:inherit;font-size:14px}a{color:inherit;text-decoration:none}.topbar{position:-webkit-sticky;position:sticky;top:0;z-index:100;background:var(--blue);height:52px;display:flex;align-items:center;padding:0 24px;gap:12px;box-shadow:0 2px 8px rgba(37,99,235,.35)}.topbar h1{font-size:16px;font-weight:700;color:#fff}.topbar h1 a{color:#fff}.userbox{margin-left:auto;display:flex;align-items:center;gap:12px;color:rgba(255,255,255,.92);font-size:13px;font-weight:600}.btn-ghost{background:rgba(255,255,255,.14);color:#fff;border:1px solid rgba(255,255,255,.3);border-radius:8px;padding:5px 14px;cursor:pointer;font-weight:700;font-size:13px}.btn-ghost:hover{background:rgba(255,255,255,.25)}.wrap{max-width:1080px;margin:0 auto;padding:28px 20px}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));grid-gap:16px;gap:16px}.card{background:var(--surface);border:1.5px solid var(--border);border-radius:var(--r);padding:22px;box-shadow:0 1px 3px rgba(0,0,0,.07);transition:box-shadow .15s,transform .1s;display:block}a.card:hover{box-shadow:0 4px 16px rgba(0,0,0,.1);transform:translateY(-2px);border-color:var(--blue-bd)}.card h2{font-size:17px;font-weight:700;margin-bottom:6px}.card p{font-size:13px;color:var(--muted)}.card.dim{opacity:.6}.btn{background:var(--blue);color:#fff;border:none;border-radius:8px;padding:9px 18px;font-weight:700;cursor:pointer}.btn:hover{background:var(--blue-dk)}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-sm{padding:4px 10px;font-size:12px;border-radius:6px;border:1.5px solid var(--border);background:var(--surface2);color:var(--text2);cursor:pointer;font-weight:600;white-space:nowrap}.btn-sm:hover{border-color:var(--blue-bd);background:var(--blue-lt);color:var(--blue)}.btn-sm.danger:hover{border-color:var(--red-bd);background:var(--red-lt);color:var(--red)}.field{display:flex;flex-direction:column;gap:5px;margin-bottom:14px}.field label{font-size:12px;font-weight:700;color:var(--muted)}.field input,.field select{height:42px;border:1.5px solid var(--border);border-radius:8px;padding:0 12px;background:var(--surface2);outline:none;transition:border-color .15s}.field input:focus,.field select:focus{border-color:var(--blue);background:#fff;box-shadow:0 0 0 3px rgba(37,99,235,.12)}.msg{padding:10px 16px;border-radius:8px;font-size:13px;font-weight:600;margin-bottom:14px}.msg.ok{background:var(--green-lt);color:var(--green);border:1.5px solid var(--green-bd)}.msg.err{background:var(--red-lt);color:var(--red);border:1.5px solid var(--red-bd)}.login-box{max-width:380px;margin:10vh auto 0;background:var(--surface);border:1.5px solid var(--border);border-radius:14px;padding:32px;box-shadow:0 4px 24px rgba(0,0,0,.08)}.login-box h1{font-size:20px;font-weight:700;text-align:center;margin-bottom:4px}.login-box .sub{text-align:center;font-size:13px;color:var(--muted);margin-bottom:24px}.utable{width:100%;border-collapse:collapse;background:var(--surface);border:1.5px solid var(--border);border-radius:var(--r);overflow:hidden;font-size:13px}.utable th{background:#1e3a5f;color:#e2eeff;padding:10px;text-align:left;font-size:12px;white-space:nowrap}.utable td{padding:8px 10px;border-bottom:1px solid var(--border);white-space:nowrap}.utable tr:last-child td{border-bottom:none}.utable tr:hover td{background:var(--blue-lt)}.pill{font-size:11px;font-weight:700;padding:2px 10px;border-radius:12px}.pill.admin{background:#f5f3ff;color:#7c3aed;border:1px solid #ddd6fe}.pill.user{background:var(--blue-lt);color:var(--blue);border:1px solid var(--blue-bd)}.pill.off{background:var(--red-lt);color:var(--red);border:1px solid var(--red-bd)}.pill.on{background:var(--green-lt);color:var(--green);border:1px solid var(--green-bd)}.section-title{font-size:15px;font-weight:700;margin:26px 0 10px}.panel{background:var(--surface);border:1.5px solid var(--border);border-radius:var(--r);padding:20px}.inline-form{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}.inline-form .field{margin-bottom:0}.table-scroll{overflow-x:auto}