/* One page opening for every inner page (2026-10-20, Nik: "every page should open the same smooth way").
   The first screen arrives in reading order: eyebrow or heading, the line under it, then the blocks, each fading in while it
   rises 16px, 0.1s apart, once the page-to-page fade has finished (/assets/entrance.js adds html.ent-go).
   - The hidden start state applies from the first paint (html.ent comes from a one-line script in each page head) and also to
     pieces a script builds later (Sponsorship cards, Our Work gallery), because the pieces are picked by selector, not by a class.
   - It is a CSS animation on the independent `translate` property, so the elements keep their own transforms and transitions
     (the Sponsorship cards still grow on hover).
   - Glass blocks are animated one by one, never through a wrapper: a wrapper below full opacity would flatten their blur. */

/* step 0: the first line of each page */
html.ent :is(#scan #h1, #intro #ttl, #sb .iv .pill, .contact .eyebrow, main > h1){--ed:0s}
/* step 1: the heading or the line under it */
html.ent :is(#intro #sub, #scan.hh #sub, #scan > div > p.sub, #sb .iv h1, .contact > div > h1, main > .upd){--ed:.07s}
/* step 2: the main blocks */
html.ent :is(#list .tile, #scan.hh .shelf > .gx, #scan .row.hb, #scan .stage > #pass, #scan .nums > .nt, #pcard, #sb .iv .lead, .contact > div > p.sub, #brief, main > .intro){--ed:.14s}
/* step 3: what follows them */
html.ent :is(#scan .fxp, #sb .iv .row, #bcs, main > section:first-of-type){--ed:.21s}

html.ent:not(.ent-go) :is(#scan #h1, #intro #ttl, #sb .iv .pill, .contact .eyebrow, main > h1,
  #intro #sub, #scan.hh #sub, #scan > div > p.sub, #sb .iv h1, .contact > div > h1, main > .upd,
  #list .tile, #scan.hh .shelf > .gx, #scan .row.hb, #scan .stage > #pass, #scan .nums > .nt, #pcard, #sb .iv .lead, .contact > div > p.sub, #brief, main > .intro,
  #scan .fxp, #sb .iv .row, #bcs, main > section:first-of-type){opacity:0;translate:0 12px}

html.ent.ent-go :is(#scan #h1, #intro #ttl, #sb .iv .pill, .contact .eyebrow, main > h1,
  #intro #sub, #scan.hh #sub, #scan > div > p.sub, #sb .iv h1, .contact > div > h1, main > .upd,
  #list .tile, #scan.hh .shelf > .gx, #scan .row.hb, #scan .stage > #pass, #scan .nums > .nt, #pcard, #sb .iv .lead, .contact > div > p.sub, #brief, main > .intro,
  #scan .fxp, #sb .iv .row, #bcs, main > section:first-of-type){animation:sl-enter .8s cubic-bezier(.22,.8,.3,1) var(--ed,0s) both}

@keyframes sl-enter{from{opacity:0;translate:0 12px}to{opacity:1;translate:0 0}}
/* with reduced motion the head script never adds html.ent, so none of this applies */
