/* One Antidote loading mark, including nested and reduced-motion states. */
.antidote-loader{display:grid;place-items:center;min-height:180px;--loader-size:180px;--loader-mark:76px}
.antidote-loader.is-compact{min-height:64px;--loader-size:64px;--loader-mark:27px}
.antidote-loader .boot-drop{position:relative;display:grid;place-items:center;width:var(--loader-size);height:var(--loader-size);margin:auto}
.antidote-loader .boot-drop img{position:static;display:block;width:var(--loader-mark);height:auto;object-fit:contain;opacity:0}
.antidote-loader .boot-drop::after{content:'';position:absolute;width:var(--loader-mark);height:calc(var(--loader-mark)*360/294);background:linear-gradient(145deg,var(--screens-accent,#a1e9cb),var(--screens-end,#65bb97));mask:url('./brand-symbol.svg') center/contain no-repeat;-webkit-mask:url('./brand-symbol.svg') center/contain no-repeat;animation:antidote-breathe 2.8s ease-in-out infinite}
.antidote-loader .boot-drop-ring{position:absolute;inset:5px;border:1px solid color-mix(in srgb,var(--screens-accent,#a1e9cb) 10%,transparent);border-top-color:color-mix(in srgb,var(--screens-accent,#a1e9cb) 50%,transparent);border-radius:50%;animation:antidote-orbit 6s linear infinite}
.antidote-loader[hidden]{display:none}
#screen>.antidote-loader{min-height:55dvh}
@keyframes antidote-breathe{50%{transform:translateY(-4px) scale(.96,1.04)}}
@keyframes antidote-orbit{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.antidote-loader .boot-drop::after,.antidote-loader .boot-drop-ring{animation:none}}

/* The connection and game documents share one startup composition. Keep these
   rules last and inline at build time so the first paint uses the saved palette. */
.startup-wordmark{display:none}
html body:is(.journey[data-page="onboarding"]:has(#wait:not([hidden])),[data-design="pulse"]:has(#screen>.antidote-loader)){
 background:var(--screens-bg,#07111e)!important;
}
html body.journey[data-page="onboarding"]:has(#wait:not([hidden])) :is(.stage,.device),
html body[data-design="pulse"]:has(#screen>.antidote-loader) .phone-app{
 background:radial-gradient(ellipse at 50% 48%,color-mix(in srgb,var(--screens-surface2,#1b3547) 45%,transparent),transparent 55%),var(--screens-bg,#07111e)!important;
}
html body.journey[data-page="onboarding"]:has(#wait:not([hidden])) .device::after,
html body[data-design="pulse"]:has(#screen>.antidote-loader) .phone-app::after{display:none}
html body.journey[data-page="onboarding"]:has(#wait:not([hidden])) .head,
html body[data-design="pulse"]:has(#screen>.antidote-loader) .terminal-head{
 position:absolute;top:calc(24px + env(safe-area-inset-top));left:24px;right:24px;z-index:2;margin:0!important;padding:0!important;border:0!important;min-height:32px;display:flex;align-items:center;
}
html body.journey[data-page="onboarding"]:has(#wait:not([hidden])) .head .antidote-brand,
html body[data-design="pulse"]:has(#screen>.antidote-loader) .terminal-head .antidote-brand{
 font:600 22px/32px var(--display,system-ui);letter-spacing:.09em;color:var(--screens-text,#e5eef5)!important;min-height:32px;height:32px;padding:0;gap:.38em;
}
html body[data-design="pulse"]:has(#screen>.antidote-loader) .startup-wordmark{display:inline}
html body[data-design="pulse"]:has(#screen>.antidote-loader) :is(#terminal-title,#terminal-energy,.bottom-nav){display:none!important}
html body.journey[data-page="onboarding"]:has(#wait:not([hidden])) .head :is(.sub,.link,.language-control){display:none!important}
/* A transformed ancestor makes fixed children relative to that panel. The
   startup mark must stay relative to the viewport, including the first frame. */
html body.journey[data-page="onboarding"] #wait{animation:none;transform:none}
html body.journey[data-page="onboarding"]:has(#wait:not([hidden])) #wait>.antidote-loader,
html body[data-design="pulse"] #screen>.antidote-loader{
 position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);width:180px;height:180px;min-height:180px;padding:0;margin:0;z-index:1;pointer-events:none;
}
html body.journey[data-page="onboarding"]:has(#wait:not([hidden])) #boot-note:not(.boot-sr-only),
html body.journey[data-page="onboarding"]:has(#wait:not([hidden])) #boot-slow:not([hidden]){position:fixed;top:calc(50% + 115px);left:24px;right:24px;text-align:center;color:var(--screens-muted,#a6b9ca)}
