:root{color:#e7efe9;background:#07100d;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:radial-gradient(circle at top left,rgba(65,255,154,.16),transparent 32rem),linear-gradient(135deg,#050907,#0b1511 48%,#111915)}button{border:0;border-radius:999px;background:#d7ffe6;color:#07100d;cursor:pointer;font:inherit;font-weight:700;padding:.72rem 1rem;transition:transform .16s ease,opacity .16s ease,background .16s ease}button:hover{transform:translateY(-1px)}button:disabled{cursor:not-allowed;opacity:.6}.login{align-items:center;display:grid;min-height:100vh;padding:2rem;place-items:center}.login>div{max-width:32rem}.login h1{font-size:clamp(3rem,9vw,7rem);letter-spacing:-.08em;line-height:.88;margin:1rem 0}.login p{color:#a4b6ad;font-size:1.05rem;line-height:1.65}.login-error{color:#ffb4b4;font-size:.9rem;line-height:1.45;margin:1rem 0 0}.eyebrow{color:#75ffa9;font-size:.72rem;font-weight:800;letter-spacing:.16em;margin:0;text-transform:uppercase}.app-shell{display:grid;grid-template-columns:18rem minmax(0,1fr);min-height:100vh}aside{border-right:1px solid rgba(215,255,230,.09);display:flex;flex-direction:column;gap:2rem;padding:1.2rem;position:sticky;top:0;height:100vh}.brand{align-items:center;display:flex;gap:.85rem}.brand>div{display:grid;gap:.12rem}.brand strong,.brand small{display:block}.brand small,.session span,.section-heading p,.row span,.mqtt p{color:#8ea197}.logo{align-items:center;background:#75ffa9;border-radius:.9rem;color:#07100d;display:inline-flex;font-size:.8rem;font-weight:900;height:2.4rem;justify-content:center;letter-spacing:-.05em;width:2.4rem}nav{display:grid;gap:.25rem}nav button,.session button,.actions button,.top-actions button{align-items:center;background:transparent;color:#bac9c1;display:flex;gap:.65rem;justify-content:flex-start;padding:.72rem .85rem}nav button.active,nav button:hover,.actions button:hover,.top-actions button{background:#d7ffe614;color:#f8fff9}.session{display:grid;gap:.75rem;margin-top:auto}main{min-width:0;padding:1.4rem clamp(1rem,3vw,2.4rem) 3rem}.topbar{align-items:center;display:flex;justify-content:space-between;gap:1rem;margin-bottom:1.4rem}.topbar h1{font-size:clamp(2rem,5vw,4.8rem);letter-spacing:-.07em;line-height:.9;margin:.35rem 0 0}.top-actions{align-items:center;color:#8ea197;display:flex;gap:1rem;white-space:nowrap}.banner{border-left:3px solid;margin-bottom:1rem;padding:.9rem 1rem}.banner.warn{background:#ffc45717;border-color:#ffc457}.banner-actionable{align-items:center;display:flex;gap:1rem;justify-content:space-between}.banner-actionable button{background:#ffc45726;color:#ffd982;flex:0 0 auto;padding:.45rem .75rem}.banner.error{background:#ff686817;border-color:#ff6868}.overview-grid,.matrix{display:grid;gap:1px;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden}.matrix{grid-template-columns:repeat(auto-fit,minmax(14rem,1fr))}.matrix.compact{grid-template-columns:repeat(auto-fit,minmax(10rem,1fr))}.metric,.panel{background:#d7ffe60b;padding:1rem}.metric span{color:#83958b;display:block;font-size:.78rem;margin-bottom:.5rem}.metric strong{color:#f8fff9;display:block;font-size:1.35rem;letter-spacing:-.04em;overflow-wrap:anywhere}.metric.good strong{color:#75ffa9}.metric.warn strong{color:#ffc457}.section{margin-top:1.6rem}.section-heading{align-items:end;display:flex;justify-content:space-between;margin-bottom:.8rem}.section-heading h2{font-size:1.05rem;margin:0}.section-heading p{margin:.35rem 0 0}.rows{border-top:1px solid rgba(215,255,230,.09)}.row{align-items:center;border-bottom:1px solid rgba(215,255,230,.09);display:grid;gap:1rem;grid-template-columns:minmax(12rem,1fr) repeat(5,auto);padding:1rem 0}.row>div{display:grid;gap:.25rem}.pill{border-radius:999px;display:inline-flex;font-size:.72rem;font-weight:900;letter-spacing:.08em;padding:.32rem .58rem;text-transform:uppercase}.pill.ok{background:#75ffa924;color:#75ffa9}.pill.warn{background:#ffc45724;color:#ffc457}.pill.neutral{background:#8ea19729;color:#b7c4bd}.panel{min-height:10rem}.panel h3,.mqtt h3{margin:0 0 1rem}.panel .pill{margin:.25rem .25rem 0 0}.mqtt-list{display:grid;gap:1rem}.mqtt{background:#d7ffe60a;padding:1rem}.mqtt-head{align-items:center;display:flex;justify-content:space-between;gap:1rem;margin-bottom:1rem}.cost{color:#ffc457;font-weight:800}.private-management-note{color:#8ea197;font-size:.9rem;line-height:1.5;margin:.8rem 0 0;max-width:70rem}.action-panel{border-top:1px solid rgba(215,255,230,.09);display:grid;gap:1rem;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);margin-top:1rem;padding-top:1rem}.action-panel h4{margin:0 0 .3rem}.action-panel p,.action-button small{color:#8ea197}.action-panel p{font-size:.9rem;line-height:1.45;margin:0 0 .7rem}.actions{display:grid;gap:.45rem;grid-template-columns:repeat(auto-fit,minmax(11rem,1fr))}.action-button{align-items:flex-start;background:#d7ffe614;border:1px solid rgba(215,255,230,.1);border-radius:.9rem;color:#f8fff9;display:grid;gap:.25rem;justify-content:stretch;min-height:5.2rem;padding:.75rem;text-align:left}.action-button span{font-weight:900}.action-button small{display:block;font-size:.76rem;font-weight:600;line-height:1.25}.action-button.warn{background:#ffc4571a;border-color:#ffc45738}.action-button.danger{background:#ff68681a;border-color:#ff686838}.action-button.subtle{background:#d7ffe60b}.json{background:#0000003d;color:#cce7d7;max-height:24rem;overflow:auto;padding:1rem}.empty{background:#d7ffe60a;color:#8ea197;display:grid;gap:.35rem;padding:1rem}.empty strong{color:#f8fff9}.warning-list{color:#ffc457}.audit{grid-template-columns:minmax(12rem,1fr) repeat(4,auto)}@media(max-width:980px){.app-shell{grid-template-columns:1fr}aside{height:auto;position:static}nav{grid-template-columns:repeat(auto-fit,minmax(10rem,1fr))}.overview-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.topbar,.top-actions,.banner-actionable{align-items:flex-start;flex-direction:column}.row{align-items:start;grid-template-columns:1fr}.action-panel{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important}}
