:root{color-scheme:light;font-family:Pretendard,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;--bg: #eef2f7;--surface: #ffffff;--surface-2: #f5f7fa;--surface-hover: #edf2f7;--border: #dde3eb;--border-strong: #c5cfd9;--text: #0f172a;--muted: #5a6a7e;--accent: #0ea5e9;--accent-hover: #0284c7;--accent-ring: rgba(14, 165, 233, .18);--accent-tint: rgba(14, 165, 233, .08);--accent-tint-border: rgba(14, 165, 233, .22);--online: #10b981;--online-tint: rgba(16, 185, 129, .12);--online-ring: rgba(16, 185, 129, .22);--warn: #f59e0b;--warn-tint: rgba(245, 158, 11, .1);--warn-border: rgba(245, 158, 11, .28);--error: #ef4444;--error-tint: rgba(239, 68, 68, .1);--error-border: rgba(239, 68, 68, .24);--shadow-sm: 0 1px 2px rgba(15, 23, 42, .05);--shadow: 0 1px 3px rgba(15, 23, 42, .07), 0 1px 2px rgba(15, 23, 42, .04);--shadow-md: 0 4px 8px rgba(15, 23, 42, .07), 0 2px 4px rgba(15, 23, 42, .04);background:var(--bg);color:var(--text);font-synthesis:none;line-height:1.5;text-rendering:optimizeLegibility}*{box-sizing:border-box}html{background:var(--bg)}body{min-width:320px;margin:0;background:var(--bg)}button,input,select{font:inherit}button,select{cursor:pointer}button:disabled{cursor:not-allowed}button,input,select{transition:border-color .15s ease,background-color .15s ease,color .15s ease,box-shadow .15s ease,opacity .15s ease}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}table{width:100%;border-collapse:collapse}th,td{padding:.72rem 1rem;text-align:left;border-bottom:1px solid var(--border);vertical-align:middle}th{color:var(--muted);background:var(--surface-2);font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}td{color:var(--text);font-size:.875rem}tbody tr{transition:background-color .12s ease}tbody tr:hover{background:#f0f5fa}.app-shell{display:grid;grid-template-columns:15.5rem minmax(0,1fr);min-height:100vh}.sidebar{position:sticky;top:0;display:flex;height:100vh;flex-direction:column;gap:1.25rem;padding:1.1rem .85rem;border-right:1px solid var(--border);background:#fff;box-shadow:1px 0 0 var(--border)}.brand,.nav-item,.ghost-button,.primary-button,.sync-line,.notice,.device-name,.section-title,.toolbar,.select-label{display:flex;align-items:center}.brand{gap:.72rem;min-height:2.6rem;padding:0 .3rem .85rem;border-bottom:1px solid var(--border)}.brand strong{display:block;color:var(--text);font-size:.95rem;font-weight:800;letter-spacing:-.01em}.brand span,.session-card span,.muted,.sync-line,.stat-card small,.login-copy p{color:var(--muted)}.brand-mark{display:grid;width:2.25rem;height:2.25rem;place-items:center;border:1px solid var(--accent-tint-border);border-radius:.6rem;color:var(--accent);background:var(--accent-tint);flex-shrink:0}.brand-mark.large{width:3.2rem;height:3.2rem;border-radius:.8rem}.nav-list{display:grid;gap:.22rem}.nav-item,.ghost-button,.primary-button{min-height:2.4rem;justify-content:center;gap:.52rem;border:1px solid transparent;border-radius:.5rem}.nav-item{position:relative;justify-content:flex-start;width:100%;padding:0 .75rem;color:var(--muted);background:transparent;font-size:.88rem;font-weight:600}.nav-item:before{position:absolute;top:.45rem;bottom:.45rem;left:0;width:3px;border-radius:999px;background:transparent;content:""}.nav-item:hover{color:var(--text);background:var(--surface-2)}.nav-item.active{color:var(--accent-hover);background:var(--accent-tint)}.nav-item.active:before{background:var(--accent)}.sidebar-footer{display:grid;gap:.65rem;margin-top:auto}.session-card{overflow:hidden;padding:.78rem .85rem;border:1px solid var(--border);border-radius:.55rem;background:var(--surface-2)}.session-card strong{display:block;overflow:hidden;margin-top:.18rem;color:var(--text);font-size:.875rem;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.session-card span{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.ghost-button,.primary-button{padding:0 .9rem;font-weight:700;font-size:.875rem}.ghost-button{color:var(--text);border-color:var(--border-strong);background:var(--surface)}.ghost-button:hover{border-color:#b0bcc9;background:var(--surface-2)}.primary-button{color:#fff;border-color:var(--accent);background:var(--accent)}.primary-button:hover:not(:disabled){border-color:var(--accent-hover);background:var(--accent-hover)}.primary-button:disabled{color:var(--muted);border-color:var(--border-strong);background:var(--surface-2);opacity:1}.compact{min-height:2.15rem}.danger-button{display:inline-flex;align-items:center;gap:.4rem;padding:.38rem .8rem;border-radius:.45rem;font-size:.84rem;font-weight:600;cursor:pointer;border:1px solid rgba(239,68,68,.4);background:transparent;color:#dc2626;transition:background .15s,border-color .15s}.danger-button:hover{background:#ef444412;border-color:#ef444499}.inline-form{display:flex;flex-wrap:wrap;gap:.55rem;align-items:center}.inline-form input,.inline-form select{padding:.42rem .72rem;border-radius:.45rem;border:1px solid var(--border-strong);background:var(--surface);color:var(--text);font-size:.875rem;min-height:2.2rem}.inline-form input::placeholder{color:var(--muted)}.error-inline{font-size:.8rem;color:#dc2626}.main-panel{width:min(100%,92rem);padding:1.65rem 1.85rem}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1rem}.page-header h1,.login-copy h1{margin:0;letter-spacing:-.02em}.page-header h1{color:var(--text);font-size:1.5rem;font-weight:800;line-height:1.2}.page-header p{margin:.28rem 0 0;color:var(--muted);font-size:.9rem}.sync-line,.notice{gap:.45rem;margin-bottom:1rem;font-size:.84rem}.sync-line svg{color:var(--online)}.notice{padding:.75rem .9rem;border:1px solid var(--warn-border);border-radius:.5rem;color:#92400e;background:var(--warn-tint);font-size:.875rem}.stats-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.85rem;margin-bottom:1rem}.stat-card,.data-section,.firmware-card,.login-panel{border:1px solid var(--border);border-radius:.65rem;background:var(--surface);box-shadow:var(--shadow)}.stat-card{min-height:8rem;padding:1rem;transition:box-shadow .15s ease,transform .15s ease}.stat-card:hover{box-shadow:var(--shadow-md)}.stat-icon{display:grid;width:2.1rem;height:2.1rem;margin-bottom:.95rem;place-items:center;border:1px solid var(--accent-tint-border);border-radius:.5rem;color:var(--accent);background:var(--accent-tint)}.stat-card span{color:var(--muted);font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.stat-card strong{display:block;margin:.12rem 0 .06rem;color:var(--text);font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:2.1rem;font-weight:700;letter-spacing:-.02em;line-height:1.05}.stat-card small{display:block;font-size:.77rem}.data-section{overflow:hidden}.section-title{justify-content:space-between;gap:1rem;padding:.8rem 1rem;border-bottom:1px solid var(--border);background:var(--surface)}.section-title h2{margin:0;color:var(--text);font-size:.92rem;font-weight:800;letter-spacing:-.01em}.section-title span{color:var(--muted);font-size:.82rem;font-weight:600}.table-wrap{overflow-x:auto}.mono{font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:.8rem;font-variant-numeric:tabular-nums;letter-spacing:0}.device-name{gap:.5rem;min-width:12rem}@keyframes pulse-online{0%{box-shadow:0 0 #10b98173}60%{box-shadow:0 0 0 5px #10b98100}to{box-shadow:0 0 #10b98100}}.status-dot{width:.5rem;height:.5rem;flex:0 0 auto;border-radius:999px;background:#9aabb8}.status-dot.online{background:var(--online);animation:pulse-online 2.4s ease-in-out infinite}.badge{display:inline-flex;min-height:1.45rem;align-items:center;gap:.35rem;padding:0 .52rem;border:1px solid rgba(90,106,126,.18);border-radius:999px;color:#3d4e60;background:#5a6a7e14;font-size:.72rem;font-weight:700;white-space:nowrap}.badge:before{width:.38rem;height:.38rem;flex:0 0 auto;border-radius:999px;background:currentColor;content:""}.badge.green{color:#059669;border-color:#10b98147;background:#10b9811a}.badge.blue{color:#0369a1;border-color:#0ea5e947;background:#0ea5e91a}.badge.gray{color:#475569;border-color:#5a6a7e38;background:#5a6a7e17}.badge.warning{color:#92400e;border-color:#f59e0b47;background:#f59e0b1a}.badge.error{color:#b91c1c;border-color:#ef444447;background:#ef444417}.badge.info{color:#0369a1;border-color:#0ea5e938;background:#0ea5e914}.toolbar{justify-content:space-between;gap:1rem;margin-bottom:1rem;padding:.8rem 1rem;border:1px solid var(--border);border-radius:.65rem;background:var(--surface);box-shadow:var(--shadow-sm)}.select-label{gap:.72rem;color:var(--text);font-weight:700;font-size:.9rem}select,input{width:100%;border:1px solid var(--border-strong);border-radius:.45rem;color:var(--text);background:var(--surface);outline:none}select{min-width:18rem;padding:.55rem .72rem}input{min-height:2.5rem;padding:0 .76rem}input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}.firmware-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.9rem;margin-bottom:1rem}.firmware-card{display:grid;min-height:11rem;gap:.75rem;padding:1rem;transition:box-shadow .15s ease}.firmware-card:hover{box-shadow:var(--shadow-md)}.firmware-card h2{margin:.18rem 0 0;color:var(--text);font-size:1rem;font-weight:700;letter-spacing:-.01em}.firmware-card p{margin:0;color:var(--muted);font-size:.875rem}.firmware-card small{display:block;margin-top:.28rem}.firmware-version{color:var(--accent);font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:1.65rem;font-variant-numeric:tabular-nums;font-weight:700;letter-spacing:-.02em;line-height:1.1}.empty-cell{padding:2rem;text-align:center;color:var(--muted);font-size:.875rem}.login-page{display:grid;min-height:100vh;place-items:center;padding:1.25rem;background:var(--bg)}.login-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(20rem,23rem);width:min(100%,56rem);overflow:hidden;box-shadow:var(--shadow-md),0 12px 40px #0f172a14}.login-copy,.login-form{padding:2.25rem 2rem}.login-copy{display:grid;align-content:center;gap:1rem;border-right:1px solid var(--border);background:linear-gradient(135deg,#f0f9ff,#e0f2fe,#eff6ff);position:relative;overflow:hidden}.login-copy:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:radial-gradient(circle,rgba(14,165,233,.12) 1px,transparent 1px);background-size:28px 28px;-webkit-mask-image:linear-gradient(to bottom right,transparent 30%,rgba(0,0,0,.4) 70%);mask-image:linear-gradient(to bottom right,transparent 30%,rgba(0,0,0,.4) 70%);pointer-events:none}.login-copy:after{content:"";position:absolute;bottom:-3rem;right:-3rem;width:12rem;height:12rem;border-radius:999px;background:radial-gradient(circle,rgba(14,165,233,.15) 0%,transparent 70%);pointer-events:none}.login-copy h1{color:var(--text);font-size:2rem;font-weight:800;letter-spacing:-.03em;line-height:1.15;position:relative}.login-copy p{max-width:26rem;margin:0;font-size:.92rem;line-height:1.65;position:relative}.login-form{display:grid;align-content:center;gap:1rem;background:var(--surface)}.login-form label{display:grid;gap:.4rem;color:var(--text);font-size:.875rem;font-weight:700}.form-error{padding:.7rem .82rem;border:1px solid var(--error-border);border-radius:.45rem;color:#b91c1c;background:var(--error-tint);font-size:.875rem}@media(max-width:1050px){.stats-grid,.firmware-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:820px){.app-shell{grid-template-columns:1fr}.sidebar{position:static;height:auto;border-right:0;border-bottom:1px solid var(--border);box-shadow:none}.nav-list{grid-template-columns:repeat(5,minmax(0,1fr))}.nav-item{justify-content:center;padding:0;font-size:0}.nav-item:before{top:auto;right:.55rem;bottom:0;left:.55rem;width:auto;height:3px}.nav-item span{display:none}.sidebar-footer{grid-template-columns:minmax(0,1fr) auto;align-items:center}.main-panel{padding:1rem}.login-panel{grid-template-columns:1fr}.login-copy{border-right:0;border-bottom:1px solid var(--border);padding:1.75rem 1.5rem}}@media(max-width:620px){.stats-grid,.firmware-grid{grid-template-columns:1fr}.page-header,.toolbar,.select-label{align-items:stretch;flex-direction:column}select{min-width:0}.sidebar-footer{grid-template-columns:1fr}.login-copy,.login-form{padding:1.25rem}}
