.arcade-game-frame{position:fixed;inset:0;width:100%;height:100dvh;border:0;z-index:11002;background:transparent;opacity:0;pointer-events:none}.arcade-game-frame.is-ready{opacity:1;pointer-events:auto}.arcade-loading{position:fixed;inset:0;z-index:11001;display:grid;place-items:center;background:transparent;color:var(--st-ink)}.arcade-loading-card{display:flex;flex-direction:column;align-items:center;gap:14px;padding:28px;border:1px solid var(--st-edge);border-radius:18px;background:var(--st-panel);box-shadow:0 8px 24px #0003}.arcade-loading-card p{margin:0}.arcade-loading-card button,.arcade-loading-card a{color:var(--st-ink);background:transparent;border:1px solid var(--st-edge);border-radius:8px;padding:8px 14px;font:inherit}.arcade-loader{width:30px;height:30px;border:3px solid var(--st-edge);border-top-color:var(--st-accent);border-radius:50%;animation:arcade-loading-turn .7s linear infinite}@keyframes arcade-loading-turn{to{transform:rotate(1turn)}}@media(prefers-reduced-motion:reduce){.arcade-loader{animation:none}}

/* One continuous veil across loader and gameplay: no opacity reset at handoff. */
.arcade-launch-backdrop{position:fixed;inset:0;z-index:10999;background:rgba(5,5,9,.8);pointer-events:none;animation:arcade-veil-in .2s ease-out both}
.arcade-launch-backdrop.is-leaving{animation:arcade-veil-out .22s ease-in forwards}
.arcade-loading-card{animation:arcade-loader-in .16s ease-out both}
.arcade-loading.is-finishing{pointer-events:none}.arcade-loading.is-finishing .arcade-loading-card{animation:arcade-loader-out .16s ease-in forwards}
@keyframes arcade-veil-in{from{opacity:0}to{opacity:1}}@keyframes arcade-veil-out{from{opacity:1}to{opacity:0}}
@keyframes arcade-loader-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes arcade-loader-out{from{opacity:1}to{opacity:0}}
@media(prefers-reduced-motion:reduce){.arcade-launch-backdrop,.arcade-launch-backdrop.is-leaving,.arcade-loading-card,.arcade-loading.is-finishing .arcade-loading-card{animation:none}}
