/* ===========================================================
   OsteoZ — transitions entre les pages (View Transitions)
   Sobres : un fondu court, la navigation reste en place.
   =========================================================== */
@view-transition{navigation:auto}

::view-transition{background:var(--bg,#F6F7F7)}
::view-transition-group(root){animation-duration:.32s;animation-timing-function:cubic-bezier(.2,.8,.2,1)}
::view-transition-old(root){animation:ozVtOut .18s cubic-bezier(.4,0,1,1) both}
::view-transition-new(root){animation:ozVtIn .32s cubic-bezier(.2,.8,.2,1) both}
@keyframes ozVtOut{to{opacity:0}}
@keyframes ozVtIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* retour : léger glissement depuis la gauche */
:root[data-vt="back"]::view-transition-new(root){animation:ozVtBackIn .32s cubic-bezier(.2,.8,.2,1) both}
@keyframes ozVtBackIn{from{opacity:0;transform:translateX(-12px)}to{opacity:1;transform:none}}

/* la navigation de l'appli ne bouge pas pendant la transition */
.oz-nav{view-transition-name:oz-nav}
.oz-top{view-transition-name:oz-top}
::view-transition-group(oz-nav),::view-transition-group(oz-top){animation:none}
::view-transition-old(oz-nav),::view-transition-old(oz-top){animation:none;opacity:0}
::view-transition-new(oz-nav),::view-transition-new(oz-top){animation:none}

/* à l'intérieur d'un cours : seul le contenu change, la barre latérale reste */
html.oz-vt-local #view{view-transition-name:oz-view}
html.oz-vt-local::view-transition{background:transparent}
html.oz-vt-local::view-transition-group(root){animation-duration:.01s}
html.oz-vt-local::view-transition-old(root),html.oz-vt-local::view-transition-new(root){animation:none}
html.oz-vt-local::view-transition-group(oz-view){animation-duration:.3s;animation-timing-function:cubic-bezier(.2,.8,.2,1)}
html.oz-vt-local::view-transition-old(oz-view){animation:ozLocOut .16s ease-in both}
html.oz-vt-local::view-transition-new(oz-view){animation:ozLocIn .3s cubic-bezier(.2,.8,.2,1) both}
@keyframes ozLocOut{to{opacity:0}}
@keyframes ozLocIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

@media (prefers-reduced-motion:reduce){
  ::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}
}

/* ===========================================================
   MODE LÉGER — appareils peu puissants (html.oz-lite)
   Aucune animation, tout est visible d'emblée.
   =========================================================== */
html.oz-lite{scroll-behavior:auto!important}
html.oz-lite *,html.oz-lite *::before,html.oz-lite *::after{
  -webkit-backdrop-filter:none!important;backdrop-filter:none!important;
  animation:none!important;transition:none!important;will-change:auto!important}
html.oz-lite .oz-aurora,html.oz-lite .ui-aurora,html.oz-lite .aurora,html.oz-lite .cursor-glow{display:none!important}
html.oz-lite .rv,html.oz-lite .oz-rv,html.oz-lite .oz-in,html.oz-lite .side > *,html.oz-lite .qcard,html.oz-lite .verdict{
  opacity:1!important;transform:none!important;filter:none!important}
html.oz-lite .oz-confetti{display:none!important}
html.oz-lite .page > *{content-visibility:auto;contain-intrinsic-size:auto 300px}
