body{overflow:hidden}
.page-shell{position:relative;z-index:2;min-height:100svh;background:var(--ground);opacity:1;transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .9s cubic-bezier(.22,1,.36,1);transform-origin:50% 48%}
.page-shell[hidden]{display:none!important}
.intro-studio{position:fixed;inset:0;z-index:1;width:100%;height:100svh;border:0;opacity:0;transform:scale(1.02);transition:opacity .8s ease,transform 1.1s cubic-bezier(.22,1,.36,1);pointer-events:none;background:#c7beb5}
.intro-studio-ready{opacity:1;transform:scale(1);pointer-events:auto}
.intro-leaving{opacity:0;transform:scale(1.015);pointer-events:none}
.intro-recovery{margin:52px 0 0;max-width:420px;font:13px/1.6 Arial,sans-serif;text-align:center}
.intro-recovery[hidden]{display:none!important}.intro-recovery p{margin:0 0 12px}.intro-recovery button,.intro-recovery a{display:inline-block;border:1px solid var(--hairline);border-radius:99px;padding:9px 15px;margin:4px;color:var(--ink);background:transparent;text-decoration:none;font:inherit}
/* Tagline doubles as the loading bar: faint base text, solid copies wipe in over it.
   Two copies: one creeps on a timer, one follows real progress; together they show whichever is further. */
.intro-loading .tl-base{opacity:.24;transition:opacity .4s}
.tl-clip{position:absolute;inset:0;overflow:hidden;transform:translate3d(-100%,0,0);pointer-events:none}
.tl-ink{position:absolute;left:0;top:0;white-space:nowrap;transform:translate3d(100%,0,0)}
.tl-creep{animation:tl-clip 6s cubic-bezier(.3,.6,.2,1) 2.1s forwards}
.tl-creep .tl-ink{animation:tl-ink 6s cubic-bezier(.3,.6,.2,1) 2.1s forwards}
.tl-real,.tl-real .tl-ink{transition:transform .65s cubic-bezier(.22,1,.36,1)}
@keyframes tl-clip{to{transform:translate3d(-18%,0,0)}}
@keyframes tl-ink{to{transform:translate3d(18%,0,0)}}
@media(prefers-reduced-motion:reduce){.intro-studio,.page-shell{transition:none;transform:none}.intro-loading .tl-base{opacity:1}.tl-clip{display:none}}
