.uplot,.uplot *,.uplot *:before,.uplot *:after{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;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:#00000012;position:absolute;pointer-events:none}.u-cursor-x,.u-cursor-y{position:absolute;left:0;top:0;pointer-events:none;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-select.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-cursor-pt.u-off{display:none}:root{color-scheme:dark;--bg: #06080f;--bg-elevated: #0c101a;--panel: #101622;--panel-hover: #141c2b;--border: rgba(148, 163, 184, .12);--border-strong: rgba(148, 163, 184, .22);--text: #e8edf5;--text-secondary: #94a3b8;--text-muted: #64748b;--accent: #22d3ee;--accent-strong: #0891b2;--accent-soft: rgba(34, 211, 238, .12);--success: #34d399;--success-soft: rgba(52, 211, 153, .14);--danger: #f87171;--danger-soft: rgba(248, 113, 113, .14);--warning: #fbbf24;--voltage: #facc15;--current: #34d399;--power: #c084fc;--temp: #38bdf8;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--shadow: 0 18px 48px rgba(0, 0, 0, .35);--font-sans: "IBM Plex Sans", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, monospace}*{box-sizing:border-box}body{margin:0;min-height:100vh;font-family:var(--font-sans);color:var(--text);background:radial-gradient(circle at 15% -10%,rgba(34,211,238,.12),transparent 35%),radial-gradient(circle at 85% 0%,rgba(192,132,252,.08),transparent 30%),var(--bg)}#app{min-height:100vh}.app{max-width:1440px;margin:0 auto;padding:24px;display:grid;gap:20px}.app-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 22px;border:1px solid var(--border);border-radius:var(--radius-lg);background:linear-gradient(180deg,#101622f5,#0c101aeb);box-shadow:var(--shadow)}.brand{display:flex;align-items:center;gap:14px}.brand-icon{width:42px;height:42px;border-radius:12px;background:linear-gradient(135deg,#22d3ee40,#c084fc2e),var(--bg-elevated);border:1px solid var(--border-strong);position:relative}.brand-icon:after{content:"";position:absolute;top:11px;right:11px;bottom:11px;left:11px;border-radius:999px;border:2px solid var(--accent);box-shadow:0 0 12px #22d3ee73}.brand-kicker{display:block;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted);margin-bottom:2px}.brand-title{margin:0;font-size:1.35rem;font-weight:700;letter-spacing:-.02em}.header-actions{display:flex;align-items:center;gap:10px}.status-pill{padding:.4rem .75rem;border-radius:999px;font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.status-on{color:var(--success);background:var(--success-soft);border:1px solid rgba(52,211,153,.25)}.status-off{color:var(--text-muted);background:#64748b1f;border:1px solid var(--border)}.notice{padding:14px 16px;border-radius:var(--radius-md);font-size:.92rem;line-height:1.55;border:1px solid var(--border)}.notice-error{background:var(--danger-soft);border-color:#f8717140}.notice-info{background:#22d3ee14;border-color:#22d3ee33}.notice code{display:block;margin-top:8px;padding:10px 12px;border-radius:var(--radius-sm);background:#00000047;font-family:var(--font-mono);font-size:.78rem;overflow-x:auto}.readouts,.layout-main,.layout-secondary{display:grid;gap:20px}.readouts{grid-template-columns:repeat(4,minmax(0,1fr))}.layout-main{grid-template-columns:1.45fr 1fr}.layout-secondary{grid-template-columns:repeat(3,minmax(0,1fr))}.panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-lg);padding:18px;box-shadow:var(--shadow)}.panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.panel-title{margin:0;font-size:1rem;font-weight:600}.panel-subtitle{margin:4px 0 0;font-size:.82rem;color:var(--text-muted)}.readout{min-height:112px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}.readout:before{content:"";position:absolute;inset:0 auto 0 0;width:3px}.readout-v:before{background:var(--voltage)}.readout-i:before{background:var(--current)}.readout-p:before{background:var(--power)}.readout-t:before{background:var(--temp)}.readout-label{font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted)}.readout-value{font-family:var(--font-mono);font-size:clamp(1.5rem,2.4vw,2rem);font-weight:600;letter-spacing:-.03em}.toolbar{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end}.toolbar-group{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:4px;border-radius:var(--radius-md);background:#ffffff05;border:1px solid var(--border)}.chart-host{height:360px;min-height:360px;max-height:360px;overflow:hidden;border-radius:var(--radius-md);background:#00000038;border:1px solid var(--border)}.chart-host .chart-mount,.chart-host .uplot{width:100%;height:360px;max-height:360px}.panel-graph{display:flex;flex-direction:column}.field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:16px}.field{display:flex;flex-direction:column;gap:8px}.field-label{font-size:.78rem;font-weight:500;color:var(--text-secondary)}.field-control{display:flex;align-items:center;gap:0;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);overflow:hidden}.field-control:focus-within{border-color:#22d3ee73;box-shadow:0 0 0 3px #22d3ee1f}.field-control input{border:0;border-radius:0;background:transparent;flex:1}.field-suffix{padding:0 12px;font-family:var(--font-mono);font-size:.78rem;color:var(--text-muted);background:#ffffff08;border-left:1px solid var(--border)}.field-range{justify-content:flex-end}.field-range input[type=range]{width:100%;accent-color:var(--accent)}.field-check{flex-direction:row;align-items:center;gap:10px;min-height:42px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);cursor:pointer}.field-check span{font-size:.88rem;color:var(--text)}.field-check input{width:16px;height:16px;margin:0;accent-color:var(--accent)}.check-inline{display:inline-flex;align-items:center;gap:8px;padding:0 4px;font-size:.84rem;color:var(--text-secondary);cursor:pointer;white-space:nowrap}.check-inline input{width:15px;height:15px;margin:0;accent-color:var(--accent)}input,select,button{font:inherit}input,select{width:100%;padding:10px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-elevated);color:var(--text)}input:disabled,select:disabled,button:disabled{opacity:.45;cursor:not-allowed}input[type=range]{padding:0;border:0;background:transparent}.action-row{display:flex;flex-wrap:wrap;gap:10px}.btn{border:0;border-radius:var(--radius-sm);padding:10px 16px;cursor:pointer;font-weight:600;font-size:.88rem;transition:transform .12s ease,box-shadow .12s ease,background .12s ease}.btn-sm{padding:8px 12px;font-size:.82rem}.btn:active:not(:disabled){transform:translateY(1px)}.btn-accent{background:linear-gradient(180deg,#2dd4ef,#0891b2);color:#041016;box-shadow:0 8px 24px #22d3ee2e}.btn-success{background:linear-gradient(180deg,#4ade80,#16a34a);color:#041006}.btn-danger{background:linear-gradient(180deg,#fb7185,#dc2626);color:#fff}.btn-ghost{background:#ffffff08;color:var(--text);border:1px solid var(--border)}.mode-chip{padding:6px 10px;border-radius:999px;font-family:var(--font-mono);font-size:.76rem;font-weight:600;letter-spacing:.06em;color:var(--text-muted);background:#64748b1f;border:1px solid var(--border)}.mode-chip-live{color:var(--success);background:var(--success-soft);border-color:#34d39940}.meta-list{display:grid;gap:10px;margin:18px 0 0;padding-top:16px;border-top:1px solid var(--border)}.meta-list div{display:flex;justify-content:space-between;gap:12px}.meta-list dt{color:var(--text-muted);font-size:.84rem}.meta-list dd{margin:0;font-family:var(--font-mono);font-size:.84rem;text-align:right}.preset-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.preset-btn{display:grid;gap:4px;padding:12px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-elevated);color:var(--text);cursor:pointer;transition:border-color .12s ease,background .12s ease}.preset-btn:hover:not(:disabled){background:var(--panel-hover)}.preset-btn.active{border-color:#22d3ee8c;background:var(--accent-soft);box-shadow:inset 0 0 0 1px #22d3ee59}.preset-id{font-family:var(--font-mono);font-size:.82rem;font-weight:600}.preset-summary{color:var(--text-muted);font-size:.72rem}.panel-debug details{cursor:pointer}.panel-debug summary{font-size:.88rem;font-weight:600;color:var(--text-secondary)}.debug-log{max-height:220px;overflow:auto;margin:12px 0 0;padding:12px;border-radius:var(--radius-sm);background:#00000059;border:1px solid var(--border);font-family:var(--font-mono);font-size:.74rem;line-height:1.45;white-space:pre-wrap;color:#cbd5e1}@media(max-width:1100px){.readouts,.layout-main,.layout-secondary{grid-template-columns:1fr 1fr}.layout-main{grid-template-columns:1fr}}@media(max-width:720px){.app{padding:16px}.app-header,.panel-header,.toolbar,.header-actions,.action-row{flex-direction:column;align-items:stretch}.readouts,.layout-secondary,.field-grid,.preset-grid{grid-template-columns:1fr}.toolbar-group{width:100%;justify-content:stretch}.toolbar-group .btn{flex:1}}
