/* Qora-inspired focus reveal: a measured rise and a long, smooth deceleration. */
[data-reveal-pending] { opacity:0!important; }
:root .motion-reveal {
  animation:scroll-settle 1050ms cubic-bezier(.6,.6,0,1) var(--reveal-delay,0ms) backwards;
  will-change:opacity,translate,filter;
}
@keyframes scroll-settle {
  from { opacity:0; translate:0 56px; filter:blur(12px); }
  to { opacity:1; translate:0 0; filter:blur(0); }
}
@media(max-width:600px) {
  :root .motion-reveal { animation-duration:950ms; }
  @keyframes scroll-settle {
    from { opacity:0; translate:0 36px; filter:blur(6px); }
    to { opacity:1; translate:0 0; filter:blur(0); }
  }
}
@media(prefers-reduced-motion:reduce) {
  [data-reveal-pending] { opacity:1!important; }
  :root .motion-reveal { animation:none; will-change:auto; }
}
@media print {
  [data-reveal-pending] { opacity:1!important; }
  :root .motion-reveal { animation:none; }
}

/* Statistics had a mount animation which restarted after scroll reveal cleanup.
   Use one entrance, without raster-heavy blur across charts and numeric updates. */
.org-statistics :is(.org-stats-kpi,.org-stats-panel) { animation:none; }
:root :is(.org-stats-kpi,.org-stats-panel,.admin-stat-card,.admin-stat-panel).motion-reveal {
  animation-name:statistics-settle;
  animation-duration:650ms;
  animation-timing-function:cubic-bezier(.22,1,.36,1);
  will-change:opacity,translate;
}
@keyframes statistics-settle {
  from { opacity:0; translate:0 18px; }
  to { opacity:1; translate:0 0; }
}
@media(prefers-reduced-motion:reduce), print {
  :root :is(.org-stats-kpi,.org-stats-panel,.admin-stat-card,.admin-stat-panel).motion-reveal { animation:none!important; will-change:auto; }
}
