/* Section rail + stage.
 *
 * THIS FILE WAS DESCRIBING A RAIL THAT NO LONGER EXISTS.
 *
 * Everything below the layout block used to style a 164px LEFT COLUMN whose
 * items were built as `<a><b>label</b><i>question</i></a>`. The rail is a
 * horizontal bracket row in the top chrome now and nav.js emits
 * `<span class="rl-n">[1]</span><span class="rl-l">MARKETS</span>` — so every
 * `.rl-item b`, `.rl-item i` and `.rl-item::before` rule here was matching
 * nothing at all, and the `.app{grid-template-columns:164px …}` rule was being
 * overridden a stylesheet later. Dead CSS that reads as live is worse than
 * absent CSS: the next person to change the rail edits this file, sees no
 * effect, and concludes the cascade is haunted.
 *
 * What is left is only what still runs. The rail's own appearance lives in
 * instrument.css §12 and §28, which loads last and is where the design tokens
 * are re-pointed; putting half of it here would split one component across two
 * files with opposite cascade positions.
 *
 * Defines no new colour: every value below is an existing token. */

/* The app is one column — the rail was lifted out of it into the chrome, and
   the stage got the 164px back, which on a page whose reason to exist is a
   nine-column table is the most valuable width on screen. */
.app{
  display:block;
  height:100%; min-height:0;
}

.stage{ min-width:0; min-height:0; }
.view[hidden]{ display:none; }

/* tools.js still owns which of its sections is showing — the page rail drives
 * it through these buttons. They are hidden, not removed: removing them would
 * mean reimplementing that state here and letting the two drift.
 * The wrapper is .tl-rail (role="tablist"), NOT .tl-tabs — an earlier version
 * of this rule targeted a class that does not exist and silently did nothing.
 *
 * NOTE, because it cost a section: hiding this tab bar is what stranded
 * tools.js's "The venues" panel with no route in or out. The rail drives three
 * of the four tabs and had no entry for the fourth. nav.js now carries an
 * off-rail `venue-list` section and the command band's quick-access row points
 * at it — see the comment on SECTIONS in nav.js. */
#tools-root .tl-rail{ display:none; }
/* The app's last sticky element without an explicit layer, and the last one
 * still offset for a chrome band that no longer scrolls with it. It lives HERE
 * rather than in style.css because tools.css owns .tl-rail and loads after
 * style.css — the same declaration there lost on source order and measured as
 * top:56px still applied. Inside the stage's own scrollport that left a 56px
 * gap above the rail before it pinned. */
.tl-rail{ z-index:var(--z-sticky); top:-1px; }
/* ...and collapse the column it used to occupy. tools.css lays .tl-body out as
 * `232px minmax(0,1fr)` for its own rail. Hiding the rail without this left a
 * dead 232px gutter and squeezed every section into the right-hand column —
 * which is exactly what "activity, coverage and data show badly" looked like. */
#tools-root .tl-panel .tl-body{ grid-template-columns:minmax(0,1fr); }
/* Its panel header duplicated the page rail once the rail existed: every
 * section already renders its own heading. */
#tools-root .tl-panel > .panel-head{ display:none; }

/* ══════════════════════════════════════════════════════════════════════════
   THE RAIL, REBUILT (2026-08-05)

   Measured before: 37px tall, 10px labels, 4px/10px padding, no gap. That is
   dev-tool sizing — the same density that made the whole app read as a
   terminal. Every reference the owner chose (Apple, Glider, Warp, Sequoia)
   navigates with calm, spacious words.

   The bracket numbers stay in the DOM because the digits 1-6 really do jump
   sections and a keyboard user needs the affordance — but they stop being the
   loudest thing in the label. They are a hint, not a heading.

   !important WITH CLASS SPECIFICITY is deliberate: instrument.css loads after
   this file and its normalisation blanket is `body *:not(svg)` with
   !important. Two !important declarations are resolved by specificity, not by
   order, so a two-class selector here beats a zero-class one there regardless
   of who loads last.
   ══════════════════════════════════════════════════════════════════════════ */

/* ===========================================================================
   THE RAIL MOVED LEFT, AND IT HAS MOVED BACK UP (2026-09-14, owner's call)

   Owner: "the sections should not be on the side but on the top (header) and
   they should be small like in paradex."

   TWO BLOCKS OF THIS FILE ARE DELETED HERE AND THE ARGUMENT THEY CARRIED IS
   KEPT, because it was a good argument and it lost to a newer instruction
   rather than to a better one.

   The first was the 2026-08-05 rail rebuild: 10px/16px padding, a 10px
   radius, 14px labels at weight 500, a 160ms background transition and a 12px
   scent line. Its note read "Measured before: 37px tall, 10px labels, 4px/10px
   padding, no gap. That is dev-tool sizing." That was written against a set of
   references (Apple, Glider, Warp, Sequoia) that "navigate with calm, spacious
   words". The reference is Paradex now, and Paradex measures the other way:
   12px carries 82.4 percent of its text, its tab labels do not bold when
   selected, and its active tab is a 2px underline and nothing else. The size
   argument is not withdrawn, it is re-decided against a different reference,
   and research/ui-paradex/PARADEX-UI.md is that measurement.

   The second was "THE RAIL MOVES LEFT" (2026-08-05, also the owner's call),
   which fixed the rail as a 208px column at top:46px, inset body by 208px and
   moved the command band and the footer to match. Its argument was that "a
   horizontal strip under the masthead spends full page width on six words and
   pushes the data down". That is true of a strip UNDER the masthead, which is
   what it was. It is not true of a strip INSIDE it: the masthead row exists
   anyway, so the sections now cost zero vertical pixels, and the 208px column
   goes back to the stage as well. Both halves of that trade are recovered.

   WHAT REPLACES THEM IS topnav.css, NOT MORE OF THIS FILE. The rail's
   appearance was never in here to begin with, which is what this file's own
   header has said since it was rewritten: it lives in instrument.css and, as
   of today, density.css, and neither may be edited. A sheet that loads after
   both is the only place a new look can be written, so nav.css keeps only
   what is genuinely its own: the tools.js take-off stubs above and the NEW
   badge below.

   THE SIDEBAR INSETS ARE GONE WITH IT. `body { padding-left: 208px }`,
   `body > .cmd { left: 208px }` and the two `body > footer { padding-left }`
   rules all existed to clear a fixed column that no longer exists. Leaving
   them would inset the page for an element that is not there.
   =========================================================================== */

/* ══════════════════════════════════════════════════════════════════════════
   THE COMMAND BAND IS HIDDEN (2026-08-07)

   Owner: "the research bar doesn't have its place in this ui, it's just adding
   more difficulties."

   Hidden, not deleted. The markup stays in index.html and command.js keeps its
   vocabulary and routing, so this is one rule to reverse rather than a rebuild.
   command.js has a matching early return so the global "/" shortcut cannot
   focus an input nobody can see.

   What is lost, stated plainly rather than discovered later: typing an asset,
   a venue, a pair or an address was the only way to reach some of it in one
   step, and #venue-list has NO rail entry — the band's quick-access row was
   its only click path. That section is now reachable only by hash until it
   gets a rail entry or another route.
   ══════════════════════════════════════════════════════════════════════════ */
/* `.cmd` is inside <footer>, NOT a direct child of body — `body > .cmd` matched
   nothing and the band stayed visible while the rule was served. Descendant
   selector, and the JS guard reads the same computed display so the two cannot
   disagree. */
body .cmd { display: none !important; }
@media (min-width: 900px) { body > footer { padding-bottom: 18px !important; } }

/* ── THE "NEW" FLAG ON A RAIL ENTRY ──────────────────────────────────────────
 * Follows the existing rail badge idiom (.rl-beta, .rl-soon) rather than
 * inventing a third, but filled instead of outlined: beta and soon are
 * qualifiers that should sit quietly beside a label, and NEW is the one badge
 * whose whole job is to pull a reader who has not clicked yet.
 * --accent-ink resolves to the same value as --accent in this app, so text on
 * an accent fill takes --bg or it is orange on orange. instrument.css loads
 * after this file and pins size, weight, tracking and radius on
 * `body *:not(svg)`, so those four carry !important; it declares no .rl-new of
 * its own, so nothing else here has to fight it.
 * ─────────────────────────────────────────────────────────────────────────── */
.rl-new {
  margin-left: 7px;
  padding: 1px 5px 2px;
  border-radius: 3px !important;
  background: var(--accent);
  color: var(--bg) !important;
  font-size: 9px !important;
  font-weight: 700 !important;
  letter-spacing: .1em !important;
  text-transform: uppercase;
  vertical-align: middle;
  position: relative;
  top: -1px;
}

/* -- THE RAIL'S OWN HEIGHT RESERVATION IS DELETED (2026-09-14) -------------
 *
 * It read:
 *
 *   @media (max-width: 899px) { body nav.rail { min-height: 55px } }
 *
 * and it was a measured layout-shift fix, not a guess: on the mirror at a 4x
 * CPU throttle a plain phone load scored CLS 0.1471 and ONE event at 2018ms
 * was 0.1448 of it, the rail growing 13px to 55px as its seven items painted
 * and .app, the one flexible child of a locked shell, absorbing every pixel.
 *
 * ALL THREE OF ITS PREMISES ARE NOW FALSE.
 *   - 55px was the settled height of a body-level strip of 42px items. The
 *     strip is 36px now and it is a ROW OF THE HEADER, not a sibling of it, so
 *     reserving the rail no longer reserves the band that moves.
 *   - 899px was chosen to meet this file's own 900px sidebar boundary. There
 *     is no sidebar and no 900px boundary left in this file.
 *   - Above 900px it reserved nothing, because up there the rail WAS the fixed
 *     column and could not move the page. The header could and did.
 *
 * The replacement is topnav.css section 7, which reserves the header itself:
 * 60px on the single-row layout and 60 + 36 + 1 on the two-row one. It covers
 * the desktop case this rule never could. Deleting a reservation for an
 * element that no longer exists is the point; leaving it would have bought
 * 55px of dead space inside a header that already states its height.
 *
 * THE FOOTER RESERVATION BELOW IS UNRELATED AND STAYS. It is the other half of
 * the same measurement and nothing in this change touches the footer.
 * ------------------------------------------------------------------------- */

/* ── THE FOOTER RESERVES ITS SETTLED HEIGHT ON PHONES ─────────────────────
 *
 * Same load, the other half of the shift. Sampling footer and its children
 * every 100ms on a 390px viewport at 4x throttle:
 *
 *   t=133  footer=102   .foot-bar=101
 *   t=226  footer= 87   .foot-bar= 86
 *   t=637  footer=116   .foot-bar=115     settled
 *
 * It bounces twice and lands 29px taller than it started. .app is the flexible
 * child of a locked shell, so it absorbs every one of those pixels and the
 * page under it moves: the remaining shift measured 0.1424, on .app 698 -> 628
 * with footer 118 -> 146 named as the source.
 *
 * 480px IS A MEASURED BOUNDARY, NOT A GUESSED ONE. The settled footer is
 * 116 at 360, 390, 414, 430 and 480, then 87 at 520 and 560, 74 at 599 and
 * 640, 73 at 720. Reserving 116 past 480 would buy 29px of dead space to fix
 * a shift that does not happen there, which is the trap the vault app's own
 * skeleton fell into. So the query stops where the measurement stops. */
@media (max-width: 480px) {
  body footer {
    min-height: 116px;
  }
}
