*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg: #0f172a;--surface: #1e293b;--surface2: #263348;--border: #334155;--text: #e2e8f0;--text-muted: #94a3b8;--high: #22c55e;--high-bg: rgba(34, 197, 94, .12);--low: #475569;--blue: #3b82f6;--purple: #a855f7;--radius: 10px}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);min-height:100dvh;-webkit-font-smoothing:antialiased}.connection-bar{position:sticky;top:0;z-index:100;display:flex;align-items:center;justify-content:space-between;padding:.65rem 1rem;background:var(--surface);border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);gap:.75rem}.brand{display:flex;align-items:center;gap:.5rem;font-weight:700;font-size:.95rem;flex-shrink:0}.status-group{display:flex;align-items:center;gap:.5rem;font-size:.8rem;color:var(--text-muted);min-width:0}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--low);flex-shrink:0}.status-dot.connected{background:var(--high);box-shadow:0 0 6px var(--high)}.status-dot.connecting{background:#f59e0b;animation:blink 1s ease-in-out infinite}.status-dot.error{background:#ef4444}.status-label{white-space:nowrap}.error-msg{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#f87171;font-size:.75rem}.btn-sm{padding:.25rem .6rem;font-size:.75rem;background:var(--surface2);border:1px solid var(--border);color:var(--text);border-radius:6px;cursor:pointer;white-space:nowrap;transition:background .15s}.btn-sm:hover{background:var(--border)}@keyframes blink{0%,to{opacity:1}50%{opacity:.2}}.main-content{padding:1.25rem 1rem 3rem;max-width:1280px;margin:0 auto}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:5rem 1rem;gap:.75rem;color:var(--text-muted)}.empty-icon{opacity:.5}.empty-title{font-size:1rem;font-weight:600}.empty-sub{font-size:.8rem}.section{margin-bottom:2rem}.section-title{display:flex;align-items:center;gap:.45rem;font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin-bottom:.75rem}.section-dot{width:8px;height:8px;border-radius:50%}.output-dot{background:var(--blue)}.input-dot{background:var(--purple)}.section-count{background:var(--surface2);border-radius:999px;padding:.05rem .45rem;font-size:.7rem;color:var(--text-muted)}.dio-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:.65rem}.dio-card{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--border);border-radius:var(--radius);padding:.85rem .85rem .75rem;display:flex;flex-direction:column;gap:.35rem;transition:border-color .2s,box-shadow .2s}.dio-card.output{border-left-color:var(--blue)}.dio-card.input{border-left-color:var(--purple)}.dio-card.high{border-color:var(--high);border-left-color:var(--high);box-shadow:0 0 14px #22c55e24}.card-header{display:flex;align-items:center;justify-content:space-between}.channel-name{font-weight:700;font-size:.9rem;font-family:SF Mono,ui-monospace,monospace}.state-badge{font-size:.63rem;font-weight:700;padding:.15rem .4rem;border-radius:4px;letter-spacing:.04em;font-family:SF Mono,ui-monospace,monospace}.badge-high{background:var(--high-bg);color:var(--high)}.badge-low{background:var(--surface2);color:var(--text-muted)}.card-desc{font-size:.72rem;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.last-change{font-size:.68rem;color:var(--text-muted);opacity:.7}.card-footer{display:flex;align-items:center;justify-content:space-between;margin-top:.25rem}.timestamp{font-size:.68rem;color:var(--text-muted)}.btn-toggle{padding:.28rem .6rem;font-size:.7rem;font-weight:600;border-radius:6px;border:1px solid var(--border);cursor:pointer;background:var(--surface2);color:var(--text-muted);transition:all .15s;white-space:nowrap}.btn-toggle.active{background:var(--high-bg);border-color:var(--high);color:var(--high)}.btn-toggle:hover:not(:disabled){filter:brightness(1.2)}.btn-toggle:disabled{opacity:.4;cursor:not-allowed}.input-indicator{display:flex;align-items:center;gap:.3rem;font-size:.7rem;color:var(--text-muted)}.input-led{width:7px;height:7px;border-radius:50%}.led-high{background:var(--high);box-shadow:0 0 5px var(--high)}.led-low{background:var(--low)}@media(max-width:480px){.dio-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}}
