/* Motion is concentrated in entrances and the controls a visitor actually uses. */
.punch-site .punch-hero-content { animation: none; }
.punch-site :is(.punch-hero h1, .punch-page-banner h1, .launcher-intro h1,
    .punch-auth-heading h1, .punch-profile-heading h1, .punch-payments-heading h1) {
    /* Keep primary text painted immediately, including the largest contentful paint. */
    animation: punch-title-settle var(--punch-motion-scene) var(--punch-ease-enter) both;
}
.punch-site .punch-hero-description {
    animation: punch-content-enter var(--punch-motion-ui) 60ms var(--punch-ease-enter) both;
}
.punch-site .punch-hero-actions {
    animation: punch-content-enter var(--punch-motion-ui) 100ms var(--punch-ease-enter) both;
}
.punch-site .punch-hero-content > .punch-socials {
    animation: punch-content-enter var(--punch-motion-ui) 140ms var(--punch-ease-enter) both;
}
.punch-site .punch-about-link {
    animation: punch-content-enter var(--punch-motion-ui) 180ms var(--punch-ease-enter) both;
}

/* JS manages both directions; its absence leaves the native disclosures usable. */
.punch-site .punch-motion-managed :is(.punch-dropdown-panel, .punch-navigation.is-open) {
    animation: none;
}
.punch-site .punch-dropdown.is-closing > summary > svg:last-child { transform: none; }
.punch-site .punch-disclosure-animating { overflow: clip; }
.punch-site .launcher-questions details > div { display: flow-root; }
.punch-site .launcher-questions summary[aria-expanded=false] > i { transform: none; }

/* Results enter where they occur; focus and the rest of the form stay in place. */
.punch-site :is(.alert, .punch-status:not(:empty), #noNotificationsLabel:not(.d-none),
    .tab-pane.active.show, .invalid-feedback) {
    animation: punch-feedback-enter var(--punch-motion-ui) var(--punch-ease-enter) both;
}
.punch-site .modal.fade .modal-dialog {
    transform: translateY(8px);
    transition: transform var(--punch-motion-ui) var(--punch-ease-enter);
}
.punch-site .modal.show .modal-dialog { transform: none; }
.punch-site [data-like-url] :is(.bi-heart-fill, .bi-hand-thumbs-up-fill) { display: inline-block; }
.punch-site [data-like-url].active :is(.bi-heart-fill, .bi-hand-thumbs-up-fill) {
    animation: punch-confirm var(--punch-motion-ui) var(--punch-ease);
}
.punch-server-copy { display: flex; flex-direction: column; align-items: center; gap: 8px; }
.punch-copy-address { user-select: text; }
[data-copy-check], .is-copied [data-copy-mark] { display: none; }
.is-copied [data-copy-check] { display: block; }
.punch-copy-status { min-height: 1.5em; margin: 0; font-size: 12px; color: var(--punch-text); }
.punch-site .punch-server-copy .is-copied {
    border-color: var(--punch-success);
    color: var(--punch-success);
}
.punch-site .is-copied [data-copy-icon] {
    animation: punch-confirm var(--punch-motion-ui) var(--punch-ease);
}

/* Directional cues respond to hover or keyboard focus, with stationary labels. */
.punch-site :is(.launcher-text-link, .launcher-java-note > a, .punch-profile-back,
    .punch-auth-back, .punch-payments-back) > :is(svg, i) {
    transition: translate var(--punch-motion-fast) var(--punch-ease);
}
.punch-site :is(.punch-profile-back, .punch-auth-back, .punch-payments-back):focus-visible > :is(svg, i) { translate: -3px 0; }
.punch-site .launcher-text-link:focus-visible > i { translate: 0 3px; }
.punch-site .launcher-java-note > a:focus-visible > i { translate: 2px 2px; }
@media (hover: hover) and (pointer: fine) {
    .punch-site :is(.punch-profile-back, .punch-auth-back, .punch-payments-back):hover > :is(svg, i) { translate: -3px 0; }
    .punch-site .launcher-text-link:hover > i { translate: 0 3px; }
    .punch-site .launcher-java-note > a:hover > i { translate: 2px 2px; }
}
.punch-site :is(.punch-news-item-arrow, .punch-news-read > svg,
    .punch-footer-text-link > svg, .punch-footer-top > svg) {
    transition: color var(--punch-motion-fast), translate var(--punch-motion-fast) var(--punch-ease);
}
.punch-site :is(.punch-news-item-link, .punch-news-featured-link):focus-visible
    :is(.punch-news-item-arrow, .punch-news-read > svg),
.punch-site .punch-footer-text-link:focus-visible > svg { translate: 3px 0; }
.punch-site .punch-footer-top:focus-visible > svg { translate: 0 -3px; }
@media (hover: hover) and (pointer: fine) {
    .punch-site :is(.punch-news-item-link, .punch-news-featured-link):hover
        :is(.punch-news-item-arrow, .punch-news-read > svg),
    .punch-site .punch-footer-text-link:hover > svg { translate: 3px 0; }
    .punch-site .punch-footer-top:hover > svg { translate: 0 -3px; }
}
@keyframes punch-title-settle {
    from { translate: 0 10px; }
    to { translate: 0 0; }
}
@keyframes punch-content-enter {
    from { opacity: 0; translate: 0 6px; }
    to { opacity: 1; translate: 0 0; }
}
@keyframes punch-feedback-enter {
    from { opacity: .5; translate: 0 3px; }
    to { opacity: 1; translate: 0 0; }
}
@keyframes punch-confirm {
    0% { scale: .85; }
    55% { scale: 1.08; }
    100% { scale: 1; }
}
@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    .punch-site:not([data-motion=full]) :is(.launcher-text-link, .launcher-java-note > a, .punch-profile-back,
        .punch-auth-back, .punch-payments-back) > :is(svg, i) { translate: none !important; }
    .punch-site:not([data-motion=full]) :is(.punch-news-item-arrow, .punch-news-read > svg,
        .punch-footer-text-link > svg, .punch-footer-top > svg) { translate: none !important; }
}
.punch-site[data-motion=reduce] :is(.launcher-text-link, .launcher-java-note > a,
    .punch-profile-back, .punch-auth-back, .punch-payments-back) > :is(svg, i) { translate: none !important; }
.punch-site[data-motion=reduce] :is(.punch-news-item-arrow, .punch-news-read > svg,
    .punch-footer-text-link > svg, .punch-footer-top > svg) { translate: none !important; }
