/* base.css — document resets, scroll behavior, native video-chrome suppression.
   Loaded first; owns the page-level surface. */
html { scroll-behavior: smooth; scrollbar-width: none; }
html::-webkit-scrollbar { display: none; }
html, body { margin: 0; padding: 0; background: #07101f; }

/* One vertical rhythm for every full-width section. Sections used to carry six
   different clamps (44-80, 60-104, 64-110, 80-130, 80-140, 90-180), so no two
   transitions felt alike. Retune this single value and #vss-product-reveal,
   #app, #dashboard and #how all follow. */
:root { --sec-pad: clamp(80px, 10vh, 120px); }

/* Grain overlay texture.
   Lives here rather than in an inline style attribute because the data URI
   must percent-encode '<' and '>' (%3C/%3E) and the fragment '#' in url(#n)
   (%23). Written inline with HTML entities (&lt;svg&gt;) the CSS parser
   truncated the value at the first ';' and the overlay silently never
   painted. Keep it encoded; keep it out of a style attribute. */
#vss-grain {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E");
}

video::-webkit-media-controls,
video::-webkit-media-controls-enclosure,
video::-webkit-media-controls-panel,
video::-webkit-media-controls-overlay-play-button,
video::-webkit-media-controls-start-playback-button {
  display: none !important;
  -webkit-appearance: none !important;
  opacity: 0 !important;
}
