/* VENDORED COPY - do not edit here.
   Source: one-call-brand/v2026/tokens/tokens.css
   Only change: the Parslay @font-face url points at ./Parslay.woff2.
   Re-sync with scripts/sync-brand.sh when the brand repo changes.
*/
/* ==========================================================================
   One Call Handyman - 2026 design tokens
   Built 17 September 2026 from the as-is snapshot in ../../tokens/ plus the
   ui-ux-pro-max design-system brief (Trust & Authority + Conversion, Flat).

   Fixed points, carried over unchanged:
     - Logo:  assets/logo/One-Call-Handyman-Logo.svg
     - Blue:  #33A7E0
     - Navy:  #022257

   Every pair below was contrast-checked. Ratios are in comments.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. PRIMITIVES - the raw ramps. Never reference these in a component.
   -------------------------------------------------------------------------- */
:root {
  /* Brand blue, hue 200. 500 is the exact heritage blue. */
  --blue-50:  #F2F7FA;
  --blue-100: #E2EDF3;
  --blue-200: #BAE0F3;
  --blue-300: #8ECDEB;
  --blue-400: #5FB7E3;
  --blue-500: #33A7E0;  /* HERITAGE. Identity only, never text on white */
  --blue-600: #1E8CC3;
  --blue-700: #18709B;  /* 5.48:1 on white - the accessible action blue */
  --blue-800: #115373;
  --blue-900: #0C3950;
  --blue-950: #072331;

  /* Navy, hue 217. 900 is the exact heritage navy. */
  --navy-50:  #F1F5FB;
  --navy-100: #E0E8F5;
  --navy-200: #B1CDFB;
  --navy-300: #81AEF9;
  --navy-400: #4B8CF6;
  --navy-500: #2070F4;
  --navy-600: #0556DB;
  --navy-700: #0444AE;
  --navy-800: #033382;
  --navy-900: #022257;  /* HERITAGE. 15.34:1 with white */
  --navy-950: #011537;

  /* Hi-vis orange. New in 2026. Single urgent CTA only. */
  --orange-50:  #FBF5F2;
  --orange-100: #F5E7E0;
  --orange-300: #F6AB84;
  --orange-500: #EE6A26;
  --orange-600: #D5500B;
  --orange-700: #C2410C;  /* 5.18:1 with white - the CTA fill */
  --orange-800: #A33609;  /* 6.80:1 - CTA hover */
  --orange-900: #572104;

  /* Neutrals, cool-tinted to sit with the navy */
  --slate-0:   #FFFFFF;
  --slate-50:  #F8FAFC;
  --slate-100: #F4F7FA;
  --slate-200: #E4EAF1;
  --slate-300: #CBD5E1;
  --slate-400: #74849D;  /* 3.80:1 on white - min for input borders */
  --slate-500: #64748B;
  --slate-600: #4A5567;  /* 7.54:1 on white - muted text */
  --slate-800: #1E2A3D;
  --slate-900: #0B1220;  /* 18.72:1 on white - body text */
  --slate-950: #0A1526;  /* dark-mode page background */

  /* Feedback */
  --red-600:   #B91C1C;  /* 6.47:1 with white */
  --red-300:   #FCA5A5;  /* dark mode */
  --green-700: #15803D;  /* 5.02:1 with white */
  --green-300: #6EE7A8;  /* dark mode */
  --amber-500: #F0AD4E;  /* review stars, carried over */
}

/* --------------------------------------------------------------------------
   2. SEMANTIC - light theme. Components reference only these.
   -------------------------------------------------------------------------- */
:root {
  --bg:               var(--slate-0);
  --bg-subtle:        var(--slate-100);
  --bg-invert:        var(--navy-900);
  --surface:          var(--slate-0);
  --surface-subtle:   var(--slate-100);

  --text:             var(--slate-900);   /* 18.72:1 AAA */
  --text-muted:       var(--slate-600);   /*  7.54:1 AAA */
  --text-invert:      var(--slate-0);
  --text-heading:     var(--navy-900);    /* 15.34:1 AAA */
  --text-on-invert-muted: var(--blue-200);

  --border:           var(--slate-200);   /* decorative dividers */
  --border-strong:    var(--slate-400);   /* input + component boundaries, 3.80:1 */

  --brand:            var(--blue-500);    /* identity. Rules, icons on navy, graphic accents */
  --brand-deep:       var(--blue-700);    /* links and text that must be readable, 5.48:1 */

  --action:           var(--navy-900);    /* primary button fill, 15.34:1 with white */
  --action-hover:     var(--navy-950);
  --action-text:      var(--slate-0);

  --cta:              var(--orange-700);  /* urgent / emergency only, 5.18:1 with white */
  --cta-hover:        var(--orange-800);
  --cta-text:         var(--slate-0);

  --link:             var(--blue-700);
  --focus:            var(--blue-700);

  --danger:           var(--red-600);
  --success:          var(--green-700);
  --star:             var(--amber-500);
}

/* --------------------------------------------------------------------------
   3. SEMANTIC - dark theme. New in 2026; the current site has none.
   -------------------------------------------------------------------------- */
:root[data-theme="dark"] {
  --bg:               var(--slate-950);
  --bg-subtle:        #12233D;
  --bg-invert:        var(--slate-0);
  --surface:          #12233D;
  --surface-subtle:   #16294A;

  --text:             #E6EDF5;            /* 15.50:1 AAA */
  --text-muted:       #9FB0C6;            /*  8.27:1 AAA */
  --text-invert:      var(--slate-900);
  --text-heading:     #E6EDF5;
  --text-on-invert-muted: var(--slate-600);

  --border:           #24344C;
  --border-strong:    #5C7299;            /* 3.76:1 on dark bg */

  --brand:            var(--blue-400);    /* 8.16:1 - the heritage blue is too dark on dark */
  --brand-deep:       var(--blue-300);    /* 10.52:1 */

  --action:           var(--blue-400);
  --action-hover:     var(--blue-300);
  --action-text:      var(--slate-950);

  --cta:              var(--orange-700);
  --cta-hover:        var(--orange-600);
  --cta-text:         var(--slate-0);

  --link:             var(--blue-300);
  --focus:            var(--blue-300);

  --danger:           var(--red-300);
  --success:          var(--green-300);
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --bg: var(--slate-950); --bg-subtle: #12233D; --bg-invert: var(--slate-0);
    --surface: #12233D; --surface-subtle: #16294A;
    --text: #E6EDF5; --text-muted: #9FB0C6; --text-invert: var(--slate-900);
    --text-heading: #E6EDF5; --text-on-invert-muted: var(--slate-600);
    --border: #24344C; --border-strong: #5C7299;
    --brand: var(--blue-400); --brand-deep: var(--blue-300);
    --action: var(--blue-400); --action-hover: var(--blue-300); --action-text: var(--slate-950);
    --cta: var(--orange-700); --cta-hover: var(--orange-600); --cta-text: var(--slate-0);
    --link: var(--blue-300); --focus: var(--blue-300);
    --danger: var(--red-300); --success: var(--green-300);
  }
}

/* --------------------------------------------------------------------------
   4. TYPOGRAPHY
   Poppins stays for headings and UI. Open Sans is new for body copy.
   Parslay is retained but capped at one use per page.
   -------------------------------------------------------------------------- */
:root {
  --font-heading: "Poppins", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-body:    "Open Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-script:  "Parslay", cursive;
  --font-mono:    ui-monospace, SFMono-Regular, Menlo, monospace;

  /* Fluid type scale, 1.250 major third. clamp() min = 375px, max = 1440px. */
  --text-xs:      0.75rem;                                 /* 12 */
  --text-sm:      0.875rem;                                /* 14 */
  --text-base:    1rem;                                    /* 16 */
  --text-lg:      1.125rem;                                /* 18 */
  --text-xl:      clamp(1.25rem, 1.18rem + 0.30vw, 1.375rem);   /* 20 - 22 */
  --text-2xl:     clamp(1.5rem,  1.38rem + 0.52vw, 1.75rem);    /* 24 - 28 */
  --text-3xl:     clamp(1.75rem, 1.52rem + 0.99vw, 2.25rem);    /* 28 - 36 */
  --text-4xl:     clamp(2rem,    1.52rem + 2.04vw, 3rem);       /* 32 - 48 */
  --text-5xl:     clamp(2.5rem,  1.68rem + 3.50vw, 4.25rem);    /* 40 - 68 */

  --leading-tight:   1.15;   /* display */
  --leading-snug:    1.3;    /* headings */
  --leading-normal:  1.6;    /* body. was a hard 28px on 16px = 1.75 */
  --leading-relaxed: 1.7;

  --tracking-tight:  -0.02em;  /* display sizes only */
  --tracking-normal: 0;
  --tracking-wide:   0.06em;   /* uppercase eyebrows and buttons */

  --weight-regular:  400;
  --weight-medium:   500;
  --weight-semibold: 600;
  --weight-bold:     700;

  --measure: 68ch;   /* max line length for body copy */
}

/* --------------------------------------------------------------------------
   5. SPACE - 4pt base. Replaces the site's ad-hoc 0.44rem / 3.38rem / 5.06rem.
   -------------------------------------------------------------------------- */
:root {
  --space-0:  0;
  --space-1:  0.25rem;   /*  4 */
  --space-2:  0.5rem;    /*  8 */
  --space-3:  0.75rem;   /* 12 */
  --space-4:  1rem;      /* 16 */
  --space-5:  1.25rem;   /* 20 */
  --space-6:  1.5rem;    /* 24 */
  --space-8:  2rem;      /* 32 */
  --space-10: 2.5rem;    /* 40 */
  --space-12: 3rem;      /* 48 */
  --space-16: 4rem;      /* 64 */
  --space-20: 5rem;      /* 80 */
  --space-24: 6rem;      /* 96 */

  --section-y:  clamp(3rem, 2rem + 4.3vw, 6rem);   /* 48 - 96 */
  --gutter:     clamp(1rem, 0.5rem + 2.1vw, 2rem); /* 16 - 32 */
  --container:  75rem;   /* 1200. Down from 1310 - 1310 runs long at 16px body */
  --measure-container: 45rem;
}

/* --------------------------------------------------------------------------
   6. SHAPE - three radii, replacing the current four (0 / 3 / 10 / 80)
   -------------------------------------------------------------------------- */
:root {
  --radius-sm:   6px;    /* inputs, chips, small controls */
  --radius-md:   10px;   /* cards, panels, media */
  --radius-lg:   16px;   /* feature panels, modals */
  --radius-pill: 999px;  /* buttons only */

  /* Flat style: shadows carry elevation, not decoration. */
  --shadow-sm: 0 1px 2px rgba(11, 18, 32, 0.06);
  --shadow-md: 0 4px 12px rgba(11, 18, 32, 0.08);
  --shadow-lg: 0 12px 32px rgba(11, 18, 32, 0.10);

  --border-width: 1px;
  --focus-width:  3px;
  --focus-offset: 2px;
}

/* --------------------------------------------------------------------------
   7. MOTION - one shared set of tokens
   -------------------------------------------------------------------------- */
:root {
  --dur-instant: 100ms;  /* press feedback */
  --dur-fast:    160ms;  /* hover, colour shifts */
  --dur-base:    240ms;  /* enter, expand */
  --dur-exit:    160ms;  /* ~65% of enter */
  --dur-slow:    400ms;  /* stagger sequences */
  --ease-out:    cubic-bezier(0.22, 1, 0.36, 1);
  --ease-in:     cubic-bezier(0.4, 0, 1, 1);
  --ease-spring: cubic-bezier(0.34, 1.4, 0.64, 1);
  --stagger:     60ms;
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --dur-instant: 1ms; --dur-fast: 1ms; --dur-base: 1ms;
    --dur-exit: 1ms; --dur-slow: 1ms; --stagger: 0ms;
  }
}

/* --------------------------------------------------------------------------
   8. LAYERS
   -------------------------------------------------------------------------- */
:root {
  --z-base: 0; --z-raised: 10; --z-sticky: 20;
  --z-overlay: 40; --z-modal: 100; --z-toast: 1000;
}

/* --------------------------------------------------------------------------
   9. COMPONENT TOKENS
   -------------------------------------------------------------------------- */
:root {
  --control-h:     3rem;     /* 48px. Was 46 (input) / 40 (select, submit) */
  --control-h-sm:  2.5rem;   /* 40px, desktop-dense contexts only */
  --control-h-lg:  3.5rem;   /* 56px, hero CTA */
  --control-px:    1rem;
  --tap-min:       44px;

  --field-bg:      var(--bg);      /* recesses fields below the card in dark mode */
  --field-text:    var(--text);
  --field-border:  var(--border-strong);
  --field-radius:  var(--radius-sm);
  --field-gap:     var(--space-5);   /* 20px between fields, was 14 */
  --label-gap:     var(--space-2);
}

/* Self-hosted heritage script face */
@font-face {
  font-family: "Parslay";
  src: url("Parslay.woff2") format("woff2");
  font-weight: 400;
  font-display: swap;
}
