/* Self-hosted fonts (SIL OFL), subset woff2 from Google Fonts.
   /assets/* is cached immutably (see README "Caching"); these URLs cannot go
   through the bust filter from CSS, so if a font file ever changes, rename it. */
@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url(/assets/fonts/geist-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url(/assets/fonts/geist-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-mono-400-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-mono-500-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-mono-600-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root {
  /* surfaces */
  --paper-50:  #FAF8F4;   /* page background */
  --paper-100: #F1EDE6;   /* alternate section */
  --ink-950:   #101418;   /* headlines, dark sections */
  --ink-900:   #181E25;   /* card on dark */
  --ink-850:   #22282F;   /* rule on dark */
  --ink-800:   #2C333C;   /* border on dark */
  /* text */
  --ink-700:   #3A424C;   /* body */
  --ink-500:   #5B646E;   /* footer labels */
  --ink-400:   #8A94A0;   /* muted heading, eyebrow on dark */
  --ink-350:   #9BA3AD;   /* footer text */
  --ink-250:   #C4CAD2;   /* body on dark */
  /* accents */
  --accent-600: #E8590C;   /* decoration: dots, nodes, rules, eyebrows on dark */
  --accent-700: #C2410C;   /* AA-safe: interactive fills, accent text on light.
                              accent-600 is only 3.38:1 against paper-50, which
                              fails WCAG AA for normal text. This is 4.88:1 in
                              both directions. Do not use it on dark surfaces
                              (3.57:1 on ink-950). */
  --accent-050: #FDF0E7;
  --positive-600: #2F9E44;
  --line-300:  #D8D2C8;
  /* type */
  --font-sans: 'Geist', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-mono: 'IBM Plex Mono', ui-monospace, 'SF Mono', monospace;
  /* geometry */
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 16px;
  --gutter: clamp(20px, 6vw, 120px);
  --measure: 68ch;
  --max-width: 1600px;

  /* type scale, responsive: clamp(mobile floor, fluid, desktop max) */
  --fs-h1-home: clamp(40px, 6vw, 84px);
  --fs-h1-sub: clamp(36px, 4.4vw, 64px);
  --fs-h2: clamp(30px, 3.6vw, 52px);
  --fs-h2-cta: clamp(32px, 4.2vw, 60px);
  --fs-lede: clamp(17px, 1.4vw, 20px);
  --fs-body: clamp(16px, 1.2vw, 18px);
  --fs-eyebrow: 14px;
  --fs-price: clamp(32px, 3vw, 48px);

  /* motion: the design contract caps reveals at 300ms, opacity plus 8px */
  --dur-1: 150ms;
  --dur-2: 300ms;
  --ease-out: cubic-bezier(0.2, 0.7, 0.2, 1);
  --reveal-shift: 8px;
}
