/**
 * Narhval — Costellazione homepage
 *
 * Canvas Engine + nodi HTML accessibili.
 * Versione asimmetrica e stratificata.
 */


/* ==========================================================
   SEZIONE
   ========================================================== */

/*
 * Il contenuto WPBakery contiene colonne flottanti.
 * Senza questo, la Costellazione (overflow:hidden) viene
 * spinta sotto le colonne e il margin-top negativo non funziona.
 */

body.home .wpb-content-wrapper {
    display: flow-root;
}


.narhval-constellation{

    /*
    altezza della dissolvenza sopra il video
    */

    --narhval-overlap: 220px;

    position:relative;
    z-index:2;
    isolation:isolate;

    width:100vw;
    min-height:100vh;

    margin-left:calc(50% - 50vw);

    /*
    sale sopra la parte finale dello slider
    */

    margin-top:calc(var(--narhval-overlap) * -1);

    /*
    recupera lo spazio occupato
    */

    padding-top:var(--narhval-overlap);

    overflow:hidden;

    /*
    dissolvenza: la sezione parte trasparente
    e diventa nera, coprendo progressivamente il video
    */

    -webkit-mask-image:
        linear-gradient(
            to bottom,
            rgba(0,0,0,0) 0%,
            rgba(0,0,0,.1) 20%,
            rgba(0,0,0,.32) 42%,
            rgba(0,0,0,.62) 64%,
            rgba(0,0,0,.86) 84%,
            #000 100%
        ),
        linear-gradient(#000, #000);
    -webkit-mask-size:
        100% var(--narhval-overlap),
        100% 100%;
    -webkit-mask-position:
        top,
        0 var(--narhval-overlap);
    -webkit-mask-repeat: no-repeat;

    mask-image:
        linear-gradient(
            to bottom,
            rgba(0,0,0,0) 0%,
            rgba(0,0,0,.1) 20%,
            rgba(0,0,0,.32) 42%,
            rgba(0,0,0,.62) 64%,
            rgba(0,0,0,.86) 84%,
            #000 100%
        ),
        linear-gradient(#000, #000);
    mask-size:
        100% var(--narhval-overlap),
        100% 100%;
    mask-position:
        top,
        0 var(--narhval-overlap);
    mask-repeat: no-repeat;

    color:#f2f0e8;

    background:
        radial-gradient(
            ellipse at 47% 48%,
            rgba(255,255,255,.024) 0%,
            rgba(255,255,255,.009) 30%,
            transparent 66%
        ),

        radial-gradient(
            ellipse at 17% 75%,
            rgba(255,255,255,.009) 0%,
            transparent 38%
        ),

        radial-gradient(
            ellipse at 83% 16%,
            rgba(255,255,255,.008) 0%,
            transparent 34%
        ),

        #020202;

}


/*
 * Chiarori ambientali.
 * Non sono stelle: servono solo a evitare un nero uniforme.
 */

.narhval-constellation::before {
    content: "";
    position: absolute;
    inset: -12%;
    z-index: 0;

    pointer-events: none;

    background:
        radial-gradient(
            ellipse at 42% 52%,
            rgba(242, 240, 232, 0.027) 0%,
            rgba(242, 240, 232, 0.009) 24%,
            transparent 57%
        ),
        radial-gradient(
            circle at 80% 26%,
            rgba(242, 240, 232, 0.012) 0%,
            transparent 27%
        );

    opacity: 0.9;
    transform: scale(1.04);

    animation:
        narhval-ambient-breathe 18s ease-in-out infinite;
}


.narhval-constellation::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;

    pointer-events: none;

    background:
        linear-gradient(
            90deg,
            rgba(0, 0, 0, 0.15) 0%,
            transparent 18%,
            transparent 82%,
            rgba(0, 0, 0, 0.22) 100%
        ),
        linear-gradient(
            180deg,
            rgba(0, 0, 0, 0.08) 0%,
            transparent 20%,
            transparent 80%,
            rgba(0, 0, 0, 0.2) 100%
        );
}


/* ==========================================================
   CONTENITORE
   ========================================================== */

.narhval-constellation__inner {
    position: relative;
    z-index: 2;

    display: flex;
    align-items: center;
    justify-content: center;

    width: 100%;
    min-height: 100vh;

    padding:
        clamp(42px, 6vw, 96px)
        clamp(32px, 6vw, 108px);

    box-sizing: border-box;
}


/* ==========================================================
   MAPPA
   ========================================================== */

.narhval-constellation__map {
    position: relative;

    width: min(1480px, 100%);
    height: clamp(650px, 78vh, 930px);

    margin: 0 auto;

    opacity: 0;
    transform: translateY(20px) scale(0.992);

    transition:
        opacity 1.4s ease,
        transform 1.6s cubic-bezier(0.22, 1, 0.36, 1);
}


/* Entrata della sezione */

.narhval-constellation.is-visible
.narhval-constellation__map {
    opacity: 1;
    transform: translateY(0) scale(1);
}


/* ==========================================================
   CANVAS
   ========================================================== */

.narhval-constellation__canvas {
    position: absolute;
    inset: 0;
    z-index: 1;

    display: block;

    width: 100%;
    height: 100%;

    pointer-events: none;
}


/* ==========================================================
   NODI
   ========================================================== */

.narhval-constellation__node {
    position: absolute;
    z-index: 3;

    display: inline-flex;
    align-items: center;
    gap: 13px;

    color: rgba(242, 240, 232, 0.7);
    text-decoration: none;

    opacity: 0.94;

    transform: translate(-50%, -50%);
    transform-origin: center;

    transition:
        color 500ms ease,
        opacity 500ms ease,
        filter 500ms ease;

    -webkit-tap-highlight-color: transparent;
}


.narhval-constellation__node:hover,
.narhval-constellation__node:focus,
.narhval-constellation__node:focus-visible,
.narhval-constellation__node.is-active {
    color: rgba(255, 255, 255, 0.98);
    opacity: 1;
    outline: none;
}


/* Reazione complessiva quando Catalogo è attivo */

.narhval-constellation.is-catalogo-active
.narhval-constellation__node:not(
    .narhval-constellation__node--catalogo
) {
    color: rgba(242, 240, 232, 0.9);
    opacity: 1;
}


/* ==========================================================
   PUNTO-STELLA
   ========================================================== */

.narhval-constellation__point {
    position: relative;
    flex: 0 0 auto;

    display: block;

    width: 6px;
    height: 6px;

    border-radius: 50%;

    background: rgba(255, 255, 255, 0.96);

    box-shadow:
        0 0 4px rgba(255, 255, 255, 0.9),
        0 0 12px rgba(242, 240, 232, 0.4),
        0 0 26px rgba(242, 240, 232, 0.14);

    animation:
        narhval-star-breathe 5.8s ease-in-out infinite;

    transition:
        transform 500ms cubic-bezier(0.22, 1, 0.36, 1),
        box-shadow 500ms ease,
        opacity 500ms ease;
}


/* Primo anello */

.narhval-constellation__point::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;

    width: 28px;
    height: 28px;

    border: 1px solid rgba(242, 240, 232, 0.07);
    border-radius: 50%;

    opacity: 0;

    transform:
        translate(-50%, -50%)
        scale(0.45);

    transition:
        opacity 500ms ease,
        transform 700ms cubic-bezier(0.22, 1, 0.36, 1);
}


/* Alone più ampio */

.narhval-constellation__point::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;

    width: 44px;
    height: 44px;

    border-radius: 50%;

    background:
        radial-gradient(
            circle,
            rgba(255, 255, 255, 0.13) 0%,
            rgba(242, 240, 232, 0.038) 34%,
            transparent 72%
        );

    opacity: 0.25;

    transform:
        translate(-50%, -50%)
        scale(0.76);

    transition:
        opacity 500ms ease,
        transform 700ms cubic-bezier(0.22, 1, 0.36, 1);
}


/* Hover della stella */

.narhval-constellation__node:hover
.narhval-constellation__point,
.narhval-constellation__node:focus
.narhval-constellation__point,
.narhval-constellation__node:focus-visible
.narhval-constellation__point,
.narhval-constellation__node.is-active
.narhval-constellation__point {
    transform: scale(1.55);

    box-shadow:
        0 0 7px rgba(255, 255, 255, 1),
        0 0 20px rgba(255, 255, 255, 0.64),
        0 0 42px rgba(242, 240, 232, 0.28);
}

.narhval-constellation__node:hover
.narhval-constellation__point::before,
.narhval-constellation__node:focus-visible
.narhval-constellation__point::before,
.narhval-constellation__node.is-active
.narhval-constellation__point::before {
    opacity: 1;
    transform:
        translate(-50%, -50%)
        scale(1);
}

.narhval-constellation__node:hover
.narhval-constellation__point::after,
.narhval-constellation__node:focus-visible
.narhval-constellation__point::after,
.narhval-constellation__node.is-active
.narhval-constellation__point::after {
    opacity: 0.7;
    transform:
        translate(-50%, -50%)
        scale(1.1);
}


/* ==========================================================
   ETICHETTE
   ========================================================== */

.narhval-constellation__label {
    display: block;

    font-size: 11px;
    font-weight: 400;
    line-height: 1;
    letter-spacing: 0.32em;
    text-transform: uppercase;
    white-space: nowrap;

    opacity: 0;
    transform: translateX(-6px);

    transition:
        opacity 1.2s ease,
        transform 1.4s cubic-bezier(0.22, 1, 0.36, 1),
        letter-spacing 700ms cubic-bezier(0.22, 1, 0.36, 1);
}


.narhval-constellation__node:hover
.narhval-constellation__label,
.narhval-constellation__node:focus-visible
.narhval-constellation__label,
.narhval-constellation__node.is-active
.narhval-constellation__label {
    letter-spacing: 0.38em;
}


/* Catalogo: nodo centrale */

.narhval-constellation__node--catalogo {
    gap: 16px;
}

.narhval-constellation__node--catalogo
.narhval-constellation__point {
    width: 9px;
    height: 9px;
}

.narhval-constellation__node--catalogo
.narhval-constellation__label {
    font-size: 13px;
    letter-spacing: 0.42em;
    color: rgba(255, 255, 255, 0.9);
}

.narhval-constellation__node--catalogo:hover
.narhval-constellation__label,
.narhval-constellation__node--catalogo.is-active
.narhval-constellation__label {
    letter-spacing: 0.48em;
}


/* Etichette a sinistra del punto */

.narhval-constellation__node--sommersi,
.narhval-constellation__node--manifesto {
    flex-direction: row-reverse;
}

.narhval-constellation__node--sommersi
.narhval-constellation__label,
.narhval-constellation__node--manifesto
.narhval-constellation__label {
    transform: translateX(6px);
}


/* ==========================================================
   POSIZIONI (desktop)
   Distribuzione asimmetrica intorno a Catalogo.
   ========================================================== */

.narhval-constellation__node--catalogo      { left: 46%; top: 50%; }
.narhval-constellation__node--sommersi      { left: 19%; top: 30%; }
.narhval-constellation__node--emersi        { left: 75%; top: 22%; }
.narhval-constellation__node--interspazi    { left: 82%; top: 64%; }
.narhval-constellation__node--manifesto     { left: 24%; top: 77%; }
.narhval-constellation__node--casa-editrice { left: 58%; top: 86%; }


/* ==========================================================
   COMPARSA PROGRESSIVA
   stage-2 stelle · stage-3 linee (canvas) · stage-4 nomi
   ========================================================== */

.narhval-constellation__point {
    opacity: 0;
}

.narhval-constellation.narhval-stage-2
.narhval-constellation__point {
    opacity: 1;
}

.narhval-constellation.narhval-stage-4
.narhval-constellation__node:not(.narhval-constellation__node--catalogo)
.narhval-constellation__label {
    opacity: 1;
    transform: translateX(0);
}

/* Catalogo entra per ultimo */

.narhval-constellation.narhval-stage-5
.narhval-constellation__node--catalogo
.narhval-constellation__label {
    opacity: 1;
    transform: translateX(0);
}


/* ==========================================================
   ANIMAZIONI
   ========================================================== */

@keyframes narhval-ambient-breathe {
    0%,
    100% {
        opacity: 0.75;
        transform: scale(1.04);
    }

    50% {
        opacity: 1;
        transform: scale(1.07);
    }
}

@keyframes narhval-star-breathe {
    0%,
    100% {
        filter: brightness(0.92);
    }

    50% {
        filter: brightness(1.12);
    }
}


/* ==========================================================
   MOVIMENTO RIDOTTO
   ========================================================== */

@media (prefers-reduced-motion: reduce) {

    .narhval-constellation::before,
    .narhval-constellation__point {
        animation: none;
    }

    .narhval-constellation__map,
    .narhval-constellation__label,
    .narhval-constellation__point {
        transition: none;
    }
}


/* ==========================================================
   MOBILE
   Composizione verticale: Catalogo al centro con il nome
   sotto il punto, le stelle sui lati esterni.
   ========================================================== */

@media screen and (max-width: 767px) {

    .narhval-constellation {
        --narhval-overlap: 120px;
    }

    .narhval-constellation__inner {
        padding: 32px 20px;
    }

    .narhval-constellation__map {
        height: clamp(560px, 82vh, 720px);
    }

    /* Area di tocco più ampia, il punto resta dov'è */

    .narhval-constellation__node {
        padding: 14px 10px;
    }

    .narhval-constellation__label {
        font-size: 10px;
        letter-spacing: 0.26em;
    }


    /* Catalogo: punto sopra, nome sotto */

    .narhval-constellation__node--catalogo {
        flex-direction: column;
        gap: 14px;
    }

    .narhval-constellation__node--catalogo
    .narhval-constellation__label {
        font-size: 12px;
        letter-spacing: 0.34em;

        /* compensa lo spazio dopo l'ultima lettera */
        padding-left: 0.34em;
    }


    /* Punto sul lato esterno, nome verso il centro */

    .narhval-constellation__node--sommersi,
    .narhval-constellation__node--manifesto,
    .narhval-constellation__node--casa-editrice {
        flex-direction: row;
    }

    .narhval-constellation__node--emersi,
    .narhval-constellation__node--interspazi {
        flex-direction: row-reverse;
    }

    .narhval-constellation__node--sommersi
    .narhval-constellation__label,
    .narhval-constellation__node--manifesto
    .narhval-constellation__label {
        transform: translateX(-6px);
    }

    .narhval-constellation__node--emersi
    .narhval-constellation__label,
    .narhval-constellation__node--interspazi
    .narhval-constellation__label {
        transform: translateX(6px);
    }


    /* Posizioni */

    .narhval-constellation__node--catalogo      { left: 50%; top: 46%; }
    .narhval-constellation__node--sommersi      { left: 35%; top: 12%; }
    .narhval-constellation__node--emersi        { left: 66%; top: 26%; }
    .narhval-constellation__node--interspazi    { left: 68%; top: 66%; }
    .narhval-constellation__node--manifesto     { left: 33%; top: 78%; }
    .narhval-constellation__node--casa-editrice { left: 56%; top: 92%; }
}