:root{color-scheme:dark;--bg: #0d0d0f;--sidebar: #111214;--panel: #18191d;--panel-soft: #121316;--panel-raised: #212329;--text: #f1f0ea;--muted: #a7aaa3;--line: #303238;--accent: #20c7b5;--accent-strong: #14a99a;--danger: #ff6b6b;--ok: #4ade80;--warn: #f2b84b;--shadow: 0 16px 42px rgba(0, 0, 0, .28)}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:linear-gradient(180deg,rgba(32,199,181,.05),transparent 260px),var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;-webkit-font-smoothing:antialiased}button,input,select{font:inherit}button,input,select{min-width:0}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid rgba(32,199,181,.72);outline-offset:2px}.app-shell{display:grid;grid-template-columns:clamp(248px,21vw,288px) minmax(0,1fr);min-height:100vh}.sidebar{display:flex;flex-direction:column;gap:22px;border-right:1px solid var(--line);background:var(--sidebar);padding:22px;overflow-y:auto}.brand{display:flex;align-items:center;gap:12px}.brand strong,.brand span{display:block}.brand strong{color:var(--text)}.brand span{color:var(--muted);font-size:12px;overflow-wrap:anywhere}.role-switch{display:grid;grid-template-columns:1fr;gap:6px}.role-switch button,.channel-list button{min-height:38px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--text);text-align:left;cursor:pointer;transition:background .14s ease,border-color .14s ease,color .14s ease}.role-switch button{padding:8px 10px}.role-switch button.active,.channel-list button.selected{border-color:var(--line);background:var(--panel);box-shadow:inset 0 0 0 1px #ffffff05}.role-switch button:hover,.channel-list button:hover{border-color:#20c7b547;background:#20c7b512}.channel-list{display:grid;gap:8px}.channel-list button{display:flex;align-items:center;gap:10px;padding:10px}.nav-empty{color:var(--muted);font-size:13px}.status-dot{width:10px;height:10px;flex:0 0 auto;border-radius:999px;background:var(--muted)}.status-dot.running{background:var(--ok)}.status-dot.starting{background:var(--warn)}.status-dot.error{background:var(--danger)}.workspace{min-width:0;padding:24px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:22px}.eyebrow{color:var(--accent);font-size:12px;font-weight:700;text-transform:uppercase}h1,h2{margin:0;letter-spacing:0}h1{font-size:28px}h2{font-size:15px}.actions{display:flex;gap:8px}.form-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.icon-button{display:inline-flex;width:40px;height:40px;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--text);cursor:pointer}.icon-button.primary{border-color:var(--accent);background:var(--accent);color:#04211f}.icon-button.danger{color:var(--danger)}.text-button{display:inline-flex;min-height:40px;align-items:center;gap:8px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--text);cursor:pointer;padding:0 12px}.text-button.primary{border-color:var(--accent);background:var(--accent);color:#04211f}.icon-button:hover,.text-button:hover{border-color:#20c7b557;background:var(--panel-raised)}.icon-button.primary:hover,.text-button.primary:hover{border-color:var(--accent-strong);background:var(--accent-strong);color:#031917}.icon-button:disabled,.text-button:disabled{cursor:not-allowed;opacity:.45}.content-grid{display:grid;grid-template-columns:minmax(320px,1.3fr) minmax(260px,.8fr);gap:16px}.content-grid.two{grid-template-columns:repeat(2,minmax(280px,1fr))}.content-grid.admin-grid{grid-template-columns:minmax(280px,.8fr) minmax(420px,1.2fr)}.panel{min-width:0;border:1px solid var(--line);border-radius:8px;background:var(--panel);box-shadow:var(--shadow);padding:16px}.panel-title{display:flex;align-items:center;gap:8px;margin-bottom:14px}.form-title{align-items:flex-start;justify-content:space-between;gap:16px}.form-title>div:first-child{display:flex;align-items:center;gap:8px}.form-section-title{display:flex;align-items:center;gap:8px;border-top:1px solid var(--line);padding-top:16px}.preview-panel{grid-row:span 2}.preview-surface{position:relative;display:grid;min-height:clamp(260px,34vw,420px);place-items:center;border-radius:6px;background:linear-gradient(90deg,rgba(255,255,255,.08) 1px,transparent 1px),linear-gradient(180deg,rgba(255,255,255,.08) 1px,transparent 1px),#05090f;background-size:32px 32px;color:#fff}.preview-surface span{position:absolute;top:12px;right:12px;border-radius:4px;background:#05090fc7;padding:5px 8px;font-size:12px;font-weight:700}.hls-preview{overflow:hidden;background:#05080b}.hls-preview video{width:100%;height:100%;min-height:clamp(260px,34vw,420px);object-fit:contain;background:#05080b}.preview-error{position:absolute;right:12px;bottom:12px;left:12px;border-radius:6px;background:#ff6b6b2e;border:1px solid rgba(255,107,107,.36);color:#fff;font-size:13px;padding:8px 10px}.telemetry{display:grid;gap:10px}.telemetry div,.details div{display:flex;min-height:36px;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid var(--line)}.telemetry div:last-child,.details div:last-child{border-bottom:0}.telemetry span,.details dt{color:var(--muted)}.details{margin:0}.compact-details{margin-top:14px}.details dd{margin:0;max-width:65%;overflow-wrap:anywhere;text-align:right;font-weight:700}.signal-path{display:grid;gap:8px}.signal-node{display:flex;min-height:38px;align-items:center;gap:8px;border:1px solid var(--line);border-radius:6px;background:var(--panel-soft);padding:8px 10px;color:var(--muted)}.signal-node.active{border-color:#4ade8059;background:#4ade801a;color:var(--ok)}.meter-block{display:grid;gap:8px;margin-bottom:18px}.commentator-route{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:12px}.route-button{display:inline-flex;min-height:46px;align-items:center;justify-content:center;gap:8px;border:1px solid var(--line);border-radius:6px;background:var(--panel-soft);color:var(--text);cursor:pointer;font-weight:800;letter-spacing:0}.route-button.on-air.active{border-color:#4ade8075;background:#4ade8024;color:var(--ok)}.route-button.muted.active{border-color:#99a6b661;background:#99a6b61f;color:var(--muted)}.route-button.command.active{border-color:#f2b84b75;background:#f2b84b29;color:var(--warn)}.route-button:disabled{cursor:not-allowed;opacity:.45}.route-state{display:flex;min-height:38px;align-items:center;justify-content:space-between;gap:12px;border:1px solid var(--line);border-radius:6px;background:var(--panel-soft);margin-bottom:14px;padding:8px 10px}.route-state strong{font-size:13px}.route-state span{color:var(--muted);font-size:13px;text-align:right}.route-state.on-air{border-color:#4ade8059}.route-state.command{border-color:#f2b84b59}.meter{height:12px;overflow:hidden;border-radius:999px;background:var(--line)}.meter i{display:block;height:100%;background:var(--accent)}.empty-state{border:1px dashed var(--line);border-radius:8px;padding:24px;color:var(--muted)}.error-banner{display:flex;align-items:center;gap:10px;border:1px solid rgba(255,107,107,.32);border-radius:8px;background:#ff6b6b1a;color:var(--danger);margin-bottom:16px;padding:12px 14px}.admin-panel{grid-row:span 2}.admin-form{display:grid;gap:16px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.form-grid label{display:grid;gap:6px}.form-grid label span{color:var(--muted);font-size:12px;font-weight:700;text-transform:uppercase}.form-grid input,.form-grid select{width:100%;min-height:40px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--text);padding:8px 10px}.form-grid input:hover,.form-grid select:hover{border-color:#20c7b54d}.range-label{grid-column:span 2}.range-control{display:grid;grid-template-columns:18px minmax(0,1fr) 56px;align-items:center;gap:10px;min-height:40px}.range-control input{min-height:0;padding:0;accent-color:var(--accent)}.range-control output{color:var(--text);font-size:13px;font-weight:700;text-align:right}.commentator-audio-grid{margin-bottom:12px}.device-actions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}.form-grid input:disabled,.form-grid select:disabled{background:var(--panel-soft);color:var(--muted)}.toggle-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.toggle-row{display:flex;min-height:42px;align-items:center;gap:8px;border:1px solid var(--line);border-radius:6px;background:var(--panel-soft);padding:8px 10px}.toggle-row input{width:16px;height:16px;accent-color:var(--accent)}.device-warning{display:flex;align-items:flex-start;gap:8px;border:1px solid rgba(242,184,75,.28);border-radius:6px;background:#f2b84b1a;color:var(--warn);font-size:13px;padding:10px 12px}@media(max-width:1200px){.content-grid.admin-grid{grid-template-columns:1fr}.admin-panel,.preview-panel{grid-row:auto}}@media(max-width:900px){.app-shell{grid-template-columns:1fr}.sidebar{border-right:0;border-bottom:1px solid var(--line);gap:14px;padding:14px}.brand{align-items:flex-start}.role-switch{grid-template-columns:repeat(2,minmax(0,1fr))}.role-switch button{min-height:44px;text-align:center}.role-switch button:first-child{grid-column:1 / -1}.channel-list{display:flex;overflow-x:auto;padding-bottom:2px}.channel-list button{flex:0 0 min(260px,78vw)}.content-grid,.content-grid.two,.content-grid.admin-grid,.form-grid,.commentator-route,.toggle-grid{grid-template-columns:1fr}.topbar{align-items:flex-start;flex-direction:column;gap:14px;margin-bottom:16px}.range-label{grid-column:span 1}.workspace{padding:16px}h1{font-size:24px}}@media(max-width:560px){.workspace,.sidebar{padding:12px}.panel{border-radius:6px;padding:12px}.topbar .actions,.form-actions,.device-actions{width:100%}.form-actions{justify-content:stretch}.text-button{justify-content:center}.topbar .actions .icon-button{flex:1 1 0}.preview-surface,.hls-preview video{min-height:220px}.route-state{align-items:flex-start;flex-direction:column}.route-state span{text-align:left}.details div,.telemetry div{align-items:flex-start;flex-direction:column;justify-content:flex-start;padding:8px 0}.details dd{max-width:100%;text-align:left}}
