/* Homepage intro (assets/intro.js). The gate adds .intro-pending before the first paint: a white cover over the page
   (the header is white, so the full-colour logo plays on white), the header logo held back, and the page text
   waiting to blur in as the logo lands. .intro-entering starts the blur-in; both classes are gone a moment after. */
html.intro-pending::before { content:''; position:fixed; inset:0; z-index:90; background:#fff; opacity:var(--cf-cover,1); pointer-events:none; }
.cf-intro { position:fixed; inset:0; z-index:91; pointer-events:none; }
.cf-intro svg { position:absolute; left:0; top:0; width:0; height:auto; display:block; overflow:visible; }
html.intro-pending .logo img { opacity:0; }
html.intro-pending :is(.notice-inner,.desktop-nav,.nav-actions,.menu-button,.hero-copy > *,.hero-visual) { opacity:0; filter:blur(14px); transform:translateY(10px); }
html.intro-entering :is(.notice-inner,.desktop-nav,.nav-actions,.menu-button,.hero-copy > *,.hero-visual) {
  opacity:1; filter:none; transform:none;
  transition:opacity .9s cubic-bezier(.2,0,0,1),filter .9s cubic-bezier(.2,0,0,1),transform .9s cubic-bezier(.2,0,0,1);
  transition-delay:calc(var(--cf-i,0) * 70ms);
}
html.intro-freeze * { transition:none !important; }   /* only for ?intro-at=<ms>, which shows one still frame */
