*{box-sizing:border-box}:root{--background:#f1f5f9;--surface:#fff;--surface-container-low:#f8fafc;--surface-container:#f1f5f9;--surface-container-high:#e2e8f0;--on-surface:#0f172a;--on-surface-variant:#64748b;--outline:#cbd5e1;--outline-variant:#e2e8f0;--primary:#2563eb;--primary-container:#1d4ed8;--on-primary:#fff;--status-green:#16a34a;--status-green-bg:#16a34a1a;--status-red:#dc2626;--status-red-bg:#dc262614;--status-yellow:#ca8a04;--status-yellow-bg:#ca8a041a;--mono:"JetBrains Mono", "Consolas", monospace}.material-symbols-outlined{vertical-align:middle;-webkit-font-smoothing:antialiased;font-family:Material Symbols Outlined;font-size:1.1rem;font-style:normal;font-weight:400;line-height:1}body{background-color:var(--background);color:var(--on-surface);background-image:radial-gradient(circle at 1px 1px,#64748b1f 1px,#0000 0);background-size:22px 22px;margin:0;font-family:Inter,Segoe UI,system-ui,sans-serif}@keyframes statusPulseGreen{0%{box-shadow:0 0 #16a34a80}70%{box-shadow:0 0 0 6px #16a34a00}to{box-shadow:0 0 #16a34a00}}@keyframes statusPulseYellow{0%{box-shadow:0 0 #ca8a0480}70%{box-shadow:0 0 0 6px #ca8a0400}to{box-shadow:0 0 #ca8a0400}}header.topbar{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--outline-variant);z-index:50;background:#ffffffeb;justify-content:space-between;align-items:center;gap:2rem;height:58px;padding:0 1.5rem;display:flex;position:sticky;top:0;box-shadow:0 1px 2px #0f172a0a}.topbar-left{align-items:center;gap:2rem;min-width:0;display:flex}.brand{color:var(--on-surface);white-space:nowrap;letter-spacing:-.01em;margin:0;font-size:1.05rem;font-weight:700}nav.tabs{align-items:center;gap:1.5rem;display:flex}nav.tabs button{color:var(--on-surface-variant);cursor:pointer;text-transform:uppercase;letter-spacing:.08em;background:0 0;border:none;border-bottom:2px solid #0000;padding:.4rem 0;font-family:inherit;font-size:.68rem;font-weight:700;transition:color .15s}nav.tabs button:hover{color:var(--on-surface)}nav.tabs button.active{color:var(--on-surface);border-bottom-color:var(--primary)}.topbar-right{white-space:nowrap;align-items:center;gap:.75rem;display:flex}.topbar-right .user-email{font-family:var(--mono);color:var(--on-surface-variant);font-size:.7rem}.icon-btn{background:var(--surface);color:var(--on-surface-variant);border:1px solid var(--outline);border-radius:.25rem;justify-content:center;align-items:center;padding:.4rem;display:inline-flex}.icon-btn:hover{background:var(--surface-container-low);color:var(--on-surface)}.icon-btn .material-symbols-outlined{font-size:1.05rem}main{width:100%;max-width:1600px;margin:0 auto;padding:1.5rem}h2{letter-spacing:-.01em;text-transform:uppercase;color:var(--on-surface);margin:0 0 1.25rem;font-size:1.4rem;font-weight:800}h3{text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface);margin:0 0 .75rem;font-size:.7rem;font-weight:700}table{border-collapse:collapse;background:var(--surface);border:1px solid var(--outline-variant);border-radius:.25rem;width:100%;overflow:hidden;box-shadow:0 1px 2px #0f172a0a}th{text-align:left;text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);background:var(--surface-container-high);border-bottom:1px solid var(--outline-variant);padding:.7rem 1rem;font-size:.62rem;font-weight:700}td{text-align:left;border-bottom:1px solid var(--outline-variant);padding:.7rem 1rem;font-size:.85rem}tr:last-child td{border-bottom:none}tr:hover td{background:var(--surface-container-low);box-shadow:inset 3px 0 0 0 var(--primary)}form.inline,div.inline{flex-wrap:wrap;align-items:center;gap:.6rem;margin-bottom:1rem;display:flex}input,select,textarea{border:1px solid var(--outline);background:var(--surface);color:var(--on-surface);border-radius:.25rem;padding:.5rem .7rem;font-family:inherit;font-size:.85rem}input:focus,select:focus,textarea:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 2px #2563eb26}button{cursor:pointer;background:var(--primary);color:var(--on-primary);border:1px solid var(--primary);text-transform:uppercase;letter-spacing:.06em;border-radius:.25rem;padding:.5rem .9rem;font-size:.66rem;font-weight:700;transition:background .15s}button:hover{background:var(--primary-container)}button.secondary{background:var(--surface);color:var(--on-surface-variant);border-color:var(--outline)}button.secondary:hover{background:var(--surface-container-low);color:var(--on-surface)}button.danger{background:var(--surface);color:var(--status-red);border-color:var(--outline)}button.danger:hover{background:var(--status-red-bg);border-color:var(--status-red)}.status-online{color:var(--status-green);font-weight:700}.status-offline{color:var(--on-surface-variant);font-weight:700}.error{color:var(--status-red);border-left:3px solid var(--status-red);background:var(--status-red-bg);border-radius:0 .25rem .25rem 0;margin:.5rem 0;padding:.75rem 1rem;font-size:.82rem;font-weight:600}.success{color:var(--status-green);border-left:3px solid var(--status-green);background:var(--status-green-bg);border-radius:0 .25rem .25rem 0;margin:.5rem 0;padding:.75rem 1rem;font-size:.82rem;font-weight:600}.card{background:var(--surface);border:1px solid var(--outline-variant);border-radius:.25rem;margin-bottom:1rem;padding:1.25rem;box-shadow:0 1px 2px #0f172a0a}.two-col{grid-template-columns:minmax(260px,1fr) 2fr;align-items:start;gap:1.5rem;margin-bottom:1.5rem;display:grid}.kpi-grid{grid-template-columns:1fr;gap:1rem;margin-bottom:2rem;display:grid}@media (width>=640px){.kpi-grid{grid-template-columns:repeat(2,1fr)}}@media (width>=1024px){.kpi-grid{grid-template-columns:repeat(4,1fr)}}.kpi-tile{background:var(--surface);border:1px solid var(--outline-variant);border-radius:.25rem;flex-direction:column;gap:.25rem;padding:1rem;display:flex;box-shadow:0 1px 2px #0f172a0a}.kpi-value{font-family:var(--mono);color:var(--on-surface);font-size:1.7rem;font-weight:700;line-height:1}.kpi-label{text-transform:uppercase;letter-spacing:.06em;color:var(--on-surface-variant);margin-top:.35rem;font-size:.62rem;font-weight:700}.section-title{align-items:center;gap:1.5rem;margin-bottom:1rem;display:flex}.section-title h3{text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface);align-items:center;gap:.4rem;margin:0;font-size:.7rem;display:flex}.section-title h3 .material-symbols-outlined{color:var(--primary);font-size:1rem}.device-grid{grid-template-columns:1fr;gap:1rem;margin-bottom:1.5rem;display:grid}@media (width>=640px){.device-grid{grid-template-columns:repeat(2,1fr)}}@media (width>=1024px){.device-grid{grid-template-columns:repeat(3,1fr)}}@media (width>=1280px){.device-grid{grid-template-columns:repeat(4,1fr)}}.device-card{background:var(--surface);border:1px solid var(--outline-variant);border-radius:.25rem;flex-direction:column;gap:.9rem;padding:1.1rem;transition:transform .2s,box-shadow .2s;display:flex;box-shadow:0 1px 2px #0f172a0a}.device-card:hover{transform:translateY(-2px);box-shadow:0 8px 16px -6px #0f172a1a}.device-card.offline{border-color:var(--status-yellow)}.device-card-header{justify-content:space-between;align-items:flex-start;display:flex}.device-card-header small{color:var(--on-surface-variant);font-size:.72rem}.device-card-readings{border-top:1px solid var(--outline-variant);border-bottom:1px solid var(--outline-variant);grid-template-columns:1fr 1fr;gap:.75rem;padding:.9rem 0;display:grid}.device-card-readings>div:first-child{border-right:1px solid var(--outline-variant);padding-right:.75rem}.device-card-readings .reading-label{text-transform:uppercase;letter-spacing:.06em;color:var(--on-surface-variant);margin-bottom:.25rem;font-size:.6rem;font-weight:700;display:block}.device-card-readings .reading-value{font-family:var(--mono);color:var(--on-surface);font-size:1.5rem;font-weight:700}.device-card-readings .reading-value small{margin-left:.15rem;font-size:.85rem;font-weight:500}.device-card-footer{font-family:var(--mono);color:var(--on-surface-variant);justify-content:space-between;align-items:center;font-size:.68rem;display:flex}.status-chip{text-transform:uppercase;letter-spacing:.06em;align-items:center;gap:.4rem;padding:.15rem .1rem;font-size:.62rem;font-weight:700;display:inline-flex}.status-chip.online{color:var(--status-green)}.status-chip.offline{color:var(--status-yellow)}.status-chip .dot{background:currentColor;border-radius:50%;width:10px;height:10px}.status-chip.online .dot{animation:2s infinite statusPulseGreen}.status-chip.offline .dot{animation:2s infinite statusPulseYellow}.signal-bars{align-items:flex-end;gap:2px;display:inline-flex}.signal-bars i{width:4px;font-style:normal;display:inline-block}.signal-bars i:first-child{height:5px}.signal-bars i:nth-child(2){height:8px}.signal-bars i:nth-child(3){height:11px}.signal-bars i:nth-child(4){height:14px}.signal-bars i.bar-on{background:var(--status-green)}.signal-bars i.bar-off{background:var(--outline-variant)}form label{margin-bottom:.75rem;display:block}form label>small{color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.06em;margin-bottom:.3rem;font-size:.62rem;font-weight:700;display:block}.tpl-badge{text-transform:uppercase;letter-spacing:.04em;background:var(--surface-container-low);color:var(--on-surface-variant);border:1px solid var(--outline-variant);border-radius:.25rem;padding:.2rem .6rem;font-size:.6rem;font-weight:700}.tpl-code{color:#e2e8f0;border:1px solid var(--outline-variant);width:100%;font-family:var(--mono);background:#0f172a;border-radius:.25rem;padding:.75rem;font-size:.85rem}.tpl-vars{color:var(--on-surface-variant);font-size:.75rem}.tpl-vars code{background:var(--surface-container-low);border:1px solid var(--outline-variant);font-family:var(--mono);border-radius:.2rem;padding:.05rem .35rem}.icon-btn.danger:hover{background:var(--status-red-bg);color:var(--status-red);border-color:var(--status-red)}.mac-cell{font-family:var(--mono);color:var(--on-surface-variant);letter-spacing:.01em;white-space:nowrap;font-size:.75rem}.range-inputs{align-items:center;gap:.3rem;display:inline-flex}.range-inputs input{text-align:right;width:3.4rem;font-family:var(--mono);padding:.4rem .45rem;font-size:.8rem}.range-inputs span{color:var(--outline);font-size:.75rem}.calib-cell,.sched-cell,.firmware-target{align-items:center;gap:.4rem;display:inline-flex}.calib-value{font-family:var(--mono);color:var(--on-surface-variant);white-space:nowrap;min-width:3.4rem;font-size:.8rem}.sched-cell input[type=time]{width:6.4rem}.firmware-current{font-family:var(--mono);white-space:nowrap;align-items:center;gap:.3rem;font-size:.78rem;display:inline-flex}.firmware-current .material-symbols-outlined{color:var(--status-yellow);font-size:.95rem}.row-actions{align-items:center;gap:.3rem;display:inline-flex}.sensor-grid{grid-template-columns:1fr;gap:1rem;margin-bottom:1.5rem;display:grid}@media (width>=720px){.sensor-grid{grid-template-columns:repeat(2,1fr)}}@media (width>=1440px){.sensor-grid{grid-template-columns:repeat(3,1fr)}}.sensor-card-title{width:100%;color:var(--on-surface);background:0 0;border:none;border-bottom:1px solid #0000;padding:0 0 .15rem;font-family:inherit;font-size:.95rem;font-weight:700}.sensor-card-title:focus{border-bottom-color:var(--primary);outline:none}.sensor-card-fields{border-top:1px solid var(--outline-variant);border-bottom:1px solid var(--outline-variant);flex-direction:column;gap:.6rem;padding:.9rem 0;display:flex}.sensor-field{align-items:center;gap:.75rem;display:flex}.sensor-field-label{text-transform:uppercase;letter-spacing:.06em;width:6.5rem;color:var(--on-surface-variant);flex:none;font-size:.6rem;font-weight:700}.sensor-field-value{flex:1;min-width:0}.field-full{width:100%}.login-shell{justify-content:center;align-items:center;min-height:calc(100vh - 2rem);display:flex}.login-card{background:var(--surface);border:1px solid var(--outline-variant);border-radius:.75rem;width:100%;max-width:380px;overflow:hidden;box-shadow:0 10px 30px -12px #0f172a33}.login-card-header{border-bottom:1px solid var(--outline-variant);text-align:center;background:#fffc;padding:1.5rem 2rem}.login-card-header .material-symbols-outlined{color:var(--primary);font-size:2rem}.login-card-header p{color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.25em;margin:.5rem 0 0;font-size:.62rem;font-weight:700}.login-card-body{padding:2rem}.login-card-body h2{text-transform:none;letter-spacing:normal;margin-bottom:.2rem;font-size:1.1rem}.login-card-body>p{color:var(--on-surface-variant);margin:0 0 1.5rem;font-size:.78rem}.login-field{margin-bottom:1.1rem}.login-field label{text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);margin-bottom:.4rem;font-size:.62rem;font-weight:700;display:block}.login-field .input-icon{position:relative}.login-field .input-icon .material-symbols-outlined{color:var(--on-surface-variant);font-size:1.1rem;position:absolute;top:50%;left:.7rem;transform:translateY(-50%)}.login-field input{background:var(--surface-container-low);border-radius:.5rem;width:100%;padding:.65rem .8rem .65rem 2.3rem}.login-card button[type=submit]{border-radius:.5rem;justify-content:center;align-items:center;gap:.4rem;width:100%;padding:.75rem;font-size:.72rem;display:flex}footer.app-footer{border-top:1px solid var(--outline-variant);background:var(--surface);margin-top:auto;padding:.75rem 1.5rem}footer.app-footer div{max-width:1600px;color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.08em;justify-content:space-between;margin:0 auto;font-size:.58rem;font-weight:700;display:flex}#root{flex-direction:column;min-height:100vh;display:flex}.menu-btn{display:none}.mobile-nav{background:var(--surface);border-bottom:1px solid var(--outline-variant);z-index:40;padding:1rem 1.5rem;display:none;position:sticky;top:58px;box-shadow:0 4px 8px #0f172a0f}.mobile-nav button{text-align:left;width:100%;color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.08em;background:0 0;border:none;border-left:2px solid #0000;border-radius:0;padding:.6rem .5rem;font-size:.7rem;font-weight:700;display:block}.mobile-nav button.active{color:var(--on-surface);border-left-color:var(--primary)}@media (width<=767px){nav.tabs,.topbar-right .user-email{display:none}.menu-btn{display:inline-flex}.mobile-nav.open{display:block}main{padding:1rem}.two-col{grid-template-columns:1fr}table{white-space:nowrap;display:block;overflow-x:auto}}.login-card-footer{background:var(--surface-container-low);border-top:1px solid var(--outline-variant);text-align:center;color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.08em;padding:.75rem;font-size:.58rem;font-weight:700}
