@font-face{font-family:Pretendard;font-weight:400;src:url(/fonts/Pretendard-Regular.woff2)format("woff2");font-display:swap}@font-face{font-family:Pretendard;font-weight:600;src:url(/fonts/Pretendard-SemiBold.woff2)format("woff2");font-display:swap}@font-face{font-family:Pretendard;font-weight:700;src:url(/fonts/Pretendard-Bold.woff2)format("woff2");font-display:swap}body{--bg:#f8fafc;--text:#1e293b;--muted:#64748b;--card-bg:#fff;--card-shadow:0 1px 3px #00000014, 0 1px 2px #0000000a;--border:#e2e8f0;--navbar-bg:#1e293b;--primary:#2563eb;--primary-text:#fff;--ok:#16a34a;--bad:#dc2626;--warn:#d97706;--row-hover:#f1f5f9;--input-bg:#fff;--alert-bg:#fef2f2;--alert-text:#b91c1c;--warn-bg:#fffbeb;--warn-text:#92400e}body[data-theme=dark]{--bg:#0f172a;--text:#e2e8f0;--muted:#94a3b8;--card-bg:#1e293b;--card-shadow:0 1px 3px #0006;--border:#334155;--navbar-bg:#020617;--primary:#3b82f6;--ok:#22c55e;--bad:#f87171;--warn:#fbbf24;--row-hover:#273449;--input-bg:#0f172a;--alert-bg:#3b1d1d;--alert-text:#fca5a5;--warn-bg:#3a2e12;--warn-text:#fcd34d}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);letter-spacing:-.02em;font-family:Pretendard,-apple-system,BlinkMacSystemFont,sans-serif;line-height:1.5}a{color:inherit;text-decoration:none}h1{font-size:1.4rem}h2{font-size:1.1rem}h3{margin:1rem 0 .5rem;font-size:.95rem}.muted{color:var(--muted)}.small{margin-top:.5rem;font-size:.85rem}.center{text-align:center;padding:2rem 0}.mono{word-break:break-all;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.85rem}.nowrap{white-space:nowrap}.navbar{background:var(--navbar-bg);color:#fff;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;padding:.75rem 1.5rem;display:flex}.navbar-brand{font-size:1.2rem;font-weight:700}.navbar-actions{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.nav-link{opacity:.75;border-radius:6px;padding:.35rem .75rem}.nav-link.active,.nav-link:hover{opacity:1;background:#ffffff1f}.nav-user{opacity:.85;margin-left:.5rem;font-size:.9rem}.container{flex-direction:column;gap:1rem;max-width:1100px;margin:0 auto;padding:1.5rem 1rem 3rem;display:flex}.card{background:var(--card-bg);box-shadow:var(--card-shadow);border-radius:10px;padding:1.25rem}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.75rem;margin-bottom:.75rem;display:flex}.btn{font:inherit;border:1px solid var(--border);background:var(--card-bg);color:var(--text);cursor:pointer;white-space:nowrap;border-radius:6px;padding:.45rem .9rem;font-size:.9rem}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);border-color:var(--primary);color:var(--primary-text)}.btn-ghost{color:#fff;background:0 0;border-color:#ffffff40}.btn-small{padding:.25rem .6rem;font-size:.8rem}.btn-warn{color:var(--warn);border-color:var(--warn)}.btn-danger{color:var(--bad);border-color:var(--bad)}input,select{font:inherit;border:1px solid var(--border);background:var(--input-bg);color:var(--text);border-radius:6px;min-width:0;padding:.5rem .7rem;font-size:.95rem}.form-row{flex-wrap:wrap;gap:.5rem;display:flex}.form-row input,.form-row select{flex:200px}.alert{background:var(--alert-bg);color:var(--alert-text);border-radius:6px;margin:.5rem 0;padding:.6rem .8rem;font-size:.9rem}.alert.warn{background:var(--warn-bg);color:var(--warn-text)}.login-wrap{justify-content:center;padding-top:6vh;display:flex}.login-card{flex-direction:column;gap:.9rem;width:100%;max-width:360px;display:flex}.login-card label{color:var(--muted);flex-direction:column;gap:.3rem;font-size:.9rem;display:flex}.login-card .btn{padding:.6rem}.summary{grid-template-columns:repeat(3,1fr);gap:1rem;display:grid}.stat{flex-direction:column;align-items:center;display:flex}.stat-num{font-size:1.8rem;font-weight:700}.stat-num.ok{color:var(--ok)}.stat-num.bad{color:var(--bad)}.stat-label{color:var(--muted);font-size:.85rem}.device-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.75rem;display:grid}.device-card{font:inherit;text-align:left;color:var(--text);background:var(--bg);border:1px solid var(--border);cursor:pointer;border-radius:8px;grid-template-columns:auto 1fr;align-items:center;column-gap:.5rem;padding:.75rem;display:grid}.device-card.selected{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary) inset}.device-card.disabled{opacity:.55}.device-name{font-weight:600}.device-id,.device-seen{color:var(--muted);grid-column:2;font-size:.8rem}.dot{background:var(--muted);border-radius:50%;width:9px;height:9px;margin-right:.35rem;display:inline-block}.dot.on{background:var(--ok)}.dot.off{background:var(--bad)}.badge{border-radius:999px;padding:.15rem .5rem;font-size:.8rem}.badge.off{background:var(--alert-bg);color:var(--alert-text)}.value-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.75rem;display:grid}.value-card{background:var(--bg);border-radius:8px;flex-direction:column;padding:.75rem;display:flex}.value-label{color:var(--muted);font-size:.8rem}.value-num{word-break:break-all;font-size:1.4rem;font-weight:700}.chart-box{height:280px}.table-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:.9rem}th,td{text-align:left;border-bottom:1px solid var(--border);vertical-align:middle;padding:.5rem .6rem}th{color:var(--muted);font-size:.8rem;font-weight:600}tbody tr:hover{background:var(--row-hover)}.row-disabled{opacity:.55}td.actions{flex-wrap:wrap;justify-content:flex-end;gap:.35rem;display:flex}.tabs{border-bottom:1px solid var(--border);gap:.25rem;display:flex}.tab{font:inherit;color:var(--muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:.6rem 1rem}.tab.active{color:var(--text);border-bottom-color:var(--primary);font-weight:600}.modal-backdrop{z-index:10;background:#00000080;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal{width:100%;max-width:520px}.secret-list dt{color:var(--muted);margin-top:.75rem;font-size:.8rem}.secret-list dd{background:var(--bg);border-radius:6px;justify-content:space-between;align-items:center;gap:.5rem;padding:.5rem .6rem;display:flex}.secret-list dd.secret{font-weight:700}.modal-actions{justify-content:flex-end;margin-top:1rem;display:flex}@media (width<=600px){.navbar{padding:.6rem 1rem}.summary{gap:.5rem}.stat-num{font-size:1.4rem}td.actions{justify-content:flex-start}}
