body {
  font-family: var(--font-body), sans-serif;
  font-size: var(--text-base);
  font-weight: var(--font-weight-regular);
}

/* Scrollbar — subtle */
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
  background: var(--color-border, rgba(0,0,0,0.15));
  border-radius: var(--radius-pill);
}

/* Focus visible — keyboard nav */
:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 3px;
  border-radius: var(--radius-sm);
}

/* Utility */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

/* Respect user motion preferences */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
}

/* Freeze all transitions for one paint cycle during theme switch to prevent
   simultaneous compositor spike on iOS (hundreds of color transitions at once). */
.theme-switching *, .theme-switching *::before, .theme-switching *::after {
  transition-duration: 0ms !important;
}

/* Platform glass opt-out — applied via CSS classes set by platform.js.
   feat-no-glass-nav      → backdrop-filter off on nav / controls bar
   feat-no-glass-sections → backdrop-filter off on section cards (highest GPU cost: 7 blurs over animated canvas) */
.feat-no-glass-nav .controls,
.feat-no-glass-nav .content-nav,
.feat-no-glass-nav .passphrase-wrap,
.feat-no-glass-nav .passphrase-error,
.feat-no-glass-nav .debug-controls {
  background: var(--color-bg-secondary);
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

.feat-no-glass-nav .top-bar:has(.content-nav:not([aria-hidden="true"])) {
  background: var(--color-bg-secondary);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-pill);
  box-shadow: 0 2px 12px var(--color-shadow);
}

.feat-no-glass-nav .top-bar:has(.content-nav:not([aria-hidden="true"]))::before {
  display: none;
}

.feat-no-glass-nav .top-bar:has(.content-nav:not([aria-hidden="true"])) .controls {
  background: var(--color-bg-secondary);
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

.feat-no-glass-sections .wedding-section {
  background: var(--color-bg-secondary);
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}
