/* =============================================================
   PLURAL FUTURES — FOUNDATIONS v2  ·  "A Plurality of Futures"
   -------------------------------------------------------------
   The v1 system held one rule above all: ONE INK AT A TIME,
   NEVER BLEND. This redesign inverts it. Plurality is the brand.
   Five futures-inks coexist and blend into spectra. Warm light
   paper, editorial bones, but vivid and many-voiced.
   ============================================================= */

@import url('https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,300;12..96,400;12..96,500;12..96,600;12..96,700;12..96,800&family=Newsreader:ital,opsz,wght@0,6..72,300;0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400;1,6..72,500&family=Space+Grotesk:wght@400;500;600;700&family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500;600&display=swap');

:root {
  /* -----------------------------------------------------------
     THE FIVE FUTURES-INKS
     Each ink names a different lens on the future. They are
     equals — no single primary. Each has: base (display),
     deep (text/lines on paper), soft (illustration), wash (fill).
     ----------------------------------------------------------- */
  --ember:        #EB6541;  --ember-deep:  #C44A2A;  --ember-soft:  #F6C9B8;  --ember-wash:  #FBE7DE;
  --bloom:        #EB426D;  --bloom-deep:  #C72753;  --bloom-soft:  #F6BACB;  --bloom-wash:  #FBE2E9;
  --sky:          #42C0EB;  --sky-deep:    #1C93BD;  --sky-soft:    #BAE6F5;  --sky-wash:    #E2F4FB;
  --sprout:       #42EBB9;  --sprout-deep: #16B98A;  --sprout-soft: #BCF1DE;  --sprout-wash: #E2FAF1;
  --loam:         #96685C;  --loam-deep:   #6E4A40;  --loam-soft:   #D9C4BD;  --loam-wash:   #EFE6E2;

  /* -----------------------------------------------------------
     PAPER & INK — warm, light, cleaner than the old sand
     ----------------------------------------------------------- */
  --paper:        #FBF7F1;  /* default page */
  --paper-2:      #F4ECE0;  /* alt section / sand */
  --paper-3:      #F0EEF4;  /* cool alt (a breath of plurality) */
  --surface:      #FFFFFF;  /* lifted card */
  --ink:          #241A17;  /* warm near-black, primary text */
  --ink-2:        #5C4D47;  /* secondary text */
  --ink-3:        #8C7B73;  /* tertiary / captions */
  --line:         #E7DCD0;  /* hairline on paper */
  --line-2:       #D7C9BC;  /* stronger hairline */
  --line-ink:     #241A17;  /* full ink rule */

  /* -----------------------------------------------------------
     SPECTRA — the plural blends. The conceptual centerpiece.
     These are *allowed now* and define the brand's energy.
     ----------------------------------------------------------- */
  --spectrum:        linear-gradient(100deg, #42EBB9 0%, #42C0EB 32%, #EB426D 72%, #EB6541 100%);
  --spectrum-soft:   linear-gradient(100deg, #BCF1DE 0%, #BAE6F5 35%, #F6BACB 72%, #F6C9B8 100%);
  --spectrum-warm:   linear-gradient(120deg, #EB6541 0%, #EB426D 60%, #96685C 100%);
  --spectrum-cool:   linear-gradient(120deg, #42EBB9 0%, #42C0EB 100%);
  --spectrum-dawn:   linear-gradient(135deg, #42C0EB 0%, #EB426D 55%, #EB6541 100%);
  --spectrum-cone:   conic-gradient(from 210deg at 50% 50%, #EB6541, #EB426D, #96685C, #42C0EB, #42EBB9, #EB6541);

  /* -----------------------------------------------------------
     ACCENT — driven by Tweaks. Defaults to ember.
     --accent-grad is used where a single element wants the
     full plural blend (set by the "Spectrum" tweak).
     ----------------------------------------------------------- */
  --accent:        var(--ember);
  --accent-deep:   var(--ember-deep);
  --accent-soft:   var(--ember-soft);
  --accent-wash:   var(--ember-wash);
  --accent-grad:   var(--ember);
  --accent-on:     #FFFFFF;   /* text on accent fill */

  /* -----------------------------------------------------------
     SEMANTIC ROLES
     ----------------------------------------------------------- */
  --fg-1: var(--ink);
  --fg-2: var(--ink-2);
  --fg-3: var(--ink-3);
  --bg-1: var(--paper);
  --bg-2: var(--paper-2);
  --bg-card: var(--surface);

  /* -----------------------------------------------------------
     TYPE — three voices.
     Display  = Bricolage Grotesque (the plural, confident voice)
     Read     = Newsreader (editorial body, kept from v1)
     Signal   = JetBrains Mono (labels, data, "raw signal")
     Font pairing is swappable via Tweaks (--font-display/--font-body).
     ----------------------------------------------------------- */
  --font-display: "Bricolage Grotesque", "Space Grotesk", system-ui, sans-serif;
  --font-body:    "Newsreader", Charter, Cambria, Georgia, serif;
  --font-mono:    "JetBrains Mono", ui-monospace, Menlo, monospace;

  --fs-display-xl: clamp(64px, 9vw, 168px);
  --fs-display-l:  clamp(48px, 6.2vw, 104px);
  --fs-display-m:  clamp(34px, 4vw, 64px);
  --fs-display-s:  clamp(26px, 2.6vw, 40px);
  --fs-h1: clamp(30px, 3.4vw, 46px);
  --fs-h2: clamp(24px, 2.4vw, 32px);
  --fs-h3: 22px;
  --fs-lead: clamp(19px, 1.7vw, 24px);
  --fs-body: 17px;
  --fs-small: 15px;
  --fs-label: 12px;

  --lh-display: 0.94;
  --lh-tight: 1.08;
  --lh-body: 1.6;
  --lh-prose: 1.72;
  --ls-label: 0.16em;

  /* -----------------------------------------------------------
     SHAPE — softer than v1's hard squares, still restrained.
     Driven by --radius (Tweaks: sharp .. soft).
     ----------------------------------------------------------- */
  --radius: 14px;
  --r-sm: calc(var(--radius) * 0.5);
  --r-pill: 999px;

  /* -----------------------------------------------------------
     STROKE / SPACE / MOTION
     ----------------------------------------------------------- */
  --stroke: 1.5px;
  --stroke-bold: 2.5px;

  --sp-1: 4px;  --sp-2: 8px;  --sp-3: 12px; --sp-4: 16px; --sp-5: 24px;
  --sp-6: 32px; --sp-7: 48px; --sp-8: 64px; --sp-9: 96px; --sp-10: 128px;

  --motif-opacity: 0.16;  /* Tweaks: motif/pattern intensity */

  --shadow-1: 0 1px 2px rgba(36,26,23,0.05);
  --shadow-2: 0 14px 40px -18px rgba(36,26,23,0.28);
  --shadow-3: 0 30px 80px -30px rgba(36,26,23,0.40);

  --ease: cubic-bezier(0.16, 0.84, 0.30, 1.00);
  --ease-io: cubic-bezier(0.65, 0.05, 0.20, 0.95);
  --dur-1: 140ms; --dur-2: 240ms; --dur-3: 460ms; --dur-4: 720ms;

  --container: 1280px;
  --gutter: clamp(20px, 5vw, 72px);
}

/* =============================================================
   BASE
   ============================================================= */
* { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--font-body);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
::selection { background: var(--accent); color: var(--accent-on); }

/* ---- type primitives ---- */
.display {
  font-family: var(--font-display);
  font-weight: 700;
  line-height: var(--lh-display);
  letter-spacing: -0.02em;
  margin: 0;
  font-size: var(--fs-display-l);
  font-optical-sizing: auto;
}
.display.xl { font-size: var(--fs-display-xl); letter-spacing: -0.025em; }
.display.m  { font-size: var(--fs-display-m); letter-spacing: -0.015em; }
.display.s  { font-size: var(--fs-display-s); letter-spacing: -0.01em; }

h1, .h1 { font-family: var(--font-display); font-weight: 600; font-size: var(--fs-h1); line-height: var(--lh-tight); letter-spacing: -0.018em; margin: 0; }
h2, .h2 { font-family: var(--font-display); font-weight: 600; font-size: var(--fs-h2); line-height: 1.12; letter-spacing: -0.012em; margin: 0; }
h3, .h3 { font-family: var(--font-display); font-weight: 600; font-size: var(--fs-h3); line-height: 1.2; margin: 0; }

p, .body { font-family: var(--font-body); font-size: var(--fs-body); line-height: var(--lh-prose); margin: 0 0 var(--sp-4); text-wrap: pretty; color: var(--ink); }
.lead { font-family: var(--font-body); font-size: var(--fs-lead); line-height: 1.5; color: var(--ink); text-wrap: pretty; }
.small { font-size: var(--fs-small); color: var(--ink-2); }
em, i { font-style: italic; }

/* The workhorse label — monospace "signal" */
.label {
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: var(--ls-label);
  color: var(--ink-3);
}
/* Eyebrow — accent-colored, with a leading tick */
.eyebrow {
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: var(--ls-label);
  color: var(--accent-deep);
  display: inline-flex;
  align-items: center;
  gap: var(--sp-3);
}
.eyebrow::before { content: ""; width: 22px; height: 2px; background: currentColor; flex: none; }

.mono { font-family: var(--font-mono); font-size: 0.92em; }
code, .code {
  font-family: var(--font-mono);
  font-size: 0.88em;
  background: var(--paper-2);
  border: 1px solid var(--line);
  padding: 2px 7px;
  border-radius: var(--r-sm);
  color: var(--loam-deep);
}

a { color: var(--accent-deep); text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 3px; text-decoration-color: var(--accent-soft); transition: color var(--dur-1) var(--ease), text-decoration-color var(--dur-1) var(--ease); }
a:hover { color: var(--accent); text-decoration-color: var(--accent); }

hr { border: 0; border-top: var(--stroke) solid var(--line-ink); margin: var(--sp-7) 0; }

/* Gradient text helper — for the plural display moments */
.grad-text {
  background: var(--spectrum);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
}
