/* ============================================================================
   UIX-1: the Monthly P&L statement surface.
   records/276-uix-1.md and amendment AM-1.

   Every rule here is scoped under #rev-pnl-view. Nothing is declared on :root,
   so no token in this file can reach the receivables, payables or health rooms,
   and styles.css keeps every rule it had: this file only ever overrides by
   cascade order, because index.html links it after styles.css.

   Dark derives under html.dark #rev-pnl-view, matching the app's own theme
   switch (styles.css:62). prefers-color-scheme alone would fight the toggle.
   ============================================================================ */

#rev-pnl-view,
#room-ap {
  /* Arithmetic colour. Teal takes money in, rust takes money out. These are a
     DISTINCT pair from the delta chips below, which keep the app's own
     --positive and --risk: no token is shared between the two systems, so a
     reader never has to ask which meaning a colour is carrying. The glyph in
     the operator column says the same thing without colour, which is what makes
     the column legible in greyscale and to a colour-blind reader. */
  --pnl-op-in: oklch(0.42 0.10 200);
  --pnl-op-out: oklch(0.47 0.13 40);
  --pnl-op-in-edge: oklch(0.55 0.10 200);
  --pnl-op-out-edge: oklch(0.58 0.13 40);

  /* Muted is a measured value, not a mood: 5.6:1 on the white cell background,
     because a ratio row a reader has to lean in for is a ratio row they skip. */
  --pnl-muted: #5c635e;
  --pnl-figure-size: 13.5px;
  --pnl-label-width: 330px;
  --pnl-operator-width: 20px;
  --pnl-stack: Inter, system-ui, "Segoe UI", sans-serif;
  /* One depth scale for every nested P&L row. */
  /* One complete hierarchy scale: every deeper row is lighter and less emphatic. */
  /* The depth scale is theme-specific: the transparent row tint exposes the app surface,
     so each ink set must be measured against that theme's actual row surface. */
  --pnl-indent-step: 17px;
  --pnl-ink-0: hsl(154 22% 11.0%);
  --pnl-ink-1: hsl(154 22% 16.0%);
  --pnl-ink-2: hsl(154 22% 21.0%);
  --pnl-ink-3: hsl(154 22% 26.0%);
  --pnl-ink-4: hsl(154 22% 31.0%);
  --pnl-ink-5: hsl(154 22% 36.0%);
  --pnl-open-month-ink: #8a4700;
  --pnl-level-0-weight: 700;
  --pnl-level-1-weight: 620;
  --pnl-level-2-weight: 560;
  --pnl-level-3-weight: 500;
  --pnl-level-4-weight: 450;
  --pnl-level-5-weight: 400;
  /* Depth is carried by ink, weight and indent. The green wash that used to band the top
     three levels competed with the ink ladder for the same signal and won, so the ladder was
     invisible under it. One channel, not two. */
  --pnl-level-0-tint: transparent;
  --pnl-level-1-tint: transparent;
  --pnl-level-2-tint: transparent;
  --pnl-level-3-tint: transparent;
  --pnl-level-4-tint: transparent;
  --pnl-level-5-tint: transparent;
}
html.dark #rev-pnl-view,
html.dark #room-ap {
  --pnl-op-in: oklch(0.84 0.08 200);
  --pnl-op-out: oklch(0.83 0.11 40);
  --pnl-op-in-edge: oklch(0.72 0.09 200);
  --pnl-op-out-edge: oklch(0.72 0.12 40);
  --pnl-muted: #a4b5ae;
  --pnl-ink-0: hsl(154 22% 94.0%);
  --pnl-ink-1: hsl(154 22% 88.0%);
  --pnl-ink-2: hsl(154 22% 82.0%);
  --pnl-ink-3: hsl(154 22% 76.0%);
  --pnl-ink-4: hsl(154 22% 70.0%);
  --pnl-ink-5: hsl(154 22% 64.0%);
  --pnl-open-month-ink: #f59e0b;
}

/* ---- sub-tabs: five readings of one statement ---------------------------- */
#rev-pnl-view .rev-pnl-subtabs,
#room-ap .rev-pnl-subtabs {
  display: flex;
  flex-wrap: wrap;
  gap: 2px;
  align-self: flex-start;
  margin: 0 0 var(--space-3);
  padding: 3px;
  border: 1px solid var(--line);
  border-radius: 9px;
  background: var(--surface-2);
  width: fit-content;
  max-width: 100%;
}
#rev-pnl-view .rev-pnl-subtabs a,
#room-ap .rev-pnl-subtabs a {
  padding: 6px 13px;
  border: 1px solid transparent;
  border-radius: 6px;
  color: var(--pnl-muted);
  font-family: var(--pnl-stack);
  font-size: var(--text-xs);
  font-weight: 500;
  text-decoration: none;
  white-space: nowrap;
}
/* Hover and current have to be told apart at a glance, so only the current tab carries the
   accent underline: pointer feedback is a lift, selection is a mark. */
#rev-pnl-view .rev-pnl-subtabs a:hover,
#room-ap .rev-pnl-subtabs a:hover { color: var(--ink); background: color-mix(in srgb, var(--raised) 60%, transparent); }
#rev-pnl-view .rev-pnl-subtabs a[aria-current="page"],
#room-ap .rev-pnl-subtabs a[aria-current="page"] {
  position: relative;
  border-color: var(--line);
  background: var(--raised);
  color: var(--accent-ink);
  font-weight: 600;
}
#rev-pnl-view .rev-pnl-subtabs a[aria-current="page"]::after,
#room-ap .rev-pnl-subtabs a[aria-current="page"]::after {
  content: "";
  position: absolute;
  left: 11px;
  right: 11px;
  bottom: 3px;
  height: 2px;
  border-radius: 2px;
  background: var(--accent);
}

/* ---- caption: the quietest thing on the screen --------------------------- */
#rev-pnl-view .rev-pnl-caption {
  margin: 0;
  color: var(--pnl-muted);
  font-size: var(--text-2xs);
}
#rev-pnl-view .rev-pnl-footnote {
  margin: var(--space-2) 0 0;
  max-width: 92ch;
  color: var(--pnl-muted);
  font-size: var(--text-2xs);
  line-height: 1.5;
}
#rev-pnl-view .rev-pnl-footnote[hidden] { display: none; }
#rev-pnl-view .rev-pnl-hint {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  align-items: center;
  margin: 0 0 var(--space-3);
  color: var(--pnl-muted);
  font-size: var(--text-2xs);
}
#rev-pnl-view .rev-pnl-explanations { margin: var(--space-2) 0 0; }
#rev-pnl-view .rev-pnl-explanation { margin: var(--space-1) 0; color: var(--pnl-muted); font-size: var(--text-2xs); line-height: 1.45; }
#rev-pnl-view .rev-sheet1 thead th.has-exception .rev-pnl-coverage-marker::after { content: " Open month figures provisional"; font-size: 10px; font-weight: 500; letter-spacing: 0; text-transform: none; }
#rev-pnl-view .rev-sheet1 thead th.has-unproven { background: color-mix(in srgb, var(--warn) 12%, var(--raised)); }
#rev-pnl-view .rev-pnl-unproven-marker {
  display: inline-flex;
  gap: 3px;
  align-items: center;
  margin-left: 5px;
  color: var(--warn);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: none;
}
/* A disabled control says why beside itself, never only on hover. */
#rev-pnl-view .rev-pnl-reason {
  border-left: 2px solid var(--warn);
  padding-left: 8px;
  max-width: 60ch;
  color: var(--ink-soft);
  font-size: var(--text-2xs);
  line-height: 1.45;
}
#rev-pnl-view .rev-pnl-reason[hidden] { display: none; }
#rev-pnl-view .rev-pnl-control-group { display: inline-flex; gap: 2px; }
#rev-pnl-view .rev-pnl-control-group .control[aria-pressed="true"] {
  border-color: var(--accent);
  background: var(--accent-soft);
  color: var(--accent-ink);
  font-weight: 600;
}
#rev-pnl-view .rev-pnl-control-group .control[disabled] { opacity: .5; cursor: not-allowed; }

/* ---- the sheet: one family, figures tabular, ratios muted and upright ----- */
#rev-pnl-view .rev-sheet1 { font-family: var(--pnl-stack); }
#rev-pnl-view .rev-sheet1 td.num,
#rev-pnl-view .rev-sheet1 .rev-pnl-figure {
  font-family: var(--pnl-stack);
  font-size: var(--pnl-figure-size);
  font-variant-numeric: lining-nums tabular-nums;
  font-feature-settings: "tnum" 1, "lnum" 1;
  letter-spacing: -.005em;
}
#rev-pnl-view .rev-sheet1 .rev-pnl-figure { color: var(--ink); }
#rev-pnl-view .rev-sheet1 .rev-pnl-figure.is-negative { color: var(--risk); }
#rev-pnl-view .rev-sheet1 .rev-sheet-percent td .rev-pnl-figure,
#rev-pnl-view .rev-sheet1 .rev-pnl-muted { color: var(--pnl-muted); font-style: normal; font-weight: 400; }
#rev-pnl-view .rev-sheet1 .rev-pnl-nil {
  border-bottom: 1px dotted var(--line);
  color: var(--pnl-muted);
  cursor: help;
}
#rev-pnl-view .rev-sheet1 .rev-pnl-suspect-marker,
#rev-pnl-view .rev-sheet1 .rev-pnl-coverage-marker { margin-left: 2px; color: var(--warn); cursor: help; }

/* Two header rows: the quarter band, then the months and the window block. */
#rev-pnl-view .rev-sheet1 thead tr.rev-pnl-quarter-row th { top: 0; height: 30px; }
#rev-pnl-view .rev-sheet1 thead tr.rev-pnl-month-row th { top: 30px; }
#rev-pnl-view .rev-sheet1 thead th.qhead,
#rev-pnl-view .rev-sheet1 thead th.sumhead {
  color: var(--ink);
  font-size: var(--text-2xs);
  font-weight: 600;
  letter-spacing: .07em;
  text-align: center;
  text-transform: uppercase;
}
#rev-pnl-view .rev-sheet1 thead th.qhead,
#rev-pnl-view .rev-sheet1 thead th.sumhead { border-left: 1px solid color-mix(in srgb, var(--ink) 16%, var(--line)); }
#rev-pnl-view .rev-sheet1 thead tr.rev-pnl-quarter-row th {
  background: color-mix(in srgb, var(--accent) 12%, var(--raised));
  color: var(--accent-ink);
}
#rev-pnl-view .rev-sheet1 thead tr.rev-pnl-month-row th {
  background: color-mix(in srgb, var(--accent) 7%, var(--raised));
  color: var(--accent-ink);
}
/* Amber has exactly one meaning: this month's books are still open. */
#rev-pnl-view .rev-sheet1 thead tr.rev-pnl-month-row th.has-exception {
  background: color-mix(in srgb, var(--warn) 14%, var(--raised));
  color: var(--pnl-open-month-ink);
}
#rev-pnl-view .rev-sheet1 .rev-pnl-quarter-toggle {
  border: 0;
  border-radius: 5px;
  padding: 2px 6px;
  background: none;
  color: inherit;
  font: inherit;
  cursor: pointer;
}
#rev-pnl-view .rev-sheet1 .rev-pnl-quarter-toggle:hover { background: var(--surface-2); }

/* ---- the signature: one operator column and neutral arithmetic rules ------ */
#rev-pnl-view .rev-sheet1 .rev-pnl-op {
  font-size: var(--pnl-figure-size);
  font-weight: 600;
  line-height: 1;
}
#rev-pnl-view .rev-sheet1 .rev-pnl-op[data-op="+"] { color: var(--ink-soft); }
#rev-pnl-view .rev-sheet1 .rev-pnl-op[data-op="−"] { color: var(--ink-soft); }
#rev-pnl-view .rev-sheet1 .rev-pnl-op[data-op="="] { color: var(--ink-soft); }
#rev-pnl-view .rev-sheet1 tbody tr[data-op] th:first-child { border-left: 3px solid transparent; }
#rev-pnl-view .rev-sheet1 tbody tr[data-op="+"] th:first-child { border-left-color: var(--line); }
#rev-pnl-view .rev-sheet1 tbody tr[data-op="−"] th:first-child { border-left-color: var(--line); }
#rev-pnl-view .rev-sheet1 tbody tr[data-op="="] > * { border-top: 1.5px solid var(--ink-soft); }
#rev-pnl-view .rev-sheet1 tbody tr.rev-pnl-result > * { font-weight: 600; }

/* MISX-1: the tab total's recipe names the statement rows it adds on its own line. */
#rev-pnl-view .rev-sheet1 .rev-pnl-recipe {
  display: block;
  margin-top: var(--space-0-5);
  color: var(--pnl-muted);
  font-size: var(--text-2xs);
  font-weight: 400;
  letter-spacing: normal;
  text-transform: none;
}
#rev-pnl-view .rev-pnl-recipe-line {
  margin: var(--space-2) 0 0;
  color: var(--ink);
  font-family: var(--pnl-stack);
  font-size: var(--text-xs);
}
#rev-pnl-view .rev-pnl-recipe-line[hidden] { display: none; }
#rev-pnl-view .rev-sheet1 tbody tr.rev-pnl-result:focus { outline: 2px solid var(--accent); outline-offset: -2px; }
#rev-pnl-view .rev-pnl-why {
  display: inline-grid;
  place-items: center;
  width: 17px;
  height: 17px;
  margin-left: 6px;
  border: 1px solid var(--line);
  border-radius: 999px;
  color: var(--pnl-muted);
  font-size: var(--text-2xs);
  cursor: help;
}

/* ---- the change chips keep the app's own two meanings -------------------- */
#rev-pnl-view .rev-pnl-chip { font-size: var(--text-xs); font-weight: 500; }
#rev-pnl-view .rev-pnl-chip.is-up { color: var(--positive); }
#rev-pnl-view .rev-pnl-chip.is-down { color: var(--risk); }
#rev-pnl-view .rev-pnl-chip.is-flat { color: var(--pnl-muted); }
#rev-pnl-view .rev-sheet1 .rev-pnl-calc { border-left: 1px dashed var(--line); }

/* ---- GMV share strip: each bar is one month at 100% ---------------------- */
#rev-pnl-view .rev-pnl-strip { margin: 0 0 var(--space-3); }
#rev-pnl-view .rev-pnl-strip[hidden] { display: none; }
#rev-pnl-view .rev-pnl-strip-row { display: flex; gap: 10px; align-items: center; margin-bottom: 6px; }
#rev-pnl-view .rev-pnl-strip-month {
  flex: 0 0 84px;
  color: var(--pnl-muted);
  font-size: var(--text-2xs);
}
#rev-pnl-view .rev-pnl-strip-bar {
  display: flex;
  flex: 1 1 auto;
  min-width: 120px;
  height: 15px;
  border-radius: 3px;
  background: var(--surface-2);
  overflow: hidden;
}
#rev-pnl-view .rev-pnl-strip-bar > span { display: block; height: 100%; }
#rev-pnl-view .rev-pnl-strip-bar > span + span { box-shadow: -1px 0 0 var(--raised); }
#rev-pnl-view .rev-pnl-strip-total {
  flex: 0 0 auto;
  min-width: 96px;
  color: var(--pnl-muted);
  font-size: var(--text-2xs);
  font-variant-numeric: tabular-nums;
  text-align: right;
}
#rev-pnl-view .rev-pnl-strip-gap {
  background-image: repeating-linear-gradient(45deg, transparent, transparent 2px, var(--line) 2px, var(--line) 3px);
  border-left: 1px dashed var(--warn);
  cursor: help;
}
#rev-pnl-view .rev-pnl-swatch {
  display: inline-block;
  width: 9px;
  height: 9px;
  margin-right: 7px;
  border-radius: 2px;
  vertical-align: middle;
}
/* Channel identity lives only in a small swatch; it never fills or ranks a row. */
#rev-pnl-view [data-pnl-channel-index] { background: hsl(210 40% 62%); }
#rev-pnl-view [data-pnl-channel-index="1"] { background: hsl(172 40% 62%); }
#rev-pnl-view [data-pnl-channel-index="2"] { background: hsl(213 40% 62%); }
#rev-pnl-view [data-pnl-channel-index="3"] { background: hsl(275 40% 62%); }
#rev-pnl-view [data-pnl-channel-index="4"] { background: hsl(26 40% 62%); }
#rev-pnl-view [data-pnl-channel-index="5"] { background: hsl(347 40% 62%); }
#rev-pnl-view [data-pnl-channel-index="6"] { background: hsl(93 40% 62%); }

/* ---- motion: the collapse is the only transition, and it asks first ------ */
@media (prefers-reduced-motion: no-preference) {
  #rev-pnl-view .rev-sheet1 .rev-pnl-quarter-toggle { transition: background 150ms ease; }
  #rev-pnl-view .rev-pnl-subtabs a, #room-ap .rev-pnl-subtabs a { transition: background 150ms ease, color 150ms ease; }
}

@media (max-width: 939px) {
  #rev-pnl-view { --pnl-label-width: 200px; }
  #rev-pnl-view .rev-pnl-strip-month { flex-basis: 64px; }
}

/* ---- UIX-1R (2026-08-21 owner sweep): header pinning, sub-view width, one toolbar row ---- */
/* A sheet with one header row pins it at the top; the 30px offset belongs only to a month row
   that sits under a quarter row. The NSR bridge has one row and was hiding its first line. */
#rev-pnl-view .rev-sheet1 thead tr:first-child th { top: 0; }
#rev-pnl-view .rev-sheet1 thead tr.rev-pnl-quarter-row + tr.rev-pnl-month-row th { top: 30px; }
/* The breakdown tables carry computed columns the reader wants beside the totals, so nothing is
   pinned to the right edge there; the whole sheet scrolls and every header reads in full. */
#rev-pnl-view [data-pnl-panel]:not([data-pnl-panel="pnl"]) .rev-sheet1 th:last-child,
#rev-pnl-view [data-pnl-panel]:not([data-pnl-panel="pnl"]) .rev-sheet1 td:last-child { position: static; width: auto; min-width: 112px; background: transparent; }
#rev-pnl-view [data-pnl-panel]:not([data-pnl-panel="pnl"]) .rev-sheet1 thead th { white-space: nowrap; }
/* styles.css:1481 indents ratio rows with --space-7, a token the sheet never defines. */
#rev-pnl-view .rev-sheet1 [data-pnl-level="ratio"] th { padding-left: var(--space-6); }
/* One toolbar row: the expansion control, period and units read left to right. */
#rev-pnl-view .rev-pnl-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-4); }
#rev-pnl-view .rev-sheet1 th, #rev-pnl-view .rev-sheet1 td { padding: 4px 8px; }
#rev-pnl-view .rev-sheet1 [data-pnl-indent] th { padding-left: calc(8px + var(--pnl-depth) * var(--pnl-indent-step)); }
/* A row with no caret still has to start where a caret'd row's TEXT starts, or one indent step
   is swallowed by the toggle and a child aligns with its own parent. */
#rev-pnl-view .rev-sheet1 [data-pnl-indent] th:not(:has(.collapse-toggle)) { padding-left: calc(8px + var(--pnl-depth) * var(--pnl-indent-step) + 18px); }
#rev-pnl-view .rev-pnl-swatch-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 0 0 var(--space-2); color: var(--pnl-muted); font-size: var(--text-2xs); }
#rev-pnl-view .rev-pnl-swatch-legend .rev-pnl-swatch { width: 11px; height: 11px; }
.rev-concentration-attribution { margin: 4px 0 0; color: var(--muted); font-size: var(--text-xs); line-height: 1.45; }

/* ---- EXPB-1 (2026-08-22): the Direct and Indirect expense trees -------------------------
   Four small rules, no new colour system. The depth ladder, the caret and the depth-1 tint
   are the mechanisms styles.css already carries; nothing here adds a fourth. No sand and no
   beige: the band bar and the closing total both reuse --surface-2, the sheet's own step. */

/* A band opens with its total and closes with the same total repeating it -- the device YNAB,
   Quicken and QuickBooks all use to keep a reader oriented sixty rows into a group. MISX-1 put
   the figure on the head as well as the close: both cells render the SAME row object through
   the same pnlBodyCell, so the pair cannot disagree and the reader has the band's total at
   whichever end they are standing at. */
#rev-pnl-view .rev-sheet1 tr.rev-pnl-band-head > * {
  padding-top: var(--space-5);
  color: var(--ink);
  font-weight: 700;
}
#rev-pnl-view .rev-sheet1 tbody tr.rev-pnl-band-head:first-child > * { padding-top: 8px; }
#rev-pnl-view .rev-sheet1 tbody tr.rev-pnl-band-head > *,
#rev-pnl-view .rev-sheet1 tbody tr.rev-pnl-band-head th:first-child,
#rev-pnl-view .rev-sheet1 tbody tr.rev-pnl-band-total > *,
#rev-pnl-view .rev-sheet1 tbody tr.rev-pnl-band-total th:first-child { background: transparent; }

/* The tab's own total, first row on the tab. It is the sum of the band section rows and it
   sits above them, so it takes the sheet's strongest step and nothing else new. */
#rev-pnl-view .rev-sheet1 tbody tr.rev-pnl-tab-total > *,
#rev-pnl-view .rev-sheet1 tbody tr.rev-pnl-tab-total th:first-child {
  background: transparent;
}

/* The sole L1--L4 ladder. Both the statement and the Direct/Indirect breakdowns
   call pnlApplyDepthPresentation, so these tokens cover every nested row. */
#rev-pnl-view .rev-sheet1 tbody tr[data-pnl-depth="0"] > * {
  background: var(--pnl-level-0-tint);
  color: var(--pnl-ink-0);
  font-weight: var(--pnl-level-0-weight);
}
#rev-pnl-view .rev-sheet1 tbody tr[data-pnl-depth="1"] > * {
  background: var(--pnl-level-1-tint);
  color: var(--pnl-ink-1);
  font-weight: var(--pnl-level-1-weight);
}
#rev-pnl-view .rev-sheet1 tbody tr[data-pnl-depth="2"] > * {
  background: var(--pnl-level-2-tint);
  color: var(--pnl-ink-2);
  font-weight: var(--pnl-level-2-weight);
}
#rev-pnl-view .rev-sheet1 tbody tr[data-pnl-depth="3"] > * {
  background: var(--pnl-level-3-tint);
  color: var(--pnl-ink-3);
  font-weight: var(--pnl-level-3-weight);
}
#rev-pnl-view .rev-sheet1 tbody tr[data-pnl-depth="4"] > * {
  background: var(--pnl-level-4-tint);
  color: var(--pnl-ink-4);
  font-weight: var(--pnl-level-4-weight);
}
#rev-pnl-view .rev-sheet1 tbody tr[data-pnl-depth]:not([data-pnl-depth="0"]):not([data-pnl-depth="1"]):not([data-pnl-depth="2"]):not([data-pnl-depth="3"]):not([data-pnl-depth="4"]) > * {
  background: var(--pnl-level-5-tint);
  color: var(--pnl-ink-5);
  font-weight: var(--pnl-level-5-weight);
}

/* A folded parent says how many rows it is holding, so nothing reads as lost. */
#rev-pnl-view .rev-sheet1 .rev-pnl-child-count {
  margin-left: 6px;
  color: var(--pnl-muted);
  font-size: var(--text-2xs);
  font-variant-numeric: tabular-nums;
}

#rev-pnl-view .rev-pnl-state {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 5px;
  border: 1px solid var(--line);
  border-radius: 999px;
  color: var(--pnl-muted);
  font-size: var(--text-2xs);
  font-weight: 600;
}

/* The overview table already supplies its range in the column headings; these repeat it in
   prose and dilute the numbers-first read.

   REAS-2: `#rev-grid-reason` was in this list and is not any more.  It is not a repeat of the
   column headings -- it is the only place a sighted reader can learn why a completed period has
   no figure, and it renders ONLY when that is true (`setViewReason` hides it otherwise), so it
   costs nothing on a grid with every figure present.  It was suppressed twice, once here and
   once by an unconditional `hidden = true` in `renderGrid`; removing only the JS half left it
   `display: none` and looking fixed, which a Playwright test on a hand-written skeleton could
   not see because that skeleton omitted the `rev-view-reason` class this rule needs.

   REAS-3: `#rev-grid-unavailable-legend` was in this rule and is gone from it. No element with
   that id exists in `index.html` -- the selector matched nothing and the JS that queried it got
   `null`. It read as a hidden legend to anyone auditing this rule, which cost an hour today. The
   legend that does exist is `#rev-pnl-unavailable-legend`, which this rule never named.

   TXT-1 (2026-09-02): `#rev-grid-reason` is back in this rule. REAS-2 removed it on the owner's
   "give them a visible line"; what that produced was a twelve-word engineering sentence above the
   grid, and he ruled it out on sight. The reason is not lost: it rides on each dash cell's hover
   and `aria-label`. */
#room-rev #rev-grid-reason,
#room-rev .rev-year-scope { display: none; }

/* A confirmed zero is a figure and reads as one, muted only so a column of real movement is
   not competing with a column of zeros. The refusal dash above it keeps its own reason. */
#rev-pnl-view .rev-sheet1 .rev-pnl-figure.rev-pnl-zero { color: var(--pnl-muted); }
