/* ============================================================
   GEEZ DESIGN SYSTEM — colors_and_type.css
   The brand runs on two primary colors, a heavy sans wordmark,
   and a single yellow exclamation. That's the whole game.
   ============================================================ */

/* -- Type: Inter is the recommended fallback per brand guide.
      Söhne (Klim) is the preferred primary; Inter ships free.
      Substitution is FLAGGED in README.md — replace @import below
      with @font-face declarations pointing at /fonts/soehne-*.woff2
      once licensed files are dropped in. */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap');

:root {
  /* ---------- COLOR — Brand primaries ---------- */
  --geez-black:  #1A1A1A;   /* softened black, not pure #000 — approachable */
  --geez-yellow: #FFD600;   /* high-vis Pantone 123 C — energy + recognition */
  --geez-white:  #FFFFFF;

  /* ---------- COLOR — Neutral scale (warm-leaning grays off the softened black) ---------- */
  --geez-ink-900: #1A1A1A;  /* = geez-black */
  --geez-ink-800: #2A2A2A;
  --geez-ink-700: #3D3D3D;
  --geez-ink-600: #595959;
  --geez-ink-500: #7A7A7A;
  --geez-ink-400: #A3A3A3;
  --geez-ink-300: #C9C9C9;
  --geez-ink-200: #E5E5E5;
  --geez-ink-100: #F2F2F2;
  --geez-ink-50:  #F8F7F4;  /* warm off-white — paper, not screen */

  /* ---------- COLOR — Yellow tints (used sparingly, mostly for highlight states) ---------- */
  --geez-yellow-700: #C9A800;  /* press / active */
  --geez-yellow-500: #FFD600;  /* = geez-yellow */
  --geez-yellow-300: #FFE866;
  --geez-yellow-100: #FFF6BF;
  --geez-yellow-50:  #FFFCE6;  /* highlight wash */

  /* ---------- COLOR — Semantic (kept narrow; the brand resists "feature creep" palettes) ---------- */
  --geez-success: #2F7D4F;   /* parking confirmed, payment ok */
  --geez-danger:  #C8341F;   /* errors, cancellations */
  --geez-info:    #2A5BA8;   /* in-transit, neutral status */

  /* ---------- COLOR — Roles (semantic aliases — prefer these in components) ---------- */
  --bg:          var(--geez-white);
  --bg-elevated: var(--geez-ink-50);
  --bg-inverse:  var(--geez-black);
  --bg-accent:   var(--geez-yellow);

  --fg:          var(--geez-black);
  --fg-muted:    var(--geez-ink-600);
  --fg-subtle:   var(--geez-ink-400);
  --fg-inverse:  var(--geez-white);
  --fg-on-accent:var(--geez-black);   /* always black on yellow — never white */

  --border:        var(--geez-ink-200);
  --border-strong: var(--geez-ink-900);
  --border-accent: var(--geez-yellow);

  /* ---------- TYPE — Families ---------- */
  --font-sans: 'Inter', 'Söhne', 'Geist', 'Aeonik', 'General Sans',
               -apple-system, BlinkMacSystemFont, sans-serif;
  --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
  /* Display = same family, just heavier weight + tighter tracking */
  --font-display: var(--font-sans);

  /* ---------- TYPE — Weights ---------- */
  --weight-regular: 400;
  --weight-medium:  500;
  --weight-semibold:600;
  --weight-bold:    700;
  --weight-xbold:   800;   /* wordmark weight */
  --weight-black:   900;

  /* ---------- TYPE — Sizes (mobile-first, generous for an app) ---------- */
  --text-xs:   12px;
  --text-sm:   14px;
  --text-base: 16px;
  --text-md:   18px;
  --text-lg:   20px;
  --text-xl:   24px;
  --text-2xl:  32px;
  --text-3xl:  40px;
  --text-4xl:  52px;
  --text-5xl:  68px;
  --text-6xl:  88px;   /* hero "Park before you say it." */

  /* ---------- TYPE — Tracking (tight, à la the wordmark) ---------- */
  --tracking-tightest: -0.03em;  /* display */
  --tracking-tighter:  -0.02em;  /* headings */
  --tracking-tight:    -0.01em;
  --tracking-normal:    0em;
  --tracking-wide:      0.04em;  /* eyebrow / overline UPPERCASE */

  /* ---------- TYPE — Line heights ---------- */
  --leading-tight:  1.05;
  --leading-snug:   1.2;
  --leading-normal: 1.45;
  --leading-loose:  1.6;

  /* ---------- SPACING (4px base) ---------- */
  --space-0:  0;
  --space-1:  4px;
  --space-2:  8px;
  --space-3:  12px;
  --space-4:  16px;
  --space-5:  20px;
  --space-6:  24px;
  --space-8:  32px;
  --space-10: 40px;
  --space-12: 48px;
  --space-16: 64px;
  --space-20: 80px;
  --space-24: 96px;

  /* ---------- RADII — softer than you'd expect for a heavy brand;
                   the wordmark is rounded so UI follows ---------- */
  --radius-xs:   4px;
  --radius-sm:   8px;
  --radius-md:   12px;
  --radius-lg:   16px;
  --radius-xl:   20px;
  --radius-2xl:  28px;
  --radius-pill: 999px;
  --radius-circle: 50%;

  /* ---------- SHADOWS — sparing, warm cast, never glow ---------- */
  --shadow-none: none;
  --shadow-sm:   0 1px 2px rgba(26,26,26,0.06), 0 1px 1px rgba(26,26,26,0.04);
  --shadow-md:   0 4px 12px rgba(26,26,26,0.08), 0 2px 4px rgba(26,26,26,0.04);
  --shadow-lg:   0 12px 32px rgba(26,26,26,0.12), 0 4px 8px rgba(26,26,26,0.06);
  --shadow-xl:   0 24px 64px rgba(26,26,26,0.18), 0 8px 16px rgba(26,26,26,0.08);
  /* Inset/press */
  --shadow-press: inset 0 2px 0 rgba(0,0,0,0.12);

  /* ---------- MOTION — short, snappy, no bounce ---------- */
  --ease-out:    cubic-bezier(0.2, 0.7, 0.2, 1);     /* default for entering UI */
  --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
  --ease-snap:   cubic-bezier(0.4, 0, 0.1, 1);       /* button press */
  --duration-fast:    120ms;
  --duration-base:    200ms;
  --duration-slow:    320ms;

  /* ---------- LAYOUT ---------- */
  --container-sm:  480px;
  --container-md:  720px;
  --container-lg:  1080px;
  --container-xl:  1280px;
  --container-app: 390px;  /* mobile-first viewport */
}

/* ============================================================
   SEMANTIC TYPE CLASSES — apply directly to elements
   Keep the system tight; don't add a new role unless it earns its keep.
   ============================================================ */

.geez-display {
  font-family: var(--font-display);
  font-weight: var(--weight-xbold);   /* matches the wordmark */
  font-size:   var(--text-6xl);
  line-height: var(--leading-tight);
  letter-spacing: var(--tracking-tightest);
  color: var(--fg);
}

.geez-h1 {
  font-family: var(--font-sans);
  font-weight: var(--weight-xbold);
  font-size:   var(--text-4xl);
  line-height: var(--leading-tight);
  letter-spacing: var(--tracking-tighter);
}

.geez-h2 {
  font-family: var(--font-sans);
  font-weight: var(--weight-bold);
  font-size:   var(--text-2xl);
  line-height: var(--leading-snug);
  letter-spacing: var(--tracking-tighter);
}

.geez-h3 {
  font-family: var(--font-sans);
  font-weight: var(--weight-semibold);
  font-size:   var(--text-xl);
  line-height: var(--leading-snug);
  letter-spacing: var(--tracking-tight);
}

.geez-subhead {
  font-family: var(--font-sans);
  font-weight: var(--weight-bold);
  font-size:   var(--text-md);
  line-height: var(--leading-snug);
  letter-spacing: var(--tracking-tight);
}

.geez-body {
  font-family: var(--font-sans);
  font-weight: var(--weight-regular);
  font-size:   var(--text-base);
  line-height: var(--leading-normal);
  color: var(--fg);
}

.geez-body-md {
  font-family: var(--font-sans);
  font-weight: var(--weight-medium);
  font-size:   var(--text-base);
  line-height: var(--leading-normal);
}

.geez-small {
  font-family: var(--font-sans);
  font-size:   var(--text-sm);
  line-height: var(--leading-normal);
  color: var(--fg-muted);
}

.geez-caption {
  font-family: var(--font-sans);
  font-size:   var(--text-xs);
  line-height: var(--leading-normal);
  color: var(--fg-muted);
}

.geez-eyebrow {
  font-family: var(--font-sans);
  font-weight: var(--weight-bold);
  font-size:   var(--text-xs);
  line-height: var(--leading-snug);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  color: var(--fg-muted);
}

.geez-code {
  font-family: var(--font-mono);
  font-size:   var(--text-sm);
  background: var(--geez-ink-100);
  padding: 2px 6px;
  border-radius: var(--radius-xs);
}

/* Wordmark utility — for inline use of brand name */
.geez-wordmark {
  font-family: var(--font-sans);
  font-weight: var(--weight-xbold);
  letter-spacing: -0.025em;          /* matches brand spec of -2% to -3% */
  font-variant-ligatures: none;
}

/* ============================================================
   GLOBAL RESET-LITE — used by previews & UI kit
   ============================================================ */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
  font-family: var(--font-sans);
  color: var(--fg);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
