/* FOGBOUND: tokens live exclusively in theme.css. */
@font-face {font-family:'Fogbound Display';src:url('/assets/fonts/display.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap;}
@font-face {font-family:'Fogbound Body';src:url('/assets/fonts/body.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap;}
@font-face {font-family:'Fogbound Body';src:url('/assets/fonts/body-bold.woff2') format('woff2');font-weight:700;font-style:normal;font-display:swap;}
.title,.brief-role h2,.countdown,.code-big {font-family:var(--font-display);}
.card,.modal,.panel,.results-card,.briefing-card,.coach {border:var(--border-width) solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);}
.panel,.topbar,.crew {background:var(--color-surface-glass);}
.btn,.ping-btn,.shine-btn,.flare-btn {min-height:var(--touch-size);}
.btn:focus-visible,.ping-btn:focus-visible,.shine-btn:focus-visible,.flare-btn:focus-visible {outline:3px solid var(--color-focus);outline-offset:3px;}
.btn-primary {background:var(--color-primary);color:var(--color-primary-text);}
.tagline {color:var(--color-text-muted);}
@keyframes fb-enter {from {opacity:0;transform:translateY(8px);}to {opacity:1;transform:none;}}
@keyframes fb-count {0% {opacity:.35;transform:scale(.92);}35% {opacity:1;transform:scale(1.04);}100% {opacity:1;transform:none;}}
@keyframes fb-hit {0%,100% {transform:none;}20% {transform:translateX(-3px);}45% {transform:translateX(3px);}70% {transform:translateX(-1px);}}
@keyframes fb-soft {0%,100% {opacity:1;}40% {opacity:.85;}}
@keyframes fb-rescue {0%,100% {box-shadow:var(--shadow-sm);}35% {box-shadow:var(--glow-primary);}}
@keyframes fb-danger {0%,100% {outline-color:transparent;}35%,70% {outline-color:var(--color-danger);}}
@keyframes fb-fail {from {opacity:.4;transform:translateY(6px);}to {opacity:1;transform:none;}}
@keyframes fb-star {0% {transform:scale(.8);}40% {transform:scale(1.15);}100% {transform:none;}}
.fx-level-start .topbar {animation:fb-enter 1200ms var(--ease-out) 1 both;}
.fx-countdown .countdown {animation:fb-count 650ms var(--ease-out) 1 both;}
.fx-role-reveal .brief-role {animation:fb-enter 1000ms var(--ease-out) 1 both;}
.fx-ship-hit {animation:fb-hit 600ms var(--ease-out) 1 both;}
.fx-scrape {animation:fb-soft 450ms var(--ease-out) 1 both;}
.fx-near-miss .callout {animation:fb-enter 900ms var(--ease-out) 1 both;}
.fx-rescue .topbar {animation:fb-rescue 1200ms var(--ease-out) 1 both;}
.fx-beam-sweep .energy {animation:fb-rescue 650ms var(--ease-out) 1 both;}
.fx-beam-depleted .energy {animation:fb-danger 700ms var(--ease-out) 1 both;outline:2px solid transparent;outline-offset:2px;}
.fx-sonar-ping .role-badge {animation:fb-rescue 1200ms var(--ease-out) 1 both;}
.fx-flare-launch .flare-btn {animation:fb-rescue 800ms var(--ease-out) 1 both;}
.fx-gust-warning .gust-banner {animation:fb-danger 2400ms var(--ease-out) 1 both;outline:2px solid transparent;outline-offset:2px;}
.fx-gust .gust-banner {animation:fb-soft 3000ms var(--ease-out) 1 both;}
.fx-npc-horn .hint {animation:fb-danger 1200ms var(--ease-out) 1 both;outline:2px solid transparent;outline-offset:2px;}
.fx-hull-critical .hull-pip.critical {animation:fb-danger 1400ms var(--ease-out) 1 both;outline:2px solid transparent;outline-offset:2px;}
.fx-dawn-soon .tb-timer.is-late {animation:fb-danger 1800ms var(--ease-out) 1 both;outline:2px solid transparent;outline-offset:2px;}
.fx-ping-placed .callout {animation:fb-enter 700ms var(--ease-out) 1 both;}
.fx-level-complete .results-card {animation:fb-rescue 2300ms var(--ease-out) 1 both;}
.fx-level-failed .results-card {animation:fb-fail 2200ms var(--ease-out) 1 both;}
.fx-star-awarded .stars-lg .star.on {animation:fb-star 650ms var(--ease-out) 1 both;}
.fx-player-joined .lobby .player {animation:fb-enter 700ms var(--ease-out) 1 both;}

/* No animation or displacement when reduced motion is enabled. */
:root[data-reduced-motion='true'] .fx-level-start .topbar,
:root[data-reduced-motion='true'] .fx-countdown .countdown,
:root[data-reduced-motion='true'] .fx-role-reveal .brief-role,
:root[data-reduced-motion='true'] .fx-ship-hit,
:root[data-reduced-motion='true'] .fx-scrape,
:root[data-reduced-motion='true'] .fx-near-miss .callout,
:root[data-reduced-motion='true'] .fx-rescue .topbar,
:root[data-reduced-motion='true'] .fx-beam-sweep .energy,
:root[data-reduced-motion='true'] .fx-beam-depleted .energy,
:root[data-reduced-motion='true'] .fx-sonar-ping .role-badge,
:root[data-reduced-motion='true'] .fx-flare-launch .flare-btn,
:root[data-reduced-motion='true'] .fx-gust-warning .gust-banner,
:root[data-reduced-motion='true'] .fx-gust .gust-banner,
:root[data-reduced-motion='true'] .fx-npc-horn .hint,
:root[data-reduced-motion='true'] .fx-hull-critical .hull-pip.critical,
:root[data-reduced-motion='true'] .fx-dawn-soon .tb-timer.is-late,
:root[data-reduced-motion='true'] .fx-ping-placed .callout,
:root[data-reduced-motion='true'] .fx-level-complete .results-card,
:root[data-reduced-motion='true'] .fx-level-failed .results-card,
:root[data-reduced-motion='true'] .fx-star-awarded .stars-lg .star.on,
:root[data-reduced-motion='true'] .fx-player-joined .lobby .player {animation:none !important;transform:none !important;opacity:1 !important;}
:root[data-reduced-motion='true'] .fx-hull-critical .hull-pip.critical,
:root[data-reduced-motion='true'] .fx-dawn-soon .tb-timer.is-late,
:root[data-reduced-motion='true'] .fx-beam-depleted .energy {outline:2px solid var(--color-danger);}
:root[data-reduced-motion='true'] .fx-rescue .topbar,
:root[data-reduced-motion='true'] .fx-level-complete .results-card {outline:2px solid var(--color-success);}
@media (prefers-reduced-motion:reduce) {
.fx-level-start .topbar,
.fx-countdown .countdown,
.fx-role-reveal .brief-role,
.fx-ship-hit,
.fx-scrape,
.fx-near-miss .callout,
.fx-rescue .topbar,
.fx-beam-sweep .energy,
.fx-beam-depleted .energy,
.fx-sonar-ping .role-badge,
.fx-flare-launch .flare-btn,
.fx-gust-warning .gust-banner,
.fx-gust .gust-banner,
.fx-npc-horn .hint,
.fx-hull-critical .hull-pip.critical,
.fx-dawn-soon .tb-timer.is-late,
.fx-ping-placed .callout,
.fx-level-complete .results-card,
.fx-level-failed .results-card,
.fx-star-awarded .stars-lg .star.on,
.fx-player-joined .lobby .player {animation:none !important;transform:none !important;opacity:1 !important;}
}
