
/* ==========================================================================
   Minted — design tokens (SOURCE)
   Two tiers: primitives hold raw values and are never referenced by a
   component; semantic tokens name a role and are the only thing components
   consume. Dark only. Print is a medium, not a theme (see the print layer).
   Load FIRST, globally. theme.json is generated from this file
   (scripts/theme-json.py); never edit the two apart.
   Release copies carry a version stamp on the next line.
   @version minted-2026-09-20-10  (copy: edit styles/ in the repo, then re-cut every package)
   ========================================================================== */
:root{

  /* ---- primitives · colour ---- */
  --minted-green-100:#B9FFCC;   /* glow highlight, title halo, hover text */
  --minted-green-300:#24BF78;   /* bright accent, labels, active strokes, links, focus */
  --minted-green-400:#1A9961;   /* retired as the primary hover (near-invisible on the field); kept for the ramp */
  --minted-green-500:#16915C;   /* brand green, primary action */
  --minted-green-700:#0C6A46;   /* deep green fills, selection background */

  --minted-neutral-100:#FFFFFF; /* headline white */
  --minted-neutral-200:#E2F0D9; /* secondary text */
  --minted-neutral-400:#C4D9CC; /* muted text, nav links */
  --minted-neutral-500:#96A79E; /* faint text, legal (7.97:1 on dark-900) */

  --minted-dark-900:#050806;    /* page field */
  --minted-dark-850:#08110D;    /* chrome ground: nav, menu, footer */
  --minted-dark-800:#0A1A14;    /* grid cell fill */
  --minted-dark-750:#0E1712;    /* raised ground: cards, tiles (amendment 01) */
  --minted-dark-700:#131E18;    /* raised ground, tinted variant */
  --minted-dark-950:#060B08;    /* recessed ground: matrix cells, inputs (amendment 01) */

  /* neutral hairlines (amendment 01): slightly green-tinted so they belong to the ramp.
     Structure is neutral; green is state. */
  --minted-line-100:rgba(214,230,221,0.1);  /* faint: gridlines, matrix hairlines */
  --minted-line-200:rgba(214,230,221,0.14); /* structural: card edges, section rules */

  /* green alpha steps: glows and washes, the only sanctioned alphas of green-300 */
  --minted-green-300-a10:rgba(36,191,120,0.1);
  --minted-green-300-a18:rgba(36,191,120,0.18);
  --minted-green-300-a28:rgba(36,191,120,0.28);
  --minted-green-300-a45:rgba(36,191,120,0.45);
  --minted-green-300-a55:rgba(36,191,120,0.55);
  --minted-green-300-a70:rgba(36,191,120,0.7);

  /* page-ink scrims: overlays and the soft part of shadows */
  --minted-dark-900-a55:rgba(5,8,6,0.55);
  --minted-dark-900-a82:rgba(5,8,6,0.82);

  --minted-danger-500:#E5484D;  /* validation border */
  --minted-danger-200:#FF9B9E;  /* validation message text */
  --minted-warning-400:#E8B04A; /* build flags: never in a production page */

  /* ---- primitives · print (consumed only by the print semantic layer) ---- */
  --minted-paper-000:#FFFFFF;
  --minted-paper-050:#F5F8F6;
  --minted-paper-100:#E6F1EA;
  --minted-paper-200:#C9E3D4;
  --minted-ink-900:#050806;
  --minted-ink-600:#55645C;
  --minted-ink-line:#B4C3BB;

  /* ---- semantic · grounds ---- */
  --minted-bg-page:var(--minted-dark-900);
  --minted-bg-surface:var(--minted-dark-850);
  --minted-bg-cell:var(--minted-dark-800);
  --minted-bg-cell-strong:color-mix(in srgb, var(--minted-green-700) 20%, var(--minted-dark-750)); /* tint OF the raised ground */
  --minted-bg-hover-wash:var(--minted-green-300-a10);   /* secondary button hover fill */
  --minted-surface-raised:var(--minted-dark-750);       /* things that sit above the field */
  --minted-surface-raised-hi:var(--minted-dark-700);    /* tinted raised variant */
  --minted-surface-recessed:var(--minted-dark-950);     /* things pressed into the panel */

  /* ---- semantic · text ---- */
  --minted-text-primary:var(--minted-neutral-100);      /* 20.12:1 on page */
  --minted-text-secondary:var(--minted-neutral-200);    /* 16.96:1 */
  --minted-text-muted:var(--minted-neutral-400);        /* 13.55:1 */
  --minted-text-faint:var(--minted-neutral-500);        /* 7.97:1 */
  --minted-text-accent:var(--minted-green-500);         /* LARGE TEXT ONLY on cell grounds (4.47:1 / 4.14:1) */
  --minted-text-label:var(--minted-green-300);          /* tracked mono labels, 8.43:1 */
  --minted-text-on-accent:var(--minted-dark-900);       /* ink on a green-500 or green-300 fill (5.02:1 / 8.43:1) */
  --minted-text-on-accent-dim:color-mix(in srgb, var(--minted-dark-900) 72%, var(--minted-green-300)); /* secondary ink on a green-300 fill, 5.26:1. Below 68% it fails 4.5:1; never tune it down */

  /* ---- semantic · actions ---- */
  --minted-action-primary-bg:var(--minted-green-500);
  --minted-action-primary-bg-hover:var(--minted-green-300);  /* was green-400: two adjacent ramp steps read as no change on the field. Ink stays dark-900, 8.43:1 */
  --minted-action-primary-text:var(--minted-dark-900);
  --minted-action-secondary-border:var(--minted-green-300);
  --minted-action-secondary-text:var(--minted-green-300);
  --minted-action-secondary-bg-hover:var(--minted-green-300-a10);

  /* ---- semantic · strokes ---- */
  --minted-stroke-grid:var(--minted-line-100);          /* background gridlines, matrix hairlines */
  --minted-stroke-divider:var(--minted-line-200);       /* card borders, section rules; separates by hue, not by ratio */
  --minted-stroke-active:var(--minted-green-300);       /* hover, selected, focus. The ONLY structural use of green */
  --minted-stroke-input:var(--minted-green-300-a55);    /* form field boundary; 3.17:1 vs page, the tightest pass in the system */
  --minted-stroke-input-hover:var(--minted-green-300-a70); /* 4.51:1 */

  --minted-field-error:var(--minted-danger-500);
  --minted-field-error-text:var(--minted-danger-200);
  --minted-placeholder-flag:var(--minted-warning-400); /* outlines a config link still waiting on its real value (local builds only) */

  --minted-focus-ring-color:var(--minted-green-300);
  --minted-focus-ring:2px solid var(--minted-green-300); /* offset 2px, never animated, never removed */

  /* ---- semantic · glows and scrims ---- */
  --minted-glow-100:var(--minted-green-300-a18);        /* soft halo: card hover, star text-shadow */
  --minted-glow-200:var(--minted-green-300-a28);        /* signature lift glow */
  --minted-glow-300:var(--minted-green-300-a45);        /* strong bloom: selected states, badges */
  --minted-scrim-100:var(--minted-dark-900-a55);        /* soft shadow part, image tint */
  --minted-scrim-200:var(--minted-dark-900-a82);        /* overlays, menus */

  /* ---- gradients ---- */
  --minted-gradient-title:linear-gradient(180deg,#45A779 0%,#0F764D 100%); /* display treatments of the word MINTED only */

  /* ---- shadows and interaction offsets. Glow is green, never neutral ---- */
  --minted-shadow-card:0 14px 40px rgba(3,5,4,0.5);                          /* non-card components only; cards use the depth set */
  --minted-shadow-lift:0 18px 50px rgba(5,8,6,0.6), 0 0 34px var(--minted-glow-100);
  --minted-shadow-btn-hover:4px 4px 0 var(--minted-green-300-a45), 0 0 34px rgba(22,145,92,0.35); /* hard offset plus glow */
  --minted-shadow-btn-hover-soft:4px 4px 0 rgba(36,191,120,0.2);            /* secondary button */
  --minted-hover-shift:translate(-2px,-2px);                                 /* button hover displacement */
  --minted-recede-opacity:0.75;                                              /* non-hovered siblings; never lower, dimmed text stays AA legible */

  /* ---- depth · amendment 01 ----
     Light source is fixed top-left and there is never a second one.
     RAISED catches light on its top and left edges and casts down-right.
     RECESSED inverts it. Never nest raised inside raised.
     Always background-color, never the background shorthand (it strips the face). */
  --minted-lit-face:linear-gradient(158deg,rgba(255,255,255,0.055) 0%,rgba(255,255,255,0.012) 42%,rgba(0,0,0,0.1) 100%);
  --minted-recessed-face:linear-gradient(180deg,rgba(0,0,0,0.34) 0%,rgba(0,0,0,0.05) 55%,rgba(255,255,255,0.03) 100%);
  --minted-bevel:inset 0 1px 0 rgba(255,255,255,0.1),inset 1px 0 0 rgba(255,255,255,0.045),inset -1px 0 0 rgba(0,0,0,0.4),inset 0 -1px 0 rgba(0,0,0,0.5);
  --minted-bevel-lift:inset 0 1px 0 rgba(255,255,255,0.16),inset 1px 0 0 rgba(255,255,255,0.07),inset -1px 0 0 rgba(0,0,0,0.4),inset 0 -1px 0 rgba(0,0,0,0.5);
  --minted-cast:6px 8px 0 rgba(2,4,3,0.55),14px 20px 44px rgba(2,4,3,0.7);          /* hard offset + soft blur, both down-right */
  --minted-cast-lift:8px 11px 0 rgba(2,4,3,0.55),18px 26px 56px rgba(2,4,3,0.72);
  --minted-press:inset 0 2px 5px rgba(0,0,0,0.55),inset 0 -1px 0 rgba(255,255,255,0.05);
  --minted-press-deep:inset 0 2px 6px rgba(0,0,0,0.6),inset 0 -1px 0 rgba(255,255,255,0.05); /* form inputs */

  /* ---- typography. Two typefaces, two jobs ----
     Display formula: Archivo 700-800, font-stretch 115-125%, uppercase,
     letter-spacing -0.01em to -0.02em, line-height 0.95-1.14.
     Mono label formula: 500, uppercase, letter-spacing 0.14em-0.28em, --minted-text-label.
     Mono is never used for a sentence and never for body copy. Both families are
     working fonts pending client confirmation. */
  --minted-font-display:'Archivo', system-ui, sans-serif;
  --minted-font-body:'Archivo', system-ui, sans-serif;
  --minted-font-mono:'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;

  --minted-text-base:17px;        /* html root size, both surfaces (set explicitly; the tool inherits 16px standalone otherwise) */
  --minted-leading-body:1.6;
  --minted-leading-display:1.1;
  --minted-weight-btn:700;        /* all buttons; approved 2026-07-13 */
  --minted-track-label:0.28em;

  /* fluid scale · marketing site */
  --minted-size-hero:clamp(4.5rem,12vw,13rem);
  --minted-size-hero-mobile:clamp(2.4rem,14.5vw,5rem);
  --minted-size-headline:clamp(1.7rem,3.2vw,3rem);
  --minted-size-quote:clamp(2rem,5vw,4.4rem);
  --minted-size-h2:clamp(1.9rem,3.6vw,3.1rem);
  --minted-size-h3:clamp(1.7rem,3vw,2.6rem);
  --minted-size-card:clamp(1.3rem,2vw,1.9rem);
  --minted-size-lede:1.15rem;
  --minted-size-body:1rem;
  --minted-size-note:0.9rem;
  --minted-size-label:0.72rem;    /* mono, tracking 0.28em */
  --minted-size-btn:0.75rem;      /* mono, tracking 0.1em, weight 700 */

  /* app density · GrowthFi Matrix tool. Same role names, values redefined at the
     root of the surface (the same pattern the print layer uses). */
  --minted-size-display:clamp(3.5rem,9vw,7rem);
  --minted-size-h1:clamp(2.5rem,5vw,4rem);
  --minted-size-tool-h2:clamp(1.75rem,3.2vw,2.5rem);
  --minted-size-tool-h3:1.375rem;

  /* ---- spacing, gutters, borders. Radius is zero everywhere, no exceptions ---- */
  --minted-cell:48px;                          /* background grid unit */
  --minted-pad-x:5vw;                          /* page gutter; 18px floor at 480px and below */
  --minted-space-1:6px;
  --minted-space-2:10px;                       /* card grid gap */
  --minted-space-3:18px;
  --minted-space-4:30px;
  --minted-space-5:clamp(40px,7vh,72px);       /* intra-section blocks */
  --minted-space-6:clamp(120px,18vh,220px);    /* section vertical padding */
  --minted-nav-height:60px;                    /* fixed nav; 52px when compressed. Drives scroll-padding-top */

  --minted-radius:0;                           /* sharp corners everywhere; no exceptions */
  --minted-border-hairline:1px solid var(--minted-stroke-divider);
  --minted-border-accent:1px solid var(--minted-green-300);

  /* ---- motion. Opacity and transform only; every effect has a reduced-motion path ----
     Everything moves on grid logic: cells materialize in place, elements translate
     along grid axes, staggers cascade from each section's origin corner. */
  --minted-ease-enter:cubic-bezier(0.16,1,0.3,1);    /* entrances, reveals, lifts */
  --minted-ease-state:cubic-bezier(0.65,0,0.35,1);   /* state changes, toggles */
  --minted-ease-overshoot:cubic-bezier(0.22,1.06,0.36,1); /* the tool's reveal and boot only */
  --minted-ease-scroll-lerp:0.1;                     /* eased wheel scrolling, website only (Lenis, js/main.js). A number, not a timing function: the share of the remaining distance covered per 60 Hz frame, frame-rate independent; a 100 px notch is within 1 px in about 0.77 s, never overshoots. No reduced-motion value: reduced motion gets no easing at all */
  --minted-dur-fast:200ms;        /* micro state changes */
  --minted-dur-base:300ms;        /* larger state changes */
  --minted-dur-enter:650ms;       /* entrances */
  --minted-dur-signature:1000ms;  /* hero moments only */
  --minted-dur-scroll-link:900ms; /* in-page links on the website (Lenis, js/main.js): every link glide takes this long whatever the distance, easing out (cubic); the skip link jumps. No reduced-motion value: reduced motion gets no Lenis, so links jump */
}
@media (max-width:480px){:root{--minted-pad-x:18px}}
@media (prefers-reduced-motion: reduce){
  :root{--minted-dur-fast:100ms;--minted-dur-base:150ms;--minted-dur-enter:200ms;--minted-dur-signature:200ms}
}

/* ---- print layer. The only light ground in the system, and a medium constraint
   rather than a theme. Role names are identical to screen; values swap. Depth
   carries no meaning on paper, so every depth token resolves to none. ---- */
:root{
  --minted-print-bg-page:var(--minted-paper-000);
  --minted-print-bg-surface:var(--minted-paper-000);
  --minted-print-bg-cell:var(--minted-paper-050);
  --minted-print-bg-cell-strong:var(--minted-paper-200);
  --minted-print-text-primary:var(--minted-ink-900);
  --minted-print-text-secondary:var(--minted-ink-600);
  --minted-print-text-muted:var(--minted-ink-600);
  --minted-print-text-faint:var(--minted-ink-600);
  --minted-print-text-accent:var(--minted-green-700);   /* green-500 fails normal text on paper (4.01:1) */
  --minted-print-text-label:var(--minted-green-700);
  --minted-print-action-primary-bg:var(--minted-paper-000);
  --minted-print-action-primary-bg-hover:var(--minted-paper-000);
  --minted-print-action-primary-text:var(--minted-ink-900);
  --minted-print-action-secondary-border:var(--minted-ink-900);
  --minted-print-action-secondary-text:var(--minted-ink-900);
  --minted-print-action-secondary-bg-hover:transparent;
  --minted-print-stroke-grid:var(--minted-ink-line);
  --minted-print-stroke-divider:var(--minted-ink-line);
  --minted-print-focus-ring-color:var(--minted-green-700);
  --minted-print-surface-raised:var(--minted-paper-000);
  --minted-print-surface-raised-hi:var(--minted-paper-050);
  --minted-print-surface-recessed:var(--minted-paper-050);
}
@media print{
  :root{
    --minted-bg-page:var(--minted-print-bg-page);
    --minted-bg-surface:var(--minted-print-bg-surface);
    --minted-bg-cell:var(--minted-print-bg-cell);
    --minted-bg-cell-strong:var(--minted-print-bg-cell-strong);
    --minted-text-primary:var(--minted-print-text-primary);
    --minted-text-secondary:var(--minted-print-text-secondary);
    --minted-text-muted:var(--minted-print-text-muted);
    --minted-text-faint:var(--minted-print-text-faint);
    --minted-text-accent:var(--minted-print-text-accent);
    --minted-text-label:var(--minted-print-text-label);
    --minted-action-primary-bg:var(--minted-print-action-primary-bg);
    --minted-action-primary-bg-hover:var(--minted-print-action-primary-bg-hover);
    --minted-action-primary-text:var(--minted-print-action-primary-text);
    --minted-action-secondary-border:var(--minted-print-action-secondary-border);
    --minted-action-secondary-text:var(--minted-print-action-secondary-text);
    --minted-action-secondary-bg-hover:var(--minted-print-action-secondary-bg-hover);
    --minted-stroke-grid:var(--minted-print-stroke-grid);
    --minted-stroke-divider:var(--minted-print-stroke-divider);
    --minted-focus-ring-color:var(--minted-print-focus-ring-color);
    --minted-focus-ring:2px solid var(--minted-print-focus-ring-color);
    --minted-surface-raised:var(--minted-print-surface-raised);
    --minted-surface-raised-hi:var(--minted-print-surface-raised-hi);
    --minted-surface-recessed:var(--minted-print-surface-recessed);
    --minted-stroke-active:var(--minted-print-stroke-divider);
    --minted-lit-face:none;--minted-recessed-face:none;
    --minted-bevel:none;--minted-bevel-lift:none;
    --minted-cast:none;--minted-cast-lift:none;
    --minted-press:none;--minted-press-deep:none;
    --minted-shadow-card:none;--minted-shadow-lift:none;
    --minted-shadow-btn-hover:none;--minted-shadow-btn-hover-soft:none;
    --minted-glow-100:transparent;--minted-glow-200:transparent;--minted-glow-300:transparent;
  }
  @page{margin:14mm}
  html{font-size:12pt}
  body{background:#fff}
  .no-print{display:none !important}
  a[href^="http"]::after{content:" (" attr(href) ")";font-size:0.8em;color:var(--minted-text-muted)}
}
/* On-screen review of the print layer: aliases the same --minted-print-* tokens
   the @media print block uses, so the two can never drift. */
[data-preview="print"]{
  --minted-bg-page:var(--minted-print-bg-page);
  --minted-bg-surface:var(--minted-print-bg-surface);
  --minted-bg-cell:var(--minted-print-bg-cell);
  --minted-bg-cell-strong:var(--minted-print-bg-cell-strong);
  --minted-text-primary:var(--minted-print-text-primary);
  --minted-text-secondary:var(--minted-print-text-secondary);
  --minted-text-muted:var(--minted-print-text-muted);
  --minted-text-faint:var(--minted-print-text-faint);
  --minted-text-accent:var(--minted-print-text-accent);
  --minted-text-label:var(--minted-print-text-label);
  --minted-action-primary-bg:var(--minted-print-action-primary-bg);
  --minted-action-primary-text:var(--minted-print-action-primary-text);
  --minted-action-secondary-border:var(--minted-print-action-secondary-border);
  --minted-action-secondary-text:var(--minted-print-action-secondary-text);
  --minted-stroke-grid:var(--minted-print-stroke-grid);
  --minted-stroke-divider:var(--minted-print-stroke-divider);
  --minted-focus-ring-color:var(--minted-print-focus-ring-color);
  --minted-surface-raised:var(--minted-print-surface-raised);
  --minted-surface-raised-hi:var(--minted-print-surface-raised-hi);
  --minted-surface-recessed:var(--minted-print-surface-recessed);
  --minted-stroke-active:var(--minted-print-stroke-divider);
  --minted-lit-face:none;--minted-recessed-face:none;
  --minted-bevel:none;--minted-bevel-lift:none;
  --minted-cast:none;--minted-cast-lift:none;
  --minted-press:none;--minted-press-deep:none;
  --minted-shadow-card:none;--minted-shadow-lift:none;
}

