/* CYC-9180 — flagged M15 Signal Checklist + SOTA Shadow visual.
 * Color contract: no new colors. Every visible color below resolves through
 * the existing dashboard tokens declared in dashboard.html.
 */

.m15-ga-sota-host {
  display: flex;
  flex: 1 1 100%;
  min-width: 0;
  max-width: 100%;
}

.m15-ga-sota-card {
  position: relative;
  display: grid;
  grid-template-rows: auto auto auto auto auto;
  width: 100%;
  max-width: 100%;
  overflow: hidden;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  color: var(--text);
  font-size: 13px;
  line-height: 1.35;
  font-variant-numeric: tabular-nums;
}

.m15-ga-sota-card::after {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  width: 0;
  background: transparent;
  pointer-events: none;
}

.m15-ga-sota-card-crit {
  border-color: var(--red);
}

.m15-ga-sota-card-warn {
  border-color: var(--yellow);
}

.m15-ga-sota-card-crit::after {
  width: 4px;
  background: var(--red);
}

.m15-ga-sota-card-warn::after {
  width: 2px;
  background: var(--yellow);
}

.m15-ga-sota-card-pulse::after {
  animation: m15-ga-sota-crit-pulse 0.6s ease-in-out infinite;
}

.m15-ga-sota-card-pulse:hover::after,
.m15-ga-sota-card-pulse:focus-within::after {
  animation: none;
  opacity: 1;
}

@keyframes m15-ga-sota-crit-pulse {
  0%,
  100% {
    opacity: 0.45;
  }
  50% {
    opacity: 1;
  }
}

.m15-ga-sota-header,
.m15-ga-sota-footer {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px 10px;
  padding: 8px 12px;
  background: var(--surface2);
}

.m15-ga-sota-header {
  justify-content: space-between;
  border-bottom: 1px solid var(--border);
}

.m15-ga-ev-contract-control {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 850;
  line-height: 1.2;
  white-space: nowrap;
}

.m15-ga-ev-contract-select {
  min-height: 26px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--surface);
  color: var(--text);
  font: inherit;
  font-weight: 900;
  padding: 2px 22px 2px 8px;
}

.m15-ga-ev-contract-select:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

.m15-ga-trade-cockpit {
  display: grid;
  gap: 0;
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
  background: var(--surface);
}

.m15-ga-trade-cockpit-head {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px 10px;
  padding: 7px 12px;
  background: var(--surface2);
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 850;
  text-transform: uppercase;
}

.m15-ga-trade-cockpit-row {
  display: grid;
  grid-template-columns: 38px minmax(305px, 1.2fr) minmax(120px, 0.7fr) minmax(210px, 1fr);
  align-items: center;
  gap: 6px 10px;
  min-width: 0;
  padding: 8px 12px;
  border-top: 1px solid var(--border);
}

.m15-ga-trade-cockpit-symbol {
  color: var(--text);
  font-size: 15px;
  font-weight: 950;
}

.m15-ga-trade-cockpit-form {
  display: grid;
  grid-template-columns: 72px minmax(78px, 1fr) minmax(150px, 1.4fr) 54px 54px;
  align-items: center;
  gap: 5px;
  min-width: 0;
}

.m15-ga-trade-cockpit-select,
.m15-ga-trade-cockpit-input,
.m15-ga-trade-cockpit-time,
.m15-ga-trade-cockpit-button {
  min-height: 28px;
  min-width: 0;
  border: 1px solid var(--border);
  border-radius: 5px;
  background: var(--surface2);
  color: var(--text);
  font: inherit;
  font-size: 11px;
  font-weight: 850;
  letter-spacing: 0;
}

.m15-ga-trade-cockpit-input,
.m15-ga-trade-cockpit-time {
  padding: 3px 6px;
}

.m15-ga-trade-cockpit-button {
  cursor: pointer;
}

.m15-ga-trade-cockpit-button:hover {
  border-color: var(--accent);
}

.m15-ga-trade-cockpit-button.muted {
  color: var(--text-secondary);
}

.m15-ga-trade-cockpit-live,
.m15-ga-trade-cockpit-retrace,
.m15-ga-trade-cockpit-call,
.m15-ga-trade-cockpit-muted {
  min-width: 0;
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 800;
  overflow-wrap: anywhere;
}

.m15-ga-trade-cockpit-percentiles,
.m15-ga-trade-cockpit-ev {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 8px;
  min-width: 0;
}

.m15-ga-trade-cockpit-stat,
.m15-ga-trade-cockpit-ev-row {
  display: inline-flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 3px 5px;
  min-width: 0;
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 800;
}

.m15-ga-trade-cockpit-k,
.m15-ga-trade-cockpit-n {
  color: var(--text-secondary);
}

.m15-ga-trade-cockpit-v,
.m15-ga-trade-cockpit-call {
  color: var(--text);
  font-weight: 950;
}

.m15-ga-trade-cockpit-ci {
  color: var(--text-secondary);
}

.m15-ga-trade-cockpit .positive {
  color: var(--green);
}

.m15-ga-trade-cockpit .negative {
  color: var(--red);
}

.m15-ga-sota-toggle.m15-ga-chip {
  flex: 0 1 auto;
  min-height: var(--control-floor-aa, 24px);
  padding: 2px 0;
  border: 0;
  border-radius: 4px;
  background: transparent;
  color: var(--text);
  font-size: 13px;
  font-weight: 850;
  letter-spacing: 0;
  text-transform: uppercase;
}

.m15-ga-sota-toggle.m15-ga-chip:hover {
  background: transparent;
  color: var(--accent-hover);
}

.m15-ga-sota-warning-summary {
  margin-left: auto;
  font-weight: 800;
  white-space: nowrap;
}

.m15-ga-sota-model-freshness {
  display: inline-flex;
  align-items: center;
  min-width: 0;
  max-width: 100%;
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 2px 6px;
  background: var(--surface);
  color: var(--text-secondary);
  font-size: 10px;
  font-weight: 850;
  line-height: 1.25;
  overflow-wrap: anywhere;
}

.m15-ga-sota-model-freshness-ok {
  border-color: var(--green);
  color: var(--green);
}

.m15-ga-sota-model-freshness-warn {
  border-color: var(--yellow);
  color: var(--yellow);
}

.m15-ga-sota-model-freshness-neutral {
  color: var(--text-secondary);
}

.m15-ga-sota-warning-chips {
  display: inline-flex;
  flex: 1 1 100%;
  flex-wrap: wrap;
  gap: 6px;
  min-width: 0;
  max-width: 100%;
}

.m15-ga-decision-rail {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
  min-width: 0;
  max-width: 100%;
  padding: 8px 10px 10px;
  border-bottom: 1px solid var(--border);
  background: var(--surface);
}

.m15-ga-rail-cell {
  display: grid;
  grid-template-rows: auto auto 1fr;
  gap: 3px;
  min-width: 0;
  padding: 7px 8px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--surface2);
}

.m15-ga-rail-label,
.m15-ga-rail-state {
  color: var(--text);
  font-weight: 900;
  letter-spacing: 0;
  text-transform: uppercase;
}

.m15-ga-rail-label {
  font-size: 11px;
  line-height: 1.15;
}

.m15-ga-rail-sublabel {
  min-width: 0;
  color: var(--text-secondary);
  font-size: 10px;
  font-weight: 750;
  line-height: 1.15;
  overflow-wrap: anywhere;
}

.m15-ga-rail-lines {
  display: grid;
  gap: 4px;
  min-width: 0;
}

.m15-ga-rail-line {
  display: grid;
  grid-template-columns: 28px minmax(0, 1fr);
  gap: 1px 6px;
  min-width: 0;
  align-items: baseline;
  font-size: 11px;
  line-height: 1.18;
}

.m15-ga-rail-symbol {
  color: var(--text);
  font-weight: 900;
}

.m15-ga-rail-state,
.m15-ga-rail-detail {
  min-width: 0;
  overflow-wrap: anywhere;
}

.m15-ga-rail-detail {
  grid-column: 2;
  color: var(--text-secondary);
  font-weight: 700;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.m15-ga-rail-crit .m15-ga-rail-state {
  color: var(--red);
}

.m15-ga-rail-warn .m15-ga-rail-state {
  color: var(--yellow);
}

.m15-ga-rail-ok .m15-ga-rail-state {
  color: var(--green);
}

.m15-ga-rail-muted .m15-ga-rail-state {
  color: var(--text-secondary);
}

/* CYC-906721487 — full condensed rail cell. Carries every field the panel
   below carries (no one-liner, no ellipsis clip), coloured by the shared
   semantic palette so the real signals pop and the numbers stay gray. */
.m15-ga-rail-rich {
  display: grid;
  grid-template-columns: 22px minmax(0, 1fr);
  gap: 2px 6px;
  min-width: 0;
  padding: 4px 0;
  font-size: 10.5px;
  line-height: 1.3;
  border-top: 1px solid var(--border);
}
.m15-ga-rail-lines > .m15-ga-rail-rich:first-child {
  border-top: 0;
  padding-top: 1px;
}
.m15-ga-rail-rich-symbol {
  color: var(--text);
  font-weight: 900;
}
.m15-ga-rail-rich-body {
  display: grid;
  gap: 1px;
  min-width: 0;
}
.m15-ga-rail-rich-line {
  min-width: 0;
  overflow-wrap: anywhere;
  white-space: normal;
}

/* Shared semantic tone palette — identical meaning in every rail cell:
   long=green, short=red, warn(caution/elevated)=amber, muted=gray,
   verdict=italic gray. */
.m15-ga-tone-long { color: var(--green); font-weight: 800; }
.m15-ga-tone-short { color: var(--red); font-weight: 800; }
.m15-ga-tone-warn { color: var(--yellow); font-weight: 800; }
.m15-ga-tone-muted { color: var(--text-secondary); font-weight: 650; }
.m15-ga-tone-verdict { color: var(--text-secondary); font-weight: 600; font-style: italic; }

/* CYC-906721487 — at-a-glance directional shade per symbol-block: a
   non-blocking left accent stripe + faint tint so the trader can scan
   bullish / bearish / neutral across the four cells without reading the text.
   Reflects each cell's directional read (bias / favored / lean), which holds
   even when the cell is blocked or stood down. Tint uses the same color-mix
   token pattern already in this file (see the stand-down card background). */
.m15-ga-rail-mood-long {
  border-left: 3px solid var(--green);
  padding-left: 6px;
  background: color-mix(in srgb, var(--green) 9%, transparent);
}
.m15-ga-rail-mood-short {
  border-left: 3px solid var(--red);
  padding-left: 6px;
  background: color-mix(in srgb, var(--red) 9%, transparent);
}
.m15-ga-rail-mood-neutral {
  border-left: 3px solid var(--text-secondary);
  padding-left: 6px;
  background: color-mix(in srgb, var(--text-secondary) 6%, transparent);
}
/* "Pending" = no directional read because the analysis is not ready yet
   (cold start / restart / waiting for cycle data / stale) — distinct from a
   genuine flat. A DASHED accent + diagonal hatch reads as "data not ready",
   never as a calm grey neutral. */
.m15-ga-rail-mood-pending {
  border-left: 3px dashed var(--text-secondary);
  padding-left: 6px;
  background: repeating-linear-gradient(
    135deg,
    color-mix(in srgb, var(--text-secondary) 9%, transparent) 0 5px,
    transparent 5px 10px
  );
}

.m15-ga-warn-host {
  display: inline-flex;
  min-width: 0;
}

.m15-ga-warn {
  display: inline-flex;
  align-items: center;
  max-width: 100%;
  padding: 2px 7px;
  border: 1px solid currentColor;
  border-radius: 999px;
  background: var(--surface);
  font-size: 12px;
  font-weight: 800;
  line-height: 1.25;
  overflow-wrap: anywhere;
}

.m15-ga-warn-crit {
  color: var(--red);
}

.m15-ga-warn-warn {
  color: var(--yellow);
}

.m15-ga-sota-main-region,
.m15-ga-sota-shadow-region {
  display: grid;
  gap: 6px;
  padding: 10px 12px;
}

.m15-ga-sota-main-row,
.m15-ga-sota-shadow-row {
  display: grid;
  grid-template-columns: 38px minmax(96px, 0.75fr) minmax(130px, 1fr) 54px minmax(116px, 0.65fr);
  align-items: center;
  gap: 6px 10px;
  min-width: 0;
  padding: 7px 8px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--surface2);
}

.m15-ga-edge-state-line {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 6px;
  min-width: 0;
  padding-bottom: 2px;
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 750;
  line-height: 1.25;
}

.m15-ga-edge-state-title,
.m15-ga-edge-state-k {
  color: var(--text-secondary);
  font-weight: 850;
}

.m15-ga-edge-state-pill {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  max-width: 100%;
  padding: 1px 5px;
  border: 1px solid currentColor;
  border-radius: 4px;
  overflow-wrap: anywhere;
}

.m15-ga-edge-state-alive {
  color: var(--green);
}

.m15-ga-edge-state-review {
  color: var(--yellow);
}

.m15-ga-edge-state-arrow {
  color: var(--border-light);
  font-weight: 900;
}

.m15-ga-edge-state-final {
  color: var(--text);
  font-weight: 950;
}

.m15-ga-sota-main-stand-down {
  border-color: var(--red);
  background: color-mix(in srgb, var(--red) 8%, var(--surface2));
}

.m15-ga-sota-symbol {
  color: var(--text);
  font-size: 16px;
  font-weight: 900;
}

.m15-ga-sota-verdict,
.m15-ga-sota-shadow-word {
  display: inline-flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 5px;
  min-width: 0;
  font-weight: 900;
}

.m15-ga-sota-glyph {
  font-weight: 900;
}

.m15-ga-sota-word {
  overflow-wrap: anywhere;
}

.m15-ga-sota-abstain-reason {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 3px;
  width: fit-content;
  max-width: 100%;
  min-width: 0;
  padding: 2px 6px;
  border: 1px solid currentColor;
  border-radius: 4px;
  color: var(--yellow);
  font-size: 11px;
  font-weight: 850;
  line-height: 1.2;
  overflow-wrap: anywhere;
}

.m15-ga-sota-shadow-row > .m15-ga-sota-abstain-reason {
  grid-column: 3 / 5;
  grid-row: 1;
}

.m15-ga-sota-abstain-reason-k {
  color: var(--text-secondary);
  font-weight: 750;
}

.m15-ga-sota-tail {
  flex: 1 1 100%;
  color: var(--text-secondary);
  font-size: 11px;
  font-style: italic;
  font-weight: 650;
}

.m15-ga-sota-main-lean-long .m15-ga-sota-verdict,
.m15-ga-sota-main-lean-short .m15-ga-sota-verdict {
  color: var(--green);
}

.m15-ga-sota-main-tie .m15-ga-sota-verdict {
  color: var(--yellow);
}

.m15-ga-sota-main-stand-down .m15-ga-sota-verdict {
  color: var(--red);
}

.m15-ga-sota-main-none .m15-ga-sota-verdict,
.m15-ga-sota-shadow-missing {
  color: var(--text-secondary);
}

.m15-ga-sota-conviction {
  position: relative;
  display: block;
  height: 12px;
  min-width: 0;
  overflow: hidden;
  border: 1px solid var(--border-light);
  border-radius: 999px;
  background: var(--surface3);
}

.m15-ga-sota-conviction-fill {
  position: absolute;
  inset: 0 auto 0 0;
  width: var(--m15-ga-conviction-pct, 0%);
  background: var(--green);
}

/* CYC-906721487 — the conviction fill is coloured by the LEAN direction in
   every state, and its width tracks the lean strength (--m15-ga-conviction-pct).
   STAND DOWN no longer freezes it to a 4px red sliver: the trader still sees
   which way the evidence leans and how strongly; the stand-down is conveyed by
   the dimmed fill plus the verdict word + glyph. */
.m15-ga-sota-lean-long .m15-ga-sota-conviction-fill {
  background: var(--green);
}
.m15-ga-sota-lean-short .m15-ga-sota-conviction-fill {
  background: var(--red);
}
.m15-ga-sota-lean-tie .m15-ga-sota-conviction-fill,
.m15-ga-sota-lean-none .m15-ga-sota-conviction-fill {
  background: var(--yellow);
}

.m15-ga-sota-main-stand-down .m15-ga-sota-conviction-fill {
  opacity: 0.5;
}

.m15-ga-sota-percent,
.m15-ga-sota-tally,
.m15-ga-sota-ci-meta,
.m15-ga-sota-footer {
  color: var(--text-secondary);
  font-weight: 750;
}

.m15-ga-sota-percent {
  text-align: right;
}

.m15-ga-sota-percent.muted {
  color: var(--text-secondary);
}

.m15-ga-sota-tally {
  display: inline-flex;
  justify-content: flex-start;
  gap: 5px;
  min-width: 0;
  white-space: nowrap;
}

.m15-ga-sota-tally .favored {
  color: var(--green);
  font-weight: 900;
}

.m15-ga-sota-row-clock {
  grid-column: 2 / -1;
  color: var(--text-secondary);
  font-size: 11px;
}

.m15-ga-maturity-strip {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 2px 5px;
  min-width: 0;
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 650;
  line-height: 1.25;
  white-space: normal;
}

.m15-ga-maturity-label {
  font-weight: 750;
}

.m15-ga-maturity-tier {
  color: var(--yellow);
  font-weight: 850;
}

.m15-ga-maturity-unavailable {
  color: var(--text-secondary);
}

.m15-ga-maturity-sep {
  color: var(--border-light);
}

.m15-ga-state-clock-unavailable {
  color: var(--text-secondary);
}

.m15-ga-symbol-priors {
  grid-column: 2 / -1;
  display: grid;
  gap: 2px;
  min-width: 0;
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 600;
  line-height: 1.25;
  overflow-wrap: anywhere;
}

.m15-ga-symbol-prior-line {
  display: block;
  min-width: 0;
}

.m15-ga-exit-guidance-substat {
  display: flex;
  flex-wrap: wrap;
  gap: 0 4px;
  min-width: 0;
  padding-left: 8px;
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 700;
  line-height: 1.25;
  overflow-wrap: anywhere;
}

.m15-ga-exit-guidance-headline {
  flex-basis: 100%;
  display: inline-flex;
  flex-wrap: wrap;
  gap: 0 4px;
  min-width: 0;
  align-items: center;
  font-size: 12px;
  font-weight: 950;
  line-height: 1.25;
}

.m15-ga-label-hold,
.m15-ga-ev-positive {
  color: var(--green);
}

.m15-ga-label-exit,
.m15-ga-ev-negative {
  color: var(--red);
}

.m15-ga-continuation-rate,
.m15-ga-peak-horizon,
.m15-ga-retrace,
.m15-ga-label-accuracy {
  color: var(--text);
  font-weight: 850;
}

.m15-ga-continuation-rate {
  color: var(--green);
}

.m15-ga-retrace {
  color: var(--yellow);
}

.m15-ga-label-accuracy {
  color: var(--green);
}

.m15-ga-label-accuracy-degraded {
  color: var(--red);
}

.m15-ga-exit-guidance-group {
  grid-column: 2 / -1;
  display: grid;
  gap: 2px;
  min-width: 0;
}

.m15-ga-exit-guidance-row {
  display: grid;
  grid-template-columns: 34px minmax(0, 1fr);
  gap: 5px;
  align-items: start;
  min-width: 0;
  color: var(--text-secondary);
  font-size: 11px;
  line-height: 1.25;
}

.m15-ga-exit-guidance-horizon {
  color: var(--text-secondary);
  font-weight: 850;
}

.m15-ga-symbol-prior-hit,
.m15-ga-symbol-prior-best {
  color: var(--text);
  font-weight: 850;
}

.m15-ga-sota-divider {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 6px;
  padding: 7px 12px;
  border-top: 1px solid var(--surface3);
  border-bottom: 1px solid var(--surface3);
  background: var(--surface);
}

.m15-ga-sota-divider > span {
  color: var(--text);
  font-size: 11px;
  font-weight: 900;
  letter-spacing: 0;
  text-transform: uppercase;
}

.m15-ga-sota-divider > small {
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 700;
}

.m15-ga-sota-shadow-row {
  grid-template-rows: auto auto;
}

.m15-ga-sota-shadow-muted {
  opacity: 0.4;
}

.m15-ga-sota-agreement,
.m15-ga-sota-edge {
  display: inline-flex;
  align-items: center;
  justify-content: flex-start;
  min-height: 22px;
  width: fit-content;
  max-width: 100%;
  padding: 2px 7px;
  border: 1px solid currentColor;
  border-radius: 4px;
  font-size: 11px;
  font-weight: 900;
  line-height: 1.2;
  overflow-wrap: anywhere;
}

.m15-ga-sota-agreement {
  grid-column: 5;
  grid-row: 2;
}

.m15-ga-sota-edge {
  grid-column: 2;
  grid-row: 2;
}

.m15-ga-sota-ci-copy {
  color: var(--text);
  font-weight: 800;
}

.m15-ga-sota-ci-rail {
  position: relative;
  display: block;
  height: 28px;
  min-width: 120px;
}

.m15-ga-sota-ci-track,
.m15-ga-sota-ci-segment,
.m15-ga-sota-ci-baseline,
.m15-ga-sota-ci-point {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

.m15-ga-sota-ci-track {
  left: 0;
  right: 0;
  height: 4px;
  border-radius: 999px;
  background: var(--surface3);
}

.m15-ga-sota-ci-segment {
  left: var(--m15-ga-ci-lo, 0%);
  width: var(--m15-ga-ci-width, 0%);
  height: 8px;
  border-radius: 999px;
  background: var(--surface3);
  outline: 1px solid var(--border-light);
}

.m15-ga-sota-ci-segment.m15-ga-sota-ci-clear {
  background: var(--green-subtle);
  outline-color: var(--green);
}

.m15-ga-sota-ci-baseline {
  left: var(--m15-ga-ci-base, 0%);
  width: 2px;
  height: 18px;
  background: var(--accent);
}

.m15-ga-sota-ci-point {
  left: var(--m15-ga-ci-point, 0%);
  width: 12px;
  height: 12px;
  border: 2px solid var(--surface);
  border-radius: 50%;
  background: var(--text);
}

.m15-ga-sota-ci-segment:focus-visible,
.m15-ga-sota-ci-baseline:focus-visible,
.m15-ga-sota-ci-point:focus-visible {
  outline: 2px solid var(--accent-hover);
  outline-offset: 3px;
}

/* CYC-906721371 — at-a-glance p(correct) heat, SAMPLE-WEIGHTED.
   Two signals fold into one colour so the trader reads strength AND trust at once:
   • --m15-ga-sota-heat (0..1, per row in renderSotaShadowRow::sotaProbHeat) =
     baseline-anchored STRENGTH. 0 = far BELOW the signal's own empirical baseline,
     0.5 = AT baseline, 1 = far above. Drives a continuous red -> amber -> green hue
     (oklch interpolation of the existing --red/--green tokens runs through orange /
     amber at the midpoint), so the strongest priors read greenest and weak /
     below-baseline ones read red.
   • --m15-ga-sota-conf (0..1, per row) = CONFIDENCE = how TIGHT the Wilson interval
     is (it widens as the sample shrinks). Low confidence mixes the hue toward the
     neutral --text-secondary token, so a high p(correct) on a THIN sample reads
     MUTED rather than bold — "trust it less when the sample is small", encoded from
     the interval width itself rather than a guessed sample-size cutoff.
   The .m15-ga-sota-sig class (Wilson interval clears the baseline = statistically
   real) adds a matching glow and enlarges the dot so genuine priors pop. Colour is
   an enhancement on top of the number, never the sole signal (a11y). Token-only —
   no raw hsl/rgb/hex (enforced by the CYC-9180 stylesheet gate). */
.m15-ga-sota-shadow-row {
  --m15-ga-sota-heat-color: color-mix(
    in oklch,
    color-mix(in oklch, var(--red), var(--green) calc(var(--m15-ga-sota-heat, 0.5) * 100%)),
    var(--text-secondary) calc((1 - var(--m15-ga-sota-conf, 1)) * 100%)
  );
}

.m15-ga-sota-ci-point {
  background: var(--m15-ga-sota-heat-color);
}

.m15-ga-sota-ci-copy b {
  color: var(--m15-ga-sota-heat-color);
}

.m15-ga-sota-shadow-row.m15-ga-sota-sig .m15-ga-sota-ci-point {
  width: 15px;
  height: 15px;
  box-shadow: 0 0 9px 1px color-mix(in srgb, var(--m15-ga-sota-heat-color), transparent 22%);
}

.m15-ga-sota-shadow-row.m15-ga-sota-sig .m15-ga-sota-ci-copy b {
  text-shadow: 0 0 9px color-mix(in srgb, var(--m15-ga-sota-heat-color), transparent 50%);
}

.m15-ga-sota-ci-meta {
  grid-column: 3 / -1;
  display: flex;
  flex-wrap: wrap;
  gap: 4px 9px;
  font-size: 11px;
}

.m15-ga-sota-ci-meta .m15-ga-maturity-strip {
  flex: 1 1 100%;
}

.m15-ga-sota-horizon-matrix {
  display: grid;
  gap: 3px;
  min-width: 0;
  padding: 6px 8px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--surface);
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 750;
  line-height: 1.25;
}

.m15-ga-sota-horizon-head,
.m15-ga-sota-horizon-row {
  display: grid;
  grid-template-columns:
    minmax(54px, 0.6fr)
    minmax(62px, 0.75fr)
    minmax(66px, 0.75fr)
    minmax(76px, 0.8fr)
    minmax(126px, 1.3fr)
    minmax(70px, 0.8fr)
    minmax(82px, 0.8fr)
    minmax(168px, 1.6fr);
  align-items: center;
  gap: 5px;
  min-width: 0;
}

.m15-ga-sota-horizon-head {
  color: var(--text);
  font-size: 10px;
  font-weight: 900;
  text-transform: uppercase;
}

.m15-ga-sota-horizon-row {
  padding: 4px 0;
  border-top: 1px solid var(--border);
}

.m15-ga-sota-horizon-row > span,
.m15-ga-sota-horizon-head > span {
  min-width: 0;
  overflow-wrap: anywhere;
}

.m15-ga-sota-horizon-selected .m15-ga-sota-horizon-label {
  color: var(--accent);
  font-weight: 950;
}

.m15-ga-sota-horizon-action {
  color: var(--text);
  font-weight: 900;
}

.m15-ga-sota-horizon-source {
  font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);
  font-size: 10px;
}

.m15-ga-sota-action-detail {
  grid-column: 2 / -1;
  min-width: 0;
  color: var(--accent);
  font-size: 11px;
  font-weight: 800;
  line-height: 1.25;
  overflow-wrap: anywhere;
}

.m15-ga-pro-stat-ledger {
  display: grid;
  gap: 0;
  min-width: 0;
  border-top: 1px solid var(--border);
  background: var(--surface);
}

.m15-ga-pro-stat-summary {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 6px 10px;
  min-width: 0;
  padding: 8px 12px;
  color: var(--text);
  cursor: pointer;
  font-size: 11px;
  font-weight: 900;
  letter-spacing: 0;
  text-transform: uppercase;
}

.m15-ga-pro-stat-summary small {
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 750;
  text-transform: none;
}

.m15-ga-pro-stat-body {
  display: grid;
  gap: 6px;
  min-width: 0;
  padding: 0 12px 10px;
}

.m15-ga-pro-stat-symbol-row {
  display: grid;
  grid-template-columns: 38px minmax(120px, 0.8fr) minmax(220px, 1.2fr) minmax(88px, 0.4fr);
  gap: 5px 9px;
  align-items: start;
  min-width: 0;
  padding: 7px 8px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--surface2);
}

.m15-ga-pro-stat-symbol {
  color: var(--text);
  font-size: 15px;
  font-weight: 900;
}

.m15-ga-pro-stat-tuple,
.m15-ga-pro-stat-primary,
.m15-ga-pro-stat-rollups,
.m15-ga-pro-stat-horizon-main {
  display: flex;
  flex-wrap: wrap;
  gap: 3px 6px;
  min-width: 0;
}

.m15-ga-pro-stat-tuple {
  display: grid;
  gap: 2px;
}

.m15-ga-pro-stat-status {
  color: var(--text);
  font-size: 11px;
  font-weight: 900;
  text-transform: uppercase;
}

.m15-ga-pro-stat-key,
.m15-ga-pro-stat-ci,
.m15-ga-pro-stat-horizon-ci,
.m15-ga-pro-stat-source,
.m15-ga-pro-stat-empty {
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 700;
  line-height: 1.25;
  overflow-wrap: anywhere;
}

.m15-ga-pro-stat-metric {
  display: inline-flex;
  align-items: baseline;
  gap: 3px;
  min-width: 0;
  color: var(--text);
  font-size: 11px;
  line-height: 1.25;
}

.m15-ga-pro-stat-k {
  color: var(--text-secondary);
  font-weight: 750;
}

.m15-ga-pro-stat-v {
  font-weight: 900;
}

.m15-ga-pro-stat-good {
  color: var(--green);
}

.m15-ga-pro-stat-bad {
  color: var(--red);
}

.m15-ga-pro-stat-muted {
  color: var(--text-secondary);
}

.m15-ga-pro-stat-horizons {
  grid-column: 2 / -1;
  min-width: 0;
  color: var(--text-secondary);
  font-size: 11px;
}

.m15-ga-pro-stat-horizons summary {
  width: fit-content;
  max-width: 100%;
  cursor: pointer;
  color: var(--accent);
  font-weight: 850;
  overflow-wrap: anywhere;
}

.m15-ga-pro-stat-horizon-row {
  display: grid;
  grid-template-columns: 34px minmax(160px, 0.65fr) minmax(90px, 0.35fr) minmax(0, 1fr);
  gap: 4px 8px;
  min-width: 0;
  padding: 5px 0;
  border-top: 1px solid var(--border);
}

.m15-ga-pro-stat-horizon {
  color: var(--text);
  font-weight: 900;
}

.m15-ga-pro-stat-rollup {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 2px 5px;
  min-width: 0;
  padding-right: 6px;
}

.m15-ga-pro-stat-rollup-label {
  color: var(--text-secondary);
  font-weight: 850;
}

.m15-ga-pro-stat-source {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 10px;
}

.m15-ga-sota-agree {
  color: var(--green);
}

.m15-ga-sota-disagree {
  color: var(--red);
}

.m15-ga-sota-warn {
  color: var(--yellow);
}

.m15-ga-sota-neutral,
.m15-ga-sota-muted {
  color: var(--text-secondary);
}

.m15-ga-sota-footer {
  justify-content: flex-start;
  gap: 4px 12px;
  border-top: 1px solid var(--border);
  font-size: 11px;
}

.m15-ga-sota-footer > span + span::before {
  content: "|";
  margin-right: 12px;
  color: var(--border-light);
}

.m15-ga-sota-warning-detail {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  max-width: 100%;
}

.m15-sota-check-page {
  min-height: 100vh;
  padding: 18px;
  background: var(--bg);
  color: var(--text);
}

.m15-sota-check-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 14px;
}

.m15-sota-check-head h1 {
  font-size: 18px;
  letter-spacing: 0;
}

.m15-sota-check-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(420px, 1fr));
  gap: 14px;
}

.m15-sota-check-case {
  display: grid;
  gap: 8px;
  min-width: 0;
}

.m15-sota-check-label {
  color: var(--text-secondary);
  font-size: 12px;
  font-weight: 850;
  text-transform: uppercase;
}

.m15-sota-check-case.narrow {
  max-width: 390px;
}

@media (max-width: 900px) {
  .m15-ga-decision-rail {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .m15-ga-sota-header {
    align-items: flex-start;
    flex-direction: column;
    flex-wrap: nowrap;
    min-width: 0;
  }

  .m15-ga-sota-header > * {
    max-width: 100%;
    min-width: 0;
  }

  .m15-ga-chip-host.m15-ga-sota-host,
  .m15-ga-sota-toggle,
  .m15-ga-sota-warning-summary,
  .m15-ga-sota-model-freshness {
    width: 100%;
  }

  .m15-ga-sota-warning-chips {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    width: 100%;
  }

  .m15-ga-sota-warning-chips .m15-ga-warn-host,
  .m15-ga-sota-warning-chips .m15-ga-warn {
    display: flex;
    width: 100%;
    max-width: 100%;
    min-width: 0;
  }

  .m15-ga-sota-warning-chips .m15-ga-warn {
    border-radius: 6px;
    white-space: normal;
  }

  .m15-ga-ev-contract-control {
    display: flex;
    flex-wrap: wrap;
    width: 100%;
    white-space: normal;
  }

  .m15-ga-ev-contract-select {
    max-width: 100%;
  }

  .m15-ga-sota-header > .m15-ga-explain-trigger {
    margin-left: 0;
  }

  .m15-ga-trade-cockpit-row {
    grid-template-columns: 34px minmax(0, 1fr);
  }

  .m15-ga-trade-cockpit-form,
  .m15-ga-trade-cockpit-live,
  .m15-ga-trade-cockpit-percentiles,
  .m15-ga-trade-cockpit-retrace,
  .m15-ga-trade-cockpit-call,
  .m15-ga-trade-cockpit-ev,
  .m15-ga-trade-cockpit-muted {
    grid-column: 2 / -1;
  }

  .m15-ga-trade-cockpit-form {
    grid-template-columns: 68px minmax(76px, 1fr) minmax(128px, 1.4fr);
  }

  .m15-ga-trade-cockpit-button {
    min-width: 54px;
  }

  .m15-ga-sota-warning-summary {
    margin-left: 0;
  }

  .m15-ga-sota-main-row,
  .m15-ga-sota-shadow-row {
    grid-template-columns: 34px minmax(86px, 0.75fr) minmax(120px, 1fr);
  }

  .m15-ga-pro-stat-symbol-row,
  .m15-ga-pro-stat-horizon-row {
    grid-template-columns: 34px minmax(0, 1fr);
  }

  .m15-ga-pro-stat-primary,
  .m15-ga-pro-stat-ci,
  .m15-ga-pro-stat-horizons,
  .m15-ga-pro-stat-horizon-main,
  .m15-ga-pro-stat-horizon-ci,
  .m15-ga-pro-stat-rollups {
    grid-column: 2 / -1;
  }

  .m15-ga-sota-percent,
  .m15-ga-sota-tally,
  .m15-ga-sota-agreement,
  .m15-ga-sota-edge,
  .m15-ga-sota-ci-copy,
  .m15-ga-sota-ci-meta,
  .m15-ga-sota-row-clock,
  .m15-ga-symbol-priors,
  .m15-ga-sota-action-detail {
    grid-column: 2 / -1;
  }

  .m15-ga-sota-agreement,
  .m15-ga-sota-edge {
    grid-row: auto;
  }

  .m15-ga-sota-ci-rail {
    min-width: 120px;
  }

  .m15-ga-sota-horizon-head {
    display: none;
  }

  .m15-ga-sota-horizon-row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .m15-ga-sota-horizon-source {
    grid-column: 1 / -1;
  }

  .m15-sota-check-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 620px) {
  .m15-ga-decision-rail {
    grid-template-columns: minmax(0, 1fr);
  }

  .m15-ga-trade-cockpit-form {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .m15-ga-trade-cockpit-button {
    width: 100%;
  }
}
