/* ============================================================================
   HIIQ SIGNATURE — DESIGN TOKENS
   Andre Valentine · HIIQ Business Solutions
   "Editorial discipline, after dark."

   The single source of truth. Import this one file and inherit the whole
   system — local brand fonts, every color role, the type scale, motion.

       <link rel="stylesheet" href="tokens.css">

   Edit a value here and everything that consumes it re-skins at once.
   Guard the JOBS, not just the hexes (see BRAND.md §Color).
   ============================================================================ */

/* ----------------------------------------------------------------------------
   1 · BRAND FONTS  (shipped locally from ./assets/fonts — works offline)
   This file alone owns the exact local files, family names, and semantic font
   roles. check-kit.ps1 verifies that this one source stays complete.
---------------------------------------------------------------------------- */
@font-face{font-family:"Anton";src:url("assets/fonts/Anton/Anton-Regular.ttf") format("truetype");font-weight:400;font-style:normal;font-display:swap}

/* Carlito - the document body face since 2026-09-14 (Andre). Metric-compatible with Calibri; files under assets/fonts/Carlito (OFL). */
@font-face{font-family:"Carlito";src:url("assets/fonts/Carlito/Carlito-Regular.ttf") format("truetype");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Carlito";src:url("assets/fonts/Carlito/Carlito-Bold.ttf") format("truetype");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:"Carlito";src:url("assets/fonts/Carlito/Carlito-Italic.ttf") format("truetype");font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:"Carlito";src:url("assets/fonts/Carlito/Carlito-BoldItalic.ttf") format("truetype");font-weight:700;font-style:italic;font-display:swap}

/* Fraunces retired 2026-08-23 (Andre: too much on headers) and REMOVED from the
   kit 2026-08-26 (Andre). This supersedes the earlier note that its files stayed
   under assets/fonts/Fraunces/ for desktop and print - they no longer do. The
   family is staged at .trash/2026-08-26/assets/fonts/Fraunces and is also in Git
   history; restore with `git checkout <sha> -- "assets/fonts/Fraunces"` if
   desktop or print ever needs it. The header stack is Anton over Montserrat. */

@font-face{font-family:"Cormorant Garamond";src:url("assets/fonts/Cormorant_Garamond/CormorantGaramond.ttf") format("truetype");font-weight:300 700;font-style:normal;font-display:swap}
@font-face{font-family:"Cormorant Garamond";src:url("assets/fonts/Cormorant_Garamond/CormorantGaramond-Italic.ttf") format("truetype");font-weight:300 700;font-style:italic;font-display:swap}

@font-face{font-family:"DM Sans";src:url("assets/fonts/DM_Sans/DMSans-VariableFont_opsz,wght.ttf") format("truetype");font-weight:100 1000;font-style:normal;font-display:swap}
@font-face{font-family:"DM Sans";src:url("assets/fonts/DM_Sans/DMSans-Italic-VariableFont_opsz,wght.ttf") format("truetype");font-weight:100 1000;font-style:italic;font-display:swap}

@font-face{font-family:"Montserrat";src:url("assets/fonts/Montserrat/Montserrat-VariableFont_wght.ttf") format("truetype");font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:"Montserrat";src:url("assets/fonts/Montserrat/Montserrat-Italic-VariableFont_wght.ttf") format("truetype");font-weight:100 900;font-style:italic;font-display:swap}

@font-face{font-family:"Urbanist";src:url("assets/fonts/Urbanist/Urbanist-VariableFont_wght.ttf") format("truetype");font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:"Urbanist";src:url("assets/fonts/Urbanist/Urbanist-Italic-VariableFont_wght.ttf") format("truetype");font-weight:100 900;font-style:italic;font-display:swap}

@font-face{font-family:"Bricolage Grotesque";src:url("assets/fonts/Bricolage_Grotesque/BricolageGrotesque.ttf") format("truetype");font-weight:200 800;font-style:normal;font-display:swap}

/* Hanken Grotesk @font-face retired 2026-09-22: Carlito took the --font-body lead on 2026-09-14 and
   no semantic role starts with Hanken any more (check-kit font-wiring). It stays as the second
   fallback in --font-body / --font-technical-body and the files stay under assets/fonts/Hanken_Grotesk
   per the MAINTENANCE cleanup rule; re-add the two rules if a role leads with it again. */

:root{
  /* ==========================================================================
     2 · CORE PALETTE  —  Andre's curated values (from assets/color pallet/Color Pallet.png)
     Eleven colors, each with ONE job. More than this and you've left the system.
     Synced to the palette sheet 2026-08-23. Contrast figures below are measured
     WCAG 2.1 ratios, not estimates — re-measure before changing any value.
     ========================================================================== */
  --carbon:      #131922;   /* primary dark canvas · blue-black · the page */
  --midnight:    #14233c;   /* deep-blue slab · sections, cards, dark-logo bed */
  --ember:       #ff8210;   /* THE accent · emphasis · CTA · "negative value" (7.10:1 on carbon) */
  --frost:       #466ba8;   /* interaction · cool accent (logo steel-blue) · UI-only on cream, see --frost-deep */
  --sage:        #4e8060;   /* success · "positive value" · PAID / gains */
  --vivid-blue:  #0d00b7;   /* LIGHT SURFACES ONLY · wordmark blue · document links (10.1:1 on cream, 1.4:1 on carbon — never on dark) */
  --muted-grey:  #d6d6d6;   /* neutral grey · dividers, tertiary + label ON DARK (12.1:1 on carbon; only 1.2:1 on cream — never ink on light) */
  --cream:       #f1e7d3;   /* warm light canvas · cards, slabs (near-white, never pure white) */
  --light-cream: #fffdf5;   /* lightest warm page · softest cream */
  --black:       #000000;   /* ink on cream / print */
  --white:       #ffffff;   /* ink on dark / paper */

  /* ==========================================================================
     3 · SUPPORTING DARKS + NEUTRALS  (depth beneath the core; screen only)
     ========================================================================== */
  --charcoal:  #1c1c1c;     /* warm-neutral dark surface */
  --graphite:  #1b212b;     /* raised cards on dark */
  --well:      #090c10;     /* deepest well · footers, insets */
  --mist:      #e7ecf3;     /* primary text on dark (softer than pure white) */
  --muted:     #8b97ab;     /* body / secondary text on dark */
  --line:      #2c3643;     /* hairline border on dark */

  /* ==========================================================================
     4 · ACCENT HELPERS  (hover / contrast variants — same jobs)
     ========================================================================== */
  --ember-hi:    #ff9e47;   /* ember hover / active (brighten, never flood) — 8.60:1 on carbon */
  --ember-deep:  #96520b;   /* ember on cream — the AA-contrast variant (4.88:1 on cream).
                               The pre-2026-08-23 value #b5681a measures 3.45:1 on the new
                               cream and FAILS AA body text. Do not restore it. */
  --frost-hi:    #6389c4;   /* frost hover — 4.96:1 on carbon */
  --frost-deep:  #3a5789;   /* frost on cream — AA-contrast variant (5.89:1 on cream).
                               Needed because --frost itself is 4.36:1 on cream, i.e. UI/border
                               only on light surfaces, never body text. */
  --frost-ring:  rgba(70,107,168,.55);  /* translucent focus ring on dark */
  --sage-deep:   #3c6a4d;   /* sage on cream — AA-contrast variant (5.09:1 on cream) */

  /* ==========================================================================
     5 · PRINT / DOCUMENT LIGHT MODE  (documents ride WHITE; borders go DARK, never ember)

     Andre 2026-08-23: anything printable rides WHITE, not cream. A printer cannot
     lay down white — a cream page has to be flooded with ink edge to edge, which
     is expensive, dries unevenly, and shifts every other colour on the sheet.
     Cream stays a core brand colour for SCREEN surfaces; it is no longer the
     document page. Contrast figures are measured, not estimated.
     ========================================================================== */
  --doc-paper:      #ffffff;             /* THE printable page/sheet — every ink below clears AA on it */
  --doc-panel:      #eeeeec;             /* panel / callout fill / the surround behind a sheet (1.16:1 vs white) */
  --doc-panel-deep: #e5e5e3;             /* recessed panel · table stripe (1.26:1 vs white) */
  --cream-card:   #fbf6ea;               /* warm raised card — SCREEN only now, not the document sheet */
  --cream-deep:   #e7dac0;               /* warm recessed / pill — SCREEN only now */
  --cream-ink:    #2a2418;               /* warm near-black document text (15.40:1 on white) */
  --cream-muted:  #695d44;               /* secondary document text (6.46:1 on white, 5.56:1 on --doc-panel) */
  --cream-border: rgba(28,28,28,.85);    /* DARK hairline in light mode */

  /* ==========================================================================
     6 · SEMANTIC ROLES  (point components at these, not raw hexes)
     ========================================================================== */
  /* screen / dark surfaces */
  --surface-page:     var(--carbon);
  --surface-raised:   var(--graphite);
  --surface-slab:     var(--midnight);
  --surface-neutral:  var(--charcoal);
  --surface-well:     var(--well);
  --text-strong:      var(--white);
  --text:             var(--mist);
  --text-muted:       var(--muted);
  --text-tertiary:    var(--muted-grey);
  --border:           var(--line);
  --accent:           var(--ember);      /* the one thing that matters */
  --accent-hover:     var(--ember-hi);
  --interaction:      var(--frost);      /* the thing that reacts */
  --focus:            var(--frost-hi);   /* keyboard focus outline on dark */

  /* document / light surfaces */
  --doc-page:    var(--doc-paper);      /* WHITE — see section 5 */
  --doc-sheet:   var(--doc-paper);
  --doc-slab:    var(--doc-panel);
  --doc-ink:     var(--cream-ink);
  --doc-muted:   var(--cream-muted);
  --doc-border:  var(--cream-border);
  --doc-accent:  var(--ember-deep);
  --doc-interaction: var(--vivid-blue); /* document links / "CONSULTANT" blue — the wordmark blue,
                                           light surfaces only (10.1:1 on cream) */
  --doc-focus:   var(--frost-deep);     /* keyboard focus outline on cream (5.89:1) */

  /* finance / data semantics (Andre's ledger layer) */
  --value-positive:  var(--sage);        /* gains · credits · PAID (on dark) */
  --value-negative:  var(--ember);       /* losses · debits · DUE  (on dark) */
  --value-positive-doc: var(--sage-deep);/* on cream */
  --value-negative-doc: var(--ember-deep);

  /* status */
  --ok:     var(--sage);
  --warn:   var(--ember);
  --info:   var(--frost);

  /* ==========================================================================
     7 · LEGACY ALIASES  (keep the older component/template code cascading)
     Old kits used --orange / --ring / --amber / --navy. Point them here.
     ========================================================================== */
  --orange:      var(--ember);
  --orange-hi:   var(--ember-hi);
  --orange-deep: var(--ember-deep);
  --amber:       var(--ember);
  --navy:        var(--midnight);
  --ring:        var(--frost-ring);
  --ring-solid:  var(--frost);
  --ring-soft:   rgba(70,107,168,.3);
  --paper:       var(--doc-sheet);   /* the document SHEET — white since 2026-08-23 */
  --canvas:      var(--carbon);
  --mgray:       var(--muted-grey);

  /* ==========================================================================
     8 · TYPOGRAPHY
     Two voices, always: a character face held by a workhorse.
     ========================================================================== */
  --font-stamp:      "Anton", system-ui, sans-serif;                  /* loud numerals / hero */
  --font-poster:     var(--font-stamp);                               /* compatibility alias */
  --font-display:    "Montserrat", "Urbanist", system-ui, sans-serif; /* headers + sub-headers (Andre 2026-08-23: was Fraunces, too much) */
  --font-lyric:      "Cormorant Garamond", Georgia, serif;            /* the one human line (italic) */
  --font-body:       "Carlito", "Hanken Grotesk", "DM Sans", system-ui, -apple-system, sans-serif; /* prose + document body (Andre 2026-09-14: Carlito, installed; was Hanken Grotesk) */
  --font-ui:         "Urbanist", "DM Sans", system-ui, sans-serif;    /* product UI + controls */
  --font-label:      "Montserrat", "Urbanist", sans-serif;            /* labels + uppercase eyebrows */
  --font-technical:  "Bricolage Grotesque", "DM Sans", sans-serif;    /* technical display */
  --font-technical-body: "DM Sans", "Hanken Grotesk", sans-serif;     /* technical copy (Hanken is now the main body face) */
  --font-data:       ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace; /* code + tabular data */
  --font-mono:       var(--font-data);                                /* compatibility alias */

  /* modular type scale (fluid, clamp-based) */
  --step--1: clamp(0.79rem, 0.77rem + 0.10vw, 0.85rem);   /* fine print */
  --step-0:  clamp(0.95rem, 0.92rem + 0.18vw, 1.06rem);   /* body */
  --step-1:  clamp(1.14rem, 1.08rem + 0.32vw, 1.33rem);   /* lead */
  --step-2:  clamp(1.37rem, 1.26rem + 0.55vw, 1.66rem);   /* h4 */
  --step-3:  clamp(1.64rem, 1.47rem + 0.86vw, 2.07rem);   /* h3 */
  --step-4:  clamp(1.96rem, 1.70rem + 1.32vw, 2.59rem);   /* h2 */
  --step-5:  clamp(2.36rem, 1.95rem + 2.05vw, 3.24rem);   /* h1 */
  --step-6:  clamp(2.83rem, 2.20rem + 3.14vw, 4.05rem);   /* display */
  --step-stamp: clamp(3.4rem, 1.9rem + 7.5vw, 10rem);     /* hero stamp */

  --tracking-stamp: -0.01em;
  --tracking-display: -0.015em;
  --tracking-eyebrow: 0.2em;   /* uppercase label spacing */
  --leading-tight: 1.04;
  --leading-snug: 1.2;
  --leading-body: 1.55;

  /* ==========================================================================
     9 · SPACE · RADIUS · BORDER · SHADOW · MOTION
     ========================================================================== */
  --space-1: 4px;  --space-2: 8px;  --space-3: 12px; --space-4: 16px;
  --space-5: 24px; --space-6: 32px; --space-7: 48px; --space-8: 64px;
  --space-9: 96px; --space-10: 128px;

  --radius-xs: 5px; --radius-sm: 8px; --radius-md: 12px;
  --radius-lg: 16px; --radius-xl: 22px; --radius-pill: 100px;

  --border-hair: 1px solid var(--line);        /* hard border = a value */
  --border-hair-doc: 1px solid var(--doc-border);

  --shadow-lift:  0 22px 46px -22px rgba(70,107,168,.40);   /* frost-tinted card lift */
  --shadow-lift-doc: 0 20px 40px -20px rgba(28,28,28,.35);
  --shadow-halo:  0 0 0 3px rgba(255,130,16,.16);          /* soft ember halo on hover */

  --ease: cubic-bezier(.2,.8,.2,1);
  --dur-fast: .2s; --dur: .3s; --dur-slow: .7s;
}

/* ----------------------------------------------------------------------------
   10 · BRAND UTILITIES  (opt-in — the signature moves)
---------------------------------------------------------------------------- */

/* Iridescent heading sheen — Frost → Ember, from the reference set.
   Use sparingly, on one large display line. */
.hiiq-sheen{
  background:linear-gradient(100deg,#fff 30%, rgba(99,137,196,.9) 50%, var(--ember) 70%, #fff 88%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}

/* Card lift — translateY + Frost border + soft shadow. (For the full v2 move,
   compose with the cursor-following tilt: .hiiq-tilt in §11.) */
.hiiq-lift{transition:transform var(--dur) var(--ease),box-shadow var(--dur),border-color var(--dur)}
.hiiq-lift:hover{transform:translateY(-6px);border-color:var(--frost);box-shadow:var(--shadow-lift)}

/* Eyebrow — uppercase mono/label lead-in, Ember. */
.hiiq-eyebrow{font-family:var(--font-label);font-weight:600;font-size:var(--step--1);
  letter-spacing:var(--tracking-eyebrow);text-transform:uppercase;color:var(--ember)}

/* Muted-grey pill tag (card eyebrow). */
.hiiq-pill{display:inline-block;font-family:var(--font-body);font-weight:600;font-size:11px;
  letter-spacing:.04em;padding:4px 12px;border-radius:var(--radius-pill);
  background:var(--muted-grey);color:var(--carbon)}

/* Keyboard focus — always Frost, never removed. */
:where(a,button,input,select,textarea,[tabindex]):focus-visible{
  outline:2px solid var(--focus);outline-offset:3px;border-radius:4px}

/* ----------------------------------------------------------------------------
   11 · GLASS · SHIMMER · TILT  (the v2 interaction set)
   Frosted translucent surfaces, a slow highlight that travels the outline,
   and a cursor-following 3D tilt. Compose them: <div class="hiiq-glass hiiq-shim hiiq-tilt">
---------------------------------------------------------------------------- */
:root{
  --glass-fill:        rgba(27,33,43,.42);    /* translucent dark surface */
  --glass-fill-strong: rgba(231,236,243,.16); /* brighter glass (primary) */
  --glass-fill-ghost:  rgba(255,255,255,.05); /* faintest glass (ghost) */
  --glass-fill-ember:  rgba(255,130,16,.12);  /* ember-tinted glass */
  --glass-fill-light:  rgba(255,255,255,.5);  /* glass on cream */
  --glass-blur: 9px;
  --shim-dur: 7s;                              /* slow — a shimmer, not a strobe */
  --shine:  rgba(99,137,196,.9);              /* frost highlight (default) */
  --shine2: rgba(255,255,255,.7);             /* white glint */
}

/* animatable angle for the traveling highlight */
@property --shimAngle{ syntax:"<angle>"; inherits:false; initial-value:0deg; }

/* frosted-glass surface */
.hiiq-glass{
  background:var(--glass-fill);
  -webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));
  border:1px solid rgba(255,255,255,.10);
}

/* slow shimmer traveling the outline — a 1.3px gradient ring over the border.
   Set --shine / --shine2 per context (frost+white on dark, ember+frost on cream). */
.hiiq-shim{position:relative}
.hiiq-shim::after{
  content:"";position:absolute;inset:0;border-radius:inherit;padding:1.3px;pointer-events:none;z-index:3;
  background:conic-gradient(from var(--shimAngle),
    transparent 0deg, var(--shine) 52deg, var(--shine2) 80deg, transparent 130deg, transparent 360deg);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
          mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
  animation:hiiqShim var(--shim-dur) linear infinite;
}
@keyframes hiiqShim{ to{ --shimAngle:360deg } }

/* cursor-following 3D tilt + hover lift. JS sets --rx/--ry from the pointer;
   :hover sets --ty for the lift. Give it a bordered surface to lift. */
.hiiq-tilt{
  transform:perspective(860px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translate3d(0,var(--ty,0),0);
  transform-style:preserve-3d;will-change:transform;
  transition:transform .18s var(--ease),box-shadow .3s,border-color .3s;
}
.hiiq-tilt:hover{ --ty:-6px;border-color:var(--frost);box-shadow:var(--shadow-lift) }

/* Respect the user. Motion rewards attention; it never demands it. */
@media (prefers-reduced-motion: reduce){
  .hiiq-lift{transition:none}
  .hiiq-shim::after{animation:none;display:none}
  .hiiq-tilt{transform:none;transition:none}
  *{scroll-behavior:auto !important}
}

/* ----------------------------------------------------------------------------
   12 · SIGNATURE DEVICES  (the fingerprint — Hawaiʻi × IQ, as reusable marks)
   Two devices nobody else can wear: the home archipelago as a rule, and the
   coordinate plane from the IQ mark as a ground with one Ember point on it.
---------------------------------------------------------------------------- */

/* The archipelago divider — the eight islands, NW → SE, geographically true,
   trailing off the way they do in the mark. Use as <hr class="hiiq-islands">
   or on any block. Color rides `color` (Ember by default) — on cream, set
   color:var(--ember-deep); as a quiet structural rule, color:var(--line).
   Mask = the current `imagery.hawaiianIslands` manifest role, supplied at
   runtime through `--hiiq-islands-mask-image`. */
.hiiq-islands{
  display:block;border:0;width:150px;aspect-ratio:238/154;height:auto;margin:var(--space-6) 0;
  color:var(--ember);background:currentColor;
  -webkit-mask-image:var(--hiiq-islands-mask-image);
  -webkit-mask-repeat:no-repeat;
  -webkit-mask-position:center;
  -webkit-mask-size:contain;
          mask-image:var(--hiiq-islands-mask-image);
          mask-repeat:no-repeat;
          mask-position:center;
          mask-size:contain;
}
.hiiq-islands--center{margin-left:auto;margin-right:auto}

/* The coordinate-plane ground — a faint Frost grid with hairline axes crossing
   at one Ember point: the point that matters (set --gx/--gy to move it).
   For dark canvases; keep it behind content, one per view. */
.hiiq-graph{
  position:relative;
  background-image:
    linear-gradient(to right, rgba(70,107,168,.09) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(70,107,168,.09) 1px, transparent 1px);
  background-size:28px 28px;
}
.hiiq-graph::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background-image:
    linear-gradient(to right, transparent calc(var(--gx,66%) - .5px),
      rgba(70,107,168,.25) calc(var(--gx,66%) - .5px),
      rgba(70,107,168,.25) calc(var(--gx,66%) + .5px),
      transparent calc(var(--gx,66%) + .5px)),
    linear-gradient(to bottom, transparent calc(var(--gy,38%) - .5px),
      rgba(70,107,168,.25) calc(var(--gy,38%) - .5px),
      rgba(70,107,168,.25) calc(var(--gy,38%) + .5px),
      transparent calc(var(--gy,38%) + .5px));
}
.hiiq-graph::after{
  content:"";position:absolute;left:var(--gx,66%);top:var(--gy,38%);
  width:9px;height:9px;margin:-4.5px 0 0 -4.5px;border-radius:50%;
  background:var(--ember);box-shadow:0 0 0 5px rgba(255,130,16,.15);pointer-events:none;
}
