/**
 * Cross-browser normalization (Chrome, Vivaldi, Edge, Firefox, Safari).
 * Vivaldi is Chromium-based; drift usually comes from compositing, font metrics,
 * and pseudo-element stacking — not different layout engines.
 */

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

.site-body {
  /* fixed attachment repaints inconsistently across Chromium forks */
  background-attachment: scroll;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  font-synthesis: none;
}

.site-body--marketing {
  min-height: 100vh;
  min-height: 100dvh;
}

/* Sticky header: keep vignette layers inside a predictable stack (avoid z-index: -1). */
.site-header > .brand-lockup,
.site-header > .site-nav,
.site-header > .header-actions {
  position: relative;
  z-index: 1;
}

.site-header::before,
.site-header::after {
  z-index: 0;
}

.site-header::after {
  -webkit-mask-image: linear-gradient(180deg, black 0%, black 38%, transparent 100%);
}

/* Grid children need min-width: 0 so nav does not blow out header width in some engines. */
.site-header > .site-nav--desktop {
  min-width: 0;
  max-width: 100%;
}

picture,
.hero-banner-media {
  display: block;
}

.hero-banner-img {
  max-width: 100%;
}

/* Backdrop blur fallbacks where -webkit prefix was missing */
.mobile-nav-panel,
.vision-card,
.neon-billboard-panel {
  -webkit-backdrop-filter: blur(12px);
}

.mobile-nav-panel {
  -webkit-backdrop-filter: blur(14px);
}

/* Mask fallbacks for hero floor */
.hero-grid-floor,
.hero-banner-fx .hero-grid-floor {
  -webkit-mask-image: linear-gradient(to top, black 15%, transparent 95%);
}

.site-backdrop-grid {
  -webkit-mask-image: radial-gradient(ellipse 100% 80% at 50% 20%, black 20%, transparent 75%);
}

.hero--banner .hero-banner-img {
  transform: translateZ(0);
  backface-visibility: hidden;
}

@media (prefers-reduced-motion: reduce) {
  .site-header,
  .hero--banner .hero-banner-img {
    transform: none;
  }
}
