/* =============================================================
   Signal Reports — shared tokens + primitives
   Extends colors_and_type.css. Adds report-specific scales,
   reading-mode system, progress rail, semantic arrows,
   data-viz conventions, and typographic primitives.
   ============================================================= */

@import url('../colors_and_type.css');

:root {
  /* ---------- Report type scale (magazine) ---------- */
  --r-display-xl: clamp(56px, 8vw, 112px);   /* cover */
  --r-display-lg: clamp(44px, 5.5vw, 72px);  /* section opener */
  --r-display-md: clamp(32px, 3.6vw, 48px);  /* h2 */
  --r-heading-lg: clamp(24px, 2.4vw, 32px);  /* h3 */
  --r-heading-md: 20px;                      /* h4 */
  --r-lede:       clamp(18px, 1.4vw, 22px);  /* lede / deck */
  --r-body-lg:    17px;                      /* longread body */
  --r-body:       15px;                      /* dense body */
  --r-caption:    13px;
  --r-eyebrow:    11px;
  --r-micro:      10px;

  --r-lh-tight:   1.05;
  --r-lh-display: 1.1;
  --r-lh-heading: 1.2;
  --r-lh-body:    1.65;
  --r-lh-dense:   1.5;

  --r-tr-tight:   -0.03em;   /* display */
  --r-tr-heading: -0.02em;
  --r-tr-body:    -0.005em;
  --r-tr-eyebrow: 0.16em;
  --r-tr-caps:    0.08em;

  /* ---------- Reading-mode surfaces (light / dim / dark) ---------- */
  --rm-bg:        #ffffff;
  --rm-surface:   #fafafa;
  --rm-surface-2: #f4f4f3;
  --rm-ink-1:     #14110f;
  --rm-ink-2:     #403b36;
  --rm-ink-3:     #6b655e;
  --rm-ink-4:     #9a948c;
  --rm-line:      #e8e4df;
  --rm-hairline:  #f0ece7;
  --rm-accent:    #14b8a6;
  --rm-accent-ink:#0d8a7c;
  --rm-accent-bg: #e9faf7;

  /* ---------- Elevation ---------- */
  --r-elev-0: none;
  --r-elev-1: 0 1px 2px rgba(20,17,15,0.04), 0 0 0 1px var(--rm-line);
  --r-elev-2: 0 8px 24px rgba(20,17,15,0.06), 0 0 0 1px var(--rm-line);
  --r-elev-3: 0 20px 48px rgba(20,17,15,0.10);

  /* ---------- Motion ---------- */
  --r-ease: cubic-bezier(0.2, 0, 0, 1);
  --r-ease-spring: cubic-bezier(0.34, 1.4, 0.64, 1);
  --r-dur-instant: 80ms;
  --r-dur-fast: 140ms;
  --r-dur-med: 220ms;
  --r-dur-slow: 340ms;

  /* ---------- Container ---------- */
  --r-col-narrow:  640px;
  --r-col-text:    720px;
  --r-col-wide:    1040px;
  --r-col-full:    1280px;

  /* ---------- Data viz ---------- */
  --viz-stroke-hair: 1px;
  --viz-stroke:      1.5px;
  --viz-stroke-emph: 2px;
  --viz-grid:        #ebe7e2;
  --viz-axis:        #9a948c;
  --viz-label:       #6b655e;
}

/* ---------- Reading modes ---------- */
[data-read="dim"] {
  --rm-bg:        #1f1b17;
  --rm-surface:   #272320;
  --rm-surface-2: #2f2a26;
  --rm-ink-1:     #efe8dd;
  --rm-ink-2:     #cfc6b8;
  --rm-ink-3:     #a69c8d;
  --rm-ink-4:     #7a7062;
  --rm-line:      #3a342e;
  --rm-hairline:  #2f2a26;
  --rm-accent:    #2dd4bf;
  --rm-accent-ink:#5eead4;
  --rm-accent-bg: #1a2c2a;
  --viz-grid:     #33302b;
  --viz-axis:     #7a7062;
  --viz-label:    #a69c8d;
}

[data-read="dark"] {
  --rm-bg:        #0a0a0a;
  --rm-surface:   #141414;
  --rm-surface-2: #1a1a1a;
  --rm-ink-1:     #ffffff;
  --rm-ink-2:     #d4d4d4;
  --rm-ink-3:     #a3a3a3;
  --rm-ink-4:     #737373;
  --rm-line:      #262626;
  --rm-hairline:  #1c1c1c;
  --rm-accent:    #2dd4bf;
  --rm-accent-ink:#5eead4;
  --rm-accent-bg: #0d1f1d;
  --viz-grid:     #1f1f1f;
  --viz-axis:     #737373;
  --viz-label:    #a3a3a3;
}

/* ---------- Base ---------- */
html, body {
  background: var(--rm-bg);
  color: var(--rm-ink-1);
  font-family: var(--font-sans);
  font-feature-settings: "ss01", "cv11";
  line-height: var(--r-lh-body);
  transition: background var(--r-dur-slow) var(--r-ease), color var(--r-dur-slow) var(--r-ease);
}

::selection { background: var(--rm-accent); color: #000; }

/* Numbers use tabular + proper figures; prose reverts to proportional */
.tabular, .num, [data-num], table td, table th, .viz-label, .viz-value {
  font-variant-numeric: tabular-nums lining-nums;
  font-feature-settings: "tnum", "lnum";
}

/* ---------- Focus ring — branded, visible, keyboard-only ---------- */
:focus { outline: none; }
:focus-visible {
  outline: 2px solid var(--rm-accent);
  outline-offset: 3px;
  border-radius: 3px;
  transition: outline-offset var(--r-dur-fast) var(--r-ease);
}

/* ---------- Typography primitives ---------- */
.r-eyebrow {
  font-size: var(--r-eyebrow);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: var(--r-tr-eyebrow);
  color: var(--rm-ink-3);
  font-feature-settings: "tnum";
}
.r-eyebrow .sep { color: var(--rm-ink-4); margin: 0 .5ch; font-weight: 400; }
.r-eyebrow .here { color: var(--rm-accent-ink); }

.r-display {
  font-size: var(--r-display-xl);
  line-height: var(--r-lh-tight);
  letter-spacing: var(--r-tr-tight);
  font-weight: 500;
  margin: 0;
}
.r-display-lg {
  font-size: var(--r-display-lg);
  line-height: var(--r-lh-display);
  letter-spacing: var(--r-tr-tight);
  font-weight: 500;
  margin: 0;
}
.r-h2 {
  font-size: var(--r-display-md);
  line-height: var(--r-lh-heading);
  letter-spacing: var(--r-tr-heading);
  font-weight: 600;
  margin: 0;
}
.r-h3 {
  font-size: var(--r-heading-lg);
  line-height: var(--r-lh-heading);
  letter-spacing: var(--r-tr-heading);
  font-weight: 600;
  margin: 0;
}
.r-h4 {
  font-size: var(--r-heading-md);
  line-height: 1.3;
  letter-spacing: -0.01em;
  font-weight: 600;
  margin: 0;
}
.r-lede {
  font-size: var(--r-lede);
  line-height: 1.5;
  letter-spacing: var(--r-tr-body);
  color: var(--rm-ink-2);
  font-weight: 400;
}
.r-body {
  font-size: var(--r-body-lg);
  line-height: var(--r-lh-body);
  color: var(--rm-ink-2);
}
.r-body p { margin: 0 0 1.1em; }
.r-body p:last-child { margin-bottom: 0; }
.r-caption {
  font-size: var(--r-caption);
  line-height: 1.5;
  color: var(--rm-ink-3);
}

/* ---------- Semantic ASCII arrows ---------- */
/* → navigate / continue   ↗ external   ↘ drill-down   ↖ return */
.ar { font-family: var(--font-sans); font-weight: 400; display: inline-block; transition: transform var(--r-dur-fast) var(--r-ease); }
a:hover .ar-nav { transform: translateX(2px); }
a:hover .ar-ext { transform: translate(1px,-1px); }
a:hover .ar-drill { transform: translate(1px,1px); }
a:hover .ar-back { transform: translate(-2px,-1px); }

/* ---------- Product signature — Signal left rail ---------- */
.sig-rail {
  position: relative;
  padding-left: 24px;
}
.sig-rail::before {
  content: "";
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 3px;
  background: var(--rm-accent);
  border-radius: 2px;
}

/* ---------- Scroll progress + section pill ---------- */
.progress-rail {
  position: fixed;
  inset: 0 0 auto 0;
  height: 2px;
  background: transparent;
  z-index: 60;
  pointer-events: none;
}
.progress-rail::after {
  content: "";
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: var(--progress, 0%);
  background: var(--rm-accent);
  transition: width var(--r-dur-fast) var(--r-ease);
}
.section-pill {
  position: fixed;
  top: 14px;
  right: 20px;
  z-index: 61;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 10px 6px 8px;
  background: var(--rm-bg);
  border: 1px solid var(--rm-line);
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: var(--r-tr-eyebrow);
  text-transform: uppercase;
  color: var(--rm-ink-3);
  box-shadow: var(--r-elev-1);
  cursor: pointer;
  transition: border-color var(--r-dur-med) var(--r-ease);
}
.section-pill:hover { border-color: var(--rm-ink-3); }
.section-pill .num { color: var(--rm-ink-1); font-variant-numeric: tabular-nums; }
.section-pill .dot { width: 4px; height: 4px; border-radius: 50%; background: var(--rm-accent); }

/* ---------- Reading-mode toggle ---------- */
.mode-toggle {
  position: fixed;
  top: 14px;
  right: 20px;
  z-index: 62;
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 3px;
  background: var(--rm-bg);
  border: 1px solid var(--rm-line);
  border-radius: 999px;
  box-shadow: var(--r-elev-1);
}
.mode-toggle button {
  appearance: none;
  background: transparent;
  border: 0;
  color: var(--rm-ink-3);
  width: 26px; height: 26px;
  border-radius: 999px;
  font-family: var(--font-sans);
  font-size: 13px;
  cursor: pointer;
  display: grid; place-items: center;
  transition: background var(--r-dur-fast) var(--r-ease), color var(--r-dur-fast) var(--r-ease);
}
.mode-toggle button:hover { color: var(--rm-ink-1); }
.mode-toggle button[aria-pressed="true"] {
  background: var(--rm-ink-1);
  color: var(--rm-bg);
}

/* ---------- Loading — typographic, replaces spinners ---------- */
.r-loading::after {
  content: "▊";
  display: inline-block;
  margin-left: 0.2em;
  animation: r-blink 900ms steps(1) infinite;
  color: var(--rm-accent);
}
@keyframes r-blink { 0%, 50% { opacity: 1; } 50.01%, 100% { opacity: 0.15; } }

/* ---------- Command palette (⌘K) ---------- */
.cmdk-backdrop {
  position: fixed; inset: 0;
  background: rgba(20,17,15,0.45);
  backdrop-filter: blur(4px);
  z-index: 100;
  display: none;
  animation: r-fade var(--r-dur-med) var(--r-ease);
}
[data-read="dim"] .cmdk-backdrop { background: rgba(0,0,0,0.55); }
[data-read="dark"] .cmdk-backdrop { background: rgba(0,0,0,0.70); }
.cmdk-backdrop.open { display: grid; place-items: start center; padding-top: 14vh; }
.cmdk {
  width: min(640px, calc(100vw - 32px));
  background: var(--rm-bg);
  border: 1px solid var(--rm-line);
  border-radius: 14px;
  box-shadow: var(--r-elev-3);
  overflow: hidden;
  animation: r-rise var(--r-dur-slow) var(--r-ease);
}
.cmdk input {
  width: 100%;
  padding: 18px 20px;
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--rm-hairline);
  font-family: var(--font-sans);
  font-size: 16px;
  color: var(--rm-ink-1);
  outline: none;
}
.cmdk input::placeholder { color: var(--rm-ink-4); }
.cmdk ul { list-style: none; margin: 0; padding: 6px; max-height: 400px; overflow: auto; }
.cmdk li { padding: 10px 14px; border-radius: 8px; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: space-between; gap: 16px; color: var(--rm-ink-2); }
.cmdk li:hover, .cmdk li[aria-selected="true"] { background: var(--rm-surface); color: var(--rm-ink-1); }
.cmdk li .eye { font-size: 10px; letter-spacing: var(--r-tr-eyebrow); text-transform: uppercase; color: var(--rm-ink-4); font-weight: 600; }
.cmdk li .sec { color: var(--rm-ink-4); font-size: 11px; letter-spacing: var(--r-tr-eyebrow); text-transform: uppercase; font-weight: 600; }
.cmdk-footer { display: flex; gap: 14px; padding: 10px 14px; border-top: 1px solid var(--rm-hairline); font-size: 11px; color: var(--rm-ink-4); }
.cmdk-footer kbd {
  font-family: var(--font-mono);
  font-size: 10px;
  background: var(--rm-surface);
  border: 1px solid var(--rm-line);
  padding: 1px 5px;
  border-radius: 4px;
  color: var(--rm-ink-2);
}

@keyframes r-fade { from { opacity: 0 } to { opacity: 1 } }
@keyframes r-rise { from { opacity: 0; transform: translateY(8px) scale(0.99) } to { opacity: 1; transform: none } }

/* ---------- Divider rules ---------- */
.r-rule { height: 1px; background: var(--rm-line); border: 0; margin: 0; }
.r-rule-thick { height: 2px; background: var(--rm-ink-1); border: 0; margin: 0; }

/* ---------- Small helpers ---------- */
.r-container { max-width: var(--r-col-wide); margin: 0 auto; padding: 0 32px; }
.r-container-text { max-width: var(--r-col-text); margin: 0 auto; padding: 0 32px; }
.r-container-full { max-width: var(--r-col-full); margin: 0 auto; padding: 0 32px; }

.r-muted { color: var(--rm-ink-3); }
.r-inv   { color: var(--rm-bg); }
.r-accent{ color: var(--rm-accent-ink); }

/* Vertical rhythm */
.r-stack > * + * { margin-top: var(--stack, 16px); }
.r-section { padding: clamp(64px, 10vw, 120px) 0; }

/* ---------- Print ---------- */
@media print {
  :root { --rm-bg: #ffffff; --rm-ink-1: #000; }
  body { background: #fff; color: #000; }
  .progress-rail, .section-pill, .mode-toggle, .cmdk-backdrop, .print-hide { display: none !important; }
  .r-section { padding: 48px 0; break-inside: avoid; }
  .page-break { break-before: page; page-break-before: always; }
  .r-display { font-size: 72pt; }
  .r-h2      { font-size: 28pt; }
  .r-h3      { font-size: 18pt; }
  .r-body    { font-size: 11pt; line-height: 1.55; }
  a { color: inherit; text-decoration: none; }
}
@page { size: A4; margin: 18mm 16mm; }

/* Reduce motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; }
}
