/* Cybinix motion tokens and reusable, reduced-motion-aware interaction layer. */
:root {
    --cyb-motion-fast: 160ms;
    --cyb-motion-base: 220ms;
    --cyb-motion-enter: 380ms;
    --cyb-motion-ease: cubic-bezier(.2, .75, .25, 1);
    --cyb-motion-distance: 12px;
}

@keyframes cyb-page-enter {
    from { opacity: 0; transform: translate3d(0, 10px, 0); }
    to { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes cyb-row-enter {
    from { opacity: 0; transform: translate3d(0, 6px, 0); }
    to { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes cyb-toast-enter {
    from { opacity: 0; transform: translate3d(0, 10px, 0); }
    to { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes cyb-price-enter {
    from { opacity: .35; transform: translate3d(0, 5px, 0); }
    to { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes cyb-value-update {
    from { opacity: .68; transform: translate3d(0, 2px, 0); }
    to { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes cyb-spinner {
    to { transform: rotate(360deg); }
}

.cyb-page-enter { animation: cyb-page-enter var(--cyb-motion-enter) var(--cyb-motion-ease) both; }

[data-cyb-reveal] {
    opacity: 0;
    transform: translate3d(0, var(--cyb-motion-distance), 0);
    transition: opacity var(--cyb-motion-enter) var(--cyb-motion-ease), transform var(--cyb-motion-enter) var(--cyb-motion-ease);
    transition-delay: var(--cyb-reveal-delay, 0ms);
}
[data-cyb-reveal].is-visible { opacity: 1; transform: none; }

.cyb-card-hover {
    transition: transform var(--cyb-motion-base) var(--cyb-motion-ease), box-shadow var(--cyb-motion-base) var(--cyb-motion-ease), border-color var(--cyb-motion-base) ease;
}
.cyb-card-hover:hover { transform: translate3d(0, -3px, 0); }

body :where(.btn, .btn-main, .btn-ghost, .topbar-action, .profile-button, .command-trigger) {
    transition: color var(--cyb-motion-fast) ease, background-color var(--cyb-motion-fast) ease,
        border-color var(--cyb-motion-fast) ease, box-shadow var(--cyb-motion-fast) ease,
        transform var(--cyb-motion-fast) var(--cyb-motion-ease), opacity var(--cyb-motion-fast) ease;
}
body :where(.btn, .btn-main, .btn-ghost):not(:disabled):not([aria-disabled="true"]):hover { transform: translate3d(0, -1px, 0); }
body :where(.btn, .btn-main, .btn-ghost):not(:disabled):active { transform: scale(.985); }
body :where(.btn, .btn-main, .btn-ghost):disabled:not([aria-busy="true"]) { cursor: not-allowed; opacity: .62; }
body :where(.btn, .btn-main, .btn-ghost):disabled[aria-busy="true"] { cursor: wait; opacity: .72; }

body :where(input, textarea, select, .form-control, .form-select) {
    transition: border-color var(--cyb-motion-fast) ease, box-shadow var(--cyb-motion-fast) ease, background-color var(--cyb-motion-fast) ease;
}

.admin-table tbody tr { transition: background-color var(--cyb-motion-fast) ease; }
.status-badge,
.orchid-nav__link,
.orchid-nav__link i,
.form-check-input,
.alert { transition: color var(--cyb-motion-fast) ease, background-color var(--cyb-motion-fast) ease, border-color var(--cyb-motion-fast) ease, box-shadow var(--cyb-motion-fast) ease, transform var(--cyb-motion-fast) var(--cyb-motion-ease); }
.admin-nav .orchid-nav__link:not(.orchid-nav-group__toggle):hover > i { transform: translate3d(1px, 0, 0); }
.admin-main .alert { animation: cyb-row-enter 220ms var(--cyb-motion-ease) both; }
.cyb-row-enter { animation: cyb-row-enter 220ms var(--cyb-motion-ease) both; }
.cyb-row-leaving { opacity: 0; transform: translate3d(0, -4px, 0); transition: opacity 150ms ease, transform 150ms ease; pointer-events: none; }

.profile-menu {
    opacity: 0;
    transform: translate3d(0, -5px, 0) scale(.98);
    transform-origin: top right;
    transition: opacity var(--cyb-motion-fast) var(--cyb-motion-ease), transform var(--cyb-motion-fast) var(--cyb-motion-ease);
}
.profile-menu.is-open { opacity: 1; transform: none; }

.orchid-nav-group__panel {
    max-height: 0;
    overflow: hidden;
    opacity: 0;
    transform: translate3d(0, -3px, 0);
    transition: max-height var(--cyb-motion-base) var(--cyb-motion-ease), opacity var(--cyb-motion-fast) ease, transform var(--cyb-motion-base) var(--cyb-motion-ease);
}
.orchid-nav-group__panel.is-expanded { max-height: 480px; opacity: 1; transform: none; }

.orchid-backdrop { transition: opacity var(--cyb-motion-base) ease, visibility var(--cyb-motion-base) ease; }
.orchid-sidebar { transition: transform var(--cyb-motion-base) var(--cyb-motion-ease), width var(--cyb-motion-base) var(--cyb-motion-ease); }

.command-palette {
    opacity: 0;
    transition: opacity var(--cyb-motion-fast) ease;
}
.command-palette.is-open { opacity: 1; }
.command-backdrop { opacity: 0; transition: opacity var(--cyb-motion-fast) ease; }
.command-palette.is-open .command-backdrop { opacity: 1; }
.command-dialog {
    opacity: 0;
    transform: translate3d(0, -8px, 0) scale(.99);
    transition: opacity var(--cyb-motion-base) var(--cyb-motion-ease), transform var(--cyb-motion-base) var(--cyb-motion-ease);
    animation: none !important;
}
.command-palette.is-open .command-dialog { opacity: 1; transform: none; }

.site-toast:not(.is-leaving) { animation: cyb-toast-enter 220ms var(--cyb-motion-ease) both; }
.site-toast.is-leaving { opacity: 0; transform: translate3d(0, 8px, 0); transition: opacity 160ms ease, transform 160ms ease; }
.new-price.cyb-price-enter { animation: cyb-price-enter 220ms var(--cyb-motion-ease) both; }
.cyb-value-updated { animation: cyb-value-update 260ms var(--cyb-motion-ease) both; }
.orchid-backdrop:not([hidden]) { visibility: visible; }

button[aria-busy="true"]::after,
a[aria-busy="true"]::after {
    content: "";
    display: inline-block;
    width: .9em;
    height: .9em;
    margin-inline-start: .55em;
    border: 2px solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    vertical-align: -.1em;
    animation: cyb-spinner 650ms linear infinite;
}

@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto !important; }
    *, *::before, *::after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        scroll-behavior: auto !important;
        transition-duration: .01ms !important;
    }
    [data-cyb-reveal] { opacity: 1 !important; transform: none !important; }
    .cyb-card-hover:hover,
    body :where(.btn, .btn-main, .btn-ghost):not(:disabled):hover,
    body :where(.btn, .btn-main, .btn-ghost):not(:disabled):active { transform: none !important; }
}
