﻿/* ============================================================
   PROJECT OVERTURE â€” miralis fleet control
   Sibling application to Pyre Ops: same HUD DNA (JetBrains Mono
   + Roboto Flex, hairlines, scanlines, dark #0a0c10 base) but the
   accent family is EMERALD PHOSPHOR, not fire orange. Switching
   between the two should feel like switching applications.
   All classes are ovt-* ; the single exception is .ops-link.ovt-door,
   which styles Overture's doorway inside the Pyre rail.
   ============================================================ */

/* ------------------------------------------------------------
   boot + fake 404 (deliberately neutral: don't leak the surface)
   ------------------------------------------------------------ */
.ovt-boot {
    position: fixed; inset: 0; background: #0a0c10;
    display: flex; align-items: center; justify-content: center; z-index: 9999;
}
.ovt-boot-frame { display: flex; flex-direction: column; align-items: center; gap: 1.4rem; }
.ovt-boot-mark { width: 80px; height: 80px; }
.ovt-boot-text {
    margin: 0; font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.78rem; font-weight: 700; letter-spacing: 0.32em;
    text-transform: uppercase; color: #34D399;
}

.ovt-404 {
    min-height: 60vh; display: flex; flex-direction: column;
    align-items: center; justify-content: center;
    background: #0a0c10; color: rgba(240, 244, 248, 0.7);
    font-family: 'JetBrains Mono', ui-monospace, monospace;
}
.ovt-404 h1 { font-size: 6rem; margin: 0; color: rgba(240, 244, 248, 0.85); letter-spacing: 0.15em; }
.ovt-404 a { color: rgba(240, 244, 248, 0.6); margin-top: 1.5rem; text-decoration: none; }
.ovt-404 a:hover { color: rgba(240, 244, 248, 0.9); }

/* ------------------------------------------------------------
   shell
   ------------------------------------------------------------ */
.ovt-shell {
    --ovt-bg: #0a0c10;
    --ovt-bg-rail: #080b0e;
    --ovt-bg-deeper: #06080a;
    --ovt-bg-panel: #0d1216;
    /* neutral text like Pyre: green is identity/state, not body copy */
    --ovt-fg: #E1E3E8;
    --ovt-fg-muted: rgba(225, 227, 232, 0.7);
    --ovt-fg-dim: rgba(225, 227, 232, 0.45);
    --ovt-green: #10B981;
    --ovt-green-soft: #34D399;
    --ovt-amber: #FBBF24;
    --ovt-red: #F87171;
    --ovt-cyan: #67E8F9;
    --ovt-violet: #C4B5FD;
    --ovt-hairline: rgba(16, 185, 129, 0.14);
    --ovt-hairline-strong: rgba(16, 185, 129, 0.34);
    --ovt-glow: rgba(16, 185, 129, 0.5);
    --ovt-rail-w: 280px;

    display: grid;
    grid-template-columns: var(--ovt-rail-w) 1fr;
    min-height: 100vh;
    background: var(--ovt-bg);
    color: var(--ovt-fg);
    color-scheme: dark;
}

/* shared accessibility: every interactive ovt control gets the green focus ring */
.ovt-shell a:focus-visible,
.ovt-shell button:focus-visible,
.ovt-shell input:focus-visible,
.ovt-shell select:focus-visible,
.ovt-shell textarea:focus-visible,
.ovt-404 a:focus-visible {
    outline: 2px solid rgba(52, 211, 153, 0.85);
    outline-offset: 2px;
    border-radius: 3px;
}

/* ------------------------------------------------------------
   rail â€” slides in from the left when the app mounts
   ------------------------------------------------------------ */
.ovt-rail {
    position: sticky; top: 0; width: var(--ovt-rail-w); height: 100vh;
    background: var(--ovt-bg-rail);
    border-right: 1px solid var(--ovt-hairline);
    display: flex; flex-direction: column;
    overflow: hidden; isolation: isolate;
    animation: ovtRailIn 320ms cubic-bezier(0.22, 1, 0.36, 1) both;
}
@keyframes ovtRailIn {
    from { transform: translateX(-100%); opacity: 0.4; }
    to   { transform: translateX(0); opacity: 1; }
}

.ovt-rail-atmos { position: absolute; inset: 0; z-index: 0; pointer-events: none; }
.ovt-rail-scan {
    position: absolute; left: 0; right: 0; height: 80px;
    background: linear-gradient(180deg, transparent 0%, rgba(16, 185, 129, 0.035) 50%, transparent 100%);
    animation: ovtRailScan 14s linear infinite;
}
@keyframes ovtRailScan { 0% { top: -80px; } 100% { top: 100vh; } }
.ovt-rail-glow {
    position: absolute; top: -40%; left: -20%; width: 140%; height: 60%;
    background: radial-gradient(ellipse at top left, rgba(16, 185, 129, 0.14) 0%, transparent 70%);
    opacity: 0.6;
}
.ovt-rail > * { position: relative; z-index: 1; }

.ovt-rail-head {
    padding: clamp(0.85rem, 1.7vh, 1.35rem) 1.2rem clamp(0.7rem, 1.4vh, 1.1rem);
    border-bottom: 1px solid var(--ovt-hairline);
    position: relative;
}
.ovt-rail-head::after {
    content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px;
    background: linear-gradient(90deg, transparent, var(--ovt-green), transparent);
    opacity: 0.45;
}
.ovt-rail-logo { display: flex; align-items: center; gap: 0.9rem; text-decoration: none; color: inherit; }
.ovt-rail-mark {
    width: clamp(38px, 5vh, 48px); height: clamp(38px, 5vh, 48px); flex-shrink: 0;
    filter: drop-shadow(0 0 14px var(--ovt-glow));
}
.ovt-rail-wordmark { display: flex; flex-direction: column; gap: 0.2rem; line-height: 1; }
.ovt-rail-brand {
    font-family: 'Roboto Flex', sans-serif; font-size: 1.12rem; font-weight: 800;
    letter-spacing: 0.22em; color: var(--ovt-fg);
    font-variation-settings: 'wdth' 96;
}
.ovt-rail-sub {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.56rem; font-weight: 700; letter-spacing: 0.24em;
    text-transform: uppercase; color: var(--ovt-green-soft); opacity: 0.95;
}

.ovt-rail-nav {
    flex: 1; overflow-y: auto; overflow-x: hidden;
    padding: clamp(0.4rem, 1.05vh, 1.05rem) 0.7rem;
    scrollbar-width: thin; scrollbar-color: rgba(16, 185, 129, 0.22) transparent;
}
.ovt-rail-nav::-webkit-scrollbar { width: 4px; }
.ovt-rail-nav::-webkit-scrollbar-thumb { background: rgba(16, 185, 129, 0.22); border-radius: 2px; }

.ovt-rail-section {
    margin: clamp(0.5rem, 1.4vh, 1.1rem) 0 clamp(0.2rem, 0.6vh, 0.5rem);
    padding: 0 0.55rem; display: flex; align-items: baseline; gap: 0.55rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: clamp(0.55rem, 0.85vh, 0.66rem); letter-spacing: 0.22em;
    text-transform: uppercase; color: var(--ovt-fg-dim);
}
.ovt-rail-section:first-child { margin-top: clamp(0.15rem, 0.5vh, 0.45rem); }
.ovt-rail-section .num { color: var(--ovt-green); font-weight: 700; }
.ovt-rail-section .lbl { color: var(--ovt-fg-muted); font-weight: 600; }

.ovt-link {
    display: flex; align-items: center; gap: 0.7rem;
    padding: clamp(0.3rem, 0.85vh, 0.6rem) 0.65rem;
    margin-bottom: clamp(0.04rem, 0.2vh, 0.18rem);
    border-left: 2px solid transparent; border-radius: 0 3px 3px 0;
    text-decoration: none; color: var(--ovt-fg-muted);
    transition: background 0.18s ease, color 0.18s ease, border-left-color 0.18s ease;
}
.ovt-link:hover {
    background: rgba(16, 185, 129, 0.05); color: var(--ovt-fg);
    border-left-color: var(--ovt-hairline-strong);
}
.ovt-link:hover .ovt-link-glyph { color: var(--ovt-fg-muted); }
.ovt-link.is-active {
    background: linear-gradient(90deg, rgba(16, 185, 129, 0.12), rgba(16, 185, 129, 0.05));
    color: var(--ovt-fg);
    border-left-color: var(--ovt-green);
    box-shadow: inset 0 0 22px rgba(16, 185, 129, 0.05);
}
.ovt-link.is-active .ovt-link-glyph { color: var(--ovt-green); text-shadow: 0 0 10px rgba(16, 185, 129, 0.55); }
.ovt-link.is-active .ovt-link-name { color: var(--ovt-green-soft); }

.ovt-link-glyph {
    flex-shrink: 0; width: clamp(16px, 2.2vh, 22px); height: clamp(16px, 2.2vh, 22px);
    color: var(--ovt-fg-dim); display: inline-flex; align-items: center; justify-content: center;
    font-size: 1rem; transition: color 0.18s ease;
}
.ovt-link-text { display: flex; flex-direction: column; gap: 0.05rem; min-width: 0; flex: 1; }
.ovt-link-name {
    font-family: 'Roboto Flex', sans-serif; font-size: clamp(0.78rem, 1.35vh, 0.95rem);
    font-weight: 600; letter-spacing: -0.005em; line-height: 1.15; color: inherit;
}
.ovt-link-meta {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: clamp(0.5rem, 0.9vh, 0.66rem); letter-spacing: 0.06em;
    color: var(--ovt-fg-dim); line-height: 1.1;
}

/* the amber doorway BACK to Pyre â€” mirror of the green door in the Pyre rail */
.ovt-link.ovt-door-back .ovt-link-glyph { color: #FF8566; }
.ovt-link.ovt-door-back .ovt-link-name { color: rgba(255, 178, 153, 0.9); }
.ovt-link.ovt-door-back:hover {
    background: rgba(255, 42, 0, 0.06);
    border-left-color: rgba(255, 42, 0, 0.5);
}
.ovt-link.ovt-door-back:hover .ovt-link-glyph { color: #FF2A00; text-shadow: 0 0 10px rgba(255, 42, 0, 0.5); }

.ovt-rail-foot {
    padding: clamp(0.55rem, 1.15vh, 1.05rem) 0.85rem clamp(0.7rem, 1.4vh, 1.25rem);
    border-top: 1px solid var(--ovt-hairline);
}
.ovt-agents-chip {
    display: flex; align-items: center; gap: 0.55rem;
    padding: 0.5rem 0.7rem; background: var(--ovt-bg-deeper);
    border: 1px solid var(--ovt-hairline); border-radius: 3px;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.68rem; font-weight: 600; letter-spacing: 0.08em;
    color: var(--ovt-fg-muted);
}
.ovt-agents-dot {
    width: 7px; height: 7px; border-radius: 50%; background: var(--ovt-green); flex-shrink: 0;
    box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.25);
    animation: ovtDotPulse 1.8s ease-in-out infinite;
}
.ovt-agents-dot.is-dead { background: rgba(236, 253, 245, 0.25); box-shadow: none; animation: none; }
@keyframes ovtDotPulse {
    0%, 100% { box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.25); }
    50%      { box-shadow: 0 0 0 6px rgba(16, 185, 129, 0); }
}

.ovt-foot-row {
    display: flex; align-items: center; justify-content: space-between; gap: 0.5rem;
    margin-top: 0.45rem; padding: 0 0.15rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
}
.ovt-clock-chip {
    font-size: 0.6rem; font-weight: 600; letter-spacing: 0.1em;
    color: var(--ovt-fg-dim); font-variant-numeric: tabular-nums;
}
.ovt-ver-tag {
    font-size: 0.54rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
    color: rgba(52, 211, 153, 0.45);
}

/* ------------------------------------------------------------
   main content â€” fades / slides up on mount
   ------------------------------------------------------------ */
.ovt-main { position: relative; overflow-x: clip; min-height: 100vh; isolation: isolate; }
.ovt-atmos {
    position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden;
    background:
        radial-gradient(ellipse 55% 60% at 18% 15%, rgba(16, 185, 129, 0.06), transparent 70%),
        radial-gradient(ellipse 50% 55% at 84% 30%, rgba(52, 211, 153, 0.035), transparent 72%),
        radial-gradient(ellipse 60% 55% at 50% 95%, rgba(16, 185, 129, 0.03), transparent 70%);
}
.ovt-atmos-scan {
    position: absolute; left: 0; right: 0; height: 180px;
    background: linear-gradient(180deg, transparent 0%, rgba(52, 211, 153, 0.018) 50%, transparent 100%);
    animation: ovtMainScan 18s linear infinite;
}
@keyframes ovtMainScan { 0% { top: -200px; } 100% { top: 110vh; } }

.ovt-content {
    position: relative; z-index: 1; min-height: 100vh;
    padding: 1.7rem 2rem 2.2rem;
    animation: ovtContentIn 380ms cubic-bezier(0.22, 1, 0.36, 1) 90ms both;
}
@keyframes ovtContentIn {
    from { opacity: 0; transform: translateY(14px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* ------------------------------------------------------------
   page header
   ------------------------------------------------------------ */
.ovt-page-head {
    display: flex; align-items: flex-end; justify-content: space-between;
    gap: 1.5rem; flex-wrap: wrap; margin-bottom: 1.6rem;
}
.ovt-eyebrow {
    margin: 0 0 0.35rem; font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.68rem; font-weight: 700; letter-spacing: 0.26em;
    text-transform: uppercase; color: var(--ovt-green);
}
.ovt-title {
    margin: 0; font-family: 'Roboto Flex', sans-serif;
    font-size: clamp(1.6rem, 3.2vh, 2.2rem); font-weight: 800; letter-spacing: -0.01em;
    color: var(--ovt-fg); line-height: 1.05;
    font-variation-settings: 'wdth' 92;
}
.ovt-subtitle {
    margin: 0.35rem 0 0; font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.72rem; letter-spacing: 0.06em; color: var(--ovt-fg-dim);
}

.ovt-head-chips { display: flex; gap: 0.6rem; flex-wrap: wrap; justify-content: flex-end; }
.ovt-host-chip {
    display: flex; align-items: center; gap: 0.55rem;
    padding: 0.45rem 0.75rem; background: var(--ovt-bg-panel);
    border: 1px solid var(--ovt-hairline); border-radius: 3px;
    font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.66rem;
    letter-spacing: 0.04em; color: var(--ovt-fg-muted);
}
.ovt-host-chip .name { color: var(--ovt-fg); font-weight: 700; }
.ovt-host-chip .stat { color: var(--ovt-fg-dim); }
.ovt-host-dot {
    width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0;
    background: var(--ovt-green); box-shadow: 0 0 6px var(--ovt-glow);
}
.ovt-host-dot.is-offline { background: var(--ovt-red); box-shadow: 0 0 6px rgba(248, 113, 113, 0.5); }

/* ------------------------------------------------------------
   host sections + server cards
   ------------------------------------------------------------ */
.ovt-host { margin-bottom: 2rem; }
.ovt-host-head {
    display: flex; align-items: baseline; gap: 0.8rem; flex-wrap: wrap;
    padding-bottom: 0.55rem; margin-bottom: 0.9rem;
    border-bottom: 1px solid var(--ovt-hairline);
}
.ovt-host-name {
    margin: 0; display: flex; align-items: center; gap: 0.6rem;
    font-family: 'Roboto Flex', sans-serif; font-size: 1.05rem; font-weight: 800;
    letter-spacing: 0.04em; color: var(--ovt-fg);
}
.ovt-host-meta {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.64rem; letter-spacing: 0.05em; color: var(--ovt-fg-dim);
}
.ovt-host-offline {
    display: flex; align-items: center; gap: 0.7rem;
    padding: 0.85rem 1rem; background: rgba(248, 113, 113, 0.05);
    border: 1px solid rgba(248, 113, 113, 0.3); border-radius: 4px;
    font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.74rem;
    color: var(--ovt-fg-muted);
}
.ovt-host-offline .tag { color: var(--ovt-red); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
.ovt-host-offline .err { color: var(--ovt-fg-dim); overflow-wrap: anywhere; }

.ovt-server-grid {
    display: grid; gap: 0.9rem;
    grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
}

.ovt-server-card {
    position: relative; display: flex; flex-direction: column; gap: 0.7rem;
    padding: 0.95rem 1.05rem 0.9rem;
    background: linear-gradient(180deg, var(--ovt-bg-panel) 0%, var(--ovt-bg-deeper) 100%);
    border: 1px solid var(--ovt-hairline); border-radius: 5px;
    transition: border-color 0.22s ease, box-shadow 0.22s cubic-bezier(0.22, 1, 0.36, 1), transform 0.22s cubic-bezier(0.22, 1, 0.36, 1);
}
.ovt-server-card:hover {
    border-color: var(--ovt-hairline-strong);
    box-shadow: 0 8px 30px rgba(0, 0, 0, 0.45), 0 0 0 1px rgba(16, 185, 129, 0.1), 0 0 24px rgba(16, 185, 129, 0.05);
    transform: translateY(-2px);
}
.ovt-server-card.is-up:hover::before { opacity: 0.9; }
.ovt-server-card::before {
    content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px;
    border-radius: 5px 5px 0 0; background: transparent; transition: background 0.2s ease;
}
.ovt-server-card.is-up::before { background: linear-gradient(90deg, transparent, var(--ovt-green), transparent); opacity: 0.6; }
.ovt-server-card.is-crashloop::before { background: linear-gradient(90deg, transparent, var(--ovt-red), transparent); opacity: 0.7; }

.ovt-card-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.8rem; }
.ovt-card-name {
    margin: 0; font-family: 'Roboto Flex', sans-serif;
    font-size: 1rem; font-weight: 700; letter-spacing: 0.01em; color: var(--ovt-fg);
    line-height: 1.2;
}
.ovt-card-id {
    margin: 0.15rem 0 0; font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.62rem; letter-spacing: 0.06em; color: var(--ovt-fg-dim);
}

.ovt-card-chips { display: flex; column-gap: 0.4rem; row-gap: 0.35rem; flex-wrap: wrap; }
.ovt-chip {
    display: inline-flex; align-items: center;
    padding: 0.14rem 0.5rem; border-radius: 2px;
    border: 1px solid var(--ovt-hairline);
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.58rem; font-weight: 600; letter-spacing: 0.1em;
    text-transform: uppercase; color: var(--ovt-fg-muted);
    /* neutral by default: colored text only where state demands it */
    border-color: rgba(225, 227, 232, 0.14);
    background: rgba(225, 227, 232, 0.04);
}
.ovt-chip-realm { color: var(--ovt-fg); border-color: rgba(225, 227, 232, 0.22); }
.ovt-chip-dim { color: var(--ovt-fg-dim); }
.ovt-chip-mspt.is-good { color: var(--ovt-green-soft); }
.ovt-chip-mspt.is-warn { color: var(--ovt-amber); border-color: rgba(251, 191, 36, 0.4); }
.ovt-chip-mspt.is-bad { color: var(--ovt-red); border-color: rgba(248, 113, 113, 0.45); }

.ovt-card-facts {
    display: flex; gap: 1.1rem; flex-wrap: wrap;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.64rem; letter-spacing: 0.04em; color: var(--ovt-fg-muted);
}
.ovt-card-facts .k { color: var(--ovt-fg-dim); }
.ovt-card-facts .v { color: var(--ovt-fg); font-weight: 600; }

.ovt-card-exit {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.6rem; color: rgba(251, 191, 36, 0.7); letter-spacing: 0.03em;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.ovt-card-actions {
    display: flex; gap: 0.4rem; align-items: center; flex-wrap: wrap;
    padding-top: 0.55rem; border-top: 1px solid rgba(16, 185, 129, 0.08);
}

/* ------------------------------------------------------------
   state pills
   ------------------------------------------------------------ */
.ovt-pill {
    display: inline-flex; align-items: center; gap: 0.35rem; flex-shrink: 0;
    padding: 0.22rem 0.6rem; border-radius: 2px;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.6rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
}
.ovt-pill-up {
    color: #04120c; background: var(--ovt-green);
    box-shadow: 0 0 12px rgba(16, 185, 129, 0.35);
}
.ovt-pill-starting {
    /* cyan, not green: "starting" must never read as "already up" */
    color: #22D3EE; background: rgba(34, 211, 238, 0.1);
    border: 1px solid #22D3EE;
    animation: ovtPulseCyan 1.4s ease-in-out infinite;
}
.ovt-pill-stopped {
    color: rgba(236, 253, 245, 0.5); background: rgba(236, 253, 245, 0.06);
    border: 1px solid rgba(236, 253, 245, 0.14);
}
.ovt-pill-stopping {
    color: var(--ovt-amber); background: rgba(251, 191, 36, 0.08);
    border: 1px solid rgba(251, 191, 36, 0.5);
}
.ovt-pill-backoff {
    color: var(--ovt-amber); background: rgba(251, 191, 36, 0.08);
    border: 1px solid var(--ovt-amber);
    animation: ovtPulseAmber 1.9s ease-in-out infinite;
}
.ovt-pill-crashloop {
    color: var(--ovt-red); background: rgba(248, 113, 113, 0.1);
    border: 1px solid var(--ovt-red);
    animation: ovtPulseRed 1.3s ease-in-out infinite;
}
.ovt-pill-hung {
    color: var(--ovt-amber); background: transparent;
    border: 1px dashed rgba(251, 191, 36, 0.6);
}
.ovt-pill-unknown {
    color: rgba(236, 253, 245, 0.4); background: transparent;
    border: 1px solid rgba(236, 253, 245, 0.18);
}
@keyframes ovtPulseGreen {
    0%, 100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.3); }
    55%      { box-shadow: 0 0 0 4px rgba(16, 185, 129, 0); }
}
@keyframes ovtPulseCyan {
    0%, 100% { box-shadow: 0 0 0 0 rgba(34, 211, 238, 0.3); }
    55%      { box-shadow: 0 0 0 4px rgba(34, 211, 238, 0); }
}
@keyframes ovtPulseAmber {
    0%, 100% { box-shadow: 0 0 0 0 rgba(251, 191, 36, 0.25); }
    55%      { box-shadow: 0 0 0 4px rgba(251, 191, 36, 0); }
}
@keyframes ovtPulseRed {
    0%, 100% { box-shadow: 0 0 0 0 rgba(248, 113, 113, 0.38); }
    55%      { box-shadow: 0 0 0 5px rgba(248, 113, 113, 0); }
}

/* ------------------------------------------------------------
   buttons
   ------------------------------------------------------------ */
.ovt-btn {
    appearance: none; cursor: pointer;
    padding: 0.32rem 0.7rem; border-radius: 3px;
    background: transparent; border: 1px solid var(--ovt-hairline);
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.64rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;
    color: var(--ovt-fg-muted);
    transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease;
}
.ovt-btn:hover:not(:disabled) {
    border-color: var(--ovt-green); color: var(--ovt-green-soft);
    background: rgba(16, 185, 129, 0.06);
}
.ovt-btn:disabled { opacity: 0.35; cursor: default; }
.ovt-btn-danger:hover:not(:disabled) {
    border-color: var(--ovt-red); color: var(--ovt-red);
    background: rgba(248, 113, 113, 0.06);
}
.ovt-btn.is-armed {
    border-color: var(--ovt-amber); color: #120e02; background: var(--ovt-amber);
    box-shadow: 0 0 12px rgba(251, 191, 36, 0.35);
}
.ovt-btn-danger.is-armed {
    border-color: var(--ovt-red); color: #16090a; background: var(--ovt-red);
    box-shadow: 0 0 12px rgba(248, 113, 113, 0.4);
}
.ovt-btn-console {
    margin-left: auto; text-decoration: none; display: inline-flex; align-items: center; gap: 0.35rem;
    color: var(--ovt-green-soft); border-color: var(--ovt-hairline-strong);
}
.ovt-btn-console:hover { box-shadow: 0 0 10px rgba(16, 185, 129, 0.2); }

/* ------------------------------------------------------------
   empty state
   ------------------------------------------------------------ */
.ovt-empty {
    min-height: 40vh; display: flex; flex-direction: column;
    align-items: center; justify-content: center; gap: 0.6rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    color: var(--ovt-fg-dim); text-align: center;
}
.ovt-empty .glyph { font-size: 2rem; color: var(--ovt-hairline-strong); }
.ovt-empty .hint { font-size: 0.72rem; letter-spacing: 0.05em; }

/* ------------------------------------------------------------
   console page
   ------------------------------------------------------------ */
.ovt-console-page {
    display: flex; flex-direction: column; gap: 0.8rem;
    height: calc(100vh - 3.9rem); min-height: 480px;
}
.ovt-console-head {
    display: flex; align-items: center; gap: 0.9rem; flex-wrap: wrap;
}
.ovt-console-back {
    font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.68rem;
    letter-spacing: 0.08em; color: var(--ovt-fg-dim); text-decoration: none;
    padding: 0.3rem 0.55rem; border: 1px solid var(--ovt-hairline); border-radius: 3px;
    transition: color 0.15s ease, border-color 0.15s ease;
}
.ovt-console-back:hover { color: var(--ovt-green-soft); border-color: var(--ovt-green); }
.ovt-console-title {
    margin: 0; font-family: 'Roboto Flex', sans-serif;
    font-size: 1.15rem; font-weight: 800; color: var(--ovt-fg); letter-spacing: 0.01em;
}
.ovt-console-sub {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.62rem; letter-spacing: 0.06em; color: var(--ovt-fg-dim);
}
.ovt-console-actions { margin-left: auto; display: flex; gap: 0.4rem; align-items: center; }

.ovt-console-error {
    font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.66rem;
    color: var(--ovt-amber); letter-spacing: 0.04em;
    padding: 0.35rem 0.7rem; border: 1px solid rgba(251, 191, 36, 0.35);
    border-radius: 3px; background: rgba(251, 191, 36, 0.05);
}

.ovt-console {
    flex: 1; min-height: 0; display: flex; flex-direction: column;
    background: #050807;
    border: 1px solid var(--ovt-hairline); border-radius: 6px;
    overflow: hidden; position: relative; isolation: isolate;
    box-shadow: inset 0 0 60px rgba(16, 185, 129, 0.04), 0 6px 30px rgba(0, 0, 0, 0.45);
}
.ovt-console::after {
    /* faint phosphor scanlines over the glass */
    content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 2;
    background: repeating-linear-gradient(180deg, rgba(16, 185, 129, 0.01) 0px, rgba(16, 185, 129, 0.01) 1px, transparent 1px, transparent 3px);
}

.ovt-console-scroll {
    flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden;
    padding: 0.8rem 0.9rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.74rem; line-height: 1.45;
    scrollbar-width: thin; scrollbar-color: rgba(16, 185, 129, 0.35) rgba(5, 8, 7, 0.9);
}
.ovt-console-scroll::-webkit-scrollbar { width: 8px; }
.ovt-console-scroll::-webkit-scrollbar-track { background: rgba(5, 8, 7, 0.9); }
.ovt-console-scroll::-webkit-scrollbar-thumb {
    background: rgba(16, 185, 129, 0.3); border-radius: 4px;
    border: 2px solid #050807;
}
.ovt-console-scroll::-webkit-scrollbar-thumb:hover { background: rgba(16, 185, 129, 0.55); }

.ovt-line { display: flex; gap: 0.7rem; align-items: baseline; }
.ovt-line-seq {
    flex-shrink: 0; min-width: 3.4em; text-align: right;
    color: rgba(225, 227, 232, 0.22); font-size: 0.62rem; user-select: none;
    font-variant-numeric: tabular-nums;
}
.ovt-line-time {
    flex-shrink: 0; color: rgba(225, 227, 232, 0.35); font-size: 0.66rem;
    font-variant-numeric: tabular-nums;
}
.ovt-line-text {
    color: #E1E3E8; white-space: pre-wrap; overflow-wrap: anywhere; min-width: 0;
}
.ovt-line.is-stderr .ovt-line-text { color: var(--ovt-red); text-shadow: 0 0 7px rgba(248, 113, 113, 0.2); }
.ovt-line.is-system .ovt-line-text { color: rgba(103, 232, 249, 0.75); font-style: italic; text-shadow: 0 0 7px rgba(103, 232, 249, 0.15); }
.ovt-console-empty {
    padding: 1.4rem 0.4rem; color: rgba(225, 227, 232, 0.35);
    font-size: 0.7rem; letter-spacing: 0.05em;
}

.ovt-console-input {
    display: flex; align-items: center; gap: 0.6rem;
    padding: 0.55rem 0.8rem;
    border-top: 1px solid var(--ovt-hairline);
    background: rgba(6, 10, 8, 0.9); position: relative; z-index: 3;
}
.ovt-console-prompt {
    color: var(--ovt-green); font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-weight: 700; font-size: 0.85rem; user-select: none;
}
.ovt-console-input input {
    flex: 1; min-width: 0; background: transparent; border: none; outline: none;
    color: #E1E3E8; font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.78rem; caret-color: var(--ovt-green);
    caret-shape: block; /* real block caret where supported */
}
/* say/command mode selector sitting to the left of the input */
.ovt-cmd-mode {
    flex-shrink: 0; background: rgba(225, 227, 232, 0.05);
    border: 1px solid var(--ovt-hairline); border-radius: 3px;
    color: var(--ovt-fg-muted); font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.72rem; padding: 0.2rem 0.35rem; cursor: pointer; outline: none;
}
.ovt-cmd-mode:focus-visible { border-color: var(--ovt-green); color: #E1E3E8; }
.ovt-cmd-mode:disabled { opacity: 0.5; cursor: default; }
.ovt-console-input input::placeholder { color: rgba(225, 227, 232, 0.3); }
/* the prompt doubles as a blinking block cursor while the input is focused */
.ovt-console-input:focus-within .ovt-console-prompt {
    animation: ovtPromptBlink 1.06s steps(2, jump-none) infinite;
    text-shadow: 0 0 8px rgba(16, 185, 129, 0.5);
}
@keyframes ovtPromptBlink {
    0%   { opacity: 1; }
    100% { opacity: 0.2; }
}

/* connected/tailing indicator in the console header */
.ovt-tail-ind {
    display: inline-flex; align-items: center; gap: 0.4rem;
    padding: 0.24rem 0.55rem; border-radius: 3px;
    border: 1px solid var(--ovt-hairline); background: rgba(16, 185, 129, 0.04);
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.58rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--ovt-fg-dim);
}
.ovt-tail-ind .dot { width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0; }
.ovt-tail-ind.is-on { color: rgba(103, 232, 249, 0.8); }
.ovt-tail-ind.is-on .dot {
    /* cyan = in-motion/info */
    background: var(--ovt-cyan); box-shadow: 0 0 6px rgba(103, 232, 249, 0.5);
    animation: ovtDotPulse 1.8s ease-in-out infinite;
}
.ovt-tail-ind.is-err { color: var(--ovt-amber); border-color: rgba(251, 191, 36, 0.4); }
.ovt-tail-ind.is-err .dot { background: var(--ovt-amber); box-shadow: 0 0 6px rgba(251, 191, 36, 0.5); }

/* ------------------------------------------------------------
   the green doorway inside the PYRE rail (OpsLayout)
   ------------------------------------------------------------ */
.ops-link.ovt-door .ops-link-glyph {
    color: #10B981; text-shadow: 0 0 10px rgba(16, 185, 129, 0.55);
}
.ops-link.ovt-door .ops-link-name { color: #34D399; }
.ops-link.ovt-door .ops-link-meta { color: rgba(52, 211, 153, 0.55); }
.ops-link.ovt-door:hover {
    background: rgba(16, 185, 129, 0.07);
    border-left-color: #10B981;
}
.ops-link.ovt-door:hover .ops-link-glyph { text-shadow: 0 0 14px rgba(16, 185, 129, 0.8); }
.ops-link.ovt-door.is-active {
    background: rgba(16, 185, 129, 0.09);
    border-left-color: #10B981;
}
.ops-link.ovt-door.is-active .ops-link-glyph,
.ops-link.ovt-door.is-active .ops-link-name { color: #34D399; }

/* ------------------------------------------------------------
   misc
   ------------------------------------------------------------ */
@media (max-width: 1100px) {
    .ovt-shell { grid-template-columns: 240px 1fr; }
    .ovt-shell { --ovt-rail-w: 240px; }
}

@media (prefers-reduced-motion: reduce) {
    .ovt-rail, .ovt-content { animation: none !important; }
    .ovt-rail-scan, .ovt-atmos-scan { animation: none !important; }
    .ovt-pill-starting, .ovt-pill-backoff, .ovt-pill-crashloop, .ovt-agents-dot { animation: none !important; }
    .ovt-tail-ind .dot,
    .ovt-console-input:focus-within .ovt-console-prompt { animation: none !important; }
    .ovt-server-card, .ovt-server-card:hover { transition: none; transform: none; }
}

/* ------------------------------------------------------------
   star map â€” /ops/overture canvas fleet visualization
   (canvas draws the scene; these style the frame, the map/list
   toggle and the hover tooltip overlay)
   ------------------------------------------------------------ */
.ovt-head-right {
    display: flex; flex-direction: column; align-items: flex-end; gap: 0.6rem;
}

.ovt-view-toggle {
    display: inline-flex; border: 1px solid var(--ovt-hairline); border-radius: 3px;
    overflow: hidden; background: var(--ovt-bg-panel);
}
.ovt-view-toggle button {
    appearance: none; border: 0; background: transparent; cursor: pointer;
    padding: 0.34rem 0.9rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.62rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
    color: var(--ovt-fg-dim);
    transition: background 0.15s ease, color 0.15s ease;
}
.ovt-view-toggle button + button { border-left: 1px solid var(--ovt-hairline); }
.ovt-view-toggle button:hover { color: var(--ovt-fg); }
.ovt-view-toggle button.is-on {
    background: rgba(16, 185, 129, 0.12); color: var(--ovt-green-soft);
    text-shadow: 0 0 8px rgba(16, 185, 129, 0.4);
}

.ovt-starmap-wrap {
    /* fill the viewport below the header + host strip; never a short letterbox */
    position: relative; height: calc(100vh - 15rem); min-height: 560px;
    border: 1px solid var(--ovt-hairline); border-radius: 6px;
    overflow: hidden; isolation: isolate; background: #06080a;
    box-shadow: inset 0 0 90px rgba(16, 185, 129, 0.03), 0 6px 30px rgba(0, 0, 0, 0.45);
}
.ovt-starmap-wrap::after {
    /* phosphor scanlines over the glass, same treatment as the console */
    content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 2;
    background: repeating-linear-gradient(180deg, rgba(16, 185, 129, 0.008) 0px, rgba(16, 185, 129, 0.008) 1px, transparent 1px, transparent 3px);
}
.ovt-starmap-canvas {
    position: absolute; inset: 0; width: 100%; height: 100%;
    display: block; z-index: 1;
}

.ovt-map-tip {
    position: absolute; z-index: 3; pointer-events: none;
    min-width: 190px; max-width: 260px;
    padding: 0.6rem 0.75rem 0.65rem;
    background: rgba(8, 13, 11, 0.94);
    border: 1px solid var(--ovt-hairline-strong); border-radius: 4px;
    box-shadow: 0 8px 28px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(16, 185, 129, 0.06);
    transform: translate(-50%, -100%);
    opacity: 0; transition: opacity 0.05s ease;
    will-change: opacity;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
}
.ovt-map-tip.is-below { transform: translate(-50%, 0); }
.ovt-map-tip.is-show { opacity: 1; }
.ovt-map-tip .t-name {
    font-family: 'Roboto Flex', sans-serif; font-size: 0.85rem; font-weight: 700;
    color: var(--ovt-fg); line-height: 1.2;
}
.ovt-map-tip .t-id { font-size: 0.58rem; letter-spacing: 0.06em; color: var(--ovt-fg-dim); margin-top: 0.1rem; }
.ovt-map-tip .t-state {
    display: inline-block; margin-top: 0.4rem; padding: 0.12rem 0.45rem; border-radius: 2px;
    font-size: 0.56rem; font-weight: 700; letter-spacing: 0.14em;
}
.ovt-map-tip .t-state.is-up { color: #04120c; background: var(--ovt-green); }
.ovt-map-tip .t-state.is-starting { color: #22D3EE; border: 1px solid #22D3EE; }
.ovt-map-tip .t-state.is-stopped,
.ovt-map-tip .t-state.is-unknown { color: rgba(236, 253, 245, 0.5); border: 1px solid rgba(236, 253, 245, 0.16); }
.ovt-map-tip .t-state.is-stopping,
.ovt-map-tip .t-state.is-backoff { color: var(--ovt-amber); border: 1px solid rgba(251, 191, 36, 0.55); }
.ovt-map-tip .t-state.is-crashloop { color: var(--ovt-red); border: 1px solid var(--ovt-red); }
.ovt-map-tip .t-state.is-hung { color: #FB923C; border: 1px dashed rgba(251, 146, 60, 0.6); }
.ovt-map-tip .t-rows { margin-top: 0.5rem; display: flex; flex-direction: column; gap: 0.18rem; }
.ovt-map-tip .t-row { display: flex; justify-content: space-between; gap: 1rem; font-size: 0.62rem; letter-spacing: 0.04em; }
.ovt-map-tip .t-row .k { color: var(--ovt-fg-dim); }
.ovt-map-tip .t-row .v { color: var(--ovt-fg); font-weight: 600; }

@media (prefers-reduced-motion: reduce) {
    .ovt-map-tip { transition: none; }
}

/* legend overlay, bottom-left of the star map (markup lives in Fleet.razor) */
.ovt-map-legend {
    position: absolute; left: 0.8rem; bottom: 0.7rem; z-index: 3; pointer-events: none;
    display: flex; align-items: center; gap: 0.8rem; flex-wrap: wrap;
    padding: 0.38rem 0.65rem;
    background: rgba(8, 13, 11, 0.78);
    border: 1px solid var(--ovt-hairline); border-radius: 3px;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.56rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase;
    color: var(--ovt-fg-dim);
}
.ovt-map-legend .lg { display: inline-flex; align-items: center; gap: 0.32rem; }
.ovt-map-legend .lg-dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
.ovt-map-legend .lg-dot.is-up { background: var(--ovt-green); box-shadow: 0 0 5px rgba(16, 185, 129, 0.6); }
.ovt-map-legend .lg-dot.is-starting { background: #22D3EE; box-shadow: 0 0 5px rgba(34, 211, 238, 0.55); }
.ovt-map-legend .lg-dot.is-stopped { background: transparent; border: 1px solid rgba(236, 253, 245, 0.4); }
.ovt-map-legend .lg-dot.is-backoff { background: var(--ovt-amber); }
.ovt-map-legend .lg-dot.is-crashloop { background: var(--ovt-red); box-shadow: 0 0 5px rgba(248, 113, 113, 0.55); }
.ovt-map-legend .lg-dot.is-hung { background: #FB923C; }

/* ------------------------------------------------------------
   control-plane enrichment (players / tps / cluster / gd link)
   ------------------------------------------------------------ */
.ovt-chip-players {
    color: var(--ovt-green-soft); border-color: var(--ovt-hairline-strong);
    background: rgba(16, 185, 129, 0.1);
}
.ovt-chip-warn {
    color: var(--ovt-amber); border-color: rgba(251, 191, 36, 0.5);
    background: rgba(251, 191, 36, 0.06);
}
.ovt-card-gdnote {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.58rem; font-weight: 600; letter-spacing: 0.1em;
    text-transform: uppercase; color: rgba(251, 191, 36, 0.55);
}

/* ------------------------------------------------------------
   audit trail â€” /ops/overture/audit mono ledger
   ------------------------------------------------------------ */
.ovt-audit-filters { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
.ovt-audit-select,
.ovt-audit-search {
    background: var(--ovt-bg-panel);
    border: 1px solid var(--ovt-hairline); border-radius: 3px;
    padding: 0.38rem 0.6rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.66rem; letter-spacing: 0.05em;
    color: var(--ovt-fg);
    transition: border-color 0.15s ease;
}
.ovt-audit-select { cursor: pointer; }
.ovt-audit-select:hover,
.ovt-audit-search:hover { border-color: var(--ovt-hairline-strong); }
.ovt-audit-select:focus,
.ovt-audit-search:focus { border-color: rgba(196, 181, 253, 0.55); }
.ovt-audit-search { min-width: 12em; caret-color: var(--ovt-violet); }
.ovt-audit-search::placeholder { color: rgba(225, 227, 232, 0.3); }

.ovt-audit-warn {
    margin-bottom: 0.8rem; padding: 0.35rem 0.7rem;
    border: 1px solid rgba(251, 191, 36, 0.35); border-radius: 3px;
    background: rgba(251, 191, 36, 0.05);
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.66rem; letter-spacing: 0.04em; color: var(--ovt-amber);
}
.ovt-audit-error {
    display: flex; align-items: center; gap: 0.9rem; flex-wrap: wrap;
    padding: 0.85rem 1rem;
    border: 1px solid rgba(248, 113, 113, 0.3); border-radius: 4px;
    background: rgba(248, 113, 113, 0.05);
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.72rem; color: var(--ovt-fg-muted);
    overflow-wrap: anywhere;
}

.ovt-audit-ledger {
    background: #050807;
    border: 1px solid var(--ovt-hairline); border-radius: 6px;
    overflow: hidden;
    font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.7rem;
    box-shadow: inset 0 0 60px rgba(16, 185, 129, 0.03), 0 6px 30px rgba(0, 0, 0, 0.4);
}
.ovt-audit-row {
    display: grid;
    grid-template-columns: 8em 5.5em minmax(11em, 17em) 6.5em 1fr;
    gap: 0.8rem; align-items: baseline;
    padding: 0.42rem 0.9rem;
    border-bottom: 1px solid rgba(16, 185, 129, 0.06);
    color: var(--ovt-fg-muted);
    transition: background 0.12s ease;
}
.ovt-audit-row:last-child { border-bottom: none; }
.ovt-audit-row.has-detail { cursor: pointer; }
.ovt-audit-row.has-detail:hover { background: rgba(16, 185, 129, 0.05); }
.ovt-audit-row.is-expanded { background: rgba(16, 185, 129, 0.04); }
.ovt-audit-head {
    cursor: default; position: sticky; top: 0; z-index: 1;
    background: #060a08; border-bottom: 1px solid var(--ovt-hairline);
    color: var(--ovt-fg-dim); font-size: 0.56rem; font-weight: 700;
    letter-spacing: 0.14em; text-transform: uppercase;
    padding-top: 0.5rem; padding-bottom: 0.5rem;
}
.ovt-audit-time {
    color: var(--ovt-fg-dim); font-size: 0.64rem; white-space: nowrap;
    font-variant-numeric: tabular-nums;
}
.ovt-actor-badge {
    display: inline-flex; align-items: center;
    padding: 0.08rem 0.4rem; border-radius: 2px;
    border: 1px solid var(--ovt-hairline); background: rgba(16, 185, 129, 0.05);
    font-size: 0.6rem; font-weight: 700; letter-spacing: 0.08em;
    color: var(--ovt-fg-muted);
}
.ovt-actor-badge.is-stubo { color: var(--ovt-green-soft); border-color: var(--ovt-hairline-strong); }
.ovt-audit-target {
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    color: var(--ovt-fg); font-size: 0.66rem;
}
.ovt-audit-target .sep { color: var(--ovt-fg-dim); }
.ovt-audit-chip {
    display: inline-flex; align-items: center;
    padding: 0.1rem 0.45rem; border-radius: 2px; border: 1px solid;
    font-size: 0.56rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
}
.ovt-audit-chip.is-start     { color: var(--ovt-green-soft); border-color: rgba(16, 185, 129, 0.5);  background: rgba(16, 185, 129, 0.08); }
.ovt-audit-chip.is-stop      { color: var(--ovt-red);        border-color: rgba(248, 113, 113, 0.5); background: rgba(248, 113, 113, 0.07); }
.ovt-audit-chip.is-restart   { color: var(--ovt-amber);      border-color: rgba(251, 191, 36, 0.5);  background: rgba(251, 191, 36, 0.07); }
.ovt-audit-chip.is-console   { color: var(--ovt-cyan);       border-color: rgba(103, 232, 249, 0.45); background: rgba(103, 232, 249, 0.06); }
.ovt-audit-chip.is-filewrite { color: #C4B5FD;               border-color: rgba(196, 181, 253, 0.45); background: rgba(196, 181, 253, 0.07); }
.ovt-audit-chip.is-other     { color: var(--ovt-fg-muted);   border-color: var(--ovt-hairline);       background: rgba(16, 185, 129, 0.04); }
.ovt-audit-detail {
    min-width: 0; overflow-wrap: anywhere;
    color: rgba(209, 250, 229, 0.72); font-size: 0.66rem;
}
.ovt-audit-row.is-expanded .ovt-audit-detail { white-space: pre-wrap; }

@media (max-width: 1100px) {
    .ovt-audit-row { grid-template-columns: 6.5em 4.5em minmax(8em, 12em) 6em 1fr; gap: 0.55rem; }
}

/* ------------------------------------------------------------
   star map rev 2 â€” cluster constellations, ghosts, host strip
   ------------------------------------------------------------ */
/* slim host telemetry strip above the canvas (host is a per-node detail now) */
.ovt-map-hosts {
    display: flex; gap: 0.6rem; flex-wrap: wrap;
    margin-bottom: 0.8rem;
}
.ovt-host-chip .key {
    padding: 0 0.3rem;
    border: 1px solid rgba(225, 227, 232, 0.18); border-radius: 2px;
    color: var(--ovt-fg-muted); font-weight: 700; font-size: 0.6rem;
}

/* legend icons beyond the state dots */
.ovt-map-legend i { font-style: normal; }
.ovt-map-legend .lg-ic-entry {
    width: 7px; height: 7px; flex-shrink: 0;
    border: 1px solid rgba(103, 232, 249, 0.75);
    transform: rotate(45deg);
}
.ovt-map-legend .lg-ic-ghost {
    /* ghost TILE: dashed grey square */
    width: 9px; height: 9px; flex-shrink: 0; border-radius: 2px;
    border: 1px dashed rgba(190, 196, 204, 0.7);
}
.ovt-map-legend .lg-ic-shared {
    /* shared band TILE: square with the dual-tone ring */
    width: 9px; height: 9px; flex-shrink: 0; border-radius: 2px;
    border: 1px solid rgba(52, 211, 153, 0.7);
    box-shadow: 0 0 0 2px rgba(103, 232, 249, 0.25);
}
.ovt-map-legend .lg-ic-root {
    /* cluster parent TILE: square with the emerald emphasis border */
    width: 9px; height: 9px; flex-shrink: 0; border-radius: 2px;
    border: 1.5px solid rgba(16, 185, 129, 0.85);
    background: rgba(16, 185, 129, 0.08);
}
.ovt-map-legend .lg-ic-host {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 12px; height: 12px; padding: 0 2px; flex-shrink: 0;
    border: 1px solid rgba(225, 227, 232, 0.25); border-radius: 2px;
    color: var(--ovt-fg-muted); font-size: 0.52rem; font-weight: 700;
    text-transform: lowercase;
}

/* ghost (unmanaged) tooltip bits */
.ovt-map-tip .t-state.is-ghost-up { color: rgba(52, 211, 153, 0.75); border: 1px dashed rgba(52, 211, 153, 0.5); }
.ovt-map-tip .t-state.is-ghost-down { color: rgba(236, 253, 245, 0.45); border: 1px dashed rgba(236, 253, 245, 0.2); }
.ovt-map-tip .t-note {
    margin-top: 0.45rem; font-size: 0.56rem; letter-spacing: 0.08em;
    text-transform: uppercase; color: rgba(148, 163, 158, 0.7);
}

/* list view: trailing dim section for unmanaged (AMP) realms */
.ovt-unmanaged-section { opacity: 0.85; }
.ovt-unmanaged-title { color: var(--ovt-fg-muted); }
.ovt-unmanaged-rows {
    display: flex; flex-direction: column;
    border: 1px solid var(--ovt-hairline); border-radius: 4px;
    background: rgba(13, 18, 22, 0.5);
    overflow: hidden;
}
.ovt-unmanaged-row {
    display: flex; align-items: baseline; gap: 1.1rem; flex-wrap: wrap;
    padding: 0.5rem 0.9rem;
    border-bottom: 1px solid rgba(16, 185, 129, 0.06);
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.68rem; letter-spacing: 0.04em; color: var(--ovt-fg-dim);
}
.ovt-unmanaged-row:last-child { border-bottom: none; }
.ovt-unmanaged-row .u-label { color: var(--ovt-fg-muted); font-weight: 600; min-width: 9em; }
.ovt-unmanaged-row .u-cluster { color: var(--ovt-fg-dim); }
.ovt-unmanaged-row .u-status { font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; font-size: 0.58rem; }
.ovt-unmanaged-row .u-status.is-up { color: rgba(52, 211, 153, 0.7); }
.ovt-unmanaged-row .u-status.is-down { color: rgba(236, 253, 245, 0.35); }
.ovt-unmanaged-row .u-players { color: var(--ovt-green-soft); }

/* ------------------------------------------------------------
   safe restart / drain-before-restart
   ------------------------------------------------------------ */
.ovt-btn-safe:hover:not(:disabled) {
    border-color: #22D3EE; color: #22D3EE;
    background: rgba(34, 211, 238, 0.06);
}

/* slim in-card progress strip while a drain runs */
.ovt-drain-strip {
    position: relative; display: flex; align-items: center;
    padding: 0.32rem 0.65rem;
    border: 1px solid rgba(251, 191, 36, 0.4); border-radius: 3px;
    background: rgba(251, 191, 36, 0.05);
    overflow: hidden;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.6rem; font-weight: 700; letter-spacing: 0.1em;
    text-transform: uppercase; color: var(--ovt-amber);
}
.ovt-drain-strip::before {
    content: ''; position: absolute; top: 0; bottom: 0; left: -24px; right: -24px;
    background: repeating-linear-gradient(-45deg,
        rgba(251, 191, 36, 0.09) 0px, rgba(251, 191, 36, 0.09) 8px,
        transparent 8px, transparent 16px);
    animation: ovtDrainSlide 1.1s linear infinite;
    pointer-events: none;
}
.ovt-drain-strip .txt {
    position: relative;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
@keyframes ovtDrainSlide {
    from { transform: translateX(0); }
    to   { transform: translateX(22.63px); } /* one 45deg stripe period */
}
.ovt-drain-strip.is-aborted {
    border-color: rgba(248, 113, 113, 0.45);
    background: rgba(248, 113, 113, 0.06);
    color: var(--ovt-red);
}
.ovt-drain-strip.is-aborted::before {
    animation: none;
    background: repeating-linear-gradient(-45deg,
        rgba(248, 113, 113, 0.07) 0px, rgba(248, 113, 113, 0.07) 8px,
        transparent 8px, transparent 16px);
}

/* console header phase chip */
.ovt-pill-drain {
    color: var(--ovt-amber); background: rgba(251, 191, 36, 0.08);
    border: 1px solid var(--ovt-amber);
    animation: ovtPulseAmber 1.4s ease-in-out infinite;
    text-transform: none; letter-spacing: 0.06em;
    max-width: 22em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ovt-pill-drain.is-aborted {
    color: var(--ovt-red); border-color: var(--ovt-red);
    background: rgba(248, 113, 113, 0.08);
    animation: none;
}

@media (prefers-reduced-motion: reduce) {
    .ovt-drain-strip::before, .ovt-pill-drain { animation: none !important; }
}

/* ------------------------------------------------------------
   design-language pass: mspt metric + violet audit accent
   ------------------------------------------------------------ */
/* map tooltip mspt row color coding (healthy / tight / over budget) */
.ovt-map-tip .t-row .v.is-good { color: var(--ovt-green-soft); }
.ovt-map-tip .t-row .v.is-warn { color: var(--ovt-amber); }
.ovt-map-tip .t-row .v.is-bad { color: var(--ovt-red); }

/* unmanaged (amp) rows: mspt readout */
.ovt-unmanaged-row .u-mspt { font-weight: 700; font-size: 0.62rem; }
.ovt-unmanaged-row .u-mspt.is-good { color: rgba(52, 211, 153, 0.7); }
.ovt-unmanaged-row .u-mspt.is-warn { color: var(--ovt-amber); }
.ovt-unmanaged-row .u-mspt.is-bad { color: var(--ovt-red); }

/* audit trail wears the violet accent */
.ovt-audit-head { border-bottom-color: rgba(196, 181, 253, 0.25) !important; }

/* ------------------------------------------------------------
   schedules â€” /ops/overture/schedules
   recurring restarts + jobs. plain language on the face; the
   green stays identity/accent, cyan = in-motion/next-run info,
   amber = armed/warn, red = danger/fail, neutral body copy.
   ------------------------------------------------------------ */
.ovt-sched-head-actions { display: flex; align-items: center; gap: 0.5rem; }

/* create / edit form panel */
.ovt-sched-form {
    margin-bottom: 1.4rem;
    padding: 1.1rem 1.2rem 1rem;
    background: linear-gradient(180deg, var(--ovt-bg-panel) 0%, var(--ovt-bg-deeper) 100%);
    border: 1px solid var(--ovt-hairline-strong); border-radius: 6px;
    box-shadow: 0 6px 30px rgba(0, 0, 0, 0.4), inset 0 0 40px rgba(16, 185, 129, 0.03);
    animation: ovtContentIn 240ms cubic-bezier(0.22, 1, 0.36, 1) both;
}
.ovt-sched-form-head {
    display: flex; align-items: center; justify-content: space-between; gap: 1rem;
    padding-bottom: 0.75rem; margin-bottom: 0.9rem;
    border-bottom: 1px solid var(--ovt-hairline);
}
.ovt-sched-form-title {
    font-family: 'Roboto Flex', sans-serif; font-size: 0.95rem; font-weight: 800;
    letter-spacing: 0.02em; color: var(--ovt-fg);
}
.ovt-sched-form-error {
    margin-bottom: 0.9rem; padding: 0.45rem 0.75rem;
    border: 1px solid rgba(248, 113, 113, 0.4); border-radius: 3px;
    background: rgba(248, 113, 113, 0.06);
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.68rem; letter-spacing: 0.03em; color: var(--ovt-red);
}

.ovt-sched-fields {
    display: grid; gap: 0.9rem 1.1rem;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}
.ovt-sched-field { display: flex; flex-direction: column; gap: 0.35rem; min-width: 0; }
.ovt-sched-field-wide { grid-column: 1 / -1; }
.ovt-sched-lbl {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.6rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
    color: var(--ovt-fg-muted);
}
.ovt-sched-utc {
    color: var(--ovt-cyan); font-weight: 700; letter-spacing: 0.12em;
}
.ovt-sched-opt {
    color: var(--ovt-fg-dim); font-weight: 600; letter-spacing: 0.08em;
    text-transform: none;
}
.ovt-sched-hint {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.58rem; letter-spacing: 0.04em; color: var(--ovt-fg-dim);
    margin-top: 0.1rem;
}

.ovt-sched-select,
.ovt-sched-input {
    width: 100%;
    background: var(--ovt-bg-deeper);
    border: 1px solid var(--ovt-hairline); border-radius: 3px;
    padding: 0.45rem 0.6rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.72rem; letter-spacing: 0.03em;
    color: var(--ovt-fg);
    transition: border-color 0.15s ease;
}
.ovt-sched-select { cursor: pointer; }
.ovt-sched-select:hover:not(:disabled),
.ovt-sched-input:hover:not(:disabled) { border-color: var(--ovt-hairline-strong); }
.ovt-sched-select:focus,
.ovt-sched-input:focus { border-color: rgba(52, 211, 153, 0.55); }
.ovt-sched-select:disabled { opacity: 0.4; cursor: default; }
.ovt-sched-input::placeholder { color: rgba(225, 227, 232, 0.3); }
.ovt-sched-select-sm { width: auto; min-width: 4.2em; }
.ovt-sched-input-sm { width: 6.5em; }

.ovt-sched-time { display: flex; align-items: center; gap: 0.35rem; }
.ovt-sched-colon { color: var(--ovt-fg-dim); font-family: 'JetBrains Mono', ui-monospace, monospace; }

.ovt-sched-form-foot {
    display: flex; align-items: center; gap: 0.5rem;
    padding-top: 0.95rem; margin-top: 1rem;
    border-top: 1px solid var(--ovt-hairline);
}

/* existing schedules list */
.ovt-sched-list { display: flex; flex-direction: column; gap: 0.7rem; }

.ovt-sched-card {
    position: relative;
    display: flex; align-items: center; justify-content: space-between;
    gap: 1rem; flex-wrap: wrap;
    padding: 0.85rem 1.05rem;
    background: linear-gradient(180deg, var(--ovt-bg-panel) 0%, var(--ovt-bg-deeper) 100%);
    border: 1px solid var(--ovt-hairline); border-radius: 5px;
    transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.ovt-sched-card::before {
    content: ''; position: absolute; top: 0; left: 0; bottom: 0; width: 2px;
    border-radius: 5px 0 0 5px;
    background: linear-gradient(180deg, transparent, var(--ovt-green), transparent);
    opacity: 0.55; transition: opacity 0.2s ease;
}
.ovt-sched-card:hover {
    border-color: var(--ovt-hairline-strong);
    box-shadow: 0 6px 24px rgba(0, 0, 0, 0.4), 0 0 20px rgba(16, 185, 129, 0.04);
}
.ovt-sched-card.is-off { opacity: 0.62; }
.ovt-sched-card.is-off::before {
    background: linear-gradient(180deg, transparent, rgba(225, 227, 232, 0.3), transparent);
    opacity: 0.5;
}

.ovt-sched-card-main { display: flex; flex-direction: column; gap: 0.45rem; min-width: 0; flex: 1; }
.ovt-sched-card-head { display: flex; align-items: center; gap: 0.7rem; flex-wrap: wrap; }
.ovt-sched-card-name {
    font-family: 'Roboto Flex', sans-serif; font-size: 0.95rem; font-weight: 700;
    letter-spacing: 0.005em; color: var(--ovt-fg); line-height: 1.2;
}
.ovt-sched-target {
    display: inline-flex; align-items: center; gap: 0.45rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.64rem;
}
.ovt-sched-server { color: var(--ovt-fg-muted); letter-spacing: 0.04em; }

.ovt-sched-card-facts {
    display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.66rem; letter-spacing: 0.03em; color: var(--ovt-fg-dim);
}
.ovt-sched-sep { color: rgba(225, 227, 232, 0.22); }
.ovt-sched-cadence { color: var(--ovt-fg-muted); }
.ovt-sched-next .v {
    color: var(--ovt-cyan); font-weight: 700;
    font-variant-numeric: tabular-nums;
}
.ovt-sched-last .v { color: var(--ovt-fg-muted); }
.ovt-sched-last .v.is-ok { color: var(--ovt-green-soft); }
.ovt-sched-last .v.is-bad { color: var(--ovt-red); }

.ovt-sched-card-actions {
    display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; flex-shrink: 0;
}

/* on/off toggle: reads green when on, dim when off */
.ovt-sched-toggle { min-width: 3.4em; text-align: center; }
.ovt-sched-toggle.is-on {
    border-color: var(--ovt-hairline-strong); color: var(--ovt-green-soft);
    background: rgba(16, 185, 129, 0.06);
}

@media (max-width: 720px) {
    .ovt-sched-card { align-items: flex-start; }
    .ovt-sched-card-actions { width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
    .ovt-sched-form { animation: none !important; }
}

/* ------------------------------------------------------------
   unmanaged realm command window (/ops/overture/realm/{gdPort})
   reuses the console shell; the scrollback is a request/response log,
   not a live tail, so it reads as a conversation not a stream
   ------------------------------------------------------------ */
.ovt-cmd-strip {
    display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;
    padding: 0.45rem 0.2rem;
}
.ovt-cmd-strip.is-offline { opacity: 0.6; }
.ovt-cmd-stat {
    display: inline-flex; align-items: center; gap: 0.4rem;
    padding: 0.24rem 0.6rem; border-radius: 2px;
    border: 1px solid var(--ovt-hairline);
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.6rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
    color: var(--ovt-fg-dim);
}
.ovt-cmd-stat .dot { width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0; background: var(--ovt-fg-dim); }
.ovt-cmd-stat.is-online { color: var(--ovt-green-soft); border-color: var(--ovt-hairline-strong); }
.ovt-cmd-stat.is-online .dot { background: var(--ovt-green); box-shadow: 0 0 6px rgba(16, 185, 129, 0.5); }
.ovt-cmd-stat.is-offline { color: var(--ovt-fg-dim); }

.ovt-cmd-note {
    font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.66rem;
    color: var(--ovt-amber); letter-spacing: 0.04em;
    padding: 0.35rem 0.7rem; border: 1px solid rgba(251, 191, 36, 0.35);
    border-radius: 3px; background: rgba(251, 191, 36, 0.05);
}

.ovt-cmd-scroll { display: flex; flex-direction: column; gap: 0.5rem; }
.ovt-cmd-entry { display: flex; gap: 0.5rem; align-items: baseline; }
.ovt-cmd-prompt { color: var(--ovt-green); font-weight: 700; flex-shrink: 0; user-select: none; }
.ovt-cmd-body {
    color: var(--ovt-fg); white-space: pre-wrap; overflow-wrap: anywhere; min-width: 0;
}
.ovt-cmd-entry.is-sent .ovt-cmd-body {
    color: var(--ovt-green-soft); font-weight: 600;
}
.ovt-cmd-entry.is-reply .ovt-cmd-body { color: var(--ovt-fg); }
/* the friendly "(no response...)" line tints amber like the offline note */
.ovt-cmd-entry.is-noresp .ovt-cmd-body { color: var(--ovt-amber); }
.ovt-cmd-entry.is-pending .ovt-cmd-body { color: var(--ovt-fg-dim); letter-spacing: 0.3em; }

.ovt-cmd-quick {
    display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap;
    padding: 0.5rem 0.8rem; border-top: 1px solid var(--ovt-hairline);
    background: rgba(6, 10, 8, 0.5); position: relative; z-index: 3;
}
.ovt-cmd-quick-label {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.6rem; font-weight: 700; letter-spacing: 0.12em;
    text-transform: uppercase; color: var(--ovt-fg-dim);
}

.ovt-cmd-foot {
    margin: 0; font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.62rem; letter-spacing: 0.05em; color: var(--ovt-fg-dim);
}

/* ------------------------------------------------------------
   deploy page (/ops/overture/deploy)
   push a build to one or more directly-managed realms.
   cyan = in-motion, amber = confirm/arm, red = failure,
   emerald = success + the accent. neutral body text throughout.
   ------------------------------------------------------------ */
.ovt-deploy-steps {
    display: flex; flex-direction: column; gap: 1rem;
    max-width: 760px;
}

.ovt-deploy-step {
    background: var(--ovt-bg-panel);
    border: 1px solid var(--ovt-hairline); border-radius: 5px;
    padding: 1rem 1.1rem;
}
.ovt-deploy-step.is-locked { opacity: 0.55; }

.ovt-deploy-step-head {
    display: flex; align-items: flex-start; gap: 0.7rem; margin-bottom: 0.85rem;
}
.ovt-deploy-step-num {
    flex-shrink: 0; width: 1.5rem; height: 1.5rem;
    display: inline-flex; align-items: center; justify-content: center;
    border: 1px solid var(--ovt-hairline-strong); border-radius: 50%;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.72rem; font-weight: 700; color: var(--ovt-green-soft);
}
.ovt-deploy-step-title {
    display: block; font-size: 0.82rem; font-weight: 700; letter-spacing: 0.02em;
    color: var(--ovt-fg); text-transform: lowercase;
}
.ovt-deploy-step-hint {
    display: block; margin-top: 0.15rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.64rem; letter-spacing: 0.03em; color: var(--ovt-fg-dim);
}
.ovt-deploy-select-actions { margin-left: auto; display: flex; gap: 0.4rem; }

.ovt-deploy-step-body { display: flex; flex-direction: column; gap: 0.7rem; }

/* --- step 1: file drop --- */
.ovt-deploy-file {
    display: flex; align-items: center; gap: 0.8rem;
    padding: 0.9rem 1rem; cursor: pointer;
    background: var(--ovt-bg-deeper);
    border: 1px dashed var(--ovt-hairline-strong); border-radius: 4px;
    transition: border-color 0.15s ease, background 0.15s ease;
}
.ovt-deploy-file:hover { border-color: var(--ovt-green); background: rgba(16, 185, 129, 0.05); }
.ovt-deploy-file.is-busy { border-color: var(--ovt-cyan); border-style: solid; cursor: default; }
.ovt-deploy-file input[type=file] { display: none; }
.ovt-deploy-file-glyph {
    font-size: 1.2rem; color: var(--ovt-green); flex-shrink: 0;
    text-shadow: 0 0 8px rgba(16, 185, 129, 0.4);
}
.ovt-deploy-file.is-busy .ovt-deploy-file-glyph { color: var(--ovt-cyan); text-shadow: 0 0 8px rgba(103, 232, 249, 0.4); }
.ovt-deploy-file-text {
    display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.72rem; color: var(--ovt-fg-muted);
}
.ovt-deploy-file-name { color: var(--ovt-fg); font-weight: 700; }
.ovt-deploy-file-size { color: var(--ovt-green-soft); }

.ovt-deploy-note {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.66rem; letter-spacing: 0.03em; color: var(--ovt-fg-dim);
}
.ovt-deploy-note.is-warn { color: var(--ovt-amber); }

/* --- step 2: path + presets --- */
.ovt-deploy-presets { display: flex; gap: 0.4rem; flex-wrap: wrap; }
.ovt-deploy-path { display: flex; flex-direction: column; gap: 0.3rem; }
.ovt-deploy-path-lbl {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.6rem; font-weight: 700; letter-spacing: 0.12em;
    text-transform: uppercase; color: var(--ovt-fg-dim);
}
.ovt-deploy-path-input {
    width: 100%; box-sizing: border-box;
    padding: 0.5rem 0.65rem;
    background: var(--ovt-bg-deeper);
    border: 1px solid var(--ovt-hairline); border-radius: 3px;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.74rem; color: var(--ovt-fg);
}
.ovt-deploy-path-input:focus {
    outline: none; border-color: var(--ovt-green); box-shadow: 0 0 0 1px var(--ovt-hairline-strong);
}
.ovt-deploy-path-input:disabled { opacity: 0.4; }

/* --- step 3: target checklist --- */
.ovt-deploy-host-group { display: flex; flex-direction: column; gap: 0.35rem; }
.ovt-deploy-host-group + .ovt-deploy-host-group { margin-top: 0.6rem; }
.ovt-deploy-host-name {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.62rem; font-weight: 700; letter-spacing: 0.1em;
    text-transform: uppercase; color: var(--ovt-fg-dim);
}
.ovt-deploy-target-list { display: flex; flex-direction: column; gap: 0.3rem; }
.ovt-deploy-target {
    display: flex; align-items: center; gap: 0.6rem; cursor: pointer;
    padding: 0.45rem 0.6rem;
    background: var(--ovt-bg-deeper);
    border: 1px solid var(--ovt-hairline); border-radius: 3px;
    transition: border-color 0.12s ease;
}
.ovt-deploy-target:hover { border-color: var(--ovt-hairline-strong); }
.ovt-deploy-target.is-on { border-color: var(--ovt-green); background: rgba(16, 185, 129, 0.06); }
.ovt-deploy-target input[type=checkbox] { accent-color: var(--ovt-green); width: 0.9rem; height: 0.9rem; }
.ovt-deploy-target-name { font-size: 0.78rem; font-weight: 600; color: var(--ovt-fg); }

/* --- restart option --- */
.ovt-deploy-restart {
    display: flex; align-items: flex-start; gap: 0.6rem; cursor: pointer;
}
.ovt-deploy-restart input[type=checkbox] { accent-color: var(--ovt-green); width: 0.9rem; height: 0.9rem; margin-top: 0.15rem; }
.ovt-deploy-restart-name { display: block; font-size: 0.78rem; font-weight: 600; color: var(--ovt-fg); }
.ovt-deploy-restart-hint {
    display: block; margin-top: 0.1rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.64rem; color: var(--ovt-fg-dim);
}

/* --- fire button --- */
.ovt-deploy-fire { display: flex; align-items: center; gap: 0.7rem; flex-wrap: wrap; }
.ovt-deploy-go { min-width: 8rem; justify-content: center; }

/* --- results --- */
.ovt-deploy-results {
    margin-top: 0.4rem;
    background: var(--ovt-bg-panel);
    border: 1px solid var(--ovt-hairline); border-radius: 5px;
    padding: 0.8rem 1rem;
}
.ovt-deploy-results-head {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.62rem; font-weight: 700; letter-spacing: 0.12em;
    text-transform: uppercase; color: var(--ovt-fg-dim); margin-bottom: 0.6rem;
}
.ovt-deploy-result {
    display: flex; align-items: center; justify-content: space-between; gap: 1rem;
    padding: 0.4rem 0; border-top: 1px solid var(--ovt-hairline);
    font-family: 'JetBrains Mono', ui-monospace, monospace;
}
.ovt-deploy-result:first-of-type { border-top: none; }
.ovt-deploy-result-server { font-size: 0.74rem; font-weight: 700; color: var(--ovt-fg); }
.ovt-deploy-result-status { font-size: 0.68rem; color: var(--ovt-fg-muted); text-align: right; overflow-wrap: anywhere; }
.ovt-deploy-result.is-pending .ovt-deploy-result-status { color: var(--ovt-fg-dim); }
.ovt-deploy-result.is-uploading .ovt-deploy-result-status { color: var(--ovt-cyan); }
.ovt-deploy-result.is-restarting .ovt-deploy-result-status { color: var(--ovt-cyan); }
.ovt-deploy-result.is-ok .ovt-deploy-result-status { color: var(--ovt-green-soft); }
.ovt-deploy-result.is-failed .ovt-deploy-result-status { color: var(--ovt-red); }

/* --- inline "upload here" control on the file manager crumbs bar --- */
.ovt-deploy-inline-upload {
    margin-left: auto; display: inline-flex; align-items: center; gap: 0.35rem;
    padding: 0.15rem 0.5rem; cursor: pointer;
    border: 1px solid var(--ovt-hairline); border-radius: 3px;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.62rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
    color: var(--ovt-fg-muted); transition: border-color 0.12s ease, color 0.12s ease;
}
.ovt-deploy-inline-upload:hover { border-color: var(--ovt-green); color: var(--ovt-green-soft); }
.ovt-deploy-inline-upload.is-busy { border-color: var(--ovt-cyan); color: var(--ovt-cyan); cursor: default; }
.ovt-deploy-inline-upload input[type=file] { display: none; }
.ovt-deploy-inline-glyph { color: var(--ovt-green); }
.ovt-deploy-inline-upload.is-busy .ovt-deploy-inline-glyph { color: var(--ovt-cyan); }

/* ============================================================
   managed server view — /ops/overture/console/{agent}/{server}
   THE COCKPIT. Not a card grid. Top→bottom: identity line, a
   borderless vitals telemetry band, ONE consolidated control bar
   (all lifecycle + safe-restart + files/deploy together), an
   inline drain banner, then the CONSOLE as the single hero
   surface (flex-grows), and a muted technical footer. Structure
   comes from hairlines, tints and whitespace — not from boxes.
   ============================================================ */

.ovt-cockpit {
    /* base .ovt-console-page already gives us the flex column,
       height calc(100vh - header) and the 0.8rem gap. */
    gap: 0.65rem;
}

/* ---- 1. identity + state line (no box) ---- */
.ovt-ck-identity {
    flex-shrink: 0;
    display: flex; align-items: center; gap: 0.9rem;
    padding-bottom: 0.55rem;
    border-bottom: 1px solid var(--ovt-hairline);
}
.ovt-ck-back {
    flex-shrink: 0;
    display: inline-flex; align-items: center; justify-content: center;
    width: 1.9rem; height: 1.9rem;
    font-family: 'Roboto Flex', sans-serif; font-size: 1.5rem; line-height: 1;
    color: var(--ovt-fg-dim); text-decoration: none;
    border-radius: 4px;
    transition: color 0.15s ease, background 0.15s ease;
}
.ovt-ck-back:hover { color: var(--ovt-green-soft); background: rgba(16, 185, 129, 0.06); }
.ovt-ck-id-main { min-width: 0; display: flex; flex-direction: column; gap: 0.15rem; }
.ovt-ck-id-line { display: flex; align-items: center; gap: 0.85rem; flex-wrap: wrap; }
.ovt-ck-name {
    margin: 0; font-family: 'Roboto Flex', sans-serif;
    font-size: clamp(1.3rem, 2.4vh, 1.65rem); font-weight: 800; letter-spacing: -0.01em;
    color: var(--ovt-fg); line-height: 1.05;
    font-variation-settings: 'wdth' 94;
}
.ovt-ck-sub {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.62rem; letter-spacing: 0.08em; color: var(--ovt-fg-dim);
}

/* state = a dot + plain word, inline with the name (no pill chrome) */
.ovt-ck-state {
    display: inline-flex; align-items: center; gap: 0.4rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.68rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;
    color: var(--ovt-fg-muted);
}
.ovt-ck-state .dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; background: currentColor; }
.ovt-ck-state-up { color: var(--ovt-green-soft); }
.ovt-ck-state-up .dot { box-shadow: 0 0 8px rgba(16, 185, 129, 0.6); }
.ovt-ck-state-starting,
.ovt-ck-state-stopping { color: var(--ovt-cyan); }
.ovt-ck-state-starting .dot { animation: ovtDotPulse 1.4s ease-in-out infinite; box-shadow: 0 0 8px rgba(103, 232, 249, 0.55); }
.ovt-ck-state-stopped { color: var(--ovt-fg-dim); }
.ovt-ck-state-stopped .dot { background: rgba(225, 227, 232, 0.35); }
.ovt-ck-state-backoff { color: var(--ovt-amber); }
.ovt-ck-state-backoff .dot { animation: ovtDotPulse 1.9s ease-in-out infinite; box-shadow: 0 0 8px rgba(251, 191, 36, 0.5); }
.ovt-ck-state-crashloop { color: var(--ovt-red); }
.ovt-ck-state-crashloop .dot { animation: ovtDotPulse 1.2s ease-in-out infinite; box-shadow: 0 0 8px rgba(248, 113, 113, 0.55); }
.ovt-ck-state-hung { color: var(--ovt-amber); }
.ovt-ck-state-hung .dot { background: transparent; border: 1.5px dashed rgba(251, 191, 36, 0.7); box-sizing: border-box; }
.ovt-ck-state-unknown { color: var(--ovt-fg-dim); }
.ovt-ck-state-unknown .dot { background: transparent; border: 1px solid rgba(225, 227, 232, 0.35); box-sizing: border-box; }

.ovt-ck-tail { margin-left: auto; flex-shrink: 0; }

/* ---- 2. vitals strip (no boxes; hairline dividers) ---- */
.ovt-ck-vitals {
    flex-shrink: 0;
    display: flex; align-items: stretch; flex-wrap: wrap;
    gap: 0 clamp(1rem, 2.4vw, 2rem);
    padding: 0.15rem 0.1rem 0.4rem;
}
.ovt-ck-vital {
    display: flex; flex-direction: column; gap: 0.18rem;
    padding: 0.1rem 0; min-width: 0;
}
.ovt-ck-vital .num {
    font-family: 'Roboto Flex', sans-serif; line-height: 1;
    font-size: clamp(1.35rem, 2.9vh, 1.85rem); font-weight: 800; letter-spacing: -0.015em;
    color: var(--ovt-fg); font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.ovt-ck-vital .lbl {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.56rem; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase;
    color: var(--ovt-fg-dim);
}
/* mspt is the headline number: color-coded + tiny budget hint */
.ovt-ck-vital-mspt .num.is-good { color: var(--ovt-green-soft); text-shadow: 0 0 16px rgba(16, 185, 129, 0.3); }
.ovt-ck-vital-mspt .num.is-warn { color: var(--ovt-amber); text-shadow: 0 0 16px rgba(251, 191, 36, 0.28); }
.ovt-ck-vital-mspt .num.is-bad  { color: var(--ovt-red); text-shadow: 0 0 16px rgba(248, 113, 113, 0.32); }
.ovt-ck-vital-mspt .num.is-none { color: var(--ovt-fg-dim); }
.ovt-ck-vital-mspt .num .budget {
    font-size: 0.62rem; font-weight: 600; letter-spacing: 0.02em;
    color: var(--ovt-fg-dim); margin-left: 0.12rem;
    -webkit-text-fill-color: var(--ovt-fg-dim);
}
/* the thin vertical hairline dividers between vitals */
.ovt-ck-vsep {
    align-self: center; width: 1px; height: 2rem; flex-shrink: 0;
    background: var(--ovt-hairline-strong);
}

/* ---- 3. control bar (ONE consolidated toolbar) ---- */
.ovt-ck-controls {
    flex-shrink: 0;
    display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;
    padding: 0.55rem 0.7rem;
    background: rgba(225, 227, 232, 0.025);
    border: 1px solid var(--ovt-hairline);
    border-radius: 5px;
}
.ovt-ck-ctrl-group { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
.ovt-ck-ctrl-sep {
    width: 1px; height: 1.4rem; flex-shrink: 0;
    background: var(--ovt-hairline-strong);
    margin: 0 0.15rem;
}
.ovt-ck-ctrl-note {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.6rem; letter-spacing: 0.04em; color: var(--ovt-fg-dim);
}
/* safe restart wears the emerald "healthy action" tint */
.ovt-btn-safe {
    color: var(--ovt-green-soft); border-color: var(--ovt-hairline-strong);
    background: rgba(16, 185, 129, 0.05);
}
.ovt-btn-safe:hover:not(:disabled) {
    border-color: var(--ovt-green); color: var(--ovt-green-soft);
    background: rgba(16, 185, 129, 0.1); box-shadow: 0 0 10px rgba(16, 185, 129, 0.18);
}
/* files + deploy wear the violet doorway accent */
.ovt-btn-files {
    text-decoration: none; display: inline-flex; align-items: center;
    color: var(--ovt-violet); border-color: rgba(196, 181, 253, 0.35);
}
.ovt-btn-files:hover {
    border-color: var(--ovt-violet); color: var(--ovt-violet);
    background: rgba(196, 181, 253, 0.07); box-shadow: 0 0 10px rgba(196, 181, 253, 0.15);
}

/* ---- 4. drain banner (full-width inline, animated) ---- */
.ovt-ck-drain {
    flex-shrink: 0;
    padding: 0.5rem 0.85rem; font-size: 0.66rem; letter-spacing: 0.08em;
}

/* ---- 5. console = the hero surface (flex-grows) ---- */
.ovt-ck-console {
    flex: 1 1 auto; min-height: 40vh;
    border-radius: 6px;
}
.ovt-ck-console-bar {
    flex-shrink: 0;
    display: flex; align-items: center; gap: 0.7rem;
    padding: 0.4rem 0.75rem;
    border-bottom: 1px solid var(--ovt-hairline);
    background: rgba(6, 10, 8, 0.6);
    position: relative; z-index: 3;
}
.ovt-ck-console-label {
    display: inline-flex; align-items: center; gap: 0.45rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.58rem; font-weight: 700; letter-spacing: 0.18em; text-transform: uppercase;
    color: var(--ovt-fg-dim);
}
.ovt-ck-console-label .tail-dot {
    width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0;
    background: var(--ovt-cyan); box-shadow: 0 0 6px rgba(103, 232, 249, 0.5);
    animation: ovtDotPulse 1.8s ease-in-out infinite;
}
.ovt-ck-console-label .tail-dot.is-err {
    background: var(--ovt-amber); box-shadow: 0 0 6px rgba(251, 191, 36, 0.5); animation: none;
}
.ovt-ck-console-err {
    margin-left: auto;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.6rem; letter-spacing: 0.05em; color: var(--ovt-amber);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* ---- 6. technical footer (muted, no box, middot-separated) ---- */
.ovt-ck-footer {
    flex-shrink: 0;
    display: flex; align-items: center; flex-wrap: wrap; gap: 0.05rem 0.5rem;
    padding-top: 0.15rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 0.6rem; letter-spacing: 0.03em;
    color: var(--ovt-fg-muted); opacity: 0.6;
}
.ovt-ck-footer .mid { color: var(--ovt-fg-dim); }
.ovt-ck-footer .is-warn { color: var(--ovt-amber); }
.ovt-ck-footer .path {
    max-width: 40ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    color: var(--ovt-fg-dim);
}

/* ---- server-not-found: graceful centered notice ---- */
.ovt-ck-notfound {
    flex: 1 1 auto;
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 0.6rem; text-align: center; padding: 2rem 1rem;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
}
.ovt-ck-notfound .glyph { font-size: 2rem; color: var(--ovt-hairline-strong); }
.ovt-ck-notfound .txt {
    font-size: 0.85rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--ovt-fg-muted);
}
.ovt-ck-notfound .hint {
    font-size: 0.68rem; letter-spacing: 0.03em; color: var(--ovt-fg-dim);
    max-width: 46ch; line-height: 1.55;
}
.ovt-ck-back-link {
    margin-top: 0.4rem; font-size: 0.66rem; letter-spacing: 0.06em;
    color: var(--ovt-green-soft); text-decoration: none;
}
.ovt-ck-back-link:hover { text-shadow: 0 0 8px rgba(16, 185, 129, 0.3); }

/* narrower staff screens: keep the band + toolbar honest */
@media (max-width: 1280px) {
    .ovt-ck-vitals { gap: 0 clamp(0.8rem, 1.8vw, 1.4rem); }
    .ovt-ck-footer .path { max-width: 28ch; }
}
@media (max-width: 1100px) {
    .ovt-ck-vsep { height: 1.7rem; }
    .ovt-ck-vital .num { font-size: 1.35rem; }
}

@media (prefers-reduced-motion: reduce) {
    .ovt-ck-state .dot,
    .ovt-ck-console-label .tail-dot { animation: none !important; }
}

