/*!
 * evident-bootstrap.css — part of Evident, the Cortex design language.
 * The Bootstrap adapter — load AFTER bootstrap.min.css and evident.css.
 *
 * TRANSITIONAL ARTIFACT — SCAFFOLDING, EXPECTED TO BE DELETED.
 * This adapter exists only to render existing Bootstrap markup as Evident.
 * It is deleted when the last consumer that links it drops that link and
 * loads evident.css alone. Nothing may be added here that is not a --bs-*
 * remap or a documented selector restyle, so its removal can never remove an
 * Evident behaviour. Deleting it does oblige the last consumer to migrate its
 * .btn / .card markup to Evident's own .ev-key classes — that cost is real
 * and was accepted deliberately. Full condition: src/adapter-bootstrap.css.
 *
 * Do not edit this file directly — it is generated by build.sh from src/.
 * Edit the partials under src/ and re-run ./build.sh.
 * Provenance is the Git commit containing these bytes; consumers record that
 * commit in .evident-version and use it for cache-busting.
 * https://evident.sb.cortex.gigahost.dk/
 */

/* ===== src/adapter-bootstrap.css ===== */
/* ==========================================================================
   Evident — the Bootstrap adapter
   ==========================================================================

   THIS FILE IS THE HALF THAT MAKES A BOOTSTRAP CONSUMER'S EXISTING MARKUP
   RENDER AS EVIDENT WITHOUT TOUCHING THE MARKUP. It is loaded ALONGSIDE and
   AFTER bootstrap.min.css.

   THE ADAPTER RULE (cortex-m0ss4k9, cortex-lndxpt3):
     Evident owns the values. The adapter PRIMARILY maps ONE-DIRECTIONALLY onto
     Bootstrap's own `--bs-*` custom-property API, re-pointing Bootstrap's
     variables at Evident tokens so Bootstrap's own rules render Evident.
     Where Bootstrap exposes no variable for required material or geometry,
     the documented token-based selector restyles below supply that layer.

   The genuine selector restyles below (`.card { border: 0 }`, the
   `.rounded-white` / `.rounded-light` scope primitives, the `.btn` shadow
   stacks, and `.dropdown-item` row relief/current marks) are the deliberate,
   documented exceptions — the treatments that cannot be expressed purely as
   a `--bs-*` remap because Bootstrap has no variable for them. Every one is
   token-based; none introduces a colour literal.

   END-OF-LIFE — THIS FILE IS SCAFFOLDING (cortex-fifzkjn)
   ----------------------------------------------------------------------
   THIS ARTIFACT IS TRANSITIONAL AND IS EXPECTED TO BE DELETED. It is not
   permanent architecture. It exists for exactly one reason: to spare a
   consumer that already ships Bootstrap markup the cost of rewriting that
   markup before it can render as Evident. `dist/evident.css` is the
   permanent library; this file is the ramp onto it.

   THE DELETION CONDITION: this file is removed when the last consumer that
   links `evident-bootstrap.css` drops that link and loads `evident.css`
   alone. Deleting it must never require a decision — only a check that the
   set of such consumers is empty.

   CURRENT CONSUMERS ARE LIVE GRAPH STATE, NOT DOCUMENTATION. Query the live
   graph and consumer repositories before deletion; never infer that the set
   is empty from this artifact. `gigahost/controlcenter` has linked this
   adapter since commit 544e50b9, but that concrete example is not an
   authoritative enumeration. `gigahost/nete` links both Evident artifacts in
   its application and authentication shells as of commit 9420652, so it is a
   normal Evident consumer and belongs in that live set until those links are
   removed. The deletion condition above is the rule.

   WHAT KEEPS THE DELETION CHEAP: nothing may be added to this file that is
   not a `--bs-* ` remap or one of the documented selector-restyle exceptions
   named above. Hold that line and removing this file can never remove an
   Evident behaviour — every value it carries is already stated in
   `dist/evident.css`, and it only re-points Bootstrap at them. Break it and
   this file quietly becomes load-bearing, at which point deletion stops
   being a deletion and turns into archaeology. That is the failure mode
   this marker exists to prevent.

   WHAT THE DELETION STILL COSTS — SAY IT OUT LOUD: it is NOT free, and it is
   not a one-line `link` removal. Evident's public vocabulary is `.ev-key--* `
   (settled on cortex-q29li00, option (a): converging on Bootstrap's own
   single-dash names was considered and DECLINED), while this adapter targets
   Bootstrap's own `.btn` / `.card` / `.accordion` selectors. So the last
   consumer to drop this file must also migrate its markup to the `.ev-*`
   classes. That translation cost was accepted knowingly when the vocabulary
   was settled; it is not an oversight to be discovered later. The mechanical
   form of that migration — the 60 exact selector overlaps and their
   dispositions — is in `docs/controlcenter-cascade-conflicts.md`. There is
   deliberately no deprecation alias to soften the switch; see README
   § "Removing a name" and the policy at cortex-qairdc1.

   LOAD ORDER MATTERS: the var-remap majority is order-independent, but the
   selector restyles are not — this file must come after bootstrap.min.css.

   Extracted verbatim (values only; comments condensed) from the verified CC
   port: tokens.css button scale, layout-base.css accordions, layout-controls.css
   buttons, layout-surfaces.css planes, layout-theme.css dark mirror.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Bootstrap's GLOBAL --bs-* API, re-pointed at Evident tokens.

   THIS SECTION IS THE ONE THAT ANSWERS "IT LOOKS TOO DIFFERENT" (cortex-wp0qzvk).
   Until it was written the adapter declared exactly ONE global remap
   (--bs-font-monospace) and did all its work in scoped component rules, so
   every surface those rules did not name kept Bootstrap's own defaults:
   system-ui type, a #fff page on #212529 ink, #0d6efd primary, #dee2e6 rules.
   Measured on the v3 station before this section existed, a real Bootstrap page
   through the adapter failed 24 of 24 fidelity checks on BOTH benches — and the
   majority of those failures were not a component drawn wrongly, they were
   Bootstrap simply showing through. A component-by-component adapter cannot fix
   that class; the global API has to be re-pointed.

   WHY THE SELECTOR IS NOT PLAIN `:root`, AND THIS IS LOAD-BEARING.
   A custom property containing var() is substituted at COMPUTED-VALUE TIME on
   the element that declares it, and the RESULT inherits. So
   `:root { --bs-body-bg: var(--ev-metal-hi) }` resolves --ev-metal-hi against
   :root — the LIGHT value — and every descendant inherits that resolved light
   colour, including one inside a `[data-bs-theme="dark"]` subtree. The dark
   mirror would silently never apply. Re-declaring on the theme-carrying
   elements makes each theme scope recompute the whole block against its own
   token values, so a page that themes on <html> and a page that themes a
   SUBTREE (a common consumer case, and the way the v3 station stands
   both benches side by side) both resolve correctly.

   This is exactly why the scoped component rules in sections 2-8 need no dark
   restatement — they are declared ON the component, which is already inside the
   theme scope, so their var() lookups resolve there. Only :root-level
   declarations have this hazard.
   -------------------------------------------------------------------------- */
:root,
:is([data-ev-theme], [data-bs-theme]) {
    /* Type — Invariant L5: IBM Plex Sans everywhere, Mono for machine values. */
    --bs-font-sans-serif: var(--ev-font-sans);
    --bs-font-monospace: var(--ev-font-mono);
    --bs-body-font-family: var(--ev-font-sans);
    --bs-body-font-size: var(--ev-text-body);
    --bs-body-line-height: var(--ev-leading-body);
    --bs-body-font-weight: var(--ev-weight-regular);

    /* Ground and ink. --ev-bg is the page CANVAS (the graphite bench the whole
       billet is cut from), not --ev-metal-hi (a raised molded face) — the exact
       distinction cortex-r3qtun9 had to restore natively. */
    --bs-body-bg: var(--ev-bg);
    --bs-body-color: var(--ev-ink);
    --bs-emphasis-color: var(--ev-ink);
    --bs-heading-color: var(--ev-ink);
    --bs-secondary-color: var(--ev-ink-dim);
    --bs-tertiary-color: var(--ev-ink-faint);
    --bs-secondary-bg: var(--ev-floor-n1);
    --bs-tertiary-bg: var(--ev-floor-n1);

    /* The one accent. Bootstrap spends `primary` on links, checked controls,
       progress and every .{text,bg,border}-primary utility, so leaving it at
       #0d6efd puts a SECOND hue on the page — the thing Invariant L4 forbids
       outright. The -rgb triple is required as well: Bootstrap's utilities read
       `rgba(var(--bs-primary-rgb), var(--bs-bg-opacity))` and would otherwise
       stay blue even with --bs-primary remapped. */
    --bs-primary: var(--ev-accent);
    --bs-primary-rgb: var(--ev-accent-rgb);
    --bs-primary-text-emphasis: var(--ev-accent-text);
    --bs-primary-border-subtle: var(--ev-accent-edge);
    --bs-link-color: var(--ev-accent-text);
    /* The TRIPLE is the one that actually paints: Bootstrap resolves
       `a { color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)) }`,
       so pointing only --bs-link-color at the ink step leaves links on the FACE
       accent — 1.43:1 on the canvas. Measured on the v3 station: light links
       came out #2bb3f3 with --bs-link-color already remapped. */
    --bs-link-color-rgb: var(--ev-accent-text-rgb);
    --bs-link-hover-color: var(--ev-accent-text);

    /* Status faces. Evident's four semantic colours are the sanctioned hue
       exception (components/badge.css); they are muted anodised stock rather
       than Bootstrap's saturated web palette, so a consumer's existing
       .text-bg-danger reads as Evident material instead of a toast. */
    --bs-danger:  var(--ev-danger);   --bs-danger-rgb:  var(--ev-danger-rgb);
    --bs-success: var(--ev-success);  --bs-success-rgb: var(--ev-success-rgb);
    --bs-warning: var(--ev-warning);  --bs-warning-rgb: var(--ev-warning-rgb);
    --bs-info:    var(--ev-info);     --bs-info-rgb:    var(--ev-info-rgb);

    /* Rules and radii. Bootstrap draws boundaries as 1px borders where Evident
       draws them as achromatic scribe lines; remapping the colour is what keeps
       a consumer's un-restyled border from reading as a drawn outline. */
    --bs-border-color: var(--ev-rule);
    --bs-border-color-translucent: var(--ev-rule);
    --bs-border-radius-sm: var(--ev-radius-sm);
    --bs-border-radius: var(--ev-radius-md);
    --bs-border-radius-lg: var(--ev-radius-lg);
    --bs-border-radius-xl: var(--ev-radius-lg);
    --bs-border-radius-pill: var(--ev-radius-pill);

    /* Focus is the accent RING and nothing else (see section 3). */
    --bs-focus-ring-color: var(--ev-accent-edge);
    --bs-focus-ring-width: 2px;
    --bs-focus-ring-opacity: 1;

    /* Bootstrap's default code ink is #d63384, a pink outside Evident's
       licensed channels. Machine values keep Bootstrap's own monospace
       treatment; only their ink is re-pointed at Evident's existing brand
       ink channel. Measured on the grounds the consumer harness actually
       renders: light #064466 is 6.26:1 on --ev-bg #c9c9c9 and 8.77:1 on
       --ev-metal-hi #ececec; dark #2bb3f3 is 7.95:1 on --ev-bg #111111 and
       6.29:1 on --ev-metal-hi #272727. All clear the 4.5:1 text floor.
       (cortex-nxdcnkg) */
    --bs-code-color: var(--ev-accent-text);
    --bs-highlight-bg: var(--ev-wash);
}

/* PRIMARY HAS TWO JOBS; THESE TWO UTILITIES ARE THE INK JOB.
   Bootstrap deliberately derives text-primary and link-primary from the
   primary FACE triple. Evident cannot move --bs-primary-rgb without also
   moving .bg-primary, .border-primary, and .btn-primary off their material
   face, so intercept only the two ink utilities. Preserve Bootstrap's opacity
   variables and match its !important contract. (cortex-j8p4nro) */
.text-primary {
    color: rgba(var(--ev-accent-text-rgb), var(--bs-text-opacity)) !important;
}

.link-primary {
    color: rgba(var(--ev-accent-text-rgb), var(--bs-link-opacity, 1)) !important;
}

/* SUBTREE THEMING NEEDS THE INK RE-APPLIED, NOT JUST RE-DECLARED.
   Bootstrap applies `color: var(--bs-body-color)` exactly once, on `body`; its
   own `[data-bs-theme]` blocks only redeclare variables. So a page that themes
   a SUBTREE gets the right variables inside that subtree and the wrong INK,
   inherited from a body that computed its colour in the other theme. This is
   Bootstrap's behaviour rather than adapter drift, but a consumer meets it as
   "the dark panel has black text" either way, so the adapter closes it: one
   declaration on the theme-carrying element, which every descendant inherits
   and every component is free to override. Measured on the v3 station — the
   dark bench resolved --ev-ink #ebebeb and still painted #1f1f1f. */
:is([data-ev-theme], [data-bs-theme]) {
    color: var(--ev-ink);
}

/* THE PAGE'S HOIST AND BOOTSTRAP'S POSITIONING UTILITIES TIE, AND THE HOIST WON.
   ---------------------------------------------------------------------------
   `.ev-pinstripe > *` (components/pinstripe.css) gives every direct child
   `position: relative; z-index: 1` so a page's own content sits above the
   ::before/::after atmosphere layers. That selector is (0,1,0). So is
   `.fixed-top`. A tie is settled by source order, this file loads after
   bootstrap.min.css, and the hoist therefore took `position` away from every
   Bootstrap-positioned direct child of a pinstripe page — silently, because a
   bar that has stopped being fixed still renders, just in the flow. Nete's app
   bar was the reported instance: it measured `position: relative` at top 88px,
   sitting below the strip of padding its shell had reserved for a fixed bar
   (cortex-oh0w9jt).

   (0,2,0) settles it on specificity alone, in both directions and regardless of
   which sheet lands later. No `!important`: the argument is between two ordinary
   authored rules, and importance would only move it to a level where the next
   rule along cannot answer at all.

   WHY THE PINSTRIPE RULE IS NOT SIMPLY NARROWED — the repair a future reader
   reaches for first, and the one to refuse. `z-index` does not apply to a static
   box, so the `position: relative` there is precisely what makes the `z-index: 1`
   beside it mean anything. Delete it, or exclude the positioned utilities from
   it, and every ORDINARY child of a pinstripe page drops behind the atmosphere
   layers: one silent defect traded for another, and the second is the common
   case. The hoist is right; it was only ever missing this exception.

   POSITION ONLY. `z-index` ties at the same (0,1,0), so a hoisted `.fixed-top`
   still resolves to 1 rather than Bootstrap's 1030, leaving Bootstrap's own
   1000-1055 band able to paint over fixed chrome. That is real, measured, and
   recorded on cortex-jqumrk8, which owns the stacking scale — a literal invented
   here would be a second scale competing with it.

   The family is the one the pinned Bootstrap 5.3.8 actually ships, read out of
   demos/vendor/bootstrap/bootstrap.min.css rather than assumed: `fixed` has no
   responsive variants, `sticky` has ten, and each of those is gated by its own
   min-width. Mirroring them ungated would make a bar sticky at widths Bootstrap
   never intended, so each is answered inside the matching query.
   `-webkit-sticky` is deliberately not re-shipped: this restores a property that
   was taken away, it does not re-declare Bootstrap's prefixed value for an
   engine era none of our targets are in.

   This does not make the file load-bearing (see END-OF-LIFE above). Every
   selector here names a Bootstrap class, so the last consumer to drop this sheet
   has by definition already migrated off `.fixed-top` and has nothing left for
   these rules to answer. (cortex-qdg7ose) */
.ev-pinstripe > .fixed-top,
.ev-pinstripe > .fixed-bottom { position: fixed; }

.ev-pinstripe > .sticky-top,
.ev-pinstripe > .sticky-bottom { position: sticky; }

@media (min-width: 576px) {
    .ev-pinstripe > .sticky-sm-top,
    .ev-pinstripe > .sticky-sm-bottom { position: sticky; }
}
@media (min-width: 768px) {
    .ev-pinstripe > .sticky-md-top,
    .ev-pinstripe > .sticky-md-bottom { position: sticky; }
}
@media (min-width: 992px) {
    .ev-pinstripe > .sticky-lg-top,
    .ev-pinstripe > .sticky-lg-bottom { position: sticky; }
}
@media (min-width: 1200px) {
    .ev-pinstripe > .sticky-xl-top,
    .ev-pinstripe > .sticky-xl-bottom { position: sticky; }
}
@media (min-width: 1400px) {
    .ev-pinstripe > .sticky-xxl-top,
    .ev-pinstripe > .sticky-xxl-bottom { position: sticky; }
}

/* --------------------------------------------------------------------------
   2. Accordions — expand on the same clean molded surface, no nested tint.
   (layout-base.css)
   -------------------------------------------------------------------------- */
.accordion {
    --bs-accordion-bg: var(--ev-metal-hi);
    --bs-accordion-active-bg: var(--ev-metal-hi);
    --bs-accordion-active-color: var(--ev-ink);
    --bs-accordion-btn-bg: var(--ev-metal-hi);
    --bs-accordion-btn-color: var(--ev-ink);
    --bs-accordion-btn-focus-border-color: var(--ev-accent-edge);
    --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem var(--ev-accent-edge);
    --bs-accordion-border-color: var(--ev-rule);
}
.accordion-item,
.accordion-button,
.accordion-collapse,
.accordion-body {
    background-color: var(--ev-metal-hi);
}
/* ALLOWLISTED exception to axial light (Invariant L1): Bootstrap's own idiom
   for the open accordion's bottom DIVIDER — a border rendered as a shadow so
   it does not consume layout height. A 0-blur 0-spread line is a rule, not a
   cast shadow. (layout-base.css) */
.accordion-button:not(.collapsed) {
    color: var(--ev-ink);
    background-color: var(--ev-metal-hi);
    box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--ev-rule);
}
/* Bootstrap's fixed light/dark SVG chevrons are also selected through
   `[data-bs-theme=dark] .accordion-button::after`, so they cross a nested
   light boundary. The adapter owns accordion paint already; form the same
   disclosure mark from two inked edges so it resolves on the button's local
   theme carrier instead of from the outer page selector. */
.accordion-button::after {
    width: 0.65rem;
    height: 0.65rem;
    background-image: none;
    border-right: 2px solid var(--ev-ink);
    border-bottom: 2px solid var(--ev-ink);
    transform: rotate(45deg);
}
.accordion-button:not(.collapsed)::after {
    background-image: none;
    transform: rotate(-135deg);
}

/* --------------------------------------------------------------------------
   3. Button size scale — five steps mapped onto --bs-btn-* so size stays
   ORTHOGONAL to colour. (layout-controls.css)
   -------------------------------------------------------------------------- */
.btn {
    --ev-key-lift-scale: 1;
    /* Same cast body as the native key, composed on the button for the same
       cascade reason: --ev-key-lift-scale is per-button state, so a body layer
       built at :root would resolve against a scale that scope does not have
       and collapse every box-shadow naming it to `none` (cortex-mz9m49a). The
       size rules below re-declare the scale on this same element. */
    --ev-key-body-arrise:
        inset 0 0 0 calc(1px * var(--ev-key-lift-scale)) var(--ev-key-body-arrise-ink);
    --ev-key-body-wall:
        inset 0 0 calc(3px * var(--ev-key-lift-scale)) var(--ev-key-body-wall-ink);
    --ev-key-body-roll:
        inset 0 0 calc(9px * var(--ev-key-lift-scale)) var(--ev-key-body-roll-ink);
    --bs-btn-padding-y: var(--ev-btn-pad-y-md);
    --bs-btn-padding-x: var(--ev-btn-pad-x-md);
    --bs-btn-font-size: var(--ev-btn-font-md);
    --bs-btn-border-radius: var(--ev-btn-radius-md);
    --bs-btn-focus-box-shadow: none;
    height: var(--ev-btn-height-md);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    transition: var(--ev-transition-fast);
}
.btn-xs, .btn-group-xs > .btn {
    --ev-key-lift-scale: 0.7901234568;
    --bs-btn-padding-y: var(--ev-btn-pad-y-xs);
    --bs-btn-padding-x: var(--ev-btn-pad-x-xs);
    --bs-btn-font-size: var(--ev-btn-font-xs);
    --bs-btn-border-radius: var(--ev-btn-radius-xs);
    height: var(--ev-btn-height-xs);
}
.btn-sm, .btn-group-sm > .btn {
    --ev-key-lift-scale: 0.8888888889;
    --bs-btn-padding-y: var(--ev-btn-pad-y-sm);
    --bs-btn-padding-x: var(--ev-btn-pad-x-sm);
    --bs-btn-font-size: var(--ev-btn-font-sm);
    --bs-btn-border-radius: var(--ev-btn-radius-sm);
    height: var(--ev-btn-height-sm);
}
.btn-lg, .btn-group-lg > .btn {
    --ev-key-lift-scale: 1.125;
    --bs-btn-padding-y: var(--ev-btn-pad-y-lg);
    --bs-btn-padding-x: var(--ev-btn-pad-x-lg);
    --bs-btn-font-size: var(--ev-btn-font-lg);
    --bs-btn-border-radius: var(--ev-btn-radius-lg);
    height: var(--ev-btn-height-lg);
}
.btn-xl, .btn-group-xl > .btn {
    --ev-key-lift-scale: 1.265625;
    --bs-btn-padding-y: var(--ev-btn-pad-y-xl);
    --bs-btn-padding-x: var(--ev-btn-pad-x-xl);
    --bs-btn-font-size: var(--ev-btn-font-xl);
    --bs-btn-border-radius: var(--ev-btn-radius-xl);
    height: var(--ev-btn-height-xl);
}
.btn.btn-auto-height { height: auto; }
.btn:hover { transition: none; }

/* KEYBOARD FOCUS — the accent ring, and nothing else.
   ---------------------------------------------------------------------------
   Invariant 4 reserves focus to the ring precisely so it never has to borrow
   the depth or the finish channel: a focused key must not move its floor or
   change its polish, because those already mean pressed and live. The ring was
   not in conflict with the language here — it was simply absent.

   Drawn with `outline`, NEVER with box-shadow. Bootstrap draws its focus ring
   in box-shadow, and so does every Evident press state, so a ring there
   silently neuters the pressed-key cut stack — the collision cortex-mn5hkp8
   had to fix. `outline` is a separate property on a separate paint, so the two
   channels cannot fight. This is also why `--bs-btn-focus-box-shadow: none`
   above stays: that line is correct on its own terms and is NOT what removed
   focus. What removed focus was the second half of the old one-liner here,
   `outline: none !important`, with nothing put back.

   2px accent at +2px offset is the constant the native .ev-key already sets
   (components/keys.css), so a Bootstrap consumer and a native consumer focus
   identically rather than drifting apart.

   :focus-visible only, so a mouse click leaves no ring behind. The suppression
   is NARROWED rather than deleted: :focus-visible is a subset of :focus, so an
   un-narrowed `outline: none !important` beats the ring at the same origin and
   nothing paints at all. Narrowing is what makes the rule below reachable —
   verify by tabbing, not by reading the diff. (cortex-7nnzvrk) */
.btn:focus:not(:focus-visible),
.btn:active:not(:focus-visible) { outline: none !important; }
.btn:focus-visible {
    outline: 2px solid var(--ev-accent-edge);
    outline-offset: 2px;
}

/* A BUTTED group is a seat in a track, so its ring turns INSIDE — the same
   inversion .ev-rail__item and .ev-segmented__seg make for the same reason.
   Bootstrap laps grouped keys with a negative margin, so an outside ring would
   be overlapped by the next key along. The selection-carrying .btn-group is a
   different object and keeps its own, more specific ring in section 7.

   The z-index is belt-and-braces, not load-bearing, and it does NOT always
   apply: inside a .rounded-white card, `.rounded-white .btn:not(.btn-link)`
   (section 4) sets z-index 1 at the SAME specificity (0,3,0) and lands later in
   this file, so it wins and the focused key stays at 1. Measured on the live
   render, the ring is still complete on all four sides in that case — a -2px
   inset ring sits inside its own border box and the sibling lap is only 1px, so
   there is nothing for a neighbour to cover. Left in because it does raise the
   key outside a card; not tightened, because tightening buys no pixel. */
.btn-group > .btn:focus-visible,
.btn-group-vertical > .btn:focus-visible {
    outline-offset: -2px;
    z-index: 4;
}

/* THE PRIMARY KEY — a lit surface, DARK ink. Depth is blurred stacks with no
   line (no rim trap). Hover stays lit (finish carries liveness); press travels
   down. (layout-controls.css) */
.btn-primary {
    --bs-btn-color: var(--ev-accent-ink);
    --bs-btn-bg: var(--ev-accent);
    --bs-btn-border-color: transparent;
    --bs-btn-hover-color: var(--ev-accent-ink);
    --bs-btn-hover-bg: var(--ev-accent);
    --bs-btn-hover-border-color: transparent;
    --bs-btn-active-color: var(--ev-accent-ink);
    --bs-btn-active-bg: var(--ev-accent-press);
    --bs-btn-active-border-color: transparent;
    --bs-btn-disabled-color: var(--ev-accent-ink);
    --bs-btn-disabled-bg: var(--ev-accent);
    --bs-btn-disabled-border-color: transparent;
    --bs-btn-border-width: 0;
    font-weight: 500;
    background-image: var(--ev-key-crown);
    box-shadow:
        var(--ev-key-body-arrise),
        var(--ev-key-body-wall),
        var(--ev-key-body-roll),
        var(--ev-acc-shoulder-1),
        var(--ev-acc-shoulder-2),
        var(--ev-contact-1);
}
.btn-primary:hover {
    box-shadow:
        var(--ev-key-body-arrise),
        var(--ev-key-body-wall),
        var(--ev-key-body-roll),
        var(--ev-acc-shoulder-1),
        var(--ev-acc-shoulder-2),
        var(--ev-contact-2),
        var(--ev-ambient-1);
}
.btn-primary:active {
    background-image: none;
    box-shadow:
        var(--ev-r3-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall);
}

/* Colour-only variants keep their identity in ink + rim, no coloured face.
   The two channels take DIFFERENT accent tokens, and that is deliberate: the
   label is ink and takes --ev-accent-text (the accent a luminance step down, so
   it clears AA on a light ground — --ev-accent is a face value at 1.43:1 on the
   canvas), while the rim is a UI BOUNDARY and takes --ev-accent-edge so it
   clears its independent 3:1 floor. Both are the same accent hue walked down
   in light; in dark both resolve to the face accent. (cortex-8jhd90a,
   cortex-ne36f8j) */
.btn-outline-primary {
    --bs-btn-color: var(--ev-accent-text);
    --bs-btn-bg: transparent;
    --bs-btn-border-color: var(--ev-accent-edge);
    --bs-btn-hover-color: var(--ev-accent-ink);
    --bs-btn-hover-bg: var(--ev-accent);
    --bs-btn-hover-border-color: var(--ev-accent-edge);
    --bs-btn-active-color: var(--ev-accent-ink);
    --bs-btn-active-bg: var(--ev-accent-press);
    --bs-btn-active-border-color: transparent;
    --bs-btn-disabled-color: var(--ev-accent-text);
    --bs-btn-disabled-bg: transparent;
    --bs-btn-disabled-border-color: var(--ev-accent-edge);
    color: var(--ev-accent-text);
    border: 1px solid var(--ev-accent-edge);
    border-radius: var(--ev-radius-pill);
    font-weight: 600;
    background-color: transparent;
}
.btn-outline-primary:hover {
    background-color: var(--ev-accent);
    border-color: var(--ev-accent-edge);
    color: var(--ev-accent-ink);
}
.btn-outline-primary:is(:active, .active, .show) {
    box-shadow:
        var(--ev-r3-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall);
}
.btn-outline-primary:is(:disabled, .disabled) {
    opacity: 0.65;
}

/* THE NEUTRAL KEY — the .ev-key default, for the variants a consumer reaches
   for when it just wants a button. One production consumer's workhorse is
   .btn-outline-secondary and Bootstrap's own neutral fill is .btn-secondary;
   both are the same object in Evident (a raised cast key on land: metal-hi
   face, flat ink, contact + ambient falloff, NO rim line). Bootstrap paints
   them #6c757d-on-white and #6c757d-outline respectively, which is why an
   un-restyled consumer page read as Bootstrap wearing Evident's buttons.

   .btn-light / .btn-dark join them: both name a NEUTRAL key in Bootstrap's
   vocabulary, and Evident has exactly one neutral key — the material decides
   its value per theme, so a consumer does not choose light or dark by class.

   Weight is 600, matching .ev-key. (.btn-primary stays 500 because
   .ev-key--primary is 500 — the lit face carries the emphasis, not the ink.)
   Depth is deliberately NOT restated per variant: these rules set the face and
   the ink through --bs-btn-*, and the one box-shadow below is the same stack
   components/keys.css declares. */
.btn {
    --bs-btn-font-weight: var(--ev-weight-semibold);
}
.btn-secondary,
.btn-outline-secondary,
.btn-light,
.btn-dark {
    --bs-btn-bg: var(--ev-metal-hi);
    --bs-btn-color: var(--ev-ink);
    --bs-btn-border-color: transparent;
    --bs-btn-hover-bg: var(--ev-metal-hi);
    --bs-btn-hover-color: var(--ev-ink);
    --bs-btn-hover-border-color: transparent;
    --bs-btn-active-bg: var(--ev-metal-hi);
    --bs-btn-active-color: var(--ev-ink);
    --bs-btn-active-border-color: transparent;
    --bs-btn-disabled-bg: var(--ev-metal-hi);
    --bs-btn-disabled-color: var(--ev-ink);
    --bs-btn-disabled-border-color: transparent;
    /* border:0, not a transparent border. A native .ev-key has no border box at
       all; a transparent 1px one still eats 2px of width and height, so the
       Bootstrap key measured 2px larger than the key it mirrors. */
    --bs-btn-border-width: 0;
    background-image: var(--ev-key-crown);
    box-shadow:
        var(--ev-key-body-arrise),
        var(--ev-key-body-wall),
        var(--ev-key-body-roll),
        var(--ev-contact-1),
        var(--ev-ambient-1);
}
.btn-secondary:hover,
.btn-outline-secondary:hover,
.btn-light:hover,
.btn-dark:hover {
    box-shadow:
        var(--ev-key-body-arrise),
        var(--ev-key-body-wall),
        var(--ev-key-body-roll),
        var(--ev-contact-2),
        var(--ev-ambient-2);
}
/* A press is a real geometric event: the key travels DOWN into the panel it
   sits on, so the outer falloff is dropped for the cut stack — .ev-key:active,
   restated. No translateY (that would depict a downward light on an axial
   face). */
.btn-secondary:active,
.btn-outline-secondary:active,
.btn-light:active,
.btn-dark:active {
    background-image: none;
    box-shadow:
        var(--ev-r3-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall);
}

/* DANGER KEY COMPATIBILITY — .btn-danger mirrors .ev-key--danger.
   It is transitional adapter vocabulary, not a second doctrine: consumers
   migrate to `.ev-key.ev-key--danger` and add the canonical aria-hidden trash
   glyph plus destructive wording (or a specific aria-label when icon-only).
   CSS cannot manufacture that required semantic markup. Rest is neutral;
   danger ink/burr appear only during hover, focus and press. */
.btn-danger {
    --bs-btn-bg: var(--ev-metal-hi);
    --bs-btn-color: var(--ev-ink);
    --bs-btn-border-color: transparent;
    --bs-btn-hover-bg: var(--ev-metal-hi);
    --bs-btn-hover-color: var(--ev-danger-action-ink);
    --bs-btn-hover-border-color: transparent;
    --bs-btn-active-bg: var(--ev-metal-hi);
    --bs-btn-active-color: var(--ev-danger-action-ink);
    --bs-btn-active-border-color: transparent;
    --bs-btn-disabled-bg: var(--ev-metal-hi);
    --bs-btn-disabled-color: var(--ev-ink);
    --bs-btn-disabled-border-color: transparent;
    --bs-btn-border-width: 0;
    background-image: var(--ev-key-crown);
    box-shadow:
        var(--ev-key-body-arrise),
        var(--ev-key-body-wall),
        var(--ev-key-body-roll),
        var(--ev-contact-1),
        var(--ev-ambient-1);
}
.btn-danger:not(:disabled):not(.disabled):is(:hover, :focus-visible) {
    box-shadow:
        var(--ev-key-body-arrise),
        var(--ev-key-body-wall),
        var(--ev-key-body-roll),
        var(--ev-contact-2),
        var(--ev-ambient-2),
        0 0 0 1px var(--ev-danger-action-burr);
}
.btn-danger:focus-visible {
    outline-color: var(--ev-danger-action-ink);
}
.btn-danger:not(:disabled):not(.disabled):active {
    background-image: none;
    box-shadow:
        var(--ev-r3-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall);
}

/* Success/warning/info remain semantic-faced status actions. Danger is not in
   this family: destructive intent is durable glyph + wording, not red stock. */
.btn-success { --bs-btn-bg: var(--ev-success); --bs-btn-color: var(--ev-success-fg);
               --bs-btn-hover-bg: var(--ev-success); --bs-btn-hover-color: var(--ev-success-fg); }
.btn-warning { --bs-btn-bg: var(--ev-warning); --bs-btn-color: var(--ev-warning-fg);
               --bs-btn-hover-bg: var(--ev-warning); --bs-btn-hover-color: var(--ev-warning-fg); }
.btn-info    { --bs-btn-bg: var(--ev-info);    --bs-btn-color: var(--ev-info-fg);
               --bs-btn-hover-bg: var(--ev-info);    --bs-btn-hover-color: var(--ev-info-fg); }
.btn-success, .btn-warning, .btn-info {
    --bs-btn-border-color: transparent;
    --bs-btn-hover-border-color: transparent;
    --bs-btn-active-border-color: transparent;
    --bs-btn-border-width: 0;
    box-shadow:
        var(--ev-contact-1),
        var(--ev-ambient-1);
}

/* These three buttons are status-coloured faces. Defend only ordinary nested
   typography; danger is intentionally absent because its face is neutral. */
:is(.btn-success, .btn-warning, .btn-info)
    :where(p, small, h1, h2, h3, h4, h5, h6) {
    color: inherit;
}

/* THE GHOST KEY — .ev-key--ghost: a link-like key with no cast face, so no
   falloff. Ink only, and accent ink on hover. Bootstrap's .btn-link is the
   same object and is currently painted --bs-link-color at weight 400. */
.btn-link {
    --bs-btn-color: var(--ev-ink-dim);
    --bs-btn-hover-color: var(--ev-accent-text);
    --bs-btn-active-color: var(--ev-accent-text);
    --bs-btn-font-weight: var(--ev-weight-medium);
    background: transparent;
    box-shadow: none;
    text-decoration: none;
}
.btn-link:hover,
.btn-link:active {
    background: transparent;
    box-shadow: none;
}

/* --------------------------------------------------------------------------
   4. The molded plane — .rounded-white. Opaque material, not glass; the rim
   carries separation. (layout-surfaces.css)
   -------------------------------------------------------------------------- */
.rounded-white {
    /* Descendant pockets are cut from this raised face, so expose its
       theme-aware floor instead of falling through to the ordinary metal
       ladder. Framework-neutral .ev-molded / .ev-card now publish the SAME
       token, so this adapter host and the native raised hosts render one face
       — the adapter is not carrying a treatment the core lacks. Value and
       rendering here are unchanged; only the token's name lost its `-white-`
       when its scope stopped being Bootstrap-only. (cortex-arivo8b) */
    --ev-direct-carve-floor: var(--ev-raised-carve-floor);
    background: var(--ev-metal-hi);
    border-radius: var(--ev-radius-md);
    box-shadow:
        var(--ev-shoulder-lite),
        var(--ev-shoulder-1),
        var(--ev-contact-1),
        var(--ev-ambient-1);
    transition: var(--ev-transition-fast);
}
.card { border: 0; }
.card.rounded-white.card-clickable:hover,
a.card.rounded-white:hover {
    box-shadow:
        var(--ev-shoulder-lite),
        var(--ev-shoulder-2),
        var(--ev-contact-2),
        var(--ev-ambient-2);
    transition: none;
}
.card.rounded-white:hover {
    box-shadow:
        var(--ev-shoulder-lite),
        var(--ev-shoulder-1),
        var(--ev-contact-1),
        var(--ev-ambient-1);
}

/* Keys on a molded (raised) face — a raised key on raised material. */
.rounded-white .btn:not(.btn-link):not(.btn-danger) {
    position: relative;
    z-index: 1;
    box-shadow:
        var(--ev-contact-1),
        var(--ev-ambient-1);
}
.rounded-white .btn:not(.btn-link):not(.btn-danger):hover {
    box-shadow:
        var(--ev-contact-2),
        var(--ev-ambient-2);
}
.rounded-white .btn:not(.btn-link):not(.btn-danger):active {
    box-shadow:
        var(--ev-r3-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall);
}
.rounded-white .btn-group .btn:not(.btn-link):not(.btn-danger),
.rounded-white .btn-group .btn:not(.btn-link):not(.btn-danger):hover,
.rounded-white .btn-group .btn:not(.btn-link):not(.btn-danger):active {
    box-shadow: none;
}
.rounded-white .btn-group {
    box-shadow:
        var(--ev-contact-1),
        var(--ev-ambient-1);
    border-radius: var(--bs-border-radius);
}

/* --------------------------------------------------------------------------
   5. The machined plane — .rounded-light. Rank-1 carve; floor on n2 with n1
   held in reserve one rung below. (layout-surfaces.css)
   -------------------------------------------------------------------------- */
.rounded-light {
    background-color: var(--ev-direct-carve-floor, var(--ev-floor-n2));
    border-radius: var(--ev-radius-md);
    box-shadow:
        var(--ev-r1-line),
        var(--ev-r1-lip),
        var(--ev-r1-wall),
        var(--ev-r1-rim);
    position: relative;
}
.rounded-light::after {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: inherit;
    pointer-events: none;
    background:
        radial-gradient(var(--ev-fillet-size) var(--ev-fillet-size) at 0% 0%,
            var(--ev-fillet-light), transparent 72%),
        radial-gradient(var(--ev-fillet-size) var(--ev-fillet-size) at 100% 0%,
            var(--ev-fillet-light), transparent 72%),
        radial-gradient(var(--ev-fillet-size) var(--ev-fillet-size) at 0% 100%,
            var(--ev-fillet-light), transparent 72%),
        radial-gradient(var(--ev-fillet-size) var(--ev-fillet-size) at 100% 100%,
            var(--ev-fillet-light), transparent 72%);
}
.rounded-light > * { position: relative; z-index: 1; }
.rounded-light::before {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: inherit;
    pointer-events: none;
    background:
        radial-gradient(125% 125% at 50% 50%,
            var(--ev-lum-mid) 0%,
            transparent      52%,
            transparent      80%,
            var(--ev-lum-lo) 100%);
}
.rounded-light :is(h1, h2, h3, h4) {
    text-shadow: none;
    color: var(--ev-ink);
}

/* Form controls in a carve — pockets one rung below the panel. */
.rounded-light .form-control,
.rounded-light .form-select,
.rounded-light .form-check-input {
    background-color: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    border: 0;
    color: var(--ev-ink);
    box-shadow:
        var(--ev-r2-line),
        var(--ev-r2-lip),
        var(--ev-r2-wall),
        var(--ev-r2-rim);
}
.rounded-light .form-check-input:checked {
    background-color: var(--ev-accent);
}

/* Badges in a carve — cut one rung DARKER than the floor, rank-2 shading. */
.rounded-light .badge {
    background-color: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    box-shadow:
        var(--ev-r2-line),
        var(--ev-r2-lip);
}

/* Buttons in a carve render as DETENTS, never raised keys. The border/color
   resets are load-bearing (they cancel Bootstrap's variant paint). */
.rounded-light .btn:not(.btn-link):not(.btn-danger) {
    background-color: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    background-image: none;
    border: 0;
    color: var(--ev-ink);
    --bs-btn-bg: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    --bs-btn-color: var(--ev-ink);
    --bs-btn-border-color: transparent;
    --bs-btn-hover-bg: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    --bs-btn-hover-color: var(--ev-ink);
    --bs-btn-hover-border-color: transparent;
    --bs-btn-active-bg: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    --bs-btn-active-color: var(--ev-ink);
    --bs-btn-active-border-color: transparent;
    box-shadow:
        var(--ev-r3-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall);
}
.rounded-light .btn:not(.btn-link):not(.btn-danger):hover {
    box-shadow:
        var(--ev-r2-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall);
}
.rounded-light .btn:not(.btn-link):not(.btn-danger):active {
    box-shadow:
        var(--ev-r2-line),
        var(--ev-r2-lip),
        var(--ev-r2-wall);
}

/* Tables on a carve floor — transparent bg, achromatic scribe rules.
   A column heading names the data beneath it; it is label ink, not another
   data row. Keep that hierarchy on the shared dim rung in both themes and on
   both table names the adapter owns. The body deliberately keeps Bootstrap's
   contextual --bs-table-color at full ink. (cortex-b17cpcs) */
.rounded-light .table,
.rounded-light .data-table {
    background: transparent;
    box-shadow: none;
    border-radius: 0;
    --bs-table-bg: transparent;
}
.rounded-light .table thead th,
.rounded-light .data-table thead th {
    background: transparent;
    border-bottom-color: var(--ev-rule-strong);
    color: var(--ev-ink-dim);
}
.rounded-light .table tbody td,
.rounded-light .table tbody th,
.rounded-light .data-table tbody td,
.rounded-light .data-table tbody th {
    border-bottom-color: var(--ev-rule);
}
.rounded-light .table.table-hover tbody tr:hover td,
.rounded-light .table.table-hover tbody tr:hover th,
.rounded-light .data-table.table-hover tbody tr:hover td,
.rounded-light .data-table.table-hover tbody tr:hover th {
    background-color: var(--ev-wash);
}

/* --------------------------------------------------------------------------
   6. The component surface OUTSIDE a plane scope. (cortex-wp0qzvk)

   Sections 4 and 5 restyle components only INSIDE `.rounded-white` /
   `.rounded-light`. That was the shape of the production port this adapter
   was extracted from, where every surface sits in one plane or the other. It is
   not the shape of Bootstrap: a consumer writes `<span class="badge">`,
   `<table class="table">`, `<ul class="nav nav-pills">` and a bare `.card` all
   over a page, in no plane at all, and every one of those rendered as stock
   Bootstrap through this adapter — measured, 24/24 fidelity failures on the v3
   station before this section.

   So each rule below states the UNSCOPED default: the treatment the matching
   native `.ev-*` component declares, keyed to Bootstrap's class for the same
   object. The plane scopes keep winning where they apply — every selector here
   is (0,1,0) or (0,2,0) against their (0,2,0)/(0,3,0) — so a badge inside a
   carve is still the carve's badge, and this is only what a consumer gets when
   they have not said otherwise.

   ONE OBJECT, ONE NATIVE SOURCE. Each block names the component file it
   mirrors. A change there must be mirrored here in the same edit, exactly as
   section 7 requires for the segmented control; that is the whole content of
   the adapter-fidelity obligation, and scripts/check-adapter-fidelity.sh is its
   mechanical half.
   -------------------------------------------------------------------------- */

/* CARDS — components/cards.css (.ev-card). A cast, raised billet the content
   sits on: metal-hi face, molded shoulder + falloff, no border, no cut edge.
   Bootstrap's own card is a #fff box with a 1px #dee2e6 border. The header/
   footer caps take an achromatic scribe rule rather than a border colour. */
.card {
    --bs-card-bg: var(--ev-metal-hi);
    --bs-card-color: var(--ev-ink);
    --bs-card-border-width: 0;
    --bs-card-border-radius: var(--ev-radius-md);
    --bs-card-inner-border-radius: var(--ev-radius-md);
    --bs-card-cap-bg: transparent;
    --bs-card-cap-color: var(--ev-ink);
    /* Slot padding, matching .ev-card's: a card is a generous plane and
       Bootstrap's 1rem spacer reads tight beside it. */
    --bs-card-spacer-y: var(--ev-btn-pad-x-md);
    --bs-card-spacer-x: var(--ev-btn-pad-x-lg);
    --bs-card-cap-padding-y: var(--ev-btn-pad-x-md);
    --bs-card-cap-padding-x: var(--ev-btn-pad-x-lg);
    background-color: var(--ev-metal-hi);
    border-radius: var(--ev-radius-md);
    box-shadow:
        var(--ev-shoulder-lite),
        var(--ev-shoulder-1),
        var(--ev-contact-1),
        var(--ev-ambient-1);
}
.card-header,
.card-footer {
    border-color: var(--ev-rule);
    font-weight: var(--ev-weight-semibold);
}
/* .ev-card__body takes the LARGE pad on both axes, where the caps take the
   medium pad vertically — the caps are chrome, the body is the content well. */
.card-body { padding: var(--ev-btn-pad-x-lg); }

/* FORM CONTROLS — components/pockets.css (.ev-pocket). A control is a small cut
   into the face it sits on. Subtractive is unconstrained, so a pocket needs no
   re-classification: it carves one rung below its host wherever it lands, which
   is why this works unscoped. Border 0 is load-bearing — a pocket's boundary is
   the cut's lip, and a 1px border over it reads as a drawn outline on top of a
   cut, two boundaries for one edge. */
.form-control,
.form-select {
    background-color: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    color: var(--ev-ink);
    border: 0;
    border-radius: var(--ev-radius-sm);
    box-shadow:
        var(--ev-r2-line),
        var(--ev-r2-lip),
        var(--ev-r2-wall),
        var(--ev-r2-rim);
    transition: var(--ev-transition-fast);
}
/* Bootstrap paints the select chevron through a dark-descendant selector:
   `[data-bs-theme=dark] .form-select`. That selector keeps matching across a
   nested light scope, so its fixed pale SVG leaked into light inserts. Draw
   the same down-chevron from two flat ink wedges instead. The ink resolves on
   the SELECT itself, making the paint reciprocal without duplicating a light
   and dark SVG literal or assigning a second meaning to hue. */
.form-select {
    background-image:
        linear-gradient(45deg, transparent 50%, var(--ev-ink) 50%),
        linear-gradient(135deg, var(--ev-ink) 50%, transparent 50%);
    background-position:
        calc(100% - 0.72rem) center,
        calc(100% - 0.47rem) center;
    background-size: 0.3rem 0.3rem;
}
.form-control::placeholder { color: var(--ev-ink-dim); }
.form-control:focus::placeholder { color: transparent; }
/* FOCUS steps the pocket's own LIP up a rank and adds a thin lit edge on it —
   an indicator on the lip, not a bloom. Bootstrap's default is a 0.25rem
   coloured halo, which is exactly the focus-glow Invariant L4 forbids; killing
   --bs-box-shadow here is what removes it. */
.form-control:focus,
.form-select:focus {
    outline: none;
    border: 0;
    box-shadow:
        var(--ev-r1-line),
        var(--ev-r2-lip),
        var(--ev-r2-wall),
        var(--ev-r2-rim),
        inset 0 0 0 1px var(--ev-accent-edge);
}
.form-control:disabled,
.form-control[readonly],
.form-select:disabled {
    background-color: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    opacity: 0.86;
    filter: saturate(0.9) brightness(0.99);
}
/* A checkbox/radio is the same pocket at control scale. `:checked` fills with
   the accent as an INDICATOR — the 2px inset floor ring keeps the accent from
   reading as a material face flush with the cut, per .ev-pocket--check. */
.form-check-input {
    background-color: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    border: 0;
    border-radius: var(--ev-radius-sm);
    box-shadow:
        var(--ev-r2-line),
        var(--ev-r2-lip),
        var(--ev-r2-wall),
        var(--ev-r2-rim);
}
/* The type-qualified selectors are load-bearing, not decoration: Bootstrap sets
   `.form-check-input[type=checkbox] { border-radius: .25em }` at (0,1,1), which
   outranks an unqualified `.form-check-input` and left the pocket rounding at
   Bootstrap's font-relative 3.875px against the native 6px. */
.form-check-input[type="checkbox"] { border-radius: var(--ev-radius-sm); }
.form-check-input[type="radio"] { border-radius: 50%; }
.form-check-input:checked {
    background-color: var(--ev-accent);
    border: 0;
    box-shadow:
        var(--ev-r3-line),
        inset 0 0 0 2px var(--ev-direct-carve-floor, var(--ev-floor-n1));
}
.form-check-input:focus {
    box-shadow:
        var(--ev-r2-line),
        var(--ev-r2-lip),
        var(--ev-r2-wall),
        var(--ev-r2-rim),
        inset 0 0 0 1px var(--ev-accent-edge);
}
/* The label annotates the control beside it, which is the caption role
   (typography.css .ev-caption) — muted ink, not body ink. */
.form-label,
.form-check-label,
.col-form-label { color: var(--ev-ink-dim); }
.form-text { color: var(--ev-ink-dim); }

/* BADGES — components/badge.css (.ev-badge). The DEFAULT plane is the sticker:
   a metallic chip pressed ONTO the surface, so it wears the molded shoulder
   roll plus an outer contact + ambient cast. Bootstrap's badge is a flat
   rectangle of saturated colour at weight 700 with no material at all.

   The semantic faces are the sanctioned hue exception, and they are ALREADY
   remapped globally in section 1 (--bs-danger and its -rgb triple), so
   `.text-bg-danger` and `.bg-danger` land on Evident stock through Bootstrap's
   own rules. What those rules cannot supply is the PLANE, which is what the
   shadow stack below states — once, for every badge, coloured or not. */
.badge {
    --bs-badge-color: var(--ev-ink-dim);
    --bs-badge-font-weight: var(--ev-weight-semibold);
    --bs-badge-border-radius: var(--ev-radius-sm);
    background-color: var(--ev-metal-hi);
    color: var(--ev-ink-dim);
    border-radius: var(--ev-radius-sm);
    box-shadow:
        var(--ev-shoulder-lite),
        var(--ev-shoulder-1),
        var(--ev-contact-1),
        var(--ev-ambient-1);
}
/* A coloured badge keeps the sticker plane and swaps only the face + ink, so
   colour carries status and material carries elevation — one channel each.

   THE `!important` ON INK IS REQUIRED AND IS NOT A SHORTCUT. Bootstrap's
   `.text-bg-*` are UTILITIES, and a utility's declarations are `!important` by
   design. Its background reads `RGBA(var(--bs-danger-rgb), …)`, so section 1's
   triple remap flows through Bootstrap's own rule and lands on Evident stock
   with no override needed. Its FOREGROUND does not: `color` there is a literal
   #fff or #000 baked in at Bootstrap's build time by color-contrast(), with no
   variable to point anywhere. The only way to reach it is at the same weight.
   Measured consequence of not doing so: on the dark bench a success badge kept
   white ink over Evident's pale #4f9b60 face, where the native badge takes the
   dark #08210e — an AA failure, not a preference. */
.text-bg-danger,  .badge.bg-danger  { background-color: var(--ev-danger);  color: var(--ev-danger-fg) !important; }
.text-bg-success, .badge.bg-success { background-color: var(--ev-success); color: var(--ev-success-fg) !important; }
.text-bg-warning, .badge.bg-warning { background-color: var(--ev-warning); color: var(--ev-warning-fg) !important; }
.text-bg-info,    .badge.bg-info    { background-color: var(--ev-info);    color: var(--ev-info-fg) !important; }
.badge.text-bg-primary, .badge.bg-primary { background-color: var(--ev-accent);  color: var(--ev-accent-ink) !important; }
.badge.rounded-pill { border-radius: var(--ev-radius-pill); }

/* Explicit semantic text/background pairs and semantic badge faces retain
   their paired ink against later bare consumer typography. One variant class
   supplies the specificity; :where() adds none, preserving intentional later
   class overrides. */
:is(
    .text-bg-danger, .text-bg-success, .text-bg-warning, .text-bg-info,
    .badge.bg-danger, .badge.bg-success, .badge.bg-warning, .badge.bg-info
) :where(p, small, h1, h2, h3, h4, h5, h6) {
    color: inherit;
}

/* TABLES — compatibility mapping for existing Bootstrap markup. Greenfield
   grouped/spine tables use native `.ev-table` + `.ev-table-group`; Bootstrap
   tables keep their own semantic layout while drawing with the same achromatic
   scribe rules. The
   transparent ground is the load-bearing part — Bootstrap paints --bs-table-bg
   over the host surface, which hides whatever plane the table was put on. */
.table {
    --bs-table-bg: transparent;
    --bs-table-color: var(--ev-ink);
    --bs-table-border-color: var(--ev-rule);
    --bs-table-hover-bg: var(--ev-wash);
    --bs-table-hover-color: var(--ev-ink);
    --bs-table-striped-bg: var(--ev-wash);
    --bs-table-striped-color: var(--ev-ink);
    background: transparent;
    border-radius: 0;
    box-shadow: none;
}
.table > thead th,
.table > thead td { border-bottom-color: var(--ev-rule-strong); }
.table > tbody td,
.table > tbody th { border-bottom-color: var(--ev-rule); }

/* NAV — components/rail.css (.ev-rail). A `.nav-pills` is the rail: one
   recessed channel with the current item sitting in a deeper detent pocket cut
   into the channel's own floor. NO ACCENT — a rail is navigation, not a
   control, so the current item is carried by depth, not by hue. Bootstrap's
   default paints the active pill --bs-primary, which spends the one accent on
   "where am I" and leaves nothing to mean "live".

   `.nav-tabs` has no native twin (Evident has no tab component), so it takes
   the token mapping only: its rules become achromatic scribe lines instead of
   1px #dee2e6 borders. The gate on `.nav-pills` is deliberate — carving a
   channel under a bare `.nav` would draw a cut where no material was removed. */
.nav-link {
    --bs-nav-link-color: var(--ev-ink-dim);
    --bs-nav-link-hover-color: var(--ev-ink);
    --bs-nav-link-font-weight: var(--ev-weight-medium);
    color: var(--ev-ink-dim);
    text-decoration: none;
}
.nav-tabs {
    --bs-nav-tabs-border-color: var(--ev-rule);
    --bs-nav-tabs-link-hover-border-color: var(--ev-rule);
    --bs-nav-tabs-link-active-color: var(--ev-ink);
    --bs-nav-tabs-link-active-bg: var(--ev-metal-hi);
    --bs-nav-tabs-link-active-border-color: var(--ev-rule);
    border-bottom-color: var(--ev-rule);
}
.nav-pills {
    --ev-rail-seat-inset: var(--ev-seat-inset, 4px);
    --bs-nav-pills-border-radius: var(--ev-radius-sm);
    --bs-nav-pills-link-active-color: var(--ev-ink);
    --bs-nav-pills-link-active-bg: var(--ev-rail-seat);
    display: inline-flex;
    align-items: stretch;
    justify-content: flex-start;
    position: relative;
    background-color: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    border-radius: var(--ev-radius-sm);
    color: var(--ev-ink);
    box-shadow:
        var(--ev-r2-lip),
        var(--ev-r2-wall),
        var(--ev-r2-rim);
    clip-path: inset(0 round var(--ev-radius-sm));
    transition: var(--ev-transition-fast);
}
/* The channel's own TOP ARRIS, unbroken across the seat. Painted as a
   pseudo-element above the items rather than as the channel's inset ring,
   because an inset shadow on a parent paints UNDER its children and the seat
   would cover it — the same construction .ev-rail::after uses, for the same
   reason. ONE side only: a border, not a ring, so it cannot leak onto uncut
   sides. Allowlisted under Invariant L1 exactly as the native rail is: this
   states WHERE MATERIAL IS, not where light comes from. */
.nav-pills::after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 0;
    border-top: 1px solid var(--ev-cut-edge);
    z-index: 3;
    pointer-events: none;
}
.nav-pills .nav-item { display: flex; }
.nav-pills .nav-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5em;
    position: relative;
    flex: 0 0 auto;
    padding: var(--ev-btn-pad-y-sm) var(--ev-btn-pad-x-md);
    font: var(--ev-weight-medium) var(--ev-btn-font-sm)/1 var(--ev-font-sans);
    letter-spacing: 0.005em;
    white-space: nowrap;
    border-radius: 0;
    background: none;
    color: var(--ev-ink-dim);
    transition: color 0.12s ease;
}
.nav-pills .nav-link:hover:not(.active) { color: var(--ev-ink); }
.nav-pills .nav-link:focus-visible {
    outline: 2px solid var(--ev-accent-edge);
    outline-offset: -2px;
    z-index: 4;
}
/* The detent: a deeper pocket cut into the channel floor. Darker floor, a
   rank-3 side-wall LINE (finer than the channel, per inverted nesting), and
   rank-2 lip + wall SHADING — that shading is what carries "deeper"; a scribe
   alone would not. No rim: a --ev-r*-rim is an OUTER bright burr and this box
   sits inside the channel, where its top run would ride un-cut arris. */
.nav-pills .nav-link.active,
.nav-pills .show > .nav-link {
    color: var(--ev-ink);
    font-weight: var(--ev-weight-semibold);
    background-color: var(--ev-direct-carve-floor, var(--ev-rail-seat));
    background-image:
        linear-gradient(var(--ev-swoop-angle),
            var(--ev-lum-lo) 0%,
            transparent 55%,
            var(--ev-lum-hi) 100%);
    background-repeat: no-repeat;
    margin: var(--ev-rail-seat-inset);
    border-radius: calc(var(--ev-radius-sm) - var(--ev-rail-seat-inset));
    box-shadow:
        var(--ev-r3-line),
        var(--ev-r2-lip),
        var(--ev-r2-wall);
    z-index: 1;
}

/* LIST GROUPS — the same plane logic as a card, stated through Bootstrap's own
   variables: a list group is a molded billet whose items are separated by
   scribe rules rather than by borders. */
.list-group {
    --bs-list-group-bg: var(--ev-metal-hi);
    --bs-list-group-color: var(--ev-ink);
    --bs-list-group-border-color: var(--ev-rule);
    --bs-list-group-border-radius: var(--ev-radius-md);
    --bs-list-group-action-hover-bg: var(--ev-wash);
    --bs-list-group-action-hover-color: var(--ev-ink);
    --bs-list-group-active-bg: var(--ev-accent);
    --bs-list-group-active-color: var(--ev-accent-ink);
    --bs-list-group-active-border-color: transparent;
}

/* --------------------------------------------------------------------------
   7. Dropdown menus — Bootstrap projects the selector popover's one menu
   material rather than carrying a parallel shadow copy. (cortex-f830i1d)

   Bootstrap exposes nearly the whole dropdown through --bs-dropdown-*:
   face, rule, radius, axial cast and row state therefore remain a pure remap.
   It exposes no selected-row end mark and no nested row relief, so the small
   selector restyle below mirrors .ev-menu-panel__item for those two facts.

   `.active`, aria-current and aria-selected all mean the persistent current
   row. Weight plus a check-shaped end mark carries that fact without colour;
   the check uses accent because the selected value is the active/current one.
   Transient pointer/focus remains distinct as accented row ink plus relief,
   exactly as .ev-selector__option--active does. The panel itself never clips; in
   particular, do not widen the segmented channel's clip-path gate to a
   .btn-group that contains this overflowing part.
   -------------------------------------------------------------------------- */
.dropdown-menu {
    --bs-dropdown-padding-x: 0.5rem;
    --bs-dropdown-padding-y: 0.5rem;
    --bs-dropdown-spacer: 0.5rem;
    --bs-dropdown-color: var(--ev-ink);
    --bs-dropdown-bg: var(--ev-metal-hi);
    --bs-dropdown-border-color: var(--ev-rule);
    --bs-dropdown-border-radius: var(--ev-radius-sm);
    --bs-dropdown-border-width: 1px;
    --bs-dropdown-inner-border-radius: var(--ev-radius-sm);
    --bs-dropdown-box-shadow:
        var(--ev-shoulder-lite),
        var(--ev-shoulder-2),
        var(--ev-contact-2),
        var(--ev-ambient-2);
    --bs-dropdown-link-color: var(--ev-ink);
    --bs-dropdown-link-hover-color: var(--ev-accent-text);
    --bs-dropdown-link-hover-bg: var(--ev-floor-n1);
    --bs-dropdown-link-active-color: var(--ev-ink);
    --bs-dropdown-link-active-bg: transparent;
    --bs-dropdown-link-disabled-color: var(--ev-ink-dim);
    --bs-dropdown-item-padding-x: 0.75rem;
    --bs-dropdown-item-padding-y: 0.4375rem;
}

.dropdown-menu > .dropdown-item {
    min-height: var(--ev-btn-height-sm);
    border-radius: var(--ev-radius-sm);
    font: 400 var(--ev-btn-font-md)/1.35 var(--ev-font-sans);
}

.dropdown-menu > .dropdown-item + .dropdown-item {
    margin-block-start: 0.125rem;
}

.dropdown-menu > .dropdown-item:is(:hover, :focus, :focus-visible) {
    outline: none;
    background: var(--ev-floor-n1);
    color: var(--ev-accent-text);
    box-shadow:
        var(--ev-r3-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall),
        var(--ev-r3-rim);
}

.dropdown-menu > .dropdown-item:is(
    .active,
    [aria-current]:not([aria-current="false"]),
    [aria-selected="true"]
) {
    position: relative;
    padding-inline-end: 2rem;
    font-weight: 600;
}

.dropdown-menu > .dropdown-item:is(
    .active,
    [aria-current]:not([aria-current="false"]),
    [aria-selected="true"]
)::after {
    content: "";
    position: absolute;
    inset-inline-end: 0.75rem;
    inset-block-start: 50%;
    width: 0.5rem;
    height: 0.3rem;
    border-inline-end: 2px solid var(--ev-accent-text);
    border-block-end: 2px solid var(--ev-accent-text);
    transform: translateY(-60%) rotate(45deg);
}

/* --------------------------------------------------------------------------
   8. Segmented controls — a .btn-group that carries a SELECTION renders as
   Evident's channel-with-seat. (cortex-kvvt6y6)

   WHY THIS IS GATED AND NOT PLAIN `.btn-group`. Bootstrap overloads .btn-group
   for two unrelated things, and one production consumer ships both:

     a SEGMENTED control — domains/pages/index.php:142, a list/thumbnails view
       toggle whose selected member carries `.active`;
     an ACTION row — development/pages/feedback.php:358, `role="group"
       aria-label="Actions"`, the same `.btn-outline-secondary` children, and NO
       selected member.

   Only the first is a channel. Carving one under the second would draw a cut
   where no material was removed — the recurring defect the per-side cut audit
   exists to catch (CLAUDE.md § "How a change is proved"). Note this also rules
   out gating on `.btn-outline-secondary`: both shapes use it. The one
   structural fact that separates them is that a segmented control HAS A
   SELECTED MEMBER, so that is the gate:

       .btn-group:is(:has(> .btn.active),         Bootstrap's .active idiom
                     :has(> .btn-check:checked),  Bootstrap's radio idiom
                     .ev-segmented-group)         explicit opt-in

   The first two arms need no markup change: CC renders the initial `.active`
   server-side, so the correct render exists in the initial HTML (CLAUDE.md §
   "The language contains no JavaScript"). The opt-in class is for the genuine
   exception — file_manager/_toolbar.php:75 binds `.active` from Vue
   (`:class="{'active': viewType === 'list'}"`), so the class is absent until
   the component mounts and the group would visibly snap from stock Bootstrap
   to a channel. Adding `ev-segmented-group` there pins the channel from first
   paint; that one-class edit belongs to CC's adoption bead, not to Evident.

   `:is()` takes a FORGIVING selector list, so where :has() is unsupported that
   arm alone drops out and the group renders as stock Bootstrap rather than the
   whole rule being invalidated.

   THIS IS A DOCUMENTED SELECTOR RESTYLE, NOT PURELY A VAR REMAP. Everything the
   seat can borrow from Bootstrap's API is driven through --bs-btn-* (colour,
   border, focus, disabled) so Bootstrap's own rules paint Evident; but
   Bootstrap has no variable for a channel, a top arris, or a seat inset within
   one, so that geometry is restated — the same class of deliberate exception as
   the .btn shadow stacks in section 3.
   Deliberately NOT restated: font-size and padding, so that section 3's
   .btn-group-{xs,sm,lg,xl} scale keeps driving size (CC's own toggles carry
   .btn-sm and .btn-group-sm). Only --ev-seat-inset steps with that scale, and
   the seat's radius is derived from it rather than stated per step.

   THE SOURCE OF TRUTH IS src/components/segmented.css. A change to the channel
   or the seat there must be mirrored here in the same edit — this adapter has
   already been caught one construction behind it once (cortex-hnrbqfe replaced
   grown-flush with seated-inset), which is precisely why the probe station
   stands the two side by side.

   NO DARK-THEME RESTATEMENT IS NEEDED: every value below is an --ev-* token and
   the material layer is already remapped per-theme in the token layer, exactly
   as section 9 describes.

   The molded-plane group treatment in section 4 (.rounded-white .btn-group, a
   raised contact + ambient stack) is outranked by the channel rule below, so a
   segmented control on a molded face reads as a cut INTO that face — subtractive
   into a raised face, the legal direction. No neutralising rule is needed.
   -------------------------------------------------------------------------- */

/* THE CHANNEL. One recessed floor cut into the host face: rank-2 shading (a cut
   into an already-worked face), floor on the deepest rung so the whole track
   reads recessed, every layer zero-offset (Invariant L1). clip-path guards the
   channel's rounded corners against any seat background; the seat is inset well
   within it. HAZARD: clip-path would also clip an overflowing child, so never
   widen this gate to a group that contains a .dropdown-menu. */
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group) {
    --ev-seat-inset: 4px;
    --ev-seg-radius: var(--ev-btn-radius-md);
    /* THE TRACK BAND, stated so the channel cannot inflate. (cortex-wp0qzvk)
       The native channel is content-sized: a segment's own padding-y above and
       below a line-height-1 label IS the band, so at md it measures
       2 * 12px + 13.5px = 37.5px. A Bootstrap .btn is not content-sized —
       section 3 gives it a definite `height` from the size scale (39px at md) —
       and the seat's insetting margins then ADD to the flex line's cross size
       instead of coming off it. Measured on the v3 station: the adapter's
       channel came out 45.5px against the native 37.5px, an 8px band of floor
       the channel never cut, and it is what made the Bootstrap control read as
       a visibly bigger object beside its own reference.

       Restating the band as a definite height on the GROUP fixes the line's
       cross size, so a child's margins are honoured WITHIN it rather than
       growing it. The value is the same arithmetic the native segment performs,
       composed from the same tokens — no literal, and it steps with the size
       scale below because each step restates it from that step's tokens. */
    --ev-seg-band: calc(2 * var(--ev-btn-pad-y-md) + var(--ev-btn-font-md));
    height: var(--ev-seg-band);
    align-items: stretch;
    position: relative;
    background-color: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    border-radius: var(--ev-seg-radius);
    color: var(--ev-ink);
    box-shadow:
        var(--ev-r2-lip),
        var(--ev-r2-wall),
        var(--ev-r2-rim);
    clip-path: inset(0 round var(--ev-seg-radius));
    transition: var(--ev-transition-fast);
}

/* NO TOP ARRIS — parity with the native channel (cortex-gifqvxx). The rank-2
   rim above is already the light land that rounds the channel's top edge in.
   A separate dark ::after line fought that rim and made the adapter read as a
   different component, so the entire pseudo-element is absent in both themes. */

/* An unselected seat is NOT DRAWN — no fill, no border, no shadow. It is a
   label lying on the channel floor; the bare track between labels is what reads
   as a channel. Fix-by-removal. The --bs-btn-* block is the var-remap half; the
   direct background/border resets are load-bearing because the plane scopes in
   sections 4-5 set those properties themselves and would otherwise repaint the
   seat as a detent. */
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group) > .btn {
    --bs-btn-bg: transparent;
    --bs-btn-border-color: transparent;
    --bs-btn-border-width: 0;
    --bs-btn-color: var(--ev-ink-dim);
    --bs-btn-font-weight: 500;
    --bs-btn-hover-bg: transparent;
    --bs-btn-hover-border-color: transparent;
    /* Hover holds the resting ink — see the no-hover-ink note below. */
    --bs-btn-hover-color: var(--ev-ink-dim);
    --bs-btn-active-bg: var(--ev-accent);
    --bs-btn-active-border-color: transparent;
    --bs-btn-active-color: var(--ev-accent-ink);
    --bs-btn-focus-box-shadow: none;
    --bs-btn-disabled-bg: transparent;
    --bs-btn-disabled-border-color: transparent;
    --bs-btn-disabled-color: var(--ev-ink-dim);
    --bs-btn-disabled-opacity: 0.55;
    position: relative;
    flex: 0 0 auto;
    /* Fill the band the group now states, instead of carrying the size scale's
       own definite height — see --ev-seg-band above. */
    height: 100%;
    /* Cancel Bootstrap's -1px border-collapse pull: there are no borders here
       to collapse, so it would only shift the labels. */
    margin-left: 0;
    background-color: transparent;
    background-image: none;
    border: 0;
    color: var(--ev-ink-dim);
    border-radius: 0;
    transition: color 0.12s ease;
}
/* Unselected seats stay undrawn through every state — mirrors the same
   neutralising idiom used for .rounded-white .btn-group in section 4. */
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group) > .btn,
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group) > .btn:hover,
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group) > .btn:active {
    box-shadow: none;
}
/* NO HOVER INK, EITHER STATE — parity with the native control (cortex-gifqvxx).
   An earlier native pass woke a hovered label toward full ink; a founder
   readthrough found it "flicking", and because the only label that goes bright
   is the selected one, hover ink read as a spurious selection flicker. Both the
   unselected hover rule and the selected-label hover override were dropped
   there. Label colour changes ONLY on selection; the cursor still signals
   clickability. The adapter kept both rules for one release — this is the
   removal that catches it up. */
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group) > .btn:focus-visible {
    outline: 2px solid var(--ev-accent-edge);
    outline-offset: -2px;
    box-shadow: none;
    z-index: 4;
}

/* THE SEAT (selected): a raised accent-lit block SEATED WITHIN the channel. It
   is inset from all four channel walls by --ev-seat-inset and rounds on all
   four corners (channel radius minus the inset), so the channel's floor and
   rounded top rim read UNIFORM above every seat, selected or not — it does not
   breach the channel's top edge. The accent face is the lit crown treatment,
   and a live surface reads bright and takes DARK ink (--ev-accent-ink); white
   ink would imply the metal itself is blue.

   This mirrors the component's SECOND-PASS construction (cortex-hnrbqfe). The
   first pass grew the seat flush to the top row and clipped its corner; that
   left a square-proud selected top against a uniformly-rounded recessed rim —
   the "weird upper border" — and was dropped. If you are reading an older
   adapter that sets --ev-seat-travel and a negative margin-top, it is stale. */
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group)
    > :is(.btn.active, .btn-check:checked + .btn) {
    --bs-btn-font-weight: 600;
    color: var(--ev-accent-ink);
    background-color: var(--ev-accent);
    margin: var(--ev-seat-inset);
    /* PADDING PAYS FOR THE HORIZONTAL MARGIN. (cortex-wp0qzvk)
       Native's seat is a separate absolutely-positioned span, so insetting it
       costs the segment nothing: the label box keeps its natural width and the
       seat is drawn 2 * inset narrower INSIDE it. The adapter has no separate
       element — the .btn is both label and seat — so the insetting margins land
       on the SAME box and grow the slot instead of shrinking the seat.
       Measured: the Bootstrap seat painted 64.0px against the native 56.0px,
       and the whole control ran wide. Taking the inset back out of the
       horizontal padding restores both: the outer width returns to the label's
       natural width, and the painted face is 2 * inset narrower, exactly as the
       native seat is. Read from --bs-btn-padding-x rather than a size token, so
       it follows whichever step section 3 put on this button. */
    padding-left: calc(var(--bs-btn-padding-x) - var(--ev-seat-inset));
    padding-right: calc(var(--bs-btn-padding-x) - var(--ev-seat-inset));
    /* The adapter follows the same concentric nested-corner law as native:
       inner radius = host radius − inset. */
    border-radius: calc(var(--ev-seg-radius) - var(--ev-seat-inset));
    /* THIS LINE IS LOAD-BEARING — DO NOT "TIDY" IT AWAY.
       The seat insets by taking `margin` out of a band whose height the GROUP
       states (--ev-seg-band, above). Section 3 gives every .btn a definite
       height from the size scale; left in place here that height plus the
       margins would exceed the band and the item would overflow the channel it
       is supposed to sit inside. Deriving the height from the band instead
       keeps exactly --ev-seat-inset of channel floor visible on all four sides,
       which is what makes it read as SEATED rather than as a tab covering the
       track.

       An earlier pass tried `height: auto; align-self: stretch` here on the
       theory that releasing the height restores flex stretch. It does not: a
       margin is added to the item's OUTER cross size, so the line — and with it
       the channel — simply grew by 2 * inset. Measured 45.5px against the
       native 37.5px. */
    height: calc(100% - 2 * var(--ev-seat-inset));
    box-shadow:
        /* NO LIT TOP RIM — parity with the native moving seat, which dropped
           `inset 0 1px 0 0 var(--ev-acc-crown)` in cortex-qws8bck. Both
           darkenings that line was countering are gone (the group/channel arris,
           and the open-face cast that cortex-cvyhdu3 replaced with the tight
           --ev-seat-contact seam), so it had stopped reading as a lit crown and
           started reading as a white outline arcing over the seat's rounded top.
           It was also this file's only offset shadow, i.e. an Invariant L1
           breach. The source of truth is src/components/segmented.css; see the
           full argument on the seat's box-shadow there.

           FALLOFF SIZED TO THE PART — parity again (cortex-ht04oo2). This stack
           also carried var(--ev-acc-shoulder-3), `inset 0 0 15px`, on a seat
           29-31px tall: the falloff from the top edge met the one from the
           bottom, so no un-darkened crown survived in between and the seat's top
           was being darkened over the blue after all. .ev-key--primary and
           .btn-primary both omit shoulder-3; the two seats now do too. */
        var(--ev-acc-shoulder-1),
        var(--ev-acc-shoulder-2),
        /* Mirrors the component (cortex-cvyhdu3): a seat is inset inside the
           channel with only --ev-seat-inset of floor around it, so it gets a
           tight contact seam and NOT the open-face --ev-contact-1 +
           --ev-ambient-1 cast, whose 14px throw floods that ring. The old pair
           read as 4 levels on the dark bench and 26 over a 14px ramp on the
           light one — a treatment tuned in dark, leaking into light as a tinge.
           --ev-seat-contact is per-theme so both benches read alike. */
        var(--ev-seat-contact);
    z-index: 1;
}
/* The inset steps with the size scale exactly as the component does (sm 3px,
   md 4px, lg 5px, lg on the larger channel radius). Either carrier is honoured:
   Bootstrap puts the step on the GROUP (.btn-group-sm) but CC's domains toggle
   puts it on the BUTTONS (<a class="btn btn-sm">), so both are matched. The
   seat's radius follows automatically — it is derived from the inset. */
.btn-group.btn-group-sm:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group),
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group):has(> .btn-sm) {
    --ev-seat-inset: 3px;
    --ev-seg-band: calc(2 * var(--ev-btn-pad-y-sm) + var(--ev-btn-font-sm));
    --ev-seg-radius: var(--ev-btn-radius-sm);
}
.btn-group.btn-group-lg:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group),
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group):has(> .btn-lg) {
    --ev-seat-inset: 5px;
    --ev-seg-band: calc(2 * var(--ev-btn-pad-y-lg) + var(--ev-btn-font-lg));
    --ev-seg-radius: var(--ev-btn-radius-lg);
}
/* NO SELECTED-LABEL HOVER OVERRIDE (cortex-gifqvxx, mirrored cortex-wp0qzvk).
   The native control changes label colour ONLY on selection, in either
   direction; the adapter's selected-label hover rule was the last survivor of
   the dropped hover-ink pass and made the seat's ink shift under the pointer
   where the native seat holds. */

/* GROOVE DIVIDERS between adjacent segments (cortex-gifqvxx, mirrored here).
   Two 1px achromatic runs a pixel apart — an ink run with a lit companion —
   read as an inset milled seam, the same physics as the pinstripe grain. Inset
   top and bottom so it is a short carved detail on the channel floor rather
   than a full-height rule to the rim.

   MUTED AROUND THE SEAT: seams touching the selected segment remain as a
   quarter-strength material trace and transition there instead of blinking
   out. Native expresses that as `--selected::after` and
   `--selected + seg::after`; the adapter mirrors those two boundaries with
   `.active` selectors and the shared --ev-seg-groove-muted-opacity token.

   DRAWN ON ::after FOR ORDINARY BUTTONS. The active segment's ::before is the
   crown gradient below, so the seam uses the other pseudo-element. Bootstrap
   reserves ::after only on `.dropdown-toggle` for its caret; those buttons are
   excluded rather than overwriting that functional affordance.

   KNOWN GAP, STATED RATHER THAN HIDDEN: Bootstrap's radio idiom interleaves
   `<input class="btn-check">` between the labels, so `.btn + .btn` never
   matches and a radio-built segmented control renders with no seams. A
   dropdown-toggle boundary is likewise left bare to preserve Bootstrap's
   caret. The seam is a detail on the floor, not a boundary the control depends
   on, so both cases degrade to the pre-cortex-gifqvxx reading rather than to
   something wrong.

   The seam's colours and inset are read straight from the token layer
   (--ev-seg-groove-*, tokens.css), which is also where the component reads
   them, so the two cannot drift and the adapter carries no literal. */
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group)
    > .btn:not(.dropdown-toggle) + .btn:not(.dropdown-toggle)::after {
    content: "";
    position: absolute;
    left: 0;
    top: var(--ev-seg-groove-inset);
    bottom: var(--ev-seg-groove-inset);
    width: 2px;
    background: linear-gradient(
        90deg,
        var(--ev-seg-groove-ink) 0,
        var(--ev-seg-groove-ink) 1px,
        var(--ev-seg-groove-land) 1px,
        var(--ev-seg-groove-land) 2px);
    /* Centre the 2px seam on the inter-segment boundary. */
    transform: translateX(-1px);
    opacity: 1;
    transition: opacity var(--ev-transition-fast);
    pointer-events: none;
    z-index: 2;
}
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group)
    > .btn:not(.dropdown-toggle) + .btn.active:not(.dropdown-toggle)::after,
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group)
    > .btn.active:not(.dropdown-toggle) + .btn:not(.dropdown-toggle)::after {
    opacity: var(--ev-seg-groove-muted-opacity);
}

/* THE CROWN RETURN on the seat — parity with the component (cortex-ht04oo2).
   A crowned face under the one axial light returns most light at its crest and
   rolls away toward every shoulder, so the highlight is a centred, zero-offset
   ellipse. It replaces the 118deg swoop this rule used to carry: that gradient
   anchored its bright stop at the top-LEFT CORNER, which on a seat this size is
   a directional white wash that desaturates the accent rather than lighting it,
   and it is below the scale at which a swoop is the right finish at all.

   It cannot arc over the seat's rounded corners BY CONSTRUCTION, not by tuning:
   for radial-gradient(W% H% at 50% 50%) the box corner always sits at
   hypot(0.5/W, 0.5/H) of the gradient's scale regardless of the box's size or
   aspect ratio — 0.637 at 90% / 160% — while the middle of the top edge sits at
   0.312, so the `transparent` stop at 50% is past every corner and short of the
   crest. That matters more here than in the component: the adapter's seat is the
   .btn itself, so its width is whatever the consumer's label happens to be.
   The source of truth is src/components/segmented.css; the full argument, the
   measurements and the reason there are only two stops live there.

   No offset anywhere (Invariant L1). Bootstrap uses ::after on .dropdown-toggle
   for the caret but never ::before on .btn, so this slot is unoccupied. */
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group)
    > :is(.btn.active, .btn-check:checked + .btn)::before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    pointer-events: none;
    background: radial-gradient(
        90% 160% at 50% 50%,
        var(--ev-acc-lum-hi) 0%,
        transparent 50%);
    z-index: 0;
}
/* Lift the label above its own crown. CC's toggles are icon-only (<i class="bi">),
   so this must reach element children, not just text. */
.btn-group:is(:has(> .btn.active), :has(> .btn-check:checked), .ev-segmented-group)
    > :is(.btn.active, .btn-check:checked + .btn) > * {
    position: relative;
    z-index: 1;
}

/* --------------------------------------------------------------------------
   9. The on/off switch — Bootstrap's .form-switch renders as Evident's milled
   channel with a travelling molded knob. (cortex-4t1e6px)

   THE SOURCE OF TRUTH IS src/components/switch.css. That file carries the
   fabrication argument (why a raised boss over a cut is legal, which channel
   carries which meaning, why a lateral translate is the one honest translate);
   this section only re-states it for markup the adapter cannot restructure.
   A change to the switch's geometry or finish belongs there first.

   WHY THIS IS A SELECTOR RESTYLE AND NOT A VAR REMAP. Bootstrap DOES expose a
   variable for the thumb — `--bs-form-switch-bg` — but it holds a flat SVG
   disc, a silhouette with no material in it. Evident's knob is a cast boss:
   a crown, a shoulder roll down to an arris, and its own contact falloff on
   the floor it rides over. Bootstrap has no variable for any of those, exactly
   as it has none for a channel or a seat (section 8). So the adapter takes the
   background layers directly.

   ONE ELEMENT, TWO PARTS. `.ev-switch` is three elements — wrapper, track,
   knob — and Bootstrap's markup is one `<input>` inside a `.form-check`
   wrapper. The adapter may not add elements, and it may not reach for a
   pseudo-element either: `::before`/`::after` do not render on form controls
   in every engine, so a knob drawn that way would simply be absent for some
   consumers. The honest single-element construction is therefore:

       the INPUT itself   is the TRACK  — the machined channel: floor colour,
                                          pill radius, rank-3 inset stack.
       BACKGROUND LAYERS  are the KNOB  — the cast face and its contact
                                          falloff, drawn as radial gradients
                                          and TRAVELLED by background-position.

   This is the same mechanism Bootstrap itself uses for the thumb (a positioned
   background image moved from `left center` to `right center` on `:checked`),
   so it is a like-for-like override rather than a new one. And a radial
   gradient is axially symmetric by construction, so the knob's falloff cannot
   acquire an x/y offset — Invariant L1 holds structurally here, not by
   convention.

   The four layers, top to bottom:
     1. the knob's crown gloss        sized --ev-sw-knob, travels
     2. the knob's cast face          sized --ev-sw-knob, travels
     3. the knob's contact falloff    sized knob + 2 * --ev-sw-fall, travels
     4. the channel floor's curvature sized 100%, does not move
   Layers 1-3 are the gradient restatement of the component's molded stack:
   1 is --ev-shoulder-lite (the bright inner glow that domes a cast face), 2 is
   the face rolling from --ev-metal-hi down the shoulder to the arris, and 3 is
   --ev-contact-1 as a ring on the floor. Layer 4 is the same milled-floor sheen
   `.ev-switch__track::before` draws. The channel does not move; only the part
   in it does.

   EVERY CIRCLE IS SIZED `closest-side`, WHICH IS LOAD-BEARING. A bare
   `radial-gradient(circle at 50% 50%, ...)` defaults to `farthest-corner`, so
   in a square box the 100% stop sits at the CORNER — sqrt(2) times the box's
   half-width — and every stop inside it lands outside the visible box. The
   knob then never closes and paints as a filled SQUARE. It rendered exactly
   that way on the first build of this section; `closest-side` puts 100% on the
   box edge, which is where the part's arris actually is.

   POSITION IS RESTATED, NOT INHERITED. Bootstrap's own `:checked` travel rule
   is `.form-switch .form-check-input:checked`, the same specificity as the
   selectors below, so leaving it to drive the travel would be a coin toss
   decided by load order. Both seats are stated here explicitly, and they are
   inset by --ev-sw-pad so the knob's shoulders land on the raised end-lands
   rather than hanging off the channel.

   DELIBERATELY NOT RESTATED: `.form-check-reverse` (no consumer ships it) and
   `.form-switch-lg` (consumer markup carries it in three places but neither
   Bootstrap nor the application defines it, so it renders at the default step today
   and still will — inventing a size for it here would be a rendering change no
   bead asked for). The size step below is driven by `.form-check-sm`-free
   geometry variables, so a consumer can set --ev-sw-h/--ev-sw-w on the wrapper.

   This section is after section 6, so its (0,3,0) selectors also win over that
   section's `.rounded-light .form-check-input` carve — which is the generic
   checkbox pocket and must not paint a switch.
   -------------------------------------------------------------------------- */

/* Geometry is named once on the WRAPPER and every part derives from it, exactly
   as `.ev-switch` does — the knob diameter, the travel and the gutter are all
   functions of the track box, so the boss can never drift off the channel. */
.form-check.form-switch {
    --ev-sw-h: 26px;                                  /* track height */
    --ev-sw-w: 46px;                                  /* track width  */
    --ev-sw-pad: 3px;                                 /* land inset the knob rides within */
    --ev-sw-fall: 3px;                                /* the knob's contact falloff radius */
    --ev-sw-gap: 0.55em;                              /* control -> label, as .ev-switch */
    --ev-sw-knob: calc(var(--ev-sw-h) - 2 * var(--ev-sw-pad));
    --ev-sw-travel: calc(var(--ev-sw-w) - var(--ev-sw-h));

    /* Bootstrap's gutter is a fixed 2.5em and its input a fixed 2em; both are
       replaced so the label clears a track measured in the geometry above. */
    padding-left: calc(var(--ev-sw-w) + var(--ev-sw-gap));
    min-height: var(--ev-sw-h);
}

/* THE TRACK. Pill-shaped rank-3 cut into the host face, floor at n1 (the
   deepest rung — the channel is a genuine cut the knob drops into). INSET
   only: an inset+outer pair would claim cast-and-cut at once. OFF is
   oxidized — finish carries liveness, so a read-only channel reads dulled. */
.form-check.form-switch .form-check-input {
    width: var(--ev-sw-w);
    height: var(--ev-sw-h);
    margin-left: calc(-1 * (var(--ev-sw-w) + var(--ev-sw-gap)));
    margin-top: 0;
    border: 0;
    border-radius: var(--ev-radius-pill);
    background-color: var(--ev-direct-carve-floor, var(--ev-floor-n1));
    box-shadow:
        var(--ev-r3-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall);
    filter: saturate(0.9) brightness(0.98);
    opacity: 0.92;

    /* THE KNOB — a cast boss: crown, shoulder roll, arris; then its own
       contact falloff on the floor beneath it. Achromatic in both states, so
       hue never lands on the raised part (painted metal is not a material). */
    background-image:
        radial-gradient(circle closest-side at 50% 50%,
            var(--ev-lum-hi) 0 26%,
            transparent      76%),
        radial-gradient(circle closest-side at 50% 50%,
            var(--ev-metal-hi) 0 62%,
            var(--ev-metal)    95%,
            transparent        97%),
        radial-gradient(circle closest-side at 50% 50%,
            var(--ev-contact-tint) 0 76%,
            transparent            100%),
        radial-gradient(120% 140% at 50% 50%,
            var(--ev-lum-mid) 0%,
            transparent      54%,
            transparent      80%,
            var(--ev-lum-lo) 100%);
    background-repeat: no-repeat;
    background-size:
        var(--ev-sw-knob) var(--ev-sw-knob),
        var(--ev-sw-knob) var(--ev-sw-knob),
        calc(var(--ev-sw-knob) + 2 * var(--ev-sw-fall))
            calc(var(--ev-sw-knob) + 2 * var(--ev-sw-fall)),
        100% 100%;
    /* OFF — the knob is seated in the LEFT land. */
    background-position:
        left var(--ev-sw-pad) center,
        left var(--ev-sw-pad) center,
        left calc(var(--ev-sw-pad) - var(--ev-sw-fall)) center,
        center;

    transition:
        background-position 160ms var(--ev-press-out-ease),
        background-color var(--ev-transition-fast),
        box-shadow var(--ev-transition-fast),
        filter var(--ev-transition-fast),
        opacity var(--ev-transition-fast);
}

/* ON — the knob has TRAVELLED to the right seat and the channel is LIVE.
   Geometry states the state; finish lifts the oxide veil; the floor lights to
   the accent as an INDICATOR fill, which is legal precisely because it is an
   indicator and not a material face. The accent's own dark ink stack keeps the
   lit channel reading carved rather than painted flat. */
.form-check.form-switch .form-check-input:checked {
    background-color: var(--ev-accent);
    border-color: transparent;
    filter: none;
    opacity: 1;
    box-shadow:
        var(--ev-acc-shoulder-1),
        var(--ev-acc-shoulder-2),
        var(--ev-acc-shoulder-3);
    background-image:
        radial-gradient(circle closest-side at 50% 50%,
            var(--ev-lum-hi) 0 26%,
            transparent      76%),
        radial-gradient(circle closest-side at 50% 50%,
            var(--ev-metal-hi) 0 62%,
            var(--ev-metal)    95%,
            transparent        97%),
        radial-gradient(circle closest-side at 50% 50%,
            var(--ev-contact-tint) 0 76%,
            transparent            100%),
        radial-gradient(120% 140% at 50% 50%,
            var(--ev-acc-lum-hi) 0%,
            transparent      54%,
            transparent      80%,
            var(--ev-acc-lum-lo) 100%);
    background-position:
        right var(--ev-sw-pad) center,
        right var(--ev-sw-pad) center,
        right calc(var(--ev-sw-pad) - var(--ev-sw-fall)) center,
        center;
}

/* Hover lifts the part one falloff step. Because every layer's size and seat
   are functions of --ev-sw-fall, widening it alone re-centres the falloff —
   the lift is finish (elevation), never a colour bloom. */
.form-check.form-switch .form-check-input:not(:disabled):hover {
    --ev-sw-fall: 4px;
}

/* :active — the part SEATS DOWN into its housing as you grab it: the broad
   falloff collapses to a tight contact line, exactly as `.ev-key:active`
   travels into the panel. No y-translate; the seat is carried by the falloff. */
.form-check.form-switch .form-check-input:not(:disabled):active {
    --ev-sw-fall: 1px;
}

/* Focus — a finish event on the channel lip, never a bloom (Invariant L4).
   Bootstrap's focus ring is a spread box-shadow on the same property the carve
   stack occupies, so it must be restated rather than merely unset. */
.form-check.form-switch .form-check-input:focus {
    border-color: transparent;
    outline: 0;
    box-shadow:
        var(--ev-r3-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall);
}
.form-check.form-switch .form-check-input:focus:checked {
    box-shadow:
        var(--ev-acc-shoulder-1),
        var(--ev-acc-shoulder-2),
        var(--ev-acc-shoulder-3);
}
.form-check.form-switch .form-check-input:focus-visible {
    box-shadow:
        var(--ev-r2-line),
        var(--ev-r3-lip),
        var(--ev-r3-wall),
        inset 0 0 0 1px var(--ev-accent-edge);
}
.form-check.form-switch .form-check-input:focus-visible:checked {
    box-shadow:
        var(--ev-acc-shoulder-1),
        var(--ev-acc-shoulder-2),
        inset 0 0 0 1px var(--ev-acc-edge-glow);
}

/* DISABLED — oxidized and inert on top of whatever on/off state it holds.
   Bootstrap's flat opacity:.5 is replaced by the component's own read. */
.form-check.form-switch .form-check-input:disabled {
    filter: saturate(0.9) brightness(0.98);
    opacity: 0.7;
}
.form-check.form-switch:has(.form-check-input:disabled) {
    cursor: not-allowed;
}

/* The label: flat glyphs on a solid face (Invariant L3), neutral in both
   states — putting ink weight on "live" would double-encode the state that
   geometry and finish already carry. */
.form-check.form-switch .form-check-label {
    color: var(--ev-ink);
    text-shadow: none;
    cursor: inherit;
}

/* Reduced motion: Bootstrap kills the travel transition at (0,2,0), which the
   rules above outrank, so the intent has to be restated at this specificity. */
@media (prefers-reduced-motion: reduce) {
    .form-check.form-switch .form-check-input {
        transition: none;
    }
}

/* Adapter-only part carriers extend native siting enforcement at the same
   boundary where they are introduced. A segmented group is a fabricated
   channel, so scribes on it or anywhere within it emit no mark. */
.ev-segmented-group.ev-scribe::before,
.ev-segmented-group.ev-scribe::after,
.ev-segmented-group .ev-scribe::before,
.ev-segmented-group .ev-scribe::after {
    content: none;
}

/* --------------------------------------------------------------------------
   10. Pagination — Bootstrap's current page is the same achromatic selected
   seat as native Evident pagination, with accent ink carrying the location.

   Bootstrap declares this family on .pagination itself, so the global remaps
   cannot reach it: --bs-pagination-active-bg otherwise remains #0d6efd even
   after --bs-primary and --bs-link-color have moved to Evident. These remain
   pure Bootstrap API remaps. Available destinations are accent ink on the
   surrounding material; the current destination is a neutral metal seat,
   never a coloured face. */
.pagination {
    --bs-pagination-color: var(--ev-accent-text);
    --bs-pagination-bg: transparent;
    --bs-pagination-border-color: var(--ev-rule);
    --bs-pagination-hover-color: var(--ev-accent-text);
    --bs-pagination-hover-bg: var(--ev-floor-n1);
    --bs-pagination-hover-border-color: var(--ev-rule);
    --bs-pagination-focus-color: var(--ev-accent-text);
    --bs-pagination-focus-bg: var(--ev-floor-n1);
    --bs-pagination-focus-box-shadow: inset 0 0 0 1px var(--ev-accent-edge);
    --bs-pagination-active-color: var(--ev-accent-text);
    --bs-pagination-active-bg: var(--ev-metal-hi);
    --bs-pagination-active-border-color: var(--ev-rule);
    --bs-pagination-disabled-color: var(--ev-ink-dim);
    --bs-pagination-disabled-bg: transparent;
    --bs-pagination-disabled-border-color: var(--ev-rule);
}

/* --------------------------------------------------------------------------
   11. Dark-theme mirror. The material layer is already remapped per-theme in
   the token layer, so the carve/plane rules above follow the theme with NO
   restatement here. Only the genuinely dark-scoped selector paint remains —
   the molded plane's opaque snap and the outline-secondary contrast boost.
   (layout-theme.css)
   -------------------------------------------------------------------------- */
/* No `background` here. It used to restate the face as a raw #212529 —
   Bootstrap's $gray-900, rgb(33,37,41), which was both a literal in a file whose
   own rule is "never introduce a literal" and a blue-cast non-achromatic on a
   PANEL surface (Invariant L4 governs the panel; only content may carry hue).
   Deleting it is not a substitution: the base rule above already sets
   `background: var(--ev-metal-hi)`, which is theme-aware and resolves to
   #272727 in dark — within two tones of the literal it replaces. The override's
   real job is the box-shadow half (the inset white hairline), which stays.
   Net: .rounded-white now converges on the same face token .ev-molded uses.
   (cortex-yzjllwa)

   THE OTHER HALF WENT THE SAME WAY (cortex-wp0qzvk). What cortex-yzjllwa left
   standing was a fifth shadow layer, `inset 0 0 0 1px rgba(255,255,255,0.05)` —
   a faint white hairline around the dark molded plane. It was the same defect
   its sibling had, one property along: a raw literal in a file whose rule is
   that it carries none, and — more to the point of this bead — a layer the
   NATIVE molded plane does not have. .ev-molded and .ev-card declare a
   four-layer stack in both themes (core.css, components/cards.css); nothing
   mirrors this hairline, so a Bootstrap card on a dark bench wore an edge its
   own reference does not. Deleting the rule leaves the base .rounded-white
   stack, which is that four-layer stack, already per-theme. */
/* The hover FILL is the dim rung, not the faint one. Faint is fine as the
   RESTING border — a UI boundary, judged at the 3:1 non-text floor, which it
   clears at 4.01:1 on --ev-bg. (That figure was 3.50:1 when written; the dark
   canvas moved #1a1d21 -> #0e0e0e in cortex-r3qtun9, so the border gained
   headroom. Re-measured under cortex-yzjllwa.) But the moment it becomes the hover face it is
   a text ground, and the label on it (--ev-metal-hi) measured 3.09:1 against
   the 4.5:1 floor. Stepping the fill to --ev-ink-dim reads correctly as well
   as measuring correctly: hover lifts the face one rung toward the ink, which
   is what a hover IS here. Same label, now 5.31:1. (cortex-g2j0rmv.)

   BOTH RULES BELOW ARE SUPERSEDED AND HAVE BEEN REMOVED (cortex-wp0qzvk). The
   reasoning above is preserved because the measurements are real and the next
   reader should not have to rediscover them; what changed is the object they
   describe.

   `.btn-outline-secondary` — the dark override tuned a BORDER colour and a
   hover FILL, which is the vocabulary of an outline button. Section 3 now maps
   .btn-secondary / .btn-outline-secondary / .btn-light / .btn-dark onto the one
   neutral key Evident actually ships (.ev-key: a raised cast key, metal-hi
   face, flat ink, no rim line), because "a stock grey outline in light, a
   hand-tuned outline in dark" is not a native component — it is Bootstrap
   wearing two different hats. That is a deliberate semantic call and worth
   knowing about: a consumer that wrote .btn-outline-secondary expecting no fill
   now gets the neutral key. It is the same call the adapter already made in
   dark, applied consistently and in both themes. The AA figures above concerned
   the outline's border and hover face, neither of which now exists; the neutral
   key's own contrast is verified natively.

   `.form-control:not(:focus)` — set a dark border-colour. Section 6 gives every
   pocket `border: 0`, because a pocket's boundary is the cut's lip and a border
   over it draws two boundaries for one edge. A colour on a zero-width border
   paints nothing, so the rule was already inert; it also carried a literal. */
