/* BitVibe Labs — shared brand baseline (GENERIC, drop-in).
   Single source of truth. Vendor into each product's public/brand-kit/ and link
   it in <head> AFTER the product's own CSS so these win where intended.
   Pairs with bg-shader.js + head-snippet.html. See rule bitvibe-web-product-baseline. */

:root {
  --bvl-bit: #1FB8FF; --bvl-vibe: #FF4520; --bvl-labs: #B0A29A; --bvl-win: #18E69B;
  --bvl-bg: #0A0A0A; --bvl-fg: #F5F5F4;
  --bvl-font-wm: 'Fraunces', Georgia, serif;
  --bvl-font-sans: 'DM Sans', -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --bvl-font-mono: 'JetBrains Mono', ui-monospace, "SF Mono", Menlo, monospace;
}

/* iOS horizontal-pan fix — iOS scrolls <html>, so BOTH need it. Use width/height
   100% (not 100vw/100vh) on fixed full-bleed layers to avoid mobile over-count. */
html, body { overflow-x: hidden; max-width: 100%; }

/* Ambient shader canvas (paired with bg-shader.js). Fixed, behind all content.
   JS overscans the size via inline style; this is the resting/no-JS state. */
#bvl-bgcanvas {
  position: fixed; inset: 0; z-index: 0; pointer-events: none;
  width: 100%; height: 100%;
}

/* prefers-reduced-motion safety net. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* The iOS chin fade-to-black overlay was REMOVED from the shared kit (2026-05-27).
   It is bitvibelabs.com-SPECIFIC (a sparse hero with empty bottom space). On
   content-dense product pages a fixed bottom overlay sits ON TOP of real content
   and hides it. NOT a portable default — it lives only on bitvibelabs.com.
   See rule ios-safari-chin-tint for the (now caveated) mechanism. */
