/* Shared custom-surface motion. Framework7 toolbars/pages retain their own effects. */
html[data-ios-ui] {
  --ios-motion-duration: 240ms;
  --ios-motion-exit: 180ms;
  --ios-motion-ease: cubic-bezier(.2,.8,.2,1);
}
html[data-ios-ui] [data-ios-closing] { pointer-events: none !important; }
html[data-ios-ui] #reviewReminder:has(.review-reminder-compact-label:empty) { display: none !important; }
html[data-ios-ui] #reviewReminder:not([hidden]) { animation: ios-reminder-float 3s ease-in-out infinite; }
@keyframes ios-reminder-float {
  0%, 100% { transform: translate(-50%, 0); }
  50% { transform: translate(-50%, -3px); }
}
/* Native dialogs and persistent hidden panels can transition without JS timers.
   display/overlay retain their painting layer until the exit has completed. */
html[data-ios-ui] :is(dialog, .pdf-modal, .backend-pdf-preview-modal, #quizPanel, #reviewAnswer, #reviewRatings, #reviewWait, #reviewDone, #jsonExample) {
  opacity: 0; translate: 0 8px;
  transition: opacity var(--ios-motion-exit) var(--ios-motion-ease),
    translate var(--ios-motion-exit) var(--ios-motion-ease),
    display var(--ios-motion-exit) allow-discrete,
    overlay var(--ios-motion-exit) allow-discrete;
}
html[data-ios-ui] :is(dialog[open], .pdf-modal:not(.hidden), .backend-pdf-preview-modal:not(.hidden), #quizPanel:not(.hidden), #reviewAnswer:not([hidden]), #reviewRatings:not([hidden]), #reviewWait:not([hidden]), #reviewDone:not([hidden]), #jsonExample:not(.hidden)) {
  opacity: 1; translate: 0 0;
  transition-duration: var(--ios-motion-duration);
}
@starting-style {
  html[data-ios-ui] :is(dialog[open], .pdf-modal:not(.hidden), .backend-pdf-preview-modal:not(.hidden), #quizPanel:not(.hidden), #reviewAnswer:not([hidden]), #reviewRatings:not([hidden]), #reviewWait:not([hidden]), #reviewDone:not([hidden]), #jsonExample:not(.hidden)) { opacity: 0; translate: 0 8px; }
}
html[data-ios-ui] dialog::backdrop {
  opacity: 0;
  transition: opacity var(--ios-motion-exit) ease, display var(--ios-motion-exit) allow-discrete, overlay var(--ios-motion-exit) allow-discrete;
}
html[data-ios-ui] dialog[open]::backdrop { opacity: 1; }
@starting-style { html[data-ios-ui] dialog[open]::backdrop { opacity: 0; } }
@media (prefers-reduced-motion: reduce) {
  html[data-ios-ui] { --ios-motion-duration: 0s; --ios-motion-exit: 0s; }
  html[data-ios-ui] #reviewReminder { animation: none !important; }
}
