
  /* Broadcast console theme — tokens borrowed from live24x7_13sep tv.css.
     Single file, zero dependencies: system font stacks only (file:// offline). */
  :root{
    --signal:#e11d2e; --signal-bright:#ff293d; --signal-deep:#9f1020;
    --signal-glow:rgba(225,29,46,.45); --signal-sub:rgba(225,29,46,.14);
    --ok:#3dd68c; --ok-glow:rgba(61,214,140,.4);
    --amber:#f5a623;
    --ink:#0a0d13; --panel:#141a26; --panel-2:#1a2233;
    --line:rgba(255,255,255,.08); --line-strong:rgba(255,255,255,.15);
    --paper:#eef1f6; --mute:#8b98ac;
    --font-display:"Barlow Condensed","Arial Narrow","Segoe UI",sans-serif;
    --font-ui:"Segoe UI",system-ui,-apple-system,sans-serif;
    --font-mono:ui-monospace,"Cascadia Code",Consolas,monospace;
    --ease:cubic-bezier(.22,1,.36,1);
  }
  *{margin:0;padding:0;box-sizing:border-box}
  html,body{background:radial-gradient(1200px 500px at 50% -10%,#131a29 0%,var(--ink) 60%);color:var(--paper);font-family:var(--font-ui);height:100%}
  body{display:flex;flex-direction:column;height:100vh;overflow:hidden;animation:pageIn .4s var(--ease)}
  @keyframes pageIn{from{opacity:0}to{opacity:1}}
  header{background:linear-gradient(180deg,#232c40,#1a2130);border-bottom:1px solid var(--line-strong);padding:7px 14px;display:flex;gap:9px;align-items:center;font-size:13px;box-shadow:0 4px 18px rgba(0,0,0,.45)}
  header .brand{font-family:var(--font-display);font-weight:800;font-size:17px;letter-spacing:.12em}
  header .brand em{font-style:normal;color:var(--signal-bright)}
  header input{background:#0b0f17;border:1px solid #33415a;color:var(--paper);border-radius:5px;padding:5px 8px;font-size:12px;transition:border-color .15s}
  header input:focus{outline:none;border-color:var(--signal-bright)}
  header input[type=text]{width:120px}header input[type=password]{width:150px}header input[type=number]{width:64px}
  button{background:linear-gradient(180deg,#3a4763,#2a3450);border:1px solid #4a5b7e;color:#f2f5fa;border-radius:5px;padding:6px 13px;font-size:12.5px;font-weight:600;cursor:pointer;transition:transform .08s var(--ease),background .15s,box-shadow .15s}
  button:hover{background:linear-gradient(180deg,#465672,#323e5c);box-shadow:0 2px 10px rgba(0,0,0,.4)}
  button:active{transform:translateY(1px)}
  button:disabled{opacity:.45;cursor:default;transform:none}
  button.go{background:linear-gradient(180deg,#147a45,#0d5a32);border-color:#2c8a50;box-shadow:0 0 12px var(--ok-glow)}
  button.on{background:linear-gradient(180deg,#147a45,#0d5a32);border-color:#2c8a50}
  /* LIVE pill */
  #livePill{display:none;align-items:center;gap:7px;background:linear-gradient(135deg,var(--signal-bright),var(--signal-deep));padding:4px 13px 4px 10px;font-family:var(--font-display);font-weight:800;letter-spacing:.2em;font-size:14px;border-radius:3px;box-shadow:0 0 18px var(--signal-glow)}
  #livePill.is-on{display:inline-flex}
  #livePill i{width:9px;height:9px;border-radius:50%;background:#fff;animation:livePulse 1.1s ease-in-out infinite}
  @keyframes livePulse{0%,100%{opacity:1}50%{opacity:.3}}
  .dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:#555;margin-right:6px}
  .dot.on{background:var(--ok);box-shadow:0 0 7px var(--ok)}
  .dot.off{background:var(--signal-bright);box-shadow:0 0 7px var(--signal-bright)}
  #layout{flex:1;display:grid;grid-template-columns:258px 1fr;gap:1px;background:#05070b;min-height:0}
  #left{background:#101623;display:flex;flex-direction:column;min-height:0;min-width:0}
  #center{background:#101623;display:flex;flex-direction:column;min-height:0;min-width:0}
  .pane{padding:0;display:flex;flex-direction:column;min-height:0}
  .pane > h3{background:linear-gradient(180deg,#2b3550,#232b42);font-family:var(--font-display);font-size:14px;font-weight:700;letter-spacing:.14em;padding:6px 12px;border-bottom:1px solid var(--line-strong);color:#ffd9dc}
  .pane .body{padding:6px;overflow-y:auto}
  .pane .body::-webkit-scrollbar{width:8px}
  .pane .body::-webkit-scrollbar-thumb{background:#33415a;border-radius:4px}
  #outPane{max-height:44%}
  #srcPane{flex:1;border-top:1px solid #05070b}
  #previewWrap{flex:0 0 172px;background:#000;position:relative;min-height:144px;max-height:172px;display:flex;align-items:center;justify-content:center}
  #preview{width:256px;height:144px;max-width:100%;max-height:100%;object-fit:contain;background:#000}
  #previewWrap.is-live #preview{box-shadow:0 0 0 1px rgba(225,29,46,.55),0 0 34px rgba(225,29,46,.22)}
  #standbyPv{position:absolute;inset:0;display:none;place-content:center;text-align:center;background:radial-gradient(ellipse at 50% 35%,rgba(225,29,46,.20),transparent 60%),#000;z-index:2}
  #standbyPv.is-on{display:grid}
  /* Once a real frame is rendering, the slate must never hide footage:
     shrink to a small standby badge so the program picture stays visible. */
  #previewWrap.has-frame #standbyPv.is-on{inset:auto;top:10px;left:50%;transform:translateX(-50%);place-content:start center;background:rgba(0,0,0,.62);border:1px solid var(--line-strong);border-radius:999px;padding:6px 14px;pointer-events:none}
  #previewWrap.has-frame #standbyPv.is-on .mark{width:22px;height:22px;margin:0 auto 4px;font-size:11px;border-radius:6px}
  #previewWrap.has-frame #standbyPv.is-on h1{font-size:15px;letter-spacing:.14em}
  #previewWrap.has-frame #standbyPv.is-on p{font-size:9px;margin-top:2px}
  #previewWrap.has-frame #preview{min-width:0;min-height:0}
  #standbyPv .mark{width:70px;height:70px;margin:0 auto 12px;border-radius:12px;background:linear-gradient(135deg,var(--signal-bright),var(--signal-deep));display:grid;place-items:center;font-weight:900;font-size:26px;box-shadow:0 0 50px var(--signal-glow);animation:standbyFloat 3s ease-in-out infinite}
  @keyframes standbyFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
  #standbyPv h1{font-family:var(--font-display);font-size:40px;letter-spacing:.1em}
  #standbyPv p{color:var(--mute);letter-spacing:.2em;font-size:11px;text-transform:uppercase;margin-top:6px}
  #previewBar{background:#232b42;font-size:12px;padding:5px 12px;display:flex;gap:10px;align-items:center;border-top:1px solid var(--line-strong)}
  #dockRow{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:1px;background:#05070b;border-top:1px solid #05070b;min-height:244px;max-height:304px}
  #dockRow .pane{background:#101623}
  footer{background:linear-gradient(180deg,#1a2130,#141a26);border-top:1px solid var(--line-strong);font-size:12px;padding:5px 14px;display:flex;gap:20px;color:#aeb9cc}
  footer b{color:#fff;font-weight:600;font-family:var(--font-mono)}
  /* outputs */
  .tgt{border-bottom:1px solid var(--line);padding:7px 5px;font-size:12.5px;border-left:3px solid transparent;transition:border-color .2s,background .2s}
  .tgt.live{border-left-color:var(--signal-bright);background:linear-gradient(90deg,var(--signal-sub),transparent 70%)}
  .tgt .nm{font-weight:700;margin-bottom:5px;letter-spacing:.03em}
  .tgt .stat{color:var(--mute);font-size:11.5px;margin-top:4px;font-family:var(--font-mono)}
  .tgt .stat.hot{color:var(--ok)}
  .tgt .row{display:flex;gap:6px}
  .tgt button{font-size:11.5px;padding:4px 11px}
  /* sources */
  .srcrow{display:flex;align-items:center;gap:6px;padding:4px 7px;font-size:12.5px;border-radius:4px;cursor:default;border-left:3px solid transparent;transition:background .12s}
  .srcrow:hover{background:#1d2639}
  .srcrow.sel{background:#23405f;border-left-color:var(--signal-bright)}
  .srcrow .ic{width:20px;text-align:center}
  .srcrow .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .icobtn{cursor:pointer;opacity:.9;user-select:none;font-size:13px;padding:0 3px;transition:transform .1s}
  .icobtn:hover{transform:scale(1.2)}
  .icobtn.off{opacity:.28;filter:grayscale(1)}
  /* mixer — vertical faders like OBS */
  #mixList{display:flex;gap:2px;overflow-x:auto;padding:4px}
  .chan{display:flex;flex-direction:column;align-items:center;min-width:78px;font-size:11px;background:rgba(255,255,255,.02);border-radius:6px;padding:5px 2px}
  .chan .nm{max-width:74px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:2px;font-weight:600}
  .chan .db{font-family:var(--font-mono);color:var(--mute);margin-bottom:3px}
  .faderwrap{display:flex;gap:6px;align-items:stretch;height:152px}
  .vmeter{width:10px;background:#05070b;border-radius:3px;position:relative;overflow:hidden;border:1px solid var(--line)}
  .vmeter i{position:absolute;bottom:0;left:0;right:0;height:0%;background:linear-gradient(0deg,#2ecc71 62%,#f5a623 82%,#e74c3c);display:block;transition:height .09s linear}
  input[type=range].vfader{writing-mode:vertical-lr;direction:rtl;width:24px;height:152px;accent-color:var(--signal-bright);background:transparent;cursor:pointer}
  .chan button{font-size:11px;padding:3px 9px;margin-top:4px}
  .chan.muted .nm{color:#ff9aa8}
  /* scenes / controls */
  .scenerow{padding:6px 10px;font-size:13px;border-radius:4px;cursor:pointer;border-left:3px solid transparent;transition:background .12s}
  .scenerow:hover{background:#1d2639}
  .scenerow.on{background:linear-gradient(90deg,rgba(20,122,69,.5),rgba(20,122,69,.15));border-left-color:var(--ok);font-weight:700}
  .ctlbtn{display:block;width:100%;margin:5px 0;padding:8px;font-family:var(--font-display);font-size:15px;letter-spacing:.1em}
  select,input[type=number].sm{background:#0b0f17;border:1px solid #33415a;color:var(--paper);border-radius:4px;padding:5px 7px;font-size:12px;width:100%;margin:2px 0}
  .mini{font-size:11px;color:var(--mute)}
  .filtrow{display:flex;align-items:center;gap:8px;padding:5px 6px;font-size:12px}
  .pill{font-size:11px;padding:3px 10px;border-radius:999px;border:1px solid #4a5b7e;cursor:pointer;font-weight:700;transition:box-shadow .15s}
  .pill.on{background:#0d5a32;border-color:#2c8a50;color:#7ee2a8;box-shadow:0 0 10px var(--ok-glow)}
  .pill.off{background:#5b1c24;border-color:#8a2c3a;color:#ff9aa8}
  @media(max-width:900px){#layout{grid-template-columns:1fr}#dockRow{grid-template-columns:1fr}}

  /* ---- PHP project additions: settings drawer, event log, filter editor, sparkline ---- */
  #settingsDrawer{display:none;gap:10px;align-items:center;background:#141b2a;border-bottom:1px solid var(--line-strong);padding:7px 14px;font-size:12px;flex-wrap:wrap}
  #settingsDrawer.is-on{display:flex}
  #settingsDrawer label{display:flex;gap:5px;align-items:center;color:#c6d0e2}
  #settingsDrawer input[type=number]{width:76px;background:#0b0f17;border:1px solid #33415a;color:var(--paper);border-radius:4px;padding:4px 6px;font-size:12px}
  #settingsDrawer select{background:#0b0f17;border:1px solid #33415a;color:var(--paper);border-radius:4px;padding:4px 6px;font-size:12px}
  #selPreset{background:#0b0f17;border:1px solid #33415a;color:var(--paper);border-radius:5px;padding:5px 7px;font-size:12px;max-width:150px}
  #evtPane{max-height:26%;border-top:1px solid #05070b}
  #mediaPane{border-top:1px solid #05070b;max-height:30%}
  #autoPane{border-top:1px solid #05070b;max-height:38%}
  .arow{display:flex;align-items:center;gap:6px;padding:3px 2px;font-size:12px}
  .arow select{flex:1;min-width:0;background:#0b0f17;border:1px solid #33415a;color:var(--paper);border-radius:4px;padding:4px 6px;font-size:11.5px}
  .arow input[type=range]{accent-color:var(--signal-bright)}
  .arow .vv{font-family:var(--font-mono);min-width:38px;text-align:right;color:#9fb0c8}
  .arule{display:flex;align-items:center;gap:6px;font-size:11.5px;padding:3px 2px;color:#c6d0e2}
  .arule .tag{font-family:var(--font-mono);font-size:10.5px;background:#1d2639;border:1px solid var(--line-strong);border-radius:4px;padding:2px 6px}
  .arule .tag.m{background:#5b1c24;border-color:#8a2c3a;color:#ff9aa8}
  .arule .tag.u{background:#0d5a32;border-color:#2c8a50;color:#7ee2a8}
  .arule button{font-size:10.5px;padding:2px 8px;margin-left:auto}
  .mrow{display:flex;align-items:center;gap:5px;padding:4px 2px;font-size:12px}
  .mrow .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .mrow .st{font-family:var(--font-mono);font-size:10.5px;color:var(--mute);white-space:nowrap}
  .mrow .st.playing{color:#7ee2a8}
  .mrow button{font-size:11px;padding:3px 8px}
  #evtLog{font-family:var(--font-mono);font-size:11px;line-height:1.65;color:#9fb0c8}
  #evtLog .t{color:#5c6b84;margin-right:6px}
  #evtLog .warn{color:var(--amber)}
  #evtLog .err{color:#ff8f9d}
  #evtLog .ok{color:#7ee2a8}
  #filtEdit{margin-top:6px;border-top:1px solid var(--line);padding-top:6px;display:none}
  #filtEdit.is-on{display:block}
  #filtEdit h4{font-size:12px;margin-bottom:6px;color:#ffd9dc}
  .frow{display:grid;grid-template-columns:1fr 90px 52px;gap:6px;align-items:center;font-size:11.5px;padding:3px 0}
  .frow input[type=range]{width:100%;accent-color:var(--signal-bright)}
  .frow .vv{font-family:var(--font-mono);text-align:right;color:#9fb0c8}
  .frow input[type=text]{width:100%;background:#0b0f17;border:1px solid #33415a;color:var(--paper);border-radius:4px;padding:3px 6px;font-size:11.5px}
  #spark{background:#05070b;border:1px solid var(--line);border-radius:4px}
  /* ---- toasts (non-blocking errors), preview bar inputs, studio box ---- */
  #toasts{position:fixed;right:14px;bottom:44px;z-index:99;display:flex;flex-direction:column;gap:8px;max-width:340px}
  .toast{background:#141b2a;border:1px solid var(--line-strong);border-left:4px solid var(--sky,#38bdf8);border-radius:6px;padding:9px 13px;font-size:12.5px;box-shadow:0 10px 30px rgba(0,0,0,.6);animation:toastIn .25s var(--ease)}
  .toast.ok{border-left-color:var(--ok)}
  .toast.warn{border-left-color:var(--amber)}
  .toast.err{border-left-color:var(--signal-bright)}
  @keyframes toastIn{from{opacity:0;transform:translateX(24px)}to{opacity:1;transform:none}}
  #previewBar input[type=text]{background:#0b0f17;border:1px solid #33415a;color:var(--paper);border-radius:4px;padding:4px 8px;font-size:12px;width:200px}
  #previewBar button{font-size:11.5px;padding:4px 10px}
  #studioBox{margin-top:6px;padding-top:6px;border-top:1px solid var(--line)}

  /* ---- Operator dashboard layout: compact, task-first, not an OBS clone ---- */
  :root{
    --dash-bg:#0e1118;
    --dash-panel:#171d28;
    --dash-panel-2:#1d2533;
    --dash-line:#2c3547;
    --dash-soft:#111722;
    --dash-text:#f3f6fb;
    --dash-muted:#9ba8bc;
  }
  html,body{background:var(--dash-bg)}
  body{height:100vh;overflow:hidden;background:linear-gradient(180deg,#111722 0%,#0b0f16 100%)}
  header{
    min-height:48px;
    padding:8px 16px;
    gap:8px;
    background:#151b26;
    border-bottom:1px solid var(--dash-line);
    box-shadow:none;
  }
  header .brand{font-family:var(--font-ui);font-size:13px;letter-spacing:.16em}
  header input,header select,#selPreset{
    height:30px;
    border-radius:4px;
    border-color:var(--dash-line);
    background:#0b1018;
  }
  button{
    min-height:30px;
    border-radius:4px;
    border-color:#44516a;
    background:#293348;
    box-shadow:none;
  }
  button:hover{background:#35425b;box-shadow:none}
  #btnConn{min-width:94px}
  #livePill{border-radius:4px;box-shadow:none}
  #settingsDrawer{
    background:#111722;
    border-bottom:1px solid var(--dash-line);
    padding:10px 16px;
  }

  #layout{
    flex:1;
    display:grid;
    grid-template-columns:minmax(300px,360px) minmax(0,1fr);
    gap:12px;
    padding:12px;
    background:var(--dash-bg);
    min-height:0;
  }
  #left,#center{
    background:transparent;
    min-height:0;
    min-width:0;
  }
  #left{
    display:grid;
    grid-template-rows:minmax(120px,.9fr) minmax(120px,.75fr) auto minmax(180px,1.15fr) minmax(100px,.8fr);
    gap:12px;
  }
  #center{
    display:grid;
    grid-template-columns:minmax(300px,1fr) minmax(320px,380px);
    grid-template-rows:auto minmax(260px,1fr) auto;
    grid-template-areas:
      "monitor controls"
      "mixer controls"
      "trans controls";
    gap:12px;
  }
  .pane{
    background:var(--dash-panel);
    border:1px solid var(--dash-line);
    border-radius:8px;
    overflow:hidden;
  }
  .pane > h3{
    background:var(--dash-panel-2);
    border-bottom:1px solid var(--dash-line);
    color:#f7d5da;
    font-family:var(--font-ui);
    font-size:12px;
    letter-spacing:.12em;
    text-transform:uppercase;
    padding:8px 10px;
  }
  .pane .body{padding:10px}
  #srcPane{display:flex;max-height:none;border-top:0}
  #outPane,#mediaPane,#autoPane,#evtPane{max-height:none;border-top:0}

  #previewWrap{
    grid-area:monitor;
    justify-self:center;
    align-self:start;
    width:300px;
    height:188px;
    min-height:188px;
    max-height:188px;
    flex:none;
    background:#05070b;
    border:1px solid var(--dash-line);
    border-radius:8px 8px 0 0;
    margin:0;
  }
  #preview{
    width:256px;
    height:144px;
    image-rendering:auto;
  }
  #previewWrap.is-live #preview{box-shadow:0 0 0 1px rgba(255,41,61,.65)}
  #standbyPv{border-radius:8px 8px 0 0;background:#05070b}
  #standbyPv .mark{width:42px;height:42px;margin-bottom:8px;border-radius:8px;font-size:16px;box-shadow:none}
  #standbyPv h1{font-size:22px;letter-spacing:.12em}
  #standbyPv p{font-size:10px}
  #previewWrap.has-frame #standbyPv.is-on{top:8px;padding:5px 10px}

  #previewBar{
    grid-area:monitor;
    align-self:start;
    justify-self:center;
    margin-top:188px;
    width:300px;
    min-height:52px;
    padding:8px;
    flex-wrap:wrap;
    gap:6px;
    background:var(--dash-panel);
    border:1px solid var(--dash-line);
    border-top:0;
    border-radius:0 0 8px 8px;
  }
  #previewBar > span:first-child{flex:1 0 100%;color:var(--dash-text);font-weight:700}
  #previewBar #mediaInfo{display:none}
  #previewBar input[type=text]{flex:1;width:auto;min-width:0}
  #previewBar span[style]{display:none}

  #dockRow{
    display:contents;
  }
  #dockRow .pane{background:var(--dash-panel)}
  #dockRow .pane:nth-child(1){grid-area:mixer}
  #dockRow .pane:nth-child(2){grid-area:trans}
  #dockRow .pane:nth-child(3){
    grid-area:controls;
  }
  #dockRow .pane:nth-child(3) .body:first-of-type{max-height:42%;overflow:auto}
  #dockRow .pane:nth-child(3) .body:last-of-type{display:grid;gap:8px}

  #mixList{gap:8px;padding:4px;align-items:stretch}
  .chan{
    min-width:72px;
    background:var(--dash-soft);
    border:1px solid #242d3d;
    border-radius:6px;
    padding:8px 4px;
  }
  .faderwrap{height:170px}
  input[type=range].vfader{height:170px}

  .ctlbtn{
    min-height:42px;
    margin:0;
    font-family:var(--font-ui);
    font-size:13px;
    letter-spacing:.08em;
    text-transform:uppercase;
  }
  #btnStream,#btnRecord{
    min-height:48px;
    font-size:14px;
  }
  #btnStream.go,#btnRecord.go{background:#6b1220;border-color:#b42d42}
  #btnStream:not(.go){background:#11633c;border-color:#248451}
  #btnRecord:not(.go){background:#28344c}

  .scenerow{
    padding:9px 10px;
    border:1px solid transparent;
    border-radius:6px;
    margin-bottom:6px;
    background:#111722;
  }
  .scenerow.on{
    background:#103a2a;
    border-color:#2c8a50;
    border-left-color:#2c8a50;
  }
  .tgt{
    border:1px solid #242d3d;
    border-radius:6px;
    margin-bottom:8px;
    padding:9px;
    background:#111722;
  }
  .tgt.live{background:#14281f;border-color:#26784c}
  .mrow,.arow,.arule{padding:5px 0}
  #evtLog{line-height:1.55}
  footer{
    min-height:34px;
    padding:7px 16px;
    background:#111722;
    border-top:1px solid var(--dash-line);
  }

  @media(max-width:1100px){
    body{overflow:auto;height:auto;min-height:100vh}
    #layout{grid-template-columns:1fr}
    #left{grid-template-rows:auto}
    #center{grid-template-columns:1fr;grid-template-areas:"monitor" "controls" "mixer" "trans"}
    #dockRow .pane:nth-child(1){grid-area:mixer}
    #dockRow .pane:nth-child(2){grid-area:trans}
    #dockRow .pane:nth-child(3){grid-area:controls}
  }
