/* =================================================================================================
   CONTRAST-2-0920 — THE SECOND PASS OF THE STANDING CONTRAST DEBT, ON WHAT THE FIRST ONE LEFT.
   Queue 176, pass 2.  Follows CONTRAST-DEBT-0919, which is INSTALLED: this sheet is linked after it
   and corrects the residual that pass measured, named and handed over.

   🔴 GENERATED.  Every value below is written by harness/mkcss2.py out of the solved tables in
   proof/reports/ — TOKENS.json and FAMILIES.json (the first pass's own solver, re-run on THIS
   measurement, because a residual is a different set of grounds) and ANCHORS2.json, FILLTEXT2.json,
   OPACITY2.json (harness/solve2.py, the buckets the first pass could not reach).  tools/install.sh
   re-runs the generator and refuses if this file is not byte-identical.  Do not hand-edit.

   WHAT IS NEW HERE, in method, and why each one is a measurement and not an opinion:

   · AN INHERITED COLOUR IS REACHABLE AFTER ALL.  The first pass left 76 crops because "no rule
     declares `color` on this element".  True, and it does not follow that nothing can reach it: the
     element still MATCHES a selector, and at `html:root… body <anchor> <family>` that selector
     outranks the page's own <style> on SPECIFICITY, so document order stops mattering.  What was
     missing was the measurement of how wide each scope is: harness/probe-anchor.mjs counts, on the
     live page, every element a candidate scope would repaint and how many colours they carry.  A
     scope that would touch more than one colour is REFUSED and named — that is the difference
     between scoping a correction and repainting a page.

   · TEXT ON A BRAND FILL IS SPLIT BY WHAT THE TEXT IS, and the split is the whole point.  A pale
     violet label on a violet button (#bdbcf9 on #5b57ef, 2.89 : 1) moves along its OWN hue and
     clears — §4.  NEAR-WHITE text cannot move: solved as text it comes back #02004d, a near-black
     glyph on the #6d69ff primary button, which clears 4.61 and destroys the component.  For those
     the ground moves instead, and ONLY when it is measured to be a flat opaque `background-color`
     with `background-image: none`, by less than 0.22 in lightness — §5.  A GRADIENT or a
     translucent overlay is never repainted from a head stylesheet: that is CONTRAST-DEBT-0919's
     judgement, kept, and each one is named in RECEIPT.md §5 with the value that would clear it.
     The accents themselves are untouched wherever white already clears them: white on #615dfa is
     4.71 : 1 and passes, and nothing in this sheet moves it.

   · A FADE IS FIXED ON ITS CARRIER, AND FOUR CARRIERS ARE NOT CSS AT ALL.  Those are inline
     `style` attributes written by a page's PHP; they are corrected by anchored hunks in their own
     files (see RECEIPT.md §3), never by an `!important` from here.

   · THE DISABLED EXEMPTION IS KEPT.  WCAG 2.1 AA 1.4.3 exempts text that is part of an inactive
     user-interface component; this estate has made that call twice already
     (#fs-reg-submit.af-btn[disabled], .bkx-btn[disabled]).  Rows so exempted are listed in
     RECEIPT.md §5 and are neither corrected nor counted as fixed.

   RULE OF THE PASS, unchanged from ruling 326 and SAFARI-A11Y-PASS-0918: hue and saturation are
   not touched; lightness moves the smallest step that clears the floor on the WORST ground the
   colour was measured painting on, verified AFTER quantisation to six hex digits against
   4.60 : 1 (body) / 3.10 : 1 (large).
   ================================================================================================= */

/* ══════════════════════════════════════════════════════════════════════════════════════════════
   1 · TOKENS — the residual token moves.  1 light + 0 dark, carrying 4 failing crops.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* --kelt  #0f9b30 -> #0c8028   3.33 -> 4.63 : 1 on #f3f4fa (its worst measured ground)
   4 failing crops, 2 selector families, on files
   button.on, span */
html:root:not(.fs-dark):not([data-theme="dark"]) #fmApp.fmx { --kelt: #0c8028; }

/* ══════════════════════════════════════════════════════════════════════════════════════════════
   2 · PER-FAMILY INK — 28 crops over 7 rules that DO declare their own colour.
   The selector is the rule that WON THE CASCADE, measured off `document.styleSheets`, never
   the family name: a third of the family names are bare tags and a rule on `span` repaints
   the estate.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* .aist-tab  #6c6c86 -> #7d7d96   3.65 -> 4.64 : 1 on #0c1320   (dark, 14 crops, hosting-cloud-wp)
   declared in <style> in the document; painting a.aist-tab */
html.fs-dark:root body .aist-tab,
html[data-theme="dark"]:root body .aist-tab { color: #7d7d96; }

/* .eg-sheet label  #6b6b86 -> #7e7e98   3.55 -> 4.64 : 1 on #13141f   (dark, 4 crops, engagement, hosting-cloud-wp)
   declared in <style> in the document; painting label */
html.fs-dark:root body .eg-sheet label,
html[data-theme="dark"]:root body .eg-sheet label { color: #7e7e98; }

/* .sv-head .n  #9698b2 -> #696c8f   2.57 -> 4.62 : 1 on #f3f4fa   (light, 2 crops, saved)
   declared in <style> in the document; painting span.n */
html:root:not(.fs-dark):not([data-theme="dark"]) body .sv-head .n { color: #696c8f; }

/* .sec-act  #c02955 -> #da5179   3.12 -> 4.60 : 1 on #161723   (dark, 2 crops, security)
   declared in <style> in the document; painting button.sec-act */
html.fs-dark:root body .sec-act,
html[data-theme="dark"]:root body .sec-act { color: #da5179; }

/* .fcs-btn  #c4313a -> #d65c63   3.18 -> 4.60 : 1 on #1a1925   (dark, 2 crops, hosting-connected-sites)
   declared in <style> in the document; painting button.fcs-btn */
html.fs-dark:root body .fcs-btn,
html[data-theme="dark"]:root body .fcs-btn { color: #d65c63; }

/* html.fs-dark .ht-out, [data-theme="dark"] .ht-out  #7a7b96 -> #85869f   4.01 -> 4.64 : 1 on #1d1e2b   (dark, 2 crops, hosting-terms)
   declared in <style> in the document; painting p.ht-out */
html.fs-dark:root body .ht-out,
html[data-theme="dark"]:root body .ht-out { color: #85869f; }

/* .mvhc-ex  #a06a00 -> #966300   4.13 -> 4.61 : 1 on #fcf1e2   (dark, 2 crops, maven-help-center)
   declared in <style> in the document; painting span.mvhc-ex */
html.fs-dark:root body .mvhc-ex,
html[data-theme="dark"]:root body .mvhc-ex { color: #966300; }

/* ══════════════════════════════════════════════════════════════════════════════════════════════
   3 · INHERITED COLOUR, REACHED BY A MEASURED SCOPE — 10 crops over 1 rows the first pass
   left as unreachable.  Each scope below was COUNTED on the live page: `scope matches N` is
   how many elements the selector touches there, and every one of them carries one colour —
   a scope whose matches carried two colours was refused and is named in RECEIPT.md §5.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* span.lb  #5b5b78 -> #8383a1   2.61 -> 4.66 : 1 on #1a1b26   (dark, 10 crops, api-keys)
   the colour is inherited from div.fc-li (rule `.fc-li` in fs-pages.css?v=1789772930); scope `.fc-li span.lb` matches 5 elements on the page */
html.fs-dark:root body .fc-li span.lb,
html[data-theme="dark"]:root body .fc-li span.lb { color: #8383a1; }

/* ══════════════════════════════════════════════════════════════════════════════════════════════
   4 · TEXT ON A SATURATED FILL — the TEXT moves.  13 crops over 7 rows.
   Every row here is text that is NOT near-white — a pale violet label on a violet button — so
   it can move along its own hue to the lightness that clears, which is this pass's one rule
   and no more.  THE FILL UNDERNEATH IS UNTOUCHED: #615dfa and #8b87ff are the brand's accents.
   🔴 Near-white text is NOT here, and that is deliberate.  Solving it as text returns a
   near-black glyph (#ffffff -> #02004d on the #6d69ff primary button, 24 crops) which clears
   4.61 and destroys the component.  Those rows are §5 (a flat fill step) or RECEIPT.md §5
   (a gradient, named for the file that designs it).
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* small on #5b57ef   #dbdafb -> #f1f1fd (lighter)   3.81 -> 4.62 : 1   (light, 2 crops, automation-center)
   the rule that won the cascade: `#admin-dashboard .acb-lens a.on small` in <style> in the document */
html:root:not(.fs-dark):not([data-theme="dark"]) body #admin-dashboard .acb-lens a.on small { color: #f1f1fd; }

/* span.jt on #2e2d5c   #9795c8 -> #9997c9 (lighter)   4.53 -> 4.63 : 1   (light, 1 crop, maven-today)
   the rule that won the cascade: `html:root:not(.fs-dark):not([data-theme="dark"]) body .mvt-jump .jt` in fs-contrast-debt-0919.css */
html:root:not(.fs-dark):not([data-theme="dark"]) body .mvt-jump .jt { color: #9997c9; }

/* ══════════════════════════════════════════════════════════════════════════════════════════════
   5 · A FLAT FILL, MOVED THE SMALLEST STEP — 44 crops over 13 rows.
   The only rows here are near-white text on a fill MEASURED to be a flat opaque
   `background-color` with `background-image: none`, moving less than 0.22 in lightness.  A
   gradient or a translucent overlay is never touched from a head stylesheet — that is
   CONTRAST-DEBT-0919's judgement and this package keeps it; those are named in RECEIPT.md §5
   with the value that would clear them.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* a.btn.acc: the FILL #6d69ff -> #625eff under #ffffff   4.11 -> 4.60 : 1   lightness move 0.022 of the 0.22 limit
   (dark, 24 crops, my-website, my-website-backups, my-website-domains, my-website-wordpress); the background is declared by `.myw .btn.acc` in <style> in the document */
html.fs-dark:root body .myw .btn.acc,
html[data-theme="dark"]:root body .myw .btn.acc { background-color: #625eff; }

/* a.ac-res-btn: the FILL #16c43b -> #0f8729 under #ffffff   2.34 -> 4.65 : 1   lightness move 0.133 of the 0.22 limit
   (dark, 2 crops, academy); the background is declared by `#admin-dashboard .ac-res-btn` in <style> in the document */
html.fs-dark:root body #admin-dashboard .ac-res-btn,
html[data-theme="dark"]:root body #admin-dashboard .ac-res-btn { background-color: #0f8729; }

/* a.ac-nbtn.go: the FILL #16c43b -> #0f8729 under #ffffff   2.34 -> 4.65 : 1   lightness move 0.133 of the 0.22 limit
   (dark, 2 crops, academy); the background is declared by `#admin-dashboard .ac-nbtn.go` in <style> in the document */
html.fs-dark:root body #admin-dashboard .ac-nbtn.go,
html[data-theme="dark"]:root body #admin-dashboard .ac-nbtn.go { background-color: #0f8729; }

/* button.bd-btn.primary: the FILL #8b87ff -> #635dff under #ffffff   3.00 -> 4.63 : 1   lightness move 0.082 of the 0.22 limit
   (dark, 2 crops, board-detail); the background is declared by `.bd-btn.primary` in <style> in the document */
html.fs-dark:root body .bd-btn.primary,
html[data-theme="dark"]:root body .bd-btn.primary { background-color: #635dff; }

/* button.sb-cta: the FILL #8a86ff -> #635dff under #ffffff   3.03 -> 4.63 : 1   lightness move 0.080 of the 0.22 limit
   (dark, 2 crops, storyboards); the background is declared by `#sb-app .sb-cta` in <style> in the document */
html.fs-dark:root body #sb-app .sb-cta,
html[data-theme="dark"]:root body #sb-app .sb-cta { background-color: #635dff; }

/* button.cjx-b.acc: the FILL #6d69ff -> #625eff under #ffffff   4.11 -> 4.60 : 1   lightness move 0.022 of the 0.22 limit
   (dark, 2 crops, lead-hub); the background is declared by `.cjx-b.acc` in <style> in the document */
html.fs-dark:root body .cjx-b.acc,
html[data-theme="dark"]:root body .cjx-b.acc { background-color: #625eff; }

/* a.ac-res-btn: the FILL #16c43b -> #0f8729 under #ffffff   2.34 -> 4.65 : 1   lightness move 0.133 of the 0.22 limit
   (light, 2 crops, academy); the background is declared by `#admin-dashboard .ac-res-btn` in <style> in the document */
html:root:not(.fs-dark):not([data-theme="dark"]) body #admin-dashboard .ac-res-btn { background-color: #0f8729; }

/* a.ac-nbtn.go: the FILL #16c43b -> #0f8729 under #ffffff   2.34 -> 4.65 : 1   lightness move 0.133 of the 0.22 limit
   (light, 2 crops, academy); the background is declared by `#admin-dashboard .ac-nbtn.go` in <style> in the document */
html:root:not(.fs-dark):not([data-theme="dark"]) body #admin-dashboard .ac-nbtn.go { background-color: #0f8729; }

/* button.bd-btn.primary: the FILL #8b87ff -> #635dff under #ffffff   3.00 -> 4.63 : 1   lightness move 0.082 of the 0.22 limit
   (light, 2 crops, board-detail); the background is declared by `.bd-btn.primary` in <style> in the document */
html:root:not(.fs-dark):not([data-theme="dark"]) body .bd-btn.primary { background-color: #635dff; }

/* a.buy: the FILL #16c43b -> #0f8729 under #ffffff   2.34 -> 4.65 : 1   lightness move 0.133 of the 0.22 limit
   (dark, 1 crop, maven-workspace); the background is declared by `.mvws-cr-btns a.buy` in <style> in the document */
html.fs-dark:root body .mvws-cr-btns a.buy,
html[data-theme="dark"]:root body .mvws-cr-btns a.buy { background-color: #0f8729; }

/* button.p2c-maven: the FILL #8d8aff -> #625eff under #ffffff   2.91 -> 4.60 : 1   lightness move 0.086 of the 0.22 limit
   (dark, 1 crop, profile); the background is declared by `#sn-x .p2c-maven` in <style> in the document */
html.fs-dark:root body #sn-x .p2c-maven,
html[data-theme="dark"]:root body #sn-x .p2c-maven { background-color: #625eff; }

/* a.buy: the FILL #16c43b -> #0f8729 under #ffffff   2.34 -> 4.65 : 1   lightness move 0.133 of the 0.22 limit
   (light, 1 crop, maven-workspace); the background is declared by `.mvws-cr-btns a.buy` in <style> in the document */
html:root:not(.fs-dark):not([data-theme="dark"]) body .mvws-cr-btns a.buy { background-color: #0f8729; }

/* ══════════════════════════════════════════════════════════════════════════════════════════════
   6 · A HELD TOKEN, CORRECTED AT THE RULE THAT USES IT — 69 crops over 29 rules, and this is
   the gap between the first pass's two solvers.  solve.py groups a failing crop by its TOKEN
   and HOLDS the token when it also paints surfaces — rightly: lightening `--hwx-accent` as ink
   relights the button fills it paints and made twelve rows worse.  families.py then solves per
   family, but only for crops with NO token.  A crop whose colour comes from a HELD token fell
   through both, and it is the largest single row in the residual: a bare `a` in dark, 39 crops,
   worst 2.12 : 1 — brand indigo used as a LINK colour on a dark card, arriving through six
   different held tokens.
   🔴 THE TOKEN STILL DOES NOT MOVE.  Every rule below is the declaration that won the cascade,
   re-declared with a scheme prefix, so it reaches the text and leaves every fill that token
   paints exactly where it is.  Each value is solved against the worst NEUTRAL, IN-SCHEME ground
   its own crops measured — a saturated ground is a fill/text pair and is in §4/§5 instead.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* #sn-x .p2dsel-c  #3c4456 -> #7a87a2   1.71 -> 4.62 : 1 on #1c1d2a   (dark, 8 crops, profile)
   the colour arrives through --f2-faint, which is HELD because it also paints fills; declared in <style> in the document;
   painting button.p2dsel-c */
html.fs-dark:root body #sn-x .p2dsel-c,
html[data-theme="dark"]:root body #sn-x .p2dsel-c { color: #7a87a2; }

/* html.fs-dark .ht-out a, [data-theme="dark"] .ht-out a  #6a6a8b -> #8585a2   3.18 -> 4.61 : 1 on #1d1e2b   (dark, 6 crops, hosting-terms)
   the colour arrives through --fsc-muted, which is HELD because it also paints fills; declared in <style> in the document;
   painting a */
html.fs-dark:root body .ht-out a,
html[data-theme="dark"]:root body .ht-out a { color: #8585a2; }

/* #sn-x .p2dsel-c  #b3b8ca -> #636c8e   1.79 -> 4.67 : 1 on #f2f3fa   (light, 4 crops, profile)
   the colour arrives through --f2-faint, which is HELD because it also paints fills; declared in <style> in the document;
   painting button.p2dsel-c */
html:root:not(.fs-dark):not([data-theme="dark"]) body #sn-x .p2dsel-c { color: #636c8e; }

/* .cw-tag  #5a6175 -> #767f96   3.01 -> 4.64 : 1 on #0c1320   (dark, 4 crops, client-work-clients)
   the colour arrives through --cw-muted, which is HELD because it also paints fills; declared in <style> in the document;
   painting a.cw-tag */
html.fs-dark:root body .cw-tag,
html[data-theme="dark"]:root body .cw-tag { color: #767f96; }

/* .mvt-card-hd a  #605cfa -> #7471fb   3.69 -> 4.61 : 1 on #14182a   (dark, 4 crops, maven-today)
   the colour arrives through --mvt-indigo, which is HELD because it also paints fills; declared in <style> in the document;
   painting a */
html.fs-dark:root body .mvt-card-hd a,
html[data-theme="dark"]:root body .mvt-card-hd a { color: #7471fb; }

/* .aist-st  #16c43b -> #0e7f26   2.11 -> 4.65 : 1 on #e6f8ea   (light, 2 crops, hosting-cloud-wp)
   the colour arrives through --c, which is HELD because it also paints fills; declared in <style> in the document;
   painting span.aist-st */
html:root:not(.fs-dark):not([data-theme="dark"]) body .aist-st { color: #0e7f26; }

/* .cw-tag  #a0a5b4 -> #676e83   2.24 -> 4.63 : 1 on #f3f4fa   (light, 2 crops, client-work-clients)
   the colour arrives through --cw-muted, which is HELD because it also paints fills; declared in <style> in the document;
   painting a.cw-tag */
html:root:not(.fs-dark):not([data-theme="dark"]) body .cw-tag { color: #676e83; }

/* .cw-rsub  #5a6275 -> #757f95   3.04 -> 4.63 : 1 on #0c1320   (dark, 2 crops, client-work-clients)
   the colour arrives through --cw-muted, which is HELD because it also paints fills; declared in <style> in the document;
   painting div.cw-rsub */
html.fs-dark:root body .cw-rsub,
html[data-theme="dark"]:root body .cw-rsub { color: #757f95; }

/* .cw-stage  #5a6275 -> #757f95   3.04 -> 4.63 : 1 on #0c1320   (dark, 2 crops, client-work-clients)
   the colour arrives through --cw-muted, which is HELD because it also paints fills; declared in <style> in the document;
   painting span.cw-stage */
html.fs-dark:root body .cw-stage,
html[data-theme="dark"]:root body .cw-stage { color: #757f95; }

/* .fspx .px-foot a  #5b57ef -> #7c79f2   3.19 -> 4.61 : 1 on #1d1e2b   (dark, 2 crops, retail)
   the colour arrives through --accent, which is HELD because it also paints fills; declared in <style> in the document;
   painting a */
html.fs-dark:root body .fspx .px-foot a,
html[data-theme="dark"]:root body .fspx .px-foot a { color: #7c79f2; }

/* .cw-tag.warn  #816337 -> #9d7843   3.34 -> 4.60 : 1 on #0c1320   (dark, 2 crops, client-work-clients)
   the colour arrives through --cw-amber, which is HELD because it also paints fills; declared in <style> in the document;
   painting span.cw-tag.warn */
html.fs-dark:root body .cw-tag.warn,
html[data-theme="dark"]:root body .cw-tag.warn { color: #9d7843; }

/* .cjx-chip  #6d69ff -> #8885ff   3.45 -> 4.62 : 1 on #272848   (dark, 2 crops, lead-hub)
   the colour arrives through --cjx-accent, which is HELD because it also paints fills; declared in <style> in the document;
   painting span.cjx-chip */
html.fs-dark:root body .cjx-chip,
html[data-theme="dark"]:root body .cjx-chip { color: #8885ff; }

/* .cx-rail-h a  #615dfa -> #7976fb   3.54 -> 4.60 : 1 on #1c1d2b   (dark, 2 crops, calendar)
   the colour arrives through --cx-book, which is HELD because it also paints fills; declared in <style> in the document;
   painting a */
html.fs-dark:root body .cx-rail-h a,
html[data-theme="dark"]:root body .cx-rail-h a { color: #7976fb; }

/* .mvab-all  #615dfa -> #7976fb   3.54 -> 4.61 : 1 on #1c1d2a   (dark, 2 crops, maven-workspace)
   the colour arrives through --indigo, which is HELD because it also paints fills; declared in <style> in the document;
   painting button.mvab-all */
html.fs-dark:root body .mvab-all,
html[data-theme="dark"]:root body .mvab-all { color: #7976fb; }

/* .mvws-msg.maven .who  #615dfa -> #6c68fa   4.13 -> 4.63 : 1 on #0c0c16   (dark, 2 crops, maven-workspace)
   the colour arrives through --indigo, which is HELD because it also paints fills; declared in <style> in the document;
   painting div.who.js-mvagentname */
html.fs-dark:root body .mvws-msg.maven .who,
html[data-theme="dark"]:root body .mvws-msg.maven .who { color: #6c68fa; }

/* #admin-dashboard .ac-res-k  #16c43b -> #0f8428   2.24 -> 4.62 : 1 on #f4fcf6   (light, 2 crops, academy)
   the colour arrives through --live, which is HELD because it also paints fills; declared in <style> in the document;
   painting p.ac-res-k */
html:root:not(.fs-dark):not([data-theme="dark"]) body #admin-dashboard .ac-res-k { color: #0f8428; }

/* #admin-dashboard .ac-nprog-n  #16c43b -> #0f8428   2.25 -> 4.66 : 1 on #fafbfb   (light, 2 crops, academy)
   the colour arrives through --live, which is HELD because it also paints fills; declared in <style> in the document;
   painting span.ac-nprog-n */
html:root:not(.fs-dark):not([data-theme="dark"]) body #admin-dashboard .ac-nprog-n { color: #0f8428; }

/* #admin-dashboard .ac-lf-prog-n  #16c43b -> #0f8628   2.31 -> 4.66 : 1 on #fdfefd   (light, 2 crops, academy)
   the colour arrives through --live, which is HELD because it also paints fills; declared in <style> in the document;
   painting span.ac-lf-prog-n */
html:root:not(.fs-dark):not([data-theme="dark"]) body #admin-dashboard .ac-lf-prog-n { color: #0f8628; }

/* #admin-dashboard .fm-tabs button.on  #0f9b30 -> #0c8028   3.33 -> 4.63 : 1 on #f3f4fa   (light, 2 crops, files)
   the colour arrives through --kelt, which is HELD because it also paints fills; declared in <style> in the document;
   painting button.on */
html:root:not(.fs-dark):not([data-theme="dark"]) body #admin-dashboard .fm-tabs button.on { color: #0c8028; }

/* #admin-dashboard .fm-drop span  #0f9b30 -> #0d872a   3.61 -> 4.60 : 1 on #fdfefe   (light, 2 crops, files)
   the colour arrives through --kelt, which is HELD because it also paints fills; declared in <style> in the document;
   painting span */
html:root:not(.fs-dark):not([data-theme="dark"]) body #admin-dashboard .fm-drop span { color: #0d872a; }

/* .cw-tag.warn  #c4a476 -> #89693b   2.15 -> 4.61 : 1 on #f3f4fa   (light, 1 crop, client-work-clients)
   the colour arrives through --cw-amber, which is HELD because it also paints fills; declared in <style> in the document;
   painting span.cw-tag.warn */
html:root:not(.fs-dark):not([data-theme="dark"]) body .cw-tag.warn { color: #89693b; }

/* .cw-stage  #a0a5b4 -> #666d82   2.22 -> 4.65 : 1 on #f2f3f9   (light, 1 crop, client-work-clients)
   the colour arrives through --cw-muted, which is HELD because it also paints fills; declared in <style> in the document;
   painting span.cw-stage */
html:root:not(.fs-dark):not([data-theme="dark"]) body .cw-stage { color: #666d82; }

/* .cw-rsub  #a0a5b4 -> #676e83   2.24 -> 4.63 : 1 on #f3f4fa   (light, 1 crop, client-work-clients)
   the colour arrives through --cw-muted, which is HELD because it also paints fills; declared in <style> in the document;
   painting div.cw-rsub */
html:root:not(.fs-dark):not([data-theme="dark"]) body .cw-rsub { color: #676e83; }

/* .cw-rt  #7a7d89 -> #6b6e79   3.74 -> 4.63 : 1 on #f3f4fa   (light, 1 crop, client-work-clients)
   the colour arrives through --cw-ink, which is HELD because it also paints fills; declared in <style> in the document;
   painting span.cw-rt */
html:root:not(.fs-dark):not([data-theme="dark"]) body .cw-rt { color: #6b6e79; }

/* .mvws-msg.maven .who  #615dfa -> #5b57fa   4.37 -> 4.65 : 1 on #f5f6fb   (light, 1 crop, maven-workspace)
   the colour arrives through --indigo, which is HELD because it also paints fills; declared in <style> in the document;
   painting div.who.js-mvagentname */
html:root:not(.fs-dark):not([data-theme="dark"]) body .mvws-msg.maven .who { color: #5b57fa; }

/* ══════════════════════════════════════════════════════════════════════════════════════════════
   7 · THE REMAINING OPACITY CARRIERS — a fade, not a colour, and `opacity: 1` has to be
   written on the element that CARRIES it.  Each carrier below was MEASURED by
   harness/probe-fade.mjs on the rendered page, never inferred from an implied alpha.
   The four carriers written as inline `style` attributes by a page's PHP are NOT here: they
   are anchored hunks in their own files, because an `!important` colour on a page-generated
   element is a worse defect than the one it fixes.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* .hx-stat span  opacity 0.72 on span.sub — carries span.sub on mc-home, media-library, studio-brand-kits (light) */
html:root:not(.fs-dark):not([data-theme="dark"]) body .hx-stat span { opacity: 1; }

/* .rly .rh .s  opacity 0.74 on div.s — carries div.s on golive (light) */
html:root:not(.fs-dark):not([data-theme="dark"]) body .rly .rh .s { opacity: 1; }

/* .ms-pv .pvh p  opacity 0.8 on p — carries p on memberships (dark, light) */
html.fs-dark:root body .ms-pv .pvh p,
html[data-theme="dark"]:root body .ms-pv .pvh p,
html:root:not(.fs-dark):not([data-theme="dark"]) body .ms-pv .pvh p { opacity: 1; }

/* .mf-poside .tx > span  opacity 0.88 on span — carries span on money-flow (dark, light) */
html.fs-dark:root body .mf-poside .tx > span,
html[data-theme="dark"]:root body .mf-poside .tx > span,
html:root:not(.fs-dark):not([data-theme="dark"]) body .mf-poside .tx > span { opacity: 1; }

/* .mf-hero .lbl  opacity 0.9 on div.lbl — carries span on money-flow (dark, light) */
html.fs-dark:root body .mf-hero .lbl,
html[data-theme="dark"]:root body .mf-hero .lbl,
html:root:not(.fs-dark):not([data-theme="dark"]) body .mf-hero .lbl { opacity: 1; }

/* .mf-walside .sub  opacity 0.9 on span.sub — carries span.sub on money-flow (light) */
html:root:not(.fs-dark):not([data-theme="dark"]) body .mf-walside .sub { opacity: 1; }

/* .hx-greet .lv  opacity 0.92 on div.lv — carries b on mc-home, media-library, studio-brand-kits (dark, light) */
html.fs-dark:root body .hx-greet .lv,
html[data-theme="dark"]:root body .hx-greet .lv,
html:root:not(.fs-dark):not([data-theme="dark"]) body .hx-greet .lv { opacity: 1; }

/* .htm-line  opacity 0.92 on div.htm-line — carries a on mc-home, media-library, studio-brand-kits (dark, light) */
html.fs-dark:root body .htm-line,
html[data-theme="dark"]:root body .htm-line,
html:root:not(.fs-dark):not([data-theme="dark"]) body .htm-line { opacity: 1; }

/* .mf-hero .sub  opacity 0.92 on div.sub — carries div.sub on money-flow (light) */
html:root:not(.fs-dark):not([data-theme="dark"]) body .mf-hero .sub { opacity: 1; }

/* .mf-walside .wl  opacity 0.92 on span.wl — carries span.wl on money-flow (light) */
html:root:not(.fs-dark):not([data-theme="dark"]) body .mf-walside .wl { opacity: 1; }

/* .lc-setup p  opacity 0.92 on p — carries p on golive (dark) */
html.fs-dark:root body .lc-setup p,
html[data-theme="dark"]:root body .lc-setup p { opacity: 1; }

/* .mf-walside .row  opacity 0.95 on span.row — carries span on money-flow (dark, light) */
html.fs-dark:root body .mf-walside .row,
html[data-theme="dark"]:root body .mf-walside .row,
html:root:not(.fs-dark):not([data-theme="dark"]) body .mf-walside .row { opacity: 1; }

/* .mvhc-hero p  opacity 0.95 on p — carries p on maven-help-center (dark, light) */
html.fs-dark:root body .mvhc-hero p,
html[data-theme="dark"]:root body .mvhc-hero p,
html:root:not(.fs-dark):not([data-theme="dark"]) body .mvhc-hero p { opacity: 1; }

/* .hx-welcome .wtx span  opacity 0.96 on span — carries b on mc-home, media-library, studio-brand-kits (dark, light) */
html.fs-dark:root body .hx-welcome .wtx span,
html[data-theme="dark"]:root body .hx-welcome .wtx span,
html:root:not(.fs-dark):not([data-theme="dark"]) body .hx-welcome .wtx span { opacity: 1; }

/* #admin-dashboard .ac-lf-mono span  opacity 0.96 on span — carries span on academy (dark) */
html.fs-dark:root body #admin-dashboard .ac-lf-mono span,
html[data-theme="dark"]:root body #admin-dashboard .ac-lf-mono span { opacity: 1; }
