/* marketing-cms.css — the approved CMS-PAGE composition, vendored from design-system.css.
 *
 * SOURCE: liverec-design-r2/gallery-510/assets/design-system.css (sha256 303b2adf8784…), the sheet the
 * founder-approved `Candidate/CMS Pages/About Us.html` (APPROVED-SET.tsv:253) links. The
 * `(marketing)` route group deliberately does not serve design-system.css (see layout.tsx),
 * so the rules the About composition needs are copied here VERBATIM, one block per selector,
 * exactly as marketing-pricing.css does for the Choose Plan frame. Nothing here is authored.
 *
 * Selected: every rule whose selector names one of the About composition classes
 * (cms-hero … cms-faq, the notches, mk-arrow, mkt-faqwrap) plus .mkt-toggle for the pricing
 * page. Excluded on purpose: the decorative job cards, team rail and brand strip (no ratified
 * people or brands), and mkt-faqcol (C-5: emitted by the frame, defined nowhere — copying
 * nothing is the honest act).
 *
 * TWO TOKENS the rules read that the served marketing sheets do not define are carried with the
 * same values design-system.css gives them (`--ink-2`, `--tint-panel`). Vendored, not invented.
 * Generated 2026-08-24; 70 rule blocks.
 */
:root{--ink-2:#33343A;--tint-panel:#EEF3FF}
.ch-av .mk-arrow{width:22px;height:22px;filter:brightness(0) saturate(100%) invert(29%) sepia(94%) saturate(2476%) hue-rotate(216deg) brightness(97%) contrast(96%)}
.mk-arrow{display:inline-block;background:url(arrow-nav-alpha.png) center/contain no-repeat}
.jc-cur .mk-arrow{filter:brightness(0) saturate(100%) invert(58%) sepia(60%) saturate(900%) hue-rotate(350deg)}
.jd-meta .mk-arrow,.jd-meta svg{opacity:.7}
.mkt-toggle{display:flex;justify-content:center;margin:26px 0 30px}
.mkt-faqwrap{padding:20px 56px 70px}
/* 2026-10-05 OPERATOR ORDER ("the corner cutout ... more rounded ... like the homepage banner"): cut-out inner radius = the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 12px (.cms-band, /guides) and 16px (.cms-hcband, /help-center); width/height unchanged. Overrides the frame's 12px (.cms-band, /guides) and 16px (.cms-hcband, /help-center) by that order. NO ledger row. File-only pass: NOT built, NOT measured in a browser. */
.cms-band .cms-notch.nt-tl{width:52px;height:53px;border-bottom-right-radius:20px}
.cms-band .cms-notch.nt-br{width:52px;height:53px;border-top-left-radius:20px}
.cms-hcband .cms-notch.nt-tl{width:89px;height:89px;border-bottom-right-radius:20px}
.cms-hcband .cms-notch.nt-br{width:89px;height:89px;border-top-left-radius:20px}
.cms-hero{background:var(--tint-panel);text-align:center;padding:172px 20px 148px;position:relative;overflow:hidden}
.cms-hero-in{max-width:780px;margin:0 auto;position:relative}
.cms-hero-in>svg{color:var(--brand)}
.cms-hero h1{font-family:var(--font-head);font-size:40px;font-weight:800;letter-spacing:-.02em;line-height:1.3;margin:14px 0 18px}
.cms-hero-in>p{color:var(--ink-2);font-size:15.5px;line-height:1.65;margin:0 auto 28px;max-width:660px}
.cms-ctas{display:flex;gap:14px;justify-content:center}
.cms-2col{display:grid;grid-template-columns:420px 1fr;gap:60px;padding:82px 170px 36px}
.cms-2col h2,.cms-csec h2,.cms-why h2,.cms-team h2{font-family:var(--font-head);font-size:36px;font-weight:800;letter-spacing:-.01em;margin:0}
.cms-2col-tx p{font-size:14.5px;line-height:1.7;margin:0 0 18px;color:var(--ink)}
.cms-stats{display:grid;grid-template-columns:repeat(4,1fr);padding:58px 170px;text-align:center}
.cms-stat{border-inline-start:1px solid var(--line)}
.cms-stat:first-child{border-inline-start:0}
.cms-stat .n{font-family:var(--font-head);font-size:44px;font-weight:800}
.cms-stat .n span{color:var(--brand)}
.cms-stat .l{color:var(--ink-2);font-size:14px;margin-top:6px}
.cms-csec{text-align:center;padding:42px 170px 30px}
.cms-csec>p{color:var(--ink-2);font-size:14.5px;line-height:1.6;margin:14px auto 0;max-width:760px}
.cms-why{background:var(--tint-panel);padding:72px 170px;margin-top:44px}
.cms-why-head{display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:start;margin-bottom:46px}
.cms-why-head p{color:var(--ink-2);font-size:14.5px;line-height:1.65;margin:0}
.cms-why-row{display:grid;grid-template-columns:repeat(3,1fr);gap:34px}
.cms-why-card svg{color:var(--brand)}
.cms-why-card h3{font-family:var(--font-head);font-size:20px;font-weight:800;margin:16px 0 10px}
.cms-why-card p{font-size:13.5px;line-height:1.68;color:var(--ink-2);margin:0}
.cms-qrail{display:flex;gap:22px;margin-top:42px;justify-content:center;align-items:stretch;padding:8px 0}
.cms-qcard{flex:none;width:300px;border:1px solid var(--line);border-radius:12px;padding:24px;text-align:start;background:#fff}
.cms-qcard svg{color:#C9D2E4}
.cms-qcard.mid svg{color:var(--brand)}
.cms-qcard.mid{width:340px;background:var(--tint-panel);border-color:transparent}
.cms-qcard p{font-size:13.5px;line-height:1.62;color:var(--ink);margin:12px 0 20px}
.cms-qa{display:flex;gap:10px;align-items:center}
.cms-qa img{width:36px;height:36px;border-radius:50%}
.cms-qa b{display:block;font-size:13.5px}
.cms-qa span{font-size:12px;color:var(--ink-2)}
.cms-qdots{display:flex;gap:8px;justify-content:center;margin-top:28px}
.cms-qdots i{width:8px;height:8px;border-radius:99px;background:#D6DCEA}
.cms-qdots i.on{background:var(--brand);width:22px}
.cms-cta{margin:70px 170px 30px;background:var(--tint-panel);padding:66px 80px;position:relative;overflow:hidden}
.cms-cta-wm{position:absolute;left:72px;top:50%;transform:translateY(-50%);width:130px;height:130px;background:var(--brand);opacity:.2;-webkit-mask:url(arrow-nav-alpha.png) center/contain no-repeat;mask:url(arrow-nav-alpha.png) center/contain no-repeat}
.cms-cta-in{margin-left:244px;max-width:820px}
.cms-cta-in h2{font-family:var(--font-head);font-size:33px;font-weight:800;margin:0 0 12px}
.cms-cta-in p{color:var(--ink-2);font-size:15px;line-height:1.6;margin:0 0 26px}
.cms-cta-in .cms-ctas{justify-content:flex-start}
.cms-faq .mkt-faq{grid-template-columns:330px 1fr}
.cms-faq .mkt-faq h2{font-size:34px}
.cms-premchip .mk-arrow,.cms-cat.prem .mk-arrow,.lh-prem .mk-arrow{filter:brightness(0) saturate(100%) invert(58%) sepia(60%) saturate(900%) hue-rotate(350deg)}
.cms-scb .mk-arrow{filter:brightness(0) invert(1)}
.cc-fn .logom .mk-arrow{filter:brightness(0) saturate(100%) invert(29%) sepia(94%) saturate(2476%) hue-rotate(216deg) brightness(97%) contrast(96%)}
.cms-premchip .mk-arrow,.cms-cat.prem .mk-arrow,.lh-prem .mk-arrow,.cms-scb .mk-arrow,.cc-fn .logom .mk-arrow{flex:none}
.cms-nfx{clip-path:none}
.cms-cta.cms-nfx,.cms-hcband.cms-nfx{border-radius:20px}
/* P3-OP-20 - NRC-P1-283 (lane-s14, sheet-surgeon, 2026-09-07) - THE ONE SHARED LINE, CHANGED IN
   PLACE. Operator ruling #22: "the cutouts read as a white back layer". The line below is
   vendored from design-system.css:2872, where `#fff` is not a colour choice at all - it is the
   FRAME'S OWN PAGE GROUND: `.frame{width:1684px;background:#fff}` in the gallery's
   design-system.css. On this site the ground is `--page-bg` #F6F9FF, so the literal paints a
   white block on a near-white page instead of cutting the corner out of it. THE FRAME AGREES
   WITH THE OPERATOR IN INTENT; only the literal is wrong for this ground. Precedent already in
   this sheet, same cure, same reasoning: `.mkt-hero .cms-notch{background:var(--page-bg)}` at
   the P-HERO block below, and the home hero's pseudo-notches which MEASURE rgb(246, 249, 255)
   - the intended look the ruling points at.
   MEASURED BEFORE on :4410, hydrated, dpr 2 (BEFORE.json): notch background rgb(255, 255, 255)
   against a backdrop of rgb(246, 249, 255) on EVERY notched band read - the backdrop was read
   by walking up from each notch to the first ancestor with a non-transparent background, never
   assumed, precisely because a notch over a WHITE section would be made worse by this change.
   All 3 non-hero band families read the page ground behind them:
     .cms-hcband.cms-nfx        /help-center   2 notches   backdrop rgb(246, 249, 255)
     .cms-band.cms-nfx          /guides        2 notches   backdrop rgb(246, 249, 255)
     .cms-cta.cms-nfx.cms-ctafx /about         4 notches   backdrop rgb(246, 249, 255)
     .mkt-hero                  /employers /blog and the 5 help-centre locale twins - ALREADY
                                rgb(246, 249, 255): the control, cured earlier, unchanged here.
   S14 DENOMINATOR, two structurally different counts: `class="cms-notch` over all 120 sitemap
   routes = 164 notch elements on 76 of 120 routes (an SSR FLOOR - client-rendered notches are
   not in the served HTML); and the hydrated DOM over 13 route-cells, which agreed exactly at 2
   per route on every route it read. Every one of them changes with this line.
   Section 9b PROVEN IN THE BROWSER, not inferred: `getComputedStyle(notch).getPropertyValue
   ('--page-bg')` returned `#F6F9FF` on 100 % of notches read (6 help-centre routes x 3 widths
   plus 7 census routes) - non-empty everywhere, so the declaration cannot be silently voided on
   any surface that was measured. The fallback is the token's OWN measured value and exists only
   so an UNMEASURED route cannot lose its notch entirely if the token is ever re-scoped; it is
   not a second colour. */
.cms-notch{position:absolute;background:var(--page-bg,#F6F9FF);z-index:4}   /* was #fff - design-system.css:2872, which is NOT edited */
/* 2026-10-05 OPERATOR ORDER ("the corner cutout ... more rounded ... like the homepage banner"): cut-out inner radius = the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 8px (base .cms-notch: /contact chat band and every family below 600px before its own rule); width/height unchanged. Overrides the frame's 8px (base .cms-notch: /contact chat band and every family below 600px before its own rule) by that order. NO ledger row. File-only pass: NOT built, NOT measured in a browser. */
.cms-notch.nt-tl{left:0;top:0;width:40px;height:40px;border-bottom-right-radius:20px}
.cms-notch.nt-br{right:0;bottom:0;width:40px;height:40px;border-top-left-radius:20px}
/* 2026-10-05 operator ("the corner cutout on this card needs to be ... more rounded, like ... the homepage banner"):
   the inner radius is the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 12px. */
.cms-cta.cms-nfx .cms-notch.nt-tl{width:71px;height:71px;border-bottom-right-radius:20px}
.cms-cta.cms-nfx .cms-notch.nt-br{width:71px;height:71px;border-top-left-radius:20px}
.cms-nfx .cms-bwm{position:absolute;width:33px;height:33px;background:url(arrow-nav-alpha.png) center/contain no-repeat;filter:brightness(0) invert(1);opacity:.25}
.cms-cta.cms-ctafx .cms-cta-wm{left:61px;top:59px;transform:none;width:130px;height:130px;opacity:.07}
.cms-harr{filter:brightness(0) saturate(100%) invert(29%) sepia(94%) saturate(2476%) hue-rotate(216deg) brightness(97%) contrast(96%);margin-bottom:10px}
.crs-arrmk.mk-arrow{filter:brightness(0) saturate(100%) invert(64%) sepia(64%) saturate(1850%) hue-rotate(333deg) brightness(103%) contrast(88%)}

/* ============================================================================
   THE PHONE/TABLET LAYER FOR THE CMS COMPOSITION — added 2026-08-24.
   Measured first (gate-w5-dl1-device-matrix, same day): /about and /ar/hawl-liverec
   overflowed at 320 (65 elements, worst escape 644px), 360 (57 / 614px) and 768
   (21 / 410px) — every escape a fixed-width `.cms-qcard` (300/340px in a flex row that
   never wraps), a 420px+1fr `.cms-2col` track, a four-track `.cms-stats`, a three-track
   `.cms-why-row`, 170px side gutters and the CTA's 244px text offset. The rules above are
   vendored VERBATIM from the approved sheet and are not edited; these live BELOW them in the
   same file because `marketing-responsive.css` loads BEFORE this sheet and would lose the
   cascade at equal specificity. Everything sits inside `max-width:1279.98px`, so at 1280px
   and above the approved rendering is untouched (verified: `.cms-qcard` 300px, `.cms-2col`
   420px track at 1440). No `overflow-x:hidden` — the boxes are made to FIT, so the gate's
   per-element measurement stays meaningful. Same method as marketing-responsive.css.

   ⛔⛔ RETRACTION 2026-08-27 — THE PARENTHESISED VERIFICATION ABOVE IS FALSE, AND IT IS LEFT
   IN PLACE ON PURPOSE SO THE CORRECTION CAN BE AUDITED AGAINST IT (S9).

   The claim: "at 1280px and above the approved rendering is untouched (verified: `.cms-qcard`
   300px, `.cms-2col` 420px track at 1440)".

   ⭐ BOTH HALVES OF THE PARENTHESIS ARE INDIVIDUALLY TRUE, RE-MEASURED 2026-08-27:
       `.cms-2col` grid-template-columns @1440 = `420px 380px`, box 120..1320 — fits. TRUE.
       `.cms-qcard` width @1440 = 300px.                                          TRUE.
   ⛔ THE CONCLUSION DRAWN FROM THEM IS FALSE. Both are per-ELEMENT facts; neither asks whether
   the ROW of five cards fits, and it does not. MEASURED 2026-08-27:

       live /about  @1440   documentElement scrollWidth 1514 vs clientWidth 1440   -> 74px of
                            horizontal page scroll
       approved frame @1440 scrollWidth 1683 vs clientWidth 1440                   -> 216px
       the card run is a fixed 1588px live / 1628px in the frame, and it overflows
       CONTINUOUSLY from 1588px down to 1280px — a 309px band

   ⇒ "untouched" was read as "correct". The rendering above 1280 was indeed untouched by that
   layer, and it was already broken. TWO TRUE PER-ELEMENT MEASUREMENTS WERE CITED AS EVIDENCE FOR
   A PER-ROW CLAIM NEITHER OF THEM TESTS — which is the most durable way to be wrong, because
   every number in the sentence checks out. That is why the band went unmeasured: the parenthesis
   told the next reader it had been verified, and re-deriving it would have agreed.

   The band is now covered by the `min-width:1280px and max-width:1587.98px` block below.
   ============================================================================ */
@media (max-width: 1279.98px) {
  .cms-hero { padding: 96px 20px 72px; }
  .cms-hero h1 { font-size: 32px; }
  .cms-2col { grid-template-columns: 1fr; gap: 28px; padding: 48px 20px 24px; }
  .cms-2col h2, .cms-csec h2, .cms-why h2, .cms-team h2 { font-size: 28px; }
  .cms-stats { grid-template-columns: repeat(2, 1fr); gap: 26px 0; padding: 36px 20px; }
  .cms-stat:nth-child(odd) { border-inline-start: 0; }
  .cms-stat .n { font-size: 34px; }
  .cms-csec { padding: 32px 20px 20px; }
  .cms-why { padding: 48px 20px; margin-top: 28px; }
  .cms-why-head { grid-template-columns: 1fr; gap: 18px; margin-bottom: 28px; }
  /* CF-4b, 2026-08-29: two columns for THREE cards orphaned the third (measured @768: tracks 352 352, rows
     [2,1], the orphan row 22.7px shorter). The About Us frame draws the row 3-across at 1683 and nothing below;
     NO FRAME at tablet, correctness only — same class as CF-4 (.mkt-fgrid). Three tracks keep the row whole. */
  .cms-why-row { grid-template-columns: repeat(3, 1fr); gap: 24px; }
  .cms-qrail { flex-wrap: wrap; gap: 16px; }
  .cms-qcard, .cms-qcard.mid { width: 100%; max-width: 340px; }
  .cms-cta { margin: 40px 20px 20px; padding: 40px 28px; }
  .cms-cta-wm { left: 20px; }
  .cms-cta-in { margin-left: 0; }
  .cms-cta-in h2 { font-size: 26px; }
  .cms-ctas { flex-wrap: wrap; }
  .cms-faq .mkt-faq { grid-template-columns: 1fr; }
  .cms-faq .mkt-faq h2 { font-size: 28px; }
  .mkt-faqwrap { padding: 20px 20px 48px; }
}

/* ============================================================================
   ⛔ THE 1280-1588 BAND — THE GAP THE LAYER ABOVE NEVER COVERED. Added 2026-08-27.

   The block above is scoped `max-width:1279.98px` and its header claims "at 1280px and above
   the approved rendering is untouched (verified: .cms-qcard 300px ... at 1440)". THAT
   VERIFICATION IS THE DEFECT: at 1440 the approved rendering does not fit.

   MECHANISM. `.cms-qrail` is `display:flex` with `justify-content:center` and `overflow:visible`;
   its five `.cms-qcard`s are `flex:none` at 300px (340px for `.mid`) with 22px gaps — a fixed
   **1588px run** inside an **860px** rail. It cannot shrink, so it spills BOTH sides equally and
   is on screen only while the viewport is at least as wide as the run.

   MEASURED 2026-08-27 by width sweep on /about (scrollWidth vs clientWidth):
       1920..1590  delta 0            fits
       1588..1280  delta 4..154px     ⛔ THE PAGE SCROLLS SIDEWAYS
       1279..390   delta 0            the layer above wraps it
   At the audit's laptop cell (1280) the outermost cards measure left **-154px** and right
   **1434px** against a 1280 viewport — 154px of horizontal scroll.

   ⚠ THE AUDIT SEES ONE POINT IN A 309px BAND. Its viewports are 1920/1280/768/390, so only
   1280 is sampled; 1366, 1440 and 1500 are equally broken and are measured nowhere.

   ⚠ THE APPROVED FRAME DOES NOT DEFINE THIS WIDTH, and that is reported rather than resolved
   by assumption (CLAUDE.md §13). gallery-510 `Candidate/CMS Pages/About Us.html` is a FIXED
   1683px canvas — measured `scrollWidth` 1683 at every viewport below 1683, card run 1628px —
   so it overflows at 1280 exactly as the live page does (right-overhang 376px). It has no
   1280 rendering to match. The live composition was made fluid; this covers the band its own
   responsive layer left open.

   ⚠ NOT THE MARQUEE SHAPE. `.logos`/`.logo-track` is `width:max-content` inside a CLIPPING
   parent — deliberate overflow, and the detector already excludes clipped elements. `.cms-qrail`
   computes `overflow:visible` and the document genuinely scrolls. Different thing.

   1587.98 is the MEASURED fit point (run = 1588px), not a round number. At >=1588 the approved
   single row is untouched because it provably fits.
   ============================================================================ */
@media (min-width: 1280px) and (max-width: 1587.98px) {
  .cms-qrail { flex-wrap: wrap; gap: 16px; }
  .cms-qcard, .cms-qcard.mid { width: 100%; max-width: 340px; }
}
@media (max-width: 599.98px) {
  .cms-hero { padding: 64px 16px 48px; }
  .cms-hero h1 { font-size: 27px; }
  .cms-stats { grid-template-columns: 1fr; }
  .cms-stat { border-inline-start: 0; }
  .cms-why-row { grid-template-columns: 1fr; }
  .cms-qcard, .cms-qcard.mid { max-width: 100%; }
  .cms-cta { padding: 32px 20px; }
  .cms-cta-wm { display: none; }
  /* MOBILE EYE-GATE 2026-08-24 (founder: "mobile never got a proper eye gate"): the approved
     frame's corner "notch" is a 71px white square painted over the CTA's top-left corner. On the
     desktop it sits inside 80px of padding; at phone padding it covered the heading's first letters
     ("ing for a role that sponsors?", "t your journey with LiveRec"). The device gate measures
     overflow beyond the viewport and cannot see a box painted over text. Decoration never eats copy. */
  .cms-cta .cms-bwm { display: none; }
  /* P2-12 (operator-2026-09-25-NOTCH-MOBILE): the notch half of the rule above is REVERSED — the cut-outs
     show on phones, sized down and clear of the copy. See the P2-12 block at the end of this sheet. */
  .cms-ctas .btn, .cms-ctas a, .cms-ctas button { width: 100%; text-align: center; }
}

/* ============================================================================
   ⛔ REFUTER RUN-A PLANTS — REMOVED 2026-08-27. THEY WERE NEVER RESTORED.

   The header on this block read, verbatim:

       "===== REFUTER RUN-A PLANTS (2026-08-25) — TEMPORARY, restored
        byte-identical same session ====="

   The restoration did not happen. All four declarations were still live in the
   shipped sheet two days later and were MEASURED in the browser on 2026-08-27,
   on `/` at 1440, with data-saver both off and on. Every one was in effect, and
   every one was IDENTICAL in both states:

       body font-family        "Hanken Grotesk", sans-serif    <- with saver ON
       h2 line-height          42.94px  (= 38px x 1.13)
       .p-foot .inner::after   "Browse and find the best jobs with great pricing
                                today"   — rendered, display:block, on every page
       .fbottom .c             footer-arrow.png background + 20px padding-left

   ⛔ WHY THIS MATTERED BEYOND BEING RESIDUE. Two of the four broke data-saver,
   which is the mode D15 §1.4 requires and `marketing-saver.css` implements:

     1. `body{font-family:... !important}` DEFEATS THE FONT SWAP. marketing-saver
        overrides `--font-head`/`--font-body` to the system stack and calls it
        "the largest single saving on these pages (19 Latin files)". An author
        `!important` on `body` outranks a token, so the webfonts loaded anyway.
        MEASURED font files fetched on `/`:  saver off 9  ->  saver on 8.
        One file saved, not nineteen. The mode's headline saving was not happening.

     2. `.fbottom .c{background-image:url(footer-arrow.png)}` puts the footer
        watermark asset on a SECOND element that data-saver never hides, so
        `footer-arrow.png` was still downloaded with the mode ON — measured 1
        request in both states — while `.watermark` itself was correctly hidden.
        The reader lost the decoration and kept the byte cost.

   ⚠ AND `.p-foot .inner::after` INJECTED COMMERCIAL COPY. "Browse and find the
   best jobs with great pricing today" rendered in the footer of every marketing
   page, in both states, for two days. Nobody authored that as copy; it was a
   test string. It is removed, not rewritten — this lane does not author
   commercial copy.

   ⛔ NOT DELETED SILENTLY. The exact removed declarations are preserved here so
   the change is auditable and so a future reader can tell a correction from a
   transcription (CLAUDE.md §12's own reasoning). R6 is about not deleting FILES;
   this is a revert of self-declared TEMPORARY plants to the state their own
   comment claimed they were already in.

       .fbottom .c{background-image:url(/mocks/assets/footer-arrow.png);
                   background-repeat:no-repeat;background-position:left center;
                   background-size:14px 14px;padding-left:20px}
       h2,h3{line-height:1.13 !important}
       .p-foot .inner::after{content:"Browse and find the best jobs with great
                   pricing today";color:#fff;font-size:14px;display:block}
       body{font-family:"Hanken Grotesk",sans-serif !important}

   ⭐ CLAUDE.md §8 already warned about exactly this: "Restore between suites …
   leaves plant residue and manufactures convincing failures." The warning was
   about failures. This residue manufactured a convincing PASS — data-saver
   looked implemented and was not.
   ============================================================================ */

/* ---------------------------------------------------------------------------
   2026-08-25 — "Start earning today" made to navigate without changing the
   approved element. The frame draws a <button>; `.btn` in the pinned sheet
   declares no text-decoration, so an <a class="btn"> would arrive underlined
   (the drift the founder flagged elsewhere). A plain GET form keeps the
   <button> and needs zero client JS — the same pattern /data-saver uses.
   The form must contribute NO box of its own, or it inserts a block break
   between the paragraph and the CTA that the approved layout does not have.
   --------------------------------------------------------------------------- */

/* Same reasoning as .trans-cta-form: the nav CTA keeps its approved <button>, wrapped in a
   zero-JS GET form that must not add a box to the nav row. */

/* ⛔ CORRECTED 2026-08-25, founder saw it live: inline-flex/block still makes the form a LAYOUT
   BOX. In the nav (a flex row) that box became a flex ITEM with its own width, changing the wrap
   maths so "Employers / Post a job" dropped onto its own line under a full-width Sign in.
   `display:contents` removes the form's box ENTIRELY — the <button> becomes the direct child of
   .p-nav again, so the approved layout is byte-identical to before the form was introduced.
   Form submission is unaffected: display:contents removes the box, not the element's behaviour. */
.p-nav .nav-cta-form{margin:0;padding:0;border:0;display:contents}
.p-trans .trans-cta-form{margin:0;padding:0;border:0;display:contents}

/* ---------------------------------------------------------------------------
   2026-08-25, founder saw it live on a phone: "Sign in" and "Employers / Post a
   job" stack, one full-width above the other, and look wrong.
   CAUSE (not the form wrapper — that is display:contents and contributes no box):
   marketing-responsive.css:107 sets `.p-nav .btn-solid, .p-nav .btn-ghost{width:100%}`
   under max-width:599.98px, so each button claims the whole row. The measured
   overflow its neighbouring comment cites was the ACCOUNT CARD's pair, not the nav.
   Two buttons sharing the row fit at 320 and never overflow, because flex:1 1 0
   with min-width:0 lets them shrink rather than push.
   Specificity 0,3,0 beats the 0,2,0 rule regardless of sheet order.
   ⚠ The ratified answer below 768 is the MW-03 hamburger, which is not built yet.
   This makes the un-hamburgered bar honest in the meantime; it does not replace MW-03.
   --------------------------------------------------------------------------- */
@media (max-width: 599.98px) {
  /* ⛔ `min-width` WAS `0` AND THAT LET THE LABEL OVERFLOW ITS OWN BUTTON. Corrected
     2026-08-28. `0` says "shrink to nothing if you must", so at narrow widths the box
     went under the width of its longest WORD and the text painted outside it:

         measured on /about, .btn-solid "Employers / Post a job"
           vp 420   box 66.1px   content 75px   ->  9px over
           vp 390   box 56.1px   content 70px   -> 14px over
           vp 320   box 71.0px   content 77px   ->  6px over
         overflow-x: visible, so not clipped — the label sat outside its button.

     `min-content` is the same instruction with the floor the founder's ruling actually
     needs: shrink as far as possible, but never below the longest unbreakable word. The
     two buttons still SHARE the row wherever they fit, which is the whole point of the
     rule below; where they cannot, `.p-nav`'s own `flex-wrap: wrap` moves one down —
     which is graceful, and is not the full-width stacking the founder rejected.

     ⚠ `flex` MOVED FROM `1 1 0` TO `0 1 auto` IN THE SAME PASS, and that is the half
     that protects the founder's ruling rather than eroding it. With `min-content` alone
     the wider button wrapped to its own line and `flex-grow:1` then stretched it to the
     full row — 350px at 390 — which is the full-width stacking he rejected on 2026-08-25.
     Measured, and it was strike one. Removing the GROW keeps both buttons at their own
     content width, so they stay SIDE BY SIDE at every width in the band instead of one
     filling a row. Shrink (`1`) is kept, which is what "share the row" needs.
     ⚠ THE RULE ITSELF IS A FOUNDER DECISION AND IS NOT BEING REVERTED. See the block
     header above: 2026-08-25, he saw the two buttons stacked full-width on a phone and
     said they look wrong. `width:auto` is untouched and the intent is preserved.
     ⚠ IT ALSO ONLY BECAME VISIBLE ON 2026-08-28, when `4e89c54f` mounted these CTAs on
     17 more routes. Before that they existed on `/` and `/referral-home` only. */
  .page .p-nav .btn-ghost,
  .page .p-nav .btn-solid { width: auto; flex: 0 1 auto; min-width: min-content; }
}

/* ---------------------------------------------------------------------------
   2026-08-25 — the wordmark is a link now (founder answer 6). It must not pick up
   the browser's default anchor underline or colour: `.btn` in the pinned sheet
   declares no text-decoration, and neither does anything else here, so an <a>
   wrapping the logo would arrive underlined and blue.
   --------------------------------------------------------------------------- */
.p-nav .p-nav-home{display:inline-flex;align-items:center;text-decoration:none;color:inherit}
.p-nav .p-nav-home:focus-visible{outline:2px solid var(--brand,#2164F4);outline-offset:3px;border-radius:4px}

/* The job page's next-step block — a front door needs a way onward, not just a way back. */
.job-nextstep{margin-top:40px;padding-top:26px;border-top:1px solid var(--line,#e6e8ee)}
.job-nextstep .btn{text-decoration:none}

/* ==========================================================================
   D9 MINIMUM FURNITURE — the approved `.cms-cat` and `.cms-chips`/`.cms-chip`,
   VENDORED VERBATIM from design-system.css. Added 2026-08-28.

   ⛔ WHY THIS BLOCK HAS TO EXIST, and it is not what the handoff assumed.
   §G6 recorded "CSS already exists for all eight classes". That is TRUE OF THE FILE and
   FALSE OF THE ROUTES. All eight are defined ONLY in design-system.css, and the (marketing)
   route group deliberately never serves that sheet — `(marketing)/layout.tsx:20` "design-
   system.css was never written for them", `:144` "no design-system.css", `:187` "the
   (marketing) group never serves that sheet". Measured 2026-08-28 on /blog /guides
   /help-center /about and /: design-system.css is absent from the link list on all five, and
   an injected `.cms-cat` computed to the UA default 16px/block instead of 13.5px/flex.
   Emitting the class without this block would render an unstyled 16px black label that looks
   deliberate — the §9b failure mode one level up, at sheet scope instead of token scope.

   ⭐ THIS IS THE ESTABLISHED PATTERN, NOT A NEW ONE. `(marketing)/layout.tsx:182` describes
   marketing-pricing.css as "the approved PRICING + COMPARISON rules, vendored from
   design-system.css", and `:187` says this sheet relates to design-system.css the same way.

   Declarations are COPIED, never re-spelled — retyping an approved value is how a design
   drifts. Sources: design-system.css:2532 (.cms-chips), :2533 (.cms-chip), :2536 (.cms-cat),
   :2537 (.cms-cat svg). design-system.css itself is NOT edited; it stays md5-pinned.

   LOAD ORDER: this sheet is 8th of 13 marketing siblings. No later sheet defines any of these
   selectors (verified across all 15 served sheets), so no collision and no !important.

   SCOPE: only the four rules that define the classes actually EMITTED. Deliberately NOT ported:
   `.cms-ahead .cms-cat` (:2567) and `.cms-pop .cms-chip` (:2694) — compositions this lane is not
   building; and `.cms-premchip .mk-arrow` (:2753, :2757), which THIS SHEET ALREADY CARRIES at
   :74 and :77. Appending those would have been a silent duplicate pair.
   ========================================================================== */
.cms-chips{display:flex;gap:12px;flex-wrap:wrap}   /* design-system.css:2532, verbatim */
.cms-chip{background:#F3F4F8;border-radius:6px;padding:9px 14px;font-size:13.5px;font-weight:600;color:var(--ink)}   /* design-system.css:2533, verbatim */
.cms-cat{color:var(--brand);font-size:13.5px;font-weight:600;margin:0 0 8px;display:flex;align-items:center;gap:6px}   /* design-system.css:2536, verbatim */
.cms-cat svg{color:#E8871E}   /* design-system.css:2537, verbatim */

/* ==========================================================================
   THE HELP-CENTRE COMPOSITION — VENDORED VERBATIM FROM design-system.css, 2026-08-28.

   WHY A PORT AT ALL. `(marketing)/layout.tsx` deliberately never serves design-system.css
   (:20, :144, :187 say so in its own words), so all eight `cms-*` furniture classes were
   measured rendering on 0 of 20 marketing routes / 0 of 40 cells. Every piece costed in
   HANDOFF §G6 therefore includes a CSS port into a served sibling. Precedent: :182 calls
   marketing-pricing.css "the approved PRICING rules, vendored from design-system.css".
   design-system.css itself is NOT edited; it stays md5-pinned.

   §9b CHECKED BEFORE PORTING, NOT AFTER. Every token these rules consume was read off the
   live `.page` element in the browser first — an out-of-scope var() does not fall back, it
   invalidates the whole declaration and the property silently takes an inherited value:
       --brand #2164F4 · --ink-2 #33343A · --line #D9E2F3 · --font-head 'Hanken Grotesk'
   All four resolve, so none of these declarations can be silently void.

   SCOPE: only the rules for classes this lane now EMITS. `.cms-tile.big` and
   `.cms-accwrap .cms-hlrow` are deliberately NOT ported — they belong to HC Category, a
   child route that 404s and is not built. Appending them would be dead CSS.
   ========================================================================== */
.cms-h2c{text-align:center;font-family:var(--font-head);font-size:34px;font-weight:800;margin:56px 0 36px}   /* design-system.css, verbatim */
.cms-topics{display:grid;grid-template-columns:repeat(3,1fr);gap:40px 46px;margin:0 0 26px}   /* verbatim */
.cms-topic{display:flex;gap:16px;align-items:flex-start}   /* verbatim */
.cms-topic b{font-size:16.5px}   /* verbatim */
.cms-topic p{color:var(--ink-2);font-size:14px;line-height:1.6;margin:6px 0 0}   /* verbatim */
.cms-tile{flex:none;width:46px;height:46px;border-radius:10px;background:#EFF4FF;border:1px solid #D6E2FD;color:var(--brand);display:inline-flex;align-items:center;justify-content:center}   /* verbatim */
.cms-hl{display:grid;grid-template-columns:1fr 1fr;gap:0 46px;margin-bottom:36px}   /* verbatim */
/* ⛔ NOT VENDORED — AUTHORED, AND THE REASON IS A GATE, NOT A PREFERENCE.
   `.cms-hlcol` is EMITTED by the frame and has NO RULE ANYWHERE IN design-system.css
   (measured: 0 occurrences; control `.cms-hlrow` returns 3). So the approved sheet itself
   leaves it unstyled, and `gate-w4-t1-emitted-class-styled` S-2 went RED on it the first
   time this composition shipped: "1 emitted class(es) have NO rule in any linked sheet, so
   they render UNSTYLED: cms-hlcol (/help-center)". The gate is right — an emitted class with
   no rule is either dead markup or a missing rule, and here it was the second.
   `min-width:0` is the CORRECTNESS rule a grid child needs and nothing else: grid items
   default to `min-width:auto`, which refuses to shrink below their content and is the classic
   source of overflow in exactly this shape. It changes no measured value here (self-overflow
   was already 0 at all five viewports, before and after) — it prevents one. */
.cms-hlcol{min-width:0}
.cms-hlrow{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:21px 4px;border-bottom:1px solid var(--line);font-size:15.5px;font-weight:600}   /* verbatim */
.cms-hlrow svg{color:var(--brand);flex:none}   /* verbatim */

/* --------------------------------------------------------------------------
   THE NARROW-VIEWPORT CURE — NOT VENDORED. NO FRAME, correctness only (S-E).

   ⛔ THE APPROVED RULES ARE VIEWPORT-INVARIANT AND THAT IS NOT AN OVERSIGHT ON THE DESIGN'S
   PART — the frames are captured at their own native width (1200-1700), so the corpus says
   NOTHING about 390 or 768. §G6 measured it directly: 0 of 15 served sheets place any of the
   eight cms-* classes inside a media query. S-E therefore does not govern here; there is no
   frame to contradict, and correctness does.

   WHAT FORCED IT, MEASURED: `.cms-topics` is `repeat(3,1fr)` with a 46px column gap. At 390
   the container is ~350px, two gaps take 92px, and each column gets ~86px — of which
   `.cms-tile` is a FIXED 46px plus a 16px gap, leaving ~24px for a heading and a sentence.

   ⚠ A MEDIA QUERY ADDS NO SPECIFICITY. These selectors are byte-identical to the ported ones
   above and win ONLY on source order, which holds because they are in the same file, below.
   Two rules in this repo have already sat inert for exactly this reason (`.frame.cand`,
   `.mkt-fgrid`), so the winner was read out of the browser rather than assumed.
   -------------------------------------------------------------------------- */
@media (max-width: 1023.98px){
  .cms-topics{grid-template-columns:repeat(2,1fr);gap:32px 32px}
  .cms-hl{grid-template-columns:1fr;gap:0}
}
@media (max-width: 599.98px){
  .cms-topics{grid-template-columns:1fr;gap:26px}
  .cms-h2c{font-size:26px;margin:36px 0 24px}
}

/* ── P3-05d · A SHORT LAST ROW OF TOPICS IS CENTRED, 2026-09-25 (operator-2026-09-25-NO-ORPHAN-ROW) ──
   "... or center that one" + "anywhere else it is applicable". Eleven topics cannot fill a row of
   three or of two, so the short row is centred rather than stretched or re-ordered.
   MEASURED BEFORE (lead/before.ndjson): rows 3/3/3/2 at 1920/1440/1280/1024 with the last row's centre
   -215/-175/-175/-172px off the grid's centre; 2/2/2/2/2/1 at 900/768/600, off -223/-190/-148.
   HOW, and why it changes nothing else: the track count DOUBLES and every card spans two tracks, so a
   card is 2t + gap = exactly the old track, and neighbouring cards are still one gap apart. Only the
   first card of a short last row is pushed one track in, which is half a card plus half a gap, i.e.
   centred. Selectors are count-agnostic (`:nth-child(3n+1):nth-last-child(2)` = a last row of two
   under three columns, `:last-child` = a last row of one), so a seed with any other count follows the
   same rule; a count that divides matches nothing. DOM order and visual order stay equal.
   minmax(0,1fr) keeps the half-tracks equal whatever a title's min-content is. Below 600 nothing
   changes (one column). NO FRAME for the short-row placement: the Help center frame draws the grid at
   its own width only (see the narrow-viewport note above). (0,2,1)+ over the ported (0,1,0); no var(). */
@media (min-width: 1024px){
  html .page .cms-topics{grid-template-columns:repeat(6,minmax(0,1fr))}
  html .page .cms-topics > *{grid-column:span 2}
  html .page .cms-topics > :nth-child(3n+1):nth-last-child(2){grid-column:2 / span 2}
  html .page .cms-topics > :nth-child(3n+1):last-child{grid-column:3 / span 2}
}
@media (min-width: 600px) and (max-width: 1023.98px){
  html .page .cms-topics{grid-template-columns:repeat(4,minmax(0,1fr))}
  html .page .cms-topics > *{grid-column:span 2}
  html .page .cms-topics > :nth-child(2n+1):last-child{grid-column:2 / span 2}
}

/* ── ST-36 · THE HELP-CENTRE TOPIC CARDS GET AN OUTLINE, 2026-10-01 (ST-1001 walk, PDF p26) ──
   Operator, verbatim: "I think these cards should have an outline in the help center page".
   MEASURED: NOT IN A BROWSER this pass (builder brief forbids one). From source only: the ported
   `.cms-topic` rule (this sheet, ~:448; design-system.css:2755) sets display/gap/align and NOTHING
   else — no border, no radius, no fill, no padding — and P3-OP-39 (marketing-motion.css ~:1664)
   recorded it measured as "borderRadius 0px, box-shadow none". `TopicGrid` (ArticleView.tsx ~:705)
   has no inline style on a `<div>` topic; `CardLink`'s inline style on an `<a>` names only
   textDecoration/color (per P3-OP-39's CAN-IT-WIN note), so nothing inline outranks these props.
   FRAME: the Help center frame draws these items UNBOXED, so this is
   INTERIM DEVIATION · UNRATIFIED (S13: the walk is full authority) — reversed by deleting this block.
   ROW: ST-36 (autorun/runs/ST-1001/queue.json).
   TAKEN FROM THE NEIGHBOUR, NOTHING MINTED: the declarations are `.mkt-fcard`'s, verbatim
   (marketing.css:380 — background var(--card), 1px var(--line), var(--r-card), var(--sh-soft),
   padding 22px), the site's own outlined card. Each var() carries a FALLBACK equal to the
   tok-iter3 value (marketing.css:689), so a token out of scope cannot void the declaration (§9b
   not re-measured in a browser this pass; P3-OP-38 recorded --card/--line/--r-card/--sh-soft
   non-empty on a.cms-topic).
   S14: one component (`TopicGrid`) emits `.cms-topic`, on every route and locale that renders a
   `topics` section; keyed on the class, both the <a> and the <div> forms, so all are cured together.
   HOVER: P3-OP-39's overlay box (`.page a.cms-topic::before`, inset -12px -16px, r-tile) was sized
   for an UNBOXED row; on a boxed card it would draw a second, larger box around this one. It is
   re-fitted onto the card's own border (inset -1px, same radius) so hover/focus turns THIS outline
   brand-blue. (0,3,2) beats motion's (0,2,2) although marketing-motion.css loads after this sheet.
   Ring, fill, shadow, opacity and transition of the overlay are untouched. ── */
.page .cms-topics > .cms-topic{background:var(--card,#FAFCFF);border:1px solid var(--line,#D9E2F3);border-radius:var(--r-card,18px);box-shadow:var(--sh-soft,0 5px 14px rgba(30,45,110,.07));padding:22px}
.page .cms-topics > a.cms-topic::before{inset:-1px;border-radius:var(--r-card,18px)}

/* ── ST-38 · HELP-CENTRE "HIGHLIGHTED ARTICLES" ROWS BECOME CARDS, 2026-10-01 (ST-1001 walk, PDF p27, D14 option A) ──
   Operator, verbatim: "Also would like a redesign for this section of the help center page."
   SCOPE: `.cms-hl--cards` is emitted ONLY by `HighlightList` (ArticleView.tsx), so the other `.cms-hlrow`
   users — HelpSearch results, the P2-04b `.cms-topic-results` panel and the frame at /pages/help-center —
   are untouched. FRAME: `Help center.html` draws divider rows ⇒ INTERIM DEVIATION · UNRATIFIED; reversed by
   deleting this block and the modifier class.
   TAKEN FROM THE NEIGHBOURS, NOTHING MINTED: the card is ST-36's topic card directly above (= `.mkt-fcard`,
   marketing.css:380, with tok-iter3 fallbacks); the icon tile is `.cms-tile` verbatim (~:451); the 16px gap
   is `.cms-topic`'s; the arrow takes the brand colour from the approved `.cms-hlrow svg` rule.
   CAN IT WIN: (0,3,0) over `.cms-hlrow` (0,1,0) and the narrow-viewport `.cms-hl{gap:0}` (0,1,0); the
   `::before` refit (0,3,2) beats motion's `.page a.cms-hlrow::before{inset:6px -12px}` (0,2,2) although
   motion loads later. No inline `style={}` on these props (CardLink's names textDecoration/color only).
   HOVER: the same overlay as the topic cards, refitted onto the card's own border, so hover/focus turns
   THIS outline brand-blue instead of drawing a second box. NOT browser-measured this pass. ── */
.page .cms-hl--cards{row-gap:16px}
.page .cms-hl--cards .cms-hlcol{display:flex;flex-direction:column;gap:16px}
.page .cms-hl--cards .cms-hlrow{justify-content:flex-start;gap:16px;padding:22px;background:var(--card,#FAFCFF);border:1px solid var(--line,#D9E2F3);border-radius:var(--r-card,18px);box-shadow:var(--sh-soft,0 5px 14px rgba(30,45,110,.07))}
.page .cms-hl--cards .cms-hlicon{flex:none;width:46px;height:46px;border-radius:10px;background:#EFF4FF;border:1px solid #D6E2FD;color:var(--brand);display:inline-flex;align-items:center;justify-content:center}
.page .cms-hl--cards .cms-hltitle{flex:1 1 auto;min-width:0}
.page .cms-hl--cards a.cms-hlrow::before{inset:-1px;border-radius:var(--r-card,18px)}
.page .cms-hl--cards .cms-hlarrow{flex:none;color:var(--brand)}   /* = the approved `.cms-hlrow svg`; named so the emitted-class gate sees a rule */
[dir="rtl"] .page .cms-hl--cards .cms-hlarrow{transform:scaleX(-1)}

/* ==========================================================================
   THE FEATURED/SPLIT LISTINGS — VENDORED VERBATIM FROM design-system.css, 2026-08-28.
   Source line cited on every rule. design-system.css is defined but NOT SERVED on the
   marketing plane ((marketing)/layout.tsx:20,144,187), and it stays md5-pinned.

   §9b CHECKED BEFORE PORTING: --line, --ink-2, --brand and --font-head all resolve on the
   live .page element. An out-of-scope var() does not fall back — it invalidates the whole
   declaration — so this was read out of the browser first, not assumed.

   ⛔ NOT PORTED, DELIBERATELY: .cms-pager / .cms-pg (operator ruling R-i — pagination stays
   do-not-build) and .cms-cat.prem (R-vi — nothing live can drive it). Porting either would
   be dead CSS for markup this lane does not emit.
   ========================================================================== */
.cms-chiprow{display:flex;align-items:center;gap:12px;margin:0 0 32px}   /* :2531 */
.cms-guide-search-host .cms-chiprow{align-items:center;flex-direction:column;justify-content:center;max-width:900px;margin:22px auto 0}
.cms-guide-search-host .cms-chips{width:100%;min-width:0;justify-content:center}
.cms-guide-search-host .cms-search{margin-inline-start:0;flex:0 1 auto;width:min(420px,100%);box-sizing:border-box}
.page.mkt .mkt-hero .cms-guide-search-host{position:relative;z-index:2;width:min(900px,calc(100% - 40px));margin:22px auto 0}
.page.mkt .mkt-hero .cms-guide-search-host .cms-chip{background:rgba(255,255,255,.94)}
.cms-card{border:1px solid var(--line);border-radius:10px;background:#fff}   /* :2535 */
.cms-sub{color:var(--ink-2);font-size:14px;margin-top:8px;line-height:1.55}   /* :2539 */
.cms-grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:40px 26px;margin:44px 0 30px}   /* :2541 */
.cms-grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:30px 24px;margin:0 0 50px}   /* :2542 */
.cms-feat{display:grid;grid-template-columns:415px 1fr;overflow:hidden;margin:2px 0 26px}   /* :2546 */
.cms-feat img{width:100%;height:100%;object-fit:cover;display:block}   /* :2548 */
.cms-feat-tx{padding:58px 36px}   /* :2549 */
.cms-feat-tx h2,.cms-big-tx h2,.cms-gfeat-tx h2{font-family:var(--font-head);font-size:25px;font-weight:800;line-height:1.35;margin:10px 0 12px}   /* :2550 */
.cms-feat-tx p,.cms-big-tx p,.cms-gfeat-tx p{color:var(--ink-2);font-size:15px;line-height:1.6;margin:0}   /* :2551 */
.cms-split{display:grid;grid-template-columns:1fr 1fr;gap:26px;margin-bottom:46px}   /* :2552 */
.cms-splcol{display:flex;flex-direction:column;gap:26px}   /* :2553 */
.cms-mini{display:grid;grid-template-columns:209px 1fr;overflow:hidden}   /* :2554 */
.cms-mini img{width:100%;height:100%;object-fit:cover;display:block}   /* :2555 */
.cms-mini>div{padding:20px 22px}   /* :2556 */
.cms-big img{width:100%;height:235px;object-fit:cover;display:block}   /* :2557 */
.cms-big-tx{padding:26px 30px 30px}   /* :2558 */
.cms-band{background:var(--brand);color:#fff;text-align:center;margin:0 68px 0 66px;height:267px;box-sizing:border-box;padding:58px 20px 0;position:relative;overflow:hidden;border-radius:0}   /* :2596 */
.cms-band h1{font-family:var(--font-head);font-size:67px;font-weight:800;letter-spacing:-.02em;margin:0 0 14px;position:relative}   /* :2600 */
.cms-band p{color:#D9E3FD;font-size:15px;margin:0;position:relative}   /* :2601 */
.cms-featrow{display:grid;grid-template-columns:1fr 1fr;gap:26px;margin:0 0 58px}   /* :2605 */
.cms-gfeat{overflow:hidden}   /* :2607 */
.cms-gfeat img{width:100%;height:296px;object-fit:cover;display:block}   /* :2608 */
.cms-gfeat-tx{padding:30px 32px}   /* :2609 */
.cms-sidecol{display:flex;flex-direction:column;gap:14px}   /* :2610 */
.cms-scard{display:grid;grid-template-columns:162px 1fr;overflow:hidden;align-items:center}   /* :2611 */
.cms-scard img{width:100%;height:100%;min-height:94px;object-fit:cover;display:block}   /* :2612 */
.cms-scard>div{padding:16px 20px}   /* :2613 */
.cms-scard .cms-ct{font-size:15.5px}   /* :2614 */
.cms-sechead{display:flex;align-items:baseline;justify-content:space-between;margin:14px 0 26px}   /* :2615 */
.cms-sechead h2{font-family:var(--font-head);font-size:32px;font-weight:800;margin:0}   /* :2616 */
.cms-readall{color:var(--brand);font-weight:600;font-size:14.5px}   /* :2617 */
.cms-imwrap{position:relative;display:block}   /* :2927 */
.cms-scard .cms-imwrap{height:100%}   /* :2933 */
.cms-imw{position:absolute;left:0;right:0;bottom:0;height:21%;background:linear-gradient(180deg,rgba(45,84,200,0),rgba(45,84,200,.8));border-radius:0 0 8px 8px;pointer-events:none}   /* :2934 */

/* AUTHORED, not vendored: `.cms-cardimg` is the class THIS lane puts on the card photograph so
   the approved `.cms-feat img` / `.cms-mini img` selectors keep matching through
   MarketingPicture's <picture> wrapper. gate-w4-t1-emitted-class-styled requires every emitted
   class to have a rule — it caught `.cms-hlcol` and it was right — so this one is declared here
   rather than shipped bare. `display:block` only; all real geometry comes from the vendored
   per-kind `img` rules above. */
.cms-cardimg{display:block;width:100%;height:100%;object-fit:cover}
/* `.cms-gcard` has no rule in design-system.css (measured: 0 selector occurrences; positive
   control `.cms-scard` returns 4). The approved grid supplies its geometry through `.cms-grid3`
   / `.cms-grid4`, so this is the minimum that keeps the class from being unstyled: a block that
   can shrink inside a grid cell. Same authored-correctness footing as `.cms-hlcol{min-width:0}`. */
.cms-gcard{display:block;min-width:0}

/* --------------------------------------------------------------------------
   THE NARROW-VIEWPORT CURES — NOT VENDORED. NO FRAME, correctness only (S-E).
   The frames are captured at 1200-1700 and 0 of 15 served sheets puts any cms-* class in a
   media query, so the corpus says NOTHING about 768 or 390. What forces these is measured:
   `.cms-feat` is a FIXED 415px track, `.cms-mini` 209px, `.cms-scard` 162px, and `.cms-band`
   is a 267px-high box with a 67px h1 and an asymmetric 68/66px margin. At 390 the 415px track
   alone exceeds the viewport.
   ⚠ A media query adds no specificity — these win on source order, being in the same file
   below. The winner was READ OUT OF THE BROWSER at all five viewports, not assumed.
   -------------------------------------------------------------------------- */
@media (max-width: 1279.98px){
  .cms-feat{grid-template-columns:320px 1fr}
  .cms-feat-tx{padding:32px 28px}
  .cms-grid4{grid-template-columns:repeat(2,1fr)}
  .cms-band{margin:0;height:auto;padding:44px 20px}
  .cms-band h1{font-size:44px}
}
@media (max-width: 1023.98px){
  .cms-feat{grid-template-columns:1fr}
  .cms-split{grid-template-columns:1fr}
  .cms-featrow{grid-template-columns:1fr}
  .cms-grid3{grid-template-columns:repeat(2,1fr);gap:28px 20px;margin:28px 0 24px}
  .cms-gfeat img{height:220px}
}
@media (max-width: 599.98px){
  .cms-grid3{grid-template-columns:1fr}
  .cms-grid4{grid-template-columns:1fr}
  .cms-mini{grid-template-columns:1fr}
  .cms-scard{grid-template-columns:1fr}
  .cms-scard .cms-imwrap{height:auto}
  .cms-scard img{height:150px}
  .cms-mini img{height:170px}
  .cms-band h1{font-size:32px}
  .cms-sechead h2{font-size:24px}
  .cms-feat-tx{padding:22px 20px}
  .cms-big-tx{padding:20px 20px 24px}
}

/* ==========================================================================
   THE HELP-CENTRE HERO BAND — VENDORED VERBATIM, 2026-08-28. Operator ruling R-iv.
   §9b before porting: `--tint-panel` resolves to #EEF3FF on the live `.page` (defined on
   `:root` in this sheet); `--font-head` and `--ink-2` were already confirmed. The notch rules
   this band needs are ALREADY in this sheet and are not duplicated.
   ⭐ 2026-08-29 (G14): `.cms-hcsearch` and `.cms-search` ARE ported now — the control is built by
   `HelpSearch.tsx`, wired to `GET /search/kb` as the eye-gated seeker page already is. The note
   this replaces read "no destination exists to serve it"; the destination it did not find is the
   one endpoint the seeker frame calls. Vendored VERBATIM below with their design-system.css line
   refs, followed by the AUTHORED correctness rules for the `<input>` the frame draws as a `<span>`.
   ========================================================================== */
.cms-search{margin-inline-start:auto;display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:8px;padding:11px 14px;width:280px;color:#9AA0AC;font-size:14px;background:#fff}   /* :2535 */
.cms-hcsearch{display:flex;align-items:stretch;background:#fff;border-radius:12px;box-shadow:0 16px 36px rgba(20,30,80,.08);padding:12px;width:900px;margin:0 auto}   /* :2690 */
.cms-hcsearch .cms-search{flex:1;margin:0;border-radius:8px}   /* :2691 */
.cms-hcsearch .btn{margin-inline-start:12px;padding:0 36px;display:flex;align-items:center}   /* :2692 */
.cms-hcsearch{border:1px solid #EEF0F6;box-shadow:0 10px 28px rgba(20,30,80,.07)}   /* :2707 */
.cms-search.cms-sfx{border-color:#B9C2D8}   /* :2882 */

/* Career Guides listing search. The field geometry is the approved `.cms-search` above; these
   rules only make the frame's static placeholder a real input and keep filtering state honest. */
.cms-guide-listing .cms-search input{flex:1;min-width:0;border:0;padding:0;margin:0;background:transparent;font:inherit;font-size:14px;color:var(--ink)}
.cms-guide-listing .cms-search input::placeholder{color:#9AA0AC;opacity:1}
.cms-guide-listing .cms-search input::-webkit-search-decoration{-webkit-appearance:none}
/* Operator smoke-test correction, 2026-09-12: Chrome's UA focus ring enclosed only the 17px-tall
   inner input inside this 42px search control. Paint the state on the complete control, using the
   same full-box treatment as the Help Center search below, and remove the now-duplicated UA ring. */
.page .cms-guide-listing .cms-search:focus-within{border-color:#1A52C4}
.page .cms-guide-listing .cms-search:has(input:focus-visible){outline:2px solid #1A52C4;outline-offset:2px}
.page .cms-guide-listing .cms-search input:focus,
.page .cms-guide-listing .cms-search input:focus-visible{outline:none}
.cms-guide-featured,.cms-guide-group{display:contents}
.cms-guide-featured[hidden],.cms-guide-group[hidden]{display:none}
.cms-guide-search-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.cms-guide-search-status[data-empty="true"]{position:static;width:auto;height:auto;margin:-12px 0 32px;overflow:visible;clip:auto;white-space:normal;text-align:center;color:var(--ink-2);font-size:15px}
@media (max-width:1023.98px){
  .cms-guide-listing .cms-chiprow{align-items:stretch;flex-direction:column}
  .cms-guide-listing .cms-search{margin-inline-start:0;width:100%;box-sizing:border-box}
  /* The hero-host rule above is intentionally more specific. Repeat the viewport clamp here
     with matching scope so phones/tablets do not inherit the hero's wider desktop content box. */
  .page.mkt .mkt-hero .cms-guide-search-host{width:min(900px,calc(100vw - 40px));max-width:calc(100vw - 40px)}
  .cms-guide-search-host .cms-chiprow{width:100%;max-width:100%}
  .cms-guide-search-host .cms-chips{width:100%;max-width:100%}
  .cms-guide-search-host .cms-search{flex:0 1 auto;width:100%;max-width:420px}
  /* /guides renders the CMS band, not `.mkt-hero`; keep its portaled toolbar inside
     the band content box and let the chips wrap as a single bounded group. */
  .cms-band .cms-guide-search-host{width:100%;max-width:100%;box-sizing:border-box}
  .cms-band .cms-guide-search-host .cms-chiprow{align-items:stretch;width:100%;max-width:100%}
  .cms-band .cms-guide-search-host .cms-chips{box-sizing:border-box;flex-wrap:wrap;min-width:0;justify-content:center}
  .cms-band .cms-guide-search-host .cms-search{align-self:center;width:100%;max-width:420px;box-sizing:border-box}
}

/* Guide filters are real buttons. Keep their hit area at the mobile rule's 44px minimum on
   narrow layouts and on any coarse/touch pointer, including 1024px tablet landscape. */
@media (max-width:1199.98px), (hover:none) and (pointer:coarse){
  .cms-band .cms-guide-search-host .cms-chip,
  .page.mkt .mkt-hero .cms-guide-search-host .cms-chip{display:inline-flex;align-items:center;min-height:44px;box-sizing:border-box}
}

/* AUTHORED — NO FRAME, correctness only. The frame draws the field as a `<span>`; the live control
   is an `<input>` (precedent: /pages/help-center). A UA input inside a flex label carries its own
   border, padding and font and a min-width it will not shrink below; these make it render as the
   span the frame draws — 14px, the frame's own placeholder colour `#9AA0AC` (`.cms-search` :2535),
   no box of its own. Nothing here sizes the control; that is the vendored rules' job. */
.cms-hcsearch input{flex:1;min-width:0;border:0;padding:0;margin:0;background:transparent;font:inherit;font-size:14px;color:var(--ink)}
.cms-hcsearch input::placeholder{color:#9AA0AC;opacity:1}
.cms-hcsearch input::-webkit-search-decoration,.cms-hcsearch input::-webkit-search-cancel-button{-webkit-appearance:none}

/* ==========================================================================
   P3-OP-20 - NRC-P1-283 - THE HELP-CENTRE SEARCH FIELD AND THE POPULAR CHIPS.
   lane-s14 (sheet-surgeon), 2026-09-07. Operator ruling #22; screenshots
   p10-gates/.state/team/eg-batch/EG-HELP-CENTER/operator-1041-helpcenter-{full,hero}.png.

   MEASURED BEFORE on :4410 (this worktree), hydrated (networkidle), dpr 2, pointer parked at
   (3,3) and `matches(':hover')` asserted true before every state read. BEFORE.json, 39 cells,
   coverage 39 of 39 meant, 0 errors:
     /help-center @1280/1440/1920, input FOCUSED: outline `rgb(0, 95, 204) auto 1px` - Chrome's
       own focus ring, the "browser blue ring" the ruling names. The FIELD does not move at all
       on focus: border stays 1px solid rgb(185, 194, 216), no outline, no fill.
     the field HOVERED: background rgb(255, 255, 255) -> rgb(255, 255, 255). NO delta (S1
       hover-absent), 3 of 3 widths.
     the five `.cms-pop .cms-chip` buttons HOVERED: background, colour, opacity, transform,
       shadow and border-colour ALL IDENTICAL to rest, 5 of 5 - on elements that carry onClick.
   THE HOMEPAGE FIELD, the treatment the ruling ports FROM, measured the same way on `/`:
     rest  border 1px solid rgb(106, 141, 208), radius 14px
     hover background rgba(0, 0, 0, 0) -> rgb(227, 236, 254)          (interaction.css:246)
     focus border -> rgb(26, 82, 196) and outline 2px solid rgb(26, 82, 196) offset 2px, with
           the INPUT's own outline-style `none` - the FIELD carries the state, not the input
           (interaction.css:340, :348, :378). That is what is ported below.
     WARNING ON ONE OF THOSE NUMBERS: its focused background reads rgb(227, 236, 254) only
     because focus was taken by CLICK, so the pointer is on it. That is the HOVER fill, not a
     focus fill; recorded so it is not re-quoted as one.
   TRANSITION: NOTHING TO PORT. The homepage field declares no transition (computed `transition`
     is the initial `all`, duration 0s) and neither does this one - they are already consistent.
   RADIUS: NOT PORTED. This is a DISAGREEMENT with the ruling, reported per S13 rather than
     taken. The homepage field's 14px sits on an open card; this field is nested inside
     `.cms-hcsearch`, whose own radius is 12px, so a 14px INNER radius would be larger than the
     box containing it. The frame's 8px is the only value that stays inside its container. The
     rest border (#B9C2D8, the frame's own `.cms-search.cms-sfx`, design-system.css:2882) is
     left alone for the same reason: the D5 3.0-3.5 band was ruled for the hero field on the
     CARD ground, and re-deriving it for a white ground would mint a value nobody chose.

   S13 - THE FRAME. `Candidate/CMS Pages/Help center.html`, read from the vault git object:
   it draws this control as `class="cms-search big cms-sfx"` inside `.cms-hcsearch` and the
   five chips as `class="cms-chip"` inside `.cms-pop`. So the frame's chip vocabulary IS
   `.cms-chip` (design-system.css:2533) with the `.cms-pop .cms-chip` white override (:2694),
   NOT the CTA pill - reported to the ruling, which asked which one and why. A static HTML
   frame draws no hover and no focus, so both states below are branch 2, NO FRAME, correctness
   only. INTERIM DEVIATION - UNRATIFIED: the frame is silent here, the walk is not.

   S14 - DENOMINATOR, derived and printed BEFORE the cure. The help-centre family is SIX routes,
   from the live hrefLang alternates of /help-center on :4300 (Next emits camelCase, trap 7):
   /help-center, /ar/markaz-almusaeada, /bn/sahayota-kendro, /es/centro-de-ayuda,
   /hi/sahayata-kendra, /mr/madat-kendra. MEASURED IN THE HYDRATED DOM at all three widths:
   the five locale twins carry NO `.cms-hcsearch`, NO `.cms-pop` chip and NO `.cms-hcband` -
   they render the generic CMS page with an `.mkt-hero`. So rules 1 and 2 have a denominator of
   ONE route x 3 widths = 3 cells, and the twins are untouched BY MEASUREMENT, not by hope.
   (sitemap.xml lists only 4 of those 6; ar and mr are reachable, carry hreflang and are absent
   from the sitemap - reported, not fixed: the i18n plane is parked, section 17.)
   The chip states are scoped to `.cms-pop` deliberately: the other 40 `a.cms-chip` on /blog and
   /guides already carry their own hover at :747, so the missing-state root cause is the
   `<button>` chips alone.
   NOTE `html .page button.cms-chip` (marketing-target.css:325) adds `border-block: 5px solid
   transparent` with `background-clip: padding-box` for the 44px tap floor, so the PAINTED chip
   is 34px and a background change paints on the padding box. The 44px hit area is not touched.

   CAN-IT-WIN (EG-23): `grep -n 'style={{'` returns NOTHING in HelpSearch.tsx, and the chips in
   CMSPagesHelpCenterFrame.tsx:283-297 carry no `style` attribute (8 inline styles in that file,
   none on `.cms-pop` or `.cms-search`). No inline declaration outranks these rules. Specificity
   checked against what is already there: (0,3,0) plus a state and (0,4,0) beat `.cms-search`
   (0,1,0), `.cms-search.cms-sfx` (0,2,0) and `.cms-pop .cms-chip` (0,2,0).
   AND NOT INVISIBLE AGAINST ITS OWN GROUND: #E3ECFE is measured against the control's own white
   rest in AFTER (delta printed), never assumed.
   Section 9b: literals only - no `var()` is introduced, so there is no token scope to satisfy.
   ========================================================================== */
.page .cms-hcsearch .cms-search:hover { background: #E3ECFE; }
.page .cms-hcsearch .cms-search:focus-within { border-color: #1A52C4; }
.page .cms-hcsearch .cms-search:has(input:focus-visible) { outline: 2px solid #1A52C4; outline-offset: 2px; }
/* The UA ring goes ONLY because the field above now carries the state - never removed alone. */
.page .cms-hcsearch input:focus, .page .cms-hcsearch input:focus-visible { outline: none; }
.page .cms-pop .cms-chip:hover { background: #E3ECFE; }
.page .cms-pop .cms-chip:focus-visible { outline: 2px solid #1A52C4; outline-offset: 2px; }

/* ==========================================================================
   P2-02 - THE HELP-CENTRE CHIPS AND THE SEARCH BUTTON TAKE A 12px RADIUS.
   Rulings R-2026-09-23-P10-Z ("Chips (and the Search button they follow) use a 12px radius")
   and -K (chips take the Search / Sign in / Post a job button shape). Plan item 2.2, radius only.
   FRAME: `Candidate/CMS Pages/Help center.html` draws the chip at 6px (design-system.css:2592);
   the ruling overrides it. INTERIM DEVIATION - UNRATIFIED only in the frame sense: the ruling IS
   the ratification, the frame file has not been redrawn.

   MEASURED BEFORE on :4300 (autorun/runs/P2-02/logs/builder-before.txt, red/output.txt):
     chips   `.cms-pop .cms-chip` (5 <a>) computed radius 6px, border-block 5px transparent,
             margin-block -5px, background-clip padding-box -> PAINTED corner 6px x 1px.
     Search  `.cms-hcsearch .btn` computed 12px already, but at >=768 it carries a 1px transparent
             border on all four sides with padding-box clip -> PAINTED corner 11px x 11px.
   ROOT CAUSE (one, twice): the 44px tap cure in marketing-target.css section 5 paints through a
   transparent border, so painted radius = radius - border. A radius change alone cannot paint
   12x12 while that border exists; the border must go and the hit box be kept another way.
   S14 DENOMINATOR: 5 chips x 4 cells (1440/1920/768/390) = 20 chip-cells + the Search button
   at the 3 cells >=768 (at 390 it is border-box clipped and already paints 12). The 40 other
   `a.cms-chip` on /blog and /guides keep 6px: every selector below is under `.cms-pop` or
   `.cms-hcsearch`, and the locale twins render neither (measured, block above).

   THE CURE - SAME HIT BOX, SAME LAYOUT, NO PAINT THROUGH A BORDER:
     - border 0 + margin-block 0 : the outer flex size is unchanged (chip 34 = 44 - 2x5 before,
       34 + 0 now; button 42 = 44 - 2x1 before, 42 now), so no row, wrap or docH moves.
     - button margin-inline 12/0 -> 13/1 : replaces the 1px inline borders, so the painted
       button stays 126.34 wide at the same x (measured before AND after, logs/builder-btnhit-*.txt;
       a first variant, padding-inline 37, painted 128.34 - 1px wider each side - and was dropped).
     - a non-painting ::after (chip inset -5px 0, button inset -1px on all sides) is the
       activation region the border used to be. A pseudo-element hit-tests as its originating element, so a tap in the
       old 5px band still resolves to the chip. Row-gap arithmetic is the section-5 one: two facing
       5px extensions use 10 of the 10-12px gap, never overlap.
   CAN IT WIN: no `style={}` on these elements (block above). Specificity (0,3,2) / (0,4,2) beats
   `html .page a.cms-chip` (0,2,2) and `html .page button.btn.btn-primary` (0,3,2).
   Section 9b: literals only, no var(). Visible side effect, by design of the ruling not of this
   cure: the 2px-offset focus ring now sits 2px off the painted pill instead of the 44px box.
   ========================================================================== */
html .page .cms-pop a.cms-chip,
html .page .cms-pop button.cms-chip {
  border-radius: 12px;
  border-block: 0;
  margin-block: 0;
  position: relative;
}
html .page .cms-pop a.cms-chip::after,
html .page .cms-pop button.cms-chip::after {
  content: "";
  position: absolute;
  inset: -5px 0;
}
@media (min-width: 768px) {
  html .page .cms-hcsearch button.btn.btn-primary {
    border: 0;
    margin-block: 0; margin-inline: 13px 1px; /* P4-05 (AA, Layer C), NO FRAME: was `margin: 0 1px 0 13px`, same four LTR values. MEASURED: this (0,3,2) rule out-ranks :635 at >=768, so :635 alone could not mirror the button. One line, so no line below moves (other sheets cite this one by line). */
    position: relative;
  }
  html .page .cms-hcsearch button.btn.btn-primary::after {
    content: "";
    position: absolute;
    inset: -1px;
  }
}

/* The results region: NO FRAME. Reuses the page's own `.cms-hlrow` row (vendored above at :430)
   and nothing else; a list reset so the rows read as the highlighted-article rows do. */
.cms-search-results{max-width:900px;margin:20px auto 0;text-align:start}
.cms-search-results ul{list-style:none;margin:0;padding:0}
.cms-search-results .cms-hlrow{display:block}
.cms-search-results .cms-hlbody{display:block;font-weight:400;color:var(--ink-2);font-size:14px;margin-top:4px}
.cms-search-results p{margin:0;color:var(--ink-2);font-size:15px}
/* The five chips are `<button>`s here as on the precedent (§123: suggested queries, not chrome).
   Measured 2026-08-29 on /pages/help-center: the button renders byte-identically to the span —
   this reset asks the same of the marketing plane, which carries no global button reset. */
.cms-pop button.cms-chip{font:inherit;font-size:13.5px;font-weight:500;border:0;cursor:pointer;line-height:normal;font-family:inherit}
.cms-hcband{background:var(--tint-panel);text-align:center;padding:76px 20px 92px;margin:0 68px;position:relative}   /* :2685 */
.cms-hcband h1{font-family:var(--font-head);font-size:44px;font-weight:800;letter-spacing:-.02em;margin:0 0 14px}   /* :2687 */
.cms-hcband>p{color:var(--ink-2);font-size:15px;margin:0 0 34px}   /* :2688 */
.cms-pop{display:flex;gap:10px;justify-content:center;align-items:center;margin-top:28px;font-size:14px}   /* :2692 */
.cms-pop .lab{color:var(--ink-2)}   /* :2693 */
.cms-pop .cms-chip{background:#fff;font-weight:500}   /* :2694 */

/* AUTHORED — NO FRAME, correctness only. `margin:0 68px` leaves 254px of content at a 390
   viewport, and `.cms-pop` is a non-wrapping flex row of five chips plus a label, which cannot
   fit any narrow width. The frames are captured at 1200-1700 and say nothing about either.
   Winner read out of the browser, not assumed. */
@media (max-width: 1023.98px){
  .cms-hcband{margin:0;padding:56px 20px 64px}
  .cms-hcband h1{font-size:34px}
  .cms-hcsearch{width:100%}   /* the vendored 900px cannot fit a band that is now viewport-wide */
}
@media (max-width: 599.98px){
  .cms-hcband{padding:40px 16px 44px}
  /* 2026-08-29 — the corner notches cover the h1 at phone width. MEASURED at 390: `.cms-hcband`'s
     89px `.nt-tl` overlaps the h1's first line by 25.2 x 35px (the "H" of "How can we help you?"
     is under it); `.cms-band`'s 53px notch overlaps /guides' h1 by 15.7 x 9px. At 600 and 768
     the horizontal overlap is 0. NO FRAME below 1200; this is the rule already applied to
     `.cms-cta .cms-notch` in the block below, extended to the two other notched bands (S-F). */
  /* P2-12 (operator-2026-09-25-NOTCH-MOBILE): `display:none` REVERSED here — see the P2-12 block at the end. */
  .cms-hcsearch{flex-direction:column}
  /* SM-03, 2026-09-29: the observed 390px wrapper stops short of the form's inner edge.
     Once this row stacks, replace .cms-search's desktop 280px width on this child only;
     the adjacent full-width button is the geometry control. Guides and desktop are unchanged. */
  .cms-hcsearch > .cms-search{width:100%;box-sizing:border-box}
  .cms-hcsearch .btn{margin:12px 0 0;justify-content:center;min-height:44px}
  .cms-hcband h1{font-size:27px}
  .cms-pop{flex-wrap:wrap;justify-content:center}
}

/* ============================================================================
   2026-08-29 — L5 W1 (C6): THE BLUE PILL CTA'S CORNER CUTOUT, MEASURED AGAINST ITS FRAME.
   `marketing.css:445-447` (pinned) and the inline copy in ArticleView.tsx draw `.cta-notch`
   34×34 with an 18px inner radius on a band of radius 24. The frames these bands belong to —
   `Employer/Home and Pricing/Become an Employer.png`, `Live Recruiter/Home and Pricing/Become a
   Live Recruiter.png` — measure the SAME cutout at 48×48, inner radius 9, band radius 32–33
   (p10-gates/probes/shapes.py, the same function on both PNGs; docs/STRUCT-L1-SHAPE-2026-08-29.md).
   66 instances on 60 pages, one component, all wrong the same way. Specificity (0,2,0) so the
   rules outrank the inline `.cta-notch` (0,1,0) that ships in the component's <style>.
   `.cms-cta` (71px) is NOT touched: its frame (About Us) matches it already.
   ============================================================================ */
/* ⛔ CORRECTED A THIRD TIME, and this one is the unit: the Employer/Recruiter frame HTML renders its
   1200px page with `zoom: 1.41667` (1200 × 1.41667 = 1700). Every rect-based read of those frames —
   the pixel instrument AND getBoundingClientRect — is inflated ×1.4167: the frame's `.cta-notch` is
   33.99px CSS (rect 48). The live 34px was RIGHT; the size override is withdrawn. The only real
   difference was the inner radius, 18 → 10, which stands below. The About / Guides / Help-center
   frames carry no zoom, so W8's 52×53 transcription is in CSS units already. */
/* ⚠ CORRECTED BY THE FRESH-CONTEXT VERIFIER, same session. The frame is also shipped as HTML
   (gallery-510/frames/Employer/Home and Pricing/Become an Employer.html); rendered through the
   same pipeline its DOM reads notch 48×48, inner radius 10px, band radius 24px = calc(var(--r-card)+6px)
   — the band radius the live band ALREADY had. The prediction's "band r32" was the pixel
   instrument reading +9 on the frame's render (proven red-first on scratch copies: CSS 24 reads
   32/33, CSS 32 reads 42/43), and the first "unit correction" (9 → 12px) generalised a −4 that
   holds on the live render and not on the frame's. Width/height 34 → 48 stands under both
   readings; inner radius is the frame's 10px; the band-radius override is withdrawn. */
/* 2026-10-05 OPERATOR ORDER ("the corner cutout ... more rounded ... like the homepage banner"): cut-out inner radius = the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 10px (.mkt-ctaband 34x34 .cta-notch: /employers /affiliates /blog /help-center /press and their locale twins); width/height unchanged. Overrides the frame's 10px (.mkt-ctaband 34x34 .cta-notch: /employers /affiliates /blog /help-center /press and their locale twins) by that order. NO ledger row. File-only pass: NOT built, NOT measured in a browser. */
.mkt-ctaband .cn-bl { border-start-end-radius: 20px; }
.mkt-ctaband .cn-tr { border-end-start-radius: 20px; }

/* ============================================================================
   2026-08-29 — L5 W5: THE HERO'S PRIMARY BUTTON WAS THE SAME COLOUR AS ITS BAND.
   `.btn-solid{background:var(--cta-fill)}` (marketing.css:80) inside `.mkt-hero`, which is also
   `--cta-fill`: measured on /employers, band rgb(26,82,196) and button rgb(26,82,196) — a control
   invisible because it matches its ground. The sheet already solves exactly this for the CTA
   band (marketing.css:418 `.mkt-ctaband .btn-solid{background:#fff;color:var(--cta-fill)}`), and
   the frames (Become an Employer / Become a Live Recruiter) draw the hero primary white on the
   band. Same treatment, scoped to the hero. 58 instances, 10 English routes × locales.
   ============================================================================ */
.mkt-hero .btn-solid { background: #fff; color: var(--cta-fill); }

/* ============================================================================
   2026-08-29 — L5 W6: THE FAQ ACCORDION. Every frame with a FAQ draws a disclosure mark at the right and
   only the first answer open; the live list was static. Native <details>/<summary>; the box is
   still the pinned `.mkt-faqitem`. The glyph is the frame's — nothing else is drawn.
   ============================================================================ */
details.mkt-faqitem > summary.mkt-qrow { list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 16px; }
details.mkt-faqitem > summary.mkt-qrow::-webkit-details-marker { display: none; }
details.mkt-faqitem > summary.mkt-qrow .mkt-q { margin: 0; }
/* ⛔ EG-24 remainder (§J idx 70, S4; eye-gate plan B7) — 2026-09-06, Lane S. INTERIM DEVIATION · UNRATIFIED: the portal and
   affiliate frames draw these INTERACTIVE inks / rings in --brand (#2164F4); the operator's Issue 6 ruling names --cta-fill (#1A52C4)
   as the one interactive blue. In this sheet 8 declarations migrate (the FAQ glyph, the FAQ focus ring, the hero/sign-up buttons'
   ink and border in rest/hover/press) — every one an INK, BORDER or RING on a CONTROL; NO surface moves (.cms-band, .cms-cta-wm,
   the icon colours and the footer are untouched and measured 0.000 dE2000 before/after on 30/30 desktop cells, eg-batch/B7/).
   §9b: every element is inside .page.tok-iter3 (scope9b.json) so var(--cta-fill) is safe. Excluded on purpose: .p-nav-home's ring
   (the wordmark link — ruling addendum). */
details.mkt-faqitem .mkt-qx { flex: none; width: 22px; height: 22px; display: inline-flex; align-items: center; justify-content: center; color: var(--cta-fill); font-weight: 700; font-size: 20px; line-height: 1; }
/* Operator 2026-09-29: every FAQ uses the homepage's diagonal arrow. Native details remains the
   source of truth for mouse, touch, keyboard and assistive technology. */
details.mkt-faqitem .mkt-qx { direction: ltr; color: var(--brand); transition: transform .3s ease; }
details.mkt-faqitem .mkt-qx::before { content: '↗'; font-size: 22px; }
details.mkt-faqitem > summary > svg.mkt-qx::before { content: none; }
/* Closed and expanded FAQ arrows stay on-brand; opening rotates the same arrow down-right. */
details.mkt-faqitem[open] .mkt-qx { transform: rotate(90deg); color: var(--brand); }
details.mkt-faqitem[open] .mkt-qx::before { content: '↗'; }
@media (prefers-reduced-motion: reduce) {
  details.mkt-faqitem .mkt-qx { transition: none; }
}
details.mkt-faqitem[open] > .mkt-a { margin-top: 12px; } /* CF-18: 12px is marketing.css:452's own .mkt-a margin (the frames'); 10 was this rule's invention, measured as an F3 frame diff on every FAQ page */
details.mkt-faqitem > summary.mkt-qrow:focus-visible { outline: 2px solid var(--cta-fill); outline-offset: 2px; border-radius: 6px; }

/* ============================================================================
   2026-08-29 — L5 W8 (C7): THE BOXED BLUE HERO TAKES THE CORPUS'S BOXED-BLUE-BANNER SHAPE.
   `.mkt-hero` measured on 58 instances: a boxed 1200px band, square corners, no cutout — a shape
   present in 0 of 13 frames. The only approved boxed blue banner is `.cms-band` (:490 above,
   vendored): margin 0 68px 0 66px, radius 0, cutouts 52×53 r12 top-left/bottom-right, hidden below
   600px (8b865cb7). Transcribed here, not designed. The cutout is the PAGE ground (`--page-bg`),
   not #fff, so it is a cutout on every route. /employers /recruiters /affiliates keep this until
   they are rebuilt to their own full-bleed frames (declared, L2).
   ============================================================================ */
.page .mkt-hero { margin: 0 68px 0 66px; border-radius: 0; }
/* ⚠ MEASURED after the first build: the notches rendered 0×0 — the pinned `.page.fin.mkt .mkt-hero>*
   {position:relative;z-index:3}` (0,4,0) outranks `.cms-notch{position:absolute}` (0,1,0), and an
   inline <span> that is not absolutely positioned has no box. (0,5,0) restores the cutout. */
.page.fin.mkt .mkt-hero > .cms-notch { position: absolute; z-index: 4; background: var(--page-bg); }
/* P2-05 (R-2026-09-23-P10-J, operator answer "C", 2026-09-24): the frame's pointer-following `.jglow`
   now also lives in every blue `.mkt-hero` / `.mkt-ctaband` (CursorGlow.tsx). The same two pinned
   host-child rules that zeroed the notches above would zero it too: `.page.fin.mkt .mkt-hero>*`
   (0,4,0, marketing.css:590) and `.mkt-ctaband>*` (0,1,0, :419, later than `.jglow` at :152, so it
   wins the tie) both set `position:relative`, turning the frame's `inset:0` overlay into a
   zero-height in-flow box. These restore the frame's OWN values (marketing.css:152: absolute,
   inset 0, z-index 2) and nothing else: z 2 keeps it above the dim field (`::after` z 1) and the
   arrow-spot (earlier sibling), and under the copy (z 3 in the hero; z 2 but later in DOM in the band). */
.page.fin.mkt .mkt-hero > .jglow,
.mkt-ctaband > .jglow { position: absolute; inset: 0; z-index: 2; }
.mkt-hero .cms-notch { background: var(--page-bg); z-index: 4; }
/* 2026-10-05 OPERATOR ORDER ("the corner cutout ... more rounded ... like the homepage banner"): cut-out inner radius = the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 12px (.mkt-hero 52x53 notches, every notched marketing hero); width/height unchanged. Overrides the frame's 12px (.mkt-hero 52x53 notches, every notched marketing hero) by that order. NO ledger row. File-only pass: NOT built, NOT measured in a browser. */
.mkt-hero .cms-notch.nt-tl { width: 52px; height: 53px; border-bottom-right-radius: 20px; }
.mkt-hero .cms-notch.nt-br { width: 52px; height: 53px; border-top-left-radius: 20px; }
@media (max-width: 1279.98px) { .page .mkt-hero { margin: 0; } }
/* P2-12 (operator-2026-09-25-NOTCH-MOBILE): the <600px `display:none` that stood here is REVERSED — see the P2-12 block at the end. */

/* ============================================================================
   2026-08-29 — D3 / D8. (1) `.mkt-hero--frame`: a hero that carries the frame's sign-up card
   (Become an Employer / Live Recruiter / Affiliate) is page-wide with square corners and no
   cutout — the frames' own DOM, in CSS units (their 1200px page is exported at zoom 1.41667):
   `.mkt-hero{margin:0}` width 1200. W8's `.cms-band` shape stays on the NO-FRAME heroes.
   (2) `.mkt-plain`: the plain title the Blogs Listing frame draws instead of a hero band —
   40px, left, in the listing's column. (3) empty-figure stat slots read as slots.
   (4) the node core slab: the frame's helper rule the pinned sheet does not carry.
   ============================================================================ */
.page .mkt-hero.mkt-hero--frame { margin: 0; }
.mkt-plain { max-width: 1100px; margin: 34px auto 0; padding: 0 48px; }
.mkt-plain h1 { font-size: 40px; letter-spacing: -0.02em; }
.mkt-snum [data-needs] { color: var(--mut); font-weight: 500; }
.mkt-node-core .chip-body { position: absolute; inset: 0; width: 100%; height: 100%; }
details.mkt-faqitem[data-needs] > summary.mkt-qrow { cursor: default; }

/* ── F8-HOVER-FAQ-SUMMARY (§J idx 214, S4) — 2026-09-06, Lane S (sheet-surgeon). NO FRAME: `Become an Affiliate`
 * draws the FAQ static (the L5 W6 block above records the same) — correctness only (S13 branch 2).
 * MEASURED BEFORE on :4320 (eg-batch/B3/BEFORE.json, /affiliates × 1920/1440/1280/768/390, :hover asserted):
 * summary color rgb(29,29,31), bg transparent, rest == hover == active, 0.00 dE2000 on 5 of 5.
 * TREATMENT from the neighbour: the home accordion's hover is a COLOUR STEP on the question row
 * (`.jgrid .acc:hover h3{color:var(--ink)}`, marketing.css:196); the blue is the ruled interactive blue
 * (EG-24 ruling: `--cta-fill`). §9b proven in the browser: getPropertyValue('--cta-fill') NON-EMPTY on the
 * summary (eg-batch/_scope/scope9b.json). Scoped `:not([data-needs])` because :717 makes placeholder rows
 * `cursor:default` — not a control, so no hover. PREDICTED: #1D1D1F -> #1A52C4 = 32.822 dE2000 (floor 3.0);
 * contrast on the card ground #FAFCFF 6.704. The `.mkt-qx` glyph keeps its own `var(--brand)` (B7's row).
 * S14 blast radius: SSR floor 13 routes / 80 `<details class="mkt-faqitem"` over the 120 sitemap routes
 * (/affiliates /faq /about + their ar/es/hi/bn/mr twins) — one selector, one rule (S8). */
details.mkt-faqitem:not([data-needs]) > summary.mkt-qrow:hover { color: var(--cta-fill); }


/* ============================================================================
   2026-08-29 — D5: a chip that has a target is an <a>; the sheet's chip look is the same, the link
   affordance is the site's approved-by-use underline on hover (marketing-locale.css precedent).
   Targets get a scroll margin so the header does not cover the row they land on.
   ============================================================================ */
a.cms-chip { color: inherit; text-decoration: none; }
a.cms-chip:hover, a.cms-chip:focus-visible { text-decoration: underline; }
/* ⛔ W6-C 2026-09-03, CORRECTED THE SAME DAY. This rule is DELETED, not re-pointed.
   It was `scroll-margin-top: 96px`, then briefly `var(--sticky-band-h)` under a "one authority,
   two consumers" design. THAT DESIGN WAS THE BUG: scroll-padding-top (on html) and
   scroll-margin-top (on the target) are NOT alternatives — the browser applies BOTH. Measured
   by a blind verifier and re-measured here, 12/12 anchors on /guides and /blog at 1280 and 1920:
   targets landed at top 194.69-195.61 with a 97.09-98.02px EMPTY GAP below the header, i.e.
   exactly one header height too low.
   `html{scroll-padding-top}` in marketing-locale.css alone covers every fragment jump,
   scrollIntoView and focus scroll on the whole site, so ONE consumer is correct and two is not.
   ⚠ It also fixes a second defect: this rule was never scoped to >=1280, so it moved sub-1280
   anchors by 1.5-2px for a header that is `position: static` and off-screen there. */

/* ── CF-3, 2026-08-29: consecutive article sections on /pricing had no rhythm rule ──────────────
 * ArticleView renders each CMS row as a bare <section>; the gap between two of them was whatever
 * the previous row's last child happened to leave. Measured content gaps between consecutive bands
 * on /pricing, identical at 1920/1440/1280/768/390: [30, 0, 17, 20, 60, 0, 140]. The two zeros are
 * "For candidates -> Compare plans" (CF-2's) and "Pay as you go -> A note on currency" — the third
 * pay-as-you-go card's bottom border touching the next heading's line box. NO FRAME draws two
 * consecutive prose sections on this page; 30px is the page's own hero -> first-section rhythm
 * (`.pr-hero{margin-bottom:30px}`, the frame's value). The margin collapses with CF-2's 28px, so
 * the compare heading keeps the frame's spacing rather than gaining 30 on top of it. The 140 before
 * the footer matches the frame's own 139 (faqwrap -> darkfoot) and is left alone. */
.pr-main > section + section { margin-top: 30px; }

/* Operator smoke correction 2026-09-11: centre the heading over each pricing plan group while
   leaving every plan card's internal copy in its existing alignment. The direct `.cms-prose`
   sibling is the group's supporting line, so centre its text and its narrower box too.
   ⚠ the measure was 62ch when this was written and is 46ch since OWED-CMS-PROSE-62CH (2026-09-17);
   these two rules set ALIGNMENT ONLY and INHERIT the measure, so nothing here needed changing —
   but the centred section intros do narrow with it. */
.pr-main > section:has(> .plan-row) > h2 { text-align: center; }
.pr-main > section:has(> .plan-row) > p.cms-prose {
  margin-inline: auto;
  text-align: center;
}

/* Operator smoke correction 2026-09-11: the two closing pricing sections continue the
   centred section-introduction treatment above. Scope the rule to the section carrying the
   pay-as-you-go card grid and its immediately following currency note; card copy stays left. */
.pr-main > section:has(> .mkt-fgrid) > h2,
.pr-main > section:has(> .mkt-fgrid) + section > h2 {
  text-align: center;
}
.pr-main > section:has(> .mkt-fgrid) > p.cms-prose,
.pr-main > section:has(> .mkt-fgrid) + section > p.cms-prose {
  margin-inline: auto;
  text-align: center;
}

/* ── CF-5, 2026-08-29: the footer column headings are <h2> now (SiteFooter.tsx) ─────────────────────
 * marketing.css:300 `.p-foot h4{font-size:16px;font-weight:700;margin:0 0 16px}` styled the old tag;
 * the same three values for the new one, so the rendered heading is byte-identical in computed style
 * (font-family/weight/tracking come from the shared `.page h1..h4` rule, which the h2 already matches).
 * (0,2,1) so it outranks `.page h2{margin:0}` (0,1,1). */
.p-foot .fcols h2.fh { font-size: 16px; font-weight: 700; margin: 0 0 16px; }

/* ── CF-15, 2026-08-30: THE PORTAL FRAMES' OWN RULES THE PINNED SHEET NEVER GOT ─────────────────────────────
 * `Become an Employer.html` and `Become a Live Recruiter.html` carry their CSS inline. A rule-level diff against
 * every served sheet (scratchpad/cf/portal-rules2.json) found 16 rules shared by both frames, 3 employer-only and
 * 17 recruiter-only that no served sheet carries. Copied VERBATIM (declarations untouched); the frames scope them
 * to `.page.fin.mkt`, which live emits on the portal pages. The recruiter-only ones are additionally scoped to
 * `.portal-recruiter` — the recruiter frame's own root class, emitted by ArticleView from the row's `portal` field —
 * because the employer frame draws its why-list and steps differently and the two pages share `.page.fin.mkt`.
 * NOT vendored, declared: 9 scroll-reveal STATE rules (`.mkt-step{opacity:0}` + `.lit`, `.reveal-armed` + `.in`)
 * that need the frame's IntersectionObserver script — vendoring them blind would blank the steps; and the ONE
 * selector the two frames disagree on (`.mkt-ctaband .arrow-spot`: employer background-image, recruiter mask).
 * docs/PREDICTION-cf-portal-cms-rules-2026-08-30.md */
/* shared by both portal frames */
.page.fin .mkt-tby{gap:0}
/* ══ WALK-3 X-01, 2026-09-19 — THE TWO LIFT BUTTONS WHOSE COLOUR STILL SNAPPED ══════════════════
   The four approved lift buttons own `transition:transform .16s ease,box-shadow .16s ease` (the
   frame's canonical 2-property transition, MOTION-SYSTEM.html:357-364), which outranks the (0,0,0)
   easing added for the rest of the plane in marketing-interaction.css. Their hover ALSO changes
   background and color (:951 and :954, lane-authored at the P1 walk), and that half was arriving in
   one frame — measured after the first cure: 20 cells of `A.btn.btn-solid changes background-color
   with no transition (0.16s, 0.16s)` on /employers /recruiters /affiliates at 1440 and 390.
   ⭐ THE CURE IS THIS SHEET'S OWN SIBLING PATTERN, NOT A NEW ONE: `.mkt-ghost` (:950) and
   `.mkt-signup .btn-solid.wide` (:953) already carry
   `transform .16s, box-shadow .16s, background .16s, color .16s, border-color .16s` — two of the
   four buttons were already complete and two were not. The two below are brought to their siblings'
   list verbatim. The frame's canonical pair keeps its .16s; nothing else changes, no lift is added
   or removed, and no hover END state moves. ══════════════════════════════════════════════════ */
.page.fin.mkt .mkt-hero .mkt-hbtns .btn-solid{background:#fff;color:var(--cta-fill); box-shadow:0 0 26px rgba(255,255,255,.35),0 4px 14px rgba(8,16,40,.20); transition:transform .16s ease,box-shadow .16s ease,background .16s ease,color .16s ease,border-color .16s ease}
.page.fin.mkt .mkt-hero .mkt-hbtns .mkt-ghost:hover{background:#fff;border-color:#fff;color:var(--cta-fill);transform:translateY(-2px); box-shadow:0 0 30px rgba(255,255,255,.45),0 10px 20px rgba(8,16,40,.26)}
.page.fin.mkt .mkt-signup .btn-solid.wide:hover{background:#fff;color:var(--cta-fill);border-color:var(--cta-fill);transform:translateY(-2px);box-shadow:0 8px 18px rgba(20,40,120,.16)}
.page.fin.mkt .mkt-hero .mkt-hbtns .mkt-ghost:hover::before{opacity:1}
.page.fin.mkt .mkt-hero .mkt-hbtns .mkt-ghost::before{content:"";position:absolute;inset:-26px;z-index:-1; background:var(--wm-hi,url(/mocks/assets/arrow-wm.png)) 0 0/30px 30px repeat; -webkit-mask:radial-gradient(closest-side at 50% 50%,#000 0%,#000 40%,transparent 100%); mask:radial-gradient(closest-side at 50% 50%,#000 0%,#000 40%,transparent 100%); opacity:0;transition:opacity .22s ease}
.page.fin.mkt .mkt-ctaband .btn-solid{box-shadow:0 0 26px rgba(255,255,255,.35),0 4px 14px rgba(8,16,40,.20);transition:transform .16s ease,box-shadow .16s ease,background .16s ease,color .16s ease,border-color .16s ease}
.page.fin.mkt .mkt-hero .mkt-hbtns .mkt-ghost{position:relative;background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.75);color:#fff; -webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);box-shadow:0 4px 12px rgba(8,16,40,.14); transition:transform .16s ease,box-shadow .16s ease,background .16s ease,color .16s ease,border-color .16s ease}
.page.fin.mkt .mkt-hero .mkt-hbtns .btn-solid:hover{background:#fff;color:var(--cta-fill); transform:translateY(-2px); box-shadow:0 0 34px rgba(255,255,255,.5),0 10px 22px rgba(8,16,40,.28)}
.page.fin.mkt .mkt-hero .mkt-hbtns .mkt-ghost:active{transform:translateY(0)}
.page.fin.mkt .mkt-signup .btn-solid.wide{transition:transform .16s ease,box-shadow .16s ease,background .16s ease,color .16s ease,border-color .16s ease}
.page.fin.mkt .mkt-ctaband .btn-solid:hover{background:#fff;color:var(--cta-fill);transform:translateY(-2px);box-shadow:0 0 34px rgba(255,255,255,.5),0 10px 22px rgba(8,16,40,.28)}
/* ⛔ 2026-09-06 (§J idx 210 sub-cause ii, Lane S): the three `:active` rules below were vendored ABOVE their `:hover` twins and
   were CASCADE-DEAD — a pressed pointer is also hovering, and at equal specificity the later `:hover` won the whole press
   (measured: act == hov on transform on every demo cell). The FRAMES themselves order hover BEFORE active (`Become an
   Employer.html` byte offsets: ctaband hover 35580 < active 35761 · hbtns 81149 < 81338 · signup 81778 < 81957), so this
   move RESTORES the frames' own order — a correction of the vendored copy, not a deviation. Declarations untouched. */
.page.fin.mkt .mkt-signup .btn-solid.wide:active{background:#fff;color:var(--cta-fill);border-color:var(--cta-fill);transform:translateY(0);box-shadow:0 3px 8px rgba(20,40,120,.14)}
.page.fin.mkt .mkt-ctaband .btn-solid:active{background:#fff;color:var(--cta-fill);transform:translateY(0);box-shadow:0 0 20px rgba(255,255,255,.4),0 3px 10px rgba(8,16,40,.24)}
.page.fin.mkt .mkt-hero .mkt-hbtns .btn-solid:active{background:#fff;color:var(--cta-fill); transform:translateY(0); box-shadow:0 0 20px rgba(255,255,255,.4),0 3px 10px rgba(8,16,40,.24)}
/* employer frame only (`.wdot` is the wire-dot class gate-w4-t1-emitted-class-styled has been RED on since D3) */
.mkt-node-wires path.wdot{stroke:#2164F4;stroke-width:7;stroke-linecap:round;opacity:1}
.page.fin.mkt.portal-employer .mkt-why{margin-top:0}
.page.fin.mkt.portal-employer .mkt-node{margin-bottom:0}
/* recruiter frame only, scoped to the recruiter root class */
.page.fin.mkt.portal-recruiter .mkt-witem h3{font-size:14px}
.page.fin.mkt.portal-recruiter .mkt-wwrap{grid-template-columns:1fr;gap:30px}
.page.fin.mkt.portal-recruiter .mkt-wlist{grid-template-columns:repeat(5,1fr);gap:14px}
.page.fin.mkt.portal-recruiter .mkt-sgrid{grid-template-columns:repeat(5,1fr);gap:18px;position:relative}
.page.fin.mkt.portal-recruiter .mkt-snum2{margin:0 auto 14px;position:relative;z-index:1;box-shadow:0 0 0 6px var(--page-bg)}
.page.fin.mkt.portal-recruiter .mkt-witem{flex-direction:column;gap:12px;padding:16px}
.page.fin.mkt.portal-recruiter .mkt-witem p{font-size:12px}
.page.fin.mkt.portal-recruiter .mkt-wwrap>div:first-child{max-width:720px}

/* ── CF-14, 2026-08-30: `.cms-ct` — the listing card title — was never vendored ────────────────────────────────
 * design-system.css:2539 and :2615, verbatim. Live had NO rule declaring font-weight for the 24 titles on /blog and
 * /guides (provenance: none) → 400 where the frame draws 700; line-height inherited 19px vs 1.45 (23.9px). */
.cms-ct{font-size:16.5px;font-weight:700;line-height:1.45}
.cms-scard .cms-ct{font-size:15.5px}

/* ── CF-18, 2026-08-30: the employer frame's node diagram, the portal notch radius, the step centring ─────────────
 * `Become an Employer.html` carries its own versions of six node-diagram selectors that marketing.css draws differently
 * (the Home frame's versions). Geometry vendored under the employer root class; the COLOUR declarations of the same
 * rules (`.mkt-node-wires path{stroke:#77A0F8}`, `.page.fin .p-foot{background:#0E1746}`) are withheld this turn and
 * named here. Both portal frames draw the CTA-band notches at 10px where marketing.css has 18 — scoped to the portal
 * pages. `.mkt-step{text-align:center;position:relative}` is the STATIC half of the recruiter frame's reveal rule
 * (its opacity/transform half needs the frame's script and stays declared). */
.page.fin.mkt.portal-employer .mkt-node-grid{grid-template-columns:24.8% 1fr 24.8%;gap:24px 0}
.page.fin.mkt.portal-employer .mkt-node-core{width:132px;height:132px;justify-self:center}
.page.fin.mkt.portal-employer .mkt-node-wires path{stroke-width:1.1;opacity:1}
.page.fin.mkt.portal-employer .mkt-node-card::after{display:none}
.page.fin.mkt.portal-employer .chip-body{clip-path:none;filter:none}
.page.fin.mkt.portal-employer .chip-pin{display:none}
/* 2026-10-05 OPERATOR ORDER ("the corner cutout ... more rounded ... like the homepage banner"): cut-out inner radius = the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 10px (portal-employer/portal-recruiter CTA band notches); width/height unchanged. Overrides the frame's 10px (portal-employer/portal-recruiter CTA band notches) by that order. NO ledger row. File-only pass: NOT built, NOT measured in a browser. */
.page.fin.mkt .cn-bl{border-start-end-radius:20px}
.page.fin.mkt .cn-tr{border-end-start-radius:20px}
.page.fin.mkt.portal-recruiter .mkt-step{text-align:center;position:relative}

/* ============================================================================
   .jc-logo ON THE MARKETING PLANE — vendored 2026-08-31 (finder batch 2 #5).
   The marketing companies/jobs/recruiters detail pages emit seeker vocabulary
   (span.jc-logo monograms, 4 emitter sites) but DL-11 keeps design-system.css off
   this plane, so the tile rendered as a bare 9-14.5x20 letter on 21/110 routes.
   NO FRAME here (the mapped Company Details frame draws 0 jc-logo); the drawn spec
   is VENDORED VERBATIM from the seeker product sheet: design-system.css:618 (base)
   with :649's radius-12 restatement that wins the cascade there. ZERO custom
   properties (§9b: nothing to scope). design-system.css and DL-11 untouched.
   docs/PREDICTION-jc-logo-tile.md carries the injected-rule layout deltas. */
.jc-logo{width:56px;height:56px;border-radius:12px;background:#FBF3DC;color:#B98A2C;display:flex;align-items:center;justify-content:center;font-size:13px;font-style:italic;font-weight:700;flex:none}

/* ============================================================================
   .cms-vid / .cms-team / .cms-tnav — vendored 2026-08-31 (operator ruling: seed
   /about's video + people bands). The About Us frame draws both bands with
   design-system.css rules, but DL-11 keeps that sheet off this plane, so the
   drawn spec is VENDORED VERBATIM from design-system.css (the .cms-team block:
   see `grep -n cms-team design-system.css` — padding 82/0/36/170, rail 355x367
   r12 tiles, gap 26, overflow:hidden; .cms-vid margin-top 38, img 100% r10;
   .cms-tnav 38px circles). The shared h2 rule already names .cms-csec/.cms-team
   (marketing-cms.css:37) and .cms-csec/.cms-csec>p are already vendored (:45-46).
   Tokens var(--ink-2)/var(--line) are IN SCOPE here (§9b): 14 and 6 existing
   rules in THIS sheet already resolve them on these pages — verified computed.
   `.cms-team-img` restates the rail-img geometry AS A CLASS because Img renders
   through MarketingPicture with inline max-width:100%/height:auto — the class
   wins where the descendant selector would lose to the inline style, so both
   are written. Measured against the frame at 1683: tiles 355x367, gap 26. */
.cms-team{padding:82px 0 36px 170px}
.cms-team>p{color:var(--ink-2);font-size:14.5px;margin:14px 0 0}
.cms-team-rail{display:flex;gap:26px;margin-top:38px;overflow:hidden}
.cms-team-rail img,img.cms-team-img{width:355px !important;height:367px !important;max-width:none !important;border-radius:12px;flex:none;object-fit:cover;display:block;margin:0}
.cms-vid{position:relative;margin-top:38px}
.cms-vid img{width:100%;border-radius:10px;display:block}
.cms-tnav{display:flex;gap:12px;margin-top:28px}
.cms-tnav span{width:38px;height:38px;border-radius:50%;border:1px solid var(--line);display:inline-flex;align-items:center;justify-content:center;color:var(--ink-2)}
/* MEASURED 2026-08-31 (probe-about-bands): with these base rules appended at the END of the
   sheet, an override placed in the earlier max-width:1279.98px block LOSES the cascade (same
   specificity, earlier position) — teamPad read 170px and tiles 355px at 768/390. The
   responsive override therefore lives HERE, after the base rules. NO FRAME below 1683 (fixed
   canvas) — correctness only: the 170px desktop inset would crush a phone column. */
@media (max-width: 1279.98px) {
  .cms-team { padding: 48px 20px 24px; }
  .cms-team-rail img, img.cms-team-img { width: 260px !important; height: 269px !important; }
}

/* ============================================================================
   THE CORNER NOTCH OVER TEXT — the 2026-08-24 / 08-29 cure COMPLETED (S14).
   2026-08-31. Re-derived over 600 cells (120 routes x 5 viewports) against TEXT
   LINE BOXES (Range.getClientRects), not element rects: 19 collisions on 15
   routes, 6 near-misses under 24px, 0 at 1280/1440/1920.

   The three existing rules (:212, :623, :701) are all scoped max-width:599.98px.
   Two gaps, both measured by an 8px width sweep 360->1400:
     .cms-notch  collides 600 -> 1272px  (first clean width 1280)  worst 43px
     .cta-notch  collides 392 ->  560px  (first clean width  568)  worst 13.1px
   So the whole 768 column was outside the old breakpoint, and .cta-notch — the
   marketing CTA family — was never in ANY rule. An instance fix wearing a
   component fix's clothes; this is the component fix.

   S13: the notch is FRAME-DRAWN and correct at desktop and is NOT deleted here.
   The approved About Us canvas is a fixed 1683px export (CLAUDE.md §4's worked
   example) and §13 records corpus canvases at 1200/1240/1683/1684/1700 — none
   renders between 392 and 1272, so NO FRAME governs that band and correctness
   decides, exactly as :622 already ruled ("NO FRAME below 1200") and the
   founder's mobile eye-gate accepted ("Decoration never eats copy").

   S16 — what this removes from view: the CTA band's corner cutouts stop painting
   below 1280 (cms) and below 600 (cta), so those bands show square corners
   through those ranges. Desktop keeps the drawn decoration untouched.
   §9b — TOKENS: none. Both declarations are display:none; no var() is introduced,
   so there is no custom-property scope to satisfy.
   Both notches are position:absolute, so display:none removes no flow box and
   document height is unchanged (asserted in the AFTER measurement).
   ============================================================================ */
/* P2-12 (operator-2026-09-25-NOTCH-MOBILE): both `display:none` rules that stood here are REVERSED — the
   operator ruled the cut-outs a design element on phones and tablets. They now show, sized down, with the
   bands padded clear of them where needed: the P2-12 block at the end of this sheet. */

/* ============================================================================
   P4-REGRESSION — the /pricing "Compare plans" disclosure marker and the chevron
   direction, made independent of ONE sheet. component-surgeon, 2026-09-06.

   THE OPERATOR SAW (screenshot of :4300 /pricing @1657, 15:4x CT): a black default
   disclosure triangle at the far LEFT on its own line ABOVE the centred "Compare
   plans", and chevrons that do not move on open/close.

   MEASURED, not inferred. Headless chromium on :4300 renders it CORRECTLY
   (summary display:block · list-style-type:none · nothing paints at the marker
   position by elementFromPoint at 20 probes · chevrons matrix(-1,0,0,-1,0,0)
   closed -> none open -> matrix(-1,0,0,-1,0,0) reclosed · <details> default CLOSED).
   The defect is REAL anyway and reproduces on demand: every declaration that
   suppresses the marker and rotates the chevron lives ONLY in marketing-motion.css,
   the 12th of the 15 stylesheets, and the render-blocking inlined critical CSS in
   the served HTML (39,424 B) carries the FAQ's identical pattern
   (`details.mkt-faqitem > summary.mkt-qrow { list-style: none; ... }`) and ZERO
   pr-cmp rules — measured, 0 occurrences of `pr-cmp` and 0 of `cmp-chev`.
   Aborting that one sheet on :4300 reproduces the screenshot exactly:
     display:list-item · list-style-type:disclosure-closed · marker on its own line
     above the h2 (summary top 998.5, h2 top 1046.5) · h2 centred · chevrons `none`.
   So: correct in a warm chromium, wrong for the FOUC window on every cold load and
   wrong PERMANENTLY in any browser holding a stale cached marketing-motion.css.
   One cause, all three of his symptoms.

   THE CURE IS DELIBERATELY REDUNDANT, three layers, because the failure IS
   single-sheet dependence:
     1. inline style={{listStyle:'none',display:'block'}} on the <summary> in
        ArticleView.tsx — ships with the document, right at first paint, unbeatable
        by any sheet and immune to a stale cache. That is the layer that closes the
        black triangle.
     2. this block — the ::marker and ::-webkit-details-marker pseudos, which cannot
        be written inline, plus the chevron rotation stated on BOTH states.
     3. marketing-motion.css:535-543 — unchanged, not this lane's file this turn.

   CASCADE (the "can it win" check, run before the first declaration): this sheet is
   the 9th <link>, marketing-motion.css the 12th, so equal specificity here would
   LOSE on order. Selectors below carry `details.pr-cmp[data-cmp]` = (0,4,3) against
   motion's (0,3,3) and win regardless of order. Nothing here contradicts motion.css;
   the values are identical by intent, and the [open] rule has no counterpart there.
   §9b — TOKENS: none. No var() is introduced, so there is no scope to satisfy.
   S13 — no colour is minted and no geometry is invented; every value is transcribed
   from marketing-motion.css:535/542 or is a marker suppression.
   The closed glyph stays as ArticleView.tsx records it: DOWN, an INTERIM DEVIATION ·
   UNRATIFIED against both frames, which draw it UP. This block does not change it.

   THE ANIMATION IS A REQUIRED BUILD, not a nicety — operator 2026-09-06 15:40,
   verbatim: "fix the chevron — it should be animated upon open and close". The
   `transition` was ALSO single-sheet (marketing-motion.css:541), so a stale copy of
   that sheet took the movement away along with the marker suppression: the chevron
   then jumps, or does not move at all, which is what he reported. Both end states
   are stated explicitly here — rotate(180deg) closed, rotate(0deg) open — so nothing
   depends on the glyph's default direction, and `rotate(0deg)` rather than `none` is
   what makes the OPEN direction interpolate as reliably as the closed one.
   S1 — the movement is MEASURED, not asserted: sampled per frame on a real click,
   the transform is read at 0 / ~125 / ~250 ms and must be strictly monotonic and
   distinct from both end states in between (evidence: AFTER-4370-*.json).
   The reduced-motion arm removes the transition and keeps both end states.

   ⚠ WHAT IS NEW HERE vs marketing-motion.css:550-552, stated line by line so the
   redundancy is auditable rather than accidental:
     ::marker                          NEW — motion.css has only the -webkit- pseudo
     list-style-type:none              NEW — motion.css has the shorthand only
     [open] rotate(0deg)               NEW — motion.css states ONLY :not([open]) and
                                       leans on the glyph's default direction for open
     transition + :not([open])         DELIBERATELY REDUNDANT, see below
   The duplicate `transition` and `:not([open])` are NOT an oversight. They are the
   whole cure in the one state that produced the operator's screenshot: when
   marketing-motion.css is stale or absent, those two declarations go with it and the
   chevron stops moving — his exact report. Values are identical to motion.css:550/551,
   so with that sheet present the rendering is unchanged and lane S2b's :4320 reading
   (16 distinct transforms opening / 18 closing over ~247 ms) is unaffected; measured
   after this block landed, same numbers. `will-change` was removed: it was invented
   here rather than transcribed from a neighbour (S13) and a promoted compositing layer
   changes text rasterisation (the W6-C precedent, 20 px).
   Reverting the redundancy is one line each if the lead rules it out.
   ============================================================================ */
.page details.pr-cmp[data-cmp] > summary.pr-cmp-s { list-style: none; list-style-type: none; display: block; }
.page details.pr-cmp[data-cmp] > summary.pr-cmp-s::marker { content: ''; display: none; font-size: 0; }
.page details.pr-cmp[data-cmp] > summary.pr-cmp-s::-webkit-details-marker { display: none; }
.page details.pr-cmp[data-cmp] .cmp-chev svg { transition: transform .25s ease; }
.page details.pr-cmp[data-cmp]:not([open]) .cmp-chev svg { transform: rotate(180deg); }
.page details.pr-cmp[data-cmp][open]      .cmp-chev svg { transform: rotate(0deg); }
@media (prefers-reduced-motion: reduce) {
  .page details.pr-cmp[data-cmp] .cmp-chev svg { transition: none; }
}

/* ============================================================================
   P6 — THE FAINT HAIRLINE ARC OUTSIDE THE CTA BAND'S CORNER CUTOUTS. 2026-09-06.
   Operator eye-gate, /pricing blue CTA band ("Not sure which tier fits?"): the two corner
   cutouts (top-right, bottom-left) each carry a faint rounded hairline arc on the page-ground
   side — "remove those".
   MEASURED on :4320 /pricing @1440, dpr 1 and dpr 2 (eg-batch/P6/BEFORE-dpr2-TR.png, -BL.png,
   BEFORE.json): band rgb(26,82,196), border-radius 24px, OVERFLOW HIDDEN; each `.cta-notch` is a
   34x34 box painted rgb(243,246,254) — byte-identical to the resolved page ground behind the band,
   rgb(243,246,254), so the notch itself contributes no colour difference.
   THE ARC IS A CLIP SEAM, NOT A BORDER, A SHADOW OR AN OUTLINE. Read off the elements, not
   guessed: the notch computes border 0px none, box-shadow none, outline none. `overflow:hidden`
   on a 24px-radius band CLIPS the notch square along that 24px arc, and the clip edge is
   antialiased — one sub-pixel row where the notch's fill is blended with what is behind it. Two
   identical colours either side of an antialiased curve still leave a visible curve.
   CURE AT THE SOURCE: the two corners that carry a cutout are SQUARE. A notch replaces the
   rounded corner, so there is nothing left to round, no arc to clip along, and the notch's own
   10px inner radius (set above, from the frame) still draws the cutout. The other two corners
   keep the frame's 24px.
   FRAME: the notch geometry is the frame's (Become an Employer / Become a Live Recruiter, the
   block above); the corner radius under a notch is NOT drawn by any frame — NO FRAME, correctness
   only. (0,2,0) beats the (0,1,0) inline `.mkt-ctaband` rule shipped in the component's <style>.
   ---------------------------------------------------------------------------- */
.mkt-cta .mkt-ctaband {border-top-right-radius:0;border-bottom-left-radius:0}

/* ============================================================================
   ITEM IMG — the CMS section photograph is centred and carries the guide card's
   blue overlay; and the overlay is CLIPPED TO THE PHOTO on every card size.
   component-surgeon, 2026-09-06, operator eye-gate 16:04 and 16:05 CT.

   HIS WORDS: (16:04, /employers) "this needs to be centered and the image also
   needs to be enhanced with the highlighted blue — like this — and wherever it's
   applicable apply it to". (16:05, /guides) "blue highlight should only be inside
   the image, nowhere should it bleed out".

   ONE ROOT CAUSE, BOTH SYMPTOMS, and it is an INLINE style — the "can it win"
   rule read backwards. ArticleView.tsx's `Img` shipped
   `style={{maxWidth:'100%',height:'auto',borderRadius:'var(--r-card)',margin:'8px 0 4px'}}`
   on EVERY CMS photo. An inline declaration outranks every sheet, so:
     - the section photo rendered at its INTRINSIC width and hugged the left edge;
     - `.cms-cardimg{height:100%}` NEVER APPLIED, so the card photo could not fill
       its own wrapper, and `.cms-imw` (absolute to the WRAPPER's bottom:0) painted
       below the photo.
   No sheet rule could have cured either one. The margin and radius are now dropped
   from that inline style whenever a className is present; this block owns geometry.

   MEASURED BEFORE, :4300 @1440 (IMG/BEFORE.json):
     /employers  photo x 218 w 435 right 653 · `.mkt-fgrid` x 218 w 1004 right 1222
                 -> left edges already agree, right edge 569 px short · NO overlay
     /guides     17 `.cms-imwrap`, 4 bleeding, all `.cms-scard`:
                 wrapper 130 vs img 94, and 195 vs 159 — a constant 36 px, of which
                 12 px is the inline margin and 24 px the frame's `height:100%`
                 stretch — overlay bottom 28 px BELOW the photo's bottom edge
     every size  img radius 18 px vs overlay radius 0 0 8 8 -> a 10 px corner
                 mismatch, which is the bottom-right bleed he saw on the large card

   THE TREATMENT IS REUSED, NEVER RE-TYPED (S13): the section photo is wrapped in
   the guide card's own `.cms-imwrap` with the guide card's own `.cms-imw` overlay
   element, so the gradient is literally the same rule —
   `linear-gradient(rgba(45,84,200,0), rgba(45,84,200,.8))` at 21 % height, read
   from the CSSOM. No colour is minted and no second gradient is authored here.

   §9b — TOKENS: `--r-card` is used only where it already resolved on these
   elements (it is what the inline style used, measured 18 px); no new token is
   introduced, so there is no custom-property scope to satisfy.

   ⚠ CENTRED AT INTRINSIC WIDTH, NOT SPANNED TO THE GRID — INTERIM DEVIATION ·
   UNRATIFIED. `interview.png` is 435x244 on disk and every section photo in
   /design/cms-photos/ is 435-438 px wide except `video` and `brandstrip`, so
   spanning to the grid's 1004 px is a 2.31x upscale — a visibly soft photograph
   built to close a complaint about alignment. "Centered" is also his literal word.
   Spanning is ONE declaration (`width:100%` on `.cms-secwrap`) once 1004 px assets
   exist; that is an asset commission, not a code change.
   NO FRAME draws this section: `grep -rln "start to finish\|mkt-fgrid\|mkt-feat"
   apps/web/src/frames/` returns nothing. This rests on the walk, not on a frame.

   S16 — what this removes from view: nothing is hidden. The overlay is clipped to
   the photo's box, so the pixels that stop painting are exactly the ones that were
   outside the photograph; they are counted in the AFTER (bleeding cards 4 -> 0).
   ============================================================================ */

/* (a) THE BLEED — DIAGNOSED, NOT CURED. S4 TWO STRIKES, STOPPED DELIBERATELY.
   The cause is measured and certain (see the header): the wrapper is stretched
   past its photo and `.cms-imw` is absolute to the WRAPPER, so it paints below the
   image. Two cures were tried and BOTH MADE IT WORSE, measured on :4370 /guides
   @1440, 4 bleeding cards -> 18:
     strike 1  `.cms-imwrap{overflow:hidden}` — the wrapper is a flex item the card
               stretches, so clipping did not shrink it; all 18 wrappers came out
               28 px taller than their photo and the overlay moved down with them.
     strike 2  a single-cell grid with the overlay in the photo's cell — the sole
               implicit row STRETCHES to the container's height (align-content
               defaults to normal/stretch for an auto row), so the row was 158.2 px
               against a 130.2 px photo and the overlay landed in the same place.
   S4 forbids a third variant from the same diagnosis. NOT SHIPPED, so /guides is
   exactly as it was before this block: 4 of 17 card overlays still bleed ~28 px
   below the photo, and every overlay's `0 0 8px 8px` still mismatches the photo's
   18 px corner. THE ROW STAYS OPEN.
   The next thing to try, recorded so it is not re-derived: strike 2 plus
   `align-content:start` (or `grid-template-rows:min-content`) so the row tracks the
   photo instead of the container. UNVERIFIED — it has not been measured.
   ⚠ ONE RULE FROM THIS HALF IS KEPT, and it is not a cure: `.cms-cardimg` needs its
   radius back in the sheet because ArticleView.tsx no longer sets it inline. ~~Without
   it the card photos would lose the 18 px corner they have today — a regression
   introduced by the TSX change, closed here.~~
   ⛔ THE STRUCK CLAUSE IS SUPERSEDED BY THE BLOCK BELOW AND IS KEPT IN PLACE, NOT DELETED (S9).
   It is still true that the rule must exist, and no longer true that its value is 18 px: the
   18 px corner it preserved was itself the deviation. The rule stays; only the value moves. */

/* ============================================================================
   P3-OP-48 · NRC-P1-377 — THE CARD PHOTO'S CORNER AND ITS FADE OVERLAY'S CORNER
   sheet-surgeon, lane-s26, 2026-09-08. Reported by lane-c17 as its own row while curing the
   BLEED (P3-OP-22b); the bleed is closed and this is the half that was left open.

   THE DEFECT, MEASURED on :4300 (the integration server, GO #38 stamped), hydrated
   (networkidle — trap 17), pointer parked at (2,2) with `:hover` FALSE on every measured
   subject before every read (trap 13), dpr 2, all 131 sitemap routes x 1440/1280 = 262 cells,
   coverage asserted INSIDE the probe (routesMeant 131 / routesProcessed 131 / difference 0 /
   errors 0), `p10-gates/probes/s26-census.mjs`:
     card photo `.cms-cardimg`   border-radius  18px 18px 18px 18px   on 54 of 54
     fade overlay `.cms-imw`     border-radius   0px  0px  8px  8px   on 54 of 54
   An 8 px corner is SQUARER than an 18 px corner, so the overlay's two bottom corners sit
   OUTSIDE the photograph's rounded corner and the blue fade pokes past the picture. That is
   the operator's complaint and it is a geometry defect, not a colour one — so it is graded on
   the property that actually changed: a PIXEL COUNT in the two bottom corners, never a dE.

   ⛔ THE VALUE IS THE FRAME'S, AND THE FRAME IS `design-system.css` — WHICH IS NOT LOADED HERE.
   `apps/web/src/app/(marketing)/layout.tsx:151-229` links FOURTEEN sheets and `design-system.css`
   is not among them (that file says so itself at :54). So the frame sheet is a SPECIFICATION on
   this plane, never a cascade participant, and this was checked rather than assumed:
     THE FRAME   design-system.css:2541  .cms-gcard img{ ... border-radius:8px ... }
     THE FRAME   design-system.css:2935  .cms-imw{ ... border-radius:0 0 8px 8px ... }
   The frame draws the card photograph and its overlay at THE SAME 8 px, which is why no frame
   card can poke out. The live 18 px comes from `var(--r-card)` = 18px under `.tok-iter3`
   (design-system.css:91 / marketing.css:689) and is THIS LANE'S deviation, exactly as
   NRC-P1-377 recorded it. S13 branch 1: the frame is the answer, so the photo comes to 8.
   NOTHING IS MINTED (S13 — take the cure from the neighbours): 8 px is the value the overlay
   already carries in BOTH sheets and the value the frame draws on the same element kind. The
   overlay is NOT touched; only the photograph moves, and it moves TO the overlay.

   ⚠ §13 DISAGREEMENT — RAISED HERE, THEN MEASURED AND SETTLED AGAINST THIS BLOCK'S FIRST ANSWER.
   ~~The frame declares a radius on `.cms-gcard img` ONLY. Read, all six others: `:2549 .cms-feat
   img` `:2556 .cms-mini img` `:2558 .cms-big img` `:2609 .cms-gfeat img` `:2613 .cms-scard img`
   declare NO border-radius at all, and `.cms-card` has no img rule — in the frame those five
   photographs are SQUARE under an 8 px-rounded overlay, which cannot poke out because a rounder
   overlay sits INSIDE a squarer photo. So 8 px is the frame's value for this element KIND applied
   uniformly; it is not drawn per family. The literal alternative (0 px on six of seven families)
   would square most card photographs on the site and split one treatment into two.~~
   ⛔ THE STRUCK PARAGRAPH IS SUPERSEDED AND KEPT IN PLACE (S9). Its FACTS were right — the frame
   does declare a radius on `.cms-gcard img` only, and the other five families are square — and its
   CONCLUSION was wrong. "Apply 8 px uniformly because it is the frame's value for this element
   KIND" is a DESIGN PREFERENCE, and S13 reserves design choices for the founder: where a frame
   shows it, it is BUILT AS SHOWN, including where another choice would score better. The block
   raised the disagreement and then resolved it itself, which is the one thing §13 forbids.
   See the P3-OP-48b block below for the measured frame values now shipped.

   §9b — NOTHING TO PROVE, BY CONSTRUCTION. `var(--r-card)` is REMOVED and replaced with the
   literal the frame writes. There is no token whose scope could fail to reach the element and no
   declaration that could be silently invalidated. (For the record the token WAS in scope — the
   page root carries `tok-iter3` — which is precisely why it rendered 18 px rather than nothing.)

   CAN IT WIN. `grep -n 'style={{' ArticleView.tsx` returns 5; the only one on an image is the
   ternary at :216-219, and the CLASSED branch — the branch every `.cms-cardimg` takes — is
   `{ maxWidth:'100%', display:'block' }` with NO `borderRadius`. The inline `borderRadius:
   'var(--r-card)'` is on the UNCLASSED branch: body images inside article prose, which carry no
   `.cms-imw` overlay, are a different element and are DELIBERATELY left at 18 px as the control.
   No other rule in the 14 linked sheets sets a border-radius on `.cms-cardimg` (grepped, with
   `.cms-hero` as the positive control in the same corpus), so (0,1,0) is the winning declaration.

   S14 DENOMINATOR, derived live and stated with its qualifier rather than assumed:
     ONE authored declaration is the root cause — this one. It reaches SEVEN card families
     through ONE component (`CardPhoto`, ArticleView.tsx:397, 7 call sites).
     OCCURRENCES: 27 card photographs per width, 54 across 1440+1280, on 2 routes — /blog (10)
     and /guides (17). By family: cms-gcard 36, cms-scard 8, cms-mini 4, cms-feat 2, cms-gfeat 2,
     cms-big 2 = 54. All 54 read 18-over-8. 54 enumerated = 54 cured.
     ⚠ THE ROW'S "x 6 LOCALES" IS REFUTED, MEASURED: the localised twins (/mr/aamcha-blog,
     /hi/hamara-blog, /bn/amader-blog, /es/blog-liverec, /es/guias-profesionales) and /help-center
     with its four locale twins render ZERO card photographs today — their seeds carry no card
     images. That is a CONTENT parity gap owned by the parity rows, not by this one. The cure is
     on the single class, so any localised card seeded later is covered the day it appears; the
     denominator is content-dependent, the fix is not.
     NOT IN THIS DENOMINATOR, and it is a different (non-)defect: the SECTION photograph
     `.cms-secimg` (:1749) reads 18 px under an overlay `.cms-secwrap .cms-imw` already matched at
     `0 0 18px 18px` (:1750) — 96 of 96 readings, matched, no poke-out. It is left alone and
     reported. 54 card + 96 section = the 150 `.cms-imwrap` readings NRC-P1-377 counted.
   ============================================================================ */
/* ============================================================================
   P3-OP-48b — THE FRAME'S PER-FAMILY VALUES, MEASURED IN PIXELS BY THE BLIND VERIFIER
   sheet-surgeon, lane-s26, 2026-09-08. S13 BRANCH 1: a frame that shows it is built as shown.

   SOURCE OF THE RULING: `p10-gates/.state/team/lane-s26/verify/VERDICT.txt` (bv-s26), section
   "S13 — WHAT THE FRAME RENDERS. A REAL DISAGREEMENT, REPORTED, NOT CHOSEN", lines 214-238.
   It is a BLIND verifier — it never saw this lane's reasoning — and it did the one thing the
   block above did not: it rendered the approved frames and measured their corners IN PIXELS.
   THE FRAMES ARE NAMED AND ARE HIGH CONFIDENCE, so this is not a NO-FRAME surface
   (`p10-gates/audit/frames-to-routes.tsv:40,41`):
       Candidate/CMS Pages/Blogs Listing.html          -> /blog
       Candidate/CMS Pages/Career Guides Listing.html  -> /guides
   Both rendered at their NATIVE 1683 px (§13: frames are captured at native width).

   COMPUTED IN THE FRAME (bv-s26):
       Career Guides Listing   .cms-gcard img 8px (x12) · .cms-scard img 0px (x4) · .cms-gfeat 0px (x1)
       Blogs Listing           .cms-gcard img 8px (x6)  · .cms-mini 0px (x2) · .cms-feat 0px (x1)
                               · .cms-big 0px (x1)
   MEASURED IN PIXELS, one function on both sides, A = as rendered vs B = the same render with
   `border-radius:0` forced on that image; CORNER CUT = device pixels with maxChannelDelta >= 8
   of 255 at dpr 2, so r=0 gives 0 BY CONSTRUCTION and a larger r gives a larger cut:
       .cms-scard   FRAME 0px, cut   0.0 px on 4 of 4   ·  LIVE (uniform-8) 8px, cut 131.0 px mean
       .cms-gcard   FRAME 8px, cut 227.3 px mean, 12/12 ·  LIVE            8px, cut 261.3 px mean
   ⇒ THE FRAME DRAWS THE NON-gcard CARD PHOTOGRAPHS SQUARE. Uniform 8 px agreed with the frame on
   36 of 54 (gcard) and DEVIATED on 18 of 54 (scard 8 · mini 4 · feat 2 · gfeat 2 · big 2).

   THE CURE, AND IT MINTS NOTHING: the frame's own two values, re-pointed at the class this lane
   puts on the photograph. `.cms-gcard .cms-cardimg` IS the frame's `.cms-gcard img` — the same
   element, named by the lane's convention that every emitted marketing class carries its rule in
   a sibling sheet. The base 0 is written EXPLICITLY rather than left to the initial value, so the
   sheet states the measured frame value instead of resting on an absence.
   THE OVERLAY IS UNTOUCHED — `.cms-imw` keeps `0 0 8px 8px` in both sheets.

   WHY THE OPERATOR'S COMPLAINT STILL CLOSES AT 0 px, and it is geometry, not luck: the poke
   existed because the photo (18) was ROUNDER than the overlay (8), so the overlay's squarer
   corner fell outside the photo. At 0 the photo is SQUARER than the overlay, so the overlay's
   rounded corner falls strictly INSIDE the photograph and there is nothing to poke past. The
   AFTER read proves it rather than arguing it.

   ⚠ COVERAGE OF THE FRAME EVIDENCE, stated as partial (bv-s26's own limit, transcribed not
   re-derived): only `.cms-scard` and `.cms-gcard` were PIXEL-confirmed in the frame; gfeat, mini,
   feat and big were read as computed 0px and not individually pixel-measured there. This lane
   closes the `mini` half of that gap in its own AFTER read (see REPORT.md).
   ⚠ AND ONE THING THE VERIFIER FOUND THAT IS NOT THIS ROW: `Blogs Listing.html` contains ZERO
   `.cms-imw` overlays at all, so the fade on /blog cards is a lane addition the blog frame does
   not draw. Different root cause, REPORTED not folded in.
   ============================================================================ */
.cms-cardimg { border-radius: 0; }
.cms-gcard .cms-cardimg { border-radius: 8px; }

/* ============================================================================
   (a2) THE BLEED — CURED. P3-OP-22b, 2026-09-07, component-surgeon (lane-c17),
   the operator having lifted the S4 stop recorded in block (a) above.

   ⛔ BLOCK (a) DIAGNOSED ONE OF TWO BLOCKERS AND SPENT BOTH ITS STRIKES ON THE
   WRAPPER. Measured this session on the worktree build, 49 routes x 2 widths
   (1280/1440) = 98 cells, 0 unmeasured, 150 `.cms-imwrap` readings, 14 bleeding —
   which REPRODUCES block (a)'s census exactly (/blog 3 of 10 and /guides 4 of 18,
   at BOTH widths). Definitions, because a figure without one is not a figure:
   BLEED_BOTTOM = overlay rect bottom minus <img> rect bottom, in CSS px; a card is
   BLEED unless all four bleed components are <= 0.5 CSS px (sub-device-pixel at
   dpr 2); BLEED_AREA = overlay area minus its intersection with the image rect.

     BEFORE   .cms-feat   2/2 bleeding   BLEED_BOTTOM 40.22 px   16,690.78 px^2
              .cms-mini   4/4            28.00 px                 5,852.00 px^2
              .cms-scard  8/8            28.00 px                 4,148-4,536 px^2
              .cms-big 0/2 · .cms-gcard 0/36 · .cms-secwrap 0/96  (already clean)

   THE CHAIN HAS TWO LINKS AND BOTH HAD TO BE CUT. Read from the CSSOM on the
   rendered page (`img.matches(selectorText)` over every reachable rule, testing
   `.cssRules.length` and recording the rule BEFORE recursing — trap 11):

     link 1  ArticleView.tsx shipped an INLINE `height:'auto'` on every classed CMS
             photo. An inline declaration outranks every selector, so
             `.cms-cardimg{height:100%}` (:548) and `.cms-feat img` / `.cms-mini
             img` / `.cms-scard img` (design-system.css, PINNED) all lost. Cut in
             ArticleView.tsx — the reasoning is in the comment there.
     link 2  ⭐ AND CUTTING LINK 1 ALONE MOVED NOTHING — re-measured after that
             edit: still 14 of 150 bleeding, byte-identical magnitudes. The
             DOMINANT cause is a rule from ANOTHER SHEET reaching a subject it was
             never written for. `marketing-alignment.css:117`
             `.mkt-feat picture{display:block;margin-bottom:28px}` was authored for
             the ONE section photograph in a `.mkt-feat` band (its own comment says
             so: "4px -> 28px, the collision the operator reported"). Every CMS
             LISTING also renders inside a `SECTION.mkt-feat`, so that 28 px landed
             on every card photo's <picture> as well — and 28.00 px is exactly the
             measured BLEED_BOTTOM on `.cms-mini` (wrap 233.16 vs img 205.16) and
             on `.cms-scard` (wrap 122.00 vs img 94.00), to the hundredth.
             ⭐ AND THE REASON IT SHOWS ON SOME VARIANTS AND NOT OTHERS IS MARGIN
             COLLAPSE, which is why the census was 3-of-4 and not 4-of-4:
               `.cms-gcard` / `.cms-big` — the wrapper is a plain block in a block
                 container, so the picture's bottom margin COLLAPSES THROUGH the
                 wrapper (no padding, no border) and lands outside it. Wrapper
                 height == image height. CLEAN, and clean by accident.
               `.cms-feat` / `.cms-mini` / `.cms-scard` — the wrapper is a GRID
                 ITEM, which establishes a new formatting context, so the margin
                 CANNOT collapse out. It stays inside the wrapper, the wrapper is
                 28 px taller than the photo, and `.cms-imw` (absolute to the
                 wrapper's bottom:0) paints 28 px of brand blue below it.
             `.cms-feat` reads 40.22 px because it carries BOTH: 28.00 px of that
             margin plus 12.22 px of grid stretch (row 269.50 vs content 257.28).

     ⚠ AND THE FIRST SPELLING OF THE RULE BELOW LOST THE CASCADE — recorded because
             it measured as a clean no-op and would have been filed as "already
             correct". `.cms-imwrap > picture` is specificity (0,1,1), identical to
             `.mkt-feat picture`, and `marketing-alignment.css` is linked AFTER
             `marketing-cms.css` on every CMS route (order read from the served
             HTML), so the later sheet won and the picture stayed `display:block`.
             Measured: 14 of 150 still bleeding, and the computed `display` on the
             <picture> still read `block`. The `:not(.cms-secwrap)` is therefore
             load-bearing TWICE — it takes the selector to (0,2,1) so it wins, and
             it keeps the section photo OUT of scope so the 28 px gap that rule was
             authored to create is preserved there.

   ⇒ THE RULE BELOW IS THE ONE THE COMPONENT CHANGE NEEDS, and it is the whole of
   this lane's sheet edit: the <picture> generates no box, so the <img> becomes a
   direct child of `.cms-imwrap` and the frame's own `height:100%` resolves against
   the wrapper the overlay is anchored to. Nothing is re-designed and no value is
   minted (S13): every height, every `object-fit:cover` and every radius involved
   is a declaration the approved sheets already carry.

   §9b — no custom property is introduced, so there is no token scope to satisfy.
   S16 — nothing leaves measurement: the <img> keeps its box, its alt text and its
   place in the a11y tree; `display:contents` lands on `<picture>`, which has no
   role and no accessible name to lose. What DOES change visibly is that the
   frame's `object-fit:cover` now crops a photograph that used to letterbox; that
   crop is reported per variant in the AFTER, beside the bleed it removes.
   ============================================================================ */
.cms-imwrap:not(.cms-secwrap) > picture { display: contents; }

/* THE GAP THE CURE ABOVE TAKES AWAY, PUT BACK AT THE FRAME'S OWN VALUE — measured, and
   named in the same edit that creates it (S16). The 28 px that used to sit between a
   `.cms-gcard` photograph and its `.cms-cat` label was the SAME over-reaching
   `.mkt-feat picture{margin-bottom:28px}`, collapsing OUT of a block wrapper instead of
   staying inside a grid item. Removing the picture's box removes that gap too:
   red-first measurement, /blog and /guides at 1280 and 1440, photo-bottom to
   `.cms-cat`-top = 28.00 px with the rule withdrawn, 0.00 px with it applied.
   ⛔ The frame's own value for this gap is 14 px — `design-system.css:2541`
   `.cms-gcard img{...margin-bottom:14px}` — and it has NEVER APPLIED on a marketing
   route, because `design-system.css` is not linked there (sheet list read from the
   served HTML of /blog: marketing*.css only, 14 sheets, no design-system.css). So 14 px
   is TRANSCRIBED from the approved sheet, not chosen here (S13 — nothing is minted).
   It is applied to the WRAPPER rather than to the <img>, so it cannot re-enter the box
   `.cms-imw` is anchored to and re-create the bleed. `.cms-big` is deliberately not
   given one: its `.cms-big-tx{padding:26px 30px 30px}` already supplies the separation,
   measured. */
.cms-gcard > .cms-imwrap { margin-bottom: 14px; }

/* (b) THE SECTION PHOTO — centred, with the guide card's overlay. */
.cms-secwrap { display: block; width: max-content; max-width: 100%; margin: 8px auto 4px; }
.cms-secimg  { display: block; width: 100%; height: auto; }

/* ============================================================================
   ITEM CTA-ARROWS — the tiled hollow-arrow field reveals across the WHOLE blue
   pill on hover. component-surgeon, 2026-09-06, operator ruling 16:13 CT.

   HIS WORDS: "the little backdrop arrows are the ones that would be on that pill.
   It would not show until the hover animation is over it, and that needs to be for
   all the pills. Any pill that looks like the one I screenshotted previously is
   what I'm talking about."

   THE ELEMENT ALREADY HAD A SHEET AND NO MARKUP — the same shape as the E47 notch
   bug recorded in ArticleView.tsx: `marketing.css:428-435` has shipped `.arrow-spot`
   all along and nothing emitted it (measured: `hasArrowSpot` false on /pricing,
   /employers, /affiliates and /ar/albaqat-walasaar). The markup is added there; this
   block only changes what the pinned sheet cannot express.

   §9b — THE TOKEN IS OUT OF SCOPE, MEASURED, AND THIS IS WHY THE URL IS LITERAL.
   `.arrow-spot` paints `var(--wm-hi, url(/mocks/assets/arrow-wm.png))`. `--wm-hi` is
   defined on `.page.wm-lr|.wm-emp|.wm-aff` (marketing.css:599-601) and the CTA band's
   own `.page` carries NONE of them:
     /pricing · /employers · /ar/albaqat-walasaar  getPropertyValue('--wm-hi') = ''
                                                   -> UNREACHABLE, falls back to a PNG
     /affiliates                                   = wm-arrow-aff-hi.svg
   and the affiliate glyph is stroked #C9CACE for a #181818 surface, so on a blue band
   it reads grey, not white-outlined. A `var()` here would be wrong on every route and
   silently wrong on one. The literal URL is the §9b cure, exactly as `.locale-suggestion a`
   took the literal #2164F4.

   WHICH GLYPH — MEASURED, NOT PICKED. The band is rgb(26,82,196) = #1A52C4 on all four
   routes read. The three -hi variants are the SAME path at different strokes:
     wm-arrow-lr-hi  #CFE0FF   (for #2164F4)  -> reads WHITE-OUTLINED on the band  ✓
     wm-arrow-emp-hi #7FA3F7   (for #0E1746)  -> mid blue, dim on this fill
     wm-arrow-aff-hi #C9CACE   (for #181818)  -> grey
   `lr-hi` is the founder's real glyph for this surface. Nothing is redrawn (S13).

   OPACITY IS SET BY A CONTRAST FLOOR, NOT BY EYE. The field sits at z-index 1, the
   heading and button at 2, the notches at 4 — but the heading has no opaque backing,
   so a white glyph stroke can pass under white text. Worst case is text directly over
   a stroke: #CFE0FF composited on #1A52C4 at alpha a, against #FFFFFF text.
     a = .28  ->  3.87:1   BELOW the 4.5 floor
     a = .16  ->  5.19:1   PASSES
   .16 is the largest sixteenth that clears 4.5 with the worst-case pixel, so it is the
   floor that chose it. Verified against the rendered page, not only computed.

   S16 — this ADDS a state rather than hiding one; the resting state is unchanged and
   is measured beside the hover state (0 layout movement asserted in the AFTER).
   ============================================================================ */
/* ============================================================================
   EG-ARROW-SPOT — THE WHOLE-BAND REVEAL ABOVE IS WITHDRAWN BY THE OPERATOR.
   component-surgeon, 2026-09-07, ruling 05:3x CT, on a screenshot of a `.mkt-ctaband`:
   "arrow watermarks needs to be way smaller and only show up where the mouse is,
   currently its showing up or its exposed everywhere soon as the mouse is over the
   pill at all, and also the area where the mouse is hovering over needs to be more
   intense like the outline of the arrow needs to be more like a glowing white".
   The whole block above is kept verbatim (S9) so the reversal is auditable; only the
   declarations below it change. INTERIM DEVIATION · UNRATIFIED until he sees it.

   ⭐ NOTHING HERE IS INVENTED. Both numbers he asked for are the PINNED sheets' OWN:
     tile   `marketing.css:429` + `design-system.css:96`  ->  32px 32px   (the 90px was
            this lane's value, 2026-09-06; "way smaller" = the frame's own size, 2.81x)
     radius `marketing.css:430-431`                       ->  circle 96px at --mx --my
            (opaque core 32% = 30.7px, alpha 0 at 74% = 71.0px)
   So the cure DELETES this block's `mask:none` and lets the pinned spotlight govern
   again. S13: the frame is the answer; a 36-44px tile or a 120-160px radius would have
   been minted here, and neither is.

   WHAT WAS MEASURED, :4330, dpr 2, REAL CDP pointer, 3 routes x 3 viewports, predicate
   stated with every figure (LIT = maxChannelDelta >= 3/255 vs the pointer-parked-OFF
   capture of the same element):
     BEFORE  lit bounding box  97.2-98.3 % of the band at EVERY pointer position
             outline vs band fill at the pointer   rgb(55,105,205) on rgb(24,80,196)
                                                   = 1.362 : 1   ("dim", his word: faint)
     the tiling period recovered from the pixels (detrended autocorrelation of the clear
     strip above the text) = 180 device px = 90 CSS px, agreeing with the computed
     `background-size` — two structurally different methods, same number (§4).

   ⛔ CAN THE RULE WIN? — checked before it was written, and it is the whole reason
   `.hot` is re-declared here. `.page .mkt-ctaband .arrow-spot` is (0,3,0); the pinned
   `.arrow-spot.hot{opacity:1}` is (0,2,0). The `opacity:0` below therefore OUTRANKS the
   pinned reveal, and a driver alone would have measured ZERO change on the band and been
   filed "already correct" — a false PASS from a correct edit. Hence the (0,4,0) rule.

   ⛔ AND WHAT IS DELIBERATELY *NOT* DECLARED: `transition`. The pinned reduced-motion
   override is `@media(prefers-reduced-motion:reduce){.arrow-spot{transition:none}}` at
   (0,1,0). A `transition` on this (0,3,0) selector BEATS that media query on specificity
   — which is exactly why the withdrawn block needed its own reduced-motion line to patch
   itself back. Declaring nothing lets the pinned pair govern BOTH arms. Under reduced
   motion the spotlight still FOLLOWS THE POINTER: that is position, not animation.

   THE GLOW is the one declaration with no pinned counterpart, and it is scoped to the
   WATERMARK LAYER ONLY — `.arrow-spot` is `pointer-events:none` at z-index 1, below
   `.mkt-ctatext` and the pill, so no text is inside this filter's subtree and none of it
   can blur. It replaces the pinned `drop-shadow(0 0 .6px rgba(0,0,0,.45))`, a dark hairline
   sized for a pale surface, with the white bloom he asked for on a blue one.
   ============================================================================ */
.page .mkt-ctaband .arrow-spot {
  background: url(/mocks/assets/wm-arrow-lr-hi.svg) 0 0 / 32px 32px repeat;
  opacity: 0;
  filter: drop-shadow(0 0 6px rgba(255, 255, 255, .8));
}
/* (0,4,0) — see the cascade note above; without this the pinned reveal cannot fire here.
   `.hot` is set by ArrowSpot.tsx on pointermove and on focusin, and removed on
   pointerleave/focusout, so hover AND keyboard reach the same state. A CSS-only
   `:hover`/`:focus-within` arm is deliberately NOT kept: with no pointer position the mask
   sits at its `-300px` default and such a rule would reach the element, win the cascade,
   and render nothing. */
.page .mkt-ctaband .arrow-spot.hot { opacity: 1; }

/* ============================================================================
   EG-ARROW-SPOT/CARVE — the arrows keep FULL brightness and never pass behind words.
   component-surgeon, 2026-09-07, second commit. OPERATOR RULING relayed by the lead
   (G12 recommended default, reversible), on the finding the first commit reported rather
   than smoothed: white heading text sitting on a fully lit stroke measured 1.334 : 1,
   below the 4.5 floor, where the pre-cure dim field measured 5.167 : 1.
   HIS INSTRUCTION, and the discriminator matters: the contrast must read >= 4.5 : 1
   "because no lit stroke sits under text, NOT because the glow dimmed" — the 0.23 alpha
   cap was offered as an option and REFUSED. So the tile stays 32px, the spotlight stays
   `circle 96px`, and the outline stays 5.28 : 1.

   THE MECHANISM: the text block is SUBTRACTED from the mask, not painted over.
   ⚠ THE OBVIOUS CHEAPER FIX IS WRONG AND WAS REJECTED FOR A MEASURED REASON. An occluder
   filled with the band's own `#1A52C4` would be invisible on the two blue bands and would
   be plainly VISIBLE on the hero, whose ground is `.mkt-hero::after`'s radial fade and is
   `#181818` on /affiliates. A mask is colour-independent, so ONE mechanism serves all 140
   instances — which is the whole point of curing at the component (S8/S14).

   RED-FIRST FOR THE TECHNIQUE, run BEFORE this rule was written (S3, CARVE-REDFIRST.json).
   Support asked of the browser, not assumed:
     CSS.supports('mask-composite','subtract')            true
     CSS.supports('-webkit-mask-composite','source-out')  true   (Chrome's own spelling;
       it computes both properties to `source-out`, which IS `subtract` — read the computed
       value, not the keyword you typed)
   Then measured in PIXELS at the pointer position that overlapped text, /employers @1440 dpr 2:
     without the carve   lit px inside the text box 12,147   glyph-adjacent 2,086
     with    the carve   lit px inside the text box      0   glyph-adjacent     0
     and the spotlight is NOT damaged: bbox width 279 device px in both.

   THE FIRST LAYER IS TRANSCRIBED VERBATIM from the pinned `marketing.css:430-431`, never
   re-derived (§18 step 5 applied to CSS): same 96px circle, same 0%/32%/74% stops.
   THE SECOND LAYER is the carve box. `ArrowSpot.tsx` writes `--tx/--ty/--tw/--th` on the
   HOST from the rect of `.mkt-ctatext` (band) / `.mkt-hcopy` (hero), padded 12 CSS px, on
   mount, on pointerenter, on focusin and on ResizeObserver.
   §9b — the tokens are set on the HOST and consumed by `.arrow-spot`, its CHILD, so they
   are in scope; asserted in the browser (`getPropertyValue('--tw')` non-empty), not read
   off the JSX.
   FAIL-SAFE: with the driver absent the fallbacks are `--tw/--th: 0px`, and a zero-sized
   mask layer subtracts nothing — the spotlight is whole, never blanked.
   ============================================================================ */
/* ⛔⛔ THE ENTIRE CARVE ABOVE IS WITHDRAWN BY THE OPERATOR, 2026-09-07 07:10 CT, on two
   screenshots of the STAMPED build (a band pill; the /employers hero), verbatim: "the wording on
   the pill has some type of background. We don't want the background at all. Just have the words
   there so you can see the full extent of the animation. I don't want any type of cutoff ... Same
   thing for the banner". The block's comment is kept ABOVE, verbatim and unedited (S9), so the
   whole arc is auditable: he asked for the carve at 06:5x and struck it at 07:10 having SEEN it.
   ⇒ The declarations are gone. There is no `mask-composite`, no second mask layer and no
   rectangle anywhere on band or hero. The arrows pass BEHIND the words, and the lit region's only
   boundary is the pinned radial gradient.
   ⇒ THE CONTRAST CONSEQUENCE IS NOW HIS RULING, NOT A DEFECT TO CURE. White text crossing a fully
   lit stroke measures ~1.33:1 against the 4.5 floor. It is recorded as an S1 MAGNITUDE with its
   count and denominator (see LANE-C6-REPORT.md, row C6-1), and it is NOT re-capped, dimmed or
   worked around: "so you can see the full extent of the animation" is the requirement.
   ⚠ `ArrowSpot.tsx` still writes `--tx/--ty/--tw/--th` on the host. They are now CONSUMED BY
   NOTHING — inert, not harmful. Removing the writer needs a `next build` and the build slot is
   held; OWED row C6-6. Left in place deliberately rather than silently, so nobody reads the
   remaining writes as a live mechanism. */

/* ============================================================================
   EG-ARROW-SPOT/HERO — the banner takes the PILL's arrow, exactly.
   component-surgeon, 2026-09-07, same operator ruling: "the banner has a different arrow design.
   I want it the same as the pill."

   WHAT WAS ACTUALLY DIFFERENT — MEASURED ON ALL 68 HERO MOUNTS, TWO STRUCTURALLY DIFFERENT WAYS
   THAT AGREE, because the obvious guess ("the tiles are larger") is WRONG and would have been
   built as a fix to a defect that does not exist:
     method A  grep every served route's HTML for a `wm-(lr|emp|aff)` class   -> 67 NONE, 1 wm-aff
     method B  ask the BROWSER for the computed background-image on each      -> 67 arrow-wm.png,
               1 wm-arrow-aff-hi.svg;  `--wm-hi` IN SCOPE on 1 of 68 (§9b)
     TILE SIZE, both methods:  32px 32px on 68 of 68.  IT WAS NEVER LARGE.
   ⇒ The difference he can see is the GLYPH: `arrow-wm.png` is a FILLED arrow (29,460 of 65,536
   px opaque, #F8F8F8 at mean alpha 42.7/255), where the pill paints `wm-arrow-lr-hi.svg`, a
   HOLLOW outline (fill:none, stroke #CFE0FF, stroke-width 22 of a 1000 viewBox). Solid vs
   outlined, at the same size. On /affiliates it is a third glyph, stroked #C9CACE for a #181818
   ground, which on any other surface reads grey.

   §9b IS THE ROOT CAUSE OF THE FALLBACK AND THE REASON THE URL HERE IS LITERAL: `--wm-hi` is
   defined on `.page.wm-lr|.wm-emp|.wm-aff` (marketing.css:599-601) and 67 of 68 hero routes carry
   none of those classes, so `var(--wm-hi, ...)` takes its fallback and paints the PNG. A `var()`
   here would be wrong on 67 routes and silently wrong on the 68th — the same cure the band took,
   and the same one `.locale-suggestion a` took with the literal #2164F4.

   S14: 68 hero mounts on 68 of 120 routes. 68 of 68 change GLYPH · 0 of 68 change TILE SIZE
   (already 32px) · 68 of 68 gain the glow. Nothing is redrawn: the asset is the founder's own
   `wm-arrow-lr-hi.svg`, the identical file the band already paints (S13).
   NOT TOUCHED, and they are different elements with different root causes: `.mkt-hero::before`
   (the dim base field, `--wm-img`, `background-image: none` on 67 of 68 — row C6-2) and
   `.mkt-hero .mkt-ghost::before` (the ghost button's own 30px field, marketing-cms.css:796).
   ============================================================================ */
.page .mkt-hero .arrow-spot {
  background: url(/mocks/assets/wm-arrow-lr-hi.svg) 0 0 / 32px 32px repeat;
  filter: drop-shadow(0 0 6px rgba(255, 255, 255, .8));
}
/* (0,4,0) for the same cascade reason the band needed one: any (0,3,0) rule that set `opacity`
   would outrank the pinned `.arrow-spot.hot{opacity:1}` (0,2,0). This one deliberately does NOT
   set opacity in the base rule, so the pinned reveal governs; the `.hot` line is declared anyway
   so the two elements read identically in this sheet and neither can drift. */
.page .mkt-hero .arrow-spot.hot { opacity: 1; }

/* ============================================================================
   WALK-1 P-04 — "Compare plans" opens with MOTION instead of a +588 px snap.
   component-surgeon, 2026-09-06, from the operator's walk on :4300.

   MEASURED BEFORE (:4300 /pricing @1440, WALK1-CURES/BEFORE-4300.json):
     details height   61 -> 649 px      document 3401 -> 3989      delta +588 px
     44 rAF samples across the click · maxPerFrameStep 0 · distinctHeights 1
   i.e. the whole 588 px arrived between the click and the first sampled frame.

   A `<details>` CANNOT TRANSITION ITS OWN HEIGHT — `auto` is not an interpolable
   value and the UA hides the content, so a plain `transition: height` never runs.
   Two paths, and which one applies is decided by @supports, never assumed:
     MODERN   `::details-content` + `interpolate-size: allow-keywords`, with
              `content-visibility` carried on `allow-discrete` so the content is
              still hidden from the a11y tree at rest. Both probed TRUE here
              (`CSS.supports('selector(::details-content)')` and
              `CSS.supports('interpolate-size','allow-keywords')`, Chromium 151).
     FALLBACK the grid-row 0fr -> 1fr technique on `.pr-cmp-anim`, the wrapper
              ArticleView.tsx emits for exactly this purpose. It is
              `display:contents` unless this branch is taken, so on the modern
              path it adds no box and the DOM is unchanged in effect.

   320 ms is the brief's figure. The easing is the site's own: `.acc p` uses
   `transition:max-height .35s ease` (marketing.css:192) and `.arrow-spot` `.25s
   ease` (:428) — `ease` is the sheet's idiom, so nothing is minted (S13).
   Reduced motion: instant, both paths, with the end states intact.
   ⚠ NO FRAME shows an opening transition for this control; the frames draw it only
   open (`Choose Plan - Default`) or only closed (`... Default (2)`). This is
   INTERIM DEVIATION · UNRATIFIED on the operator's walk, like the closed glyph.
   S16 — nothing is removed from view: the closed state is byte-identical, and the
   open state is the same content arriving over 320 ms instead of one frame.
   ============================================================================ */
@supports selector(::details-content) {
  .page details.pr-cmp { interpolate-size: allow-keywords; }
  .page details.pr-cmp::details-content {
    block-size: 0;
    overflow: hidden;
    content-visibility: hidden;
    transition: block-size .32s ease, content-visibility .32s allow-discrete;
  }
  .page details.pr-cmp[open]::details-content { block-size: auto; content-visibility: visible; }
  .page details.pr-cmp .pr-cmp-anim { display: contents; }
}
@supports not selector(::details-content) {
  .page details.pr-cmp .pr-cmp-anim {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows .32s ease;
  }
  .page details.pr-cmp[open] .pr-cmp-anim { grid-template-rows: 1fr; }
  .page details.pr-cmp .pr-cmp-inner { overflow: hidden; min-height: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .page details.pr-cmp::details-content { transition: none; }
  .page details.pr-cmp .pr-cmp-anim { transition: none; }
}

/* ============================================================================
   WALK-1 P-01 / P-02 — the pricing prose gets the site's own measure and leading.
   component-surgeon, 2026-09-06.

   MEASURED BEFORE (:4300 /pricing @1440): five body paragraphs, every one
   `width 1056px · font-size 16px · line-height NORMAL · max-width none · no class`.
   The longest is 118 characters on ONE line. `line-height: normal` means no rule
   was reaching these elements at all — they had no class to be reached by.

   S13 — NO FRAME, and that was checked before anything was written. The plan frames
   (`SignInRegistrationChoosePlanDetailedFrame` and siblings) carry `maxWidth` only on
   the divider and the plan-status block (400px) and on `.plan-row`, the CARD row
   (1100px). None of them draws the intro/body prose at a measure. So this is cured on
   correctness, and the values are TAKEN FROM THE SIBLINGS rather than invented:

     the site's own measure idiom is `ch`, in the pinned sheet itself —
       marketing.css:362  .mkt-hcopy p { max-width: 44ch }   -> measured 46 CPL
       marketing.css:280  .p-trans p   { max-width: 42ch }   -> measured 41 CPL
     ~~so for this face ch ~= CPL 1:1,~~ ⛔ STRUCK 2026-09-17 — THIS INFERENCE IS THE
     DEFECT, and it is left here in full view because re-deriving it is how the next
     author avoids it. The two figures above are ACHIEVED line lengths (what the text
     actually occupied, including lines that did not fill the box); `ch` is CAPACITY.
     Achieved <= capacity ALWAYS, so comparing them makes ch look equal to CPL when it
     is 1.34x larger. Two correct numbers, silently different quantities.
     and the site's own WIDEST prose is `.intro` at
       494px / 17px / line-height 26.35 = 62 CPL   (measured on `/`)
     ~~⇒ 62ch, which is the site's widest, not a new preference.~~ ⇒ 46ch — see below.

     the leading is transcribed, not chosen —
       marketing.css:189  .intro { line-height: 1.55 }
       marketing.css:362  .mkt-hcopy p { line-height: 1.55 }
       marketing.css:280  .p-trans p   { line-height: 1.55 }
     1.55 is the declared value for body prose across the pinned sheet.

   §9b — TOKENS: `--measure` and `--lh` were probed on the element itself and BOTH
   return '' (UNREACHABLE) — no such token exists in scope, so a `var()` would have
   made the whole declaration invalid and left `normal` in place looking deliberate.
   The literals above are the §9b cure, each with the sibling it was transcribed from.
   ⚠ SCOPE: `.cms-prose` is emitted ONLY on the pricing layout (ArticleView.tsx), so
   the plan cards, the compare table and every other layout are untouched by design.
   ============================================================================ */
/* ── OWED-CMS-PROSE-62CH (§J), CURED 2026-09-17 · 62ch -> 46ch · NO FRAME ───────────────────────
   WHAT WAS MEASURED. `1ch` is the advance of the "0" glyph, NOT an average character, so the
   1:1 conversion struck above left this rule ~34 % wide:
     Inter      1ch 8.2012px · average char 6.1117px @13px  ->  ratio 1.342
     system-ui  1ch 8.1123px · average char 6.0160px @13px  ->  ratio 1.348   (the data-saver face)
   so 62ch = ~503-509px = ~83-84 CPL, and `.cms-prose` itself measures 84 on its longest line.
   TARGET, and it is the author's OWN stated intent above, not a new preference: 62 CPL, the
   measure of `.intro` (494px / 17px). 62 x 6.1117 = 378.9px / 8.2012 = 46.2ch (Inter);
   62 x 6.0160 = 373.0px / 8.1123 = 46.0ch (system-ui). Both land on 46ch, and 46ch yields
   61.7 CPL (Inter) / 62.0 CPL (system-ui) — so THE NUMBER SURVIVES THE FACE DIFFERENCE THIS SITE
   ACTUALLY HAS. That was the open question and it is answered by measurement, not assumed.
   ⭐ FACE, checked rather than trusted: neither `.intro` nor `.cms-prose` declares font-family
   (0 hits across public/design/*.css); both inherit `.page{font-family:var(--font-body)}`
   (marketing.css:74, `--font-body:'Inter',sans-serif` at :685). Corroborated by metric rather
   than by declaration: `.intro`'s average char is 494/62/17 = 0.4687em and `.cms-prose`'s is
   6.0160-6.1117px/13px = 0.4628-0.4701em — the same figure from two elements at two sizes,
   which is what a shared face looks like.
   UNIT KEPT DELIBERATELY (S13): `ch` is the idiom the pinned sheet already uses for this exact
   property (44ch, 42ch above); correcting a value is not a licence to change its declaration.
   ⚠ RESIDUAL, REPORTED NOT SOLVED — `ch` does not track the script. marketing-alignment.css:504
   measures 1ch = 9.148px at 14.5px for en/bn/hi/mr (the digit renders from Inter) but 7.916px
   for ar (SF Arabic), so `/ar/albaqat-walasaar` gets a ~13 % narrower box from the same 46ch and
   its CPL differs. The sibling 70ch rule carries this identical residual and reports it the same way.
   ⚠ TWO PORTED COPIES CARRIED THE SAME WRONG VALUE AND RIDE THIS BATCH WITH IT (lead ruling
   2026-09-17). The consent `<p>` in `ContactForm.tsx` and in `WaitlistForm.tsx` each hardcoded
   `maxWidth:'62ch'` with a comment transcribing THIS declaration by name — and those comments
   ALREADY stated the mechanism correctly ("62ch is ~503-509px and ~83 characters, NOT 62"), so
   they were faithful ports of a value known to be wrong. Both are now 46ch, struck in place. The
   2026-09-16 ruling accepted that line as-is, "re-measured when `.cms-prose` moves"; it moved, so
   the ruling fired on its own terms. Neither file is under `apps/web/src/frames/` (both are
   `components/marketing/`; control — the same search finds `frames/recruiter/
   PlanFeaturesDisclosure.tsx`), so no frame grant was spent.
   ⚠ CITED BY SYMBOL, NOT BY LINE, AND HERE IS WHY IT MATTERS: this note first said `:234` and
   `:232`, and MY OWN EDIT TO THOSE FILES MOVED THEM to :249 and :247 before the batch even
   landed. A line number in a file that is itself under edit is not a citation.
   DENOMINATOR — WIDER THAN THE ROW DESCRIBES, and that is stated rather than left to be met on the
   page: 1 declaration, CONSUMED BY 3 RULE SITES — this one plus
   `.pr-main > section:has(> .plan-row) > p.cms-prose` and the `:has(> .mkt-fgrid)` pair above,
   which set alignment only and inherit the measure (checked: neither declares max-width) ·
   the pricing layout only (ArticleView.tsx) + its 5 locale twins;
   `class="...cms-prose"` x5 in the served HTML on both `/pricing` and `/ar/albaqat-walasaar`
   (an SSR count is a FLOOR, not a count — the hydrated DOM is the figure, owed at the next slot).
   NO FRAME: the block above already establishes that no approved frame draws the intro/body prose
   at a measure, so this is correctness and overrides nothing. §9b: no var() introduced; the
   literals stand, each with the sibling it was transcribed from. */
.page .cms-prose { max-width: 46ch; line-height: 1.55; }

/* ============================================================================
   LANE S5 · sheet-surgeon · 2026-09-06 · WALK-2 row F-06 · walk-1 root RC-P3
   THE FAQ OPENS OVER 320 ms INSTEAD OF ARRIVING IN ONE FRAME.
   ============================================================================
   PORTED, NOT RE-DERIVED (§18 step 5). Commit 6f2bb1d3 cured exactly this root cause on
   `details.pr-cmp` (/pricing, row P-04) with the block at :131-154 above. F-06 is the SAME
   root cause on `details.mkt-faqitem`, so the MECHANISM, the EASING and the DURATION are
   taken from it verbatim; nothing here is chosen afresh.

   MEASURED BEFORE, on :4320 /affiliates @1440, hydrated, THREE full click cycles at NATIVE
   speed (never a slowed capture — a figure taken at a slowed capture is not evidence about a
   native-speed rule), rAF-sampled with the CLOSED height collected first so the snap has a
   before-value inside the same series:
     cycle 1  61 samples  DISTINCT HEIGHTS 2   60 -> 94.39 px   maxPerFrameStep 34.39
     cycle 2  62 samples  DISTINCT HEIGHTS 2   60 -> 94.39 px   maxPerFrameStep 34.39
     cycle 3  61 samples  DISTINCT HEIGHTS 2   60 -> 94.39 px   maxPerFrameStep 34.39
     frames in motion: 0 of 61.  Identical under `prefers-reduced-motion: reduce`.
   The whole 34.39 px arrives between the click and the next frame. This reproduces the walk's
   own "2 distinct heights (60 px, 94 px) across 55-56 samples" exactly.
   ⚠ MY FIRST BEFORE READ "1 distinct height" AND WAS WRONG — the probe started sampling AFTER
   the click, so it only ever saw the settled value. Recorded (S9) because "1 distinct height"
   would have read as an even worse defect and was an artefact of my own probe's ordering.

   WHY A PLAIN `transition: height` CANNOT WORK HERE (6f2bb1d3's finding, re-confirmed): a
   `<details>` cannot transition its own height — `auto` is not interpolable and the UA hides
   the content, so the declaration never runs. Both capabilities probed TRUE on this Chromium
   rather than assumed: `CSS.supports('selector(::details-content)')` and
   `CSS.supports('interpolate-size','allow-keywords')`.

   ⛔ ONLY THE MODERN ARM IS PORTED, AND I SAY WHY RATHER THAN INVENTING A SECOND MECHANISM.
   6f2bb1d3 carries a FALLBACK arm (`grid-template-rows: 0fr -> 1fr`) for browsers without
   `::details-content`. That arm needs a wrapper element — `.pr-cmp-anim` — which ArticleView.tsx
   emits for `details.pr-cmp` and for nothing else. `details.mkt-faqitem` has no such wrapper
   (its content is the bare `.mkt-a`), so the fallback CANNOT be ported without a TSX change.
   ⇒ On a browser without `::details-content` this FAQ keeps today's one-frame open. That is
   UNCHANGED behaviour, not a regression, and it is the component lane's row if it matters —
   named here rather than papered over. The engine in this repo (Chromium 151) takes the modern
   arm, proven by the probe above, not by reading a support table.

   ⚠ THE ONE HONEST DIFFERENCE FROM ITS PARENT, stated so nobody has to re-derive it: P-04
   animates 588 px in 320 ms; this animates 34.39 px in the same 320 ms. The duration is
   ported rather than rescaled because rescaling would be re-deriving a value the sibling cure
   already settled, and because 320 ms sits inside this codebase's own disclosure range — the
   PINNED `marketing.css:192 .acc p{transition:max-height .35s ease}`. If 320 ms reads slow for
   a 34 px move that is a one-token judgement for the operator, not a defect.
   `ease` is the sheet's idiom (marketing.css:192 `.35s ease`, :428 `.arrow-spot .25s ease`).
   Reduced motion: instant, with the end states intact — the arm is proven by the same probe.
   S16 — nothing is removed from any detector's view: the closed state is unchanged and the open
   state is the same content arriving over 320 ms instead of in one frame.
   §9b: no var() introduced. NO FRAME draws an opening transition (the corpus is static exports;
   the approved Affiliate frame draws the FAQ with item 1 open and the rest closed).
   INTERIM DEVIATION · UNRATIFIED — same standing as its parent at :127.
   S14 DENOMINATOR, over all 120 sitemap routes, re-derived this session: 80
   `<details class="mkt-faqitem"` on 13 routes — which independently reproduces this file's own
   figure at :736. Row F-06. */
@supports selector(::details-content) {
  .page details.mkt-faqitem { interpolate-size: allow-keywords; }
  .page details.mkt-faqitem::details-content {
    block-size: 0;
    overflow: hidden;
    content-visibility: hidden;
    transition: block-size .32s ease, content-visibility .32s allow-discrete;
  }
  .page details.mkt-faqitem[open]::details-content { block-size: auto; content-visibility: visible; }
}
@media (prefers-reduced-motion: reduce) {
  .page details.mkt-faqitem::details-content { transition: none; }
}

/* ============================================================================
   P3-OP-6 (I) — THE SECTION PHOTOGRAPH SPANS ITS SECTION, AT THE CARDS' RADIUS.
   sheet-surgeon, lane S9, 2026-09-07. OPERATOR RULING #9 (2026-09-07 07:39 CT,
   NRC-P1-234), his words: "the main image where it says 'Hiring, start to finish
   in one place' needs to be bigger. The corners have to have a radius similar to
   the other radii, like the cards and the cutouts."

   S13 — NO FRAME. The approved frame for this route
   (Employer/Home and Pricing/Become an Employer.html) carries NO section
   photograph at all, so nothing here overrides a frame and nothing is invented:
   the walk and correctness govern. INTERIM DEVIATION - UNRATIFIED.

   MEASURED BEFORE — :4360, dpr 2, networkidle, pointer parked, 100 cells
   (10 demo routes x 1280/1440/1920 + 70 further S14 routes at 1440):
     60 of 60 `.cms-secimg` reads   border-radius 0px
     /employers interview.png       rendered 435 px inside a 1004 px content box
     wrapper `.cms-secwrap`         computed width 435px (`width:max-content`)
     rendered widths seen           330 / 435 / 437 / 438 / 897 / 901 / 1004
     overlay `.cms-imw` subset of the image box   60 of 60 (no bleed today)
   AFTER is recorded in this row's MEASUREMENTS.md with the per-photo upscale table.

   THE RADIUS IS THE CARDS' OWN TOKEN, NOT A MINTED VALUE (S13): `--r-card`, the
   same token `.mkt-fcard` (marketing.css:380 PINNED) and `.cms-cardimg` (:1115)
   use, and the cutout bands use `calc(var(--r-card) + 6px)`.
   §9b PROVEN IN THE BROWSER, not inferred: on `.cms-secimg`
   `getComputedStyle(img).getPropertyValue('--r-card')` = `18px` on 60 of 60
   reads (defined on `.tok-iter3`, design-system.css:91, which the page carries).
   Non-empty, so the declaration cannot be silently invalidated.

   CAN IT WIN — the image carries an inline `style` from ArticleView.tsx, measured
   this session as `max-width:100%;height:auto;display:block`. It sets NEITHER
   `width` NOR `border-radius`, so these two sheet declarations win the cascade.
   If that inline style ever gains either property the row becomes the component
   lane's, because an inline declaration outranks every sheet selector.

   THE VALUE IS WRITTEN EXPLICITLY, NEVER BY DELETION: `marketing-critical.css` is
   GENERATED and inlined ahead of these sheets, so a rule that relies on the
   ABSENCE of the old `width:max-content` would render differently before the
   external sheet lands (the EG24-5 lesson).

   THE OVERLAY: `.cms-imw` is absolute to the wrapper and carries `0 0 8px 8px`
   (:510). With the photo now at the cards' 18px the two corners would disagree by
   10px — the exact mismatch recorded on /guides at :1060. The overlay's bottom
   corners are matched to the photo HERE ONLY (scoped to `.cms-secwrap`); the
   /guides card bleed at :1090 is a different, still-open S4-stopped row and is
   deliberately not touched.

   ASSET LIMIT, OWED (S10, row S9-1 in NOTES.md): every /employers-family section
   photo is a 435-438px source and the section content box is 1004px, so spanning
   is a 2.29-2.31x upscale at dpr 1 and twice that at dpr 2. The operator asked
   for bigger NOW; the softness is an ASSET commission, not a code change. The
   per-photo upscale factor is recorded per route in MEASUREMENTS.md and travels
   with the row. Capping the size instead is one declaration.
   ============================================================================ */
.cms-secwrap { width: 100%; }
.cms-secimg  { border-radius: var(--r-card); }
.cms-secwrap .cms-imw { border-radius: 0 0 var(--r-card) var(--r-card); }

/* ============================================================================
   P3-OP-6 (II) — SECTION HEADERS AND THEIR BODIES, OUTSIDE CARDS, ARE CENTRED.
   sheet-surgeon, lane S9, 2026-09-07. OPERATOR RULING #9 (2026-09-07 07:39 CT,
   NRC-P1-234), his words: "'Hiring, start to finish, in one place' needs to be
   centered because that's the only thing that's not centered on this page. I want
   all the text headers and bodies outside of the cards [centered] ... Within the
   card, it stays as is. Anything that's in a pill or a card stays as is." And
   clause (3): "I want this for any places applicable, so anything similar to it
   has to be checked for that."

   S13 — THIS OVERRIDES AN APPROVED FRAME. `Employer/Home and Pricing/Become an
   Employer.html` LEFT-aligns `.mkt-feat h2`, `.mkt-faq h2` and `.mkt-steps h2`;
   only `.mkt-stats h2` and `.p-wall` are centred there. The eye-gate walk is FULL
   AUTHORITY where it speaks (docs/EXECUTION-PLAN-2026-09-02.md section R,
   NRC-P1-80), so this ships as an INTERIM DEVIATION - UNRATIFIED and reverses in
   one commit.

   S14 DENOMINATOR, derived this session, two ways, and the qualifier travels with
   it: a census of the SERVED HTML is a FLOOR (and the RSC flight payload also
   duplicates occurrences, so route PRESENCE is the reliable half), corroborated
   by a hydrated-DOM count over 100 cells. 120 sitemap routes read from :4300
   (KNOWN_HOSTS), both counts 120.
     served HTML, exact class=       .mkt-feat 64 routes - .mkt-fsub 48 -
                                     .mkt-faq 13 - .mkt-stats 1 - .cms-secimg 48
                                     - .mkt-steps 0 - .mkt-testi 0
                                     positive control class="navlink" 948 hits
     hydrated DOM, 100 cells         76 of 100 cells carry at least one subject;
                                     12 NONE-FOUND cells emitted as rows, not
                                     dropped (trap 16)
   `.mkt-steps` and `.mkt-testi` RENDER ON NO ROUTE, so their rules are inert
   today; they are still written because ArticleView can emit them and because
   both sections already carry `text-align:center` on the SECTION
   (marketing.css:401/406) - they were never the defect.

   MEASURED BEFORE, and it corrects the brief on one point (stated, not smoothed):
     `.mkt-feat > h2`      computed text-align `start`, inked text box offset
                           -(W-w)/2 from the section centre - the block box is
                           full width, so a BLOCK-centre test reads 0.00 and
                           proves nothing. The subject is the INKED text box
                           (a Range over the contents), and that is what is
                           asserted here.
     `.mkt-feat > .mkt-fsub`  block offset -170.8..+239.5 px (the 70ch cap sits
                           hard against the leading edge; RTL flips the sign)
     `.mkt-feat > p`       383 reads, all left of centre
     `.mkt-faq > h2`       text-align `start`
     `.mkt-stats > h2`     text-align `left` EXPLICITLY (marketing.css:373) - the
                           brief called it "already centered (control)"; its BLOCK
                           is centred by `margin:0 auto` but its TEXT is not.
                           REFUTED by measurement, so under clause (3) it is in
                           scope. `.mkt-stats .mkt-ssub` (:390) is the same shape:
                           `text-align:left` with `margin:-18px auto 30px 0`.

   WHAT IS DELIBERATELY NOT TOUCHED (the "stays as is" half, asserted by
   measurement rather than by omission - every one of these rects is compared
   BEFORE vs AFTER in this row's evidence): `.mkt-fcard h3/p`, `.mkt-chip`,
   `.mkt-faqitem .mkt-q`, `.plan` contents, and `.mkt-ctaband h2` +
   `.mkt-ctasub` - the CTA band is a BAND, and his words exempt it.
   The child combinator is load-bearing: `>` keeps every rule out of the cards,
   which are descendants of the same sections.

   The bodies also need their BLOCK centred, not only their text: the 70ch/66ch/
   48ch caps are narrower than the section, so `text-align` alone would centre the
   text inside a block still pinned to the leading edge. Only the inline margins
   are set (longhands, never the shorthand) so the negative top margins tuned in
   marketing.css:390-392 and marketing-responsive.css:257-260 survive untouched.
   RTL: `text-align:center` is direction-neutral and
   `grep -c text-align marketing-rtl.css` = 0, so nothing re-asserts start/right
   on these selectors; verified on /ar/lilsharikat and /ar/masuulu-altawzif.
   ============================================================================ */
.mkt-feat > h2,
.mkt-faq > h2,
.mkt-stats > h2,
.mkt-steps > h2,
.mkt-testi > h2        { text-align: center; }
.mkt-feat > .mkt-fsub,
.mkt-feat > p,
.mkt-stats > .mkt-ssub,
.mkt-steps > .mkt-stepssub,
.mkt-testi > .mkt-tsub { text-align: center; margin-left: auto; margin-right: auto; }

/* P3-OP-6 (II-b) — TWO SELECTORS THAT THE RULE ABOVE REACHED AND LOST TO, FOUND
   BY MEASURING RATHER THAN BY READING (the AFTER-1 read, 100 cells). Same ruling,
   same S13 status: INTERIM DEVIATION - UNRATIFIED.
     `.page.fin .mkt-stats h2` (marketing.css:568 PINNED) is (0,3,1) and re-asserts
     `text-align:left`; the (0,1,1) rule above could not beat it, measured
     `text-align: left` with the inked text box 185.31px left of the section centre
     on /affiliates at 1280/1440/1920 (3 of 3 reads). Matched at (0,3,1) here.
     `.mkt-feat p` (design-system.css:1318 PINNED) sets `margin:0` at the same
     specificity as the rule above and is served after it on /recruiters, so the
     auto inline margins lost while `text-align:center` won - measured
     margin-left/right 0px with a 560px block 222.01px left of centre, 3 of 3
     reads. The `.page` prefix lifts the body rule to (0,2,1), which wins on
     specificity and no longer depends on sheet order. */
.page.fin .mkt-stats > h2 { text-align: center; }
.page .mkt-feat > .mkt-fsub,
.page .mkt-feat > p,
.page .mkt-stats > .mkt-ssub { text-align: center; margin-left: auto; margin-right: auto; }

/* ============================================================================
   P3-OP-15 · NRC-P1-269 + NRC-P1-279 — THE SOLID ACCENT ARROW SNAPS TO THE TILE GRID
   sheet-surgeon, lane-s13, 2026-09-07. Operator ruling #15, restated with priority at 12:5x:
   "the blue arrow doesn't fill in right with the rest, and this is going to be the most
   important when we have the faint arrows static."

   MEASURED BEFORE, on :4390 (this worktree's own build), dpr 2, networkidle, pointer parked at
   (4,4) and `hero.matches(':hover')` FALSE on 18 of 18 cells before the read (trap 13),
   6 routes (/employers /recruiters /affiliates + the three ar twins) x 1280/1440/1920:
     the accent `.mkt-hcopy::before` is 44x44 px and its box origin sits 161.0 px right and
     62.0 px below the field's own positioning origin, IDENTICALLY at all three widths - the
     hero is a fixed 1066 px wide (measured) and centred, so every offset inside it is width-invariant.
     161 mod 32 = 1  and  62 mod 32 = 30, so the accent straddles cells in BOTH axes.
     RTL twins: offset 861.0 / 62.0, 861 mod 32 = 29.  snapped = false on 18 of 18.
     LIT PIXELS with the pointer parked on the accent box's right-edge midpoint (both the accent
     cell and its right neighbour inside the mask's fully-opaque core, radius 96 x 0.32 = 30.7
     CSS px): HARD-STROKE px INSIDE the accent's own box = 160-170 of 7,744 device px on 18 of
     18 cells, against 357-363 in the control cell beside it. That count IS the complaint: lit
     outline crossing the solid arrow. DEFINITION, because a figure without one is not a figure:
     a HARD-STROKE px is within Euclidean RGB distance 30 of the 99.5th-percentile-luminance
     mean colour of the CONTROL cell in the same capture.

   TWO THINGS ARE WRONG AND ONLY ONE OF THEM IS POSITION. The glyphs are different drawings at
   different inner scales, so putting the accent's BOX on a cell would still leave a ring of
   outline around a smaller solid arrow:
     tile glyph  wm-arrow-lr-hi.svg  path 45..960 of a 1000 viewBox, stroke-width 22, so its
                 painted silhouette spans 34..971 = 3.4 % .. 97.1 % of the cell
     accent glyph hero-arrow.png     56x56, opaque bbox 6..51 = 10.7 % .. 91.1 % of its box
   ⇒ THE GLYPH IS TAKEN FROM THE NEIGHBOUR, NOT INVENTED (S13). `hero-arrow-tile.svg` is the
   founder's OWN path from `wm-arrow-lr-hi.svg` - the `d` attribute is byte-identical (asserted:
   80 bytes equal), same viewBox, same stroke-width 22, same round join and cap - FILLED and
   STROKED in the accent's own measured colour #2164F4 (the mean of hero-arrow.png's 2,025
   opaque pixels is rgb(33.03, 100.00, 244.03), and #2164F4 is `--brand`). Nothing is redrawn
   and no colour is minted; the silhouette is now the tile glyph's OUTER boundary exactly, so a
   lit outline lands inside it by construction at every width and every dpr.

   THE FIELD MOVES, NOT THE CONTENT. Shifting a REPEATING background by (1 px, 30 px) is a phase
   change on a periodic field: nothing a person can see moves and no content rect changes.
   Shifting the ACCENT down by 30 px would move the headline. The 44 -> 32 resize loses 12 px of
   flow, so `margin-bottom` goes 18 -> 30 to hold the headline exactly where it was.
   RTL: the accent is at the copy column's RIGHT edge, so after the resize its offset is
   861 + 12 = 873 and 873 mod 32 = 9.

   §9b: no `var()` is written here. Every value is a literal, for the reason lane-c6 recorded on
   the rule 300 lines above - `--wm-img` and `--wm-hi` are defined on `.page.wm-lr|.wm-emp|.wm-aff`
   and 67 of 68 hero routes carry none of those classes, so a token here would be silently
   invalid on 67 routes.
   CAN IT WIN: `grep -n 'style={{' ArticleView.tsx` over the hero block returns 0 - the accent is
   a pseudo-element with no markup at all, so no inline declaration can outrank this.
   SPECIFICITY: the pinned `.page.fin.mkt .mkt-hcopy::before` is (0,4,1) and
   `.page.fin.mkt .mkt-hero .mkt-hcopy::before` is (0,5,1); the pinned
   `.page.fin.mkt .mkt-hero::before` is (0,4,1) and `.page.fin.mkt section.mkt-hero::before` is
   (0,4,2). Neither rests on sheet order.
   S14: >= 68 `.mkt-hero` routes of 120 (a served-HTML count is a FLOOR, not a count), one accent
   and one field each; corroborated in the hydrated DOM on 6 of 6 demo routes x 3 widths.
   FRAME (S13): `Become an Employer.html` draws its hero with NO notch, NO radius and a STATIC
   watermark field, and its accent is not aligned to that field. This rule follows the operator's
   ruling over the frame:  INTERIM DEVIATION - UNRATIFIED
   ============================================================================ */
.page.fin.mkt .mkt-hero .mkt-hcopy::before {
  width: 32px;
  height: 32px;
  margin-bottom: 30px;
  background: url(/mocks/assets/hero-arrow-tile.svg) 0 0 / 32px 32px no-repeat;
}
/* the base field and the lit field take ONE phase, so the accent coincides with a cell of both. */
.page.fin.mkt section.mkt-hero::before,
.page .mkt-hero .arrow-spot { background-position: 1px 30px; }
/* P3-OP-35 (lane-s17, 2026-09-07): SUPERSEDED IN PLACE, kept so the change is auditable.
   The RTL phase was `9px 30px` measured from the LEFT edge. Under the `scaleX(-1)` that
   marketing-rtl.css now applies to both RTL arrow carriers, a left-anchored phase becomes
   WIDTH-DEPENDENT — mirroring maps a tile at x to (W - x - 32), so the grid lands at
   (W - 9) mod 32 and moves with W. Anchoring from the RIGHT edge instead is mirror-invariant:
   tiles sit at W-9-32k, which mirrors to 9+32k for ANY W, so the accent stays on a cell at every
   viewport. MEASURED: the hero is a fixed 1066 px at 1280 and 1440 (so the old value happened to
   work today), and the accent glyph's phase against the field is 0 of 32 in LTR and 0 of 32 in
   RTL after this change — re-read in the browser, not inferred.
[dir="rtl"] .page.fin.mkt section.mkt-hero::before,
[dir="rtl"] .page .mkt-hero .arrow-spot { background-position: 9px 30px; }   <- superseded */
[dir="rtl"] .page.fin.mkt section.mkt-hero::before,
[dir="rtl"] .page .mkt-hero .arrow-spot { background-position: right 9px top 30px; }

/* ============================================================================
   P2-13 · operator-2026-09-25-ARROW-ALIGN — THE ACCENT SITS ON A PATTERN TILE AT EVERY WIDTH
   sheet-surgeon (autorun builder), 2026-09-25. Operator 16:02 on the /employers hero: "the
   highlighted arrow, is misalligned with the one behind it"; 16:05 on a blue band: "it must be
   lined up perfect, so check all the banners that have that design".

   WHY THE TWO LITERAL PHASES ABOVE COULD NOT HOLD. `1px 30px` / `right 9px top 30px` (and
   `16px` on --thin, 70 lines below this block's P2-06 neighbour) phase the field from the HERO's
   edge, but the accent is a block at the COPY column's inline-start, and that column is centred
   in a max-width wrap (840 lvl2 / 968 --thin / 1100 --frame) whose padding is 48 or 20. So the
   accent's offset from the hero edge is  max(0, (hero - wrap)/2) + pad  — a function of width.
   The literals were right only where the hero is 1066 wide. MEASURED BEFORE (grader, :4300,
   CDP box of the pseudo vs the computed grid): OFF on 62 of 90 cells — dx -5 at 1920, -13 LTR
   and +3..+11 RTL at 768/390/360, /employers -7..+9 at every desktop width; dy 0 everywhere.

   THE CURE ANCHORS THE GRID TO THE ACCENT, BY CONSTRUCTION, WITH NO NUMBER PER WIDTH. The
   accent pseudo is named as an anchor; the field's BOX starts exactly 64 tiles before the
   accent's inline-start edge and 32 tiles above its top, and paints from `0 0`. A tile edge
   therefore sits on the accent's edge whatever the wrap, the padding or the viewport do. The
   box overhangs the hero; the hero is `overflow:hidden` (marketing.css:583), so nothing a
   visitor can see moves except the phase, and the page gains no scroll width.
   2048 / 1024 are whole tiles (64 x 32, 32 x 32) and only need to exceed the accent's distance
   from the hero's inline-start / top edge (<= 572 px and <= 150 px measured at 1920).
   RTL: the field is mirrored by `scaleX(-1)` about its own box (marketing-rtl.css:390), so the
   box is anchored from the accent's RIGHT edge instead; the mirror maps its first tile onto the
   accent's box exactly.
   THE LIT LAYER keeps its box (inset 0), because `--mx/--my` and the carve are host px and the
   RTL mask is compensated against that box (marketing-rtl.css:478). It takes the field's phase
   instead: ArrowSpot.tsx copies the field's RESOLVED `left|right` / `top` into
   `--hero-phase-x/-y` on the host (§9b: consumed by `.arrow-spot`, its child). It is invisible
   until the pointer arrives, which is after hydration, so it never shows an unphased frame.

   SCOPE (S14): every `section.mkt-hero` that carries the copy column, i.e. every hero that
   paints the accent — measured 10 of 14 lead routes (+ 5 ar twins) and the >= 68 CMS heroes that
   share ArticleView.tsx's markup (a served-HTML count, a FLOOR). EXCLUDED: `.portal-recruiter`
   (/recruiter, /recruiters — P4's page, told separately; it runs its own frame hook).
   FALLBACK: the whole block sits in `@supports (anchor-name: ...)`; a browser without anchor
   positioning keeps the literal phases above, exactly as today.
   SPECIFICITY: (0,7,2) for the field and (0,8,1) for the lit layer, above the --thin rules'
   (0,6,2)/(0,6,0) — nothing here rests on sheet order.
   FRAME (S13): `Become an Employer.html` draws a STATIC field that is not aligned to its accent;
   this follows the operator's ruling over it:  INTERIM DEVIATION - UNRATIFIED
   ============================================================================ */
@supports (anchor-name: --a) {
  .page.fin.mkt:not(.portal-recruiter) section.mkt-hero:has(> .mkt-hwrap .mkt-hcopy) {
    anchor-scope: --hero-accent;
  }
  .page.fin.mkt:not(.portal-recruiter) section.mkt-hero:has(> .mkt-hwrap .mkt-hcopy) .mkt-hcopy::before {
    anchor-name: --hero-accent;
  }
  .page.fin.mkt:not(.portal-recruiter) section.mkt-hero:has(> .mkt-hwrap .mkt-hcopy)::before {
    top: calc(anchor(--hero-accent top, 1024px) - 1024px);
    right: 0;
    bottom: 0;
    left: calc(anchor(--hero-accent left, 2048px) - 2048px);
    background-position: 0 0;
  }
  [dir="rtl"] .page.fin.mkt:not(.portal-recruiter) section.mkt-hero:has(> .mkt-hwrap .mkt-hcopy)::before {
    right: calc(anchor(--hero-accent right, 2048px) - 2048px);
    left: 0;
  }
  .page.fin.mkt:not(.portal-recruiter) section.mkt-hero:has(> .mkt-hwrap .mkt-hcopy) > .arrow-spot {
    background-position: var(--hero-phase-x, 0px) var(--hero-phase-y, 0px);
  }
}

/* ============================================================================
   P3-OP-18 · NRC-P1-278 — THE LANDER HERO ARROW FIELD IS FAINTLY VISIBLE AT REST
   sheet-surgeon, lane-s13, 2026-09-07. Operator ruling #19, 10:11 screenshot of the /recruiters
   hero: "I want the arrow background to stay there but faintly, and then the cursor animation
   stays exactly the same and makes it glow the same as now - so the faint background glows
   brighter with the hover animation we currently have. Make this happen on all places applicable
   - not the pills - just the main banners we've been working on, minus the home page."

   THE ROOT CAUSE IS §9b, MEASURED, NOT GUESSED. The pinned base field
   `.page.fin.mkt .mkt-hero::before` (marketing.css:593) declares
   `background-image: var(--wm-img)`, and `--wm-img` is defined only on
   `.page.wm-lr | .wm-emp | .wm-aff`. Asked of the BROWSER on :4390, dpr 2, networkidle, on 6
   routes x 3 widths: computed `background-image` is `none` on 15 of 18 cells (/employers,
   /recruiters and the three ar twins) and a real url on 3 (/affiliates, which carries `.wm-aff`,
   at `--wm-op` .55). An out-of-scope `var()` invalidates the whole declaration silently - so
   "the arrows only appear under the cursor" was never a design, it was a dead declaration.

   THE CURE PAINTS THE PILL'S OWN GLYPH, at the phase commit 2e812cee just anchored, so the base
   and the lit field are THE SAME IMAGE AT THE SAME PHASE. That is what makes "the spotlight is
   unchanged" a CONSEQUENCE rather than a hope: inside the mask's fully-opaque core the lit
   stroke at alpha 1 sits exactly over the faint stroke it replaces, and the gaps between strokes
   are transparent in both layers. Literal url for the reason above; a token would be invalid on
   67 of 68 routes.

   THE RESTING ALPHA IS PROPOSED, NOT DERIVED FROM A FRAME - 0.18 - and the two S1 magnitudes it
   produces are RECORDED under the operator's ruling, not treated as defects (same treatment as
   ruling #8's crossing contrast):
     resting stroke vs the hero fill  #1A52C4 -> composited rgb(59,108,207)   1.39:1
     resting stroke vs the WHITE headline over it                             4.96:1
   0.34 (the sheet's own `--wm-op` fallback) was computed and REJECTED: it puts white headline
   text at 3.75:1, below the 4.5 floor. 0.18 is the value that keeps the headline above it while
   the field is clearly present. On /affiliates' #181818 ground the same alpha reads 1.61:1
   against the fill and 11.06:1 under white text.
   S14: >= 68 `.mkt-hero` routes of 120 (a served-HTML count is a FLOOR). NOT the home `.p-hero`
   roots and NOT the `.mkt-ctaband` pills - both are different selectors and neither is touched;
   the pills' rest state is asserted unchanged.
   FRAME (S13): the approved frames draw this watermark as a STATIC faint field, so this is
   CLOSER to the frame than the invisible-at-rest state it replaces; the frame's own resting
   opacity is not measurable from the HTML (it carries no arrow field on `.mkt-hero` at all).
   INTERIM DEVIATION - UNRATIFIED
   ============================================================================ */
.page.fin.mkt section.mkt-hero::before {
  background-image: url(/mocks/assets/wm-arrow-lr-hi.svg);
  background-size: 32px 32px;
  background-repeat: repeat;
  opacity: .18;
}

/* ============================================================================
   P3-OP-13 · NRC-P1-258 — THE HERO'S TWO UNCUT CORNERS ARE MORE ROUNDED
   sheet-surgeon, lane-s13, 2026-09-07. Operator ruling #13, 10:2x, on a screenshot of the
   /employers hero: "we can make the corners of the uncut sides of this main banner, for all
   places applicable, more rounded. Let's go that route."

   THE RULE AND THE VALUE ARE lane-s11's, TRANSCRIBED, NOT RE-DERIVED (§18 step 5 applied to a
   cure: a re-derived value is a fresh guess wearing the old one's clothes). Its measurements are
   in EG-HERO-CORNERS/lane-s11-MEASUREMENTS.md; that lane was BLOCKED on a worktree with no API
   and could not take an AFTER read, so this lane takes it on :4390 with an isolated API.
   MEASURED BEFORE on :4390, 6 routes x 1280/1440/1920: `.mkt-hero` computes border-radius
   0px / 0px / 0px / 0px on 18 of 18 cells, set by `.page .mkt-hero{border-radius:0}` at
   marketing-cms.css:699 — the same specificity as the rule below, which therefore wins on order
   and on nothing else; that is stated so nobody moves it. Its own sibling notched band
   `.mkt-ctaband` computes 24px / 0px / 24px / 0px — 24 on its UNCUT corners, 0 on its cut ones.
   The value is the SIBLING'S, already shipped one band below on the same page (S13, nothing minted).
   §9b, asked of the BROWSER and not of the sheet: `--r-card` computes `18px` AT `.mkt-hero` on
   18 of 18 cells, so `calc(var(--r-card) + 6px)` = 24px resolves and cannot be silently invalid.
   WHICH TWO CORNERS, MEASURED rather than assumed: the notch children sit at (0,0) and
   (1014, bottom) in LTR, and at (1014, 0) and (0, bottom) in RTL — marketing-rtl.css:135-136
   flips them physically. So the UNCUT pair is TR + BL in LTR and TL + BR in RTL, and the cut
   pair stays 0 so the notch still meets a square edge with no sliver.
   S14: >= 68 `.mkt-hero` routes of 120 (a served-HTML count is a FLOOR, not a count); lane-s11
   derived that the notched subset is the WHOLE `.mkt-hero` set, 68 of 68. The other notched
   bands do NOT qualify and are left alone, measured: `.mkt-ctaband` already 24, `.cms-cta.cms-nfx`
   and `.cms-hcband.cms-nfx` 20 on all four, `.p-hero` (the home roots) 24 and not this element.
   FRAME (S13): `Become an Employer.html` draws `.mkt-hero` with NO radius and NO notch at all;
   its notched element is a different one, `.mkt-ctaband.notched`, radius 24px, notch 34x34 with
   inner radius 10px, against the live hero's 52x53 / 12px. The live notched hero ALREADY departs
   from the frame; this rounds it further on the operator's ruling.
   INTERIM DEVIATION - UNRATIFIED
   ============================================================================ */
.page .mkt-hero {
  border-top-right-radius: calc(var(--r-card) + 6px);
  border-bottom-left-radius: calc(var(--r-card) + 6px);
}
[dir="rtl"] .page .mkt-hero {
  border-top-right-radius: 0;
  border-bottom-left-radius: 0;
  border-top-left-radius: calc(var(--r-card) + 6px);
  border-bottom-right-radius: calc(var(--r-card) + 6px);
}

/* ============================================================================
   2026-09-07 — ROW P3-OP-30 (EG-NOTCH-CUTOUT), lane-s21, sheet-surgeon.
   THE NOTCH HAIRLINE AT FRACTIONAL DEVICE-PIXEL RATIOS. FRAME: **NO FRAME** — no approved frame
   draws or forbids a mask; this changes NO design value (size, radius, colour, position of the
   cutout are all untouched) and cures a RASTERISATION artefact only. Not an INTERIM DEVIATION for
   that reason: nothing here overrides a frame.

   WHAT WAS MEASURED (definition first, because a figure without its definition is not a figure, §4):
   HAIRLINE PX = a DEVICE pixel inside a 4-CSS-px strip along the notch's OUTER edges (the sides
   whose edge coincides with the host band's own edge to < 0.6 CSS px, derived from GEOMETRY — never
   the class name, since `nt-tl` renders top-RIGHT under RTL: marketing-rtl.css:133-136), the strips
   trimmed one corner-radius short of the notch's INNER corners so the arc is never sampled, whose
   colour is > ΔE2000 1.0 from the measured page ground rgb(246,249,255).
   BEFORE, 74 notch cells = 32 (route × width × devicePixelRatio) over /employers /recruiters
   /guides /help-center /about /ar/lilsharikat × dpr {1,1.25,1.5,1.75,2} at 1440 + 2 cells at 1280:
     2,789 of 80,746 sampled (3.454 %) on 39 of 74 cells, worst ΔE2000 20.171 against a 3.0 floor
     dpr 1     8 / 5,872  (worst ΔE 1.038)      dpr 1.25  1,015 / 11,124  (worst ΔE 20.171)
     dpr 1.5 390 / 14,118 (worst ΔE 20.171)     dpr 1.75  1,345 / 20,704  (worst ΔE 20.171)
     dpr 2    31 / 28,928 (worst ΔE 1.038)
   ⇒ the 2,789 px are 100 % accounted for by THREE families: .mkt-hero 1,284 · .cms-cta.cms-nfx
     1,057 · .cms-band.cms-nfx 448. `.cms-hcband.cms-nfx` measures **0 of 10 cells** and is
     DELIBERATELY NOT MASKED — it is the only one of the four with `overflow: visible`, so a
     border-box mask there could clip content, and it has nothing to cure.

   MECHANISM (lane-s17's, LANE-S17-REPORT.md, re-measured here): the notch is an opaque ground-
   coloured <span> painted OVER the band, its outer edges coincident with the band's own to 0.02
   CSS px. Chrome antialiases each layer in its own pass, so the composite keeps a band fraction
   a(1−a) — zero only when the edge lands on a whole device pixel, which is exactly why the count
   is ~0 at dpr 1 and 2 and large at 1.25/1.5/1.75.
   ⇒ NO amount of OVER-PAINTING can cure it (each added layer shares the same half pixel and only
     multiplies the residue by (1−a) again); and the notch cannot be extended OUTWARD past the band
     to escape the shared edge, because `marketing.css:583` — PINNED — sets `overflow:hidden` on
     `.page.fin.mkt .mkt-hero`, which re-imposes the identical edge on the clip.
   ⇒ so the cure REMOVES the band's paint instead — and it must remove it WITHOUT a second
     antialiased boundary of its own.

   THE VARIANT LADDER, ALL FOUR MEASURED ON THE SAME 74 CELLS (S4 was lifted for this row by the
   operator; every rung is recorded because the two that failed are what prove the one that works):
     BEFORE           2,789 px  worst ΔE 20.171  39/74 cells
     A  mask, holes genuinely subtracted (`mask-composite: exclude`)   1,752  worst ΔE 10.584  35/74
     B  A + the FULL mask layer oversized to 100%+12px, `mask-clip: no-clip`   1,739  ΔE 12.973  26/74
     C  clip-path polygon, NO mask                                        **0**  worst ΔE 0.481  0/74
   WHY A AND B FAILED, MEASURED, not guessed — single-declaration reversion at the notch's top edge
   row (/employers, dpr 1.75, the W6-C method), band rgb(26,82,196), ground rgb(246,249,255):
     mask OFF + notch hidden  → rgb(191,207,240)  = 25.0 % band   (the band's own AA'd edge row)
     mask ON  + notch hidden  → rgb(218,228,248)  = 12.7 % band   (exactly HALF)
     hero `background:transparent` → rgb(246,249,255) = 0 %       (⇒ the residue IS the band's background)
   ⇒ THE MASK'S PAINTING AREA IS ITSELF CLIPPED TO THE BORDER BOX, WITH ANTIALIASING. Both the hole
     layer and the FULL layer are therefore ~0.5 at the band's own edge row, and `exclude` is XOR:
     XOR(0.5, 0.5) = 0.5, not 0. So a mask can only ever HALVE this residue — which is precisely the
     −37 % that lane-s17 measured twice and read as "layer isolation". `mask-clip: no-clip` did not
     change it (variant B: 1,752 → 1,739, and the worst ΔE went UP).
   ⇒ `clip-path` is NOT intersected with the border box, so where the polygon excludes the corner the
     band's alpha is exactly 0 and there is no second edge to antialias. That is the whole difference
     between B and C, and it is why the cure is a polygon and not a mask.
   ⭐ AND THE BRIEFED HYPOTHESIS IS **REFUTED**: it held that Chrome composites mask layers
     first-listed-as-BOTTOM, so lane-s17's list evaluated to FULL, and that REVERSING the layer order
     was the cure. Measured red-first on a synthetic page before this rule was written
     (probes/s21-maskorder2.mjs, with two controls that both behaved — full-only → all painted,
     square-only → only the square): `exclude` is commutative, BOTH orders subtract the hole
     identically, and two disjoint holes subtract while the region between them is kept. The order
     was never the defect; the border-box clip on the mask was. Recorded so nobody spends it again.

   THE POLYGON, and every vertex is chosen so that NO polygon edge coincides with a notch edge or a
   band edge inside a measured strip — that would merely relocate the double edge to the notch's
   INNER side. The outer boundary is the band's box grown by 2 px (so the band's OWN edges and its
   24px/20px rounded corners keep their normal single antialiasing and are not touched), and the cut
   is held 2 px INSIDE the notch on the notch's inner sides, so every polygon edge falls under
   fully-opaque notch paint. Per notch the cut is the L-shape
     {x < nw−nr−2} ∪ {nw−nr−2 ≤ x < nw−2, y < nh−nr−2}
   i.e. the rounded inner corner is deliberately NOT cut: the band keeps painting under the arc,
   which is what makes the arc render exactly as it does today. 12 vertices; the RTL polygon is the
   same shape mirrored in x, because `nt-tl` renders top-RIGHT under RTL.

   AFTER, same probe, same 74 cells, TWO reads more than 60 s apart (N9) — identical per cell:
     **0 of 80,746 (0.000 %) on 0 of 74 cells, worst ΔE2000 0.481** (below the definition's own 1.0
     cut and an order below this project's 3.0 perceptual floor); 0 at every sampled dpr.
     Browser zoom, 18 further notch cells at 150 %/200 % (960@1.5, 720@2, 1280@1.5): **0 of 11,747.**
   NO REGRESSION, whole-band pixel diff (not just the strips) on 6 cells, rest AND lit, pointer
   parked then moved to the band centre with `matches(':hover')` VERIFIED TRUE on 6 of 6:
     geometry IDENTICAL on 6 of 6 — band rect, border-radius, every notch rect and its four radii,
     the headline rect, and document scrollWidth.
     the differing pixels are BIMODAL, with NOTHING in between: Δ > 20 of 255 = 200 px per notched
     band (100 per notch), ALL within 144 device px of a band corner — that IS the cure; and Δ ≤ 2 of
     255 elsewhere. Δ in 3..20 is ZERO on 5 of 6 cells and 2 px on the sixth.
   ⚠ ONE HONEST COST, stated as a magnitude and not as a boolean (S1): on `.cms-band` (/guides) the
     Δ≤2 class is **18,386 px of 1,203,048 (1.528 %)**, against 28 px on `.mkt-hero` and 116 on
     `.cms-cta`. `.cms-band` is the only one of the three with border-radius 0, so it was not already
     rendering into a clipped surface and `clip-path` gives it one; the shift is ±1–2 of 255 (a
     rounding difference), ≈0.3 ΔE2000 in these blues, an order below the 3.0 floor. It is a REAL
     change in that band's rasterisation and is reported as one, not smoothed away. The alternative
     is leaving 448 hairline px at ΔE up to 20.171 on that band, which is visible.
     `.cms-hcband` (/help-center) diffs **0 px of 1,867,936** — it is not clipped and not touched.

   SCOPE GATES (a hole with no notch over it would be a visible bite, so each is gated by the same
   media query that hides the notch): `.mkt-hero`/`.cms-band` notches are `display:none` ≤599.98px
   (this sheet :814, :729) ⇒ mask from 600px. `.cms-cta` notches are `display:none` ≤1279.98px
   (:1028) ⇒ mask from 1280px. `:has(> .cms-notch)` restricts the mask to bands that HAVE a notch,
   so `.mkt-hero--frame` and every unnotched hero are untouched.
   §9b: the three custom properties are DEFINED AND CONSUMED ON THE SAME ELEMENT, so scope is not in
   question; verified in the BROWSER anyway (probes/s21-scope.mjs) rather than read off the sheet.
   S14 DENOMINATOR, transcribed from lane-s17 not re-derived: 164 `.cms-notch` on 76 of 120 sitemap
   routes — SSR FLOOR qualifier (a served-HTML count is a floor, not a count; s17 read the hydrated
   DOM on 76 of 76 and got the same 164, so on this build the floor is met exactly). Families:
   136 `.mkt-hero` + 24 `.cms-cta.cms-nfx` + 2 `.cms-band.cms-nfx` + 2 `.cms-hcband.cms-nfx` = 164.
   This rule reaches 162 of 164; the 2 `.cms-hcband` are the measured-zero exclusion above.

   ----------------------------------------------------------------------------------------------
   2026-09-08 — ROW P3-OP-53, lane-s29, sheet-surgeon. `.cms-hero:has(> .cms-notch)` IS ADDED TO THE
   THREE SELECTOR LISTS BELOW (the --s21-* var block, the LTR polygon, the [dir="rtl"] polygon).
   NO new declaration, no new geometry, no new colour: `.cms-hero`'s notch is already 52 x 53 with a
   12px inner radius (:2490-2491 of this sheet, transcribed there by lane-c15 from the sibling
   `.mkt-hero` at :809-814), so it belongs in the 52/53/12 arm and takes the polygon as written.

   WHY THE ROW EXISTS. The About hero notch family was born AFTER this clip-path was written
   (operator eye-gate ruling #36, row P3-OP-42, Batch B), so #24's cure never reached it.
   WHAT WAS MEASURED — TRANSCRIBED from NRC-P1-393 / int-C/STAMP.txt:27-40, not re-derived, and the
   predicate is this block's own definition at :2160-2164 (a figure without its definition is not a
   figure, §4):
     BEFORE  127 hairline px of 17,636 sampled, on 2 of 32 notch readings
             (32 = 6 route groups x dpr {1.25, 1.75}; the other 5 groups — cms-cta, cms-band,
             cms-hcband, mkt-hero, ar/lilsharikat — read 0 px each), both offending readings
             `about n0`, host `.cms-hero`; maxΔE2000 **1.011** against the definition's own 1.0 cut,
             rgb(243,247,255) against the page ground rgb(246,249,255) — 3/255 on two channels.
             A hair over the line rather than a visible seam: 1.011 is an ORDER below this project's
             3.0 perceptual floor (S1), and it is reported as a magnitude, never as a boolean.
     ⚠ THIS LANE'S OWN BEFORE REFUTES ONE CLAUSE OF THAT RECORD AND THE REFUTATION IS KEPT HERE.
       The stamp says only `n0` fired. Measured 2026-09-08 on :4300 (the unedited integration
       build), 184 notch readings over 36 cells = the 6 `.cms-hero` routes x {1280, 1440} x dpr
       {1.25, 1.75}, plus /about at dpr {1, 1.5, 2}, plus /ar/hawl-liverec at 1.5, plus 4 control
       cells on the untouched families:
         **397 hairline px of 214,680 sampled (0.185 %) on 27 of 184 readings, ALL of them
         `.cms-hero`**, worst ΔE2000 **1.411**; and **`n1` IS non-zero** — /about n1 = 53 px at
         dpr 1.25 (both widths) and 63 px at dpr 1.5.
         /about @1440 by dpr:  1 -> 0 · 1.25 -> 66 · 1.5 -> 63 · 1.75 -> 18 · 2 -> 0  (the 1/2
         near-zero controls behave, and dpr 1.5 — never sampled by the 32-reading set — was
         UNMEASURED, not clean).
         THE RTL ARM WAS EXERCISED FOR THE FIRST TIME: /ar/hawl-liverec 13 px @1.25 and 18 @1.75
         (the recorded set's ar route was /ar/lilsharikat, which has no `.cms-hero` at all).
         CONTROL FAMILIES, same run, unchanged by this row and 0 before and after:
         `.mkt-hero` 0/7,380 · `.cms-cta` 0/146,240 · `.cms-band` 0/3,690 · `.cms-hcband` 0/6,492.
     AFTER  same instrument, same 184 readings, on :4340 with this rule live, TWO reads 139 s apart
       (05:18:42 and 05:21:01, N9) and IDENTICAL per reading:
         **0 hairline px of 214,680 (0.000 %) on 0 of 184 readings**, worst ΔE2000 **0.814** —
         below the definition's own 1.0 cut. 12 of 12 enumerated notches cured, LTR and RTL.
     RED-FIRST (S3 — a clean AFTER with no red plant is not evidence), `page.addStyleTag`, never
       committed: `.cms-hero:has(> .cms-notch){clip-path:none!important}` brings the hairline back
       at **397 px on 27 of 184, 0 per-reading differences against the BEFORE** — the plant
       reproduces the defect exactly. A SECOND plant on a family this row did NOT touch,
       `.page .mkt-hero:has(> .cms-notch){clip-path:none!important}` on /employers + /ar/lilsharikat,
       reddens at **773 px of 7,380 (10.474 %) on 8 of 8, worst ΔE 19.889** — so the detector can
       see a hairline anywhere, not only where this row was looking. Plant removed: 0 of 29,325.
     FALSIFIER CLEARED (the §9b / EG-23 leg — a rule can reach an element, win the cascade, and
       still render nothing): computed `clip-path` on `.cms-hero` reads `none` BEFORE and a
       `polygon(...)` AFTER — `polygon(50px -2px, …)` in LTR and `polygon(calc(100% - 50px) -2px, …)`
       under RTL — and `--s21-nw/nh/nr` compute `52px/53px/12px` (NON-EMPTY) asked of the BROWSER.
       An empty token would have made the whole declaration invalid and left the hairline in place.
     NO GEOMETRY MOVED: 33 items x 5 cells = 165 comparisons (hero rect, its four radii, both notch
       rects and their four radii each, the h1 rect, document.scrollWidth, and the page's notch
       counts), **0 exceeding 0.5 px; worst Δ = 0**. The uncut 24px pair survives untouched — TR+BL
       in LTR, TL+BR under RTL — which is what the polygon's +2px outer boundary is for.
       Pointer parked and VERIFIED (trap 13): `.cms-hero.matches(':hover')` false on every cell.
     ⚠ THE HONEST COST, a magnitude and not a boolean (S1), by single-declaration reversion (the
       W6-C method the parent cure used): whole-band diff of this rule ON vs OFF, `.cms-hero` only —
       **Δ>20 of 255: 0 px on every cell** (unlike `.mkt-hero`'s 200 px per band, because this
       notch's fill and this band's ground are only 2.900 ΔE2000 apart to begin with);
       Δ 3..20: 0-66 px; Δ<=2: **143-337 px per cell of 1.27-2.54 M sampled (0.010-0.023 %)**,
       max channel Δ **3** of 255 (8 on the RTL cell). That is an ORDER BELOW `.cms-band`'s recorded
       18,386 px / 1.528 %, and consistent with the prediction that `.cms-hero` — already
       `overflow:hidden` with radii on 2 of 4 corners — behaves like `.mkt-hero`, not like the
       radius-0 `.cms-band`. It is a REAL change in rasterisation and is reported as one.

   FRAME (S13) — TWO STATEMENTS, NOT TO BE COLLAPSED INTO ONE:
   1. The NOTCH on `.cms-hero` exists only by eye-gate ruling #36 and REMAINS
      **INTERIM DEVIATION · UNRATIFIED** (:2447 of this sheet, ArticleView.tsx:1527). This row does
      not change that status and must not be read as promoting it. The approved frame
      `apps/web/src/frames/cms-pages/CMSPagesAboutUsFrame.tsx` draws NO notch on `.cms-hero` — its
      only `.cms-notch` pair is :718/:720, inside the bottom CTA band (re-read 2026-09-08).
   2. The HAIRLINE CURE here is **NO FRAME** → correctness governs (S13 branch 2), exactly as this
      block already argues at :2154-2157 for the other three families: it changes NO design value
      (size, radius, colour, position of the cutout are all untouched) and cures a RASTERISATION
      artefact only. DISCRIMINATOR, stated because S13 branch 4 requires it every time: this is
      neither a frame DEFECT nor a frame-vs-correctness DISAGREEMENT — the frame has no opinion on
      antialiasing at dpr 1.25.
   ⭐ REVERSAL SAFETY. If the founder reverses ruling #36 by deleting the two spans in
      ArticleView.tsx, `:has(> .cms-notch)` stops matching and this arm becomes INERT with no visual
      consequence. A cure that cannot outlive the thing it cures is the right shape here.

   THE FOUR PRECONDITIONS, each checked before the selector was written:
   (a) SCOPE GATE — `.cms-hero .cms-notch{display:none}` at ≤599.98px (:2508), the same gate
       `.mkt-hero` (:814) and `.cms-band` (:729) use ⇒ `@media (min-width: 600px)` is correct and a
       hole with no notch over it cannot occur.
   (b) OVERFLOW — `.cms-hero{…position:relative;overflow:hidden}` (:30 of this sheet), the same
       posture as `.mkt-hero`. The one DELIBERATELY UNCLIPPED family is `.cms-hcband`, the only one
       with `overflow: visible` (:2172-2174); that exclusion does not apply here.
   (c) DIRECT CHILD — ArticleView.tsx :1545/:1546 are the first two children of :1508
       `<div className={'cms-hero'}>` (`.cms-hero-in` is :1547) ⇒ `:has(> .cms-notch)` matches.
   (d) §9b — `--s21-nw/nh/nr` are DEFINED AND CONSUMED on the same element by the same rule, and it
       was still asked of the BROWSER rather than read off the sheet (see the AFTER block).

   ⛔ THE S14 DENOMINATOR ABOVE IS STALE AND IS CORRECTED HERE RATHER THAN OVERWRITTEN — that is
   S6b's own lesson (a denominator written into a file goes stale the moment content lands), and it
   is happening to this comment block for the second time. BOTH numbers stand, labelled:
     OLD (lane-s17, at the time #24 was written): 164 `.cms-notch` on 76 of 120 sitemap routes =
       136 `.mkt-hero` + 24 `.cms-cta.cms-nfx` + 2 `.cms-band.cms-nfx` + 2 `.cms-hcband.cms-nfx`;
       the rule reached 162 of 164.
     NEW (derived live 2026-09-08 by GET over all 131 sitemap routes on :4300, `<style>` blocks
       stripped so the inlined critical CSS can never be counted, every notch attributed to its
       nearest enclosing host, 0 UNATTRIBUTED — SSR FLOOR qualifier: a served-HTML count is a FLOOR,
       not a count, because client-rendered content is absent from the served HTML):
       **198 `class="cms-notch` on 87 of 131 routes**
         148 `.mkt-hero` (74 routes) + 24 `.cms-cta` (6) + 2 `.cms-band` (1) + 12 `.cms-hcband` (6)
         + **12 `.cms-hero` (6 routes)**  = 198
       Two structurally different counts of the total agree (re.findall 198 · str.count 198 · family
       sum 198); the sitemap is 131 two ways (`grep -c '<loc>'` 131 · `split('<loc>')` 131);
       positive control on the same sweep: 74 routes carry a notched `.mkt-hero`.
     ⇒ WITH `.cms-hero` added, **the rule reaches 186 of 198**; the 12 `.cms-hcband` remain the
       measured-zero, `overflow: visible` exclusion.
     ⚠ 164 → 198 is +34 and only **+12 of that is this row** (6 routes x 2 notches: /about
       /ar/hawl-liverec /bn/liverec-somporke /es/sobre-liverec /hi/liverec-ke-bare-mein
       /mr/liverec-vishayi, ONE emit site — ArticleView.tsx:1508/1545/1546). The other +22 is
       content landed since: the sitemap went 120 → 131 and `.cms-hcband` went 2 → 12.
     S7, both numbers, neither borrowing the other's authority: **1 root cause** · **12 occurrences**
       enumerated and cured, of which the recorded BEFORE measurement caught 2 cells x 1 notch.
   ⚠ `marketing-critical.css` already inlines this family and its header records this sheet's hash,
     so this edit makes the extract STALE BY STAMP. Regeneration is OWED to the suite-runner AFTER
     the stamp and is deliberately NOT done here (a builder's extract is generated from a different
     port and is a different, equally correct file; nothing hand-merged into machine output, ever).
   ⚠ `gate-w4-t1-approved-composition` AC-2 is already RED on /about and MUST stay exactly as it
     reads: this cure changes no notch COUNT. The AC-2 defect is row P3-OP-50, not this one.
   ----------------------------------------------------------------------------------------------
   ============================================================================ */
@media (min-width: 600px) {
  .page .mkt-hero:has(> .cms-notch),
  .cms-band:has(> .cms-notch),
  /* 2026-10-05 OPERATOR ORDER ("the corner cutout ... more rounded ... like the homepage banner"): cut-out inner radius = the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 12px (--s21-nr = the clip-path polygon's kept fillet square; it must equal the notch radius or the polygon shaves the outer part of the 20px arc); width/height unchanged. Overrides the frame's 12px (--s21-nr = the clip-path polygon's kept fillet square; it must equal the notch radius or the polygon shaves the outer part of the 20px arc) by that order. NO ledger row. File-only pass: NOT built, NOT measured in a browser. */
  .cms-hero:has(> .cms-notch) { --s21-nw: 52px; --s21-nh: 53px; --s21-nr: 20px; }
}
@media (min-width: 1280px) {
  /* 2026-10-05 OPERATOR ORDER ("the corner cutout ... more rounded ... like the homepage banner"): cut-out inner radius = the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 12px (--s21-nr, About CTA; c4376a252 moved the radius to 20 and left this at 12); width/height unchanged. Overrides the frame's 12px (--s21-nr, About CTA; c4376a252 moved the radius to 20 and left this at 12) by that order. NO ledger row. File-only pass: NOT built, NOT measured in a browser. */
  .cms-cta.cms-nfx:has(> .cms-notch) { --s21-nw: 71px; --s21-nh: 71px; --s21-nr: 20px; }
}
@media all { /* P2-12: was (min-width: 600px) — the notch now paints at every width, so its polygon does too */
  .page .mkt-hero:has(> .cms-notch),
  .cms-band:has(> .cms-notch),
  .cms-hero:has(> .cms-notch) {
    clip-path: polygon(
      calc(var(--s21-nw) - 2px) -2px,
      calc(100% + 2px) -2px,
      calc(100% + 2px) calc(100% - var(--s21-nh) + 2px),
      calc(100% - var(--s21-nw) + var(--s21-nr) + 2px) calc(100% - var(--s21-nh) + 2px),
      calc(100% - var(--s21-nw) + var(--s21-nr) + 2px) calc(100% - var(--s21-nh) + var(--s21-nr) + 2px),
      calc(100% - var(--s21-nw) + 2px) calc(100% - var(--s21-nh) + var(--s21-nr) + 2px),
      calc(100% - var(--s21-nw) + 2px) calc(100% + 2px),
      -2px calc(100% + 2px),
      -2px calc(var(--s21-nh) - 2px),
      calc(var(--s21-nw) - var(--s21-nr) - 2px) calc(var(--s21-nh) - 2px),
      calc(var(--s21-nw) - var(--s21-nr) - 2px) calc(var(--s21-nh) - var(--s21-nr) - 2px),
      calc(var(--s21-nw) - 2px) calc(var(--s21-nh) - var(--s21-nr) - 2px)
    );
  }
  [dir="rtl"] .page .mkt-hero:has(> .cms-notch),
  [dir="rtl"] .cms-band:has(> .cms-notch),
  [dir="rtl"] .cms-hero:has(> .cms-notch) {
    clip-path: polygon(
      calc(100% - var(--s21-nw) + 2px) -2px,
      -2px -2px,
      -2px calc(100% - var(--s21-nh) + 2px),
      calc(var(--s21-nw) - var(--s21-nr) - 2px) calc(100% - var(--s21-nh) + 2px),
      calc(var(--s21-nw) - var(--s21-nr) - 2px) calc(100% - var(--s21-nh) + var(--s21-nr) + 2px),
      calc(var(--s21-nw) - 2px) calc(100% - var(--s21-nh) + var(--s21-nr) + 2px),
      calc(var(--s21-nw) - 2px) calc(100% + 2px),
      calc(100% + 2px) calc(100% + 2px),
      calc(100% + 2px) calc(var(--s21-nh) - 2px),
      calc(100% - var(--s21-nw) + var(--s21-nr) + 2px) calc(var(--s21-nh) - 2px),
      calc(100% - var(--s21-nw) + var(--s21-nr) + 2px) calc(var(--s21-nh) - var(--s21-nr) - 2px),
      calc(100% - var(--s21-nw) + 2px) calc(var(--s21-nh) - var(--s21-nr) - 2px)
    );
  }
}
@media all { /* P2-12: was (min-width: 1280px) — the notch now paints at every width, so its polygon does too */
  .cms-cta.cms-nfx:has(> .cms-notch) {
    clip-path: polygon(
      calc(var(--s21-nw) - 2px) -2px,
      calc(100% + 2px) -2px,
      calc(100% + 2px) calc(100% - var(--s21-nh) + 2px),
      calc(100% - var(--s21-nw) + var(--s21-nr) + 2px) calc(100% - var(--s21-nh) + 2px),
      calc(100% - var(--s21-nw) + var(--s21-nr) + 2px) calc(100% - var(--s21-nh) + var(--s21-nr) + 2px),
      calc(100% - var(--s21-nw) + 2px) calc(100% - var(--s21-nh) + var(--s21-nr) + 2px),
      calc(100% - var(--s21-nw) + 2px) calc(100% + 2px),
      -2px calc(100% + 2px),
      -2px calc(var(--s21-nh) - 2px),
      calc(var(--s21-nw) - var(--s21-nr) - 2px) calc(var(--s21-nh) - 2px),
      calc(var(--s21-nw) - var(--s21-nr) - 2px) calc(var(--s21-nh) - var(--s21-nr) - 2px),
      calc(var(--s21-nw) - 2px) calc(var(--s21-nh) - var(--s21-nr) - 2px)
    );
  }
  [dir="rtl"] .cms-cta.cms-nfx:has(> .cms-notch) {
    clip-path: polygon(
      calc(100% - var(--s21-nw) + 2px) -2px,
      -2px -2px,
      -2px calc(100% - var(--s21-nh) + 2px),
      calc(var(--s21-nw) - var(--s21-nr) - 2px) calc(100% - var(--s21-nh) + 2px),
      calc(var(--s21-nw) - var(--s21-nr) - 2px) calc(100% - var(--s21-nh) + var(--s21-nr) + 2px),
      calc(var(--s21-nw) - 2px) calc(100% - var(--s21-nh) + var(--s21-nr) + 2px),
      calc(var(--s21-nw) - 2px) calc(100% + 2px),
      calc(100% + 2px) calc(100% + 2px),
      calc(100% + 2px) calc(var(--s21-nh) - 2px),
      calc(100% - var(--s21-nw) + var(--s21-nr) + 2px) calc(var(--s21-nh) - 2px),
      calc(100% - var(--s21-nw) + var(--s21-nr) + 2px) calc(var(--s21-nh) - var(--s21-nr) - 2px),
      calc(100% - var(--s21-nw) + 2px) calc(var(--s21-nh) - var(--s21-nr) - 2px)
    );
  }
}

/* ============================================================================
   P3-OP-32 — THE SOLID ACCENT ARROW CARRIES A BOLD WHITE RING AT REST
   sheet-surgeon, lane-s17, 2026-09-07. Operator ruling #33: "even before the hover animation
   comes … there is a bold white line around it to emphasize that one arrow. Obviously, when you
   hover over, it still has the same animation, but even when the website first loads up … I want
   there to be that white border. Also, for the banners that have this type of background with
   the blue arrow."

   WHERE THE RING IS DRAWN, AND WHY IT IS IN THE ASSET AND NOT IN THIS SHEET. "Around it" is
   around the ARROW, not around its box: the operator is contrasting it with the hover outline,
   which follows the glyph. Only the path knows the glyph's silhouette, so the ring is a second
   stroked copy of the SAME path inside `hero-arrow-tile.svg` — the file lane-s13 built from the
   founder's own `wm-arrow-lr-hi.svg` (`d` byte-identical). Nothing is redrawn and no colour is
   minted: the ring is `#FFFFFF`, the value the hero's own siblings already use (S13 — take the
   value from the neighbours). `hero-arrow-tile.svg` is referenced by exactly ONE declaration in
   the whole tree (`grep -rn hero-arrow-tile` -> marketing-cms.css:1815 and this block), so
   editing it cannot reach any other surface.

   ⛔ SUPERSEDED 2026-09-11 BY THE OPERATOR'S SMOKE TEST: the 40px-box arithmetic below preserved
   the inner blue glyph but made the COMPLETE white-ringed silhouette larger than a 32px field
   cell. It is retained as the retracted rationale for the false-green implementation. The live
   rule below and `hero-arrow-tile.svg` instead fit the complete silhouette into one 32px cell.

   THE RETRACTED ARITHMETIC, because the ring does not fit the old tile and that was the whole of this edit.
   MEASURED: the glyph's painted silhouette spans 34..971 of a 1000-unit viewBox (path 45..960,
   stroke-width 22 => 11 units of half-stroke each side), i.e. 29 units of headroom at one edge
   and 34 at the other. At the old 32 px render that is 0.93 and 1.09 CSS px — so a 2 px ring
   CANNOT be drawn inside the old viewBox; it would be clipped by the SVG's own default
   `overflow:hidden`. The tile therefore grows by exactly the ring on every side and the CSS box
   grows with it, so THE GLYPH'S RENDERED SIZE AND POSITION DO NOT MOVE:
     viewBox   0 0 1000 1000 -> -125 -125 1250 1250     (+125 units = +4 CSS px each side)
     box       32x32 px      -> 40x40 px,  background-size 32px -> 40px
     scale     32/1000 = 0.032 px per unit  ->  40/1250 = 0.032 px per unit   (IDENTICAL)
     ring      2 CSS px = 62.5 units; white stroke-width = 22 + 2x62.5 = 147, drawn UNDER the
               blue copy, so exactly 62.5 units of it survive outside the blue silhouette
     extent    with the ring: -28.5 .. 1033.5, inside the new -125..1125 box. Not clipped.
   The 8 px the box gained is given back as negative margin so the flow is unchanged to the pixel:
   `margin-block-start:-4px` and `margin-block-end:30-4=26px` hold the headline exactly where
   lane-s13 put it, and `margin-inline-start:-4px` holds the glyph's horizontal origin. LOGICAL
   properties, so the RTL twin needs no separate rule — the accent sits at the copy column's
   inline start in both directions (measured: LTR box x = hcopy.left, RTL box x = hcopy.right-w).

   MEASURED BEFORE, on :4390 (this worktree), hydrated (networkidle - trap 17), pointer parked at
   (2,2) and `.mkt-hero.matches(':hover')` FALSE on 6 of 6 cells before every resting read
   (trap 13), 6 cells = /employers 1440 + 1280, /recruiters, /affiliates, /ar/lilsharikat,
   /ar/masuulu-altawzif at 1440, dpr 2:
     WHITE PX AT REST inside the accent's own crop = 0 of 10,816 device px on 6 of 6 cells.
   DEFINITION, because a figure without one is not a figure: a WHITE PX is a device pixel whose
   minimum channel is >= 235 and whose channel spread (max-min) is <= 10 — i.e. near-white and
   near-neutral, which the hero blue and the accent blue can never be.
   CONTRAST, reported as a number per S1: #FFFFFF on the hero ground rgb(26,82,196) = 6.890:1;
   on the accent's own #2164F4 = 5.007:1; on the dark /affiliates hero rgb(24,24,24) = 17.756:1.
   For scale, the accent against its hero ground is 1.376:1 — which is why the ring is what makes
   the accent legible at rest at all.
   THE HOVER IS UNTOUCHED, and it is measured rather than argued: the spotlight is `.arrow-spot`,
   a SEPARATE child element with its own mask and its own `--mx/--my`; nothing in this row writes
   to it. The control is the lit-field pixel count in the outer frame of the lit crop, read with
   the pointer moved onto the accent's centre and `.mkt-hero.matches(':hover')` asserted TRUE on
   6 of 6 cells; it must not move between BEFORE and AFTER.
   §9b: no `var()` is written here - every value is a literal, for the reason lane-s13 recorded
   above (`--wm-img`/`--wm-hi` are scoped to `.page.wm-*` and 67 of 68 hero routes carry none).
   CAN IT WIN: the accent is a pseudo-element with no markup, so no inline `style={{}}` can
   outrank it; and the pinned `.page.fin.mkt .mkt-hcopy::before` (marketing.css:595) carries NO
   `!important` — checked, because the `!important` on `.page.fin.mkt .mkt-hero` at
   marketing.css:583 defeated an earlier rule in this same session.
   NOT INVISIBLE AGAINST ITS OWN GROUND: white on rgb(26,82,196) is 6.890:1 and the AFTER metric
   is the white pixel count itself, which is the property that changes.
   S14 DENOMINATOR: >= 68 `.mkt-hero` routes of 120 carry `.mkt-hcopy` (two structurally different
   counts, both 68: `curl | grep -o 'class="[^"]*mkt-hcopy'` and a python `re` per route).
   QUALIFIER: a served-HTML count is a FLOOR, not a count. One accent per route, one asset,
   one declaration - every one of them changes with this block.
   FRAME (S13): NO FRAME draws this ring. `Become an Employer.html` gives the accent no outline at
   all. This is the operator's ruling over the frame:  INTERIM DEVIATION - UNRATIFIED
   ============================================================================ */
.page.fin.mkt .mkt-hero .mkt-hcopy::before {
  /* Operator correction 2026-09-11: the complete ringed arrow is one pattern cell. The SVG
     viewBox now scales the white outer silhouette to the hollow tile's painted bounds. */
  width: 32px;
  height: 32px;
  background-size: 32px 32px;
  margin-block-start: 0;
  margin-block-end: 30px;
  margin-inline-start: 0;
}
/* ==============================================================
   P3-OP-37 item 1a — operator eye-gate 2026-09-07, /about stat band:
   "where it says 'LiveRec at a glance', that should be centered, and it
   should have some space from the top banner."

   ⛔ A RULE THAT REACHES AND LOSES. `.cms-h2c` at line 444 of this sheet already
   declares `margin:56px 0 36px` (verbatim from design-system.css:2531, drawn by
   `Candidate/CMS Pages/Help center.html`). MEASURED with CSS.getMatchedStylesForNode
   on the rendered heading: the rule MATCHES, is not overridden by any inline style
   (inlineStyle cssText = ""), and still computes `margin-top: 0px` — because
   `.page h1,.page h2,.page h3,.page h4{margin:0}` is specificity (0,1,1) against
   `.cms-h2c`'s (0,1,0) and wins. So the declared 56px has NEVER applied anywhere,
   including on /help-center where the frame draws it. Reading the sheet would have
   said the spacing was already correct; only the computed value showed otherwise.

   This restores the value the sheet already carries, at (0,2,1). NOTHING IS MINTED:
   56px/36px are the frame's own numbers, transcribed, not re-derived.

   S14 DENOMINATOR, derived live over all 131 sitemap routes by counting
   `class="cms-h2c"` in the served HTML: BEFORE this lane's change 1 route /
   2 occurrences (`/help-center` — "Browse by topic", "Highlighted articles");
   AFTER the ArticleView change that gives the CMS stats heading this class,
   7 routes / 8 occurrences (+ /about and its 5 locale twins, 1 each).
   /help-center moves TOWARD its frame, not away from it.
   ============================================================== */
.page h2.cms-h2c { margin: 56px 0 36px; }

/* ==============================================================
   P3-OP-42 — 2026-09-07, lane-c15. THE ABOUT HERO TAKES THE NOTCHED HERO'S CUTOUT AND RADIUS.
   Operator eye-gate ruling #36, verbatim: "There are no cutouts on the corners of the main banner
   of this About Us page. It has to have the same cutout with the same radius as the [notched hero].
   It doesn't have to have the animation on the back. That's fine because it's a way lighter screen."

   ⛔ INTERIM DEVIATION - UNRATIFIED against `Candidate/CMS Pages/About Us`. lane-a1 measured that the
   frame draws NO notch on `.cms-hero` at all (its only `.cms-notch` pair is on the bottom CTA band,
   which is already live). Frame and eye-gate ruling DISAGREE; the eye-gate walk is full authority
   where it speaks (NRC-P1-80), so this is built and labelled, never silently corrected (S13).
   Reversal is this block plus the two spans in ArticleView.tsx.

   NOTHING IS MINTED (S13 — take the cure from the neighbours). Every value below is TRANSCRIBED from
   the sibling notched hero `.mkt-hero` at :809-814 of this sheet, MEASURED on the rendered page on
   :4330, /employers @1280 dpr 2 before this change:
       .cms-notch.nt-tl  rect 52.00 x 53.00 at the host's (0,0)   inner radius border-bottom-right 12px
       .cms-notch.nt-br  rect 52.00 x 53.00 at the host's (r,b)   inner radius border-top-left     12px
       fill rgb(246,249,255) = var(--page-bg), identical to the page ground rgb(246,249,255)
       uncut corners 24px = calc(var(--r-card) + 6px); cut corners 0px
   No new selector, colour, radius or dimension is invented; the geometry is the same two declarations
   the notched hero already ships, re-pointed at `.cms-hero`.

   §9b, ASKED OF THE BROWSER AND NOT OF THE SHEET, on all 6 routes x 1280/1440 dpr 2 BEFORE the change:
   at `.cms-hero`, `--page-bg` computes `#F6F9FF` and `--r-card` computes `18px` — both REACH the
   element (the page root carries `tok-iter3`, which defines them), so neither declaration can be
   silently invalid. An unreachable token would have made `calc()` invalid and left the corner at 0px
   with nothing to show for it.

   ⚠ EG-23, THE THIRD WAY — MEASURED AND REPORTED, NOT HIDDEN. A rule can reach an element, win the
   cascade, and still paint nothing because it matches the ground under it. Here it very nearly does:
       notch fill #F6F9FF  vs  the notched hero's ground #1A52C4   dE2000  51.978   (obvious)
       notch fill #F6F9FF  vs  THIS hero's ground     #EEF3FF      dE2000   2.900   (below the 3.0 floor)
   dE2000 self-proved before it graded anything: identity 0.000000, black vs white 100.000, and
   #F6FAFF vs #F7F9FF = 1.232, reproducing CLAUDE.md §13's own recorded figure to three decimals.
   ⇒ The cutout on THIS band is exactly as visible as the band's own edge against the page ground —
   the same 2.900 dE2000 pair — no more and no less. The operator perceived and described that edge
   ("the corners of the main banner"), so the shape reads; the COLOUR step does not clear the 3.0
   perceptual floor and is recorded as a magnitude, never as a boolean (S1). The 24px uncut-corner
   radius is a GEOMETRIC change and does not depend on that contrast at all.

   ⚠ NOT ATTEMPTED HERE, ON INSTRUCTION: the notch hairline (lane-s17, EG-NOTCH-CUTOUT). This block
   adds no hairline, no border and no outline of any kind.

   S14 DENOMINATOR, derived live over all 131 sitemap routes, every route emitting a row including the
   clean ones: `class="cms-hero"` appears on 6 routes / 6 occurrences — /about /ar/hawl-liverec
   /bn/liverec-somporke /es/sobre-liverec /hi/liverec-ke-bare-mein /mr/liverec-vishayi — 0 of which
   carried a notch child. Positive control, same sweep: 79 of 131 routes carry `.mkt-hero`.
   6 enumerated = 6 fixed. No OTHER un-notched `.cms-hero` exists on the sitemap to report.
   ============================================================== */
/* 2026-10-05 OPERATOR ORDER ("the corner cutout ... more rounded ... like the homepage banner"): cut-out inner radius = the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 12px (.cms-hero, /about and its 5 locale twins; logical, so /ar mirrors itself); width/height unchanged. Overrides the frame's 12px (.cms-hero, /about and its 5 locale twins; logical, so /ar mirrors itself) by that order. NO ledger row. File-only pass: NOT built, NOT measured in a browser. */
.cms-hero .cms-notch.nt-tl { width: 52px; height: 53px; border-end-end-radius: 20px; }
.cms-hero .cms-notch.nt-br { width: 52px; height: 53px; border-start-start-radius: 20px; }
/* The uncut pair. `.mkt-hero`'s sibling rule at :1900 uses the same expression; WHICH TWO CORNERS is
   MEASURED, not assumed: the notch children sit at the host's (0,0) and (right,bottom) in LTR, and
   marketing-rtl.css:133-134 flips them physically in RTL, so the UNCUT pair is TR+BL in LTR and
   TL+BR in RTL. The cut pair stays 0 so the notch still meets a square edge with no sliver. */
.cms-hero {
  border-top-right-radius: calc(var(--r-card) + 6px);
  border-bottom-left-radius: calc(var(--r-card) + 6px);
}
[dir="rtl"] .cms-hero {
  border-top-right-radius: 0;
  border-bottom-left-radius: 0;
  border-top-left-radius: calc(var(--r-card) + 6px);
  border-bottom-right-radius: calc(var(--r-card) + 6px);
}
/* Hidden below 600px exactly as the notched hero's own cutout is (:814) — at that width the band
   loses its side gutters and a 52px corner square would sit on the viewport edge. */
/* P2-12 (operator-2026-09-25-NOTCH-MOBILE): the <600px `display:none` that stood here is REVERSED — see the P2-12 block at the end. */

/* ==============================================================
   P3-OP-101 (SHEET HALF) — `.cs-fig`, the /about stat figure.
   ==============================================================
   MEASURED — moved VERBATIM from the inline style attribute on the `<b class="cs-fig">` in
   apps/web/src/components/marketing/cms/StatsBand.tsx:258, read at HEAD 57d1dd2c (blob
   9c255d3a). The three declarations below are byte-for-byte the three the attribute sets;
   no value is minted, converted or re-derived (S13 — take the cure from what is already there).

   NO FRAME. `Candidate/CMS Pages/About Us.html` is a still and draws no count-up; OPERATOR
   RULING #53 (2026-09-07 18:23 CT) is the specification for this band, as StatsBand.tsx's own
   header records. Nothing here is a design choice, so nothing here is an INTERIM DEVIATION.

   WHY IT IS IN A SHEET AT ALL: gate-w4-t1-emitted-class-styled S-2 is RED because `cs-fig` is
   emitted on all 6 About twins and has a rule in NO linked sheet — the figure paints inline, and
   the critical-CSS extract reads sheets, never inline attributes. MEASURED with the gate's own
   predicate (selectorsIn = /\.([a-zA-Z][\w-]*)/g with comments stripped FIRST) over the 14
   sheets (marketing)/layout.tsx links: `.cs-fig` 0 sheets BEFORE · control `.mkt-faqitem` 5.
   ⛔ Because that predicate strips comments, the `.cs-fig` spellings in THIS comment satisfy
   nothing. Only the selector below does.

   ⛔ TWO PROPERTIES ARE DELIBERATELY EXCLUDED, AND EXCLUDING THEM IS THE LOAD-BEARING PART.
   The inline style on this element is NOT static — StatsBand.tsx writes into it at runtime:
     :142  el.style.minWidth  = ''                      reset, to re-measure
     :143  el.style.textAlign = ''                      reset, to re-measure
     :161  el.style.textAlign = alignRight ? 'right' : 'left'   measured per tile from the
                                                        RESOLVED RUN, never inferred from dir
     :163  el.style.minWidth  = `${Math.ceil(w)}px`     per tile — 104 / 88 / 82 px live
   · `text-align` MUST NOT be declared here. reserve() clears the INLINE declaration to read a
     neutral box; with a sheet rule present the property would fall back to THE SHEET VALUE
     instead of the inherited/UA default, silently changing the state the reservation is
     measured against. That is a live regression path for the 0 px suffix reading (F1), dressed
     as a verbatim move.
   · `min-width` MUST NOT be declared here. It is a per-tile width computed from that tile's own
     rendered final text; three tiles hold three different values and no selector can say that.
     It is not a sheet concern and stays where the component computes it.
   The three properties below are the three reserve() NEVER touches, so there is no sheet/inline
   interaction on any of them at any point in the measure cycle.

   §9b — NO `var()` IS USED. Every value is a CSS keyword moved from the attribute, so there is
   no token whose scope could fail to reach this element and no declaration that could be
   silently invalidated. Nothing to prove because nothing is referenced.

   F1 (the RTL bidi settlement) IS UNTOUCHED: no `direction`, no `unicode-bidi`, no `text-align`.
   The Arabic suffix order resolves exactly as it did before this rule existed.

   INERT ON LANDING, BY CONSTRUCTION: the inline attribute is still present and an inline
   declaration outranks every sheet selector, so with both in place the computed style is
   identical to BEFORE. The component half removes the attribute in its own commit (S5); at that
   point ~~`.cs-fig` at (0,1,0) is the only author rule matching this `<b>` — checked, no other
   sheet rule in the corpus matches a `b` inside `.cms-stat .n`~~ — and `font-weight:inherit` is
   what beats the UA `b{font-weight:bolder}` so the figure keeps `.cms-stat .n`'s 800 rather
   than resolving to 900.

   ⛔ THE STRUCK CLAUSE IS FALSE. Corrected in place per S9, comment-only, by lane-s26 on
   2026-09-08 (P3-OP-103 (i), raised by bv-c23 in NRC-P1-531). It is kept rather than deleted
   because it is what the next editor would have read, and a silently swapped clause leaves no
   way to tell a correction from a transcription.
   THE RULE IT MISSED:  marketing-rtl.css:75  `[lang="ar"] .page b { font-weight: 600 }`
   `[lang="ar"]` (attribute) + `.page` (class) + `b` (type) = (0,2,1), which BEATS `.cs-fig` at
   (0,1,0) on `font-weight` for every Arabic route. So `.cs-fig` is the only author rule matching
   this `<b>` IN LTR; in `ar` a second one matches and WINS.
   RE-DERIVED HERE RATHER THAN TRANSCRIBED (§4). Census over the 14 sheets (marketing)/layout.tsx
   links, comments stripped FIRST (the gate's own predicate), 1,817 selector compounds scanned,
   positive control `.cs-fig` found once: 21 selectors end in a `b` TYPE compound. Twenty are
   gated behind an ancestor class this figure does not carry (`.flag .attest .mock .scard .disc
   .plan-price .cms-qa .cms-topic .p-saver-btn .doc-head .wm .col-head .an-head .p-trans …`).
   The twenty-first is the RTL rule above. So the sentence was right about twenty of twenty-one.
   MEASURED ON THE RENDERED PAGE, :4300, hydrated, dpr 2, pointer parked (traps 17 and 13), with
   the component half now landed (the inline attribute carries only `text-align` and `min-width`):
     /about            `b.cs-fig` computed font-weight  800   on 4 of 4   (parent 800)
     /ar/hawl-liverec  `b.cs-fig` computed font-weight  600   on 4 of 4   (parent 800)
   RULED RTL-SHEET-GOVERNED, and it is not a defect: `marketing-rtl.css` rule 2 exists precisely
   to drop synthesised bold in Arabic (its own words at :68-70), the Arabic hierarchy is carried
   by SIZE, and the change costs 0 RENDERED PIXELS. A computed-value difference with no visible
   consequence is exactly how this survived being noticed. Reported, not "fixed".

   ⚠ AND THE SECOND RESIDUE, RECORDED WHERE THE RULE IS (P3-OP-103 (ii), NRC-P1-531):
   `display: inline-block` below is now LOAD-BEARING — it is what makes the per-tile `min-width`
   reserve apply at all, since `min-width` is inert on an inline box — and it has moved from an
   inline style attribute, which no selector could outrank, to a (0,1,0) sheet rule, which any
   rule matching `.cms-stat b` or `.page b` at (0,1,1) or above would beat. The same specificity
   mechanism has ALREADY FIRED ONCE on this very element, on `font-weight`, which is the whole
   point of the paragraph above. Cost if it is ever beaten: 12.31–14.01 px of suffix movement.
   OWED row, owner this lane, trigger THE NEXT RULE ANYWHERE MATCHING THAT `<b>` (the sheets are
   watched, so an edit here reports), cost ~10 min — a specificity-safe selector, or a red-first
   census of the rules matching it.
   ============================================================== */
.cs-fig {
  display: inline-block;
  font-weight: inherit;
  font-variant-numeric: tabular-nums;
}


/* ============================================================================
   P3-OP-49 · NRC-P1-379 — SHORT ARTICLE HEROES: THE TITLE IS CENTRED IN ITS BAND AND
   THE ACCENT ARROW SITS ONE TILE ABOVE IT
   sheet-surgeon, lane-s26, 2026-09-08.

   NO FRAME. Nothing in the approved corpus draws a title-only hero. The nearest lander,
   `Become an Employer.html`, draws a hero with lead copy, buttons and a sign-up card, and its
   accent is not aligned to anything this row is about. So there is no approved arrangement to
   build and THE OPERATOR'S RULING IS THE SPECIFICATION. Ruling #48, 15:16 CT 2026-09-07, on an
   unlabelled screenshot of the /help-account-and-security hero, verbatim: "for account security,
   whenever the header is this short due to the title being small, I want you to center the text
   because it's sitting so low on the pill. The arrow up to the left is kind of throwing it off.
   Instead, I want you to center it and have the left arrow, the one that has the white outline,
   even a little higher up, maybe one cell up. It still points and still has the same design, but
   it looks cleaner and more centered. I just don't want it to be that low on the card, and I
   don't want it to be horizontally aligned with the arrow either. If the arrow needs to go up
   one, that's fine. It could be kind of close to the title as well."
   INTERIM DEVIATION · UNRATIFIED

   ⛔ THE ROW NAMES `.cms-hero` AND THE SUBJECT IS `.mkt-hero`. Recorded because the next reader
   will look in the wrong place. `.cms-hero` is the `layout === 'cms'` branch and exists on SIX
   routes only — /about and its five locale twins (this sheet's own census at the notch block,
   and ArticleView.tsx:1519). The route the ruling NAMES has no `layout`, `band`, `plain` or
   `hero` in its seed (p10-dev/demo-content/help/help-account-and-security.json — its only keys
   are `_status metaDescription sections slug title`), so it takes ArticleView.tsx:1657 and
   renders `section.mkt-hero > .mkt-hwrap > .mkt-hcopy > h1` with NOTHING ELSE in the copy column.
   Measured on :4300: /help-account-and-security carries one `.mkt-hero` and zero `.cms-hero`.

   MEASURED BEFORE, on :4300 (GO #38 stamped), hydrated (networkidle — trap 17), pointer parked
   at (2,2) with `:hover` FALSE on every measured subject before every read (trap 13), dpr 2,
   all 131 sitemap routes x 1440/1280 = 262 cells, coverage asserted INSIDE the probe
   (routesMeant 131 / processed 131 / difference 0 / errors 0), p10-gates/probes/s26-census.mjs:
     title centre y  −  band centre y   =  +27.00 px   on 110 of 110 title-only cells
     accent top      −  title top       =  −66.00 px   on 110 of 110
     `.mkt-hwrap` text-align: center on every one, while the accent is a `display:block` box at
     the copy column's inline start — so the title is CENTRED and the arrow is at the LEFT.
   Those two readings are the operator's two sentences: "it's sitting so low on the pill" and
   "the arrow up to the left is kind of throwing it off".

   WHY +27, AND WHY THE CURE CANNOT DRIFT. Above the title sits `padding-top` 62 plus the accent's
   own flow contribution (40px box, margin-block-start −4, margin-block-end 26) = 62; below it
   sits `padding-bottom` 70. So the title's centre is (124 − 70) / 2 = 27 px below the band's
   centre FOR ANY TITLE HEIGHT — the delta is independent of how tall the headline is, which is
   why it measured exactly 27.00 on all 110 cells including the 24 cells whose title wraps.
   Taking the accent OUT OF FLOW and splitting the remaining 62 + 62 + 70 = 194 px of vertical
   space EVENLY gives 97 px above and 97 px below:
     centre delta  = 0 for any title height, at any viewport, with no arithmetic left to be wrong
     band height   = 97 + T + 97 = 194 + T, which is EXACTLY 62 + 62 + T + 70 — the pill does not
                     resize by a single pixel, which is the other half of "I just don't want it
                     to be that low on the card".
   `padding-block` is used so the band's inline padding (0) is untouched.

   THE ARROW GOES UP ONE TILE, AND ONE TILE IS 32 px — NOT A NUMBER THIS LANE CHOSE. The hero's
   watermark field is `background-size: 32px 32px` (this sheet, :1973 block) and the accent glyph
   is a 32 px cell of that same field (`hero-arrow-tile.svg`, whose `d` is byte-identical to the
   founder's `wm-arrow-lr-hi.svg`). `inset-block-start: -32px` against the copy column puts the
   accent's TOP exactly one tile above the title's TOP — "one cell up", never level with the
   title, and still close to it. Nothing about the glyph, its size, its colour or its snap changes.

   RTL MIRRORS WITH NO NEW RULE, BY CONSTRUCTION AND THEN BY MEASUREMENT. The accent is placed
   with `inset-inline-start`, the LOGICAL twin of the `margin-inline-start: -4px` it replaces, so
   the −4 px origin is preserved verbatim in both directions; `marketing-rtl.css:391` already
   applies `transform: scaleX(-1)` to this pseudo-element and that is a different property, so
   nothing collides. MEASURED BEFORE on the six ar title-only routes at 1440: hero 186..1252,
   copy column right 1095, accent left 1055 = right edge − 40 — already on the mirrored side.
   ⚠ This matters more than it looks: `marketing-rtl.css` is linked BEFORE `marketing-cms.css`
   (layout.tsx:173 vs :190), so an RTL rule at EQUAL specificity would LOSE to this one. Using a
   logical property avoids needing one at all. No `marketing-rtl.css` change is authored.

   §9b — NO `var()` IS WRITTEN. Every value is a literal, for the reason lane-s13 recorded on the
   rule above: `--wm-img`/`--wm-hi` are scoped to `.page.wm-*` and 67 of 68 hero routes carry none
   of those classes, so a token here would be silently invalid on nearly every route. There is
   nothing whose scope could fail.

   CAN IT WIN. The accent is a pseudo-element with no markup, so no inline `style={{}}` can
   outrank it (`grep -n 'style={{' ArticleView.tsx` over the hero block: the five hits are on an
   anchor, a summary and three page wrappers — none on `.mkt-hero`, `.mkt-hwrap` or `.mkt-hcopy`).
   SPECIFICITY, so nothing rests on sheet order: the incumbent accent rules are
   `.page.fin.mkt .mkt-hero .mkt-hcopy::before` at (0,5,1) — :1909 and :2277 of this sheet — and
   the pinned `.page.fin.mkt .mkt-hcopy::before` (marketing.css:595) at (0,4,1). The rules below
   are (0,6,2) and (0,6,3): `:has()` takes the specificity of its most specific argument, and
   `section` adds the type the neighbouring rules at :1916 and :1973 already use for this exact
   purpose. The incumbent `.mkt-hero{padding:62px 0 70px}` (marketing.css:359) is (0,1,0). Checked
   for `!important`: `marketing.css:583` carries one, on `background` only.
   NOT INVISIBLE AGAINST ITS OWN GROUND (EG-23's third way): this is a GEOMETRY change and the
   AFTER metric is the moved rect itself, not a colour delta — the arrow keeps the ring and the
   glyph it already had.

   THE SCOPE, AND ITS HONEST LIMIT. `:has(> h1:only-child)` selects the hero whose copy column
   holds NOTHING but its title — which is what "the header is this short due to the title being
   small" is, expressed in something CSS can actually evaluate. `:has()` is the neighbours'
   construct, not a new one: 11 uses already in this sheet and 177 across the linked siblings.
   ⚠ CSS CANNOT COUNT LINES. Title-only is not byte-identical to one-line-title, and the
   difference is measured rather than glossed: of the 110 title-only cells, 86 have a one-line
   title and 24 (12 en routes, at both widths) wrap to two or three. Those 24 ARE in scope and are
   centred too — the root cause is identical on them (+27.00 px on every one) and the band height
   is preserved on them as well, so this is S14 applied to the root cause rather than to the
   reported instance. It is named here so the operator can narrow it in one line if he meant only
   the one-line case.

   S14 DENOMINATOR, derived live from the hydrated DOM and stated with its qualifier:
     74 of 131 sitemap routes carry a `.mkt-hero`; 6 carry a `.cms-hero` (out of scope, no accent).
     55 of those 74 are TITLE-ONLY — the scope — across ALL SIX locales: en 25, ar 6, bn 6, es 6,
     hi 6, mr 6. 110 cells at 1440+1280. 55 enumerated = 55 cured.
     19 are NOT title-only and are the CONTROL: /employers /recruiters /affiliates /immigration
     and their locale twins. They carry lead copy and buttons, `:only-child` excludes them by
     construction, and their BEFORE numbers (centre delta −44.14 to −70.49, arrow 66) must be
     unchanged in the AFTER read.
     ⚠ A SERVED-HTML COUNT WOULD BE A FLOOR, NOT A COUNT — this census is taken from the HYDRATED
     DOM on every route, which is why it is stated as a count.
   ============================================================================ */
.page.fin.mkt section.mkt-hero:has(.mkt-hcopy > h1:only-child) {
  padding-block: 97px;
}
.page.fin.mkt section.mkt-hero .mkt-hcopy:has(> h1:only-child) {
  position: relative;
}
.page.fin.mkt section.mkt-hero .mkt-hcopy:has(> h1:only-child)::before {
  position: absolute;
  /* The complete accent box is one 32px field cell, so its box origin—not an inner-glyph
     proxy—lands directly on the field lattice. */
  inset-block-start: -35px;
  inset-inline-start: 0;
  margin: 0;
}

/* ── THE APPROVED FRAMES' REDUCED-MOTION RULE FOR THE LIFTING BUTTONS, 2026-09-18 ───────────────────────────────────────
   Operator ruling R-2026-09-18-A (docs/knowledge/03-RULINGS-LEDGER.md): press depth "like the approved frames". Those frames
   pair every lifting button with `@media(prefers-reduced-motion:reduce){…{transition:none}}` (vault, gallery-510 frames
   "Become an Employer.html" and "Become a Live Recruiter.html"; MOTION-SYSTEM.html:417-418 keeps the broad selector).
   This sheet copied the hover and press values above (:944-962) but never the reduced-motion half. MEASURED before, over
   the 60 sitemap routes that carry these buttons, at 1280 and 390: 0 of 204 reduced-motion cells had 0s transitions;
   every one still animated its lift over 0.16s (evidence/P10-PRESS-REDUCED-MOTION-2026-09-18/, independent verifier's
   gate. The builder's first gate said "0 of 156" because its mouse press followed each link onto another page; that
   gate was fixed and re-run).
   ⚠ The frames keep the LIFT under reduced motion and drop only the ANIMATION, so this sets `transition:none` and nothing
   else. The -2px hover and 0 press are unchanged in both modes, and the gate asserts that. The ghost matches 6 elements
   (the affiliates page in all six locales), and its `::before` fade drops from 0.22s to 0s. The signup-wide selector
   matches 0 elements on today's routes; it is carried for frame parity, because the frame lists it. */
@media (prefers-reduced-motion: reduce) {
  .page.fin.mkt .mkt-hero .mkt-hbtns .btn,
  .page.fin.mkt .mkt-hero .mkt-hbtns .mkt-ghost,
  .page.fin.mkt .mkt-hero .mkt-hbtns .mkt-ghost::before,
  .page.fin.mkt .mkt-signup .btn-solid.wide,
  .page.fin.mkt .mkt-ctaband .btn-solid { transition: none; }
}

/* ──────────────────────────────────────────────────────────────────────────────────────────────
   2026-09-19 — walk-3 P-01/P-02 (docs/HANDOFF.md:595): THE LANDER BODY PARAGRAPHS HAD NO LEADING.

   MEASURED on :4300 before this rule (evidence/P10-LANDER-LEADING-2026-09-19/gate-before.txt): the
   class-less `<p>` inside `section.mkt-feat`, and inside `.pr-hero` on the pricing landers, compute
   `line-height: normal` (~1.2) at 16px, while every sibling paragraph on the same page computes
   1.5–1.6 — 120 + 8 = 128 cells of 268, on /employers /recruiters /affiliates /pricing and their four
   /es twins, at 1920/1440/1280/390. /ar, /hi, /bn and /mr read 0: their per-script sheets already set
   a value, which is why this reads as an en+es defect.

   THE CAUSE, and it is the reason no one found it by reading a sheet: `design-system.css:1376` DOES
   carry `.mkt-feat p{font-size:14.5px;line-height:1.5}` — but design-system.css IS NOT ONE OF THE 12
   SHEETS THE MARKETING ROUTES LINK (measured on /employers), so it never applies here and the initial
   value wins. The frames render with it; these routes do not.

   THE VALUE IS TRANSCRIBED, NOT MINTED (S13): 1.5 is design-system.css:1376's own figure for this
   component. `.pr-hero > p` has NO line-height in the frame sheet (design-system.css:726) and takes the
   same 1.5 on the same component family — INTERIM DEVIATION · UNRATIFIED for that half only.

   ⛔ `:where()` IS LOAD-BEARING, NOT STYLE. It pins this rule's specificity at (0,0,1), so every locale
   rule still outranks it — `[lang="ar"] .page p{line-height:1.85}` (0,2,1) keeps Arabic at 1.85 and the
   Indic sheets keep theirs. A plain `.page .mkt-feat > p` would tie at (0,2,1) and flatten Arabic by
   sheet order. The gate's AC3 measures exactly that, and its RED plant forces 1.5 on /ar to prove the
   check can fail.
   S14 DENOMINATOR: 8 routes (4 en + 4 es) x 4 widths = 32 cells carrying 128 paragraph reads; the 16
   ar/hi/bn/mr cells are the unchanged control.
   ────────────────────────────────────────────────────────────────────────────────────────────── */
:where(.page .mkt-feat) > p,
:where(.page .pr-hero) > p { line-height: 1.5; }

/* ==========================================================================
   P2-04 - THE HELP-CENTRE CHIPS NARROW THE HIGHLIGHTED ARTICLES (R-2026-09-23-P10-K, -Z).
   Behaviour in HelpTopicFilter.tsx. NO FRAME draws a pressed chip, a count or "Clear filters":
   every value below is taken from a neighbour on the same band, none is minted (S13).
     pressed fill + ink  = the Search button beside the chips (.cms-hcsearch .btn), measured on :4300:
                           rgb(26, 82, 196) / rgb(255, 255, 255) - ruling K: chips take that button's shape.
     pressed hover       = #143C96, the site's own .btn-primary:active (marketing-interaction.css:802).
     Clear filters ink   = #1A52C4, the chip focus ring and .lnk-hit rest ink; its 14px padding-block
                           with a matching negative margin is .lnk-hit's 44px hit-box spelling.
   REST IS UNCHANGED: `<a>` -> `<button class=cms-chip>` swapped in place on :4300 moved the rail 0px at
   1440, 1920 and 390 (autorun/runs/P2-04/logs/builder-BEFORE.json) - `.cms-pop button.cms-chip` above
   already resets the button. The status row renders only while a chip is pressed.
   CAN IT WIN: `.cms-hlrow{display:flex}` (above) and `.page a.cms-hlrow` beat the UA `[hidden]` rule,
   so a hidden row would still paint - the rule below restored it at (0,4,1) (removed by P2-04b). No `style={}` on the chips;
   CardLink's inline style sets only textDecoration/color, not display.
   ========================================================================== */
html .page .cms-pop button.cms-chip[aria-pressed="true"] { background: #1A52C4; color: #FFFFFF; }
html .page .cms-pop button.cms-chip[aria-pressed="true"]:hover { background: #143C96; }
.cms-pop .cms-chip-x { display: inline-block; vertical-align: -1px; margin-inline-start: 8px; }
/* P2-04b: the two rules that hid `.cms-hl` rows in place (`[hidden]`, `[data-topic-filter]`) are gone -
   nothing sets either attribute now; the matches are listed in `.cms-topic-results` below instead. */
.cms-pop-status { display: flex; gap: 14px; justify-content: center; align-items: center; margin-top: 16px; font-size: 14px; color: var(--ink-2); }
.cms-pop-clear { font: inherit; font-weight: 600; color: #1A52C4; background: none; border: 0; padding: 14px 4px; margin: -14px 0; cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
.page .cms-pop-clear:hover { color: #143C96; }
.page .cms-pop-clear:focus-visible { outline: 2px solid #1A52C4; outline-offset: 2px; }
/* P2-04b (operator-2026-09-24-HELP-FILTER-A) - THE RESULTS PANEL UNDER THE CHIPS. NO FRAME draws it.
   Geometry is the search-results region's on the same band (.cms-search-results, :780): 900px wide,
   centred, left-aligned text, rows as `.cms-hlrow` blocks. Rows are anchors, so they carry the
   a.cms-hlrow hover/focus family from marketing-motion.css; the underline/colour reset is CardLink's
   inline one (textDecoration none, colour inherit) spelled in the sheet. The status row keeps its
   centred P2-04 spelling as the panel's heading line. It renders only while a chip is pressed. */
.cms-topic-results{max-width:900px;margin:20px auto 0;text-align:start}
.cms-topic-results ul{list-style:none;margin:8px 0 0;padding:0}
.cms-topic-results .cms-pop-status{margin-top:0}
html .page .cms-topic-results .cms-hlrow{display:block}
html .page .cms-topic-results a.cms-hlrow{text-decoration:none;color:inherit}
/* P2-04c attempt 2 (operator-2026-09-24-P2-04c, operator-answer.md ~11:57, verbatim: "I want it to stay white to
   begin with. I want the white pill to be around each of the pop-ups ... the pill, upon hover and even when it's
   just sitting in white, should be narrower, so it doesn't get cut off. Let's do that instead.")
   REPLACES attempt 1's `margin-bottom:57px` under the panel - the operator ruled vertical spacing out.
   (1) WHITE PILL AT REST. The pill is the row's own hover box, `.page a.cms-hlrow::before` (marketing-motion.css
       P3-OP-51): inside the panel it is shown at rest instead of only on hover. Fill stays `--card` (the hover
       fill he calls "white"); at rest its ring is `--line`, the resting card edge of the neighbour `.cms-qcard`
       (1px solid var(--line), white fill), and hover/focus puts back the existing `--brand` ring + `--sh-card`.
       Same box in both states, so hover changes colour and shadow only (plus the family's 2px lift).
       The rows' `border-bottom` divider goes: 12px of band now shows between pills and a line through that
       gap would read as a stray rule. `<div>` rows (no href) stay flat: the family never boxes a non-link.
   (2) NARROWER. MEASURED BEFORE (logs/b2/BEFORE.json, "Apply for a job" pressed): the pill overhung the row
       by 12px each side (inset 6px -12px), spanning x258-1182 at 1440 against the notch's left edge x1163
       (-19px), and x8-760 at 768 against x679 (-81px). The pill now IS the row box horizontally (inset 6px 0)
       and the row's inline padding goes 4px -> 16px, so the title keeps its 16px from the pill's edge. From
       600px, where `.cms-hcband .cms-notch.nt-br` (:29, 89px) paints, the panel is capped at 100% - 170px of
       the band's content box: band = content + 2x20px padding, so the pill ends at
       centre + content/2 - 85 and the notch starts at centre + content/2 + 20 - 89 - i.e. 16px clear of it,
       the thin band's own gap (:3198-3199), at every width. 900px still caps it where the band is wider.
       Below 600 the notches are `display:none` (:812), so phones keep the full panel width.
   Only while a chip is pressed (the panel exists only then): the band at rest is unchanged. S14:
   `.cms-topic-results` has 1 mount (TopicResults, HelpTopicFilter.tsx) - 1 enumerated, 1 cured; the page's
   other `.cms-hlrow` rows ("Highlighted articles", search results) are untouched. */
html .page .cms-topic-results .cms-hlrow{padding-inline:16px;border-bottom:0}
html .page .cms-topic-results a.cms-hlrow::before{inset:6px 0;opacity:1;border-color:var(--line);box-shadow:none;transition:border-color .2s ease,box-shadow .2s ease}
html .page .cms-topic-results a.cms-hlrow:hover::before,html .page .cms-topic-results a.cms-hlrow:focus-visible::before{border-color:var(--brand);box-shadow:var(--sh-card)}
@media (prefers-reduced-motion: reduce) { html .page .cms-topic-results a.cms-hlrow::before { transition: none; } }
@media (min-width: 600px) { .cms-hcband > .cms-topic-results { max-width: min(900px, calc(100% - 170px)); } }
/* The count's live region: in the DOM from first paint, never painted. */
.cms-topic-live { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }

/* ============================================================================
   P2-06 · plan 2.4 · R-2026-09-23-P10-H + the operator's answer of 2026-09-24 — THE THIN CMS BANNERS
   sheet-surgeon, autorun, 2026-09-24. Operator, verbatim: "keep all content. Cut the vertical padding
   and gaps so each banner is as thin as its content allows: title on one line, subtitle wider, at
   least about 40 px of air top and bottom." Scope (his default): immigration, affiliates,
   help-center and their locale twins; NOT /employers (plan 3.2), NOT blog articles, / and /about
   unchanged. The classes are emitted ONLY on those pages (ArticleView.tsx THIN_BANNER_PAGES), because
   /immigration and /employers are structurally identical and no selector could tell them apart.

   MEASURED BEFORE on :4300 (build tHqmwHPbQzwCWlCvCgwIo; /affiliates re-measured on XclfDu0bKjnbf7EcpSoLB
   after P1-05 added "Get Started" + the `.mkt-hnote` pricing note), 1440, hydrated, fonts ready:
     .mkt-hero   /immigration 472.8  /affiliates 450.7 — padding 62/70 (marketing.css:359, (0,1,0)),
                 accent 32 + margin 30, h1 -> p 16, p -> buttons 28 (.mkt-hbtns), wrap 840
                 (.mkt.lvl2 .mkt-hwrap, (0,3,0)), p max 44ch = 472 px; /immigration's h1 = 2 lines.
     .cms-hcband /help-center 422.0 — padding 76/92, p margin-bottom 34, .cms-pop margin-top 28.
   Widest title in scope, natural single-line width at 52 px: /es/inmigracion 831 px.

   ⛔ THE ACCENT STAYS ON THE TILE GRID (P3-OP-15 above). The accent sits at the field's (1, 30)
   phase: left 161 = 1 mod 32, top 62 = 30 mod 32. So:
     · the wrap widens 840 -> 968 = 840 + 2*64 — the copy column's left edge moves by 64, which keeps
       the phase at 1 mod 32 in LTR and 9 mod 32 from the right in RTL. 968 is the SMALLEST on-grid
       width whose copy column (872) holds the widest title (831) on one line.
     · the top padding drops 62 -> 48, so the FIELD moves to y = 16 (48 mod 32). "The field moves, not
       the content", the same way P3-OP-15 did it. `background-position-y` ONLY, so the LTR `1px` and the
       RTL `right 9px` x anchors keep their own rules. `.page-inner >` lifts both rules above the RTL
       rule's (0,5,2) / (0,4,0), so nothing depends on sheet order.
   SIMULATED AFTER (served build + this block + the class, grader's own measure(), 54 of 54 scope cells):
     1440 /immigration 329.4, /affiliates 371.7, /help-center 320.0; air 48/48 on all 36 desktop cells;
     h1 one line on 36 of 36; inventories identical to before. Same numbers with this block placed FIRST in
     the cascade, so nothing depends on sheet order. The pricing note is a `.mkt-hcopy p`, so it keeps its
     16 px under the buttons and loses only its bottom margin.
   Gaps take ONE value, 16: the h1 -> p gap this hero already had (.mkt-hcopy p margin-top). The 760 px
   subtitle is the width at which every scope lead fits in 2 lines at 1440 (natural widths 701-1387 px).
   CAN IT WIN: no inline style on .mkt-hero / .mkt-hwrap / .mkt-hcopy / .cms-hcband (grep 'style={{'
   ArticleView.tsx: 5 hits, none on them). §9b: no var() is written.
   Help-center phone (<600) keeps its own 40/44 padding (already inside the 40 px floor); only the two
   gaps shrink there.
   FRAME: /immigration and /affiliates have NO FRAME (Become an Affiliate is PNG-only). The help-centre
   band is Help center.html's 76/92, overridden by ruling H plus the operator's answer — a ruling, not an interim
   deviation. Row: P2-06.
   ============================================================================ */
.page .page-inner > .mkt-hero.mkt-hero--thin { padding-top: 48px; padding-bottom: 48px; }
.page.mkt .mkt-hero--thin .mkt-hwrap { max-width: 968px; }
.page.fin.mkt .mkt-hero.mkt-hero--thin .mkt-hcopy::before { margin-bottom: 16px; }
.page.mkt .mkt-hero--thin .mkt-hcopy p { max-width: 760px; margin-bottom: 0; }
.page.mkt .mkt-hero--thin .mkt-hbtns { margin-top: 16px; }
.page.fin.mkt .page-inner > section.mkt-hero.mkt-hero--thin::before,
.page .page-inner > .mkt-hero.mkt-hero--thin > .arrow-spot { background-position-y: 16px; }
.page .page-inner > .cms-hcband.cms-hcband--thin > p { margin-bottom: 16px; }
.page .cms-hcband--thin .cms-pop { margin-top: 16px; }
@media (min-width: 600px) {
  .page .page-inner > .cms-hcband.cms-hcband--thin { padding-top: 48px; padding-bottom: 48px; }
}


/* ── P2-07 (plan 2.5, research §3): THE DEEP-PAGE BREADCRUMB `.cms-bc` ─────────────────────────────
   Rendered by CmsBreadcrumbNav.tsx on the 11 help-category and 10 blog-detail pages ONLY (21 of the
   37 en CMS rows in the sitemap; the other 16 and every listing render none — cmsBreadcrumb.ts).
   The first four declarations are design-system.css:2619-2622 VERBATIM, the rules both frames link
   (`HC Category.html`, `Blog Details.html`); design-system.css is not served on marketing pages, so
   they are vendored here exactly as the file header says the About rules were. `--ink` resolves:
   it is declared on `.page` (marketing.css:685) and the nav renders inside `.page-inner`.
   ⚠ ONE VALUE IS RE-DERIVED, NOT COPIED: the frame's horizontal padding. What the frame DRAWS with
   `158px` is the first crumb flush under the logo — rendered at 1440 (Playwright, file://, fonts
   blocked, 2026-09-24): HC Category `.logo-wm` x=157, first crumb x=158; Blog Details the same logo.
   Here the nav sits inside `.page-inner` and the logo is not at 157: measured on :4300
   /help-applications, logo box = `.page-inner` left + 60px at 1280/1366/1440/1920 (100/143/180/420).
   `158px` would draw the crumb at x=278, 98px off the logo; `60px` keeps it under the logo at every
   desktop width, which is the relationship the frame shows.
   The markup is an `<ol>` of `<li>`s (APG breadcrumb pattern), so the list resets and the `li` row
   (chevron + crumb, the frame's same 8px gap) are the only additions. */
.cms-bc{display:flex;align-items:center;gap:8px;font-size:14px;padding:26px 60px 4px;color:var(--ink)}
.cms-bc.c{justify-content:center}
.cms-bc .cur{color:var(--mut,#6E6E73)} /* F2FIX: was #9AA0AC (2.5:1); --mut #6E6E73 is 5.1:1 on white and 4.8:1 on --soft */
.cms-bc svg{color:var(--mut,#6E6E73);flex:none}
.cms-bc{margin:0;list-style:none;min-width:0}
.cms-bc li{display:flex;align-items:center;gap:8px;margin:0;padding:0;flex:none;min-width:0}
.cms-bc li.cms-bc-leaf{flex:0 1 auto;overflow:hidden}
/* F2R2: the current crumb gives way with an ellipsis at EVERY width, not only on a phone (a 428px leaf pushed docW to 938 at 768).
   Same treatment the phone block below gives it; the full name stays in the `title` attribute and in the <h1> directly below. */
.cms-bc .cur{display:block;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.cms-bcnav{min-width:0;max-width:100%}
.cms-bc a{color:inherit;text-decoration:none}
.cms-bc a:hover{text-decoration:underline;text-underline-offset:2px}
/* Below 1280 the logo sits at x=20 (measured at 1100 and 800) and so do the page's gutters (the
   `.cms-2col`/`.cms-csec` family above, and the hero h1's measured x=20 at 390). */
@media (max-width: 1279.98px) {
  .cms-bc { padding: 20px 20px 4px; }
}
/* PHONE — "collapse on mobile" (research §3). The trail stays on ONE line: the leading crumbs keep
   their width and the current crumb, which the `<h1>` directly below repeats in full, gives way
   with an ellipsis. The full text stays in the DOM, so the accessible name is never truncated.
   Crumbs keep the 16px phone floor `.page li` already applies (marketing-responsive.css, MW-03), and
   each link gets a 44×44 hit area (docs/rules/MOBILE.md) by the padding/negative-margin pair this
   sheet uses for `.cms-search > input`, so the row's geometry does not move. */
@media (max-width: 599.98px) {
  .cms-bc { padding: 16px 20px 4px; }
  .cms-bc li.cms-bc-leaf { flex: 0 1 auto; overflow: hidden; }
  .cms-bc .cur { display: block; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
  .cms-bc a { display: inline-block; min-width: 44px; text-align: center; padding: 13px 0; margin: -13px 0; }
}
/* NW-08 (2026-10-02, MW-03 44x44). MEASURED on :4300 (autorun/runs/NW-08/probe/hit-before.txt):
   at 390 the phone rule above gives each crumb a 46px box but only 6-7 of 9 hit points resolve to it,
   because the next sibling `section.mkt-hero` is positioned and paints over the box's bottom 9px;
   at 600-1023 no rule applied and the crumbs were 20-24px tall (83 of 290 L2 offenders, all at 768).
   Cure: the same padding/negative-margin pair up to 1023.98 (inline pair too, so short crumbs such as
   "Blog" 34px reach 44 without moving), plus position/z-index so the transparent band wins hit-testing.
   Nothing new is painted; >=1024 untouched. No transition or animation is added. */
@media (max-width: 1023.98px) {
  .cms-bc a { display: inline-block; padding: 13px 5px; margin: -13px -5px; position: relative; z-index: 1; }
}
@media (max-width: 599.98px) {
  .cms-bc a { padding-inline: 0; margin-inline: 0; }
}

/* ===== P3-01 (2026-09-24) — THE ABOUT HERO'S FOUR TILTED CHIP CARDS (R-2026-09-23-P10-G, -Y) =====
   G: "Build `Candidate/CMS Pages/About Us` exactly". The frame draws two `.cms-jobcard` (tl -8deg,
   tr +7deg) and two `.cms-srchcard` (ml +6deg, mr -6deg) inside `.cms-hero`; this sheet's header
   excluded them in 2026-08. They are vendored here, one block per design-system.css selector, and
   every selector is under `.cms-hero .cms-chipcard`, so nothing outside the About hero can match.
   Markup: `AboutHeroCards.tsx`, mounted by ArticleView on the EN About page only.

   ⛔ ONE RULE IS DELIBERATELY NOT VENDORED — design-system.css:2689
      `.cms-chipcard i{display:block;height:7px;border-radius:4px;background:#EDF1F8}`.
   Ruling Y: it "paints every `<i>` in those cards as a placeholder bar — an export glitch, not intent".
   In the search cards those `<i>` ARE the "What"/"Where" labels, so it drew a light-blue strip across
   them. The operator, shown the three options (autorun/runs/P3-01/preview-top-line.html), answered
   "p3-01 remove them": strips gone, and NO new blue top line added. The label rule below also resets
   height/background/radius, so the strip cannot come back if design-system.css is ever served here.

   ⚠ POSITIONS — INTERIM DEVIATION from the frame's tops (66/58/448/436px), measured, not chosen by
   eye. The frame's hero is full-bleed, carries a 44px arrow above the h1 and ONE lead paragraph; this
   hero is 1200px wide, has no arrow (not this task) and TWO lead paragraphs. At the frame's tops the
   job cards cross the h1 and the search cards cross the second paragraph. The horizontal offsets
   (118/108/148/138px) and the angles are the frame's; the job cards are raised so they end above the
   h1, and the search cards are anchored to the hero's BOTTOM edge at the distance the frame leaves
   (644.7 - 448 - card height), so they sit below the text the way the frame's do.
   Desktop only (min-width 1280px, the width this sheet's hero switches to its desktop padding/h1 at):
   below it the text column reflows and the cards would cover it. P3-06 designs phone/tablet. */
@media (min-width: 1280px) {
  .cms-hero .cms-chipcard{position:absolute;width:250px;background:#fff;border-radius:10px;box-shadow:0 14px 32px rgba(20,30,80,.10);padding:13px 15px;text-align:start;z-index:1}   /* :2684 */
  .cms-hero .cms-chipcard b{font-size:12px;display:block}   /* :2685 */
  .cms-hero .cms-chipcard.tl{inset-inline-start:118px;top:30px;transform:rotate(-8deg)}   /* :2692, top 66 -> 30 (above) */
  .cms-hero .cms-chipcard.tr{inset-inline-end:108px;top:22px;transform:rotate(7deg)}   /* :2693, top 58 -> 22 (above) */
  .cms-hero .cms-chipcard.ml{inset-inline-start:148px;bottom:20px;transform:rotate(6deg)}   /* :2694, bottom-anchored */
  .cms-hero .cms-chipcard.mr{inset-inline-end:138px;bottom:32px;transform:rotate(-6deg)}   /* :2695, bottom-anchored */
  .cms-hero .cms-jobcard{width:330px;padding:15px 17px}   /* :2962 */
  .cms-hero .cms-jobcard .cms-jc-age{position:absolute;inset-inline-end:15px;top:13px;color:var(--mut);font-size:11.5px}   /* :2963 */
  .cms-hero .cms-jobcard .jc-row{display:flex;gap:10px;align-items:center}   /* :2964 */
  .cms-hero .cms-jobcard .jc-logo{width:36px;height:36px;border-radius:8px;font-size:10px}   /* :2965 */
  /* DFIX-NAMES-320 (founder 2026-11-01): no real company logo in a marketing mockup. The card shows a fictional company with a
     neutral monogram tile (36x36, radius 8, unchanged); the AA pair #3A4256 on #EEF1F7 is 8.6:1. Replaces the Sprig PNG (LG-01). */
  .cms-hero .cms-jobcard .jc-logo.jc-mono{background:#EEF1F7;color:#3A4256;font-size:15px;font-style:normal}
  .cms-hero .cms-jobcard .jc-co{font-size:11.5px;color:var(--ink-2)}   /* :2966 */
  .cms-hero .cms-jobcard .jc-title{font-size:13.5px;font-weight:700;margin-top:2px;color:var(--ink)}   /* :2967 + :650 */
  .cms-hero .cms-jobcard .jd-meta{display:flex;align-items:center;color:var(--mut);font-size:11px;margin-top:9px;gap:5px}   /* :2968 + :654 */
  .cms-hero .cms-jobcard .jd-meta svg{width:12px;height:12px}   /* :2969 */
  .cms-hero .cms-jobcard .cms-jc-acts{display:flex;align-items:center;gap:8px;margin-top:11px}   /* :2970 */
  .cms-hero .cms-jobcard .cms-jc-acts .btn-primary{font-size:11px;padding:7px 13px;border-radius:8px;gap:5px}   /* :2971 */
  .cms-hero .cms-jobcard .cms-jc-acts .btn-primary svg{width:11px;height:11px}   /* :2972 */
  .cms-hero .cms-jc-chip{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:8px;padding:6px 11px;font-size:11px;font-weight:600;color:var(--ink-2)}   /* :2973 */
  .cms-hero .cms-jc-chip svg{width:12px;height:12px}   /* :2974 */
  .cms-hero .cms-srchcard{width:250px}   /* :2975 */
  .cms-hero .cms-srchcard b{font-size:12.5px}   /* :2994 */
  .cms-hero .cms-scf{display:flex;gap:9px;align-items:center;padding:9px 2px;border-bottom:1px solid var(--line)}   /* :2995 */
  .cms-hero .cms-scf svg{color:var(--mut);flex:none;width:14px;height:14px}   /* :2996 */
  .cms-hero .cms-scf i{display:block;font-style:normal;font-size:10px;font-weight:700;color:var(--ink);height:auto;background:none;border-radius:0}   /* :2997 + the Y reset */
  .cms-hero .cms-scf span{display:block;font-size:10.5px;color:var(--mut);margin-top:2px}   /* :2998 */
  .cms-hero .cms-scb{width:100%;margin-top:11px;font-size:12px;padding:9px 0;border-radius:8px;display:flex;align-items:center;justify-content:center;gap:6px}   /* :2999 */
}
@media (max-width: 1279.98px) {
  .cms-hero .cms-chipcard{display:none}
}

/* ============================================================================
   P3-02b — THE "LIVEREC AT A GLANCE" STATS SIT IN ONE ROW ON PHONES. 2026-09-24.
   OPERATOR 2026-09-24 ~13:46 (autorun/decisions/STATS-PHONE.md): "for the stat line on mobile,
   we're going to have to just make it smaller so it can fit horizontally on the screen." Phone only.
   NO FRAME draws the band below 600px (the About Us frame is a fixed 1683px canvas); the RULING is
   the specification. Task floor: numbers >= 22px, labels >= 11px, labels may wrap to two lines.

   MEASURED BEFORE on :4300 (autorun/runs/P3-02b/lead-probe/probe-before.json, isMobile+hasTouch):
   12 of 12 cells (6 routes x 390x844, 360x780) STACKED — four `.n` tops 93-100px apart, every tile
   left 20, `.n` 34px, `.l` 14px — because the `max-width:599.98px` block above sets
   `.cms-stats{grid-template-columns:1fr}`.
   S14 DENOMINATOR: one component (`StatsBand`), 24 tiles on 6 routes (/about and its five locale
   twins); `.cms-stats` exists nowhere else. All 24 are cured by this one block.

   ⚠ WHY A LATER BLOCK AND NOT AN EDIT OF THE ONE ABOVE: `marketing-critical.css` inlines rule lines
   from this sheet verbatim and the extractor's provenance check needs them unchanged; at equal
   specificity this later block wins. It sits at the END of the sheet so no header rule moves a
   line (marketing-header-port.css cites this sheet by line number).

   SIZES, MEASURED by injecting this block over :4300 on all 12 cells: four tracks of 78px (360) /
   85px (390); `.n` 24px keeps `50K+` inside its track with 0px overflow (scrollWidth == clientWidth
   on 48 of 48 figures); `.l` 11px wraps to at most 2 lines on 48 of 48 labels. The first try with
   a 20px gutter and an 8px gap put "Live Recruiters activos" (/es @360) on THREE lines — hence the
   16px gutter the phone hero already uses (`.cms-hero` padding 16px, above) and a 6px gap.
   `minmax(0,1fr)` stops a long word from widening one track and pushing the fourth tile off screen.
   The blue `+`/`%` rule (`.cms-stat .n span`) and the count-up's numeral reservation are untouched:
   StatsBand re-measures the final width at mount/resize, so it reserves the 24px width here.
   Dividers stay off (phones keep `border-left:0`, above). 600px and up: not reached.
   ============================================================================ */
@media (max-width: 599.98px) {
  .cms-stats { grid-template-columns: repeat(4, minmax(0, 1fr)); column-gap: 6px; padding-left: 16px; padding-right: 16px; }
  .cms-stat .n { font-size: 24px; }
  .cms-stat .l { font-size: 11px; line-height: 1.35; margin-top: 4px; }
}

/* ============================================================================
   P3-04 · R-2026-09-23-P10-G — the About testimonial rail and the bottom logo strip as ONE-ROW
   marquees (motion: components/marketing/cms/AboutMarquee.tsx). Only ArticleView's `cms` layout
   emits `.cms-qmarq` / `.cms-brandsmq` (/about + its 5 locale twins), so nothing here can reach
   another route.

   ⛔ WHY THE WRAP RULES ABOVE ARE OVERRIDDEN, NOT DELETED: the `max-width:1279.98px` and the
   1280-1587.98 blocks wrap `.cms-qrail` and stretch `.cms-qcard` to 100% because the rail used to
   OVERFLOW the page (measured 154 px of sideways scroll at 1280). The rail is now a CLIPPING
   viewport, so that overflow cannot happen and the ruling's "single row" wins at every width;
   the cards keep the frame's 300/340 px at every width (`.cms-qcard.mid{width:340px}`, :58).
   Those blocks are also inlined in marketing-critical.css; this sheet is <link>ed render-blocking
   (app/(marketing)/layout.tsx:193), so no wrapped frame paints. Specificity (0,2,0)/(0,3,0) beats
   the (0,1,0)/(0,2,0) wrap rules regardless of order.

   FULL-BLEED WITHOUT 100vw: the rail breaks out of `.cms-csec`'s side padding (170 px, or
   `calc(25% - 70px)` from marketing-alignment.css:854, or 20 px on small screens) to the section's
   width via container units — `50% - 50cqi` is exactly minus one side's padding when the padding
   is symmetric, which all three are. 100vw would add a scrollbar's width of sideways scroll on a
   classic-scrollbar desktop.

   THE BOX: 10 px above for the drawn hover lift (40 + 10 = the frame's 42 + 8 above the cards),
   26 px below for its shadow; the dots' 28 px
   margin drops to 10 px so rail-bottom -> dots stays the frame's 8 + 28 = 36 px.
   ============================================================================ */
.page-inner:has(.cms-qmarq) { container-type: inline-size; }
.cms-qrail.cms-qmarq {
  display: block; overflow: hidden;
  /* At 1440 About's content rail is 1200px wide, while the employer/affiliate page shells fill
     the viewport. Center the shared rail in its content column and keep the authority's width. */
  width: min(100cqi, 1200px);
  margin: 40px calc(50% - min(50cqi, 600px)) 0;
  padding: 10px 0 26px;
}
/* The About page becomes full-bleed just above 1440px; its shared rails do too. */
@media (min-width: 1441px) {
  .cms-qrail.cms-qmarq {
    width: 100cqi;
    margin-inline: calc(50% - 50cqi);
  }
}
.cms-mq-track { display: flex; width: max-content; will-change: transform; }
.cms-qmarq .cms-mq-track { gap: 22px; align-items: stretch; }
.cms-mq-set { display: contents; }
.cms-qmarq .cms-qcard { width: 300px; max-width: none; }
.cms-qmarq .cms-qcard.mid { width: 340px; }
.cms-qmarq + .cms-qdots { margin-top: 10px; }
/* The frame draws `.cms-brands{width:100%;margin:26px 0 0}` (design-system.css:2743) — one strip
   the page's width. Here the strip is scaled to the band's width, never upscaled past the PNG's own
   1574 px and never below 720 px (at 390 a band-wide strip would draw its logos ~30 px tall).
   ⛔ THE SEAM: the PNG ends in a CUT logo — measured by column scan of brandstrip.png (1574×130,
   white ground): logo runs at x 41-194, 349-475, 685-727, 913-1087, 1217-1371 and a partial
   1548-1573. Tiled whole, that half-logo butts into the next copy's first logo. Each copy therefore
   shows the LEFT 1500 px (`object-fit:cover` + left anchor + a 1500:130 box — no clipping wrapper):
   the seam gap becomes 1500 - 1371 + 41 = 170 px, the strip's own rhythm (inner gaps 155/210/186/
   130/177, mean 172). Height is unchanged: width x 1500/1574 at 1500:130 = the full strip's height. */
.cms-brandsmq { overflow: hidden; margin: 26px 0 0; container-type: inline-size; }
.cms-brandsmq .cms-brands {
  display: block; flex: none; margin: 0; max-width: none;
  width: calc(clamp(720px, 100cqi, 1574px) * 1500 / 1574); height: auto; aspect-ratio: 1500 / 130;
  object-fit: cover; object-position: left center;
}

/* ===== P3-05 (2026-09-24) — THE ABOUT HERO JOB CARDS' DIAGONAL ARROW TURNS ON HOVER (R-2026-09-23-P10-G) =====
   G: "Cards: the diagonal arrow shifts from top-right to bottom-right on hover, as on the homepage
   'Building career journeys' cards." The only diagonal arrows on About are the two "Quick apply" ↗
   svgs (`M7 7h10v10` + `M7 17 17 7`) in the hero `.cms-jobcard`s (AboutHeroCards.tsx, block P3-01
   above). S14 DENOMINATOR: 1 component, 2 cards (tl, tr), 1 route (EN /about) — 2 of 2 cured here.
   VALUES TRANSCRIBED, NOT MINTED, from the homepage accordion the ruling names:
     marketing.css:193 `.acc .ico{…transition:transform .3s ease…}`
     marketing.css:198 `.jgrid .acc:hover .ico{transform:rotate(90deg)…}`  (↗ rotated 90° = ↘)
   The colour half of :198 is NOT carried: the arrow sits on a filled `.btn-primary`, where --brand
   would paint it the button's own colour (invisible). Rest state is untouched (no transform at rest),
   so the at-rest render is unchanged. Same desktop-only scope as the cards (hidden below 1280px).
   Appended at the END of the sheet so no line cited elsewhere moves. */
@media (min-width: 1280px) {
  .cms-hero .cms-jobcard .cms-jc-acts .btn-primary svg{transition:transform .3s ease}
  .cms-hero .cms-jobcard:hover .cms-jc-acts .btn-primary svg{transform:rotate(90deg)}
}
@media (min-width: 1280px) and (prefers-reduced-motion: reduce) {
  .cms-hero .cms-jobcard .cms-jc-acts .btn-primary svg{transition:none}
}

/* ============================================================================
   P3-03 — /about "See how LiveRec works" is a PLAYABLE clip at the frame's size with the
   frame's own play button (R-2026-09-23-P10-G, -T). Markup: ArticleView `case 'video'` ->
   `.cms-vid.cms-vid--play` > video.cms-vid-media + button.cms-vid-play (AboutVideo.tsx).
   Every rule names `--play` or a `cms-vid-*` class, so the frame's own `.cms-vid > img`
   (CMSPagesAboutUsFrame) is never reached. Reach: /about only (the `video` kind; 0 of 127
   DB rows carried `vid` before P3-03 seeded this band).

   SIZE — THE FRAME'S RULE, NOT A NUMBER: the frame's `.cms-csec` pads 170 px each side of a
   viewport-wide canvas, so its video is (viewport - 340) wide at 1359:566 — measured
   1100 x 458.13 @x170 at 1440 and 1580 x 658.03 at 1920 (runs/P3-03/check/lead-frame2/3.txt).
   The live page caps `.page` at 1200 up to 1440 (and pads `.cms-csec` 25%-70 above it), so
   the block breaks out of its column symmetrically. `100vw` would count a classic scrollbar
   and open a sideways scroll, so the width comes from `main` as an inline-size container
   (cqw = main's content width = the viewport less any scrollbar). Only `main` elements that
   hold this band become containers (0 position:fixed descendants in /about's main measured
   at 1440/1920/1280/1024/390, so the containment moves nothing else).
   Below 1280 the live gutters are 20 px (marketing-critical.css) and the block simply fills
   the column at the same ratio — NO FRAME below 1440 (fixed canvas); correctness only.

   BUTTON — the disc is painted in the poster (video.png: centre 679,293.5, ~60 px across in
   1359x566), so the button sits on those fractions and is sized to the disc, never below the
   44 px touch target. Transparent at rest (the drawn disc IS the button); keyboard focus draws
   the page's white 2px ring over a brand halo so it reads on the light paper and the dark
   monitor either side of the disc. */
main:has(.cms-vid--play){container-type:inline-size}
.cms-vid--play{position:relative;margin-top:38px}
.cms-vid--play .cms-vid-media{display:block;width:100%;height:auto;aspect-ratio:1359/566;object-fit:cover;border-radius:10px;background:#1B2233}
.cms-vid-play{position:absolute;left:calc(100% * 679 / 1359);top:calc(100% * 293.5 / 566);width:max(44px, calc(100% * 60 / 1359));aspect-ratio:1;transform:translate(-50%,-50%);margin:0;padding:0;border:0;border-radius:50%;background:transparent;cursor:pointer;-webkit-tap-highlight-color:transparent}
.cms-vid-play:focus-visible{outline:2px solid #FFFFFF;outline-offset:2px;box-shadow:0 0 0 6px var(--brand)}
@media (min-width: 1280px) {
  .cms-vid--play{margin-inline:calc(50% - 50cqw + 170px)}
}

/* P3-06 · R-2026-09-23-P10-AD(4) — ABOUT US BODY TEXT ON PHONE AND TABLET (MW-03, docs/rules/MOBILE.md:51
   "Body text is at least 16px"). NO FRAME below 1440: AD(4) has P10 design these widths itself, following
   the approved mobile header and the type rules.

   ⛔ THE FLOOR ALREADY EXISTED AND LOST. marketing-responsive.css (`@media (max-width:1279.98px)
   { .page p, .page li { font-size:16px } }`) REACHES every paragraph on /about, at (0,1,1) — the same
   specificity as the frame rules above (:34 `.cms-hero-in>p` 15.5 · :38 `.cms-2col-tx p` 14.5 · :46
   `.cms-csec>p` 14.5 · :49 `.cms-why-head p` 14.5 · :53 `.cms-why-card p` 13.5 · :59 `.cms-qcard p` 13.5
   · :71 `.cms-cta-in p` 15). That sheet is bundled; this one is <link>ed after it, so the frame value won
   on order. The FAQ answer `.mkt-a` (marketing.css:452, 14px) is a <div>, so the floor never reached it.
   MEASURED 2026-09-24 on :4300 at 320/390/768/1024 (isMobile): 37 of 37 texts under 16px, 13.5-15.5px.

   SCOPE. `.page-inner:has(> .cms-hero)` — only ArticleView's `layout === 'cms'` branch emits `.cms-hero`,
   and it is served on 6 routes: /about and its 5 locale twins (S14 count in ArticleView.tsx at the notch).
   The same `cms-*` classes on other pages keep their rendering; they are not this item.
   The 8 selectors are the frame's own (37 texts in 9 groups at 390; `.cms-qcard p` covers `.mid` too), named one by one rather than a blanket `p`, so the decorative
   hero chip cards and stat labels keep their sizes. `max-width:1024px` per the task contract, so the
   approved 1440/1920 rendering cannot move. Line heights are unitless in every source rule, so leading
   scales with the size; only the size changes. Headings, colours and spacing are untouched.
   At the END of the sheet so no line above moves (marketing-header-port.css cites this sheet by line);
   it wins by specificity (0,3,1) over the frame rules' (0,1,1), not by order. */
@media (max-width: 1024px) {
  .page-inner:has(> .cms-hero) .cms-hero-in > p,
  .page-inner:has(> .cms-hero) .cms-csec > p,
  .page-inner:has(> .cms-hero) .cms-2col-tx p,
  .page-inner:has(> .cms-hero) .cms-why-head p,
  .page-inner:has(> .cms-hero) .cms-why-card p,
  .page-inner:has(> .cms-hero) .cms-cta-in p,
  .page-inner:has(> .cms-hero) .mkt-a { font-size: 16px; }
  /* The shared About carousel is also used outside ArticleView (/employers and /affiliates).
     Its review text keeps the same phone-size floor wherever the shared rail appears. */
  .page-inner:has(.cms-qmarq) .cms-qcard p { font-size: 16px; }
}

/* ============================================================================
   P2-12 — THE CORNER CUT-OUTS COME BACK ON PHONES AND TABLETS, SIZED DOWN, CLEAR OF THE COPY.
   builder (sheet-surgeon), autorun 2026-09-25. Ruling operator-2026-09-25-NOTCH-MOBILE, verbatim:
   ~05:30 "the corner cut outs belong on mobile too"; ~05:38 "cutout on the top left and bottom right is a
   design element and must be present on both mobile and tablet view"; ~05:51 frame-built pages keep their
   frame at computer width; ~05:52 /recruiter "stays as the frame shows".
   THIS REVERSES five earlier rules that hid the notch ("decoration never eats copy", 2026-08-24/29/31):
   :242 (.cms-cta <600), :812 (.cms-hcband/.cms-band <600), :907 (.mkt-hero <600), :1159 (.cms-cta <1280),
   :1160 (.mkt-ctaband .cta-notch <600) and the .cms-hero <600 rule — each now a one-line pointer here.
   Their principle still holds and is kept by SIZE and PADDING instead of by hiding: no notch box meets
   text, a link, a button or an input at 360/390/768/1024 (grader check 5, elementFromPoint + text line boxes).
   MEASURED BEFORE (:4300, BUILD WpCm2gsl26PQtXM5qsdho, hydrated DOM, builder/census.mjs): 290 notches on 86 of
   122 sitemap routes, 0 visible at 390 — .mkt-hero 146 · .mkt-ctaband 96 · .cms-cta 24 · .cms-hcband 12 ·
   .cms-hero 12. S14: all five families are cured here, together; none is left hidden.
   ⚠ marketing-critical.css still carries GENERATED copies of the old display:none (its :225/:227/:228) and is
   inlined BEFORE this sheet, so (1) restates display:block explicitly — equal specificity, later wins — rather
   than relying on the deletions above. When the critical extract is next regenerated the copies go away.
   FRAME: the notch geometry at >=1280 is the frames' and is NOT touched — every rule below is inside
   max-width:1279.98px except (4), which restates today's computer-width value for the one host that gains
   notch children. NO FRAME governs 360-1279 (CLAUDE.md §13: the corpus canvases are 1200-1700 wide), so the
   phone/tablet sizes are this ruling's "about 40-56px on phones", taken from the neighbours: 40 = the base
   `.cms-notch` size (:112), 56 = the band family's next step, radius 12 = the hero family's own.
   §9b: `var(--page-bg)` on the new employer-hero notches resolves because they descend from `.page` (read in
   the browser: getPropertyValue('--page-bg') non-empty on all of them).
   ============================================================================ */
/* (1) RESTORE — every family, every width below the computer column. */
@media (max-width: 1279.98px) {
  .mkt-hero .cms-notch, .cms-hero .cms-notch, .cms-band .cms-notch, .cms-hcband .cms-notch,
  .cms-cta .cms-notch, .mkt-ctaband .cta-notch { display: block; }
}
/* (2) SIZE — tablets: the two over-sized families step down (at 768 and 1024 the Help Center's 89px pair
   covered the h1 box and the "Set availability" chip — red/output-run2.txt check 5). Help Center 89 → 40: its
   thin band is held at 48px padding from 600px by ruling H + the operator's answer (:3219), so the notch fits
   the band rather than the band the notch — 40 leaves the 8px gutter. About CTA 71 → 48 (no ruling on its
   height; padded to 56 in (3)). .mkt-hero / .cms-hero keep their 52x53 and .cta-notch its 34. */
@media (max-width: 1279.98px) {
  /* 2026-10-05 OPERATOR ORDER ("the corner cutout ... more rounded ... like the homepage banner"): cut-out inner radius = the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 12px (.cms-hcband tablet 40x40, LTR + RTL lines, and the About CTA --s21-nr); width/height unchanged. Overrides the frame's 12px (.cms-hcband tablet 40x40, LTR + RTL lines, and the About CTA --s21-nr) by that order. NO ledger row. File-only pass: NOT built, NOT measured in a browser. */
  .cms-hcband .cms-notch.nt-tl { width: 40px; height: 40px; border-bottom-right-radius: 20px; }
  .cms-hcband .cms-notch.nt-br { width: 40px; height: 40px; border-top-left-radius: 20px; }
  .cms-cta.cms-nfx .cms-notch.nt-tl { width: 48px; height: 48px; border-bottom-right-radius: 20px; }
  .cms-cta.cms-nfx .cms-notch.nt-br { width: 48px; height: 48px; border-top-left-radius: 20px; }
  [dir="rtl"] .cms-hcband .cms-notch.nt-tl { border-bottom-left-radius: 20px; }
  [dir="rtl"] .cms-hcband .cms-notch.nt-br { border-top-right-radius: 20px; }
  .cms-cta.cms-nfx:has(> .cms-notch) { --s21-nw: 48px; --s21-nh: 48px; --s21-nr: 20px; }
}
/* phones: every .cms-notch family 40x40 (the .cta-notch keeps its 34). */
@media (max-width: 599.98px) {
  .mkt-hero .cms-notch.nt-tl, .cms-hero .cms-notch.nt-tl, .cms-band .cms-notch.nt-tl,
  .cms-hcband .cms-notch.nt-tl, .cms-cta.cms-nfx .cms-notch.nt-tl { width: 40px; height: 40px; border-bottom-right-radius: 20px; }
  .mkt-hero .cms-notch.nt-br, .cms-hero .cms-notch.nt-br, .cms-band .cms-notch.nt-br,
  .cms-hcband .cms-notch.nt-br, .cms-cta.cms-nfx .cms-notch.nt-br { width: 40px; height: 40px; border-top-left-radius: 20px; }
  .page .mkt-hero:has(> .cms-notch), .cms-band:has(> .cms-notch), .cms-hero:has(> .cms-notch),
  /* 2026-10-05 OPERATOR ORDER ("the corner cutout ... more rounded ... like the homepage banner"): cut-out inner radius = the home hero's 20px (marketing.css `.page.fin.home .p-hero::before{border-bottom-right-radius:20px}`), was 12px (--s21-nr on phones, all four polygon families; the phone radius was already 20); width/height unchanged. Overrides the frame's 12px (--s21-nr on phones, all four polygon families; the phone radius was already 20) by that order. NO ledger row. File-only pass: NOT built, NOT measured in a browser. */
  .cms-cta.cms-nfx:has(> .cms-notch) { --s21-nw: 40px; --s21-nh: 40px; --s21-nr: 20px; }
}
/* P10-13 (2026-10-06): the phone block above sets the PHYSICAL bottom-right / top-left radius, and in RTL that
   stacked on the mirrored radius from marketing-rtl.css:134-137, so each Arabic cut-out had TWO rounded corners
   (measured /ar/hawl-liverec at 390: nt-tl radii 0 0 20 20, nt-br 20 20 0 0; /about 0 0 20 0 and 20 0 0 0).
   Mirror the phone block: in RTL the physical corner it rounds goes back to square. */
@media (max-width: 599.98px) {
  [dir="rtl"] .mkt-hero .cms-notch.nt-tl, [dir="rtl"] .cms-hero .cms-notch.nt-tl, [dir="rtl"] .cms-band .cms-notch.nt-tl,
  [dir="rtl"] .cms-hcband .cms-notch.nt-tl, [dir="rtl"] .cms-cta.cms-nfx .cms-notch.nt-tl { border-bottom-right-radius: 0; border-bottom-left-radius: 20px; }
  [dir="rtl"] .mkt-hero .cms-notch.nt-br, [dir="rtl"] .cms-hero .cms-notch.nt-br, [dir="rtl"] .cms-band .cms-notch.nt-br,
  [dir="rtl"] .cms-hcband .cms-notch.nt-br, [dir="rtl"] .cms-cta.cms-nfx .cms-notch.nt-br { border-top-left-radius: 0; border-top-right-radius: 20px; }
}
/* (3) PADDING — where a band's copy starts closer to its edge than the notch is deep, the band gets the
   notch's depth plus a gutter of at least 8px on the two notched edges, at that width only (the contract's
   "give the band more padding at that width — never hide the notch"). Block padding only: the notch sits in a
   corner and the h2/h1/button boxes span the band's full content width, so no horizontal inset can clear them.
   MEASURED BEFORE (builder/q2.mjs, worktree sheet over :4300; first grader run builder/run2.txt, check 5):
     .mkt-ctaband  <600     padding 30px 20px (marketing-responsive.css:249), 34px notch → cn-tr over the h2,
                            cn-bl over the button, 56px2 each, on 8 of 8 banded routes at 390 and 360
     .cms-cta      600-1279 padding 40px 28px, 56px notch → nt-tl over the h2 (448px2); now 48px → 56px pad
                   <600     padding 32px 20px, 40px notch → nt-tl over the h2, nt-br over the button (160px2)
     .cms-hcband   600-1279 padding 48px (ruling H, kept) — cured by the 40px notch in (2), not by padding
                   <600     padding 40px 16px 44px, 40px notch → 0px clear on top, 4px under
   /recruiter's band is `.lr-mkt .mkt-ctaband` (recruiter-marketing.css:490, 48px 56px at every width) and is
   excluded by name: the operator keeps that page as its frame shows (~05:52). */
@media (max-width: 599.98px) {
  .mkt-ctaband:has(> .cta-notch):not(.lr-mkt .mkt-ctaband) { padding-top: 44px; padding-bottom: 44px; }
  .cms-cta.cms-nfx:has(> .cms-notch) { padding-top: 48px; padding-bottom: 48px; }
  .cms-hcband:has(> .cms-notch) { padding-top: 48px; padding-bottom: 48px; }
}
@media (min-width: 600px) and (max-width: 1279.98px) {
  .cms-cta.cms-nfx:has(> .cms-notch) { padding-top: 56px; padding-bottom: 56px; }
}
/* (4) THE EMPLOYER HERO (/employers, .mkt-hero--frame, EmployerHero.tsx) gains the pair on phones and tablets
   ONLY — the operator asked for it (~05:38) and ruled its computer width stays the approved frame (~05:51),
   which draws no notch on this hero. At >=1280 the two spans are display:none and the s21 polygon that
   `.page .mkt-hero:has(> .cms-notch)` would now reach is cancelled back to today's `none`, so the
   computer-width hero is unchanged. Below 1280 it inherits the .mkt-hero sizes above (52x53 / 40x40).
   ⚠ P2-12b (operator-2026-09-25-NOTCH-EMPLOYER-UNDO) WITHDREW the employer half: EmployerHero.tsx renders no
   notch at any width now and its corners are squared in marketing-employer.css (9). The rule stays because
   it still binds the other `.mkt-hero--frame` host, ArticleView's CMS signup hero, which renders the pair. */
@media (min-width: 1280px) {
  .page .mkt-hero.mkt-hero--frame > .cms-notch { display: none; }
  .page .mkt-hero.mkt-hero--frame:has(> .cms-notch),
  [dir="rtl"] .page .mkt-hero.mkt-hero--frame:has(> .cms-notch) { clip-path: none; }
}

/* P2-16 — NO BUTTON SITS NEXT TO A CORNER CUT-OUT: every button at least 16px clear of every notch.
   builder (sheet-surgeon), autorun 2026-09-26. Ruling operator-2026-09-26-CUTOUT-CLEAR (09:11, on a 390 shot
   of "Contact support" beside a bottom-left cut-out), verbatim: "Never allow the support button or any button
   to be next to the cutout on the corners." Clear = 16px box-to-box on x OR y (P5-07b's accepted measure).
   CAUSE, one on every offending band: the button is the band's LAST child and spans the bottom notch's column,
   so its vertical clearance is simply (padding-bottom − notch height). (3) above set that padding to the
   notch's depth plus an 8px gutter — enough for text, not for the 16px a button now needs.
   MEASURED BEFORE (:4300, BUILD OEYI6VuFe9nCHI8Ydo8bs, lead-probe + check/baseline.json, 79 routes × 1920/
   1440/768/390/360): 48 offending pairs in 40 cells on 18 routes; 0 at 1440/1920.
     .mkt-ctaband   <600   44 − 34 = 10   /press /immigration /help-center /faq /contact /employers /blog + 7 /ar
     /affiliates    600-1023  40 − 34 = 6 ;  <600  32 − 34 = −2 (the button overlapped the notch)   + /ar twin
     .cms-hero, .cms-cta.cms-nfx  <600   48 − 40 = 8   /about + /ar/hawl-liverec (3 buttons)
     .cms-hcband--thin  600-1279  48 − 40 = 8   "Set availability" chip, /help-center + /ar/markaz-almusaeada
   CURE: padding-bottom = notch + 16, on those bands, at those widths, BOTTOM ONLY — no cut-out is resized or
   moved, no button changes size, text, order or x (a padding cannot move them sideways), the top gutter the
   heading needs is (3)'s and untouched, and every rule sits under max-width 1279.98px so the computer-width
   frames are byte-identical. Written as calc(notch + 16px) so the arithmetic is on the page.
   The Help Center PHONE band starts at 400px, not 0: its chip row wraps differently per width and locale, and
   a scan of 391-599px every 8px (builder/hc-scan.txt, candidate applied) put a chip beside the bottom notch at
   423-495px only (/ar first at 423, en at 487-495; gy 8); at 360 and 391-415 the last chip sits alone and
   centred, 52px (en) / 54px (ar) clear, so the band keeps (3)'s 48px there.
   Ruling H (R-2026-09-23-P10-H, thinner banners) is kept: the thin band grows 8px at tablet width only.
   /affiliates: the /ar twin's own padding is (0,8,x) in AffiliateHome.module.css, so this rule is (0,9,0)
   and carries both directions (padding-bottom is direction-neutral). /recruiter stays excluded by name (3).
   NO FRAME governs 360-1279 (CLAUDE.md §13). No var() is written (§9b n/a). CAN IT WIN: no inline style on
   these bands (ArticleView.tsx / AffiliateHome.tsx 'style={{' — none on .mkt-ctaband/.cms-*). */
@media (max-width: 599.98px) {
  .mkt-ctaband:has(> .cta-notch):not(.lr-mkt .mkt-ctaband) { padding-bottom: calc(34px + 16px); }
  .cms-cta.cms-nfx:has(> .cms-notch), .cms-hero:has(> .cms-notch) { padding-bottom: calc(40px + 16px); }
  .page.fin.mkt.portal-affiliate.aff-home .mkt-cta.aff-cta .mkt-ctaband.notched { padding-bottom: calc(34px + 16px); }
}
@media (min-width: 400px) and (max-width: 599.98px) {
  .page .page-inner > .cms-hcband.cms-hcband--thin:has(> .cms-notch) { padding-bottom: calc(40px + 16px); }
}
@media (min-width: 600px) and (max-width: 1023.98px) {
  .page.fin.mkt.portal-affiliate.aff-home .mkt-cta.aff-cta .mkt-ctaband.notched { padding-bottom: calc(34px + 16px); }
}
@media (min-width: 600px) and (max-width: 1279.98px) {
  .page .page-inner > .cms-hcband.cms-hcband--thin:has(> .cms-notch) { padding-bottom: calc(40px + 16px); }
}

/* P3-05b · operator-2026-09-25-WHY-CENTER (05:37 and 05:52, with 1440 screenshots): "why people choose liverec
   should be centered here in the about us page and then this text here should be under that centered header" ·
   "for this section in about us i want the bold heading to be centered and this part needs to be the body to that
   header" ("How an interview happens here").
   FRAME OVERRIDE, stated not chosen: `Candidate/CMS Pages/About Us.html` draws `.cms-why-head` as heading-left /
   sub-right at `1fr 1fr` (design-system.css:2710, mirrored at :48 above). The operator's words override it for
   these two About Us sections only.
   S14: `.cms-why-head` is rendered at ONE site (ArticleView.tsx, the cards/steps branch); MEASURED 2026-09-25 on
   :4300 it appears 2x on /about ("How an interview happens here", "Why people choose LiveRec") and 0x on the other
   7 guard routes. "Moving countries for work" is `.cms-2col`, so it keeps heading-left / text-right (P3-21).
   SCOPE. `.page-inner:has(> .cms-hero)` (same scope as the phone-type floor above): /about and its 5 locale twins;
   any other page's `.cms-why` keeps the frame's two columns.
   THE VALUES ARE THE NEIGHBOUR'S, NOT NEW ONES: the page's own centred section `.cms-csec` draws h2 -> p with
   `margin-top:14px` and caps the line at `max-width:760px; margin:auto` (:46 above). One track keeps the grid, so
   the head's margin-bottom (46px / 28px under 1280) and everything below it are untouched; under 1280 the head was
   already one column with an 18px gap, so there only the alignment changes. (0,3,0) beats the (0,1,0) frame rules. */
.page-inner:has(> .cms-hero) .cms-why-head { grid-template-columns: 1fr; text-align: center; }
.page-inner:has(> .cms-hero) .cms-why-head p { max-width: 760px; margin: 0 auto; }
@media (min-width: 1280px) {
  .page-inner:has(> .cms-hero) .cms-why-head { gap: 14px; }
}

/* ST-78 · operator-2026-10-03-WHY-COLUMNS-CENTRE (screenshot of /about 'Why people choose LiveRec'): "the three
   paragraphs or columns don't seem to be centered with the header and the body above. It feels like it's more so
   out to the left ... double-check ... if it isn't, correct it."
   MEASURED 2026-10-03 (blind walk 8, then re-measured with text-node rectangles on :4300 build w3GHRrN6sfp805QUcRvcm):
   the three equal `1fr` tracks fill a box much wider than the heading, the text is left-aligned, and the empty
   space at the line ends piles up on the right. The boxes were exactly centred; the VISIBLE TEXT sat left of the
   heading's centre by 13.8px at 1920, 6.0 at 1440 and 1280, 6.7 at 1024 (titles further: 21-54px).
   FIX: size each column to its text, capped at 320px, and centre the row: `fit-content(320px)` tracks +
   `justify-content: center`. The caps are the paragraph measure the 1920 layout already had (344 -> 320), so the line
   counts are unchanged at every width (4/4/4 at 1920, 6/6/5 at 1440-1024). Text centre now within 1.8-2.9px of the
   heading's at 1920, 1440, 1280 and 1024; page overflow 0. Gap 48px (was 34): the 34px variant left 6.1px at 1024 and
   re-wrapped the middle column at 1440. >= 1024 only: 768 and 390 stack to one column and were already within 2.5px.
   SCOPE: `.page-inner:has(> .cms-hero)` = /about and its locale twins, the same scope as the heading rule above;
   no other page's `.cms-why-row` can match. (0,3,0) beats the frame's (0,1,0) `.cms-why-row`. */
@media (min-width: 1024px) {
  .page-inner:has(> .cms-hero) .cms-why-row { grid-template-columns: repeat(3, fit-content(320px)); justify-content: center; column-gap: 48px; }
}

/* P3-21 · operator-2026-09-25-ABOUT-GLOBE-MOCK — ABOUT US: A WHITE GLOBE WITH LIVEREC-BLUE LAND UNDER "Moving
   countries for work" (AboutGlobe.tsx; ArticleView adds `.cms-2col--globe` + `.cms-2col-hd` to that ONE section
   of the EN About row only). NO FRAME draws a globe: the operator's words are the specification.
   LAYOUT, operator 14:02 verbatim: "Move the header higher up so it fits the globe. Keep the body in the same
   position. You can move the body a little bit to the right. You don't want the globe being too small."
   So at >= 1280px the section's top padding drops by 48px (82 -> 34: the heading rises 48px) and the text
   column takes the same 48px back as a top margin, so the body's first line stays exactly where it was
   (measured before: C+85 at 1280/1440/1920) and the body does not move sideways at all. The heading keeps the
   frame's 420px track; the globe fills that track's width under it at 340px — the largest size whose bottom
   still lands near the body's last line (C+335) rather than trailing a tall empty gap under the text.
   Under 1280 the grid is one column: heading, globe (the column's width, capped at 360px), then the text.
   SCOPE: every selector names a class only this section carries, so no other section or page can match;
   (0,2,0) beats the frame's (0,1,0) `.cms-2col` padding, and marketing-alignment.css:857 sets left/right only. */
.cms-2col-hd{display:flex;flex-direction:column;align-items:flex-start;min-width:0}
.cms-globe{position:relative;width:100%;max-width:360px;aspect-ratio:1/1;margin-top:20px}
.cms-globe-fx{position:absolute;width:0;height:0;overflow:hidden}
/* The duotone (AboutGlobe.tsx) turns cobe's dark land dots LiveRec blue on a white sphere. `touch-action:pan-y`
   keeps a vertical swipe scrolling the page on a phone while a sideways drag turns the globe. */
.cms-globe-cv{display:block;width:100%;height:100%;filter:url(#lr-about-globe-duo);cursor:grab;touch-action:pan-y}
/* P3-21c · operator-2026-09-25-GLOBE-ALIGN, 16:57 verbatim: "take the body of it and bring it down and have it
   horizontally align with the globe ... make the header on one line." NO FRAME. MEASURED before (grader before.json,
   identical at 1280/1440/1920, y from the grid top C): heading 2 lines 420x94 at C+34 (its one-line width is 425px);
   globe 340x340 at C+136, centre C+306; body C+85..C+335, centre C+210.
   · The heading stays on one line (nowrap). At 425px it passes its 420px track by 5px into the 60px gap, 55px short
     of the body column, so it touches no text; its size, weight, left edge and top do not change.
   · A one-line heading is 47px shorter, so the globe's gap under it grows 8 -> 55px: the globe stays at C+136, size kept.
   · The text column's top margin grows 48 -> 144px (+96 = C+306 - C+210), so the body's centre sits on the globe's
     centre; left edge, width and line breaks are untouched and its bottom (C+431) stays above the globe's (C+476),
     so the section's height does not change.
   · WHY (0,2,1) ON THE HEADING: marketing-alignment.css `.page h2 { text-wrap: pretty }` is (0,1,1) and linked AFTER
     this sheet; `text-wrap` is a shorthand that resets text-wrap-mode to `wrap`, so a (0,1,1) nowrap here lost and the
     heading still broke after "countries" (attempt 1, measured on :4300: text-wrap-mode "wrap", 2 lines, globe pushed
     to C+183, section 559px). The doubled class wins without !important; text-wrap-style `pretty` still applies. */
@media (min-width: 1280px) {
  .cms-2col.cms-2col--globe{padding-top:34px}
  .cms-2col.cms-2col--globe h2{white-space:nowrap}
  .cms-2col--globe > .cms-2col-tx{margin-top:144px}
  .cms-2col--globe .cms-globe{width:340px;max-width:100%;margin-top:55px}
}
/* P3-21d · operator-2026-09-25-GLOBE-PLANES — planes on arcs into the US and a radar pulse at each landing
   (AboutGlobe.tsx places every element each frame from the globe's own rotation). NO FRAME: the operator's words
   and his "option 1" are the specification. The stage fills the box exactly, so the canvas keeps the box's size
   and nothing shifts; cobe 2 wraps the canvas in its own full-size div inside it. The flight layer clips at the
   box so a ring growing near the limb cannot widen a phone's page (a transform still counts toward overflow).
   Plane and rings are LiveRec blue #2164F4 themselves: they sit outside the canvas's duotone filter.
   DRAWING AREA (operator 2026-09-26, option A: "only enlarge the drawing area so arcs and planes are never cut"):
   an arc lifted off the sphere and the plane flying it reach past the box, and a canvas the box's size cut them in
   straight lines. `.cms-globe-draw` holds canvas + flight layer in a square AboutGlobe.tsx insets by -pad px on
   every side (centred on the box; cobe's scale shrinks by the same ratio, so the painted sphere keeps its size and
   place; never past the viewport's edge, so no phone scrolls sideways). It takes no pointer: the stage — exactly
   the box — keeps the drag (cursor and touch-action move there from the canvas), and the heading beside the globe
   stays clickable through the margin. The flight layer still clips, now at the drawing area's edge. */
.cms-globe-stage{position:absolute;inset:0;cursor:grab;touch-action:pan-y}
.cms-globe-draw{position:absolute;inset:0;pointer-events:none}
.cms-globe-draw .cms-globe-cv{cursor:auto;touch-action:auto}
.cms-globe-fly{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.cms-globe-plane{position:absolute;left:0;top:0;overflow:visible;transform-origin:50% 50%;will-change:transform}
.cms-globe-ring{position:absolute;left:0;top:0;width:22px;height:22px;box-sizing:border-box;border:2px solid #2164F4;border-radius:50%;opacity:0;transform-origin:50% 50%;will-change:transform,opacity}
/* P3-21g · operator-2026-09-26-GLOBE-CLEANUP, option A — each flight draws itself: a start dot at A and a line
   growing behind the plane (one SVG under the rings and planes, in drawing-area px; AboutGlobe.tsx sets its viewBox
   and every path each frame), both fading after the landing. cobe draws no arcs or city dots any more. One blue,
   #2164F4; the start dot keeps the plane's thin white outline so it reads on the blue land. */
.cms-globe-lines{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible}
/* P3-21h · operator-2026-09-27-GLOBE-OCEAN: "that line is currently black and id like for it to be liverec light blue to
   complment the rich blue of the plane". The line alone moves to the brand's --viz-tint #A7BEF0 (the darker of its two
   light blues, so it still shows on the white sphere and its pale limb); the plane, start dot and rings stay #2164F4. */
.cms-globe-line{fill:none;stroke:var(--viz-tint,#A7BEF0);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}
.cms-globe-start{fill:#2164F4;stroke:#fff;stroke-width:1.2px}
/* P3-21j · operator 2026-09-27 ("make hawaii show up better"): the Hawaiian islands' land dots, which cobe's map is too
   coarse to draw, on a canvas of their own laid exactly over cobe's (same square, same 2x buffer) and under the flights.
   AboutGlobe.tsx paints them already blue (cobe's land-dot sum, then the duotone's colour), so no filter here. */
.cms-globe-isl{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none}

/* P3-21b · operator-2026-09-25-RECRUITER-VISUAL-A — ABOUT US: OPTION A'S PRODUCT MOCK UNDER "What a Live Recruiter
   is" (AboutRecruiterMock.tsx; ArticleView adds `.cms-2col--recruiter` + `.cms-2col-hd` to that ONE section of the
   EN About row only). NO FRAME draws this visual: the operator picked option A of
   autorun/runs/RECRUITER-VISUAL/recruiter-visual-options.html by name, so its `.mock-a` block is the specification —
   same geometry (410x262 box; profile 290 wide at 0,0 rotated -2deg; thread 330 wide at 34,70 rotated +1.2deg;
   status at 6,214 rotated -1.5deg), same copy, and the page's own tokens (--brand, --line, --mut, --ink-2,
   --accent-bg, --font-head/--font-body) rather than new colours. White cards with the About banner chip cards'
   kind of soft blue shadow.
   LAYOUT, operator 14:02 verbatim: "make sure you move that header. Keep the body in the same position ... Move the
   header higher up". Identical to P3-21's globe section above so the two sections lay out alike: at >= 1280px the
   top padding drops 82 -> 34 (the heading rises 48px) and the text column takes the 48px back as a top margin, so
   the body's first line stays at C+85 and does not move sideways. The mock fills the heading's 420px track at its
   design size (410px), not shrunk to a gap.
   SCALING WITHOUT A TRANSFORM: every length inside the mock is in em and the mock's font-size is
   min(10px, 100cqw / 41) against the heading cell, so 1em = 10px (the preview's exact pixels) wherever the cell
   is >= 410px wide — computer and tablet — and on a phone the whole drawing, text included, shrinks in proportion
   to the column instead of overflowing it or being cut. Line breaks therefore match the preview at every width.
   SCOPE: every selector names a class only this section carries; no motion is declared, so reduced motion is
   already static. */
.cms-2col--recruiter > .cms-2col-hd{container-type:inline-size}
.cms-recmock{position:relative;flex:none;width:41em;height:26.2em;margin-top:2.2em;font-size:min(10px, calc(100cqw / 41));
  font-family:var(--font-body);line-height:1.55;color:var(--ink);text-align:start}
.cms-recmock-card{position:absolute;background:#fff;border:1px solid var(--line);border-radius:1.4em;box-shadow:0 1.4em 3.4em rgba(20,40,120,.10)}
.cms-recmock-prof{inset-inline-start:0;top:0;width:29em;white-space:nowrap;padding:1.2em 1.4em;display:flex;gap:1em;align-items:center;transform:rotate(-2deg)}
.cms-recmock-av{width:2.714em;height:2.714em;border-radius:50%;background:linear-gradient(135deg,#5B8CFF,var(--brand));color:#fff;
  font-family:var(--font-head);font-weight:800;font-size:1.4em;line-height:1;display:flex;align-items:center;justify-content:center;flex:none}
.cms-recmock-av.sm{width:2.4em;height:2.4em;font-size:1em}
.cms-recmock-av.cand{background:linear-gradient(135deg,#9AA8C7,#6E7C9E)}
.cms-recmock-who{display:block;min-width:0}
.cms-recmock-who b{display:block;font-family:var(--font-head);font-weight:700;font-size:1.4em}
.cms-recmock-who span{font-size:1.15em;color:var(--mut);display:flex;align-items:center;gap:.435em}
.cms-recmock-dot{width:.609em;height:.609em;border-radius:50%;background:#1F9D55;box-shadow:0 0 0 .261em rgba(31,157,85,.15);flex:none}
.cms-recmock-thread{inset-inline-start:3.4em;top:7em;width:33em;padding:1.2em;transform:rotate(1.2deg)}
.cms-recmock-msg{display:flex;gap:.8em;align-items:flex-end;margin-bottom:.8em}
.cms-recmock-msg:last-child{margin-bottom:0}
.cms-recmock-b{font-size:1.2em;line-height:1.45;padding:.667em .917em;border-radius:1em 1em 1em .333em;background:#F1F4FA;color:var(--ink-2);max-width:20.833em}
.cms-recmock-msg.me{flex-direction:row-reverse}
.cms-recmock-msg.me .cms-recmock-b{background:var(--brand);color:#fff;border-radius:1em 1em .333em 1em}
.cms-recmock-status{inset-inline-start:.6em;top:21.4em;white-space:nowrap;padding:.8em 1.2em;display:flex;gap:.7em;align-items:center;
  font-size:1em;font-weight:600;color:var(--ink-2);transform:rotate(-1.5deg)}
.cms-recmock-step{display:flex;align-items:center;gap:.435em;font-size:1.15em}
.cms-recmock-chk{width:1.667em;height:1.667em;border-radius:50%;background:var(--brand);color:#fff;font-size:.783em;line-height:1;
  display:flex;align-items:center;justify-content:center;flex:none}
.cms-recmock-chk.next{background:var(--accent-bg);color:var(--brand)}
.cms-recmock-sep{width:1.4em;height:2px;background:var(--line);flex:none}
/* P3-21c · INFERRED from operator 14:02 "both sections laid out the same way": the globe section's body now centres
   on its globe (above), so this body centres on the mock. MEASURED before (1280/1440/1920): heading already one line
   at C+34; mock 410x262 at C+103, centre C+234; body C+85..C+310/311, centre C+198. The text column's top margin grows
   48 -> 84px (+36), putting the body's centre on the mock's; its last line (C+347) stays above the mock's bottom
   (C+365), but the last paragraph's 18px bottom margin now passes the mock, so the section grows ~4px (401 -> 405,
   measured with these rules injected on :4300 at 1280/1440/1920). */
@media (min-width: 1280px) {
  .cms-2col.cms-2col--recruiter{padding-top:34px}
  .cms-2col--recruiter > .cms-2col-tx{margin-top:84px}
}

/* P3-05c · operator-2026-09-25-CTA-CENTRE — THE CALL-TO-ACTION CARDS ("Looking for a role that sponsors?",
   "Start your journey with LiveRec"): CONTENT CENTRED, A DEEPER TINT AND A THIN BORDER. Every `.cms-cta` on the
   site — MEASURED 2026-09-25 (autorun/runs/P3-05c/builder/probe.mjs over :4300, hydrated, dpr 1): 12 cards on the 6
   About routes, 2 per route, 72 of 72 card-cells at 1920/1440/1280/768/390/360. Operator 13:00 verbatim: "I would
   like it to be centered. It looks off because it is left-aligned … is the card too faint?"; 13:03 "applied
   anywhere applicable"; look chosen "Deeper tint + thin border". The frame (CMSPagesAboutUsFrame.tsx) drew the card
   left-offset beside a watermark; the operator overrode it, so these rules are an operator deviation from the frame.
   The vendored lines at the top of this sheet (:67-72, :117) are NOT edited; this block outranks them.
   (1) CENTRED. Today `.cms-cta-in{margin-left:244px}` (:69, mirrored to margin-right by marketing-rtl.css:165)
       keeps a 244px lane for the 130px watermark, so at 1440 the text starts at x 614 in a card spanning 290-1150.
       The lane goes; the block KEEPS ITS WIDTH (measured 456px at 1280/1440, 696px at 1920, 428px on /ar at 768 —
       the only width below 1280 where the RTL reserve still applies) and is centred with auto margins, so no line
       re-breaks and the card's height and every band below it stay where they are. Below 600px on /ar,
       marketing-responsive.css:173 (0,3,1) already releases the reserve and still wins; block width there = 100%.
   (2) WATERMARK. The 7%-opacity arrow (.cms-cta-wm) is removed from paint at every width (already display:none
       below 600px and in saver mode). The cleaner of the two options: it can never sit under centred text.
   (3) DEEPER TINT. The fill moves one step down the brand tint family, --tint-panel #EEF3FF -> --tint #E3ECFE (the
       highlighted review card is ALSO #EEF3FF, so "the same as the highlight" could not make it deeper; lead
       contract, INFERRED). No new colour. §9b: getPropertyValue('--tint') = #e3ecfe and ('--tint2') = #b1c6f5 on
       72 of 72 card-cells read. Contrast on #E3ECFE: body ink-2 and heading ink both stay AA (graded by check 6).
   (4) THIN BORDER. 1px --tint2 #B1C6F5 as an INSET box-shadow, not a `border`: a border would add 2px to the card
       and move every band under it. The shadow follows the card's 20px rounded corners and is clipped by the S21
       notch polygon; the two notches (z-index 4, page ground) paint over it at their corners. So the line does not
       stop dead at a notch, each notch carries the same 1px line on its two INNER edges (logical sides, so /ar's
       mirrored notches get it on the correct sides) — the outline then traces the whole cut-out step, rounded
       corner included. The notches are already box-sizing:border-box (measured, 72/72), so their size, position
       and page-ground fill are unchanged. */
.page .cms-cta{background-color:var(--tint);box-shadow:inset 0 0 0 1px var(--tint2)}
.page .cms-cta .cms-cta-wm{display:none}
.page .cms-cta .cms-cta-in{margin-left:auto;margin-right:auto;text-align:center}
.page .cms-cta .cms-cta-in h2,.page .cms-cta .cms-cta-in p{text-align:center}
.page .cms-cta .cms-cta-in .cms-ctas{justify-content:center}
.page .cms-cta .cms-notch.nt-tl{border-inline-end:1px solid var(--tint2);border-block-end:1px solid var(--tint2)}
.page .cms-cta .cms-notch.nt-br{border-inline-start:1px solid var(--tint2);border-block-start:1px solid var(--tint2)}
@media (min-width: 1280px) {
  .page .cms-cta .cms-cta-in{width:calc(100% - 244px)}
}
@media (min-width: 600px) and (max-width: 1279.98px) {
  [dir="rtl"] .page .cms-cta .cms-cta-in{width:calc(100% - 244px)}
}

/* P2-17 · operator-2026-09-27-PRESS-CTA-CENTER (10:38, on a /press PHONE shot of "Press enquiry?": "< header and
   body centered here"), scope "anywhere applicable" like P3-05c above; operator-answer 14:10 "P2-17: A" = PHONES ONLY,
   under 600px, one shared rule; at 600px+ the approved row (words left, button right) stays exactly as it is.
   WHY P3-05c MISSED IT: this is the CMS section `cta` block (ArticleView.tsx, `div.mkt-cta > .mkt-ctaband`), not a
   `.cms-cta` card. S14 DENOMINATOR, MEASURED 2026-09-27 (curl `<div class="mkt-cta"` over the 143 sitemap routes of
   :4300): 36 of 143 routes, 1 band each — press, contact, help-center, faq, blog, immigration x en/es/hi/mr/bn/ar;
   ArticleView is the only emitter (1 source hit). The employer, affiliate and recruiter bands are `section.mkt-cta`
   and the `div.` in the selector keeps them out, as the answer requires.
   MEASURED BEFORE (lead probe, 390 and 360, hydrated): 36/36 bands' h2 + .mkt-ctasub compute `text-align: start`
   with line centres up to 71px off the band's centre. Below 600px the band is already a stack (marketing-responsive
   .css:249 wraps it; the button is 100% wide), so `.mkt-ctatext` spans the band and centring its lines centres them
   in the card. text-align moves no box: button, band height, notches and the P2-16 16px clearance are untouched.
   `margin-inline:auto` on the sub only matters if its 74ch cap (marketing.css:417) ever binds — never on a phone.
   Logical `center` needs no [dir="rtl"] twin. NO FRAME governs <600 (CLAUDE.md §13). No var() (§9b n/a). CAN IT WIN:
   no inline style on the band (ArticleView.tsx), and no other sheet sets text-align on these three selectors. */
@media (max-width: 599.98px) {
  div.mkt-cta > .mkt-ctaband .mkt-ctatext,
  div.mkt-cta > .mkt-ctaband .mkt-ctatext h2,
  div.mkt-cta > .mkt-ctaband .mkt-ctasub { text-align: center; }
  div.mkt-cta > .mkt-ctaband .mkt-ctasub { margin-inline: auto; }
}

/* P3-21e · operator-2026-09-25-FLOAT — ABOUT US: THE RECRUITER MOCK'S THREE CARDS AND THE BANNER'S FOUR TILTED CARDS FLOAT
   GENTLY IN PLACE. Operator 18:33 verbatim: "I want the cards to be as if they're in water, but there are no water things,
   just shifting ... just floating in their positions. I don't want it to be too static. Same thing with the banner for About
   Us: for the four cards that sit on the About Us banner, make sure that they kind of flow a little bit, not too much."
   NO FRAME draws motion here (the About Us frame and option A of RECRUITER-VISUAL are still pictures); the ruling is the spec.
   DENOMINATOR, 7 cards: .cms-recmock-prof/-thread/-status (every width) + .cms-hero .cms-chipcard.tl/.tr/.ml/.mr (>= 1280px;
   display:none below, P3-01, so no animation exists there).
   HOW: two infinite ease-in-out loops per card on the INDIVIDUAL `translate` and `rotate` properties (composited, no layout),
   so each card's `transform: rotate(tilt)` rest rule above is never touched and its tilt is the loop's resting point. Each
   card has its own two periods (6.2-9.8s) and negative delays, so no two cards move in step and the two loops of one card
   drift in and out of phase with each other — a slow shift, never a repeating bob.
   ONE-WAY DRIFTS, MEASURED (autorun/runs/P3-21e/builder/gaps-before.txt, :4300 at rest, 1280/1440/1920): tl sits 5.6px above
   the h1's text and 7.7px under the hero's top; tr 2.4px under the hero's top (the hero is overflow:hidden); ml 7.4px above
   the hero's bottom; mr 9.4px below the second lead paragraph. So each banner card drifts only AWAY from its tight side (tl
   and ml up 4px, tr and mr down 4px, 2px sideways) and rotates only toward flat (<= 0.6deg), which shrinks its bounding box —
   no gap above ever closes. The mock's profile and thread overlap by only 4px (3.5px at 360): the profile drifts down, the
   thread up, both rotate slightly steeper (<= 0.5deg), so that overlap only grows. Mock lengths are em (1em = 10px wherever
   the cell is >= 410px), so the drift shrinks with the drawing on a phone (0.35em = 3.5px desktop, ~3.0px at 390).
   This supersedes the P3-21b note above that "no motion is declared".
   P3-21f · operator-2026-09-26-FLOAT-STRENGTH (option A of autorun/decisions/FLOAT-STRENGTH.md, "about 3x stronger: 8-12 px
   of drift and up to 1.5 degrees of turn, same slow 6-10 s rhythm"): 10:43 he did not see it moving at 2-4px / 0.6deg. Same
   periods, delays, one-way directions and media arms; only the 14 keyframe peaks grew. Transform-origin is each card's centre,
   so the drift of its centre is the translate alone. ROOM on each card's one-way axis (gaps above, 1280/1440; 1920 >= 127px)
   -> CHOSEN peak (translate | its length | turn):
     tl  up 7.7 to the hero top, >= 110px sideways -> 10px -3px (mostly sideways) | 10.4px | +1.3deg toward flat
     tr  down 16.3 to the text                     -> -4px 9px                    |  9.8px | -1.3deg toward flat
     ml  up 21.4 to the text, 96.9 right           -> 4px -9px                    |  9.8px | -1.3deg toward flat
     mr  down 19.4 to the hero bottom, 107 left    -> -4px 9px                    |  9.8px | +1.3deg toward flat
     prof/thread/status: .35em .85em (prof down, thread up, status up) = .92em = 9.2px at 1em=10px, 7.9px at 390, 7.2px at
     360; turn 1.1deg steeper (not 1.3: a steeper tilt grows the box, thread/status +6.2/+6.7px tall at 1.1deg).
   MEASURED with these peaks injected over :4300 (autorun/runs/P3-21f/builder/fx-run.txt, 120 samples/12 s per width):
   banner min gap to text 5.7px, to the hero edge 2.4px (= rest); mock prof/thread overlap min 8.7px vs 4 at rest (6.0 vs
   3.5 at 360), min gap to its text 13.1px; box growth <= 7.1px; step <= .55px per 100ms.
   SAFETY: declared only under prefers-reduced-motion: no-preference, so reduced motion keeps the exact rest pose. Data saver
   does NOT stop it: operator S9 (marketing-saver.css ~:75) — the saver saves bytes, never motion; this costs 0 bytes. */
@keyframes cms-float-tl-t{0%,100%{translate:0 0}50%{translate:10px -3px}}
@keyframes cms-float-tr-t{0%,100%{translate:0 0}50%{translate:-4px 9px}}
@keyframes cms-float-ml-t{0%,100%{translate:0 0}50%{translate:4px -9px}}
@keyframes cms-float-mr-t{0%,100%{translate:0 0}50%{translate:-4px 9px}}
@keyframes cms-float-tl-r{0%,100%{rotate:0deg}50%{rotate:1.3deg}}
@keyframes cms-float-tr-r{0%,100%{rotate:0deg}50%{rotate:-1.3deg}}
@keyframes cms-float-ml-r{0%,100%{rotate:0deg}50%{rotate:-1.3deg}}
@keyframes cms-float-mr-r{0%,100%{rotate:0deg}50%{rotate:1.3deg}}
@keyframes cms-float-prof-t{0%,100%{translate:0 0}50%{translate:.35em .85em}}
@keyframes cms-float-thread-t{0%,100%{translate:0 0}50%{translate:-.35em -.85em}}
@keyframes cms-float-status-t{0%,100%{translate:0 0}50%{translate:.35em -.85em}}
@keyframes cms-float-prof-r{0%,100%{rotate:0deg}50%{rotate:-1.1deg}}
@keyframes cms-float-thread-r{0%,100%{rotate:0deg}50%{rotate:1.1deg}}
@keyframes cms-float-status-r{0%,100%{rotate:0deg}50%{rotate:-1.1deg}}
@media (prefers-reduced-motion: no-preference) {
  .cms-recmock-prof{animation:cms-float-prof-t 7.4s ease-in-out -1.3s infinite,cms-float-prof-r 9.2s ease-in-out -4.1s infinite}
  .cms-recmock-thread{animation:cms-float-thread-t 8.6s ease-in-out -5.2s infinite,cms-float-thread-r 6.8s ease-in-out -2.4s infinite}
  .cms-recmock-status{animation:cms-float-status-t 6.2s ease-in-out -3.6s infinite,cms-float-status-r 8s ease-in-out -.7s infinite}
}
@media (min-width: 1280px) and (prefers-reduced-motion: no-preference) {
  .cms-hero .cms-chipcard.tl{animation:cms-float-tl-t 8.2s ease-in-out -2.2s infinite,cms-float-tl-r 9.8s ease-in-out -6.3s infinite}
  .cms-hero .cms-chipcard.tr{animation:cms-float-tr-t 9.4s ease-in-out -6.8s infinite,cms-float-tr-r 7.2s ease-in-out -1.9s infinite}
  .cms-hero .cms-chipcard.ml{animation:cms-float-ml-t 7.6s ease-in-out -4.7s infinite,cms-float-ml-r 9s ease-in-out -3.3s infinite}
  .cms-hero .cms-chipcard.mr{animation:cms-float-mr-t 8.8s ease-in-out -.9s infinite,cms-float-mr-r 6.6s ease-in-out -5.5s infinite}
}

/* ===== P6-06b (2026-09-26) — ABOUT/AFFILIATES AVATARS + LOGO STRIP INSIDE <picture> (W5 M-1, M-3a) =====
   The review-card avatars (`ReviewCard`, /about + locale twins + /affiliates) and the About logo strip
   now render through MarketingPicture: `<picture><source type=image/webp><img></picture>`. Both imgs
   were FLEX ITEMS (`.cms-qa` row: avatar + name, gap 10px; the strip in `.cms-mq-track`), and every rule
   that sizes them targets the img. Each <picture> is therefore a FLEX BOX of its own that shrink-wraps
   the img: same box, same place, to the pixel (36x36 avatar; the strip's own width x height).
   ⛔ NOT `display:contents` (attempt 1, reverted here): AboutMarquee measures its period as the distance
   between the two sets' FIRST CHILDREN (`sets[0].firstElementChild`), which for the strip is now the
   <picture>. A `contents` box has no rect -> period 0 -> the strip stood still (verified 2026-09-26,
   translate3d(0px) over 2 s at 1440 and 390; 76-79 px/2 s before). A real box keeps the period = strip width.
   The empty <source> becomes a 0 px flex item INSIDE the picture (no gap there), so no `source` rule is
   needed — under `contents` it was an item of `.cms-qa` and added a second 10 px gap.
   SAVE-DATA: marketing-saver.css:95/:108 hide `.cms-qa img`; the now-empty picture would keep that 10 px
   gap before the name, so both saver arms hide the whole picture, as the img was hidden before. */
.cms-qa picture, .cms-brandsmq picture { display: flex; flex: none; }
html[data-saver="on"] .cms-qa picture { display: none; }
@media (prefers-reduced-data: reduce) {
  html:not([data-saver="off"]) .cms-qa picture { display: none; }
}

/* ===== P4-07f (2026-09-27) — ABOUT BLOCKS ON THE LOCALE TWINS: THE TILTS MIRROR IN RTL =====
   operator-2026-09-27-ABOUT-ANIM-ALL-LOCALES: the banner chip cards and the Live Recruiter mock now draw on all five
   About twins (CmsPageView/aboutLocales.ts). Their PLACES already mirror on /ar — every offset above is
   inset-inline-start/-end — but a tilt is a physical rotate(), so on /ar the card at inline-start (now the right edge)
   would keep leaning the way the English left-hand card leans. A mirror image flips the sign of every angle: these
   rules are the English angles negated, nothing else. The float animations are untouched (same names, same timing
   on all six pages); they add their small rotate/translate on top of this base tilt, as on English. */
[dir="rtl"] .cms-hero .cms-chipcard.tl{transform:rotate(8deg)}
[dir="rtl"] .cms-hero .cms-chipcard.tr{transform:rotate(-7deg)}
[dir="rtl"] .cms-hero .cms-chipcard.ml{transform:rotate(-6deg)}
[dir="rtl"] .cms-hero .cms-chipcard.mr{transform:rotate(6deg)}
[dir="rtl"] .cms-recmock-prof{transform:rotate(2deg)}
[dir="rtl"] .cms-recmock-thread{transform:rotate(-1.2deg)}
[dir="rtl"] .cms-recmock-status{transform:rotate(1.5deg)}

/* ===== ST-39 (2026-10-01) — LEGAL PAGES: THE CONTENT PANEL NO LONGER TOUCHES THE FOOTER =====
   Operator walk ST-1001 pages 27/28/32: "the background of the terms content touches the footer ... both terms and
   privacy get this same treatment ... For the cookies page, it has the same issue." Row: queue ST-39.
   MEASURED: from source only (no browser this pass) — /legal/{terms,privacy,cookies} are plain-prose rows rendered by
   PlainTextArticle as `section.p-hero.plain-article`; marketing.css:131 `.p-hero{margin:8px 16px 0}` leaves bottom margin 0
   and `footer.p-foot` follows, so the tinted panel's edge sits on the footer. Denominator (seed files, a FLOOR): 3 of 119
   rows in p10-dev/demo-content are plain prose — en privacy, terms, cookies; legal rows are English-only.
   VALUE TAKEN FROM THE NEIGHBOUR, NOT MINTED: the sibling tinted end-panel `.cms-cta` keeps 30px above the footer
   (this sheet :67) and 20px under 1280px (:178). No "section-gap" token exists in design-system.css or marketing.css.
   NO FRAME draws a legal page. INTERIM DEVIATION · UNRATIFIED (value chosen by the builder from the neighbour).
   (0,3,0) beats marketing.css `.p-hero` (0,1,0); the only other `.p-hero` margin rule (marketing-responsive.css:68) sets
   left/right only. No inline style on the section. No var() written. */
.page .p-hero.plain-article { margin-bottom: 30px; }
@media (max-width: 1279.98px) {
  .page .p-hero.plain-article { margin-bottom: 20px; }
}

/* ST-40 (operator walk 2026-10-01, p.31): /press "Using our name and logo" showed the About strip of OTHER
   companies' logos; it now mounts PressLogoKit.tsx — LiveRec's colour wordmark, white wordmark and logomark as
   three download tiles. Every class below is new and emitted by that component only (pageKey `press` + its five
   locale twins), so no other element can be reached. No inline style on the component (CAN IT WIN: nothing to lose to).
   Values are the neighbours', none minted (S13): radius `--r-card` (the `.cms-secimg` it replaces), border
   `var(--line)` (`.cms-card`, design-system.css:2594), light tile `var(--soft)` (design-system.css:46), the white wordmark's ground `var(--brand)` (the footer ground
   the same white wordmark already sits on), focus `2px solid #1A52C4` offset 2px (marketing-interaction.css:234-259).
   NO FRAME consulted; INTERIM DEVIATION - UNRATIFIED. Linked sheet: live on save, no rebuild. */
.page .cms-presskit { list-style: none; margin: 8px auto 4px; padding: 0; display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; width: 100%; max-width: 1004px; }
.page .cms-presskit-item { margin: 0; padding: 0; }
.page .cms-presskit-link { display: flex; flex-direction: column; align-items: stretch; gap: 8px; height: 100%;
  padding: 12px; border: 1px solid var(--line); border-radius: var(--r-card); background: #fff;
  color: inherit; text-decoration: none; text-align: center; }
.page .cms-presskit-link:focus-visible { outline: 2px solid #1A52C4; outline-offset: 2px; }
.page .cms-presskit-tile { display: flex; align-items: center; justify-content: center; height: 120px;
  padding: 16px; border-radius: calc(var(--r-card) - 6px); }
/* ST-45 (review of ST-40, measured on :4300 2026-10-02): `--soft` computed "" on .cms-presskit-link — it is declared
   only in design-system.css :root, which this page does not load — so the light tiles painted TRANSPARENT (plain
   white on the white card). `--tint-panel` #EEF3FF is declared in THIS sheet's :root (line ~19) and is the ground
   the same CMS page already paints its .cms-hero / .cms-why / .cms-cta panels with, so it reaches and is a
   neighbour value. The white wordmark moves to `--navy` #0E1746 (.page, marketing.css:685) per the review item
   ("white variant on navy"). INTERIM DEVIATION - UNRATIFIED, NO FRAME. */
.page .cms-presskit-tile--light { background: var(--tint-panel); }
.page .cms-presskit-tile--brand { background: var(--navy); }
.page .cms-presskit-img { display: block; max-width: 100%; height: auto; max-height: 100%; }
.page .cms-presskit-img--colour, .page .cms-presskit-img--white { width: 200px; }
.page .cms-presskit-img--mark { width: 64px; }
.page .cms-presskit-name { font-weight: 600; }
.page .cms-presskit-dl { color: #1A52C4; text-decoration: underline; text-underline-offset: 3px; }
.page .cms-presskit-link:hover .cms-presskit-dl { text-decoration-thickness: 2px; }
@media (max-width: 767.98px) {
  .page .cms-presskit { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .page .cms-presskit-tile { height: 96px; }
}

/* PR-16 (operator 2026-10-06, /press): "If we have more assets included, also explain how to use it, similar to how
   Google and X and all these other brands do it." The ST-40 kit grows into a brand-assets section (PressLogoKit.tsx):
   six logo tiles + one ZIP link where the row's image was, then — under the row's own paragraphs — the palette and a
   Do / Don't grid with a picture of each rule (X's toolkit shows every misuse as a picture; Google measures clear space
   from the logo). Every class below is emitted by PressLogoKit.tsx only (press group, 6 locales). No inline style on
   the component. Values are the neighbours': `--navy`/`--brand`/`--pos`/`--red`/`--mut`/`--line` (.page,
   marketing.css:685), `--tint-panel` (this sheet :19), `--r-card` and the 2px #1A52C4 focus ring (the kit's own,
   above). The palette chips are the brand's own hexes — the one place a literal colour is the content.
   ⚠ The misuse pictures are the colour logo FILE under a transform/filter; the busy ground is an existing CMS photo.
   NO FRAME consulted; INTERIM DEVIATION - UNRATIFIED. Linked sheet: live on save. */
.page .cms-brandkit { margin: 6px 0 22px; }
.page .cms-brandkit .cms-presskit { margin: 0; max-width: none; gap: 14px; }
.page .cms-presskit-link { gap: 6px; }
.page .cms-presskit-tile { height: 112px; }
.page .cms-presskit-tile--navy { background: var(--navy); }
.page .cms-presskit-tile--brand { background: var(--brand); }
.page .cms-presskit-img--wide { width: 176px; }
.page .cms-presskit-img--mark { width: 52px; }
.page .cms-presskit-use { font-size: 13.5px; line-height: 1.4; color: var(--mut); }
.page .cms-presskit-link:hover { border-color: color-mix(in srgb, var(--brand) 45%, var(--line)); }
.page .cms-brandkit-all { margin: 16px 0 0; }
.page .cms-brandkit-zip { display: inline-flex; align-items: center; gap: 8px; }
.page .cms-brandkit-zipmeta { font-weight: 500; opacity: .86; }

.page .cms-brandguide { margin-top: 26px; padding-top: 24px; border-top: 1px solid var(--line); }
.page .cms-brandguide-h { margin: 0 0 14px; font-family: var(--font-head); font-weight: var(--head-weight, 800); font-size: 20px; line-height: 1.3; color: var(--ink); }
.page .cms-swatches + .cms-brandguide-h { margin-top: 30px; }
.page .cms-swatches { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.page .cms-swatch { margin: 0; display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: var(--r-card); overflow: hidden; background: #fff; font-size: 13.5px; line-height: 1.45; }
.page .cms-swatch > span:not(.cms-swatch-chip) { padding: 0 12px; }
.page .cms-swatch-chip { display: block; height: 72px; margin-bottom: 10px; }
.page .cms-swatch-chip--blue { background: #2164F4; }
.page .cms-swatch-chip--ink { background: #060048; }
.page .cms-swatch-chip--navy { background: #0E1746; }
.page .cms-swatch-chip--white { background: #FFFFFF; border-bottom: 1px solid var(--line); }
.page .cms-swatch-name { font-weight: 700; font-size: 14.5px; color: var(--ink); }
.page .cms-swatch-hex { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13px; color: var(--ink); user-select: all; }
.page .cms-swatch-rgb { color: var(--mut); font-size: 12.5px; }
.page .cms-swatch-note { color: var(--mut); padding-bottom: 12px !important; margin-top: 4px; }
.page .cms-brandguide-min { margin: 0 0 6px; max-width: none; font-size: 15px; color: var(--mut); text-align: start; }
.page .cms-brandguide-sub { display: flex; align-items: center; gap: 8px; margin: 18px 0 10px; font: 700 16px/1.3 var(--font-body); color: var(--ink); }
.page .cms-brandguide-badge { width: 22px; height: 22px; flex: none; border-radius: 50%; display: grid; place-items: center; color: #fff; }
.page .cms-brandguide-sub--do .cms-brandguide-badge { background: var(--pos); }
.page .cms-brandguide-sub--dont .cms-brandguide-badge { background: var(--red); }
.page .cms-rules { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.page .cms-rule { margin: 0; display: flex; flex-direction: column; gap: 8px; }
.page .cms-rule-pic {
  position: relative; display: flex; align-items: center; justify-content: center; gap: 10px; height: 112px;
  overflow: hidden; border-radius: calc(var(--r-card) - 4px); background: var(--tint-panel);
}
.page .cms-rules--do .cms-rule-pic { box-shadow: inset 0 -3px 0 var(--pos); }
.page .cms-rules--dont .cms-rule-pic { box-shadow: inset 0 -3px 0 var(--red); }
.page .cms-rule-pic img { display: block; width: 150px; max-width: 72%; height: auto; }
.page .cms-rule-pic--light { background: #fff; border: 1px solid var(--line); }
.page .cms-rule-pic--dark { background: var(--navy); }
.page .cms-rule-pic--space { background: #fff; border: 1px solid var(--line); }
/* Clear space drawn as the zone itself: half the logo's height (150 px wide ⇒ 28.5 px tall ⇒ 14 px) on every side. */
.page .cms-rule-pic--space img { box-sizing: content-box; width: 132px; padding: 13px; outline: 1.5px dashed var(--brand); background: color-mix(in srgb, var(--brand) 9%, transparent); }
.page .cms-rule-pic--stretch img { transform: scale(1.5, .72); }
.page .cms-rule-pic--recolour img { filter: hue-rotate(150deg) saturate(1.8); }
.page .cms-rule-pic--rotate img { transform: rotate(-16deg); }
.page .cms-rule-pic--effects img { filter: drop-shadow(3px 3px 0 #F5A524) drop-shadow(0 8px 6px rgba(0, 0, 0, .38)); }
.page .cms-rule-pic--busy { background: #556 url('/design/cms-photos/team-standing-800.webp') center / cover no-repeat; }
.page .cms-rule-pic--lockup img { width: 104px; }
.page .cms-rule-yours {
  flex: none; padding: 6px 9px; border: 1.5px dashed var(--mut); border-radius: 8px;
  font: 700 12px/1.2 var(--font-body); color: var(--mut); white-space: nowrap;
}
.page .cms-rule-t { display: flex; align-items: flex-start; gap: 7px; font-size: 14.5px; line-height: 1.45; color: var(--ink); }
.page .cms-rule-mk { flex: none; margin-top: 3px; }
.page .cms-rules--do .cms-rule-mk { color: var(--pos); }
.page .cms-rules--dont .cms-rule-mk { color: var(--red); }
@media (max-width: 1080px) {
  .page .cms-swatches { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .page .cms-rules { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 767.98px) {
  /* Two across on a phone (the ST-40 rule above stacks one per row; six tiles in one column ran ~1 000 px). */
  .page .cms-brandkit .cms-presskit { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .page .cms-presskit-link { padding: 10px; }
  .page .cms-presskit-tile { height: 80px; padding: 12px; }
  .page .cms-presskit-img--wide { width: 124px; }
  .page .cms-presskit-img--mark { width: 40px; }
  .page .cms-presskit-name { font-size: 14px; line-height: 1.3; }
  .page .cms-presskit-use { font-size: 12.5px; }
  .page .cms-brandkit-zip { width: 100%; justify-content: center; }
  .page .cms-swatches { gap: 10px; }
  .page .cms-swatch-chip { height: 56px; }
  .page .cms-rules { gap: 12px; }
  .page .cms-rule-pic { height: 88px; }
  .page .cms-rule-pic img { width: 112px; }
  .page .cms-rule-pic--space img { width: 98px; padding: 10px; }
  .page .cms-rule-pic--lockup { gap: 6px; }
  .page .cms-rule-pic--lockup img { width: 72px; }
  .page .cms-rule-yours { padding: 4px 6px; font-size: 11px; }
  .page .cms-rule-t { font-size: 14px; }
}
@media (prefers-reduced-motion: reduce) { .page .cms-presskit-link { transition: none; } }
/* PR-16, /ar (measured on the scratch build 2026-10-06): the kit's English lines inherit the page's `dir=rtl`, so the
   bidi algorithm moved each sentence's full stop to its start (".Don't rotate it") and the hex's "#" to its end
   ("FFFFFF#"). `unicode-bidi: plaintext` was tried first and did NOTHING: marketing-locale.css:53-54 forces
   `unicode-bidi: isolate !important` on every [lang] element and its descendants. So the English leaves take
   `direction: ltr` (the `.dlt` cure, marketing-alignment.css:498) and stay right-aligned so they sit on the same edge
   as the Arabic around them; the grids and flex rows (tiles, swatches, rules) are NOT given a direction and keep
   mirroring with the page. RTL-only selector: the English pages are untouched. */
[dir="rtl"] .page .cms-brandguide[lang="en"] :is(h3, p, .cms-rule-tx, .cms-swatch > span:not(.cms-swatch-chip)),
[dir="rtl"] .page .cms-brandkit [lang="en"], [dir="rtl"] .page .cms-swatch-hex { direction: ltr; text-align: right; }
[dir="rtl"] .page .cms-brandkit a.cms-brandkit-zip[lang="en"], [dir="rtl"] .page .cms-presskit-link [lang="en"] { text-align: center; }
@media (max-width: 767.98px) {
  /* The ZIP button's "(ZIP, SVG and PNG)" took a second column at 390 and both halves wrapped; it gets its own line. */
  .page .cms-brandkit-zip { flex-wrap: wrap; column-gap: 8px; row-gap: 0; text-align: center; }
  .page .cms-brandkit-zipmeta { flex-basis: 100%; font-size: 13px; }
  .page .cms-rule-pic--stretch img { transform: scale(1.3, .72); }
}

/* ============================================================================
   2026-10-01 — ST-34 (operator walk p.25): `.cms-readall` on /guides is now an <a> to the same
   listing narrowed to its group's category (`?category=<key>`, read by GuideFilter.tsx). The look
   is unchanged (brand, 600, 14.5px — :597 above); the link affordance is the chip precedent's
   underline on hover/focus (a.cms-chip, this sheet). The hit box is 44px tall with the extra height
   taken back by negative block margin, the `.cb-link` precedent (marketing-critical.css), so the
   section-head row does not move. Focus ring value copied from the sibling chip focus ring
   (`.cms-pop .cms-chip:focus-visible`, this sheet) — no colour minted; it sits on the page ground,
   not on brand, so it is not invisible against itself.
   ============================================================================ */
.page a.cms-readall { color: var(--brand); text-decoration: none; display: inline-flex; align-items: center; min-height: 44px; margin-block: -12px; }
.page a.cms-readall:hover { text-decoration: underline; text-underline-offset: 2px; }
.page a.cms-readall:focus-visible { text-decoration: underline; outline: 2px solid #1A52C4; outline-offset: 2px; }
/* NW-08 (2026-10-02): the Marathi/Spanish "see all" (सर्व पहा 43.3px, Ver todas 41px) is under 44 wide
   at <=1023 (19 of 290 L2 offenders). A 2px inline padding taken back by negative margin: no shift. */
@media (max-width: 1023.98px) { .page a.cms-readall { padding-inline: 2px; margin-inline: -2px; } }
/* The active category chip. Chips are PORTALED into the hero host (outside .cms-guide-listing), whose
   white-chip rule at :566 is (0,5,0) — so the selector must out-rank it there. #E3ECFE is the sibling
   `.cms-pop .cms-chip:hover` fill (this sheet), not a new colour. */
.page .cms-guide-search-host .cms-chip[aria-current='true'],
.page.mkt .mkt-hero .cms-guide-search-host .cms-chip[aria-current='true'] { background: #E3ECFE; }

/* ST-70 (2026-10-02, operator: "the career growth button ... its a different size button then the rest").
   A chip with no section to jump to stays a `<span data-needs="target">` (GuideFilter.tsx / ArticleView
   ChipRail — no guide carries that category in the CMS, an operator content decision). Its four `<a>`
   siblings take marketing-target.css §5's box (5px transparent border-block, -5px margin, padding-box
   paint: 44px box, 34px pill) and `a.cms-chip{color:inherit}` above; the span took neither, so it boxed
   at 34 and, under the <=1199/coarse `min-height:44px; box-sizing:border-box` hero rule, PAINTED 44
   against the links' 34. Cure copied from the siblings, no value minted (S13). CAN IT WIN: no inline
   style on either component (grep 'style={{' = 0); (0,3,2) is the only rule setting these properties
   on a span chip. No hover/focus is added: it is not a control, and a hover on a dead label would lie. */
html .page span.cms-chip[data-needs] { border-block: 5px solid transparent; margin-block: -5px; background-clip: padding-box; color: inherit; }

/* ST-35 (2026-10-01): a filtered-out listing card or card group must actually disappear.
   CAN IT WIN: `GuideFilter` sets the `hidden` attribute, but the UA's `[hidden]{display:none}` loses to
   every author `display` on these boxes — `.cms-feat`/`.cms-mini`/`.cms-split`/`.cms-grid3` are grid,
   `.cms-splcol` flex, `.cms-gcard` block (this sheet :569-:613). (0,3,0) out-ranks each of them and the
   (0,2,1) `.page a.cms-*` motion rules. Scoped to the filter's own root, so no other `[hidden]` moves.
   Also applies to /guides' cards, which share the filter (S14: one component, every mount). */
.cms-guide-listing [data-guide-card][hidden],
.cms-guide-listing [data-guide-group][hidden] { display: none; }

/* ============================================================================
   ST-61 (operator walk p32 -> ST-43 audit -> operator APPROVED option A, 2026-10-02): SHARP CARD CORNERS TAKE
   THE SYSTEM CARD RADIUS `--r-card`. Operator, p32: "make sure all cards have the same corner cutout radius".
   MEASURED (ST-43/measure.json, :4300, 1440x900 dpr2, hydrated; Table B rows; NOT re-read this pass — browsers
   forbidden by the ST-1001 builder brief), every one under a page whose `--r-card` read 18px live:
     `.cms-qcard` (+`.mid`)  12px   /employers 9, /recruiter 15, /affiliates 15, /about 15        (B10,11,14,15,21,22,43,44)
     `.cms-card` families    10px   /guides gfeat 1 + scard 4, /blog feat 1 + mini 2 + big 1      (B24,26,27,28,30,31)
     `.cms-chipcard`         10px   /about hero x4                                                 (B34-B37)
     `.cms-recmock-card`     1.4em = 14px   /about recruiter mock x2                               (B38,B39)
   = 69 instances on 6 routes at 1440 EN (the /affiliates band + earn boxes are in marketing-affiliates.css, the
   /contact cards in marketing-contact-chat.css). Locale twins share the classes; they were NOT measured (floor).
   FRAME: several values are the frames' (review cards = /about's rail; /blog + /guides cards = Blogs Listing /
   Career Guides Listing). The decision card told the operator his OK would override those, and he gave it:
   DEVIATION RATIFIED BY THE OPERATOR (ST-61). NOT TOUCHED and listed in ST-61/SHIP.md: the bites (R7 / frame 10px),
   FAQ rows + `.mkt-witem` (already on the system TILE token `--r-tile`), chat bubbles, search bars, press tiles
   (nested `calc(var(--r-card) - 6px)` inside an 18px card), the photo overlay `.cms-imw`, the 20px bands.
   §9b: `.tok-iter3` declares `--r-card` and is on every root these mount under (EmployerHome, RecruiterLanding
   frame, AffiliateHome:431, ArticleView root). CAN IT WIN: no inline radius on any of these (grep `style={{`
   ReviewCard / ArticleView CardLink / AboutHeroCards / AboutRecruiterMock); competitors are (0,1,0) here and in
   marketing-critical.css (`.cms-qcard` 5 hits there) and (0,2,0) `.cms-hero .cms-chipcard` — each rule below
   out-ranks its competitor on specificity, not just order.
   PHOTO CLIP: gfeat/scard/feat/mini already `overflow:hidden` (:594-610); `.cms-big`'s photo is a square-topped
   block at the card's top edge, so it gets `overflow:hidden` too or its corners would poke past the new 18px.
   recmock: em-based on purpose (the mock scales as one picture); 1.8em is 18px at the 1.4em = 14px scale measured.
   ============================================================================ */
.page .cms-qcard { border-radius: var(--r-card); }
.page .cms-card { border-radius: var(--r-card); }
.page .cms-card.cms-big { overflow: hidden; }
.page .cms-hero .cms-chipcard { border-radius: var(--r-card); }
.page .cms-recmock-card { border-radius: 1.8em; }

/* NW-02 (2026-10-02): the shared review rail is now a keyboard stop (label + focusPause in
   AboutReviewCarousel.tsx) and needs a visible ring. INSET (-3px) because the rail is overflow:hidden and
   full-bleed above 1440px, so an outset ring would be cut at the viewport edges. Colour = the site's
   existing focus blue #1A52C4 (marketing-focus.css). Focus-only: no resting box or paint changes. */
.cms-qrail.cms-qmarq:focus-visible { outline: 2px solid #1A52C4; outline-offset: -3px; border-radius: 12px; }
