/* A short first-load transition; the CSS deadline works even if scripts fail. */
#af-site-loader{position:fixed;inset:0;z-index:2147483000;display:grid;place-items:center;background:var(--paper);color:var(--green);animation:af-loader-deadline 2.8s both;transition:opacity .35s ease,visibility .35s;pointer-events:auto}
#af-site-loader.is-finished{opacity:0;visibility:hidden;pointer-events:none;animation:af-loader-dismiss .35s ease both}
@keyframes af-loader-dismiss{from{opacity:1;visibility:visible}to{opacity:0;visibility:hidden}}
.af-loader-lockup{display:flex;flex-direction:column;align-items:center;gap:28px;animation:af-loader-arrive .55s ease-out both}
.af-loader-brand{display:block;line-height:0}
.af-loader-brand .brand-logo-v23{width:clamp(160px,30vw,220px);height:auto;mix-blend-mode:darken}
.af-loader-track{width:150px;height:2px;overflow:hidden;border-radius:var(--radius);background:var(--line)}
.af-loader-track::after{content:'';display:block;width:100%;height:100%;background:var(--green);border-radius:inherit;transform-origin:left;animation:af-loader-flow 1.95s cubic-bezier(.22,.61,.36,1) both}
@keyframes af-loader-arrive{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@keyframes af-loader-flow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes af-loader-deadline{0%,87.5%{opacity:1;visibility:visible;pointer-events:auto}100%{opacity:0;visibility:hidden;pointer-events:none}}
@media(prefers-reduced-motion:reduce){#af-site-loader{animation-duration:.15s;transition:none}.af-loader-lockup,.af-loader-brand svg{animation:none}.af-loader-track::after{animation:none;width:100%}}