html, body, #root { height: 100%; }
body {
  margin: 0;
  background: #050505;
  color: #e7e9ee;
  font-family: 'Geist', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
  font-feature-settings: 'ss01', 'ss02', 'cv11';
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}
.font-mono { font-family: 'Geist Mono', ui-monospace, 'SF Mono', Menlo, monospace; }
/* Layered noise + vignette */
.vignette::before {
  content: '';
  position: fixed; inset: 0;
  background:
    radial-gradient(ellipse 75% 60% at 50% 45%, rgba(5,5,5,0) 0%, rgba(5,5,5,0.35) 60%, rgba(5,5,5,0.75) 100%);
  pointer-events: none;
  z-index: 2;
}
.grain::after {
  content: '';
  position: fixed; inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 0.06 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  mix-blend-mode: overlay;
  opacity: 0.5;
  pointer-events: none;
  z-index: 3;
}
/* Selection */
::selection { background: rgba(120, 230, 255, 0.25); color: #fff; }
/* Scrollbar */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: #050505; }
::-webkit-scrollbar-thumb { background: #15171b; border-radius: 10px; }
::-webkit-scrollbar-thumb:hover { background: #1f2228; }

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .respect-motion { animation: none !important; transition: none !important; }
}

/* Headline gradient */
.headline-grad {
  background: linear-gradient(180deg, #ffffff 0%, #dadde3 55%, #8a8f99 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

/* Faint dotted micro-line under hero word */
.hairline {
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.18), transparent);
  height: 1px; width: 100%;
}

/* Docs anchor offset so sticky nav doesn't cover section headings */
.doc-section { scroll-margin-top: 96px; }

/* Subtle signature shimmer on the glyph card's verified pill */
@keyframes sigPulse {
  0%, 100% { opacity: 0.55; }
  50%      { opacity: 1; }
}
.sig-pulse { animation: sigPulse 2.6s ease-in-out infinite; }
