/* ────────────────────────────────────────────────────────────────────────────
   trench.css — Administration page (gate + Josey's Degen Dungeon board).

   Rides the site palette tokens from site.css (--yieldsim-chrome family,
   blood-red on true black) and follows the chrome usage rule documented
   there: filled surfaces = base #8b0000, thin text/borders/halos = bright
   #b30000, pressed/deep = deep #5c0000. Chart color-coding (XRP blue etc.)
   is deliberately NOT used here — this page has nothing to do with the
   dashboard's asset-denomination language, and the palette memory says
   never to alias the two.

   Verdict badge colors are the one local exception to all-red chrome:
   green/amber/red is a universally readable risk ramp, and the badges are
   data classification (like chart colors), not site chrome.
   ──────────────────────────────────────────────────────────────────────────── */

/* ── The gate (Locked.cshtml) ───────────────────────────────────────────── */

.trench-gate {
    max-width: 26rem;
    padding-top: 8vh;
}

.trench-gate-card {
    background: #0d0d0d;
    border: 1px solid var(--yieldsim-chrome-deep);
    /* Halo matches --yieldsim-chrome (#8b0000). Kept literal for the same
       reason site.css keeps its halo literal: rgba() can't take a var()
       hex, and the alpha channel is the design decision here. */
    box-shadow: 0 0 40px rgba(139, 0, 0, 0.25);
}

.trench-gate-mark {
    color: var(--yieldsim-chrome-bright);
    font-size: 2rem;
    line-height: 1;
}

.trench-gate-input {
    background: #050505;
    border-color: var(--yieldsim-chrome-deep);
    letter-spacing: 0.35em;
}

.trench-gate-input:focus {
    background: #050505;
    border-color: var(--yieldsim-chrome-bright);
    box-shadow: 0 0 0 0.2rem rgba(179, 0, 0, 0.25);
}

.trench-gate-button {
    background: var(--yieldsim-chrome);
    border-color: var(--yieldsim-chrome-deep);
    color: #fff; /* white text on all chrome buttons — palette rule */
}

.trench-gate-button:hover,
.trench-gate-button:focus {
    background: var(--yieldsim-chrome-bright);
    border-color: var(--yieldsim-chrome);
    color: #fff;
}

.trench-gate-error {
    background: rgba(139, 0, 0, 0.18);
    border: 1px solid var(--yieldsim-chrome);
    color: #f0c0c0;
}

/* ── The board (Index.cshtml) ───────────────────────────────────────────── */

/* Full-bleed shell (operator request 2026-07-09): the page opts out of
   the site's container-xl clamp (ViewData["FullBleed"]) so desktops get
   the whole viewport for the table + Narr rail. The board supplies its
   own padding (FullBleed also drops the layout's vertical padding) and
   caps at 2100px so ultrawide monitors don't stretch 11-column rows
   into unreadable ribbons — the cap centers, margins only reappear past
   that width. Mobile keeps container-like side padding. */
.trench-board {
    padding: 1rem 0.75rem 2rem;
    max-width: 2100px;
    margin: 0 auto;
}

@media (min-width: 992px) {
    .trench-board {
        padding: 1.5rem 1.5rem 2.5rem;
    }
}

/* The dungeon-face title (operator request 2026-07-09): blackletter
   Pirata One (page-scoped Google Font — see Index.cshtml Head) in bright
   chrome with a blood halo, flanked by deep-red skulls. Decorative
   glyphs are aria-hidden; the accessible name stays plain text. */
.trench-title {
    font-family: "Pirata One", "UnifrakturMaguntia", serif;
    font-size: 2.4rem;
    font-weight: 400; /* blackletter carries its own weight; bolding it smears */
    color: var(--yieldsim-chrome-bright);
    text-shadow: 0 0 18px rgba(179, 0, 0, 0.55), 0 0 42px rgba(139, 0, 0, 0.35);
    letter-spacing: 0.03em;
    line-height: 1.1;
}

@media (max-width: 575.98px) {
    .trench-title {
        font-size: 1.9rem; /* phones: still the marquee, without wrapping wars */
    }
}

.trench-title-skull {
    color: var(--yieldsim-chrome-deep);
    font-size: 0.65em;
    vertical-align: 0.18em;
    text-shadow: none;
    margin: 0 0.4rem;
}

/* RUNNER JACKPOT criteria box (operator request 2026-07-09 late night) —
   same collapsed-button / open-card pattern as the legend, but in the
   runner gold so it visually claims the POTENTIAL RUNNER glow. */
.trench-jackpot summary {
    display: inline-block;
    cursor: pointer;
    background: rgba(255, 210, 77, 0.08);
    border: 1px solid #8a6414;
    border-radius: 4px;
    padding: 0.4rem 1rem;
    color: #ffd24d;
    font-size: 0.95rem;
}

.trench-jackpot summary:hover,
.trench-jackpot summary:focus-visible {
    background: rgba(255, 210, 77, 0.16);
    color: #ffe58a;
}

.trench-jackpot[open] {
    background: #0d0d0d;
    border: 1px solid #8a6414;
    border-radius: 4px;
    padding: 0.6rem 0.9rem 0.75rem;
}

.trench-jackpot[open] summary {
    background: none;
    border: 0;
    padding: 0 0 0.25rem;
}

.trench-jackpot-count {
    color: #ffe58a;
    font-variant-numeric: tabular-nums;
}

/* The criteria table (2026-07-10 night — operator: thresholds were
   buried in prose; every bar must be visible at a glance). Compact,
   gold-framed to match its box; the LIVE column carries the loosened
   bars, and "never loosens" cells render muted so the non-negotiables
   read as structural, not missing data. */
.trench-criteria-table {
    width: 100%;
    border-collapse: collapse;
    margin: 0.25rem 0 0.6rem;
    font-size: 0.85rem;
}

.trench-criteria-table th,
.trench-criteria-table td {
    border: 1px solid #3a2f10;
    padding: 0.25rem 0.5rem;
    vertical-align: top;
    text-align: left;
    color: #ddd;
}

.trench-criteria-table th {
    background: rgba(255, 210, 77, 0.08);
    color: #ffd24d;
    font-weight: 600;
    white-space: nowrap;
}

.trench-criteria-table td:first-child {
    white-space: nowrap;
}

.trench-criteria-hard {
    color: #888;
    font-style: italic;
}

/* The runner log inside the criteria box (2026-07-10): the coins behind
   the 24h counter. Reuses the board's coin-link + mint-copy styling; the
   meta line stays subordinate gray like every secondary figure. */
.trench-runner-log {
    list-style: none;
    padding-left: 0;
    margin-bottom: 0;
}

.trench-runner-log li {
    padding: 0.15rem 0;
}

.trench-runner-hit-meta {
    color: #999;
    font-size: 0.85rem;
}

/* Post-hit peak/could-have gain + current mark on runner-log entries,
   and the "$100 on each" portfolio total (2026-07-10). Same green/red
   ramp as the table deltas — data semantics, not chrome. The peak gain
   is never negative by construction (peak starts at the hit FDV); the
   mark and the portfolio total CAN be red — that's the point. */
.trench-runner-hit-gain {
    color: #4cc38a;
    font-size: 0.85rem;
}

.trench-runner-hit-loss {
    color: #ff6b6b;
    font-size: 0.85rem;
}

.trench-runner-portfolio {
    font-size: 0.85rem;
}

.trench-runner-portfolio-up   { color: #4cc38a; }
.trench-runner-portfolio-down { color: #ff6b6b; }

/* ── WINNERS box (2026-07-10 night) ──────────────────────────────────
   The green mirror of the gold criteria box: same expandable shape as
   .trench-jackpot so the two read as siblings, green because winners
   are the outcome the gold tries to predict. Green here is DATA
   semantics (a win), consistent with the delta/gain ramp — not chrome. */
.trench-winners summary {
    display: inline-block;
    cursor: pointer;
    background: rgba(76, 195, 138, 0.08);
    border: 1px solid #1f7a4d;
    border-radius: 4px;
    padding: 0.4rem 1rem;
    color: #4cc38a;
    font-size: 0.95rem;
}

.trench-winners summary:hover,
.trench-winners summary:focus-visible {
    background: rgba(76, 195, 138, 0.16);
    color: #7fe0b2;
}

.trench-winners[open] {
    background: #0d0d0d;
    border: 1px solid #1f7a4d;
    border-radius: 4px;
    padding: 0.6rem 0.9rem 0.75rem;
}

.trench-winners[open] summary {
    background: none;
    border: 0;
    padding: 0 0 0.25rem;
}

.trench-winners-count {
    color: #7fe0b2;
    font-variant-numeric: tabular-nums;
}

.trench-winner-log {
    list-style: none;
    padding-left: 0;
    margin-bottom: 0;
}

.trench-winner-log li {
    padding: 0.15rem 0;
}

.trench-winner-hit-meta {
    color: #999;
    font-size: 0.85rem;
}

/* The gold star = "the checklist called it" — a true positive. Gold on
   purpose (it's the runner gold landing on the green scoreboard). */
.trench-winner-star {
    color: #ffd24d;
}

/* Tier badge for the $35k run (BONDED reuses the board's trophy badge). */
.trench-winner-tier {
    display: inline-block;
    background: rgba(76, 195, 138, 0.15);
    border: 1px solid #1f7a4d;
    border-radius: 3px;
    padding: 0 0.3rem;
    color: #4cc38a;
    font-size: 0.75rem;
    font-weight: 600;
    white-space: nowrap;
}

/* The analysis button + modal (2026-07-10 night): criteria vs winners.
   Modal mirrors the summon modal's shell, green-accented to match its
   home box. */
.trench-analysis-btn {
    background: rgba(76, 195, 138, 0.08);
    border: 1px solid #1f7a4d;
    color: #4cc38a;
}

.trench-analysis-btn:hover,
.trench-analysis-btn:focus-visible {
    background: rgba(76, 195, 138, 0.18);
    border-color: #2ea36b;
    color: #7fe0b2;
}

.trench-analysis-modal {
    background: #101010;
    color: #ddd;
    border: 1px solid #1f7a4d;
    border-radius: 6px;
    padding: 1rem;
    width: min(560px, 94vw);
}

.trench-analysis-modal::backdrop {
    background: rgba(0, 0, 0, 0.72);
}

.trench-analysis-title {
    color: #7fe0b2;
}

.trench-analysis-body {
    max-height: min(60vh, 480px);
    overflow-y: auto;
}

.trench-analysis-windows {
    display: flex;
    gap: 0.4rem;
}

.trench-analysis-window {
    background: none;
    border: 1px solid #333;
    border-radius: 4px;
    color: #999;
    font-size: 0.8rem;
    padding: 0.15rem 0.6rem;
    cursor: pointer;
}

.trench-analysis-window-active {
    border-color: #1f7a4d;
    color: #4cc38a;
    background: rgba(76, 195, 138, 0.1);
}

/* Headline stat chips: the confusion matrix at a glance. */
.trench-analysis-stats {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-bottom: 0.6rem;
}

.trench-analysis-stat {
    background: #161616;
    border: 1px solid #2a2a2a;
    border-radius: 4px;
    padding: 0.3rem 0.6rem;
    text-align: center;
    min-width: 4.5rem;
}

.trench-analysis-stat-value {
    font-size: 1.15rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}

.trench-analysis-stat-label {
    font-size: 0.7rem;
    color: #999;
}

.trench-analysis-stat-good .trench-analysis-stat-value { color: #4cc38a; }
.trench-analysis-stat-bad .trench-analysis-stat-value  { color: #ff6b6b; }
.trench-analysis-stat-warn .trench-analysis-stat-value { color: #ffd24d; }

.trench-analysis-rates {
    padding-left: 1.1rem;
    margin-bottom: 0.5rem;
}

.trench-analysis-heading {
    margin: 0.5rem 0 0.2rem;
    font-weight: 600;
    color: #ccc;
}

.trench-analysis-gates,
.trench-analysis-list {
    padding-left: 1.1rem;
    margin-bottom: 0.4rem;
}

.trench-analysis-blockers {
    color: #ffd24d;
    font-size: 0.8rem;
}

.trench-analysis-warning {
    background: rgba(255, 210, 77, 0.08);
    border: 1px solid #8a6414;
    border-radius: 4px;
    color: #ffd24d;
    padding: 0.3rem 0.6rem;
    margin-bottom: 0.5rem;
}

/* "How to read this board" — promoted to a chrome-red bar under the
   title (operator request 2026-07-09: buried below the table, nobody
   found it). Collapsed it reads as a button; open it becomes a framed
   card around the list. */
.trench-legend summary {
    display: inline-block;
    cursor: pointer;
    background: rgba(139, 0, 0, 0.18);
    border: 1px solid var(--yieldsim-chrome);
    border-radius: 4px;
    padding: 0.4rem 1rem;
    color: #f0c0c0;
    font-size: 0.95rem;
    font-weight: 700;
}

.trench-legend summary:hover,
.trench-legend summary:focus-visible {
    background: rgba(139, 0, 0, 0.32);
    color: #fff;
}

.trench-legend[open] {
    background: #0d0d0d;
    border: 1px solid var(--yieldsim-chrome-deep);
    border-radius: 4px;
    padding: 0.6rem 0.9rem 0.75rem;
}

.trench-legend[open] summary {
    background: none;
    border: 0;
    padding: 0 0 0.25rem;
    color: var(--yieldsim-chrome-bright);
}

.trench-status-chip {
    background: rgba(139, 0, 0, 0.18);
    border: 1px solid var(--yieldsim-chrome-deep);
    border-radius: 999px;
    padding: 0.15rem 0.75rem;
    color: #f0c0c0;
    font-variant-numeric: tabular-nums;
}

.trench-warning {
    color: #e8b34b; /* amber — degraded-but-alive, distinct from error red */
}

/* Numbers column-align only when every digit is the same width. */
.trench-table {
    font-variant-numeric: tabular-nums;
    --bs-table-bg: #0d0d0d;
}

.trench-table thead th {
    border-bottom: 2px solid var(--yieldsim-chrome-deep);
    white-space: nowrap;
    /* Sticks to the top of the table's scroll container (the mobile
       vertical cap below); inert on desktop where the container doesn't
       scroll vertically. Solid background or rows show through. */
    position: sticky;
    top: 0;
    background: #0d0d0d;
    z-index: 2;
}

/* Stacked layouts (operator catch 2026-07-09): a night's history is 50+
   rows — unbounded, the table shoved the Narr feed off the bottom of
   the phone. Cap it to most-of-a-screen and let it scroll vertically
   (it already scrolls horizontally); the sticky header keeps the column
   labels while flicking through the log. Desktop (≥1450px) stays
   uncapped — the Narr rail sits beside it, nothing to bury. */
@media (max-width: 1449.98px) {
    .trench-main .table-responsive {
        max-height: 65vh;
        overflow-y: auto;
    }
}

/* Coin cell: icon + name on one line, mint beneath. */
.trench-coin-line {
    display: flex;
    align-items: center;
    gap: 0.45rem;
}

.trench-coin-icon {
    width: 28px;
    height: 28px;
    border-radius: 4px;
    object-fit: cover;
    border: 1px solid #222;
    flex-shrink: 0;
}

/* RUGGED — the corpse stamp. Louder than every other state on purpose:
   red-tinted row, struck-through name, solid red badge. Overrides the
   cooling dim (a rug is information, not background noise). */
.trench-row-rugged {
    opacity: 0.85;
    --bs-table-bg: #170707;
}

.trench-row-rugged .trench-coin-link {
    color: #ff6b6b;
    text-decoration: line-through;
}

.trench-badge-rugged {
    background: #c01818;
    color: #fff;
    border-radius: 3px;
    font-size: 0.68rem;
    font-weight: 800;
    letter-spacing: 0.06em;
    padding: 0.12rem 0.4rem;
}

/* CTO — community takeover: rugged earlier, recovered hard. Amber (the
   house degraded-but-alive color): softer than the corpse red, but the
   row still carries a tint because the rug history matters. */
.trench-row-cto {
    --bs-table-bg: #14100a;
}

.trench-badge-cto {
    background: #8a6414;
    color: #fff;
    border-radius: 3px;
    font-size: 0.68rem;
    font-weight: 800;
    letter-spacing: 0.06em;
    padding: 0.12rem 0.4rem;
}

/* Coin name links: bright chrome per the thin-text rule; mint address in
   faint mono underneath so it's copyable without dominating the row. */
.trench-coin-link {
    color: var(--yieldsim-chrome-bright);
    text-decoration: none;
    font-weight: 600;
}

.trench-coin-link:hover {
    color: #ff2b2b;
    text-decoration: underline;
}

.trench-mint {
    font-family: var(--bs-font-monospace);
    /* 0.75rem / #999, up from 0.7rem / #666 (a11y pass 2026-07-08): the CA
       is a must-read, must-copy field, and #666 on the black table computed
       ~3.5:1 — under the 4.5:1 small-text floor. #999 clears it (~6.7:1)
       while staying visually subordinate to the coin name. */
    font-size: 0.75rem;
    color: #999;
    word-break: break-all;
}

/* Tap-to-copy CA (operator request 2026-07-08): a real <button> for
   keyboard/screen-reader reach, stripped of button chrome so it still
   reads as the faint mono address above. user-select stays on so a
   long-press-select still works where the Clipboard API is blocked. */
.trench-mint-copy {
    background: none;
    border: 0;
    padding: 0;
    display: block;
    width: 100%;
    text-align: left;
    cursor: pointer;
    -webkit-user-select: text;
    user-select: text;
}

.trench-mint-copy:hover,
.trench-mint-copy:focus-visible {
    color: #aaa;
}

/* The ⧉ copy glyph — the "you can tap this" signal. Chrome red so it
   registers as a control, not part of the CA (with the address now at the
   same #999 the icon had, gray-on-gray would have hidden the affordance —
   a11y pass 2026-07-08). Decorative glyph, so the red's lower luminance
   is fine; the button's aria-label carries the meaning. */
.trench-mint-copy-icon {
    color: var(--yieldsim-chrome-bright);
    margin-right: 0.3rem;
}

/* Copy feedback flashes (1.2s, set by trench.js): green = on the
   clipboard (same green as the delta-up/first-launch ramp); amber =
   blocked by the browser (same amber as every other degraded-state note). */
.trench-mint-copied,
.trench-mint-copied .trench-mint-copy-icon { color: #4cc38a; }
.trench-mint-failed,
.trench-mint-failed .trench-mint-copy-icon { color: #e8b34b; }

.trench-col-bond {
    min-width: 7.5rem;
}

/* Bond progress: the graduation gauge. Track deep red, fill base chrome —
   reads as "filling with blood" against the black table, which is exactly
   the house vibe. */
.trench-bond-track {
    background: #1a0505;
    border: 1px solid var(--yieldsim-chrome-deep);
    border-radius: 3px;
    height: 0.9rem;
    position: relative;
    overflow: hidden;
}

.trench-bond-fill {
    background: var(--yieldsim-chrome);
    height: 100%;
}

.trench-bond-label {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.65rem;
    color: #f0dede;
}

/* 5-minute price delta: green up, red down. Data semantics, not chrome. */
.trench-delta-up   { color: #4cc38a; }
.trench-delta-down { color: #ff6b6b; }

/* BONDED — the graduation trophy (Josey's request 2026-07-09): solid
   green (the win condition, same ramp as first-launch/delta-up) with a
   muted since-graduation timer underneath. Replaces the bond gauge. */
.trench-badge-bonded {
    background: #1e7a4d;
    color: #fff;
    border-radius: 3px;
    font-size: 0.68rem;
    font-weight: 800;
    letter-spacing: 0.06em;
    padding: 0.12rem 0.4rem;
}

.trench-bonded-ago {
    color: #888;
    font-size: 0.7rem;
    font-variant-numeric: tabular-nums;
    margin-top: 0.1rem;
}

/* The "DEX paid" check under the BONDED badge: gold when paid (someone
   is still spending on this coin), muted when provably not. */
.trench-dex-paid {
    color: #ffd24d;
    font-size: 0.7rem;
    font-weight: 700;
    margin-top: 0.1rem;
}

.trench-dex-unpaid {
    color: #777;
    font-size: 0.7rem;
    margin-top: 0.1rem;
}

/* POTENTIAL RUNNER — the every-signal-optimal state (server checklist,
   re-stamped each sweep). Bright gold outline pulsing gently around the
   whole row + a glowing label under the CA. Gold is deliberately unique
   to this state — nothing else on the board earns it. */
.trench-row-runner {
    outline: 2px solid #ffd24d;
    outline-offset: -2px;
    --bs-table-bg: #161105;
    animation: trench-runner-pulse 1.8s ease-in-out infinite;
}

@keyframes trench-runner-pulse {
    0%, 100% { outline-color: #ffd24d; }
    50%      { outline-color: #8a6414; }
}

.trench-runner-label {
    color: #ffd24d;
    font-size: 0.7rem;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-shadow: 0 0 8px rgba(255, 210, 77, 0.75);
    margin-top: 0.15rem;
}

/* NEW pulse — first appearance since the page opened. Animation is subtle
   on purpose; a strobing casino board gets old in one minute. */
.trench-badge-new {
    background: var(--yieldsim-chrome-bright);
    color: #fff;
    border-radius: 3px;
    font-size: 0.65rem;
    font-weight: 700;
    padding: 0.1rem 0.35rem;
    margin-left: 0.4rem;
    animation: trench-new-pulse 1.6s ease-in-out 3;
}

/* LIVE — the dev is streaming on pump.fun this sweep (2026-07-10 night,
   the MOGWHALE catch). Outlined, not filled: it stacks beside NEW/RUGGED
   and must read as a status light, not another alarm. */
.trench-badge-live {
    border: 1px solid #ff4d4d;
    color: #ff8080;
    background: rgba(255, 77, 77, 0.08);
    border-radius: 3px;
    font-size: 0.65rem;
    font-weight: 700;
    padding: 0.1rem 0.35rem;
    margin-left: 0.4rem;
    white-space: nowrap;
}

@keyframes trench-new-pulse {
    0%, 100% { opacity: 1; }
    50%      { opacity: 0.35; }
}

/* Search bar (top right of the header row). Dark field on the gate-input
   pattern; kept narrow so the title still owns the row on desktop while
   flex-wrap gives it the full width on phones. */
.trench-search {
    max-width: 16rem;
    background: #050505;
    border-color: var(--yieldsim-chrome-deep);
    color: #f0dede;
}

.trench-search:focus {
    background: #050505;
    border-color: var(--yieldsim-chrome-bright);
    box-shadow: 0 0 0 0.2rem rgba(179, 0, 0, 0.25);
    color: #f0dede;
}

/* Band dropdowns (header row, left of search): same dark-field treatment
   as the search input. background-color, NOT the background shorthand —
   the shorthand would wipe Bootstrap's background-image caret off the
   select. width:auto sizes each to its widest option instead of
   form-select's default 100%. */
.trench-floor-select {
    width: auto;
    background-color: #050505;
    border-color: var(--yieldsim-chrome-deep);
    color: #f0dede;
}

.trench-floor-select:focus {
    background-color: #050505;
    border-color: var(--yieldsim-chrome-bright);
    box-shadow: 0 0 0 0.2rem rgba(179, 0, 0, 0.25);
    color: #f0dede;
}

/* Cooling rows — the rolling memory (operator request 2026-07-08): coins
   that dropped out of the latest scan linger dimmed for 5 minutes with
   their last-known numbers frozen. Dimming is the "these numbers are old"
   signal; the countdown note under the mint says it in words. */
.trench-row-stale {
    opacity: 0.5;
}

/* Tape-only rows: live (price/Bundled updating) but momentum
   unmeasured — dimmed less than history so the three tiers read at a
   glance: measured > tape > cooling. The gray note under the CA says
   why; gray, not amber, because nothing here is stale. */
.trench-row-tape {
    opacity: 0.72;
}

.trench-tape-note {
    color: #999;
    font-size: 0.7rem;
}

/* Lookup-measured rows: momentum filled by the per-coin GeckoTerminal
   lookup (~1 min behind the chain). Row stays FULL brightness — the
   numbers are real, just a slower freshness class — so only this note
   marks it; gray like the tape note, not amber, because nothing is
   degraded. */
.trench-lookup-note {
    color: #999;
    font-size: 0.7rem;
}

/* The confluence rank score (0–100) the server ordered the row by —
   shown so the ranking is never a mystery (operator directive
   2026-07-09). Same quiet gray as the other under-CA notes. */
.trench-score-note {
    color: #888;
    font-size: 0.68rem;
    font-variant-numeric: tabular-nums;
}

/* Summoned pins (operator request 2026-07-09 late night): solid BLUE —
   deliberately foreign to the board's red/gold/amber language, because
   these rows live outside the normal ruleset. */
.trench-row-pinned {
    outline: 2px solid #3b82f6;
    outline-offset: -2px;
}

.trench-pin-note {
    color: #7fb3ff;
    font-size: 0.7rem;
}

.trench-pin-remove,
.trench-summon-add {
    background: rgba(59, 130, 246, 0.08);
    border: 1px solid #3b82f6;
    color: #7fb3ff;
    border-radius: 3px;
    font-size: 0.68rem;
    padding: 0.05rem 0.4rem;
    cursor: pointer;
}

.trench-pin-remove:hover,
.trench-pin-remove:focus-visible,
.trench-summon-add:hover,
.trench-summon-add:focus-visible {
    background: rgba(59, 130, 246, 0.25);
    color: #fff;
}

.trench-summon-btn {
    border: 1px solid #3b82f6;
    color: #7fb3ff;
    background: rgba(59, 130, 246, 0.08);
    font-size: 0.8rem;
    white-space: nowrap;
}

/* Runner alarm toggle (2026-07-10): quiet gray until armed, then the
   gold of the runner state it announces. Armed is a per-tab state —
   browsers demand the arming tap before any sound may play. */
.trench-alarm-btn {
    border: 1px solid #555;
    color: #999;
    background: rgba(255, 255, 255, 0.04);
    font-size: 0.8rem;
    white-space: nowrap;
}

.trench-alarm-btn:hover,
.trench-alarm-btn:focus-visible {
    color: #ddd;
    background: rgba(255, 255, 255, 0.1);
}

.trench-alarm-btn.trench-alarm-armed {
    border-color: #d4af37;
    color: #ffd700;
    background: rgba(212, 175, 55, 0.12);
}

.trench-summon-btn:hover,
.trench-summon-btn:focus-visible {
    background: rgba(59, 130, 246, 0.22);
    color: #fff;
}

/* The summon dialog — native <dialog>, dark like the board, blue-framed
   like everything else in the summon family. */
.trench-summon-modal {
    background: #101010;
    color: #ddd;
    border: 1px solid #3b82f6;
    border-radius: 6px;
    padding: 1rem;
    width: min(480px, 92vw);
}

.trench-summon-modal::backdrop {
    background: rgba(0, 0, 0, 0.72);
}

.trench-summon-title {
    color: #7fb3ff;
}

.trench-summon-results {
    max-height: 300px;
    overflow-y: auto;
}

.trench-summon-result {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.4rem 0;
    border-bottom: 1px solid #222;
}

.trench-summon-result img {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    flex-shrink: 0;
}

.trench-summon-label {
    flex: 1 1 auto;
    min-width: 0;
}

.trench-summon-onboard {
    color: #888;
    font-size: 0.7rem;
    white-space: nowrap;
}

.trench-stale-note {
    color: #e8b34b; /* same amber as the degraded-source warning: stale-but-alive */
    font-size: 0.72rem; /* was 0.68 — countdown is real content, keep it readable (a11y pass) */
    font-variant-numeric: tabular-nums;
}

/* Bundled column (operator request 2026-07-09) — % of supply still held
   by pump.fun-flagged bundler wallets. Same green/amber/red data-ramp
   exception as the verdict badges, and deliberately LOUD (bigger type,
   filled pill) because this column is the point of the feature: the
   manipulation gauge you read before any market number. */
.trench-bundle-cell {
    white-space: nowrap;
}

.trench-bundle-badge {
    display: inline-block;
    border-radius: 3px;
    font-size: 0.85rem;
    font-weight: 800;
    padding: 0.15rem 0.45rem;
    font-variant-numeric: tabular-nums;
}

.trench-bundle-ok     { background: rgba(76, 195, 138, 0.15); color: #4cc38a; border: 1px solid #2a6e4e; }
.trench-bundle-warn   { background: rgba(232, 179, 75, 0.15); color: #e8b34b; border: 1px solid #7a5c1e; }
.trench-bundle-danger { background: rgba(255, 43, 43, 0.15);  color: #ff6b6b; border: 1px solid #7a1a1a; }

/* The explicit unknown state — same #999-on-black rationale as the mint
   address (clears the 4.5:1 small-text floor). Unknown is not clean. */
.trench-bundle-unknown {
    color: #999;
    font-weight: 700;
}

/* Total holder count sub-line in the Holders column: absolute crowd
   size, muted — the colored delta above it is the live signal. */
.trench-holder-count {
    color: #999;
    font-size: 0.7rem;
    font-variant-numeric: tabular-nums;
    margin-top: 0.1rem;
}

/* Telegram line in the dev rap sheet: a WARNING, not a feature — the
   crew's experts flag a Telegram link as a rug tell, so it renders in
   the caution amber with the link still reachable for inspection. */
.trench-dev-telegram {
    font-size: 0.72rem;
}

.trench-telegram-warning {
    color: #e8b34b;
    font-weight: 700;
}

.trench-dev-telegram-link {
    color: #b08a3e;
    word-break: break-all;
}

/* Graduated rows' pool depth under the BONDED badge. */
.trench-liquidity {
    color: #999;
    font-size: 0.7rem;
    font-variant-numeric: tabular-nums;
    margin-top: 0.1rem;
}

/* Top-holders concentration sub-line in the Holders column: pump.fun's
   own figure on the usual green/amber/red data ramp. */
.trench-top-holders {
    font-size: 0.7rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    margin-top: 0.1rem;
}

.trench-top-ok     { color: #4cc38a; }
.trench-top-warn   { color: #e8b34b; }
.trench-top-danger { color: #ff6b6b; }

/* Snipers sub-line: subordinate to the bundler badge but still readable. */
.trench-bundle-snipers {
    font-size: 0.72rem;
    color: #e8b34b;
    font-variant-numeric: tabular-nums;
}

/* Dev verdict badges — the green/amber/red risk ramp (see file header for
   why these break the all-red rule). */
.trench-badge {
    border-radius: 3px;
    font-size: 0.7rem;
    font-weight: 700;
    padding: 0.1rem 0.4rem;
    white-space: nowrap;
}

.trench-badge-first  { background: rgba(76, 195, 138, 0.15); color: #4cc38a; border: 1px solid #2a6e4e; }
.trench-badge-serial { background: rgba(232, 179, 75, 0.15); color: #e8b34b; border: 1px solid #7a5c1e; }
.trench-badge-rug    { background: rgba(255, 43, 43, 0.15);  color: #ff6b6b; border: 1px solid #7a1a1a; }
.trench-badge-na     { background: rgba(150, 150, 150, 0.12); color: #999;   border: 1px solid #444; }

.trench-dev-cell {
    font-size: 0.78rem;
    line-height: 1.5;
    min-width: 15rem;
}

.trench-dev-wallet {
    font-family: var(--bs-font-monospace);
    color: #888;
}

.trench-dev-social {
    color: var(--yieldsim-chrome-bright);
    word-break: break-all;
}

/* ── Narr — the narrative tape (operator request 2026-07-09) ──────────────
   Layout: single column by default (phones first — the panel stacks under
   the table, before the legend, capped in height so it never buries the
   board). On wide desktops (≥1600px, where the 11-column table leaves
   real negative space) it becomes a right rail. */
.trench-columns {
    display: grid;
    grid-template-columns: 1fr;
    gap: 1rem;
}

/* 1450px, down from 1600 (full-bleed 2026-07-09): with the container
   clamp gone the table has the room to share sooner. */
@media (min-width: 1450px) {
    .trench-columns {
        grid-template-columns: minmax(0, 1fr) 330px;
        align-items: start;
    }

    .trench-narr {
        position: sticky; /* keeps the tape in view while scrolling the board */
        top: 1rem;
    }

    .trench-narr .trench-narr-list {
        max-height: 70vh; /* rail can afford more tape than the phone cap */
    }
}

.trench-narr {
    background: #0d0d0d;
    border: 1px solid var(--yieldsim-chrome-deep);
    border-radius: 4px;
    padding: 0.75rem 0.9rem;
}

.trench-narr-head {
    display: flex;
    align-items: baseline;
    gap: 0.5rem;
    border-bottom: 2px solid var(--yieldsim-chrome-deep);
    padding-bottom: 0.35rem;
    margin-bottom: 0.5rem;
}

.trench-narr-title {
    color: var(--yieldsim-chrome-bright);
    font-weight: 800;
    letter-spacing: 0.06em;
    font-size: 1.05rem;
}

.trench-narr-warning {
    color: #e8b34b; /* the house amber for degraded-but-alive */
    font-size: 0.75rem;
    margin-bottom: 0.4rem;
}

/* The tape itself: compact list, its own scrollbar so a phone reader
   flicks through headlines without losing the board. */
.trench-narr-list {
    list-style: none;
    margin: 0;
    padding: 0;
    max-height: 320px;
    overflow-y: auto;
}

.trench-narr-item {
    padding: 0.4rem 0;
    border-bottom: 1px solid #1c1c1c;
    font-size: 0.82rem;
    line-height: 1.35;
}

.trench-narr-item:last-child {
    border-bottom: 0;
}

.trench-narr-link {
    color: #e6e6e6;
    text-decoration: none;
}

a.trench-narr-link:hover {
    color: var(--yieldsim-chrome-bright);
    text-decoration: underline;
}

/* Lane chips — data classification, muted so the tape reads as text
   first. Crypto gets the chrome tint (the trench's home lane); the rest
   stay gray. */
.trench-narr-chip {
    display: inline-block;
    border-radius: 3px;
    font-size: 0.62rem;
    font-weight: 700;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    padding: 0.05rem 0.3rem;
    margin-right: 0.4rem;
    background: rgba(150, 150, 150, 0.12);
    color: #999;
    border: 1px solid #3a3a3a;
    vertical-align: 0.08em;
}

.trench-narr-chip-crypto {
    background: rgba(139, 0, 0, 0.2);
    color: #e08585;
    border-color: var(--yieldsim-chrome-deep);
}

.trench-narr-meta {
    color: #777;
    font-size: 0.7rem;
    margin-top: 0.1rem;
}

.trench-narr-empty {
    color: #888;
    font-size: 0.8rem;
    padding: 0.5rem 0;
}

.trench-narr-note {
    color: #777;
    font-size: 0.72rem;
    margin: 0.6rem 0 0;
}

/* Fetch-failure banner (styled, never alert() — house rule). */
.trench-error-banner {
    background: rgba(139, 0, 0, 0.18);
    border: 1px solid var(--yieldsim-chrome);
    color: #f0c0c0;
    border-radius: 4px;
    padding: 0.5rem 0.9rem;
}
