:root{--bg:#0b0f14;--panel:#121821;--panel-2:#0f141c;--line:#1e2733;--text:#e6edf3;--muted:#8b98a8;--accent:#5ff2c8;--accent-2:#6aa8ff;--danger:#ff6b6b;--radius:14px}*{box-sizing:border-box}body,html{margin:0}body{font-family:Inter,system-ui,-apple-system,sans-serif;background:radial-gradient(1200px 600px at 80% -10%,#16202c 0,var(--bg) 55%);color:var(--text);min-height:100vh}.shell{max-width:1240px;margin:0 auto;padding:28px 22px 60px}.topbar{justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:26px}.brand,.topbar{display:flex;align-items:center}.brand{gap:14px}.brand h1{font-size:20px;margin:0;letter-spacing:-.02em}.brand p{margin:2px 0 0;color:var(--muted);font-size:13px}.dot{width:12px;height:12px;border-radius:50%;background:var(--accent);box-shadow:0 0 14px var(--accent)}.pills{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.pill{font-size:12px;padding:6px 12px;border-radius:999px;background:var(--panel);border:1px solid var(--line);color:var(--muted);font-weight:500}.pill.on{color:#05130d;background:var(--accent)}.pill.on,.pill.stale{border-color:transparent;font-weight:600}.pill.stale{color:#1a0d0d;background:var(--danger)}.nav{display:flex;gap:6px;margin-bottom:22px;flex-wrap:wrap}.nav a{padding:8px 14px;border-radius:10px;font-size:13px;font-weight:600;color:var(--muted);text-decoration:none;border:1px solid transparent}.nav a.active,.nav a:hover{color:var(--text);background:#17202b}.nav a.active{border-color:var(--line)}.provision{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:16px;gap:16px;margin-bottom:24px}@media (max-width:1000px){.provision{grid-template-columns:repeat(2,1fr)}}@media (max-width:560px){.provision{grid-template-columns:1fr}}.provision .log{height:120px}.sensors{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));grid-gap:20px;gap:20px;align-items:start}@media (max-width:900px){.sensors{grid-template-columns:1fr}}.empty{grid-column:1/-1;padding:40px;text-align:center;border:1px dashed var(--border,#2a2f3a);border-radius:12px;color:var(--muted,#8b93a7)}.empty h2{margin:0 0 8px}.empty a{color:var(--accent,#5b9dff)}.sensor{display:flex;flex-direction:column;gap:14px;background:linear-gradient(180deg,var(--panel),var(--panel-2));border:1px solid var(--line);border-radius:var(--radius);padding:16px}.sensor-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.sensor-title h2{font-size:15px;margin:0}.sensor-sub{font-family:JetBrains Mono,ui-monospace,monospace;font-size:11px;color:var(--muted)}.controls{gap:8px}.controls .btn{padding:8px 12px;font-size:12px}.live-pill{min-width:84px;text-align:center}.live-pill.stale{color:#1a0d0d;background:var(--danger);border-color:transparent;font-weight:600}.parser{background:#0a0e13;border:1px solid var(--line);border-radius:10px;padding:10px 12px}.parser-head{display:flex;align-items:center;justify-content:space-between;font-size:12px;font-weight:600;color:var(--muted);margin-bottom:8px}.parser-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:8px 10px;gap:8px 10px}@media (max-width:480px){.parser-grid{grid-template-columns:repeat(2,1fr)}}.parser label{font-size:10px;text-transform:uppercase;letter-spacing:.04em;margin:0}.parser select{width:100%;margin-top:4px;padding:5px 6px;font-size:12px;font-family:inherit;background:#17202b;color:var(--text);border:1px solid var(--line);border-radius:7px}.parser select:focus{outline:none;border-color:var(--accent-2)}.btn.tiny{padding:4px 9px;font-size:11px}.gravity-wrap{margin-top:10px}.gravity-wrap .parser-head{margin-bottom:6px}.gravity-wrap .parser-head span:first-child{color:#b48cff}.chart{background:#060a0e;border:1px solid var(--line);border-radius:10px;padding:6px}.chart .u-wrap,.chart .uplot{width:100%!important}.uplot{font-family:JetBrains Mono,ui-monospace,monospace}.u-legend{font-size:11px}.card{background:linear-gradient(180deg,var(--panel),var(--panel-2));border:1px solid var(--line);border-radius:var(--radius);padding:18px}.card-head{display:flex;align-items:center;gap:10px;margin-bottom:6px}.card-head h2{font-size:15px;margin:0;font-weight:600}.step{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:7px;background:rgba(95,242,200,.14);color:var(--accent);font-size:12px;font-weight:700}.muted{font-size:13px;line-height:1.5;margin:4px 0 14px}.hint,.muted{color:var(--muted)}.hint{margin:6px 0 12px}.hint,code{font-size:12px}code{font-family:JetBrains Mono,ui-monospace,monospace;color:var(--accent-2)}label{display:block;font-size:12px;color:var(--muted);margin-bottom:10px}input{width:100%;margin-top:6px;padding:10px 12px;background:#0a0e13;border:1px solid var(--line);border-radius:9px;color:var(--text);font-size:14px;font-family:inherit}input:focus{outline:none;border-color:var(--accent-2)}.row{display:flex;gap:10px;flex-wrap:wrap}.btn{padding:10px 16px;border-radius:10px;border:1px solid var(--line);background:#17202b;color:var(--text);font-size:13px;font-weight:600;cursor:pointer;transition:transform .05s,background .15s,opacity .15s}.btn:hover:not(:disabled){background:#1d2836}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn.primary{background:var(--accent);color:#05130d;border-color:transparent}.btn.primary:hover:not(:disabled){background:#74ffd8}.btn.ghost{background:transparent}.log{font-family:JetBrains Mono,ui-monospace,monospace;font-size:12px;background:#070a0e;border:1px solid var(--line);border-radius:10px;padding:10px;height:190px;overflow-y:auto;line-height:1.6}.log-line{color:var(--muted);white-space:pre-wrap;word-break:break-all}.log-line.ok{color:var(--accent)}.log-line.warn{color:#ffb454}.log-line.err{color:var(--danger)}.log-line.dim{color:#55627a}.wave-meta{display:flex;justify-content:space-between;font-family:JetBrains Mono,ui-monospace,monospace;font-size:12px;color:var(--muted);padding:8px 4px 2px}.cards-3{grid-template-columns:repeat(3,1fr);grid-gap:14px}.cards-3,.cards-4{display:grid;gap:14px}.cards-4{grid-template-columns:repeat(4,1fr);grid-gap:14px}@media (max-width:560px){.cards-4{grid-template-columns:repeat(2,1fr)}}.metric{background:linear-gradient(180deg,var(--panel),var(--panel-2));border:1px solid var(--line);border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;gap:4px}.metric-label{font-size:12px;color:var(--muted)}.metric-val{font-size:30px;font-weight:700;letter-spacing:-.03em}.metric-unit{font-size:12px;color:var(--muted)}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:20px}.login-card{width:100%;max-width:380px}.login-card .btn{width:100%;margin-top:8px}.error-text{color:var(--danger);font-size:13px;margin:8px 0 0}.table{width:100%;border-collapse:collapse;font-size:13px}.table td,.table th{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line)}.table th{color:var(--muted);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em}.table td{font-family:JetBrains Mono,ui-monospace,monospace}.kind{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;background:#17202b;border:1px solid var(--line)}.kind.connect,.kind.stream-resume{color:var(--accent)}.kind.disconnect,.kind.error,.kind.ping-timeout,.kind.stale-timeout{color:var(--danger)}.kind.stream-pause{color:#ffb454}.monitor-sensor{margin-bottom:22px}.monitor-sensor h2{font-size:16px;margin:0 0 12px}.grid-2{display:grid;grid-template-columns:1fr 1fr;grid-gap:20px;gap:20px;align-items:start}@media (max-width:900px){.grid-2{grid-template-columns:1fr}}.stack{display:flex;flex-direction:column;gap:14px}.section-title{font-size:13px;font-weight:600;color:var(--muted);margin:0 0 8px;text-transform:uppercase;letter-spacing:.04em}.uplot,.uplot *,.uplot :after,.uplot :before{box-sizing:border-box}.uplot{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;width:min-content}.u-title{text-align:center;font-size:18px;font-weight:700}.u-wrap{position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.u-over,.u-under{position:absolute}.u-under{overflow:hidden}.uplot canvas{display:block;position:relative;width:100%;height:100%}.u-axis{position:absolute}.u-legend{font-size:14px;margin:auto;text-align:center}.u-inline{display:block}.u-inline *{display:inline-block}.u-inline tr{margin-right:16px}.u-legend th{font-weight:600}.u-legend th>*{vertical-align:middle;display:inline-block}.u-legend .u-marker{width:1em;height:1em;margin-right:4px;background-clip:padding-box!important}.u-inline.u-live th:after{content:":";vertical-align:middle}.u-inline:not(.u-live) .u-value{display:none}.u-series>*{padding:4px}.u-series th{cursor:pointer}.u-legend .u-off>*{opacity:.3}.u-select{background:rgba(0,0,0,.07)}.u-cursor-x,.u-cursor-y,.u-select{position:absolute;pointer-events:none}.u-cursor-x,.u-cursor-y{left:0;top:0;will-change:transform}.u-hz .u-cursor-x,.u-vt .u-cursor-y{height:100%;border-right:1px dashed #607d8b}.u-hz .u-cursor-y,.u-vt .u-cursor-x{width:100%;border-bottom:1px dashed #607d8b}.u-cursor-pt{position:absolute;top:0;left:0;border-radius:50%;border:0 solid;pointer-events:none;will-change:transform;background-clip:padding-box!important}.u-axis.u-off,.u-cursor-pt.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-select.u-off{display:none}