/* ==========================================================================
   WebPark Systems – efekty a animácie
   Všetko pohybové je obalené v prefers-reduced-motion: no-preference.
   ========================================================================== */

/* --- Jemná zrnitá textúra cez celú stránku ------------------------------ */
body::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    background-image: url("../img/grain.webp");
    background-size: 128px 128px;
    opacity: 0.06;
    mix-blend-mode: overlay;
}

/* Ambientný gradient za obsahom */
body::after {
    content: "";
    position: fixed;
    inset: -20vmax;
    z-index: -2;
    pointer-events: none;
    background:
        radial-gradient(40vmax 30vmax at 85% -5%, oklch(0.6 0.22 285 / 0.12), transparent 70%),
        radial-gradient(35vmax 30vmax at -5% 40%, oklch(0.76 0.14 215 / 0.1), transparent 70%);
}

/* --- Hero pozadie: orby + mriežka --------------------------------------- */
.hero__backdrop {
    position: absolute;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    overflow: hidden;
    mask-image: linear-gradient(to bottom, #000 65%, transparent 100%);
    -webkit-mask-image: linear-gradient(to bottom, #000 65%, transparent 100%);
}

.hero__orb {
    position: absolute;
    width: clamp(18rem, 40vw, 38rem);
    aspect-ratio: 1;
    border-radius: 50%;
    filter: blur(70px);
    opacity: 0.55;
}

.hero__orb--violet {
    top: -12%;
    left: -8%;
    background: radial-gradient(circle at 40% 40%, var(--brand-violet), transparent 65%);
}

.hero__orb--cyan {
    right: -10%;
    bottom: -18%;
    background: radial-gradient(circle at 60% 60%, var(--brand-cyan), transparent 65%);
}

.hero__grid {
    position: absolute;
    inset: 0;
    background-image:
        linear-gradient(to right, var(--color-border) 1px, transparent 1px),
        linear-gradient(to bottom, var(--color-border) 1px, transparent 1px);
    background-size: 56px 56px;
    mask-image: radial-gradient(ellipse 70% 60% at 50% 35%, #000 20%, transparent 75%);
    -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 35%, #000 20%, transparent 75%);
    opacity: 0.7;
}

/* --- Rotujúci gradientový okraj (flow diagram, výsledky kalkulačky) ---- */
.flow-diagram::before,
.card-glow::before {
    content: "";
    position: absolute;
    inset: -1px;
    z-index: -1;
    padding: 1.5px;
    border-radius: inherit;
    background: conic-gradient(from var(--angle), var(--brand-violet), var(--brand-cyan), var(--brand-mint), var(--brand-violet));
    mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
    -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
    -webkit-mask-composite: xor;
}

.card-glow::after {
    content: "";
    position: absolute;
    inset: 10% 5% -8%;
    z-index: -2;
    border-radius: inherit;
    background: conic-gradient(from var(--angle), var(--brand-violet), var(--brand-cyan), var(--brand-violet));
    filter: blur(40px);
    opacity: 0.35;
}

/* --- Žiara za kurzorom na kartách -------------------------------------- */
.bento__card::after,
.service-card::after,
.platform-card::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    border-radius: inherit;
    background: radial-gradient(420px circle at var(--glow-x) var(--glow-y), oklch(0.6 0.22 285 / 0.14), transparent 45%);
    opacity: 0;
    transition: opacity var(--duration-base) var(--ease-out);
    pointer-events: none;
}

.bento__card:hover::after,
.service-card:hover::after,
.platform-card:hover::after {
    opacity: 1;
}

/* --- Stavy pohybu -------------------------------------------------------- */
@media (prefers-reduced-motion: no-preference) {
    .hero__orb--violet {
        animation: orb-float-a 18s ease-in-out infinite alternate;
    }

    .hero__orb--cyan {
        animation: orb-float-b 22s ease-in-out infinite alternate;
    }

    .text-gradient {
        animation: gradient-pan 8s ease-in-out infinite alternate;
    }

    .flow-diagram::before,
    .card-glow::before,
    .card-glow::after {
        animation: spin-angle 6s linear infinite;
    }

    .status-dot {
        animation: pulse-dot 2.4s ease-in-out infinite;
    }

    /* 3D tilt – hodnoty --tilt-x/--tilt-y nastavuje main.js */
    @media (pointer: fine) {
        [data-tilt] {
            transform: perspective(900px) rotateX(var(--tilt-x)) rotateY(var(--tilt-y));
            transform-style: preserve-3d;
            transition: transform var(--duration-slow) var(--ease-out), border-color var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-out);
            will-change: transform;
        }

        [data-tilt].is-tilting {
            transition: transform 80ms linear, border-color var(--duration-base), box-shadow var(--duration-base);
        }
    }

    /* Lesk prebehne cez primárne tlačidlo */
    .button--primary::after {
        content: "";
        position: absolute;
        inset: 0;
        z-index: -1;
        background: linear-gradient(110deg, transparent 30%, oklch(1 0 0 / 0.38) 50%, transparent 70%);
        translate: -120% 0;
        transition: translate 0s;
    }

    .button--primary:hover::after {
        translate: 120% 0;
        transition: translate 800ms var(--ease-out);
    }

    /* Odhalenie pri scrollovaní (triedy pridáva main.js) */
    .reveal {
        opacity: 0;
        translate: 0 1.75rem;
        filter: blur(6px);
        transition: opacity 700ms var(--ease-out), translate 700ms var(--ease-out), filter 700ms var(--ease-out);
        transition-delay: calc(var(--reveal-index, 0) * 70ms);
    }

    .reveal.is-visible {
        opacity: 1;
        translate: 0 0;
        filter: blur(0);
    }

    /* Tok dát v hero – kroky sa postupne rozsvietia */
    .flow-diagram__steps::before {
        animation: dash-flow 1.2s linear infinite;
    }

    .flow-step {
        animation: flow-highlight 8s var(--ease-out) infinite;
    }

    .flow-step:nth-child(2) { animation-delay: 2s; }
    .flow-step:nth-child(3) { animation-delay: 4s; }
    .flow-step:nth-child(4) { animation-delay: 6s; }

    .flow-step__icon {
        animation: flow-icon 8s var(--ease-out) infinite;
    }

    .flow-step:nth-child(2) .flow-step__icon { animation-delay: 2s; }
    .flow-step:nth-child(3) .flow-step__icon { animation-delay: 4s; }
    .flow-step:nth-child(4) .flow-step__icon { animation-delay: 6s; }

    /* Výsledok kalkulačky „zabliká“ pri zmene (trieda is-updated z JS) */
    [data-roi-output].is-updated {
        animation: value-pop 420ms var(--ease-spring);
    }

    /* Dialóg: vstup aj výstup */
    .modal {
        opacity: 0;
        translate: 0 1.5rem;
        scale: 0.97;
        transition: opacity var(--duration-base) var(--ease-out), translate var(--duration-base) var(--ease-out), scale var(--duration-base) var(--ease-out), overlay var(--duration-base) allow-discrete, display var(--duration-base) allow-discrete;
    }

    .modal[open] {
        opacity: 1;
        translate: 0 0;
        scale: 1;
    }

    @starting-style {
        .modal[open] {
            opacity: 0;
            translate: 0 1.5rem;
            scale: 0.97;
        }
    }

    .modal::backdrop {
        opacity: 0;
        transition: opacity var(--duration-base) var(--ease-out), overlay var(--duration-base) allow-discrete, display var(--duration-base) allow-discrete;
    }

    .modal[open]::backdrop {
        opacity: 1;
    }

    @starting-style {
        .modal[open]::backdrop {
            opacity: 0;
        }
    }

    /* Úspešné odoslanie formulára */
    .form-status--success {
        animation: success-in 600ms var(--ease-spring);
    }

    /* Prechod medzi svetlou a tmavou témou (View Transitions API) */
    ::view-transition-old(root),
    ::view-transition-new(root) {
        animation: none;
        mix-blend-mode: normal;
    }

    ::view-transition-new(root) {
        animation: theme-reveal 650ms var(--ease-out);
    }
}

/* Bez JS alebo pri reduced motion je obsah vždy viditeľný */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
}

/* --- Keyframes ----------------------------------------------------------- */
@keyframes orb-float-a {
    to {
        translate: 8vw 6vh;
        scale: 1.15;
    }
}

@keyframes orb-float-b {
    to {
        translate: -10vw -8vh;
        scale: 0.9;
    }
}

@keyframes gradient-pan {
    to {
        background-position: 100% 0;
    }
}

@keyframes spin-angle {
    to {
        --angle: 360deg;
    }
}

@keyframes pulse-dot {
    50% {
        box-shadow: 0 0 0 8px oklch(0.7 0.16 155 / 0);
    }
}

@keyframes dash-flow {
    to {
        background-position: 0 12px;
    }
}

@keyframes flow-highlight {
    0%,
    22%,
    100% {
        background-color: transparent;
    }

    6%,
    16% {
        background-color: var(--color-accent-soft);
    }
}

@keyframes flow-icon {
    0%,
    22%,
    100% {
        background: var(--color-bg-elevated);
        color: var(--color-accent);
        box-shadow: none;
    }

    6%,
    16% {
        background: var(--brand-violet);
        color: #fff;
        box-shadow: 0 0 0 6px oklch(0.6 0.22 285 / 0.2), 0 8px 24px oklch(0.6 0.22 285 / 0.45);
    }
}

@keyframes value-pop {
    40% {
        scale: 1.06;
        color: var(--color-accent);
    }
}

@keyframes success-in {
    from {
        opacity: 0;
        scale: 0.95;
    }
}

@keyframes theme-reveal {
    from {
        clip-path: circle(0 at var(--theme-origin-x, 100%) var(--theme-origin-y, 0%));
    }

    to {
        clip-path: circle(150vmax at var(--theme-origin-x, 100%) var(--theme-origin-y, 0%));
    }
}
