/* =========================================================================
   Awwwards-tier styles
   - Loader d'entrée
   - Cursor custom (dot + ring)
   - Helpers split text
   - Smooth scroll body fix
   ========================================================================= */

/* -------------------------------------------------------------------------
   LOADER D'ENTRÉE
   ----------------------------------------------------------------------- */

.app-loader {
    position: fixed;
    inset: 0;
    z-index: 9999;
    background: var(--color-bg-dark, #000);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    will-change: transform;
}

.app-loader__brand {
    font-family: var(--font-heading, 'Cormorant Garamond', serif);
    font-size: clamp(2.5rem, 6vw, 4.5rem);
    font-weight: 500;
    font-style: italic;
    color: var(--color-white, #fff);
    letter-spacing: -0.01em;
    line-height: 1;
    overflow: hidden;
    padding-bottom: 0.2em;
}

.app-loader__letter {
    display: inline-block;
}

.app-loader__brand em {
    color: var(--color-accent, #04adba);
    font-style: italic;
    font-weight: 400;
}

.app-loader__bar {
    width: clamp(120px, 18vw, 200px);
    height: 1px;
    margin-top: 2rem;
    background: var(--color-accent, #04adba);
    transform: scaleX(0);
    transform-origin: left center;
}

/* Désactive le loader pour reduce-motion */
@media (prefers-reduced-motion: reduce) {
    .app-loader { display: none !important; }
}

/* -------------------------------------------------------------------------
   CURSOR CUSTOM (desktop uniquement)
   ----------------------------------------------------------------------- */

@media (hover: hover) and (pointer: fine) {
    /* Cache le curseur natif */
    html, body { cursor: none; }
    a, button, [role="button"], input, select, textarea { cursor: none !important; }

    .cursor-dot,
    .cursor-ring {
        position: fixed;
        top: 0;
        left: 0;
        pointer-events: none;
        /* Au-dessus de tout, bandeau cookies Complianz compris (sinon le
           curseur natif étant caché, on ne voit plus où cliquer). */
        z-index: 2147483647;
        will-change: transform;
        transition: opacity 0.3s ease, width 0.3s ease, height 0.3s ease, background 0.3s ease, border 0.3s ease;
    }

    .cursor-dot {
        width: 6px;
        height: 6px;
        margin-left: -3px;
        margin-top: -3px;
        background: var(--color-accent, #04adba);
        border-radius: 50%;
    }

    .cursor-ring {
        width: 36px;
        height: 36px;
        margin-left: -18px;
        margin-top: -18px;
        border: 1px solid var(--color-accent, #04adba);
        border-radius: 50%;
        background: transparent;
    }

    .cursor-dot.is-hover {
        opacity: 0;
    }
    .cursor-ring.is-hover {
        width: 56px;
        height: 56px;
        margin-left: -28px;
        margin-top: -28px;
        background: rgba(4, 173, 186, 0.12);
        border-color: var(--color-accent, #04adba);
    }

    .cursor-dot.is-hidden,
    .cursor-ring.is-hidden {
        opacity: 0;
    }
}

/* Cursor désactivé sur touch / reduce-motion */
@media (prefers-reduced-motion: reduce), (hover: none), (pointer: coarse) {
    .cursor-dot,
    .cursor-ring {
        display: none !important;
    }
    html, body { cursor: auto; }
}

/* -------------------------------------------------------------------------
   SPLIT TEXT helpers
   ----------------------------------------------------------------------- */

.split-word,
.split-char {
    display: inline-block;
    overflow: hidden;
    line-height: inherit;
}

/* Conteneur des titres splittés : overflow caché pour effet "rise" */
[data-split] {
    overflow: hidden;
    /* Permet aux descendants en yPercent: 110 d'être cachés sous le titre */
}

/* -------------------------------------------------------------------------
   Lenis : fix pour que le scroll programmé ne smooth pas (instantané)
   ----------------------------------------------------------------------- */

html.lenis,
html.lenis body {
    height: auto;
}
.lenis.lenis-smooth {
    scroll-behavior: auto !important;
}
.lenis.lenis-smooth [data-lenis-prevent] {
    overscroll-behavior: contain;
}
.lenis.lenis-stopped {
    overflow: hidden;
}
.lenis.lenis-scrolling iframe {
    pointer-events: none;
}

/* -------------------------------------------------------------------------
   Magnetic buttons : will-change pour la performance
   ----------------------------------------------------------------------- */

.btn-primary,
.btn-accent,
[data-magnetic] {
    will-change: transform;
}

/* Note : les .reveal sont gérés par l'IntersectionObserver dans main.js
   (système robuste, indépendant de GSAP). GSAP ajoute des animations
   spéciales en plus (text reveal des titres, hero parallax, compteurs). */
