/* Shared motion contract for public and authenticated ICMED surfaces. */
:root {
  --motion-instant: 120ms;
  --motion-fast: 160ms;
  --motion-medium: 220ms;
  --motion-reveal: 240ms;
  --motion-ease: cubic-bezier(0.2, 0, 0.2, 1);
  --motion-enter: cubic-bezier(0.16, 1, 0.3, 1);
}

body.public-shell main :is(.page-hero, .section, .section-alt, .page-copy, .page-aside-card, .section-header, .section-heading, .homepage-section-heading, .card, .panel-card, .journal-main-panel, .journal-policy-panel, .membership-tier-card) {
  animation: none !important;
}

body.public-shell.motion-ready main .motion-reveal {
  opacity: 0;
  transform: translate3d(0, 8px, 0);
  transition: opacity var(--motion-reveal) var(--motion-ease) var(--motion-delay, 0ms), transform var(--motion-reveal) var(--motion-enter) var(--motion-delay, 0ms);
  will-change: opacity, transform;
}

body.public-shell.motion-ready main .motion-reveal.is-visible {
  opacity: 1;
  transform: none;
  will-change: auto;
}

:is(.button, .button-outline, .button-muted, .btn, .admin-entry, .text-link, .filter-chip-row a, .pagination-link, .media-format-pill) {
  transition: color var(--motion-fast) var(--motion-ease), background-color var(--motion-fast) var(--motion-ease), border-color var(--motion-fast) var(--motion-ease), box-shadow var(--motion-fast) var(--motion-ease), transform var(--motion-fast) var(--motion-enter) !important;
}

:is(.button, .button-outline, .button-muted, .btn, .admin-entry, .text-link, .filter-chip-row a, .pagination-link, .media-format-pill):focus-visible {
  transform: none !important;
}

body.public-shell main :is(a.card, a.news-desk-card, a.news-crosslink-card, a.news-archive-page-card, a.partner-card, a.shop-card, a.paper-card, .media-tile:has(a), .homepage-image-focus-card, .homepage-news-card) {
  transition: border-color 200ms var(--motion-ease), box-shadow 200ms var(--motion-ease), background-color 200ms var(--motion-ease), transform 200ms var(--motion-enter) !important;
}

@media (hover: hover) and (pointer: fine) {
  body.public-shell :is(.button, .button-outline, .button-muted, .btn):hover {
    transform: translateY(-2px);
  }

  body.public-shell main :is(a.card, a.news-desk-card, a.news-crosslink-card, a.news-archive-page-card, a.partner-card, a.shop-card, a.paper-card, .media-tile:has(a), .homepage-image-focus-card, .homepage-news-card):hover {
    transform: translateY(-2px) !important;
  }
}

body.public-shell main :is(a.card, a.news-desk-card, a.news-crosslink-card, a.news-archive-page-card, a.partner-card, a.shop-card, a.paper-card, .media-tile:has(a), .homepage-image-focus-card, .homepage-news-card):focus-visible,
body.public-shell main :is(.membership-tier-card, .journal-policy-panel):focus-within {
  transform: none !important;
}

body:is(.admin-workspace-page, .portal-workspace-page, .auth-access-page) main {
  animation: workspace-enter var(--motion-medium) var(--motion-enter) both;
}

body.admin-workspace-page :is(.admin-quick-action, .admin-section-link, .admin-view-tab, .admin-dashboard-task-row, .admin-primary-action-card, .admin-dashboard-manage-grid a, .admin-account-card-link, .admin-message-thread, .website-map-card, .website-edit-chip, .admin-editor-button, .admin-menu-group summary),
body.portal-workspace-page :is(.portal-tab, .portal-tab-route, .portal-review-workspace-button, a.portal-paper-item, a.blind-review-queue-item, a.journal-contents-item, .portal-section-more, .portal-aside-action) {
  transition: color var(--motion-fast) var(--motion-ease), background-color var(--motion-fast) var(--motion-ease), border-color var(--motion-fast) var(--motion-ease), box-shadow var(--motion-fast) var(--motion-ease) !important;
}

body:is(.admin-workspace-page, .portal-workspace-page) :is(a, button, summary):focus-visible,
body.portal-workspace-page :is(.portal-review-workspace-button, .portal-paper-item, .blind-review-queue-item):focus-visible {
  transform: none !important;
}

body.admin-workspace-page .admin-menu-group summary::after,
body.admin-workspace-page .admin-menu-group summary::before {
  transition: transform var(--motion-fast) var(--motion-enter), opacity var(--motion-fast) var(--motion-ease) !important;
}

.website-edit-dialog {
  opacity: 1;
  transform: none;
  transition: opacity var(--motion-fast) var(--motion-ease), transform var(--motion-fast) var(--motion-enter), overlay var(--motion-fast) allow-discrete, display var(--motion-fast) allow-discrete;
}

.website-edit-dialog::backdrop {
  background: rgba(8, 13, 11, 0.72);
  transition: background-color var(--motion-fast) var(--motion-ease), overlay var(--motion-fast) allow-discrete, display var(--motion-fast) allow-discrete;
}

@starting-style {
  .website-edit-dialog[open] {
    opacity: 0;
    transform: translateY(5px) scale(0.995);
  }

  .website-edit-dialog[open]::backdrop {
    background: rgba(8, 13, 11, 0);
  }
}

form[aria-busy="true"] :is(button[type="submit"], input[type="submit"]) {
  cursor: progress !important;
}

button.is-pending {
  pointer-events: none;
  animation: pending-breathe 900ms var(--motion-ease) infinite alternate;
}

.reviewer-pdf-viewer.is-loading,
.pdf-frame.is-loading {
  background: linear-gradient(100deg, rgba(96, 146, 126, 0.08), rgba(96, 146, 126, 0.18), rgba(96, 146, 126, 0.08));
  background-size: 220% 100%;
  animation: loading-sheen 1.4s var(--motion-ease) infinite;
}

.password-strength-fill,
progress::-webkit-progress-value {
  transition: width 180ms var(--motion-ease), background-color 180ms var(--motion-ease) !important;
}

.flash-message {
  animation: feedback-enter 180ms var(--motion-enter) both !important;
}

.flash-message.is-dismissing {
  opacity: 0 !important;
  transform: translateY(-4px) !important;
  transition: opacity var(--motion-fast) var(--motion-ease), transform var(--motion-fast) var(--motion-ease) !important;
}

.cookie-banner {
  opacity: 0;
  transform: translateY(8px);
  pointer-events: none;
  transition: opacity 180ms var(--motion-ease), transform 180ms var(--motion-enter) !important;
}

.cookie-banner.is-visible {
  opacity: 1;
  transform: none;
  pointer-events: auto;
}

@keyframes workspace-enter {
  from { opacity: 0; transform: translateY(5px); }
  to { opacity: 1; transform: none; }
}

@keyframes feedback-enter {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: none; }
}

@keyframes pending-breathe {
  from { opacity: 0.72; }
  to { opacity: 0.94; }
}

@keyframes loading-sheen {
  to { background-position: -120% 0; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto !important; }

  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-duration: 0.01ms !important;
    transition-delay: 0ms !important;
  }

  body.public-shell.motion-ready main .motion-reveal,
  body.public-shell.motion-ready main .motion-reveal.is-visible,
  body:is(.admin-workspace-page, .portal-workspace-page, .auth-access-page) main,
  :is(a, button, summary, input, select, textarea):is(:hover, :focus, :focus-visible),
  .cookie-banner,
  .cookie-banner.is-visible,
  .flash-message,
  .flash-message.is-dismissing {
    opacity: 1 !important;
    transform: none !important;
  }

  button.is-pending {
    opacity: 0.82 !important;
    animation: none !important;
  }

  .reviewer-pdf-viewer.is-loading,
  .pdf-frame.is-loading {
    animation: none !important;
    background-position: 0 0 !important;
  }
}
