/* Blueprint to Broadcast — Base layer
   Light resets + brand-level defaults + reusable blueprint backgrounds.
   Imported last so tokens are available. */

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  font: var(--type-body);
  color: var(--text-body);
  background: var(--bg-page);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

h1, h2, h3, h4 { color: var(--text-strong); margin: 0; }
p { margin: 0; }
a { color: var(--text-brand); text-decoration: none; }

::selection { background: var(--signal-200); color: var(--navy-900); }

/* ---- Blueprint grid backgrounds ---- */
.b2b-grid {
  background-image:
    linear-gradient(var(--grid-line) var(--border-hair), transparent var(--border-hair)),
    linear-gradient(90deg, var(--grid-line) var(--border-hair), transparent var(--border-hair));
  background-size: var(--grid-size) var(--grid-size);
}
.b2b-grid--inverse {
  background-image:
    linear-gradient(var(--grid-line-inverse) var(--border-hair), transparent var(--border-hair)),
    linear-gradient(90deg, var(--grid-line-inverse) var(--border-hair), transparent var(--border-hair));
  background-size: var(--grid-size) var(--grid-size);
}

/* mono eyebrow / technical label */
.b2b-eyebrow {
  font: var(--type-eyebrow);
  text-transform: uppercase;
  letter-spacing: var(--ls-mono-wide);
  color: var(--text-brand);
}

/* ---- Broadcast signal pulse keyframes (shared) ---- */
@keyframes b2b-signal-pulse {
  0%   { transform: scale(0.6); opacity: 0.85; }
  100% { transform: scale(1.9); opacity: 0; }
}
@keyframes b2b-fade-up {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: translateY(0); }
}
