/*
  tokens.css: the one token file for website draft 1 (lab/37/a) and the Mulholland system (lab/37/system).
  Every page in scope links it first; a.css and system.css also @import it, so the pages that link
  only those (the earlier homepages under a/v2-v4, the other system pages) get the same tokens.
  Kept by hand: add a token here, in its tier, and nowhere else (a/COMPONENTS.md, "Tokens", says how).

  This is a new design system lifted from the draft as it renders, not a normalisation of it. Sam,
  2026-09-25: "THIS IS A BRAND NEW DESIGN SYSTEM ... THERE CAN BE 41 FONT SIZES SINCE WE LIFTED THIS
  SYSTEM". So every value the draft sets is here exactly as it renders: off the 4px step, every font
  size, every leading and tracking. The structure is Marijn's design skill (.claude/skills/design):
  one file, the W3C DTCG three tiers, every value a token; its Rules are not applied.

  Three tiers, one section each, in this order:
    1 Primitives: raw values, named for what they are (--gray-990, --space-8, --text-m23,
      --duration-450, --number-0_85). Nothing outside this file reads them.
    2 Semantic roles: named for what they do, each an alias of a primitive (or a calc over them).
      Components read this tier. Shared roles first (layout, spacing, type roles, colour, opacity,
      layers, motion, reveal), then the roles one component plays (the window, the system, the
      page components by area, the motion module, the page styles). The rules at the end of the
      tier rebind roles: a ground's colours, a page's face, a role's value at a width.
    3 Component tokens: a component's own name for a semantic role, where it needs its own name
      because it differs from the shared default or is rebound (by a ground, a page or a script).
      Each aliases a tier-2 role; never a primitive, never a raw value.
  Components (a.css, system.css, motion.css, desk.css, the scripts, every page's <style> and
  style="") read tiers 2 and 3 only. A value used once is still a token.

  The grounds: .on-ink, .on-bone and the rest rebind --background and --foreground, which have no
  :root value, and .on-coral and .on-pop rebind --muted-opacity (.6 here; .78 on coral, .85 on the
  blue); the rules sit at the end of tier 2 (a.css paints the ground). Every rebind of a token lives
  here: the grounds, the button and the motion modules on the blue, the nav over a dark ground, a
  page's face; a page may still name a role for --flash on itself (Lulu & Georgia).
  Dark mode: the site has none and none is defined: the viewer's colour scheme and a data-theme on <html>
  change nothing. The wavefield (the MarzyOS hero's line mesh, /a/marzyos/v1/ and v2/) has two looks
  that a page picks once with <html data-wavefield-mode="light|dark">: light is the default, dark turns
  the hero alone to the warm charcoal with white lines and ink; its rebinds close tiers 2 and 3. The
  grounds are local surfaces, not a theme; [data-nav-over="dark"] is the nav over a dark ground (header[data-theme="dark"] the old header over
  a dark hero on a/v2-v4); the Marzy desk window carries the product's own dark skin as the --window-* roles.

  Custom properties only: this file styles nothing.
*/

/* ============================ 1 Primitives ============================ */

:root {
  /* Colour. gray: achromatic; stone: warm grey; one step each of slate, electric blue, coral, acid, pink; the desk's greens, amber and red. Stops follow OKLCH lightness on the standard 50-950 ladder (gray on the live site's own: 900 #262626, 950 #161616). Off-ladder stops (150, 450, 650, 925, 955, 975, 990) are measured values that sit between the standard steps; unused standard stops are left undefined, not invented. */
  --black:                           #000;
  --white:                           #fff;
  --acid-300:                        #dff140;
  --amber-500:                       #e8a13a;
  --coral-500:                       #f55d47;
  --electric-blue-700:               #2b3bff;
  --gray-100:                        #f5f5f5;
  --gray-150:                        #e9e9e9;
  --gray-200:                        #dcdcdc;
  --gray-300:                        #cfcfcf;
  --gray-400:                        #a6a6a6;
  --gray-450:                        #9a9a9a;
  --gray-500:                        #828282;
  --gray-800:                        #3f3f3f;
  --gray-900:                        #262626;
  --gray-925:                        #1b1b1b;
  --gray-955:                        #151515;
  --gray-975:                        #0d0d0d;
  --gray-990:                        #010101;
  --green-300:                       #a4e07f;
  --green-400:                       #7dc39a;
  --pink-500:                        #ff2d95;
  --rose-400:                        #f386a1; /* Sam’s supplied swatch, converted from its embedded profile to sRGB */
  --rose-800:                        #7a2444; /* deep rose for data marks on the soft rose surface */
  --red-600:                         #d62221;
  --slate-400:                       #8e9291;
  --stone-50:                        #f7f5f0;
  --stone-100:                       #f1f0ea;
  --stone-300:                       #d8d8d4;
  --stone-400:                       #b0b0a9;
  --stone-600:                       #565654;
  --stone-650:                       #545450;
  --stone-900:                       #242620; /* the warm charcoal of the wavefield's dark look, measured on Sam's reference (2026-09-25) */

  /* Colour at alpha */
  --acid-300-alpha-33:               rgba(223, 241, 64, 0.33);
  --amber-500-alpha-14:              rgba(232, 161, 58, 0.14);
  --black-alpha-22:                  rgba(0, 0, 0, 0.22);
  --black-alpha-50:                  rgba(0, 0, 0, 0.5);
  --black-alpha-60:                  rgba(0, 0, 0, 0.6);
  --black-alpha-70:                  rgba(0, 0, 0, 0.7);
  --gray-990-alpha-0:                rgba(1, 1, 1, 0);
  --gray-990-alpha-14:               rgba(1, 1, 1, 0.14);
  --gray-990-alpha-16:               rgba(1, 1, 1, 0.16);
  --gray-990-alpha-18:               rgba(1, 1, 1, 0.18);
  --gray-990-alpha-22:               rgba(1, 1, 1, 0.22);
  --gray-990-alpha-30:               rgba(1, 1, 1, 0.3);
  --gray-990-alpha-35:               rgba(1, 1, 1, 0.35);
  --gray-990-alpha-45:               rgba(1, 1, 1, 0.45);
  --gray-990-alpha-50:               rgba(1, 1, 1, 0.5);
  --gray-990-alpha-58:               rgba(1, 1, 1, 0.58);
  --gray-990-alpha-60:               rgba(1, 1, 1, 0.6);
  --gray-990-alpha-64:               rgba(1, 1, 1, 0.64);
  --gray-990-alpha-66:               rgba(1, 1, 1, 0.66);
  --gray-990-alpha-74:               rgba(1, 1, 1, 0.74);
  --white-alpha-9:                   rgba(255, 255, 255, 0.09);
  --white-alpha-16:                  rgba(255, 255, 255, 0.16);
  --white-alpha-35:                  rgba(255, 255, 255, 0.35);
  --white-alpha-50:                  rgba(255, 255, 255, 0.5);

  /* Colour channels (the system builds rgb(channels / alpha) so a ground can rebind the alpha) */
  --gray-950-rgb:                    22 22 22; /* #161616, the homepage ground */
  --white-rgb:                       255 255 255;

  /* Colour keywords (a role that means "none" or "the text colour" still aliases a primitive) */
  --transparent:                     transparent; /* no colour: the clear ground, the clear end of a mask or a fade */
  --current-color:                   currentColor; /* the element's own text colour, resolved where a role is used */

  /* Space: rem on the 4px step at the 16px root (N = px / 4) */
  --space-1:                         0.25rem;
  --space-2:                         0.5rem;
  --space-3:                         0.75rem;
  --space-4:                         1rem;
  --space-5:                         1.25rem;
  --space-6:                         1.5rem;
  --space-7:                         1.75rem;
  --space-8:                         2rem;
  --space-9:                         2.25rem;
  --space-10:                        2.5rem;
  --space-12:                        3rem;
  --space-13:                        3.25rem;
  --space-14:                        3.5rem;
  --space-16:                        4rem;
  --space-18:                        4.5rem;
  --space-20:                        5rem;
  --space-21:                        5.25rem;
  --space-24:                        6rem;
  --space-25:                        6.25rem;
  --space-28:                        7rem;
  --space-30:                        7.5rem;
  --space-32:                        8rem;
  --space-34:                        8.5rem;
  --space-36:                        9rem;
  --space-40:                        10rem;
  --space-44:                        11rem;
  --space-48:                        12rem;
  --space-56:                        14rem;
  --space-60:                        15rem;
  --space-72:                        18rem;
  --space-80:                        20rem;
  --space-88:                        22rem;
  --space-90:                        22.5rem;
  --space-96:                        24rem;
  --space-108:                       27rem;
  --space-112:                       28rem;
  --space-136:                       34rem;
  --space-168:                       42rem;
  --space-180:                       45rem;
  --space-208:                       52rem;

  /* Dimension: rem off the 4px step, named by px at 1440 (mN: N px at 390, where they were drawn for phones) */
  --dimension-1_6:                   0.1rem;
  --dimension-2_4:                   0.15rem;
  --dimension-2_8:                   0.175rem;
  --dimension-m3:                    0.214rem;
  --dimension-m4:                    0.286rem;
  --dimension-4_8:                   0.3rem;
  --dimension-m5:                    0.357rem;
  --dimension-5_6:                   0.35rem;
  --dimension-6:                     0.375rem;
  --dimension-6_4:                   0.4rem;
  --dimension-7:                     0.4375rem;
  --dimension-7_2:                   0.45rem;
  --dimension-8_8:                   0.55rem;
  --dimension-9:                     0.5625rem;
  --dimension-9_6:                   0.6rem;
  --dimension-10:                    0.625rem;
  --dimension-10_4:                  0.65rem;
  --dimension-11_2:                  0.7rem;
  --dimension-12_8:                  0.8rem;
  --dimension-14:                    0.875rem;
  --dimension-15:                    0.9375rem;
  --dimension-m16:                   1.143rem;
  --dimension-18:                    1.125rem;
  --dimension-19_2:                  1.2rem;
  --dimension-m20:                   1.428rem;
  --dimension-20_8:                  1.3rem;
  --dimension-22_4:                  1.4rem;
  --dimension-25_6:                  1.6rem;
  --dimension-m27:                   1.929rem;
  --dimension-30:                    1.875rem;
  --dimension-30_4:                  1.9rem;
  --dimension-35_2:                  2.2rem;
  --dimension-38_4:                  2.4rem;
  --dimension-m40:                   2.857rem;
  --dimension-43_2:                  2.7rem;
  --dimension-53_2:                  3.325rem;
  --dimension-57:                    3.5625rem;
  --dimension-69:                    4.3125rem;
  --dimension-71_4:                  4.4625rem;
  --dimension-m72:                   5.143rem;
  --dimension-m240:                  17.143rem;
  --dimension-247:                   15.4375rem;
  --dimension-510:                   31.875rem;

  /* Other lengths: px, em, percent, viewport and container units, named by value and unit */
  --percent-6:                       6%;
  --percent-10:                      10%;
  --percent-12:                      12%;
  --percent-15:                      15%;
  --percent-18_03:                   18.03%;
  --percent-20:                      20%;
  --percent-25:                      25%;
  --percent-30:                      30%;
  --percent-31_61:                   31.605%;
  --percent-32:                      32%;
  --percent-35:                      35%;
  --percent-40:                      40%;
  --percent-44:                      44%;
  --percent-50:                      50%;
  --percent-55:                      55%;
  --percent-60:                      60%;
  --percent-68:                      68%;
  --percent-70:                      70%;
  --percent-72:                      72%;
  --percent-75:                      75%;
  --percent-78_1:                    78.1%;
  --percent-80:                      80%;
  --percent-90:                      90%;
  --percent-90_2:                    90.2%;
  --percent-91:                      91%;
  --percent-94_33:                   94.332%;
  --percent-100:                     100%;
  --percent-120_97:                  120.97%;
  --percent-200:                     200%;
  --percent-300:                     300%;
  --percent-325_26:                  325.26%;
  --percent-441_43:                  441.43%;
  --cqh-100:                         100cqh;
  --cqi-100:                         100cqi;
  --cqw-100:                         100cqw;
  --dvh-20:                          20dvh;
  --dvh-100:                         100dvh;
  --em-0_15:                         0.15em;
  --em-0_18:                         0.18em;
  --em-0_2:                          0.2em;
  --em-0_6:                          0.6em;
  --em-1:                            1em;
  --em-1_2:                          1.2em;
  --em-1_25:                         1.25em;
  --em-2:                            2em;
  --em-2_5:                          2.5em;
  --em-6_4:                          6.4em;
  --em-6_5:                          6.5em;
  --em-7:                            7em;
  --em-32:                           32em;
  --lvh-100:                         100lvh;
  --px-minus-2:                      -2px;
  --px-0:                            0px;
  --px-0_5:                          0.5px;
  --px-0_75:                         0.75px;
  --px-0_8:                          0.8px;
  --px-1:                            1px;
  --px-1_1:                          1.1px;
  --px-1_35:                         1.35px;
  --px-1_3:                          1.3px;
  --px-1_5:                          1.5px;
  --px-1_6:                          1.6px;
  --px-2:                            2px;
  --px-3:                            3px;
  --px-3_2:                          3.2px;
  --px-3_4:                          3.4px;
  --px-4:                            4px;
  --px-5:                            5px;
  --px-6:                            6px;
  --px-6_5:                          6.5px;
  --px-8:                            8px;
  --px-10:                           10px;
  --px-12:                           12px;
  --px-16:                           16px; /* the browser's default text size (the nav's t, --nav-unit) */
  --px-20:                           20px; /* 1.25 x the default text size (the nav's t from 64em) */
  --px-24:                           24px;
  --px-28:                           28px;
  --px-32:                           32px;
  --px-40:                           40px;
  --px-44:                           44px; /* a thumb's tap target (the homepage rows on touch; the draft-only version switcher) */
  --px-46:                           46px;
  --px-200:                          200px;
  --px-320:                          320px;
  --px-1060:                         1060px;
  --svh-100:                         100svh;
  --vh-8:                            8vh;
  --vh-20:                           20vh;
  --vh-22_2:                         22.2vh;
  --vh-28:                           28vh;
  --vh-30:                           30vh;
  --vh-32:                           32vh;
  --vh-38:                           38vh;
  --vh-44_4:                         44.4vh;
  --vh-100:                          100vh;
  --vh-200:                          200vh;
  --vw-1:                            1vw;
  --vw-18_75:                        18.75vw;
  --vw-35:                           35vw;
  --vw-75:                           75vw;
  --vw-90:                           90vw;
  --vw-94:                           94vw;
  --vw-100:                          100vw;

  /* Font size: rem named by px at 1440 (mN: N px at 390), px (text-px-N: the drawings and the product window), and the fluid root steps. Every size the site sets is here; none is rounded to a ladder. */
  --text-12:                         0.75rem;
  --text-m13:                        0.929rem;
  --text-14:                         0.875rem;
  --text-15:                         0.938rem;
  --text-m15:                        1.071rem;
  --text-16:                         1rem;
  --text-m16:                        1.143rem;
  --text-16_8:                       1.05rem;
  --text-18:                         1.125rem;
  --text-m18:                        1.286rem;
  --text-20:                         1.25rem;
  --text-m20:                        1.429rem;
  --text-20_8:                       1.3rem;
  --text-22_4:                       1.4rem;
  --text-m23:                        1.643rem;
  --text-24:                         1.5rem;
  --text-m24:                        1.714rem;
  --text-m27:                        1.929rem;
  --text-32:                         2rem;
  --text-m32:                        2.286rem;
  --text-m34:                        2.429rem;
  --text-m36:                        2.571rem;
  --text-m38:                        2.714rem;
  --text-40:                         2.5rem;
  --text-51_2:                       3.2rem;
  --text-56:                         3.5rem;
  --text-m60:                        4.286rem;
  --text-64:                         4rem;
  --text-80:                         5rem;
  --text-96:                         6rem;
  --text-128:                        8rem;
  --text-140:                        8.75rem;
  --text-160:                        10rem;
  --text-px-9:                       9px;
  --text-px-10:                      10px;
  --text-px-11:                      11px;
  --text-px-11_5:                    11.5px; /* drawing text, SVG user units */
  --text-px-12:                      12px;
  --text-px-12_5:                    12.5px; /* drawing text, SVG user units */
  --text-px-13:                      13px;
  --text-px-14:                      14px; /* below 1280 wide */
  --text-px-15:                      15px;
  --text-px-16:                      16px; /* drawing text, SVG user units */
  --text-px-24:                      24px; /* from 2400 wide */
  --text-fluid-14-16:                calc(1.25vw - 2px); /* 1280-1439: 14 to 16 */
  --text-fluid-16-18:                calc(0.416667vw + 10px); /* 1440-1919: 16 to 18 */
  --text-fluid-18-24:                calc(1.25vw - 6px); /* 1920-2399: 18 to 24 */

  /* Line height (x100) */
  --leading-80:                      0.8;
  --leading-90:                      0.9;
  --leading-95:                      0.95;
  --leading-100:                     1;
  --leading-105:                     1.05;
  --leading-110:                     1.1;
  --leading-115:                     1.15;
  --leading-120:                     1.2;
  --leading-125:                     1.25;
  --leading-130:                     1.3;
  --leading-140:                     1.4;
  --leading-145:                     1.45;
  --leading-150:                     1.5;
  --leading-160:                     1.6;

  /* Letter spacing */
  --tracking-minus-0_1rem:           -0.1rem;
  --tracking-minus-0_08rem:          -0.08rem;
  --tracking-minus-0_07rem:          -0.07rem;
  --tracking-minus-0_054rem:         -0.054rem;
  --tracking-minus-0_051rem:         -0.051rem;
  --tracking-minus-0_05rem:          -0.05rem;
  --tracking-minus-0_049rem:         -0.049rem;
  --tracking-minus-0_04rem:          -0.04rem;
  --tracking-minus-0_03em:           -0.03em;
  --tracking-minus-0_025em:          -0.025em;
  --tracking-minus-0_023rem:         -0.023rem;
  --tracking-minus-0_02em:           -0.02em;
  --tracking-minus-0_02rem:          -0.02rem;
  --tracking-minus-0_019rem:         -0.019rem;
  --tracking-minus-0_01875em:        -0.01875em;
  --tracking-minus-0_017rem:         -0.017rem;
  --tracking-minus-0_016rem:         -0.016rem;
  --tracking-minus-0_015rem:         -0.015rem;
  --tracking-minus-0_014rem:         -0.014rem;
  --tracking-minus-0_013rem:         -0.013rem;
  --tracking-minus-0_0125em:         -0.0125em;
  --tracking-minus-0_011rem:         -0.011rem;
  --tracking-minus-0_01em:           -0.01em;
  --tracking-minus-0_01rem:          -0.01rem;
  --tracking-minus-0_009rem:         -0.009rem;
  --tracking-0em:                    0em;
  --tracking-0_01em:                 0.01em;
  --tracking-0_02em:                 0.02em;
  --tracking-0_04em:                 0.04em;

  /* Text transform */
  --text-transform-capitalize:       capitalize;

  /* Line style */
  --line-style-solid:                solid;

  /* Families and weights */
  --font-mono:                       ui-monospace, SFMono-Regular, Menlo, monospace; /* the motion module's run logs and code */
  --font-sans:                       "A Display", "Helvetica Now Display", Helvetica, Arial, sans-serif; /* Helvetica Now Display (the /a faces, a.css section 0) */
  --font-alliance-no1:               'Alliance No.1', sans-serif; /* system.css voice (lab/37/home and the other system pages) */
  --font-alliance-no2:               'Alliance No.2', sans-serif; /* system.css read face */
  --font-helvetica-now-display:      'Helvetica Now Display', sans-serif; /* the /a homepage (system.css) voice */
  --font-helvetica-now-text:         'Helvetica Now Text', sans-serif; /* the /a homepage (system.css) read face */
  --font-sans-micro:                 "A Micro", "Helvetica Now Micro", ui-monospace, Menlo, monospace; /* Helvetica Now Micro: captions and code labels (monospace is its last fallback) */
  --font-system-ui:                  -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif; /* the Marzy product (desk window) */
  --font-normal:                     400;
  --font-medium:                     500;
  --font-semibold:                   600;
  --font-bold:                       700;

  /* Radius */
  --radius-sm:                       2px;
  --radius-circle:                   50%;
  --radius-full:                     999px;
  --radius-100px:                    100px; /* the pager arrow's own value: a full round on its 28px box */

  /* SVG stroke width (user units) */
  --stroke-0_8:                      0.8; /* the desk brain (stroke-width=".8" inside desk.js BRAIN markup) */
  --stroke-1:                        1;
  --stroke-1_2:                      1.2;
  --stroke-1_4:                      1.4;
  --stroke-1_5:                      1.5;
  --stroke-2:                        2; /* the desk's Lucide icons */
  --stroke-2_5:                      2.5;

  /* SVG dash pattern (dash gap, user units) */
  --dash-2-4:                        2 4;
  --dash-4-3:                        4 3; /* the model drawings' flows and open planes */
  --dash-8-5:                        8 5; /* the model drawings' rings */

  /* Angle */
  --deg-20:                          20deg;
  --deg-33:                          33deg;

  /* Alpha (opacity, x100) */
  --alpha-0:                         0;
  --alpha-8:                         0.08;
  --alpha-14:                        0.14;
  --alpha-16:                        0.16;
  --alpha-20:                        0.2;
  --alpha-30:                        0.3;
  --alpha-35:                        0.35;
  --alpha-40:                        0.4;
  --alpha-43_75:                     0.4375;
  --alpha-50:                        0.5;
  --alpha-55:                        0.55;
  --alpha-60:                        0.6;
  --alpha-70:                        0.7;
  --alpha-75:                        0.75;
  --alpha-78:                        0.78;
  --alpha-80:                        0.8;
  --alpha-85:                        0.85;
  --alpha-100:                       1;

  /* Stacking order */
  --z-minus-1:                       -1;
  --z-0:                             0;
  --z-1:                             1;
  --z-2:                             2;
  --z-3:                             3;
  --z-4:                             4;
  --z-5:                             5;
  --z-40:                            40;
  --z-45:                            45;
  --z-50:                            50;
  --z-60:                            60;
  --z-100:                           100;

  /* Duration (ms) */
  --duration-0:                      0ms;
  --duration-14:                     14ms;
  --duration-16:                     16ms;
  --duration-30:                     30ms;
  --duration-33:                     33ms;
  --duration-40:                     40ms;
  --duration-50:                     50ms;
  --duration-60:                     60ms;
  --duration-100:                    100ms;
  --duration-125:                    125ms;
  --duration-150:                    150ms;
  --duration-180:                    180ms;
  --duration-190:                    190ms;
  --duration-200:                    200ms;
  --duration-250:                    250ms;
  --duration-260:                    260ms;
  --duration-270:                    270ms;
  --duration-300:                    300ms;
  --duration-320:                    320ms;
  --duration-330:                    330ms;
  --duration-350:                    350ms;
  --duration-370:                    370ms;
  --duration-400:                    400ms;
  --duration-420:                    420ms;
  --duration-430:                    430ms;
  --duration-450:                    450ms;
  --duration-480:                    480ms;
  --duration-500:                    500ms;
  --duration-550:                    550ms;
  --duration-560:                    560ms;
  --duration-600:                    600ms;
  --duration-650:                    650ms;
  --duration-700:                    700ms;
  --duration-750:                    750ms;
  --duration-800:                    800ms;
  --duration-900:                    900ms;
  --duration-1000:                   1000ms;
  --duration-1100:                   1100ms;
  --duration-1200:                   1200ms;
  --duration-1400:                   1400ms;
  --duration-1500:                   1500ms;
  --duration-1600:                   1600ms;
  --duration-1800:                   1800ms;
  --duration-2000:                   2000ms;
  --duration-2800:                   2800ms;
  --duration-3600:                   3600ms;
  --duration-4600:                   4600ms;
  --duration-5000:                   5000ms;
  --duration-6000:                   6000ms;
  --duration-24000:                  24000ms;

  /* Easing */
  --ease-css-ease:                   ease;
  --ease-css-ease-out:               ease-out;
  --ease-in-out-cubic:               cubic-bezier(0.645, 0.045, 0.355, 1);
  --ease-linear:                     linear;
  --ease-out-sine:                   cubic-bezier(0.39, 0.575, 0.565, 1);
  --ease-out-soft:                   cubic-bezier(0.22, 0.7, 0.3, 1);
  --ease-out-cubic:                  cubic-bezier(0.215, 0.61, 0.355, 1);
  --ease-out-expo:                   cubic-bezier(0.19, 1, 0.22, 1);
  --ease-steps-2:                    steps(2);

  /* Aspect ratio */
  --ratio-1_485:                     1.485;
  --ratio-3-2:                       3 / 2;
  --ratio-4-5:                       4 / 5;
  --ratio-6-5:                       6 / 5;
  --ratio-16-7:                      16 / 7;
  --ratio-16-9:                      16 / 9;
  --ratio-16-10:                     16 / 10;
  --ratio-8-10:                      8 / 10;
  --ratio-294-160:                   294 / 160;
  --ratio-300-167:                   300 / 167;
  --ratio-327-182:                   327 / 182;
  --ratio-383-280:                   383 / 280;
  --ratio-854-480:                   854 / 480;
  --ratio-1581-756:                  1581 / 756; /* the ontology figure (the .art-fig__frame default) */
  --ratio-1600-889:                  1600 / 889;
  --ratio-1600-950:                  1600 / 950;
  --ratio-1376-1006:                 1376 / 1006;

  /* Numbers: unitless factors, fractions, scales, viewport fractions and counts */
  --number-minus-1:                  -1;
  --number-0_03:                     0.03;
  --number-0_08:                     0.08;
  --number-0_3:                      0.3;
  --number-0_32:                     0.32;
  --number-0_35:                     0.35;
  --number-0_375:                    0.375;
  --number-0_39245:                  0.39245; /* demo crop: the app window centre in the recording */
  --number-0_45:                     0.45;
  --number-0_5:                      0.5;
  --number-0_55:                     0.55;
  --number-0_5625:                   0.5625; /* 9 / 16 */
  --number-0_6:                      0.6;
  --number-0_62:                     0.62;
  --number-0_65:                     0.65;
  --number-0_7:                      0.7;
  --number-0_75:                     0.75;
  --number-0_8:                      0.8;
  --number-0_84:                     0.84; /* fraction of the viewport height */
  --number-0_85:                     0.85; /* fraction of the viewport height */
  --number-0_89:                     0.89; /* fraction of the viewport height */
  --number-0_9:                      0.9; /* fraction of the viewport height */
  --number-0_91:                     0.91; /* fraction of the viewport height */
  --number-1:                        1; /* fraction of the viewport height */
  --number-1_04:                     1.04; /* timeline frame push-in */
  --number-1_1:                      1.1; /* the v3 screen capture stands 1.1x the height under the inset */
  --number-1_12:                     1.12; /* projector push, phone film travel */
  --number-1_15:                     1.15; /* ontology brightness on the blue */
  --number-1_2:                      1.2; /* the 1440 / 1200 stroke maths of the live linework; the film travel */
  --number-1_3:                      1.3;
  --number-1_5:                      1.5;
  --number-1_6:                      1.6;
  --number-2:                        2;
  --number-3:                        3;
  --number-3_7:                      3.7;
  --number-5_4:                      5.4;
  --number-8:                        8;
  --number-19:                       19;
  --number-30:                       30;
  --number-64:                       64;
  --number-96:                       96;
  --number-240:                      240;
  --number-420:                      420;

  /* The Marzy window's logical px (desk.css multiplies them by --u or --ub) */
  --logical-px-1:                    1; /* one logical px of the window */
  --logical-px-2:                    2;
  --logical-px-3:                    3;
  --logical-px-4:                    4;
  --logical-px-5:                    5;
  --logical-px-6:                    6;
  --logical-px-7:                    7;
  --logical-px-8:                    8;
  --logical-px-9:                    9;
  --logical-px-9_5:                  9.5;
  --logical-px-10:                   10;
  --logical-px-11:                   11;
  --logical-px-11_5:                 11.5;
  --logical-px-12:                   12;
  --logical-px-12_5:                 12.5;
  --logical-px-13:                   13;
  --logical-px-14:                   14;
  --logical-px-15:                   15;
  --logical-px-16:                   16;
  --logical-px-18:                   18;
  --logical-px-20:                   20;
  --logical-px-21:                   21;
  --logical-px-22:                   22;
  --logical-px-26:                   26;
  --logical-px-28:                   28;
  --logical-px-40:                   40;
  --logical-px-62:                   62;
  --logical-px-250:                  250;
  --logical-px-440:                  440;
  --logical-px-540:                  540;
  --logical-px-658:                  658;
  --logical-px-823:                  823;
  --logical-px-870:                  870;
  --logical-px-1060:                 1060;
  --logical-px-1120:                 1120;
}

/* ============================ 2 Semantic roles ============================ */

:root {
  /* Root size (html { font-size }; the steps sit in the @media rules at the end of this tier) */
  --root-font-size:                  var(--text-px-14); /* html { font-size } (a.css); the homepage keeps the browser size */

  /* Layout */
  --page-margin:                     var(--space-8); /* 32 at 1440; 20 at 390 */
  --gutter:                          var(--dimension-18); /* 18 at 1440; 5 at 390 */
  --row-gap:                         var(--space-5); /* 20 at 1440 */
  --header-height:                   var(--dimension-71_4); /* 71.4 at 1440; 72 at 390 */
  --radius:                          var(--radius-sm); /* the one base radius */

  /* Spacing: the shared t-shirt scale */
  --spacing-3xs:                     var(--space-1);
  --spacing-2xs:                     var(--space-2);
  --spacing-xs:                      var(--space-3);
  --spacing-sm:                      var(--space-4);
  --spacing-md:                      var(--space-6);
  --spacing-lg:                      var(--space-8);
  --spacing-xl:                      var(--space-12);
  --spacing-2xl:                     var(--space-16);
  --spacing-3xl:                     var(--space-24);
  --spacing-4xl:                     var(--space-28);
  --control-padding-inline:          var(--dimension-11_2); /* chips and toggles over media: the skip link, the media and motion Pause toggles */

  /* Lines, rings, icon strokes and small shapes */
  --hairline:                        var(--px-1); /* borders, rules, underlines, outlines */
  --line-medium:                     var(--px-1_5); /* drawn icon lines (burger, plus, accordion +/-), the play ring */
  --ring-width:                      var(--px-2);
  --ring-offset:                     var(--px-2);
  --ring-offset-inset:               var(--px-minus-2); /* rings drawn inside a clipping box */
  --ring-offset-control:             var(--px-4); /* inputs and the confirmation */
  --underline-offset:                var(--em-0_15);
  --underline-offset-row:            var(--em-0_18);
  --icon-stroke:                     var(--stroke-1_5); /* 24px icons (scroll cue, search) */
  --icon-stroke-small:               var(--stroke-1_2); /* the 10px link arrow; the drawings' line (--diagram-stroke) */
  --brain-mark-stroke:               var(--stroke-1); /* the brain mark drawn in its own units (motion.html's window brand) */
  --pill-radius:                     var(--radius-full);
  --round-radius:                    var(--radius-circle); /* a circle: the play mark, the motion module's signal */
  --caret-height:                    var(--em-1); /* a typing caret: one line of the current type */

  /* Type: families, weights and the type roles (size, leading, tracking; the phone values sit in the @media rule below) */
  --type-family:                     var(--font-sans);
  --type-family-code:                var(--font-sans-micro);
  --type-family-mono:                var(--font-mono);
  --type-weight:                     var(--font-normal);
  --type-weight-medium:              var(--font-medium);
  --type-weight-semibold:            var(--font-semibold);
  --type-weight-bold:                var(--font-bold);
  --type-title-transform:            var(--text-transform-capitalize); /* a page may set none to keep sentence case */
  --type-label-size:                 var(--text-12);
  --type-label-leading:              var(--leading-105);
  --type-label-tracking:             var(--tracking-0_04em);
  --type-small-size:                 var(--text-15);
  --type-small-leading:              var(--leading-120);
  --type-small-tracking:             var(--tracking-minus-0_009rem);
  --type-p-size:                     var(--text-16_8);
  --type-p-leading:                  var(--leading-120);
  --type-p-tracking:                 var(--tracking-minus-0_009rem);
  --type-lg-size:                    var(--text-18);
  --type-lg-leading:                 var(--leading-115);
  --type-lg-tracking:                var(--tracking-minus-0_011rem);
  --type-h7-size:                    var(--text-20);
  --type-h7-leading:                 var(--leading-115);
  --type-h7-tracking:                var(--tracking-minus-0_013rem);
  --type-h6-size:                    var(--text-24);
  --type-h6-leading:                 var(--leading-115);
  --type-h6-tracking:                var(--tracking-minus-0_015rem);
  --type-h5-size:                    var(--text-32);
  --type-h5-leading:                 var(--leading-115);
  --type-h5-tracking:                var(--tracking-minus-0_02rem);
  --type-h4-size:                    var(--text-40);
  --type-h4-leading:                 var(--leading-115);
  --type-h4-tracking:                var(--tracking-minus-0_05rem);
  --type-h3-size:                    var(--text-56);
  --type-h3-leading:                 var(--leading-110);
  --type-h3-tracking:                var(--tracking-minus-0_07rem);
  --type-h2-size:                    var(--text-64);
  --type-h2-leading:                 var(--leading-105);
  --type-h2-tracking:                var(--tracking-minus-0_08rem);
  --type-h1-size:                    var(--text-80);
  --type-h1-leading:                 var(--leading-105);
  --type-h1-tracking:                var(--tracking-minus-0_1rem);
  --type-mega-size:                  var(--text-160);
  --type-mega-leading:               var(--leading-110);
  --type-mega-tracking:              var(--tracking-minus-0_025em);
  --type-display-size:               var(--text-128);
  --type-display-leading:            var(--leading-90);
  --type-display-tracking:           var(--tracking-minus-0_01875em);
  --type-numeral-size:               var(--text-140);
  --type-numeral-leading:            var(--leading-95);
  --type-numeral-tracking:           var(--tracking-minus-0_01em);
  --type-link-size:                  var(--text-14);
  --type-link-leading:               var(--leading-105);
  --type-link-tracking:              var(--tracking-minus-0_009rem);
  --type-button-size:                var(--text-16_8);
  --type-button-leading:             var(--leading-105);
  --type-button-tracking:            var(--tracking-minus-0_01rem);
  --type-body-size:                  var(--text-16_8);
  --type-body-leading:               var(--leading-130);
  --type-body-tracking:              var(--tracking-minus-0_009rem);
  --type-menu-size:                  var(--text-m23);
  --type-menu-leading:               var(--leading-115);
  --type-menu-tracking:              var(--tracking-minus-0_016rem);
  --type-code-leading:               var(--leading-130); /* the Micro code style (media captions, placeholder labels, the work cycle notes), with --type-family-code at --type-label-size */
  --type-code-tracking:              var(--tracking-0_02em); /* code and code labels (the Micro face) */

  /* Colour: surfaces, the grounds (.on-bone, .on-white, .on-stone, .on-ink, .on-black, .on-clear) */
  --surface-canvas:                  var(--stone-100); /* bone: the default reading ground (.on-bone) */
  --surface-canvas-foreground:       var(--gray-990); /* ink */
  --surface-rose:                    var(--rose-400); /* Altadena’s soft pink ground */
  --surface-card:                    var(--white); /* white panels and grounds (.on-white) */
  --surface-card-foreground:         var(--gray-990);
  --surface-muted:                   var(--stone-300); /* stone: quiet panels (.on-stone, the caps frame, the dot field, the wavefield) */
  --surface-muted-foreground:        var(--gray-990);
  --surface-inverse:                 var(--gray-990); /* ink bands and cards (.on-ink) */
  --surface-inverse-foreground:      var(--white);
  --surface-inverse-warm:            var(--stone-900); /* warm charcoal: the wordmark hero's ground in the wavefield's dark look (MarzyOS v2) */
  --surface-base:                    var(--black); /* black: the page under every slice, the footer (.on-black) */
  --surface-base-foreground:         var(--white);
  --surface-clear:                   var(--transparent); /* .on-clear */
  --surface-clear-foreground:        var(--gray-990);

  /* Colour: intent */
  --primary:                         var(--electric-blue-700); /* the electric blue: one loud ground per page, the closing band (.on-pop) */
  --primary-foreground:              var(--white);
  --accent:                          var(--coral-500); /* the Mulholland coral (.on-coral); ink text on it, never beside or on the blue */
  --accent-foreground:               var(--gray-990);
  --accent-pink:                      var(--pink-500); /* the pink ground (.on-pink): a bottom section on a page that wants the accent; ink text on it */
  --accent-rose:                     var(--rose-800); /* data accent on soft rose */
  --accent-pink-foreground:           var(--gray-990);
  --secondary:                       var(--slate-400); /* slate (.on-slate) */
  --secondary-foreground:            var(--gray-990);
  --highlight:                       var(--acid-300); /* acid: the load bar, the one hot accent on the blue */
  --highlight-foreground:            var(--gray-990);
  --highlight-client:                var(--pink-500); /* a client page's own load bar (Lulu & Georgia pink); set as --flash on the page */
  --selection:                       var(--acid-300-alpha-33);
  --mask-solid:                      var(--black); /* the opaque end of a mask gradient (masks read alpha, not colour) */
  --mask-clear:                      var(--transparent); /* the clear end of a mask gradient */

  /* Colour: text, borders, fills and overlays */
  --muted-foreground:                var(--stone-600); /* grey secondary text on light grounds (hero anchors) */
  --muted-foreground-inverse:        var(--stone-300); /* secondary text on the dark overlay: 5.96:1 even over white (section switcher) */
  --border:                          var(--stone-400); /* warm-1 hairlines: tab rail, search underline, accordion rules, form lines on ink */
  --border-strong:                   var(--stone-600); /* warm-2 hairlines: spec rows, form lines */
  --border-subtle:                   color-mix(in srgb, var(--current-color) var(--percent-20), var(--transparent)); /* the current text colour at 20%: log rows, place rows, module lines */
  --border-subtle-strong:            color-mix(in srgb, var(--current-color) var(--percent-25), var(--transparent)); /* 25%: the hairline weight on the blue */
  --fill-subtle:                     color-mix(in srgb, var(--current-color) var(--percent-6), var(--transparent)); /* a quiet panel tint */
  --foreground-muted-mix:            color-mix(in srgb, var(--current-color) var(--percent-60), var(--transparent)); /* --muted-opacity as a colour, for text whose children must stay full */
  --overlay:                         var(--black-alpha-70); /* the veil: chips, toggles, switcher, dark frost */
  --overlay-foreground:              var(--white);
  --overlay-light:                   var(--white-alpha-50); /* the frost: header bar, mobile menu */
  --overlay-subtle:                  var(--gray-990-alpha-35); /* the play mark disc */
  --placeholder-line:                var(--white-alpha-16);
  --placeholder-line-inverse:        var(--gray-990-alpha-16);
  --foreground-primary-muted-mix:    color-mix(in srgb, var(--current-color) calc(var(--primary-muted-opacity) * var(--percent-100)), var(--transparent)); /* --primary-muted-opacity as a colour (secondary text on the blue) */

  /* Opacity */
  --muted-opacity-default:           var(--alpha-60); /* --muted-opacity on every ground but coral and the blue; the motion linework keeps it on the blue */
  --muted-opacity:                   var(--muted-opacity-default); /* secondary text and quiet parts; .78 on coral, .85 on the blue */
  --faint-opacity:                   var(--alpha-30);
  --accent-muted-opacity:            var(--alpha-78); /* holds 4.5:1 on coral */
  --primary-muted-opacity:           var(--alpha-85); /* holds 4.5:1 on the blue */
  --accent-pink-muted-opacity:       var(--alpha-78); /* holds about 5:1 on the pink */
  --soft-opacity:                    var(--alpha-50); /* nav hover, unmounted tabs, dim drawing text */
  --disabled-opacity:                var(--alpha-20); /* disabled arrows, idle tenants */
  --shown-opacity:                   var(--alpha-100); /* one of two stacked parts, the one that shows (the nav's lockup for its ground) */
  --hidden-opacity:                  var(--alpha-0); /* the other one */

  /* Layers */
  --layer-below:                     var(--z-minus-1);
  --layer-base:                      var(--z-0); /* the dot field, the wavefield */
  --layer-raised:                    var(--z-1);
  --layer-above:                     var(--z-2);
  --layer-controls:                  var(--z-3); /* media toggles */
  --layer-label:                     var(--z-4); /* specimen bars */
  --layer-label-top:                 var(--z-5); /* specimen labels */
  --layer-switcher:                  var(--z-40);
  --layer-menu:                      var(--z-45);
  --layer-header:                    var(--z-50);
  --layer-loadbar:                   var(--z-60);
  --layer-skip:                      var(--z-100);

  /* Motion: durations and easings */
  --motion-stagger:                  var(--duration-50); /* one beat: line staggers and the drawing timelines (--beat counts beats) */
  --motion-image:                    var(--duration-125); /* an image fading in */
  --motion-fast:                     var(--duration-150);
  --motion-quick:                    var(--duration-200);
  --motion-brisk:                    var(--duration-250);
  --motion-normal:                   var(--duration-300); /* hovers, fades, colour changes */
  --motion-bar:                      var(--duration-450); /* the load bar, the digit roll */
  --motion-swap:                     var(--duration-480); /* a capability panel swapping */
  --motion-slow:                     var(--duration-500); /* menus, sheets, panel reveals */
  --motion-mask:                     var(--duration-550);
  --motion-fade:                     var(--duration-600);
  --motion-enter:                    var(--duration-650); /* the live section reveal */
  --motion-card:                     var(--duration-750);
  --motion-frame:                    var(--duration-800);
  --motion-beat:                     var(--duration-900);
  --motion-reveal:                   var(--duration-1000); /* the reveal */
  --motion-draw-line:                var(--duration-1100);
  --motion-reveal-long:              var(--duration-1200);
  --motion-trace:                    var(--duration-1400);
  --motion-rise:                     var(--duration-1500); /* rise, up and rule reveals */
  --motion-push:                     var(--duration-1600);
  --motion-draw:                     var(--duration-2000);
  --motion-lap:                      var(--duration-5000); /* one rider lap until motion.js sets its own (--mo-rider-lap) */
  --motion-film-hold:                var(--duration-6000); /* each screen of a film cycle (motion.js and system.js read it) */
  --motion-push-long:                var(--duration-24000); /* the projector push */
  --motion-blink:                    var(--duration-1000); /* one caret blink, with --motion-ease-blink */
  --motion-land:                     var(--duration-420); /* a desk row landing, with --motion-ease-land */
  --motion-ease-reveal:              var(--ease-out-expo);
  --motion-ease-ui:                  var(--ease-out-cubic);
  --motion-ease-swap:                var(--ease-in-out-cubic);
  --motion-ease-panel:               var(--ease-out-sine);
  --motion-ease-fade:                var(--ease-css-ease-out); /* the keyword ease-out */
  --motion-ease-standard:            var(--ease-css-ease); /* the keyword ease */
  --motion-ease-steady:              var(--ease-linear);
  --motion-ease-land:                var(--ease-out-soft); /* a desk row landing */
  --motion-ease-blink:               var(--ease-steps-2);
  --reveal-delay-step:               var(--duration-100); /* the stagger step of data-stagger (a.js), and --delay steps of 100ms */

  /* Reveal lines (fractions of the viewport height a.js triggers at) and scramble times */
  --reveal-line:                     var(--number-0_9); /* the default */
  --reveal-line-label:               var(--number-0_84);
  --reveal-line-edge:                var(--number-1); /* as soon as the top enters */
  --reveal-line-middle:              var(--number-0_5);
  --reveal-line-drawing:             var(--number-0_8);
  --reveal-line-row:                 var(--number-0_85);
  --reveal-line-accordion:           var(--number-0_89);
  --reveal-line-caps:                var(--number-0_91);
  --reveal-line-late:                var(--number-0_75);
  --scramble-label:                  var(--duration-370); /* labels */
  --scramble-tag:                    var(--duration-430); /* product tags, spec terms */
  --scramble-code:                   var(--duration-450); /* product codes */
  --scramble-label-long:             var(--duration-400);
  --scramble-eyebrow:                var(--duration-500); /* the a.js default */
  --scramble-blink:                  var(--duration-60);
  --scramble-code-short:             var(--duration-320);
  --scramble-group:                  var(--duration-450); /* a.js default for data-scramble="group" */
  --scramble-hero-code:              var(--duration-600); /* a hero's product code ([Commerce], [Specimen]) */
  --scramble-hero-text:              var(--duration-270); /* the hero line after the code */
  --scramble-hero-place:             var(--duration-330); /* a hero's place and its dim line (Horizon) */
  --scramble-status:                 var(--duration-420); /* a page's status label (In discovery) */
  --scramble-caps:                   var(--duration-550); /* a.js: a capability label as its tab opens */
  --scramble-caps-mount:             var(--duration-600); /* a.js: the first capability label once the tabs mount */
  --scramble-frame:                  var(--duration-30); /* a.js: a scrambling line redraws its random letters at most this often */

  /* Script timings and scroll lines: a.js, motion.js, desk.js and system.js read these by name */
  --loadbar-hold:                    var(--duration-480); /* a.js: the load bar holds full this long before it fades */
  --status-hold:                     var(--duration-1600); /* a.js: a copied-link status reads this long */
  --caps-leave:                      var(--duration-700); /* a.js: a leaving capability panel is cleared after its .5s swap */
  --timeline-settle:                 var(--duration-900); /* a.js: frames under the current one are cleared after the .8s fade */
  --iso-hold:                        var(--duration-2800); /* a.js: each tenant of the isolation drawing */
  --team-logos-hold:                 var(--duration-6000); /* each group of team-experience logos */
  --brand-mark-invert:               var(--number-1); /* white monochrome logo on a light ground */
  --decode-hover-in:                 var(--duration-650); /* the tag decode (a.js TAG, system.js TIMING) */
  --decode-hover-out:                var(--duration-450); /* the tag decode (a.js TAG, system.js TIMING) */
  --decode-idle-in:                  var(--duration-900); /* the tag decode (a.js TAG, system.js TIMING) */
  --decode-idle-hold:                var(--duration-1800); /* the tag decode (a.js TAG, system.js TIMING) */
  --decode-idle-out:                 var(--duration-600); /* the tag decode (a.js TAG, system.js TIMING) */
  --decode-idle-gap:                 var(--duration-350); /* the tag decode (a.js TAG, system.js TIMING) */
  --decode-idle-start:               var(--duration-900); /* the tag decode (a.js TAG, system.js TIMING) */
  --projector-dwell:                 var(--duration-3600); /* a.js PROJ (homepage v3, a guard page) */
  --projector-cut:                   var(--duration-180); /* a.js PROJ (homepage v3, a guard page) */
  --projector-step:                  var(--duration-800); /* a.js PROJ (homepage v3, a guard page) */
  --projector-back:                  var(--duration-450); /* a.js PROJ (homepage v3, a guard page) */
  --projector-grace:                 var(--duration-260); /* a.js PROJ (homepage v3, a guard page) */
  --projector-warm:                  var(--duration-1500); /* a.js PROJ (homepage v3, a guard page) */
  --frame-settle-buffer:             var(--duration-40); /* extra wait after a projector crossfade before hidden frames are cleared */
  --mo-together-start:               var(--duration-500); /* motion.js together: the first connection and the first line of the module */
  --mo-together-port-step:           var(--duration-420); /* motion.js together: each further connection */
  --mo-together-code-step:           var(--duration-190); /* motion.js together: each further line of the module */
  --mo-together-log-start:           var(--duration-700); /* motion.js together: the first line of the nightly run */
  --mo-together-log-step:            var(--duration-560); /* motion.js together: each further run line */
  --mo-together-done-after:          var(--duration-300); /* motion.js together: the run reads done this long after its last line */
  --mo-together-hold:                var(--duration-1400); /* motion.js together: scene one holds, finished, before scene two rises */
  --mo-together-reply-start:         var(--duration-500); /* motion.js together: scene two's code, after the rise */
  --mo-together-reply-step:          var(--duration-150); /* motion.js together: each further line of it */
  --mo-together-type-first:          var(--duration-900); /* motion.js together: Marzy starts typing the first answer */
  --mo-together-type-next:           var(--duration-700); /* motion.js together: and any later one */
  --mo-together-rest:                var(--duration-4600); /* motion.js together: the rest before it plays again */
  --mo-type-interval:                var(--duration-16); /* motion.js: one typed character where data-mo-say names none */
  --mo-type-interval-fast:           var(--duration-14); /* motion.js: one typed character of the second answer (data-mo-say) */
  --scroll-anchor:                   var(--duration-400); /* a.js: an in-page link or a contents link scrolls this long */
  --scroll-cue:                      var(--duration-1100); /* a.js: the hero cue scrolls to the hero's end (and the v5 reel cue) */
  --scroll-nudge:                    var(--duration-500); /* a.js: the v5 reel brings a focused row into view */
  --header-frost-offset:             var(--px-32); /* a.js: the header frosts once the page has scrolled this far */
  --switcher-show-line:              var(--number-0_6); /* a.js: the section switcher shows past this fraction of a viewport */
  --switcher-hide-line:              var(--number-0_5); /* a.js: and hides while its until element rises above this line */
  --timeline-line:                   var(--number-0_55); /* a.js: the timeline row whose top passes this line is current */
  --timeline-line-clearance-mobile:  var(--px-40); /* a.js: on phones the line stays this far under the sticky screen */
  --toc-line:                        var(--number-0_35); /* a.js: the contents link whose heading passes this line is current */

  /* Media */
  --aspect-video:                    var(--ratio-16-9); /* films, product media, news images */
  --video-player-min-height:         var(--px-200); /* keep the native player controls usable in narrow cards */
  --aspect-portrait:                 var(--ratio-4-5);
  --aspect-screen:                   var(--ratio-1600-950); /* a product screen recording (the work cycle stage) */

  /* Diagrams (the drawings: SVG user units) */
  --diagram-text-xs:                 var(--text-px-9);
  --diagram-text-sm:                 var(--text-px-10);
  --diagram-text:                    var(--text-px-11); /* labels, the base */
  --diagram-text-md:                 var(--text-px-12);
  --diagram-text-lg:                 var(--text-px-13); /* identifiers */
  --diagram-text-xl:                 var(--text-px-14);
  --diagram-text-title:              var(--text-px-15); /* titles */
  --diagram-fill-secondary:          var(--alpha-40); /* a chart's second share: the solid at 40% */
  --diagram-dash:                    var(--dash-4-3); /* a flow, an open plane, a ghost (the model drawings, .dx) */
  --diagram-dash-bound:              var(--dash-8-5); /* a ring: the line the model works inside, where a person decides */
  --diagram-face-lit:                var(--alpha-0); /* a pipeline drawing's solid (STYLE-v2): the face toward the light, the foreground's share over the ground */
  --diagram-face-half:               var(--alpha-8); /* the half-lit face: 8% of the foreground over the ground */
  --diagram-face-shadow:             var(--alpha-16); /* the face in shadow: 16% */

  /* The Marzy window (desk.css, desk.js): the product's own dark skin; sizes in its logical px */
  --window-frame:                    var(--gray-975);
  --window-background:               var(--gray-955);
  --window-surface:                  var(--gray-925);
  --window-foreground:               var(--gray-100);
  --window-label:                    var(--gray-300);
  --window-faint:                    var(--gray-400);
  --window-muted-foreground:         var(--gray-450);
  --window-tab:                      var(--gray-500);
  --window-border:                   var(--gray-900);
  --window-light:                    var(--gray-800); /* the traffic lights */
  --window-success:                  var(--green-400);
  --window-positive:                 var(--green-300);
  --window-warning:                  var(--amber-500);
  --window-send:                     var(--red-600);
  --window-typed:                    var(--stone-50);
  --window-send-foreground:          var(--white);
  --window-mark:                     var(--gray-150);
  --window-brain:                    var(--gray-200);
  --window-pressed:                  var(--white-alpha-9);
  --window-warning-subtle:           var(--amber-500-alpha-14);
  --window-shadow:                   var(--black-alpha-50);
  --window-font-family:              var(--font-system-ui);
  --window-font-size:                var(--text-px-13); /* the product's own 13px */
  --window-leading:                  var(--leading-150);
  --window-width:                    var(--logical-px-1120); /* logical px: the screen as the product draws it */
  --window-bar-width:                var(--logical-px-1060); /* logical px the title bar is drawn at */
  --window-width-middle:             var(--logical-px-870); /* thread and record, 600-960 boxes */
  --window-bar-width-middle:         var(--logical-px-823);
  --window-width-narrow:             var(--logical-px-440); /* the thread alone, under 600 */
  --window-bar-height:               var(--logical-px-28);
  --window-bar-height-tabs:          var(--logical-px-62);
  --window-screen-height:            var(--logical-px-658);
  --window-screen-height-narrow:     var(--logical-px-540);
  --window-queue-width:              var(--logical-px-250);
  --window-radius:                   var(--logical-px-14);
  --window-unit-min:                 var(--px-0_75); /* --ub floor: the tabs and Pause stay readable */
  --window-unit-max:                 var(--px-1_6);
  --window-hit:                      var(--px-24); /* every control keeps a 24px hit area */
  --window-fallback-width:           var(--px-1060); /* box width when container units are missing */
  --window-box-width:                var(--cqi-100); /* the width of the box the window sits in (container query units) */
  --window-bar-unit-max-middle:      var(--px-1_3); /* --ub cap in 600-960 boxes */
  --window-unit-max-narrow:          var(--px-1); /* --u cap under 600: past 440 wide the type stops at the product's own 13px */
  --window-bar-unit-min-narrow:      var(--px-0_8); /* --ub floor under 600 */
  --window-bar-unit-max-narrow:      var(--px-1_1); /* --ub cap under 600 */
  --window-space-1:                  var(--logical-px-1);
  --window-space-2:                  var(--logical-px-2);
  --window-space-3:                  var(--logical-px-3);
  --window-space-4:                  var(--logical-px-4);
  --window-space-5:                  var(--logical-px-5);
  --window-space-6:                  var(--logical-px-6);
  --window-space-7:                  var(--logical-px-7);
  --window-space-8:                  var(--logical-px-8);
  --window-space-9:                  var(--logical-px-9);
  --window-space-10:                 var(--logical-px-10);
  --window-space-11:                 var(--logical-px-11);
  --window-space-12:                 var(--logical-px-12);
  --window-space-13:                 var(--logical-px-13);
  --window-space-14:                 var(--logical-px-14);
  --window-space-16:                 var(--logical-px-16);
  --window-space-18:                 var(--logical-px-18);
  --window-content-inset:            var(--logical-px-20); /* shared inline inset: thread heading, thread scroll, composer and record content */
  --window-text-xs:                  var(--logical-px-11_5); /* the queue heading and times, the record's section heads */
  --window-text-sm:                  var(--logical-px-12); /* the title bar, queue lines, the address, fields, record prose */
  --window-text-input:               var(--logical-px-12_5); /* the composer */
  --window-text:                     var(--logical-px-13); /* the screen's base size */
  --window-text-title:               var(--logical-px-21); /* the record's title */
  --window-leading-none:             var(--leading-100); /* the title bar and its controls */
  --window-leading-heading:          var(--leading-105); /* the record's section heads */
  --window-leading-title:            var(--leading-115); /* the record's title */
  --window-leading-compact:          var(--leading-140); /* the run's steps */
  --window-leading-message:          var(--leading-145); /* the ask */
  --window-tracking-caps:            var(--tracking-0_04em); /* the queue heading */
  --window-tracking-heading:         var(--tracking-minus-0_01em);
  --window-tracking-title:           var(--tracking-minus-0_02em);
  --window-radius-lg:                var(--logical-px-12); /* the composer */
  --window-radius-md:                var(--logical-px-10); /* the ask, the record photo */
  --window-radius-sm:                var(--logical-px-9); /* a made artefact */
  --window-radius-xs:                var(--logical-px-7); /* the send button, the address */
  --window-light-size:               var(--logical-px-12); /* a traffic light */
  --window-wordmark-height:          var(--logical-px-9_5);
  --window-glyph-size:               var(--logical-px-9); /* the Pause/Play glyph */
  --window-brain-width:              var(--logical-px-26);
  --window-icon-sm:                  var(--logical-px-12); /* the send arrow */
  --window-icon:                     var(--logical-px-14); /* a made artefact, the record's back and forward */
  --window-icon-lg:                  var(--logical-px-15); /* a queue tick */
  --window-send-size:                var(--logical-px-22); /* the send button */
  --window-icon-stroke:              var(--stroke-2); /* Lucide icons, as marzy-site draws them */
  --window-icon-stroke-bold:         var(--stroke-2_5); /* the send arrow */
  --window-brain-stroke:             var(--stroke-0_8); /* the thin-line brain (a non-scaling stroke) */
  --window-shadow-y:                 var(--logical-px-8);
  --window-shadow-blur:              var(--logical-px-20);
  --window-fade-top:                 var(--logical-px-28); /* an overflowing thread fades out at its top */
  --window-fade-bottom:              var(--logical-px-40); /* an overflowing record fades out at its foot */
  --window-land-rise:                var(--logical-px-5); /* a row lands from this far below */
  --window-ring-offset:              var(--px-1);
  --window-caption-inset:            var(--percent-12); /* the summary over the frame before desk.js boots */
  --window-photo-aspect:             var(--ratio-16-7);
  --window-photo-crop-size:          var(--percent-325_26) var(--percent-441_43); /* the photo inside its loop's 2880x1710 poster */
  --window-photo-crop-position:      var(--percent-94_33) var(--percent-31_61);
  --window-run-fade:                 var(--duration-500); /* the last stretch of a lap fades the run out (desk.css desk-out, desk.js) */
  --window-run-settle:               var(--duration-1200); /* a held or reduced window shows its run this long after the last beat (desk.js) */
  --window-cap-clearance:            var(--px-8); /* the thread's newest line stops this far above a caption chip (desk.js) */

  /* The Mulholland system (system.css, homepage v1): kept apart as --system-* (both families had --ring, --ease, --measure) */
  --system-film-dim:                 var(--alpha-70); /* the lowest veil at which every role on the film passes AA (SPEC.md, gate A1) */
  --system-unit:                     calc(var(--space-4) + var(--vw-1)); /* t: every system size is t times a step; the root keeps the browser size */
  --system-step-micro:               var(--number-0_6);
  --system-step-small:               var(--number-0_8);
  --system-step-pitch:               var(--number-1_6);
  --system-font-voice:               var(--font-alliance-no1);
  --system-font-read:                var(--font-alliance-no2);
  --system-leading-voice:            var(--leading-130);
  --system-leading-display:          var(--leading-110);
  --system-leading-read:             var(--leading-145);
  --system-type-micro:               var(--font-medium) max(var(--px-12), calc(var(--system-unit) * var(--system-step-micro))) / var(--system-leading-voice) var(--system-font-voice);
  --system-type-small:               var(--font-medium) calc(var(--system-unit) * var(--system-step-small)) / var(--system-leading-voice) var(--system-font-voice);
  --system-type-base:                var(--font-medium) var(--system-unit) / var(--system-leading-voice) var(--system-font-voice);
  --system-type-display:             var(--font-medium) calc(var(--system-unit) * var(--number-1_5)) / var(--system-leading-display) var(--system-font-voice);
  --system-type-read:                var(--font-normal) calc(var(--system-unit) * var(--system-step-small)) / var(--system-leading-read) var(--system-font-read);
  --system-tracking-open:            var(--tracking-0_01em);
  --system-tracking-none:            var(--tracking-0em);
  --system-tracking-tight:           var(--tracking-minus-0_02em);
  --system-space-1:                  calc(var(--system-unit) * var(--number-0_375));
  --system-space-2:                  calc(var(--system-unit) * var(--number-0_75));
  --system-space-3:                  calc(var(--system-unit) * var(--system-step-pitch)); /* the pitch: the chrome line, the logo height, one list row */
  --system-space-4:                  calc(var(--system-unit) * var(--number-3_7));
  --system-fog-top:                  calc(var(--system-space-4) * var(--number-2));
  --system-fog-bottom:               calc(var(--system-space-4) + var(--system-space-2));
  --system-chrome-block:             calc(var(--system-space-2) + var(--system-space-3));
  --system-fog-hold:                 var(--system-chrome-block);
  --system-measure:                  var(--em-32); /* about 64 characters in the read face */
  --system-line:                     var(--px-2);
  --system-ring:                     var(--system-line) var(--line-style-solid) var(--system-foreground);
  --system-clear:                    var(--transparent); /* a clear tap highlight, a link's underline at rest */
  --system-ring-offset:              var(--em-0_15);
  --system-spine:                    var(--percent-50);
  --system-unseen:                   var(--px-1);
  --system-layer-fog:                var(--z-1);
  --system-layer-chrome:             var(--z-2);
  --system-layer-skip:               var(--z-3);
  --system-layer-behind:             var(--z-minus-1); /* a scrim behind its own chrome */
  --system-duration:                 var(--duration-200);
  --system-ease:                     var(--ease-css-ease);
  --system-mark-size:                calc(var(--system-unit) * var(--number-1_3)); /* on a phone the brain alone, 1.3 text sizes tall */
  --system-mark-stroke:              var(--px-1); /* the live mulholland.ai brain: a 1px line at any size (non-scaling) */
  --system-tap:                      var(--px-44); /* a thumb's tap target: a workflow link in a link row, on touch (2026-09-27) */

  /* Page components (a.css): shared roles */
  --prose-gap:                       calc(var(--type-body-leading) * var(--em-1)); /* one line of body text between prose blocks; the em resolves where it is used */
  --screen-height:                   var(--vh-100); /* the full viewport height (100vh) */
  --hairline-half:                   var(--px-0_5); /* a half hairline (.rule--half) */
  --reveal-shift:                    var(--percent-10); /* slide, card, tab and row reveals start a tenth to the left */
  --reveal-shift-far:                var(--space-25); /* the far reveal */
  --reveal-shift-rise:               var(--percent-15); /* the rise reveal */
  --reveal-mask-rest:                var(--percent-6); /* where a mask-rise line rests, this far above its box */
  --frost-blur:                      var(--space-16); /* the frosted header bar and mobile menu */
  --icon-size-small:                 var(--space-4); /* 16px icons: search, the footer plus */
  --veil-blur:                       var(--px-5); /* chips on the veil: switcher, captions, the film header bar */
  --icon-size:                       var(--space-6); /* 24px icons: the scroll cue */
  --page-top:                        var(--vh-20); /* the air above a page's first line: a fifth of the viewport */
  --page-top-dynamic:                var(--dvh-20); /* the same in dvh; vh where dvh is unknown */
  --media-focus-y:                   var(--percent-20); /* where a cover image sits vertically by default (50% 20%) */
  --button-ring-offset:              var(--px-3); /* the outlined button focus ring */
  --link-underline-offset:           var(--dimension-4_8); /* the link button underline under its label */
  --icon-size-arrow:                 var(--dimension-9); /* the link arrow */
  --list-row-padding-top:            var(--dimension-9_6); /* a ruled list row: accordion log, place details */
  --list-row-padding-bottom:         var(--dimension-10_4); /* a ruled list row */
  --media-line-gap:                  var(--px-4); /* the 4px line gap an image box carries under it */
  --motion-dim:                      var(--duration-400); /* a timeline row dimming */
  --screen-height-dynamic:           var(--dvh-100); /* 100dvh; 100vh where dvh is unknown (the @supports below) */
  --underline-soft:                  var(--gray-990-alpha-30); /* a quiet underline on light grounds (client rows) */
  --screen-width:                    var(--vw-100); /* 100vw */
  --container-width:                 var(--cqw-100); /* 100cqw (inside a size container) */
  --container-height:                var(--cqh-100); /* 100cqh */
  --underline-inverse-soft:          var(--white-alpha-35); /* a quiet underline on film and ink (credits, film lists) */
  --screen-height-double:            var(--vh-200); /* two viewports: the v4 film page scroll length */
  --screen-height-small:             var(--svh-100); /* 100svh; 100vh where svh is unknown */
  --screen-height-large:             var(--lvh-100); /* 100lvh; 100vh where lvh is unknown */
  --motion-leave:                    var(--duration-400); /* the v5 hero leaving */
  --disc-blur:                       var(--px-4); /* the play mark disc */
  --icon-stroke-medium:              var(--stroke-1_4); /* the 16px search icon (1.4) */
  --field-swell-speed-fast:          var(--number-30); /* dot and wave fields: fast swell travel in drawing units per second */
  --field-swell-speed-slow:          var(--number-19); /* dot and wave fields: slow swell travel in drawing units per second */
  --field-ripple-speed-fast:         var(--number-0_45); /* dot and wave fields: fast ripple in radians per second */
  --field-ripple-speed-slow:         var(--number-0_3); /* dot and wave fields: slow ripple in radians per second */
  --field-fold-min:                  var(--number-0_35); /* dot and wave fields: minimum fold contribution to shading */
  --field-fold-max:                  var(--number-3); /* dot and wave fields: maximum fold contribution to shading */
  --field-shade-base:                var(--number-0_7); /* dot and wave fields: shade multiplier before swell lift */
  --field-shade-lift:                var(--number-0_5); /* dot and wave fields: added shade per positive unit of swell height */
  --dotfield-dot:                    var(--stone-650); /* the dot field's dot; a.js draws it at alphas up to --dotfield-dot-opacity-max */
  --dotfield-dot-size:               var(--px-1_35); /* a.js: one dot's square, 768 and up */
  --dotfield-dot-size-mobile:        var(--px-1_1); /* below 768 */
  --dotfield-dot-gap:                var(--px-3_2); /* a.js: between dots along the nearest row, 768 and up */
  --dotfield-dot-gap-mobile:         var(--px-3_4); /* below 768 */
  --dotfield-dot-gap-growth:         var(--px-6_5); /* added to the gap from the nearest row to the farthest */
  --dotfield-rows:                   var(--number-96); /* a.js: rows in the plane, 768 and up */
  --dotfield-rows-mobile:            var(--number-64); /* below 768 */
  --dotfield-lift:                   var(--px-8); /* a.js: how far a swell lifts the nearest row */
  --dotfield-lift-growth:            var(--px-46); /* added to the lift from the nearest row to the farthest */
  --dotfield-fade:                   var(--number-0_55); /* a.js: exponent of the dot field's fade into depth */
  --dotfield-dot-opacity-base:       var(--alpha-55); /* a.js: a dot's opacity on the nearest row before the swells */
  --dotfield-dot-opacity-max:        var(--alpha-80); /* a.js: the darkest dot */
  --dotfield-frame:                  var(--duration-33); /* a.js: the dot field redraws at most this often while it moves */
  --wavefield-line:                  var(--stone-650); /* the wavefield's lines, in the dot field's ink; a.js strokes them at alphas up to --wavefield-line-opacity-max (white in the dark look, below) */
  --wavefield-line-width:            var(--px-0_75); /* a.js: one line, both looks, 768 and up */
  --wavefield-line-width-mobile:     var(--px-0_5); /* below 768: one device pixel at 2x, so the phone's denser mesh (whose swells cover the whole hero) stays fine and faint */
  --wavefield-line-opacity-base:     var(--alpha-20); /* a.js: a line's opacity on the top row before the swells and the fade */
  --wavefield-line-opacity-max:      var(--alpha-40); /* a.js: the darkest line, where a swell folds the lines together */
  --wavefield-pitch:                 var(--px-40); /* a.js: between two lines of one family along the top of the hero, 768 and up */
  --wavefield-pitch-mobile:          var(--px-28); /* below 768 */
  --wavefield-pitch-growth:          var(--px-12); /* added to the pitch from the top of the hero to its bottom (denser at the top), 768 and up */
  --wavefield-pitch-growth-mobile:   var(--px-8); /* below 768 */
  --wavefield-angle-far:             var(--deg-33); /* a.js: the lines' slope from the horizontal at the top of the hero */
  --wavefield-angle-near:            var(--deg-20); /* at its bottom: the diamonds lengthen toward the viewer */
  --wavefield-rows:                  var(--number-96); /* a.js: rows in the plane (every line is drawn through each), 768 and up */
  --wavefield-rows-mobile:           var(--number-64); /* below 768 */
  --wavefield-fade:                  var(--number-8); /* a.js: the power of the fade down the plane (1 - depth^8: held, then gone by the hero's bottom edge) */
  --wavefield-lift:                  var(--px-8); /* a.js: how far a swell lifts the farthest row (the top) */
  --wavefield-lift-growth:           var(--px-46); /* added to the lift from the farthest row to the nearest */
  --wavefield-frame:                 var(--duration-33); /* a.js: the wavefield redraws at most this often while it moves */

  /* Page components: chrome (load bar, skip link, header, menu, footer, switcher) */
  --skip-offset:                     var(--percent-200);
  --loadbar-height:                  var(--px-3);
  --loadbar-glow:                    var(--px-10); /* the load bar glow radius */
  --logo-height:                     var(--dimension-25_6); /* the header logo */
  --logo-nudge:                      var(--dimension-2_8); /* the header logo sits a little high */
  --nav-gap:                         var(--dimension-43_2);
  --logo-height-mobile:              var(--dimension-30_4); /* the header and footer logo on phones */
  --burger-size:                     var(--space-8);
  --burger-inset:                    var(--dimension-m5);
  --burger-line-1-offset:            var(--dimension-m4); /* from the centre */
  --burger-line-2-offset:            var(--dimension-m3); /* from the centre */
  --footer-padding-block:            var(--space-14);
  --footer-logo-height:              var(--dimension-35_2);
  --footer-column-head-height:       var(--dimension-69); /* a footer column title row */
  --footer-email-size:               var(--text-18); /* fixed email default; the mobile contact panel uses --type-lg-size */
  --footer-link-leading:             var(--leading-130);
  --footer-email-tracking:           var(--tracking-minus-0_011rem); /* the email keeps its tracking when the mobile contact panel grows its type */
  --footer-email-leading:            var(--leading-115);
  --footer-padding-bottom-mobile:    var(--space-18);
  --footer-logo-gap-mobile:          var(--dimension-m40);
  --footer-column-head-height-mobile: var(--space-24);
  --footer-link-gap-mobile:          var(--dimension-12_8);
  --footer-small-gap-mobile:         var(--dimension-4_8);
  --switcher-padding-block:          var(--dimension-12_8);
  --switcher-leading:                var(--leading-120);
  --switcher-tracking:               var(--tracking-minus-0_009rem);
  --switcher-current-size-mobile:    var(--text-20_8);

  /* Page components: the version switcher (a.css 19). DRAFT ONLY (2026-09-26): three links between the MarzyOS hero
     versions on /a/marzyos/, v1/ and v2/, pinned bottom-left on the veil; it reads the veil, chip and ring roles
     above. Remove it and this role before launch (--px-44 stays: --system-tap reads it) */
  --vswitch-target:                  var(--px-44); /* each link's tap height, at every width */

  /* Page components: the nav (a/nav.css, a/nav.js). One nav on every page, homepage v1's top chrome
     (Sam, 2026-09-25): its sizes are the system's (system.css .chrome) at the browser's default text
     size, held in px so they measure the same on the homepage (root at the browser size) and on the
     /a pages (root set by --root-font-size); the phone values rebind at 64em below */
  --nav-unit:                        calc(var(--px-16) + var(--vw-1)); /* t: --system-unit at the default 16px root */
  --nav-gutter:                      calc(var(--nav-unit) * var(--number-0_75)); /* the inset on every side: the system's space-2 */
  --nav-link-padding:                calc(var(--nav-unit) * var(--number-0_375)); /* each link's side padding: space-1, so words sit two apart */
  --nav-line:                        calc(var(--nav-unit) * var(--system-step-pitch)); /* a link's hit height: the pitch */
  --nav-text-size:                   calc(var(--nav-unit) * var(--system-step-small)); /* the system's small type */
  --nav-face:                        var(--font-helvetica-now-display); /* declared by nav.css (Helvetica Now Display Medium) */
  --nav-weight:                      var(--font-medium);
  --nav-leading:                     var(--system-leading-voice);
  --nav-tracking:                    var(--system-tracking-none);
  --nav-mark-size:                   calc(var(--nav-unit) * var(--number-1_3)); /* the brain alone on a phone; the lockup is one t tall from 64em */
  --nav-mark-stroke:                 var(--system-mark-stroke); /* the brain's 1px line at any size */
  --nav-ring-width:                  var(--system-line); /* keyboard focus: a 2px ring in the nav's colour */
  --nav-ring-offset:                 var(--system-ring-offset);
  --nav-link-duration:               var(--system-duration); /* the underline in and out (0 with reduced motion) */
  --nav-link-ease:                   var(--system-ease);
  --nav-active-opacity:              var(--system-alpha-2); /* a pressed link: the system's soft foreground, .85 */

  /* Page components: heroes and page heads */
  --hero-page-desc-width:            var(--percent-15);
  --hero-page-aspect:                var(--ratio-16-10);
  --hero-aspect-mobile:              var(--ratio-8-10);
  --hero-details-measure:            var(--percent-80);
  --hero-details-reserve-gap:        var(--dimension-6);
  --hero-fam-top:                    var(--space-72);
  --hero-fam-top-mobile:             var(--space-80);
  --hero-prod-top:                   var(--space-56);
  --hero-details-measure-prod:       var(--percent-68);
  --hero-prod-aspect:                var(--ratio-1376-1006);
  --hero-details-prod-row-gap-mobile: var(--dimension-38_4);
  --hero-details-measure-prod-mobile: var(--percent-91);
  --hero-wm-title-width:             var(--percent-60);
  --wordmark-height:                 var(--dimension-57);
  --wordmark-height-mobile:          var(--dimension-m27);
  --page-head-top:                   var(--space-40);
  --page-head-bottom:                var(--space-21);
  --hero-page-title-width:           var(--percent-50); /* the page hero's title: half the width */
  --hero-page-desc-width-mobile:     var(--percent-50); /* the page hero's description on phones */

  /* Page components: slices */
  --statement-width-90:              var(--percent-90); /* .statement__text--w90 (and so on) */
  --statement-width-80:              var(--percent-80);
  --statement-width-70:              var(--percent-70);
  --statement-width-60:              var(--percent-60);
  --statement-width-40:              var(--percent-40);
  --statement-width-30:              var(--percent-30);
  --statement-width-20:              var(--percent-20);
  --lead-split-eyebrow-gap:          var(--em-2);
  --rich66-heading-gap:              var(--dimension-53_2);
  --imgcol-aspect:                   var(--ratio-1_485);
  --mlink-aspect:                    var(--ratio-1600-889);
  --mlink-num-offset-mobile:         var(--dimension-20_8);
  --statement-width-50:              var(--percent-50);

  /* Page components: product block */
  --pblock-decal-column:             var(--dimension-247);
  --pblock-decal-width:              var(--dimension-510);
  --pblock-media-height:             var(--vw-35);
  --pblock-tag-measure-mobile:       var(--percent-75);
  --pblock-media-height-mobile:      var(--vw-75);

  /* Page components: capabilities, spec cards, accordion */
  --caps-count-width:                var(--dimension-19_2);
  --caps-count-bleed:                var(--space-8);
  --caps-desc-padding-bottom:        var(--dimension-9_6);
  --caps-num-height:                 var(--space-36);
  --caps-label-fade-start:           var(--percent-40);
  --caps-label-fade-end:             var(--percent-60);
  --caps-label-mask-size:            var(--percent-300);
  --caps-label-width-mobile:         var(--percent-90_2);
  --caps-num-pull-mobile:            var(--dimension-9_6);
  --caps-media-width-mobile:         var(--percent-78_1);
  --corner-cut:                      var(--space-10); /* the spec card's top-right cut: 40 at 1440, 40 at 390 */
  --speccard-aspect:                 var(--ratio-383-280);
  --speccard-aspect-mobile:          var(--ratio-294-160);
  --accordion-icon-size:             var(--space-5);
  --accordion-tag-height:            var(--dimension-30);
  --accordion-desc-measure:          var(--space-90);
  --accordion-tag-height-mobile:     var(--space-6);
  --accordion-log-date-width:        var(--space-30);
  --accordion-log-row-gap-mobile:    var(--dimension-5_6);

  /* Page components: cards, media rows, timeline, band, news, search, pager */
  --card-title-min-height:           var(--space-16);
  --card-aspect:                     var(--ratio-300-167);
  --card-figure-width:               var(--percent-90);
  --ncard-aspect:                    var(--ratio-854-480);
  --ncard-body-gap:                  var(--dimension-15);
  --cards-cell-width-mobile:         var(--vw-94);
  --cards-cell-gap-mobile:           var(--px-12);
  --ncards-cell-width-mobile:        var(--vw-90);
  --card-aspect-mobile:              var(--ratio-327-182);
  --ncard-body-gap-mobile:           var(--dimension-m16);
  --mrow-num-nudge:                  var(--dimension-4_8);
  --timeline-frame-scale:            var(--number-1_04);
  --timeline-row-min-height:         var(--space-44);
  --timeline-screen-lead-mobile:     var(--space-3);
  --timeline-screen-fade-mobile:     var(--space-10);
  --timeline-screen-fade-solid:      var(--percent-35);
  --band-padding-bottom:             var(--space-48);
  --nfeat-desc-width:                var(--percent-60);
  --nfeat-index-padding-bottom-mobile: var(--space-20);
  --nrow-title-width:                var(--percent-90);
  --nrow-title-gap:                  var(--dimension-9_6);
  --sband-icon-top:                  var(--dimension-15);
  --sband-toggle-padding-block-mobile: var(--px-1);
  --pager-page-size:                 var(--space-8);
  --pager-arrow-size:                var(--px-28);
  --pager-arrow-padding:             var(--px-8);
  --pager-arrow-radius:              var(--radius-100px); /* 100px: a full round on the 28px arrow */
  --pager-arrow-icon-size:           var(--px-10);
  --sband-field-width:               var(--percent-50); /* the search band's field: half the width */

  /* Page components: article */
  --author-photo-size:               var(--px-24); /* a small circle beside the existing article byline */
  --article-top:                     var(--space-32);
  --article-meta-gap:                var(--space-9);
  --article-media-gap:               var(--space-13);
  --article-bottom:                  var(--space-40);
  --prose-indent:                    var(--em-1_2);
  --article-figure-aspect:           var(--ratio-1581-756);
  --toc-gap:                         var(--space-10);
  --toc-list-gap:                    var(--dimension-8_8);
  --toc-marker-top:                  var(--em-0_6);
  --toc-marker-width:                var(--dimension-7_2);

  /* Page components: media, placeholder, drawings, play mark */
  --demo-crop-width:                 var(--percent-120_97);
  --demo-crop-left:                  var(--percent-18_03);
  --aspect-video-inverse:            var(--number-0_5625); /* 9 / 16: a 16:9 box as height over width */
  --demo-crop-centre:                var(--number-0_39245); /* the app window centre in the recording */
  --media-cap-clearance:             var(--space-28);
  --media-cap-padding-block:         var(--dimension-6_4);
  --media-cap-padding-inline:        var(--dimension-9_6);
  --media-cap-inset-mobile:          var(--dimension-11_2);
  --media-cap-clearance-mobile:      var(--dimension-22_4);
  --placeholder-label-opacity:       var(--alpha-70);
  --diagram-tracking:                var(--tracking-0_04em); /* drawing labels */
  --diagram-stroke-bold:             var(--stroke-2_5); /* the bold trace */
  --diagram-area-opacity:            var(--alpha-14); /* a drawn area fill */
  --playmark-icon-size:              var(--space-7);
  --playmark-icon-nudge:             var(--dimension-2_4);
  --iso-ghost-stroke:                var(--stroke-1);
  --iso-ghost-opacity:               var(--alpha-35);
  --iso-ghost-dash:                  var(--dash-2-4); /* the ghost route of the isolation drawing */
  --iso-aspect-mobile:               var(--ratio-6-5);
  --playmark-size:                   var(--space-18);
  --playmark-size-mobile:            var(--space-14);
  --diagram-text-fit:                var(--text-px-12_5); /* a long identifier fitted to its box (12.5) */
  --diagram-text-fit-tight:          var(--text-px-11_5); /* a longer identifier (11.5) */
  --diagram-text-2xl:                var(--text-px-16); /* a drawing heading (16) */

  /* Page components: contact, form, place */
  --contact-lede-measure:            var(--space-108);
  --form-row-gap:                    var(--space-9);
  --form-field-gap:                  var(--dimension-5_6);
  --form-input-padding-block:        var(--dimension-9_6);
  --form-textarea-min-height:        var(--space-34);
  --form-error-line:                 var(--px-2);
  --form-note-measure:               var(--space-88);
  --form-done-gap:                   var(--space-5);
  --place-aspect:                    var(--ratio-3-2);
  --place-clock-width:               var(--em-7);
  --place-term-width:                var(--space-28);

  /* Page components: homepage v2 (stage pane, client rows, film band) */
  --pane-fade-length:                var(--space-20);
  --pane-fade-top-length:            var(--space-6);
  --pane-scroll-tail:                var(--vh-30);
  --pane-scrollbar-thumb:            var(--gray-990-alpha-18);
  --pane-mask-soft:                  var(--black-alpha-60);
  --pane-mask-soft-at:               var(--number-0_62);
  --pane-mask-faint:                 var(--black-alpha-22);
  --pane-mask-faint-at:              var(--number-0_32);
  --pane-mask-edge:                  var(--dimension-6);
  --pane-fade-length-mobile:         var(--space-14);
  --pane-fade-length-short:          var(--space-10);
  --client-row-size:                 var(--text-40);
  --client-row-leading:              var(--leading-115);
  --client-row-tracking:             var(--tracking-minus-0_05rem);
  --client-row-ring-offset:          var(--dimension-6);
  --client-row-items-gap:            var(--em-1_25);
  --client-row-items-padding-top:    var(--dimension-6);
  --client-row-items-padding-bottom: var(--space-5);
  --client-row-size-mobile:          var(--text-m24);
  --client-row-leading-mobile:       var(--leading-120);
  --client-row-tracking-mobile:      var(--tracking-minus-0_017rem);
  --client-rows-gap-mobile:          var(--space-5);
  --client-row-items-padding-bottom-mobile: var(--dimension-14);
  --filmband-height-min:             var(--px-200);
  --filmband-height-min-vh:          var(--vh-32);
  --filmband-height-fluid:           var(--vw-18_75);
  --filmband-height-fluid-vh:        var(--vh-30);
  --filmband-height-max:             var(--px-320);
  --filmband-veil-hold:              var(--space-14);
  --filmband-veil-end:               var(--gray-990-alpha-14);
  --client-row-size-short:           var(--text-32);
  --client-row-tracking-short:       var(--tracking-minus-0_04rem);
  --client-row-size-mobile-short:    var(--text-22_4);
  --client-row-tracking-mobile-short: var(--tracking-minus-0_014rem);

  /* Page components: homepage v3 (projector) */
  --proj-screen-scale:               var(--number-1_1);
  --proj-push-scale:                 var(--number-1_12);
  --proj-cap-leading:                var(--leading-125);
  --film-toggle-min-width:           var(--space-13);
  --proj-credits-width:              var(--space-136);
  --proj-credits-padding-top:        var(--space-5);
  --proj-credits-leading:            var(--leading-130);
  --proj-pane-top-narrow:            var(--space-7);
  --proj-screen-ratio-narrow:        var(--number-1_6);
  --proj-screen-height-cap-narrow:   var(--vh-38);
  --proj-inset-narrow:               var(--space-3);
  --proj-cap-min-height-narrow:      var(--em-2_5);
  --proj-credits-bottom-narrow:      var(--space-14);
  --proj-credits-clearance-narrow:   var(--space-18);

  /* Page components: homepage v4 cine and v5 reel (the film page; v5 has no page under a/) */
  --film-plate:                      var(--gray-990-alpha-60); /* ink at 60% behind film titles and the film band */
  --film-page-scroll-padding-end:    var(--space-20);
  --film-scale:                      var(--number-1_2);
  --film-shade-top:                  var(--gray-990-alpha-64); /* ink over the film: top edge */
  --film-shade-hold:                 var(--gray-990-alpha-58); /* held to the header and the foot */
  --film-shade-clear:                var(--gray-990-alpha-0); /* ink at 0 */
  --film-shade-reach:                var(--percent-30); /* where the top and side shades clear */
  --film-shade-bottom:               var(--gray-990-alpha-66); /* bottom edge */
  --film-shade-foot:                 var(--space-20); /* the fallback of --cine-foot / --reel-foot */
  --film-shade-bottom-reach:         var(--percent-32); /* where the bottom shade clears */
  --film-shade-side:                 var(--gray-990-alpha-50); /* left and right edges */
  --film-shade-side-far:             var(--percent-72); /* where the right shade starts */
  --film-vignette-height:            var(--percent-70); /* the vignette ellipse */
  --film-vignette-y:                 var(--percent-44); /* the vignette centre */
  --film-vignette-clear:             var(--percent-55); /* clear inside */
  --film-vignette:                   var(--gray-990-alpha-45); /* the vignette edge */
  --film-hero-min-height:            var(--space-112);
  --film-title-measure:              var(--em-6_4);
  --film-title-leading:              var(--leading-95);
  --film-title-tracking:             var(--tracking-minus-0_03em);
  --film-title-fade:                 var(--space-36);
  --film-title-fade-x:               var(--space-96);
  --film-title-fade-end:             var(--space-20);
  --film-list-reach:                 var(--space-208);
  --film-list-bottom-min:            var(--space-12);
  --film-list-bottom-fluid:          var(--vh-8);
  --film-list-bottom-max:            var(--space-28);
  --film-list-fade:                  var(--space-48);
  --film-list-plate:                 var(--gray-990-alpha-74);
  --film-list-plate-end:             var(--gray-990-alpha-22);
  --film-timecode-width:             var(--em-6_5);
  --film-scale-mobile:               var(--number-1_12);
  --film-shade-foot-mobile:          var(--space-34);
  --film-title-fade-x-mobile:        var(--space-24);
  --reel-list-bottom:                var(--vh-28);
  --reel-list-plate-overhang:        var(--space-44);
  --reel-list-fade-end:              var(--space-40);
  --reel-timecode-nudge:             var(--dimension-10);
  --reel-list-top-gap-mobile:        var(--space-5);
  --film-vignette-width:             var(--percent-72); /* the vignette ellipse */

  /* Motion module (motion.css) and the riders (motion.css, motion.js, system.js) */
  --rider-head:                      var(--number-0_03); /* the rider's head: its share of the route */
  --rider-trail:                     var(--number-0_08); /* the trail behind the head (the homepage rider's head is this long) */
  --rider-wall:                      var(--number-0_35); /* the wall the rider leaves */
  --rider-wall-far:                  var(--number-0_65); /* the far wall */
  --rider-cycle:                     var(--number-2); /* one dash cycle is two routes long */
  --rider-start:                     var(--number-minus-1); /* the dash starts one cycle back */
  --rider-pace-min:                  var(--number-240); /* motion.js and system.js: the slowest rider, in drawing units a second */
  --rider-pace-max:                  var(--number-420); /* the fastest rider */
  --rider-rest:                      var(--duration-2000); /* motion.js PAUSE, system.js REST: the rest between rider laps */
  --mo-linework-scale:               var(--number-1_2); /* 1440 / 1200: the linework's drawing units to CSS px */
  --mo-stroke-trail:                 var(--px-4); /* the rider's trail */
  --mo-stroke-rider:                 var(--px-6); /* the rider's head */
  --mo-linework-height:              var(--space-80); /* the linework drawing */
  --mo-linework-height-mobile:       var(--dimension-m240); /* the linework drawing on phones */
  --mo-stage-min-height:             var(--space-90); /* the together stage */
  --mo-measure:                      var(--space-180); /* a work-cycle caption */
  --mo-record-label-width:           var(--space-60); /* a record row's label column */
  --mo-run-label-width:              var(--space-13); /* a run-log row's label column */
  --mo-signal-size:                  var(--dimension-7); /* a signal dot */
  --mo-ontology-lift:                var(--number-1_15); /* the inverted ontology diagram's brightness on the blue */
  --mo-reveal-inset:                 var(--px-24); /* motion.js: a module reveals this far short of the bottom edge */

  /* Page styles: desk.html's demo and the specimen annotations (motion.html, specimen.html) */
  --desk-demo-gap:                   var(--space-10); /* the slice head's space below, the four- and three-up grids' gap */
  --desk-demo-measure:               var(--space-168); /* the lede's measure */
  --desk-demo-code-padding-y:        var(--space-5); /* a code block's block padding (inline: --spacing-md) */
  --desk-demo-code-leading:          var(--leading-160);
  --desk-demo-code-inline-padding:   var(--dimension-1_6) var(--dimension-4_8); /* code set inline in a sentence */
  --desk-demo-note-gap:              var(--dimension-9_6); /* between the notes */
  --spec-label-size:                 var(--text-px-10);
  --spec-label-leading:              var(--leading-120);
  --spec-label-padding-y:            var(--px-2);
  --spec-label-padding-x:            var(--px-5);
  --spec-bar-row-gap:                var(--dimension-5_6); /* the ground bar's rows (columns: --spacing-xs) */
  --spec-bar-grounds-gap:            var(--dimension-1_6) var(--dimension-9_6); /* between the ground buttons */
  --spec-bar-underline-offset:       var(--em-0_2); /* the pressed ground */
}

/* The system's colour roles, declared on every ground so a ground can rebind a primitive (an alpha)
   and have the roles recompute inside it (system.css pattern). Inert on /a pages, which have no [data-ground]. */
:root,
[data-ground] {
  --system-alpha-1:                 var(--alpha-100);
  --system-alpha-2:                 var(--alpha-85);
  --system-alpha-3:                 var(--alpha-60);
  --system-alpha-dim:               var(--alpha-43_75);
  --system-background:              rgb(var(--gray-950-rgb));
  --system-background-clear:        rgb(var(--gray-950-rgb) / var(--alpha-0));
  --system-foreground:              rgb(var(--white-rgb) / var(--system-alpha-1));
  --system-foreground-soft:         rgb(var(--white-rgb) / var(--system-alpha-2));
  --system-muted-foreground:        rgb(var(--white-rgb) / var(--system-alpha-3));
  --system-faint-foreground:        rgb(var(--white-rgb) / var(--system-alpha-dim));
  --system-film-veil:               rgb(var(--gray-950-rgb) / var(--system-film-dim));
}

/* The film is the hardest ground: the two quiet roles rise just enough to pass (a-3 small text 4.5:1, a-dim large text 3:1). */
[data-ground='film'] {
  --system-alpha-3: var(--alpha-75);
  --system-alpha-dim: var(--alpha-55);
}

/* The index fog (the homepage) keeps the lower half of a desktop window for the film. */
[data-fog='index'] {
  --system-fog-bottom: calc(var(--system-space-4) * var(--number-2));
  --system-fog-hold: var(--px-0);
}

@media (min-width: 64em) {
  [data-fog='index'] {
    --system-fog-bottom: var(--vh-44_4);
  }
}

/* The /a homepage (a/index.html) sets the system in Helvetica Now: <html data-face="helvetica"> swaps the
   two faces and the --system-type-* roles recompute with them (lab/37/home keeps Alliance). */
[data-face='helvetica'] {
  --system-font-voice:              var(--font-helvetica-now-display);
  --system-font-read:               var(--font-helvetica-now-text);
}

/* The grounds. Every slice declares one (a.css paints it: background: var(--background), color:
   var(--foreground)). A ground rebinds the current ground, --background and --foreground (no :root
   value), and coral and the blue raise --muted-opacity: secondary text at .78 holds 4.5:1 on coral
   (.6 would be 3.6), at .85 on the blue (.6 would be 3.3). */
.on-ink {
  --background:                      var(--surface-inverse);
  --foreground:                      var(--surface-inverse-foreground);
}

.on-black {
  --background:                      var(--surface-base);
  --foreground:                      var(--surface-base-foreground);
}

.on-bone {
  --background:                      var(--surface-canvas);
  --foreground:                      var(--surface-canvas-foreground);
}

.on-white {
  --background:                      var(--surface-card);
  --foreground:                      var(--surface-card-foreground);
}

.on-stone {
  --background:                      var(--surface-muted);
  --foreground:                      var(--surface-muted-foreground);
}

.on-coral {
  --background:                      var(--accent);
  --foreground:                      var(--accent-foreground);
  --muted-opacity:                   var(--accent-muted-opacity);
}

.on-pop {
  --background:                      var(--primary);
  --foreground:                      var(--primary-foreground);
  --muted-opacity:                   var(--primary-muted-opacity);
}

.on-pink {
  --background:                      var(--accent-pink);
  --foreground:                      var(--accent-pink-foreground);
  --muted-opacity:                   var(--accent-pink-muted-opacity);
}

.on-pink[data-tone='soft'] {
  --background:                      var(--surface-rose);
}

.on-slate {
  --background:                      var(--secondary);
  --foreground:                      var(--secondary-foreground);
}

.on-clear {
  --background:                      var(--surface-clear);
  --foreground:                      var(--surface-clear-foreground);
}

/* The wavefield's dark look, the wordmark hero only (MarzyOS v2; the site has no dark mode). A page picks it
   with <html data-wavefield-mode="dark">, and nothing else turns it on or off: not the viewer's colour
   scheme, not a data-theme a host sets on <html> (Sam, 2026-09-26: "dont change the original show me a v1
   and v2"). The mesh is drawn in faint white lines; the ground and the hero's ink follow at the end of
   tier 3. data-wavefield-mode="light" (v1), or no attribute, keeps the default look. */
:root[data-wavefield-mode='dark'] {
  --wavefield-line:                  var(--white);
  --wavefield-line-opacity-base:     var(--alpha-16);
  --wavefield-line-opacity-max:      var(--alpha-30);
}

/* The motion modules on the blue (motion.css section 12): secondary text at .85; the linework keeps
   the default .6 (3.28:1 on the blue). */
.mo-hero.on-pop,
.mo-section.on-pop,
.mo-cta.on-pop {
  --muted-opacity:                   var(--primary-muted-opacity);
}

.on-pop .mo-linework {
  --muted-opacity:                   var(--muted-opacity-default);
}

/* Viewport roles in the newer units fall back to vh where a browser lacks the unit (a var() cannot
   fall back to an earlier declaration the way a raw unit does). */
@supports not (height: 1dvh) {
  :root {
    --screen-height-dynamic:        var(--vh-100);
    --page-top-dynamic:             var(--vh-20);
  }
}

@supports not (height: 1svh) {
  :root {
    --screen-height-small:          var(--vh-100);
  }
}

@supports not (height: 1lvh) {
  :root {
    --screen-height-large:          var(--vh-100);
  }
}

@media (min-width: 1280px) {
  :root {
    --root-font-size:               var(--text-fluid-14-16);
  }
}

@media (min-width: 1440px) {
  :root {
    --root-font-size:               var(--text-fluid-16-18);
  }
}

@media (min-width: 1920px) {
  :root {
    --root-font-size:               var(--text-fluid-18-24);
  }
}

@media (min-width: 2400px) {
  :root {
    --root-font-size:               var(--text-px-24);
  }
}

@media (max-width: 1280px) {
  :root {
    --type-display-size:            var(--text-96);
  }
}

@media (min-width: 1441px) {
  :root {
    --type-display-size:            var(--text-160);
  }
}

@media (max-width: 767.98px) {
  :root {
    --page-margin:                  var(--dimension-m20);
    --gutter:                       var(--dimension-m5);
    --header-height:                var(--dimension-m72);
    --type-label-size:              var(--text-m13);
    --type-small-size:              var(--text-m16);
    --type-small-tracking:          var(--tracking-minus-0_011rem);
    --type-p-size:                  var(--text-m18);
    --type-p-tracking:              var(--tracking-minus-0_013rem);
    --type-lg-size:                 var(--text-m23);
    --type-lg-leading:              var(--leading-130);
    --type-lg-tracking:             var(--tracking-minus-0_016rem);
    --type-h7-size:                 var(--text-m20);
    --type-h7-tracking:             var(--tracking-minus-0_015rem);
    --type-h6-size:                 var(--text-m24);
    --type-h6-tracking:             var(--tracking-minus-0_017rem);
    --type-h5-size:                 var(--text-m27);
    --type-h5-tracking:             var(--tracking-minus-0_019rem);
    --type-h4-size:                 var(--text-m32);
    --type-h4-leading:              var(--leading-105);
    --type-h4-tracking:             var(--tracking-minus-0_023rem);
    --type-h3-size:                 var(--text-m34);
    --type-h3-leading:              var(--leading-115);
    --type-h3-tracking:             var(--tracking-minus-0_049rem);
    --type-h2-size:                 var(--text-m36);
    --type-h2-leading:              var(--leading-100);
    --type-h2-tracking:             var(--tracking-minus-0_051rem);
    --type-h1-size:                 var(--text-m38);
    --type-h1-leading:              var(--leading-100);
    --type-h1-tracking:             var(--tracking-minus-0_054rem);
    --type-mega-size:               var(--text-51_2);
    --type-mega-tracking:           var(--tracking-minus-0_0125em);
    --type-display-size:            var(--text-64);
    --type-display-leading:         var(--leading-80);
    --type-display-tracking:        var(--tracking-minus-0_01em);
    --type-numeral-size:            var(--text-m60);
    --type-numeral-tracking:        var(--tracking-minus-0_03em);
    --type-link-size:               var(--text-m15);
    --type-link-tracking:           var(--tracking-minus-0_011rem);
    --type-button-size:             var(--text-16);
    --type-button-tracking:         var(--tracking-minus-0_011rem);
    --type-body-size:               var(--text-m16);
    --type-body-leading:            var(--leading-120);
    --type-body-tracking:           var(--tracking-minus-0_011rem);
    --corner-cut:                   var(--dimension-m40);
  }
}

@media (min-width: 64em) {
  :root {
    --system-unit:                  calc(var(--space-5) + var(--vw-1));
    --system-step-micro:            var(--number-0_5);
    --system-step-small:            var(--number-0_65);
    --system-step-pitch:            var(--number-1_3);
    --system-fog-top:               max(var(--vh-22_2), calc(var(--system-unit) * var(--number-5_4)));
    --nav-unit:                     calc(var(--px-20) + var(--vw-1));
    --nav-mark-size:                var(--nav-unit);
  }
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --system-duration:              var(--duration-0);
  }
}

/* ============================ 3 Component tokens ============================ */

:root {
  /* Load bar: a page may set --flash (--highlight-client on Lulu & Georgia) */
  --flash:                           var(--highlight); /* the load bar colour; a page may set its own (--highlight-client) */

  /* Spec card */
  --speccard-chamfer:                var(--corner-cut); /* the spec card's cut top-right corner */

  /* Outlined button: light grounds rebind both, the blue CTA rebinds the ink (the rules after this block) */
  --button-fill:                     var(--surface-card); /* outlined button hover fill on dark grounds; light grounds rebind it to --surface-inverse */
  --button-ink:                      var(--surface-canvas-foreground); /* light grounds rebind it to --surface-card */

  /* Dot field: a.js reads it for the canvas clear */
  --dotfield-background:             var(--surface-muted); /* a.js reads it for the canvas clear */

  /* Wavefield and the wordmark hero over it (either canvas): rebound in the wavefield's dark look (the end of this tier) */
  --wavefield-background:            var(--surface-muted); /* the canvas ground: a.js clears to it, a.css paints it before a.js draws */
  --hero-wm-foreground:              var(--surface-muted-foreground); /* the hero's eyebrow and wordmark: ink on the stone, white on the charcoal */

  /* Drawings */
  --diagram-stroke:                  var(--icon-stroke-small); /* the drawings' traced line (.dg-draw) */
  /* Model drawings (a.css 7, /a/models/): the slot's shape in the two bands where a height in vw can't hold a cut */
  --pblock-drawing-aspect-tablet:    var(--aspect-video); /* 768 to 1179: 16:9, the tablet cut (744 x 418.5) */
  --pblock-drawing-aspect-phone:     var(--aspect-portrait); /* below 470: 4:5, the small phone cut (280 x 350) */
  /* Pipeline drawings (STYLE-v2, reference/a-build/diagrams/STYLE-v2.md): each solid is shaded by face, the foreground's
     share over the ground; dark grounds turn the light around (the rules after this block) so the top stays the lit face */
  --diagram-face-top:                var(--diagram-face-lit);
  --diagram-face-front:              var(--diagram-face-half); /* the -y face, on the left */
  --diagram-face-side:               var(--diagram-face-shadow); /* the +x face, on the right */
  /* The one accent: the data moving and the chosen cells. Pink on ink, white and bone; each ground where pink falls under 3:1 rebinds it (the rules after this block) */
  --diagram-accent:                  var(--accent-pink);

  /* Demo crop */
  --demo-box-aspect:                 var(--aspect-video-inverse); /* a demo crop's box, height / width; a page sets it on the box when the box is not 16:9 */

  /* Motion module (motion.css): the module's own names for shared roles; the blue ground rebinds --mo-line, --mo-muted-foreground (below) */
  --mo-normal:                       var(--motion-brisk); /* the module's own normal duration: brisk (250ms), not --motion-normal */
  --mo-reveal:                       var(--motion-enter); /* a module entering: the live section reveal (650ms) */
  --mo-nudge:                        var(--spacing-3xs); /* how far a code line, log row or scene moves as it enters */
  --mo-stroke:                       var(--hairline); /* the linework's line */
  --mo-stroke-active:                var(--ring-width); /* the active route and the walls */
  --mo-code-leading:                 var(--window-leading); /* the run log and the code, set as the window sets them */
  --mo-line:                         var(--border-subtle); /* the module's hairlines; the blue ground rebinds it to 25% */
  --mo-muted-foreground:             var(--foreground-muted-mix); /* secondary text as a colour; the blue ground rebinds it */

  /* Specimen annotations */
  --spec-label-tracking:             var(--type-code-tracking); /* the specimen tags, set in the code tracking */

  /* Nav: its colour follows the ground under it (nav.js), ink over bone and white by default */
  --nav-foreground:                  var(--surface-canvas-foreground); /* the links, the lockup and the focus ring */
  --nav-frost:                       var(--overlay-light); /* the frost behind the nav once the page has scrolled (not on the homepage) */
  --nav-layer:                       var(--layer-header);
  --nav-lockup-ink-opacity:          var(--shown-opacity); /* the ink lockup (brand/logo-black.svg) over light grounds */
  --nav-lockup-white-opacity:        var(--hidden-opacity); /* the white lockup (brand/logo.svg) over dark grounds and the film */
}

/* Pipeline drawings (STYLE-v2) by ground. The faces: on a dark ground the top takes the most foreground and the
   side the least, so the top is still the lit face. The accent holds 3:1 or better on every ground (WCAG, measured):
   pink on ink 6.0, on white 3.5, on bone 3.0; on the pink ground pink is the ground and the electric blue is 1.9, so
   the accent is white (3.5; the ink holds 6.0 but is the drawing's own line, and the data would read as structure); on
   the blue pink is 1.9 and the accent is the acid, the blue's one hot accent (5.3); stone, coral and slate take their
   ink (pink is 2.4, 1.1 and 1.1 on them). The pink ground also shades its faces deeper (14% and 30%), since 8% and 16%
   of the ink barely show on it. */
.on-ink,
.on-black,
.on-pop {
  --diagram-face-top:                var(--diagram-face-shadow);
  --diagram-face-side:               var(--diagram-face-lit);
}

.on-pink {
  --diagram-accent:                  var(--surface-card);
  --diagram-face-front:              var(--diagram-area-opacity);
  --diagram-face-side:               var(--faint-opacity);
}

.on-pink[data-tone='soft'] {
  --diagram-accent:                  var(--accent-rose);
  --diagram-face-front:              var(--diagram-face-half);
  --diagram-face-side:               var(--diagram-face-shadow);
}

.on-pop {
  --diagram-accent:                  var(--highlight);
}

.on-stone {
  --diagram-accent:                  var(--surface-muted-foreground);
}

.on-coral {
  --diagram-accent:                  var(--accent-foreground);
}

.on-slate {
  --diagram-accent:                  var(--secondary-foreground);
}

/* The outlined button's hover: the button's own pair (white fill, ink text) on dark grounds; the
   inverse on the light ones; the blue CTA keeps the blue as its ink. */
.btn-outline {
  --button-fill:                     var(--surface-card);
  --button-ink:                      var(--surface-canvas-foreground);
}

.on-pink[data-tone='soft'] .btn-outline,
.on-bone .btn-outline,
.on-white .btn-outline,
.on-stone .btn-outline,
.on-slate .btn-outline,
.on-coral .btn-outline {
  --button-fill:                     var(--surface-inverse);
  --button-ink:                      var(--surface-inverse-foreground);
}

/* The motion modules on the blue: secondary text as a colour at .85, hairlines at 25% (1.6:1, their
   weight on the other grounds; 20% is 1.45 here). */
.mo-hero.on-pop,
.mo-section.on-pop,
.mo-cta.on-pop {
  --mo-muted-foreground:             var(--foreground-primary-muted-mix);
  --mo-line:                         var(--border-subtle-strong);
}

.mo-cta.on-pop .btn-outline {
  --button-ink:                      var(--primary);
}

/* Nav over a dark ground: white, on the dark frost. nav.js sets data-nav-over on the nav from the ground
   under it; a page whose top is dark says so on <html> for the first paint (Lulu & Georgia, the specimen). */
[data-nav-over='dark'] {
  --nav-foreground:                  var(--surface-inverse-foreground);
  --nav-frost:                       var(--overlay);
  --nav-lockup-ink-opacity:          var(--hidden-opacity);
  --nav-lockup-white-opacity:        var(--shown-opacity);
}

[data-nav-over='light'] {
  --nav-foreground:                  var(--surface-canvas-foreground);
  --nav-frost:                       var(--overlay-light);
  --nav-lockup-ink-opacity:          var(--shown-opacity);
  --nav-lockup-white-opacity:        var(--hidden-opacity);
}

/* Nav on a system page (a ground declared on <body>: the /a homepage, over the film): the system's own
   foreground, on the system's chrome layer (above the fog, below the skip link). */
[data-ground] {
  --nav-foreground:                  var(--system-foreground);
  --nav-layer:                       var(--system-layer-chrome);
  --nav-lockup-ink-opacity:          var(--hidden-opacity);
  --nav-lockup-white-opacity:        var(--shown-opacity);
}

/* The wavefield's dark look (the lines are at the end of tier 2): the canvas ground turns to the warm
   charcoal and the hero's ink to white. The page also says data-nav-over="dark" on <html>, so the nav is
   white over the hero from the first paint (nav.js then reads the hero's white ink and agrees). */
:root[data-wavefield-mode='dark'] {
  --wavefield-background:            var(--surface-inverse-warm);
  --hero-wm-foreground:              var(--surface-inverse-foreground);
}
