@media(prefers-reduced-motion:no-preference){
  /* Public page transitions are coordinated in motion.js, including fast repeated clicks. */
  [data-motion-site] main>.hero,[data-motion-site] main>.page-intro,[data-motion-site] main>.platforms,[data-motion-site] main>.home-lower,[data-motion-site] main>.games-grid,[data-motion-site] main>.week-grid{animation:none}
  .header nav a:after{transition:background-color .25s ease}
  .header nav a,.creator-nav a,.platform,.button,.game-card,.info-card,.theme-option{transition:background-color .28s ease,border-color .28s ease,color .22s ease,transform .28s cubic-bezier(.2,.75,.25,1),box-shadow .28s ease}
  .game-card{animation:motion-card-in .48s cubic-bezier(.2,.75,.25,1) backwards}
  .game-card:nth-child(2){animation-delay:45ms}.game-card:nth-child(3){animation-delay:90ms}.game-card:nth-child(4){animation-delay:135ms}.game-card:nth-child(5){animation-delay:180ms}.game-card:nth-child(6){animation-delay:225ms}
  .schedule-detail{animation:motion-card-in .35s ease-out}
  #member-panel:not([hidden]),.auth-layout:not([hidden]){animation:motion-card-in .46s cubic-bezier(.2,.75,.25,1) both}
  dialog[data-smooth-dialog][open]{animation:motion-dialog-in .3s cubic-bezier(.2,.75,.25,1)}
  dialog[data-smooth-dialog][open]::backdrop{animation:motion-backdrop-in .3s ease-out;transition:opacity .17s ease}
  dialog[data-closing=true]::backdrop{opacity:0}
  details[open]>form,details[open]>.profile-grid,details[open]>p{animation:motion-card-in .3s ease-out}
  @media(hover:hover){
    .game-card:hover,.featured-game:hover,.theme-option:hover:not(:disabled){transform:translateY(-4px);box-shadow:0 10px 26px #0002}
    .button:hover:not(:disabled){transform:translateY(-2px)}
    .button:active:not(:disabled){transform:translateY(0)}
    .creator-nav a:hover{background:var(--panel2);transform:translateY(-2px)}
  }
}
@keyframes motion-card-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
@keyframes motion-dialog-in{from{opacity:0;transform:translateY(18px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes motion-backdrop-in{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.game-card:hover,.featured-game:hover,.theme-option:hover:not(:disabled),.button:hover:not(:disabled),.creator-nav a:hover{transform:none}}
@view-transition{navigation:auto}
@media(prefers-reduced-motion:no-preference){
 ::view-transition-old(root){animation:site-page-out .18s ease-out both}::view-transition-new(root){animation:site-page-in .24s ease-out both}
 .life-nav a,.life-refresh,.bonus-wallet,.support-goal-card,.community-nav-trigger,.community-search-trigger{transition:background-color .24s,border-color .24s,color .2s,box-shadow .24s}
 .life-workspace [data-life-content],.bonus-wallet{animation:motion-card-in .32s cubic-bezier(.2,.75,.25,1) backwards}
 :root:not([data-lite=true]){scroll-behavior:smooth}
}
@keyframes site-page-out{to{opacity:0}}@keyframes site-page-in{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){::view-transition-old(root),::view-transition-new(root){animation:none!important}}
:root[data-lite=true]::view-transition-old(root),:root[data-lite=true]::view-transition-new(root){animation:none!important}

/* Short feedback transitions; layout itself never waits for an animation. */
@media(prefers-reduced-motion:no-preference){
 :root:not([data-lite=true]) :is(.admin-tabs button,.giveaway-filters .button,.legal-switch a,.helpdesk-item,.hub-card summary,.next-tabs button){transition:background-color .22s ease,border-color .22s ease,color .18s ease,box-shadow .22s ease}
 :root:not([data-lite=true]) :is(input,select,textarea){transition:border-color .2s ease,background-color .2s ease,box-shadow .2s ease}
 :root:not([data-lite=true]) :is([data-admin-hub-content],#giveaway-list,#announcement-list)>*{animation:motion-soft-in .24s ease-out backwards}
}
@keyframes motion-soft-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
:root[data-lite=true] *, :root[data-lite=true] *::before, :root[data-lite=true] *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}

/* Gentle focus/hover feedback without animating layout properties globally. */
@media(prefers-reduced-motion:no-preference){
 :root:not([data-lite=true]) :is(.experience-tabs a,.community-nav-panel a,.account-tabs button,.life-nav a){transition:background-color .2s ease,border-color .2s ease,color .2s ease}
 :root:not([data-lite=true]) :is(.experience-card,.hub-card,.account-card) summary{transition:color .18s ease}
}


/* Modal surfaces must not recalculate a full-screen blur behind every frame. */
:root dialog::backdrop{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
:root dialog{overscroll-behavior:contain}
:root body:has(dialog[open])>.animated-theme-background,
:root body:has(dialog[open])>.animated-theme-background *,
:root body:has(dialog[open])::before,
:root body:has(dialog[open])::after,
:root body:has(dialog[open]) :is(.orbit-signature,.sentinel-signature,.brand-mark,.singularity-sigil,.atlas-sigil)::before,
:root body:has(dialog[open]) :is(.orbit-signature,.sentinel-signature,.brand-mark,.singularity-sigil,.atlas-sigil)::after,
:root body:has(dialog[open]) .sentinel-sigil{animation-play-state:paused!important}
/* Keep the exit reachable while scrolling a long donation or game dialog. */
:root dialog .dialog-close{position:sticky;top:0;right:auto;float:right;z-index:4;min-width:44px;min-height:44px;margin:0 0 8px 10px;background:var(--panel);border:1px solid var(--line);border-radius:8px}
:root dialog .dialog-body>.eyebrow{min-height:44px;display:flex;align-items:center}
:root dialog .dialog-body>h2{clear:both}

/* A shared lock also covers dynamically created modal dialogs. */
:root[data-dialog-open=true] body{overflow:hidden!important}
:root[data-dialog-open=true] body>.animated-theme-background,
:root[data-dialog-open=true] body>.animated-theme-background *,
:root[data-dialog-open=true] body::before,
:root[data-dialog-open=true] body::after{animation-play-state:paused!important}

:root dialog[data-closing=true]{pointer-events:none}
