/* ============================================================
   RESTORE — SHARED BASE
   Typography, color tokens, cursor styles, animation keyframes,
   reset rules, and ligature handling used by every brand in
   /Restore-Sites/. Loaded before any brand.css.
   ============================================================ */

/* ----- Fonts (paths relative to this file at /shared/css/) ----- */

@font-face {
  font-family: 'TT Norms';
  src: url('../assets/fonts/tt-norms-regular.otf') format('opentype');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'TT Norms';
  src: url('../assets/fonts/TTNorms-Medium.otf') format('opentype');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'TT Norms';
  src: url('../assets/fonts/tt-norms-bold.otf') format('opentype');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Briller';
  src: url('../assets/fonts/Briller W01 Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* ----- Color tokens (Restore parent palette) -----
   Brand overrides live in each brand's css/brand.css. */
:root {
  --restore-off-white: #F9F8F3;
  --restore-subtle:    #F1F0EB;
  --restore-ink:       #0A0A0A;
  --restore-deep:      #000099;
  --restore-electric:  #054FF0;
  --restore-teal:      #00FFFF;
}

/* ----- Reset / base body ----- */
html, body {
  background: var(--restore-ink);
  overflow-x: hidden;
}
body {
  font-family: 'TT Norms', system-ui, sans-serif;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* ----- Ligature rules -----
   Disable OpenType ligatures on body copy; TT Norms's "ti" / "tt" / etc.
   ligatures create visual noise at standard reading sizes. Re-enable on
   display headlines where large glyphs read as intentional typography. */
body, p, .body-copy, .description, .dek, .hero__dek,
.value-col__body, .vprop__body, .svc-block__body,
.stat-block__body, .pricing-card__body, .tier-card__body,
.process-step__body, .article-body p, .legal-body p {
  font-variant-ligatures: none;
  -webkit-font-feature-settings: "liga" 0, "dlig" 0;
  font-feature-settings: "liga" 0, "dlig" 0;
}
h1, h2, h3, h4, h5, h6 {
  font-variant-ligatures: normal;
  -webkit-font-feature-settings: normal;
  font-feature-settings: normal;
}

/* ----- Opening-sequence pre-states -----
   Hides hero content until the shared opening timeline reveals it.
   Class is set inline in <head> before body render to avoid flash. */
html.opening-pending body { overflow: hidden; }
html.opening-pending .reveal-target { opacity: 0; }
html.opening-pending #site-nav { opacity: 0; pointer-events: none; }

/* ----- Pre-paint animation gate -----
   Hides scroll-reveal targets until GSAP wires up their entrance
   animations, preventing flash-of-final-content on slow networks.
   A 4s safety timer in each HTML page removes the gate if GSAP
   never loads. */
html.animations-pending [data-reveal="headline"],
html.animations-pending [data-reveal="body"],
html.animations-pending [data-reveal="stat"] { opacity: 0; }
html.animations-pending [data-reveal="body"] { transform: translateY(20px); }
html.animations-pending [data-reveal="card-grid"] > * { opacity: 0; transform: translateY(30px); }
html.animations-pending [data-reveal="rule"],
html.animations-pending main hr { transform: scaleX(0); transform-origin: left center; }
html.animations-pending [data-reveal="eyebrow"] > :first-child { transform: scaleX(0); transform-origin: left center; }
html.animations-pending [data-reveal="eyebrow"] > :nth-child(2) { opacity: 0; transform: translateX(-20px); }
