/* ============================================================================
   NOWLAB — Colors & Type
   Foundational + semantic design tokens.
   Brand anchors extracted from official logo files & brand PDF:
     • Red accent  #ED1C24   (consistent across every raster logo)
     • Charcoal    #313232   (dark surface from the brand PDF lockup)
     • True black  #0A0A0B   (logo background / ink)
     • White       #FFFFFF
   Type: Brand face is "Noway" (commercial). Substituted here with
   Hanken Grotesk (near-geometric grotesque) + JetBrains Mono for technical
   labels. Drop real Noway woff2 into /fonts and swap --font-sans to use it.
   ============================================================================ */

/* Brand face Noway (self-hosted, Regular only so far) + JetBrains Mono (mono) */
/* Hanken Grotesk kept as a weight fallback until heavier Noway cuts are supplied */
@import url('https://fonts.googleapis.com/css2?family=Hanken+Grotesk:ital,wght@0,300..800;1,400..600&family=JetBrains+Mono:wght@400;500;700&display=swap');

@font-face {
  font-family: 'Noway';
  src: url('fonts/noway-regular-webfont.woff2') format('woff2'),
       url('fonts/noway-regular-webfont.woff') format('woff'),
       url('fonts/noway-regular-webfont.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Noway';
  src: url('fonts/noway_regular_italic-webfont.woff2') format('woff2'),
       url('fonts/noway_regular_italic-webfont.woff') format('woff'),
       url('fonts/noway_regular_italic-webfont.ttf') format('truetype');
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}
/* Noway ships only a Regular upright (+ italic). Never synthesize bold/oblique —
   faux weights render blurry. Weight contrast waits for real Noway cuts. */
html { font-synthesis: none; }

:root {
  /* ---------------------------------------------------------------------- */
  /* BRAND CORE                                                             */
  /* ---------------------------------------------------------------------- */
  --nl-red:        #ED1C24;   /* primary brand accent */
  --nl-red-hover:  #C8141B;   /* hover / darker */
  --nl-red-press:  #A50F15;   /* active / press */
  --nl-red-tint:   #FDE7E8;   /* faint wash for backgrounds */
  --nl-black:      #0A0A0B;   /* ink / black surfaces */
  --nl-charcoal:   #313232;   /* brand dark surface (PDF) */
  --nl-white:      #FFFFFF;

  /* ---------------------------------------------------------------------- */
  /* NEUTRAL RAMP  (cool-neutral, tuned to the #313232 charcoal)            */
  /* ---------------------------------------------------------------------- */
  --nl-900: #0A0A0B;
  --nl-850: #161718;
  --nl-800: #1F2021;
  --nl-700: #313232;   /* = charcoal */
  --nl-600: #4C4E4F;
  --nl-500: #6E7173;
  --nl-400: #919496;
  --nl-300: #B9BBBD;
  --nl-200: #DCDDDE;
  --nl-150: #E9EAEB;
  --nl-100: #F2F3F3;
  --nl-50:  #F9F9F9;
  --nl-0:   #FFFFFF;

  /* ---------------------------------------------------------------------- */
  /* SEMANTIC — LIGHT (default surface)                                     */
  /* ---------------------------------------------------------------------- */
  --bg:            var(--nl-0);     /* page background (paper white) */
  --bg-subtle:     var(--nl-50);    /* alternating section */
  --bg-muted:      var(--nl-100);   /* cards / wells */
  --surface:       var(--nl-0);     /* card surface */
  --border:        var(--nl-200);   /* hairlines / dividers */
  --border-strong: var(--nl-900);   /* full-contrast rules (brand motif) */

  --fg:            var(--nl-900);   /* primary text */
  --fg-secondary:  var(--nl-600);   /* secondary text */
  --fg-muted:      var(--nl-500);   /* captions / meta */
  --fg-faint:      var(--nl-400);   /* disabled / hint */
  --fg-on-accent:  var(--nl-0);     /* text on red / black */

  --accent:        var(--nl-red);
  --accent-hover:  var(--nl-red-hover);
  --accent-press:  var(--nl-red-press);

  --focus-ring:    var(--nl-red);

  /* ---------------------------------------------------------------------- */
  /* TYPE — families                                                        */
  /* ---------------------------------------------------------------------- */
  /* Single brand face: Noway (Regular + Italic). Hanken Grotesk is a load fallback
     only. Noway has no bold cut yet, so hierarchy comes from SIZE / CASE / COLOR,
     not weight — and font-synthesis is off so nothing faux-bolds. */
  --font-sans: 'Noway', 'Hanken Grotesk', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-sans-heavy: 'Noway', 'Hanken Grotesk', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-mono: 'JetBrains Mono', ui-monospace, 'SFMono-Regular', Menlo, monospace;

  /* weights */
  --w-light: 300;
  --w-regular: 400;
  --w-medium: 500;
  --w-semibold: 600;
  --w-bold: 700;
  --w-extrabold: 800;

  /* ---------------------------------------------------------------------- */
  /* TYPE — fluid scale (1.250 major-third-ish, clamped)                    */
  /* ---------------------------------------------------------------------- */
  --text-xs:   0.75rem;    /* 12 — mono labels, fine print */
  --text-sm:   0.875rem;   /* 14 — captions, meta */
  --text-base: 1rem;       /* 16 — body */
  --text-md:   1.125rem;   /* 18 — lead body */
  --text-lg:   1.375rem;   /* 22 — large body / small headings */
  --text-xl:   1.75rem;    /* 28 — h4 */
  --text-2xl:  2.25rem;    /* 36 — h3 */
  --text-3xl:  clamp(2.5rem, 1.8rem + 3vw, 3.5rem);   /* h2 */
  --text-4xl:  clamp(3rem, 2rem + 5vw, 5rem);         /* h1 */
  --text-5xl:  clamp(3.5rem, 2rem + 8vw, 7.5rem);     /* display / hero */

  /* line-heights */
  --lh-tight: 0.98;
  --lh-snug: 1.08;
  --lh-heading: 1.15;
  --lh-body: 1.6;

  /* tracking */
  --track-tight: -0.02em;
  --track-snug: -0.01em;
  --track-normal: 0;
  --track-label: 0.14em;   /* uppercase mono eyebrows */
  --track-wide: 0.04em;

  /* ---------------------------------------------------------------------- */
  /* SPACING  (4px base)                                                    */
  /* ---------------------------------------------------------------------- */
  --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;
  --space-11: 192px;

  /* ---------------------------------------------------------------------- */
  /* RADII  (the brand is sharp — radii are minimal & deliberate)           */
  /* ---------------------------------------------------------------------- */
  --radius-none: 0px;       /* default — square corners, engineering feel */
  --radius-xs: 2px;
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-pill: 999px;     /* tags / status chips only */

  /* ---------------------------------------------------------------------- */
  /* SHADOWS  (used sparingly — brand favors flat + hairlines)              */
  /* ---------------------------------------------------------------------- */
  --shadow-sm: 0 1px 2px rgba(10,10,11,0.06);
  --shadow-md: 0 6px 20px rgba(10,10,11,0.08);
  --shadow-lg: 0 20px 50px rgba(10,10,11,0.14);

  /* layout */
  --maxw: 1280px;
  --gutter: clamp(20px, 5vw, 80px);

  /* motion */
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
  --dur-fast: 140ms;
  --dur: 240ms;
  --dur-slow: 480ms;
}

/* ============================================================================
   DARK SURFACE  — apply .nl-dark on a section/root to invert
   (the brand's "cinematic / installation" register)
   ============================================================================ */
.nl-dark {
  --bg:            var(--nl-900);
  --bg-subtle:     var(--nl-850);
  --bg-muted:      var(--nl-800);
  --surface:       var(--nl-850);
  --border:        rgba(255,255,255,0.14);
  --border-strong: var(--nl-0);

  --fg:            var(--nl-0);
  --fg-secondary:  var(--nl-300);
  --fg-muted:      var(--nl-400);
  --fg-faint:      var(--nl-500);

  background: var(--bg);
  color: var(--fg);
}

/* ============================================================================
   SEMANTIC TYPE CLASSES
   ============================================================================ */
.nl-display {
  font-family: var(--font-sans);
  font-weight: var(--w-extrabold);
  font-size: var(--text-5xl);
  line-height: var(--lh-tight);
  letter-spacing: var(--track-tight);
  text-transform: uppercase;
}
.nl-h1 {
  font-family: var(--font-sans);
  font-weight: var(--w-extrabold);
  font-size: var(--text-4xl);
  line-height: var(--lh-snug);
  letter-spacing: var(--track-tight);
}
.nl-h2 {
  font-family: var(--font-sans);
  font-weight: var(--w-bold);
  font-size: var(--text-3xl);
  line-height: var(--lh-heading);
  letter-spacing: var(--track-snug);
}
.nl-h3 {
  font-family: var(--font-sans);
  font-weight: var(--w-bold);
  font-size: var(--text-2xl);
  line-height: var(--lh-heading);
  letter-spacing: var(--track-snug);
}
.nl-h4 {
  font-family: var(--font-sans);
  font-weight: var(--w-semibold);
  font-size: var(--text-xl);
  line-height: var(--lh-heading);
  letter-spacing: var(--track-snug);
}
.nl-lead {
  font-family: var(--font-sans);
  font-weight: var(--w-regular);
  font-size: var(--text-md);
  line-height: var(--lh-body);
  color: var(--fg-secondary);
}
.nl-body {
  font-family: var(--font-sans);
  font-weight: var(--w-regular);
  font-size: var(--text-base);
  line-height: var(--lh-body);
}
.nl-small {
  font-family: var(--font-sans);
  font-weight: var(--w-regular);
  font-size: var(--text-sm);
  line-height: 1.5;
  color: var(--fg-muted);
}
/* Eyebrow / kicker / technical label — the brand's signature accent */
.nl-label {
  font-family: var(--font-mono);
  font-weight: var(--w-medium);
  font-size: var(--text-xs);
  line-height: 1;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--fg-muted);
}
.nl-label--accent { color: var(--accent); }
.nl-mono {
  font-family: var(--font-mono);
  font-weight: var(--w-regular);
  font-size: var(--text-sm);
  letter-spacing: 0;
}
