/* Cyber Labs, operations board. A dark console in every site theme; mint is the only accent.
   Severity uses a muted functional scale, always paired with a shape and a text label. */
.cy-lab-ops{
 --o-bg:#070b1f;--o-panel:#0c1230;--o-panel2:#121a3e;--o-line:#26305e;--o-line2:#3d4a85;
 --o-ink:#eef1fb;--o-muted:#a8b2d4;--o-dim:#8d98c0;--o-accent:#4fd1a5;
 --o-crit:#ff9e9e;--o-high:#f2c46b;--o-med:#bcc7ea;--o-low:#97a6cf;
 --o-blocked:#4fd1a5;--o-detected:#a9b6d8;--o-triage:#f2c46b;
 --o-mono:ui-monospace,SFMono-Regular,"JetBrains Mono",Menlo,Consolas,monospace;
 color-scheme:dark;position:relative;margin-block:8px 36px;padding:24px;border:1px solid var(--o-line);border-radius:18px;
 background:radial-gradient(900px 340px at 85% -8%,rgba(79,209,165,.09),transparent 70%),var(--o-bg);color:var(--o-ink);box-sizing:border-box}
.cy-lab-ops *,.cy-lab-ops *::before,.cy-lab-ops *::after{box-sizing:border-box}
.cy-lab-ops h2,.cy-lab-ops h3,.cy-lab-ops h4{color:var(--o-ink)}
.cy-lab-ops a{color:var(--o-accent)}
.cy-lab-ops :focus-visible{outline:2px solid var(--o-accent);outline-offset:2px}
.ops-mono{font-family:var(--o-mono)}
.ops-vh{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* head */
.ops-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px 28px;margin:0 0 18px}
.ops-head-text{flex:1 1 420px;min-width:0}
.ops-head h2{margin:.2em 0 .35em;font-size:clamp(1.35rem,1.1rem + 1vw,1.75rem)}
.ops-sim{display:inline-flex;align-items:center;gap:8px;margin:0;padding:4px 12px;border:1px solid rgba(79,209,165,.45);border-radius:999px;background:rgba(79,209,165,.1);color:var(--o-accent);font:600 .8rem/1.4 var(--o-mono)}
.ops-sim-dot{width:8px;height:8px;border-radius:50%;background:var(--o-accent);box-shadow:0 0 0 3px rgba(79,209,165,.2)}
.ops-intro{max-width:72ch;margin:0;color:var(--o-muted);line-height:1.65}
.ops-clock{display:grid;gap:2px;margin:0;padding:10px 14px;border:1px solid var(--o-line);border-radius:12px;background:var(--o-panel);min-width:200px}
.ops-clock>span:first-child{color:var(--o-muted);font-size:.78rem}
.ops-clock strong{font:600 1.6rem/1.15 var(--o-mono);letter-spacing:.04em;font-variant-numeric:tabular-nums}
.ops-status{display:inline-flex;align-items:center;gap:6px;color:var(--o-muted);font-size:.8rem}
.ops-status::before{content:"";width:8px;height:8px;border-radius:50%;border:1.5px solid var(--o-muted)}
.ops-status.is-run{color:var(--o-accent)}
.ops-status.is-run::before{border-color:var(--o-accent);background:var(--o-accent);animation:ops-blink 1.6s ease-in-out infinite}
@keyframes ops-blink{50%{opacity:.35}}

/* toolbar */
.ops-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;margin:0 0 18px;padding:12px;border:1px solid var(--o-line);border-radius:14px;background:var(--o-panel)}
.ops-toolbar[hidden],.ops-noscript[hidden]{display:none}
.ops-noscript{margin:0 0 18px;color:var(--o-muted)}
.ops-seg{display:inline-flex;align-items:center;gap:4px;flex-wrap:wrap}
.ops-seg-label,.ops-scn label{margin-right:4px;color:var(--o-muted);font-size:.82rem}
.ops-scn{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;flex:1 1 360px;min-width:0}
.ops-scn select{flex:1 1 220px;min-width:0;max-width:100%;min-height:38px;padding:6px 10px;border:1px solid var(--o-line2);border-radius:9px;background:var(--o-panel2);color:var(--o-ink);font:inherit;font-size:.9rem}
.ops-btn{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:6px 12px;border:1px solid var(--o-line2);border-radius:9px;background:var(--o-panel2);color:var(--o-ink);font:inherit;font-size:.88rem;font-weight:600;line-height:1.2;cursor:pointer;transition:border-color .15s,background-color .15s}
.ops-btn:hover{border-color:var(--o-accent)}
.ops-btn[aria-pressed=true]{border-color:var(--o-accent);background:rgba(79,209,165,.16);color:var(--o-accent)}
.ops-btn-main{min-width:118px}
.ops-btn-accent{border-color:var(--o-accent);background:var(--o-accent);color:#06122a}
.ops-btn-accent:hover{background:#6fe0b9}
.ops-btn-accent.is-stop{background:transparent;color:var(--o-accent)}
.ops-btn-ghost{min-height:32px;padding:4px 10px;background:transparent}
.ops-btn-small{min-height:30px;padding:3px 10px;font-size:.8rem}

/* indicators */
.ops-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,150px),1fr));gap:10px;margin:0 0 18px;padding:0;list-style:none}
.ops-kpi{position:relative;display:flex;flex-direction:column;gap:3px;min-width:0;padding:12px 14px;border:1px solid var(--o-line);border-radius:12px;background:var(--o-panel)}
.ops-kpi-label{color:var(--o-muted);font-size:.8rem;line-height:1.3}
.ops-kpi-value{font:600 1.45rem/1.15 var(--o-mono);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.ops-kpi-hint{color:var(--o-dim);font-size:.74rem;line-height:1.35}
.ops-kpi-mttd .ops-kpi-value,.ops-kpi-mttr .ops-kpi-value{font-size:1.15rem;line-height:1.5;white-space:nowrap}
.ops-kpi-blocked .ops-kpi-value{color:var(--o-accent)}
.ops-kpi-open.is-warn{border-color:rgba(242,196,107,.6)}
.ops-kpi-open.is-warn .ops-kpi-value{color:var(--o-high)}
.ops-spark{display:block;width:100%;height:30px;margin-top:4px;overflow:visible}
.ops-spark-line{fill:none;stroke:var(--o-accent);stroke-width:1.6}
.ops-spark-area{fill:rgba(79,209,165,.14)}

/* cards and grid */
.ops-card{min-width:0;padding:16px;border:1px solid var(--o-line);border-radius:14px;background:var(--o-panel)}
.ops-card-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 14px;margin:0 0 10px}
.ops-card h3{margin:0;font-size:1.02rem}
.ops-card h4{margin:14px 0 6px;color:var(--o-muted);font:600 .74rem/1.3 var(--o-mono);letter-spacing:.1em;text-transform:uppercase}
.ops-main{margin:0 0 14px}
.ops-mapwrap{position:relative}
.ops-mapwrap .ops-node{margin-top:12px;background:var(--o-panel2)}
@media (min-width:1021px){.ops-mapwrap.has-node{padding-right:376px}.ops-mapwrap.has-node .ops-node{position:absolute;top:0;right:0;bottom:0;width:362px;margin:0;overflow:auto}}
.ops-side{display:grid;gap:14px;min-width:0}
.ops-lower{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:14px;margin:0 0 14px;align-items:start}
.ops-notes{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:14px;align-items:start}
.ops-breakdowns{margin:0 0 14px}
@media (max-width:1020px){.ops-lower,.ops-notes{grid-template-columns:minmax(0,1fr)}}

/* map */
.ops-help{margin:0 0 8px;color:var(--o-muted);font-size:.85rem}
.ops-legend{display:flex;flex-wrap:wrap;gap:4px 14px;margin:0;padding:0;list-style:none;color:var(--o-muted);font-size:.78rem}
.ops-legend li{display:inline-flex;align-items:center;gap:6px}
.ops-lg{display:inline-block;flex:none;width:12px;height:12px;border-radius:50%}
.ops-lg-flow{width:7px;height:7px;background:var(--o-muted)}
.ops-lg-blocked{background:var(--o-blocked)}
.ops-lg-detected{background:var(--o-detected)}
.ops-lg-triage{background:var(--o-triage)}
.ops-lg-path{width:18px;height:0;border-radius:0;border-top:2px dashed var(--o-accent)}
.ops-map{position:relative;width:100%;min-height:200px;border-radius:12px;background:var(--o-bg);border:1px solid var(--o-line)}
.ops-svg{display:block;width:100%;height:auto}
.ops-zone{fill:rgba(255,255,255,.015);stroke:var(--o-line);stroke-dasharray:4 5}
.ops-zone-dmz,.ops-zone-edge{fill:rgba(79,209,165,.025)}
.ops-zone-label{fill:var(--o-dim);font:600 12px var(--o-mono);letter-spacing:.08em;text-transform:uppercase;paint-order:stroke;stroke:var(--o-bg);stroke-width:5px;stroke-linejoin:round}
.ops-svg-tall .ops-zone-label{font-size:12.5px}
.ops-link{stroke:var(--o-line2);stroke-width:2}
.ops-link.is-path{stroke:var(--o-accent);stroke-dasharray:7 6;stroke-width:2.4;animation:ops-dash 1.2s linear infinite}
@keyframes ops-dash{to{stroke-dashoffset:-26}}
.ops-link.is-lit-blocked{stroke:var(--o-blocked);stroke-width:3.2}
.ops-link.is-lit-detected{stroke:var(--o-detected);stroke-width:3.2}
.ops-link.is-lit-triage{stroke:var(--o-triage);stroke-width:3.2}
.ops-pk{stroke:var(--o-bg);stroke-width:1.5}
.ops-pk-flow{fill:#7d89b5;stroke:none;opacity:.75}
.ops-pk-blocked{fill:var(--o-blocked)}
.ops-pk-detected{fill:var(--o-detected)}
.ops-pk-triage{fill:var(--o-triage)}
.ops-x path{stroke:var(--o-blocked);stroke-width:3;stroke-linecap:round;animation:ops-xfade .9s ease-out forwards}
@keyframes ops-xfade{from{opacity:1;transform:scale(.6)}to{opacity:0;transform:scale(1.6)}}
.ops-nd{cursor:pointer;outline:none}
.ops-nd-body{fill:var(--o-panel2);stroke:var(--o-line2);stroke-width:2;transition:stroke .2s,fill .2s}
.ops-nd-icon{fill:none;stroke:var(--o-ink);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.ops-nd-label{fill:var(--o-ink);font:600 15px Inter,ui-sans-serif,system-ui,sans-serif;paint-order:stroke;stroke:var(--o-bg);stroke-width:4px;stroke-linejoin:round}
.ops-svg-tall .ops-nd-label{font-size:14px}
.ops-nd-pulse{fill:none;stroke:transparent;stroke-width:3}
.ops-nd:hover .ops-nd-body{stroke:var(--o-accent)}
.ops-nd:focus-visible .ops-nd-body,.ops-nd.is-selected .ops-nd-body{stroke:var(--o-accent);stroke-width:3;fill:#14304a}
.ops-nd:focus-visible .ops-nd-pulse{stroke:var(--o-accent);stroke-dasharray:3 4}
.ops-nd-badge{opacity:0}
.ops-nd-badge.is-on{opacity:1}
.ops-nd-badge circle{fill:var(--o-triage);stroke:var(--o-bg);stroke-width:2}
.ops-nd-badge text{fill:#1b1300;font:700 11px var(--o-mono)}
.ops-nd.is-hit-blocked .ops-nd-pulse{stroke:var(--o-blocked);animation:ops-pulse 1.4s ease-out}
.ops-nd.is-hit-detected .ops-nd-pulse{stroke:var(--o-detected);animation:ops-pulse 1.4s ease-out}
.ops-nd.is-hit-triage .ops-nd-pulse{stroke:var(--o-triage);animation:ops-pulse 1.4s ease-out}
.ops-nd.is-hit-triage .ops-nd-body{stroke:var(--o-triage)}
@keyframes ops-pulse{from{opacity:1;stroke-width:5}to{opacity:0;stroke-width:1}}
.ops-nd-pulse{transform-box:fill-box;transform-origin:center}

/* node panel */
.ops-node:focus{outline:none}
.ops-node:focus-visible{outline:2px solid var(--o-accent)}
.ops-node[hidden]{display:none}
.ops-node-meta{display:flex;flex-wrap:wrap;gap:4px 14px;margin:0 0 8px;color:var(--o-muted);font-size:.82rem}
.ops-node-meta span:last-child{color:var(--o-high)}
.ops-node-dl{display:grid;grid-template-columns:auto 1fr;gap:6px 12px;margin:0;font-size:.88rem;line-height:1.55}
.ops-node-dl dt{color:var(--o-muted)}
.ops-node-dl dd{margin:0;min-width:0;overflow-wrap:anywhere}
.ops-node-controls{margin:0;padding:0 0 0 18px;font-size:.88rem;line-height:1.55}
.ops-node-controls li::marker{color:var(--o-accent)}
.ops-node-recent{display:grid;gap:6px;margin:0;padding:0;list-style:none;font-size:.82rem}
.ops-node-recent li{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;padding:6px 8px;border:1px solid var(--o-line);border-radius:8px}
.ops-node-none{color:var(--o-muted);border-style:dashed!important}

/* severity + outcome tags */
.ops-sevtag{display:inline-flex;align-items:center;gap:6px;font-size:.78rem;font-weight:600;white-space:nowrap}
.ops-sevmark{display:inline-block;flex:none;width:10px;height:10px;background:currentColor}
.ops-sev-critical{--sev:var(--o-crit)}
.ops-sev-high{--sev:var(--o-high)}
.ops-sev-medium{--sev:var(--o-med)}
.ops-sev-low{--sev:var(--o-low)}
.ops-sevtag.ops-sev-critical,.ops-chip.ops-sev-critical .ops-sevmark{color:var(--o-crit)}
.ops-sevtag.ops-sev-high,.ops-chip.ops-sev-high .ops-sevmark{color:var(--o-high)}
.ops-sevtag.ops-sev-medium,.ops-chip.ops-sev-medium .ops-sevmark{color:var(--o-med)}
.ops-sevtag.ops-sev-low,.ops-chip.ops-sev-low .ops-sevmark{color:var(--o-low)}
.ops-sev-critical .ops-sevmark{transform:rotate(45deg) scale(.9)}
.ops-sev-high .ops-sevmark{clip-path:polygon(50% 0,100% 100%,0 100%)}
.ops-sev-medium .ops-sevmark{border-radius:2px}
.ops-sev-low .ops-sevmark{border-radius:50%;background:transparent;border:2px solid currentColor}
.ops-outcome{display:inline-block;padding:1px 8px;border:1px solid currentColor;border-radius:999px;font-size:.74rem;font-weight:600;white-space:nowrap}
.ops-out-blocked{color:var(--o-blocked)}
.ops-out-detected{color:var(--o-detected)}
.ops-out-triage{color:var(--o-triage)}

/* scenario progress */
.ops-prog-count{color:var(--o-muted);font:600 .8rem var(--o-mono)}
.ops-prog-name{margin:0 0 8px;font-weight:600;color:var(--o-accent)}
.ops-prog-name:empty{display:none}
.ops-prog-idle{margin:0;color:var(--o-muted);font-size:.88rem;line-height:1.6}
.ops-steps{display:grid;gap:8px;margin:0;padding:0;list-style:none;max-height:520px;overflow:auto}
.ops-steps:empty{display:none}
.ops-step{padding:8px 10px;border:1px solid var(--o-line);border-radius:10px;font-size:.86rem;line-height:1.55}
.ops-step p{margin:0}
.ops-step-head{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px}
.ops-step-n{display:inline-grid;place-items:center;flex:none;width:22px;height:22px;border:1px solid var(--o-line2);border-radius:50%;font:600 .74rem var(--o-mono)}
.ops-step-type{font-weight:600}
.ops-step-wait{color:var(--o-dim);font-size:.78rem}
.ops-step:not(.is-done){opacity:.75}
.ops-step:not(.is-done) .ops-step-type{color:var(--o-muted)}
.ops-step.is-done .ops-step-n{border-color:var(--o-accent);color:var(--o-accent)}
.ops-step.is-current{border-color:var(--o-accent);box-shadow:inset 3px 0 0 var(--o-accent)}
.ops-step-what{margin-top:6px!important}
.ops-step-do,.ops-row-do{margin-top:4px!important;color:var(--o-muted)}
.ops-step-do strong,.ops-row-do strong{color:var(--o-accent)}
.ops-prog-summary{margin:10px 0 0;padding:10px 12px;border:1px solid rgba(79,209,165,.45);border-radius:10px;background:rgba(79,209,165,.08);font-size:.88rem;line-height:1.55}
.ops-prog-summary[hidden]{display:none}
.ops-prog-summary strong{color:var(--o-accent)}

/* feed */
.ops-filters{display:flex;flex-wrap:wrap;gap:6px}
.ops-chip{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:3px 11px;border:1px solid var(--o-line2);border-radius:999px;background:transparent;color:var(--o-ink);font:inherit;font-size:.8rem;cursor:pointer}
.ops-chip:hover{border-color:var(--o-accent)}
.ops-chip[aria-pressed=true]{border-color:var(--o-accent);background:rgba(79,209,165,.14)}
.ops-feed{display:grid;gap:0;margin:0;padding:0;list-style:none;max-height:640px;overflow:auto;border:1px solid var(--o-line);border-radius:10px;background:var(--o-bg)}
.ops-row{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;gap:4px 12px;align-items:start;padding:9px 12px;border-bottom:1px solid var(--o-line);border-left:3px solid var(--sev,var(--o-line))}
.ops-row:last-child{border-bottom:0}
.ops-row.is-scn{background:rgba(79,209,165,.06)}
.ops-row p{margin:0}
.ops-row-time{color:var(--o-muted);font-size:.78rem;padding-top:2px}
.ops-row-body{min-width:0;font-size:.86rem;line-height:1.5}
.ops-row-title{font-weight:600}
.ops-row-title:focus{outline:none}
.ops-row-tag{display:inline-block;padding:0 7px;border-radius:999px;background:rgba(79,209,165,.18);color:var(--o-accent);font-size:.7rem;font-weight:700;vertical-align:1px}
.ops-row-meta{color:var(--o-muted);font-size:.76rem;overflow-wrap:anywhere}
.ops-row-what{margin-top:4px!important}
.ops-cc{text-decoration:none;border-bottom:1px dotted var(--o-dim);cursor:help}
.ops-row-side{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.ops-row-closed{color:var(--o-muted);font-size:.74rem}
.ops-feed-empty{margin:10px 0 0;color:var(--o-muted);font-size:.88rem}
.ops-feed-empty[hidden]{display:none}
@media (max-width:640px){
 .ops-row{grid-template-columns:auto minmax(0,1fr);}
 .ops-row-body{grid-column:1/-1}
 .ops-row-side{grid-column:1/-1;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap}
}

/* breakdowns */
.ops-bd-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:4px 22px}
.ops-bd h4{margin-top:6px}
.ops-donut-wrap{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px}
.ops-donut{width:120px;height:120px;flex:none}
.ops-donut-track{fill:none;stroke:var(--o-line);stroke-width:14}
.ops-donut-seg{fill:none;stroke-width:14}
.ops-donut-seg.ops-out-blocked{stroke:var(--o-blocked)}
.ops-donut-seg.ops-out-detected{stroke:var(--o-detected)}
.ops-donut-seg.ops-out-triage{stroke:var(--o-triage)}
.ops-donut-n{fill:var(--o-ink);font:600 22px var(--o-mono)}
.ops-donut-l{fill:var(--o-muted);font:12px Inter,ui-sans-serif,system-ui,sans-serif}
.ops-donut-legend{display:grid;gap:6px;margin:0;padding:0;list-style:none;font-size:.8rem;min-width:0}
.ops-donut-legend li{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px}
.ops-donut-legend strong{font:600 .78rem var(--o-mono);color:var(--o-muted)}
.ops-bars{display:grid;gap:6px;margin:0;padding:0;list-style:none;font-size:.8rem}
.ops-bars li{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(40px,1fr) 2.2em;align-items:center;gap:8px}
.ops-bar-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ops-bar-code{color:var(--o-dim);font:.7rem var(--o-mono)}
.ops-bar-track{height:8px;border-radius:4px;background:var(--o-line);overflow:hidden}
.ops-bar-fill{display:block;height:100%;width:var(--w,0);border-radius:4px;background:var(--o-accent);transition:width .4s}
.ops-bars-cc .ops-bar-fill{background:var(--o-detected)}
.ops-bar-n{text-align:right;font:600 .78rem var(--o-mono);color:var(--o-muted)}
.ops-bar-empty{color:var(--o-muted)}
.ops-bd-note{margin:6px 0 0;color:var(--o-dim);font-size:.76rem;line-height:1.45}

/* notes */
.ops-explain ol,.ops-how ul{margin:8px 0 0;padding-left:20px;color:var(--o-muted);line-height:1.65;font-size:.92rem}
.ops-explain li,.ops-how li{margin:0 0 8px}
.ops-explain li::marker{color:var(--o-accent);font-weight:700}
.ops-sources{margin:0;padding-left:18px;font-size:.84rem;line-height:1.55}
.ops-sources a{overflow-wrap:anywhere}

@media (max-width:700px){
 .cy-lab-ops{padding:14px 12px;border-radius:14px}
 .ops-card{padding:12px}
 .ops-clock{min-width:0;width:100%;grid-template-columns:1fr auto;align-items:center}
 .ops-clock>span:first-child{grid-column:1/-1}
 .ops-toolbar{padding:10px}
 .ops-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
 .ops-kpi-events{grid-column:1/-1}
 .ops-kpi-value{font-size:1.2rem}
}
@media (prefers-reduced-motion:reduce){
 .cy-lab-ops *{animation:none!important;transition:none!important}
 .ops-nd.is-hit-blocked .ops-nd-pulse,.ops-nd.is-hit-detected .ops-nd-pulse,.ops-nd.is-hit-triage .ops-nd-pulse{opacity:1;stroke-width:3}
}
@media print{.ops-toolbar,.ops-map,.ops-feedcard{display:none}}
