/* ==========================================================================
   MILANO PORTOFINO 2026 — Italian Grand Touring / Editorial Luxury
   HTML5 + CSS3 + Vanilla JS — nessun framework
   ========================================================================== */

/* ========================= TOKENS ========================= */
:root {
    --font-display: 'Cormorant Garamond', 'EB Garamond', Georgia, serif;
    --font-sans: 'Inter', 'Helvetica Neue', Helvetica, Arial, sans-serif;

    --color-ink: #11110F;
    --color-ink-soft: #1C1B18;
    --color-ivory: #F2EFE7;
    --color-warm-white: #F8F6F0;
    --color-petrol: #17312F;
    --color-oxblood: #6A211D;
    --color-champagne: #B99A67;
    --color-stone: #CBC5B9;
    --color-muted: #77736C;
    --color-line-dark: rgba(17, 17, 15, 0.16);
    --color-line-light: rgba(242, 239, 231, 0.22);

    --space-xs: clamp(0.5rem, 0.8vw, 0.75rem);
    --space-sm: clamp(1rem, 1.6vw, 1.5rem);
    --space-md: clamp(2rem, 3.4vw, 3.5rem);
    --space-lg: clamp(4.5rem, 8vw, 8.75rem);
    --space-xl: clamp(7rem, 14vw, 13.75rem);

    --container: 88rem;
    --gutter: clamp(1.25rem, 4vw, 4rem);

    --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
    --ease-luxe: cubic-bezier(0.65, 0.05, 0, 1);
    --dur-fast: 280ms;
    --dur-med: 550ms;
    --dur-slow: 800ms;

    --header-h: 5rem;
}

/* ========================= RESET ========================= */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html {
    scroll-behavior: smooth;
    -webkit-text-size-adjust: 100%;
}

body {
    font-family: var(--font-sans);
    font-size: 1rem;
    line-height: 1.65;
    color: var(--color-ink);
    background-color: var(--color-warm-white);
    -webkit-font-smoothing: antialiased;
    overflow-x: hidden;
}

img { display: block; max-width: 100%; height: auto; }
ul, ol { list-style: none; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
address { font-style: normal; }

:focus-visible {
    outline: 2px solid var(--color-champagne);
    outline-offset: 3px;
}

::selection { background: var(--color-petrol); color: var(--color-ivory); }

.skip-link {
    position: fixed;
    top: -100%;
    left: 1rem;
    z-index: 300;
    padding: 0.75rem 1.25rem;
    background: var(--color-ink);
    color: var(--color-ivory);
    font-size: 0.85rem;
    transition: top var(--dur-fast) var(--ease-out);
}
.skip-link:focus { top: 1rem; }

/* ========================= TYPOGRAPHY ========================= */
.label {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.32em;
    text-transform: uppercase;
    color: var(--color-oxblood);
    margin-bottom: var(--space-md);
}
.label--light { color: var(--color-champagne); }

.section-inner {
    max-width: var(--container);
    margin-inline: auto;
    padding-inline: var(--gutter);
}

/* Mask reveal per i titoli chiave */
.reveal-mask {
    display: block;
    overflow: hidden;
}
.reveal-inner {
    display: block;
    transform: translateY(110%);
    transition: transform var(--dur-slow) var(--ease-luxe);
    will-change: transform;
}
.is-revealed .reveal-inner { transform: translateY(0); }

/* Link testuale con linea che si estende */
.text-link {
    display: inline-flex;
    align-items: baseline;
    gap: 0.6rem;
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    padding-bottom: 0.5rem;
    position: relative;
}
.text-link::after {
    content: '';
    position: absolute;
    left: 0;
    bottom: 0;
    width: 2.5rem;
    height: 1px;
    background: currentColor;
    transition: width var(--dur-med) var(--ease-luxe);
}
.text-link-arrow { transition: transform var(--dur-med) var(--ease-luxe); display: inline-block; }
.text-link:hover::after { width: 100%; }
.text-link:hover .text-link-arrow { transform: translateX(6px); }

/* ========================= HEADER ========================= */
.site-header {
    position: fixed;
    inset: 0 0 auto 0;
    z-index: 100;
    transition: background-color var(--dur-med) var(--ease-out), box-shadow var(--dur-med) var(--ease-out);
}
.header-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-md);
    max-width: var(--container);
    margin-inline: auto;
    padding-inline: var(--gutter);
    height: var(--header-h);
    transition: height var(--dur-med) var(--ease-out);
}
.site-header.is-scrolled {
    background-color: rgba(248, 246, 240, 0.96);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    box-shadow: 0 1px 0 var(--color-line-dark);
}
.site-header.is-scrolled .header-inner { height: 3.75rem; }

.brand { position: relative; display: block; width: 11.25rem; flex-shrink: 0; }
.brand-logo { width: 100%; height: auto; transition: opacity var(--dur-med) var(--ease-out); }
.brand-logo--white { position: absolute; inset: 0; opacity: 0; }
.site-header:not(.is-scrolled) .brand-logo--color { opacity: 0; }
.site-header:not(.is-scrolled) .brand-logo--white { opacity: 1; }
.site-header.menu-open .brand-logo--color { opacity: 0; }
.site-header.menu-open .brand-logo--white { opacity: 1; }

.main-nav { display: flex; gap: clamp(1.25rem, 2.5vw, 2.75rem); }
.nav-link {
    font-size: 0.78rem;
    font-weight: 500;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    padding: 0.35rem 0;
    position: relative;
    color: var(--color-ivory);
    transition: color var(--dur-fast) var(--ease-out);
}
.nav-link::after {
    content: '';
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    height: 1px;
    background: currentColor;
    transform: scaleX(0);
    transform-origin: left;
    transition: transform var(--dur-med) var(--ease-luxe);
}
.nav-link:hover::after,
.nav-link.is-active::after { transform: scaleX(1); }
.site-header.is-scrolled .nav-link { color: var(--color-ink); }
.site-header.menu-open .nav-link { color: var(--color-ivory); }

.nav-cta {
    display: inline-flex;
    align-items: center;
    gap: 0.55rem;
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--color-ink);
    background: var(--color-ivory);
    padding: 0.7rem 1.35rem;
    border: 1px solid transparent;
    transition: background-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);
}
.site-header.is-scrolled .nav-cta {
    background: var(--color-ink);
    color: var(--color-ivory);
}
.nav-cta:hover { background: var(--color-oxblood); color: var(--color-ivory); }
.nav-cta-arrow { display: inline-block; transition: transform var(--dur-med) var(--ease-luxe); }
.nav-cta:hover .nav-cta-arrow { transform: translateX(5px); }

.menu-toggle {
    display: none;
    position: relative;
    z-index: 210;
    width: 2.75rem;
    height: 2.75rem;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 7px;
}
.menu-toggle-line {
    display: block;
    width: 1.75rem;
    height: 1.5px;
    background: var(--color-ivory);
    transition: transform var(--dur-med) var(--ease-luxe), background-color var(--dur-fast) var(--ease-out);
}
.site-header.is-scrolled .menu-toggle-line { background: var(--color-ink); }
.menu-toggle[aria-expanded="true"] .menu-toggle-line { background: var(--color-ivory); }
.menu-toggle[aria-expanded="true"] .menu-toggle-line:first-child { transform: translateY(4.25px) rotate(45deg); }
.menu-toggle[aria-expanded="true"] .menu-toggle-line:last-child { transform: translateY(-4.25px) rotate(-45deg); }

/* Menu mobile fullscreen */
.mobile-menu {
    position: fixed;
    inset: 0;
    z-index: 200;
    background: var(--color-ink);
    color: var(--color-ivory);
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: var(--gutter);
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--dur-med) var(--ease-out), visibility 0s var(--dur-med);
}
.mobile-menu.is-open {
    opacity: 1;
    visibility: visible;
    transition: opacity var(--dur-med) var(--ease-out), visibility 0s;
}
.mobile-menu[hidden] { display: flex; }
.mobile-menu-link {
    display: flex;
    align-items: baseline;
    gap: 1.25rem;
    padding: 0.6rem 0;
    font-family: var(--font-display);
    font-size: clamp(2.6rem, 11vw, 4.5rem);
    font-weight: 400;
    line-height: 1.1;
    border-bottom: 1px solid var(--color-line-light);
    opacity: 0;
    transform: translateY(24px);
    transition: opacity var(--dur-med) var(--ease-out), transform var(--dur-med) var(--ease-luxe);
}
.mobile-menu.is-open .mobile-menu-link { opacity: 1; transform: translateY(0); }
.mobile-menu.is-open .mobile-menu-link:nth-child(1) { transition-delay: 80ms; }
.mobile-menu.is-open .mobile-menu-link:nth-child(2) { transition-delay: 150ms; }
.mobile-menu.is-open .mobile-menu-link:nth-child(3) { transition-delay: 220ms; }
.mobile-menu.is-open .mobile-menu-link:nth-child(4) { transition-delay: 290ms; }
.mobile-menu.is-open .mobile-menu-link:nth-child(5) { transition-delay: 360ms; }
.mobile-menu-num {
    font-family: var(--font-sans);
    font-size: 0.75rem;
    letter-spacing: 0.3em;
    color: var(--color-champagne);
}
.mobile-menu-foot {
    position: absolute;
    bottom: var(--space-md);
    left: var(--gutter);
    right: var(--gutter);
    display: flex;
    justify-content: space-between;
    font-size: 0.72rem;
    letter-spacing: 0.25em;
    text-transform: uppercase;
    color: var(--color-muted);
}

/* ========================= HERO ========================= */
.hero {
    position: relative;
    height: 100svh;
    min-height: 34rem;
    overflow: hidden;
    background: var(--color-ink);
    color: var(--color-ivory);
}
.hero-media {
    position: absolute;
    inset: 0;
    overflow: hidden;
    animation: heroDrift 30s ease-in-out infinite alternate;
    will-change: transform;
}
.hero-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: 50% 62%;
    transform: scale(1.02);
    will-change: transform;
}
@keyframes heroDrift {
    from { transform: scale(1.04) translate(0, 0); }
    to { transform: scale(1.14) translate(-1.4%, -1.1%); }
}
.hero-overlay {
    position: absolute;
    inset: 0;
    background:
        linear-gradient(to bottom, rgba(7, 30, 53, 0.18) 0%, rgba(5, 18, 34, 0.28) 100%),
        radial-gradient(ellipse 80% 60% at 30% 78%, rgba(17, 17, 15, 0.42) 0%, rgba(17, 17, 15, 0) 70%),
        linear-gradient(to top, rgba(17, 17, 15, 0.8) 0%, rgba(17, 17, 15, 0.34) 45%, rgba(17, 17, 15, 0.45) 100%);
    will-change: opacity;
}
.hero-content {
    position: relative;
    z-index: 2;
    height: 100%;
    max-width: var(--container);
    margin-inline: auto;
    padding-inline: var(--gutter);
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding-bottom: clamp(4rem, 9vh, 7rem);
    will-change: transform;
}
.hero-edition {
    position: absolute;
    top: calc(var(--header-h) + clamp(1rem, 4vh, 3rem));
    right: var(--gutter);
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.34em;
    text-transform: uppercase;
    color: var(--color-ivory);
    writing-mode: vertical-rl;
}
.hero-title {
    font-family: var(--font-display);
    font-weight: 400;
    line-height: 0.92;
    letter-spacing: -0.015em;
    text-transform: uppercase;
}
.hero-title-line { display: block; }
.hero-meta {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--space-md);
    margin-top: clamp(1.5rem, 4vh, 3rem);
}
.hero-date-num {
    display: block;
    font-family: var(--font-display);
    font-size: clamp(2.2rem, 4.5vw, 4rem);
    line-height: 1;
}
.hero-date-month {
    display: block;
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    margin-top: 0.4rem;
    color: var(--color-stone);
}
.hero-tagline {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 0.8rem;
    max-width: min(32rem, 42vw);
    font-family: var(--font-display);
    font-size: clamp(1.15rem, 1.8vw, 1.6rem);
    line-height: 1.25;
    text-align: right;
    color: var(--color-ivory);
}
.hero-title--logo {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    width: min(78vw, 74rem);
    text-transform: none;
}
.hero-logo-wrap {
    display: block;
    width: 100%;
}
.hero-brand-logo {
    display: block;
    width: 100%;
    height: auto;
}
.hero-title-special {
    align-self: flex-end;
    margin-top: clamp(0.35rem, 1.2vh, 1rem);
    padding-right: clamp(0.5rem, 1vw, 1rem);
    color: var(--color-champagne);
    font-family: var(--font-display);
    font-size: clamp(4.35rem, 10.2vw, 10.2rem);
    font-style: italic;
    font-weight: 400;
    line-height: 0.8;
    text-transform: lowercase;
}
.hero-tagline-main { display: block; }
.hero-tagline-apply {
    display: block;
    color: var(--color-champagne);
    font-family: var(--font-sans);
    font-size: 0.68em;
    font-weight: 600;
    letter-spacing: 0.16em;
    line-height: 1.5;
    text-transform: uppercase;
}
.hero-tagline-apply a {
    color: var(--color-ivory);
    text-decoration: underline;
    text-decoration-color: var(--color-champagne);
    text-underline-offset: 0.2em;
}
.hero[data-variant="special"] .hero-meta {
    margin-bottom: clamp(2rem, 7vh, 5rem);
}
.hero-scroll {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 0;
    z-index: 3;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.85rem;
}
.hero-scroll-text {
    font-size: 0.62rem;
    font-weight: 600;
    letter-spacing: 0.34em;
    text-transform: uppercase;
    writing-mode: vertical-rl;
    color: var(--color-stone);
}
.hero-scroll-line {
    width: 1px;
    height: 4.5rem;
    background: linear-gradient(to bottom, var(--color-champagne), transparent);
    animation: scrollPulse 2.6s var(--ease-out) infinite;
}
@keyframes scrollPulse {
    0% { transform: scaleY(0); transform-origin: top; }
    45% { transform: scaleY(1); transform-origin: top; }
    55% { transform: scaleY(1); transform-origin: bottom; }
    100% { transform: scaleY(0); transform-origin: bottom; }
}

/* ========================= MANIFESTO ========================= */
.manifesto {
    padding-top: var(--space-xl);
    padding-bottom: var(--space-lg);
    scroll-margin-top: var(--header-h);
}
.manifesto-grid {
    display: grid;
    grid-template-columns: minmax(0, 7fr) minmax(0, 4fr);
    gap: var(--space-lg);
    align-items: start;
}
.manifesto-statement {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(2.6rem, 6vw, 5.75rem);
    line-height: 1.04;
    letter-spacing: -0.01em;
}
.manifesto-body {
    padding-top: clamp(0.5rem, 2vw, 2.5rem);
    color: var(--color-ink-soft);
    display: flex;
    flex-direction: column;
    gap: 1.35rem;
    font-size: 1.02rem;
    max-width: 34rem;
}
.manifesto-body .text-link { margin-top: var(--space-sm); color: var(--color-oxblood); }

/* ========================= NUMERI ========================= */
.numbers {
    max-width: var(--container);
    margin: var(--space-xl) auto 0;
    padding-inline: var(--gutter);
    display: grid;
    grid-template-columns: repeat(4, 1fr);
}
.number-item {
    padding: var(--space-md) var(--space-sm) var(--space-md) 0;
    border-top: 1px solid var(--color-line-dark);
    display: flex;
    flex-direction: column;
}
.number-item + .number-item { border-left: 1px solid var(--color-line-dark); padding-left: var(--space-md); }
.number-value {
    display: flex;
    align-items: flex-end;
    min-height: clamp(3rem, 7vw, 6.5rem);
    font-family: var(--font-display);
    font-size: clamp(3rem, 7vw, 6.5rem);
    line-height: 1;
    font-weight: 400;
}
.number-value--route { font-size: clamp(2.2rem, 5vw, 4.75rem); }
.number-arrow { color: var(--color-champagne); padding-inline: 0.1em; }
.number-label {
    display: block;
    margin-top: 0.75rem;
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.28em;
    text-transform: uppercase;
    color: var(--color-muted);
}

/* ========================= ACCENTO CORSIVO ========================= */
.accent-italic {
    font-style: italic;
    font-weight: 400;
    color: var(--color-champagne);
}

/* ========================= ROUTE ========================= */
.route {
    background: var(--color-ink);
    color: var(--color-ivory);
    padding: var(--space-xl) 0;
    scroll-margin-top: var(--header-h);
}
.route-layout {
    max-width: var(--container);
    margin-inline: auto;
    padding-inline: var(--gutter);
    display: grid;
    grid-template-columns: minmax(0, 4fr) minmax(0, 7fr);
    gap: var(--space-lg);
    align-items: start;
}
.route-rail {
    position: sticky;
    top: calc(var(--header-h) + 2rem);
    min-height: 70vh;
    display: flex;
    flex-direction: column;
}
.route-heading {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(2.4rem, 4.5vw, 4.5rem);
    line-height: 1.02;
}
.route-line-wrap {
    position: relative;
    flex: 1;
    margin-top: var(--space-md);
    min-height: 16rem;
}
.route-line {
    position: absolute;
    left: 0.4rem;
    top: 0;
    height: 100%;
    width: 3.75rem;
    color: var(--color-champagne);
    overflow: visible;
}
.route-dot {
    position: absolute;
    left: 0;
    top: 0;
    width: 0.65rem;
    height: 0.65rem;
    border-radius: 50%;
    background: var(--color-champagne);
    transform: translate(-50%, -50%);
    will-change: transform;
}
.route-waypoints {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    padding: 0.35rem 0;
}
.route-waypoint {
    display: flex;
    align-items: center;
    gap: 1rem;
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    color: var(--color-muted);
    transition: color var(--dur-med) var(--ease-out);
}
.waypoint-num {
    display: inline-block;
    width: 1rem;
    flex-shrink: 0;
    font-size: 0.68rem;
    color: var(--color-champagne);
    opacity: 0.6;
}
.waypoint-dot {
    width: 0.55rem;
    height: 0.55rem;
    border-radius: 50%;
    border: 1px solid var(--color-stone);
    transition: background-color var(--dur-med) var(--ease-out), border-color var(--dur-med) var(--ease-out), transform var(--dur-med) var(--ease-out);
}
.route-waypoint.is-active { color: var(--color-ivory); }
.route-waypoint.is-active .waypoint-dot {
    background: var(--color-champagne);
    border-color: var(--color-champagne);
    transform: scale(1.25);
}
.route-waypoint.is-active .waypoint-num { opacity: 1; }

.route-stops {
    display: flex;
    flex-direction: column;
    gap: var(--space-xl);
}
.route-stop { position: relative; }
.route-stop-num {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.3em;
    color: var(--color-champagne);
    margin-bottom: 0.75rem;
}
.route-stop-title {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(3rem, 6.5vw, 6rem);
    line-height: 0.98;
    text-transform: uppercase;
    letter-spacing: 0.01em;
}
.route-stop-sub {
    margin-top: 0.5rem;
    font-size: 0.78rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--color-stone);
}
.route-stop-figure {
    margin-top: var(--space-md);
    overflow: hidden;
}
.route-stop-figure img {
    width: 100%;
    aspect-ratio: 16 / 10;
    object-fit: cover;
    transition: transform var(--dur-slow) var(--ease-luxe), filter var(--dur-slow) var(--ease-out);
}
.route-stop:hover .route-stop-figure img { transform: scale(1.02); }
.route-stop-figure--mono img { filter: saturate(0.72) contrast(1.04); }
.route-stop-text {
    margin-top: var(--space-md);
    max-width: 30rem;
    color: var(--color-stone);
    font-size: 1.02rem;
}
.route-stop--piemonte .route-stop-title { color: var(--color-ivory); }
.route-stop--portofino .route-stop-title { color: var(--color-champagne); }

/* ========================= PROGRAMMA — TIMELINE ========================= */
.program {
    padding: var(--space-xl) 0 var(--space-lg);
    scroll-margin-top: var(--header-h);
}
.program-heading {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--space-lg);
    flex-wrap: wrap;
    margin-bottom: var(--space-lg);
}
.program-title {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(2.6rem, 6vw, 5.5rem);
    line-height: 1.02;
}
.program-note {
    color: var(--color-muted);
    max-width: 24rem;
    font-size: 0.95rem;
    padding-bottom: 0.5rem;
}

.timeline { display: flex; flex-direction: column; }
.timeline-day {
    display: grid;
    grid-template-columns: 8.5rem 3rem minmax(0, 1fr);
    gap: 0 var(--space-md);
    padding: var(--space-lg) 0;
    border-top: 1px solid var(--color-line-dark);
    align-items: start;
}
.timeline-day:last-child { border-bottom: 1px solid var(--color-line-dark); }

.timeline-date { display: flex; flex-direction: column; gap: 0.15rem; }
.timeline-date span {
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.timeline-date strong {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(3.4rem, 5.5vw, 5.25rem);
    line-height: 1;
    color: var(--color-ink);
}

/* La linea del percorso attraversa anche il programma */
.timeline-line {
    position: relative;
    align-self: stretch;
    display: flex;
    justify-content: center;
}
.timeline-line::before {
    content: '';
    width: 1px;
    background: var(--color-line-dark);
}
.timeline-line i {
    position: absolute;
    top: 0.55rem;
    width: 0.6rem;
    height: 0.6rem;
    border-radius: 50%;
    background: var(--color-champagne);
    box-shadow: 0 0 0 5px var(--color-warm-white);
}
.timeline-day--finale .timeline-line i { background: var(--color-oxblood); }

.timeline-content { max-width: 46rem; }
.timeline-place {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    color: var(--color-oxblood);
    margin-bottom: 0.85rem;
}
.timeline-content h3 {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(1.7rem, 3.2vw, 2.75rem);
    line-height: 1.08;
    margin-bottom: var(--space-sm);
}
.timeline-day--finale h3 { color: var(--color-oxblood); }
.timeline-content > p {
    color: var(--color-ink-soft);
    max-width: 38rem;
    font-size: 1.02rem;
}
.timeline-image {
    margin-top: var(--space-md);
    overflow: hidden;
}
.timeline-image img {
    width: 100%;
    aspect-ratio: 16 / 10;
    object-fit: cover;
    transition: transform var(--dur-slow) var(--ease-luxe);
}
.timeline-image:hover img { transform: scale(1.02); }
.timeline-image--portrait img { aspect-ratio: 3 / 2; }
.timeline-split {
    margin-top: var(--space-md);
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: clamp(0.75rem, 1.5vw, 1.25rem);
}
.timeline-split .timeline-image { margin-top: 0; }
.timeline-split .timeline-image img { aspect-ratio: 4 / 3; }

/* ========================= EDITORIAL BREAK ========================= */
.editorial-break {
    position: relative;
    height: 210vh;
}
.editorial-break-sticky {
    position: sticky;
    top: 0;
    height: 100vh;
    height: 100svh;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
}
.editorial-break-sticky img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.editorial-break-overlay {
    position: absolute;
    inset: 0;
    background:
        radial-gradient(ellipse 70% 55% at 50% 52%, rgba(17, 17, 15, 0.62) 0%, rgba(17, 17, 15, 0.38) 55%, rgba(17, 17, 15, 0.30) 100%),
        linear-gradient(to bottom, rgba(17, 17, 15, 0.35) 0%, rgba(17, 17, 15, 0.18) 40%, rgba(17, 17, 15, 0.5) 100%);
}
.editorial-quote-main {
    text-shadow: 0 2px 40px rgba(17, 17, 15, 0.45);
}
.editorial-quote-sub {
    text-shadow: 0 1px 16px rgba(17, 17, 15, 0.6);
}
.editorial-quote {
    position: relative;
    z-index: 2;
    text-align: center;
    color: var(--color-ivory);
    padding-inline: var(--gutter);
}
.editorial-quote-main {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(3.2rem, 10vw, 9.5rem);
    line-height: 1;
}
.editorial-quote-sub {
    margin-top: var(--space-md);
    font-size: 0.78rem;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--color-stone);
}

/* ========================= ISCRIZIONE ========================= */
.signup {
    background: var(--color-petrol);
    color: var(--color-ivory);
    padding: var(--space-xl) 0;
    scroll-margin-top: var(--header-h);
}
.signup-grid {
    display: grid;
    grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
    gap: var(--space-xl);
    align-items: start;
}
.signup-title {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(2.8rem, 5.5vw, 5.5rem);
    line-height: 1.02;
}
.signup-lead {
    margin-top: var(--space-md);
    color: var(--color-stone);
    max-width: 30rem;
    font-size: 1.02rem;
}

/* Countdown nel blocco iscrizione */
.countdown-block {
    margin-top: var(--space-lg);
    padding-top: var(--space-md);
    border-top: 1px solid var(--color-line-light);
    max-width: 30rem;
}
.countdown-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
}
.countdown-head span:first-child {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.32em;
    text-transform: uppercase;
    color: var(--color-champagne);
}
.countdown-date {
    font-family: var(--font-display);
    font-size: 1.15rem;
    color: var(--color-stone);
    font-variant-numeric: tabular-nums;
}
.countdown-grid {
    margin-top: var(--space-sm);
    display: grid;
    grid-template-columns: repeat(4, 1fr);
}
.countdown-unit strong {
    display: block;
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(2.2rem, 4vw, 3.6rem);
    line-height: 1;
    font-variant-numeric: tabular-nums;
}
.countdown-unit span {
    display: block;
    margin-top: 0.45rem;
    font-size: 0.62rem;
    font-weight: 600;
    letter-spacing: 0.28em;
    text-transform: uppercase;
    color: var(--color-stone);
}
.countdown-done {
    margin-top: var(--space-sm);
    font-family: var(--font-display);
    font-size: clamp(1.6rem, 3vw, 2.6rem);
    color: var(--color-ivory);
}
.countdown-block.is-done .countdown-grid,
.countdown-block.is-done .countdown-head { display: none; }

/* Form card */
.form-card {
    background: var(--color-warm-white);
    color: var(--color-ink);
    padding: clamp(1.75rem, 3.5vw, 3rem);
}
.form-topline {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    padding-bottom: var(--space-md);
    margin-bottom: var(--space-md);
    border-bottom: 1px solid var(--color-line-dark);
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: 0.28em;
    text-transform: uppercase;
    color: var(--color-muted);
}
#signup-form { display: flex; flex-direction: column; gap: var(--space-md); }
.form-field { position: relative; display: flex; flex-direction: column; gap: 0.5rem; }
.form-field--trap {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}
.form-field label {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.form-optional { color: var(--color-stone); text-transform: none; letter-spacing: 0.08em; }
.form-field input[type="text"],
.form-field input[type="email"],
.form-field input[type="tel"],
.form-field textarea {
    font: inherit;
    font-size: 1.2rem;
    font-family: var(--font-display);
    color: var(--color-ink);
    background: transparent;
    border: 0;
    border-bottom: 1px solid var(--color-line-dark);
    padding: 0.5rem 0 0.85rem;
    border-radius: 0;
    transition: border-color var(--dur-fast) var(--ease-out);
}
.form-field input::placeholder, .form-field textarea::placeholder { color: var(--color-stone); }
.form-field textarea { resize: vertical; min-height: 4.5rem; }
.form-field input:focus, .form-field textarea:focus {
    outline: none;
    border-bottom-color: var(--color-oxblood);
}
.form-field.has-error input,
.form-field.has-error textarea { border-bottom-color: #B04A41; }
.form-error { font-size: 0.8rem; color: #8E3A32; }
.form-field--check { flex-direction: row; align-items: flex-start; gap: 0.9rem; flex-wrap: wrap; }
.form-field--check input[type="checkbox"] {
    width: 1.15rem;
    height: 1.15rem;
    margin-top: 0.15rem;
    accent-color: var(--color-oxblood);
    flex-shrink: 0;
}
.form-field--check label {
    flex: 1;
    text-transform: none;
    letter-spacing: 0.02em;
    font-weight: 400;
    font-size: 0.9rem;
    line-height: 1.5;
    color: var(--color-ink-soft);
}
.form-field--check .form-error { flex-basis: 100%; }
.form-submit {
    align-self: flex-start;
    display: inline-flex;
    align-items: center;
    gap: 0.75rem;
    margin-top: var(--space-sm);
    font-size: 0.82rem;
    font-weight: 600;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--color-ivory);
    background: var(--color-ink);
    padding: 1.15rem 2.25rem;
    transition: background-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);
}
.form-submit:hover { background: var(--color-oxblood); color: var(--color-ivory); }
.form-submit:disabled { opacity: 0.55; cursor: wait; }
.form-submit-arrow { display: inline-block; transition: transform var(--dur-med) var(--ease-luxe); }
.form-submit:hover .form-submit-arrow { transform: translate(3px, -3px); }
.form-status { font-size: 0.95rem; color: var(--color-petrol); min-height: 1.4em; }
.form-status.is-error { color: #8E3A32; }

/* ========================= CONTATTI ========================= */
.contact {
    position: relative;
    overflow: hidden;
    color: var(--color-ivory);
    padding: var(--space-xl) 0;
    scroll-margin-top: var(--header-h);
}
.contact-bg, .contact-bg img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.contact-shade {
    position: absolute;
    inset: 0;
    background:
        linear-gradient(to right, rgba(17,17,15,0.9) 0%, rgba(17,17,15,0.72) 55%, rgba(23,49,47,0.62) 100%),
        linear-gradient(to top, rgba(17,17,15,0.55) 0%, rgba(17,17,15,0) 40%);
}
.contact-inner {
    position: relative;
    z-index: 2;
    display: grid;
    grid-template-columns: minmax(0, 6fr) minmax(0, 4fr);
    gap: var(--space-xl);
    align-items: end;
}
.contact-title {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(2.8rem, 6vw, 5.5rem);
    line-height: 1.02;
}
.contact-text {
    margin-top: var(--space-md);
    color: var(--color-stone);
    max-width: 28rem;
}
.contact-cta {
    display: inline-flex;
    align-items: baseline;
    gap: 0.6rem;
    margin-top: var(--space-md);
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    padding-bottom: 0.5rem;
    position: relative;
}
.contact-cta::after {
    content: '';
    position: absolute;
    left: 0;
    bottom: 0;
    width: 2.5rem;
    height: 1px;
    background: currentColor;
    transition: width var(--dur-med) var(--ease-luxe);
}
.contact-cta:hover::after { width: 100%; }
.contact-cta .text-link-arrow { display: inline-block; transition: transform var(--dur-med) var(--ease-luxe); }
.contact-cta:hover .text-link-arrow { transform: translate(3px, -3px); }
.contact-details {
    display: flex;
    flex-direction: column;
}
.contact-details > div {
    padding: 1.35rem 0;
    border-top: 1px solid var(--color-line-light);
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}
.contact-details span {
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--color-champagne);
}
.contact-details a {
    font-family: var(--font-display);
    font-size: clamp(1.25rem, 1.8vw, 1.7rem);
    color: var(--color-ivory);
    transition: color var(--dur-fast) var(--ease-out);
}
.contact-details a:hover { color: var(--color-champagne); }
.contact-details address { color: var(--color-stone); line-height: 1.7; font-size: 0.98rem; }

/* ========================= PARTNERS ========================= */
.partners {
    padding: var(--space-xl) 0 var(--space-lg);
    scroll-margin-top: var(--header-h);
}
.partners-title {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(1.8rem, 3.4vw, 3.1rem);
    line-height: 1.15;
    max-width: 52rem;
}
.partners-group-title {
    margin: var(--space-lg) 0 var(--space-md);
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--color-muted);
    padding-bottom: var(--space-sm);
    border-bottom: 1px solid var(--color-line-dark);
}
.partners-wall {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    align-items: stretch;
    border-left: 1px solid var(--color-line-dark);
    border-top: 1px solid var(--color-line-dark);
}
.partners-wall--main { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.partner {
    display: grid;
    grid-template-rows: 5.25rem 1fr auto;
    align-items: stretch;
    gap: 1rem;
    height: 100%;
    padding: var(--space-md);
    border-right: 1px solid var(--color-line-dark);
    border-bottom: 1px solid var(--color-line-dark);
    min-height: 14rem;
    transition: background-color var(--dur-fast) var(--ease-out);
}
.partner--main {
    grid-template-rows: 6.5rem 1fr auto;
    min-height: 17rem;
}
.partner-logo-frame {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    width: 100%;
    min-height: 5.25rem;
}
.partner--main .partner-logo-frame { min-height: 6.5rem; }
.partner img {
    max-height: 3.6rem;
    max-width: min(100%, 13rem);
    width: auto;
    object-fit: contain;
    mix-blend-mode: multiply;
    filter: grayscale(1) contrast(0.9);
    opacity: 0.75;
    transition: filter var(--dur-med) var(--ease-out), opacity var(--dur-med) var(--ease-out);
}
.partner--main img { max-height: 4.7rem; }
.partner:hover { background: var(--color-ivory); }
.partner:hover img { filter: none; opacity: 1; }
.partner-copy {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    gap: 0.45rem;
}
.partner-name { font-family: var(--font-display); font-size: 1.35rem; line-height: 1.12; text-wrap: balance; }
.partner--main .partner-name { font-size: 1.7rem; }
.partner-desc { font-size: 0.85rem; color: var(--color-muted); line-height: 1.45; }
.partner-cta {
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--color-oxblood);
    opacity: 0;
    transform: translateY(4px);
    transition: opacity var(--dur-med) var(--ease-out), transform var(--dur-med) var(--ease-out);
}
.partner:hover .partner-cta,
.partner:focus-visible .partner-cta { opacity: 1; transform: translateY(0); }

/* ========================= PATROCINI ========================= */
.patrocini {
    padding: 0 0 var(--space-xl);
}
.patrocini-title {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(1.5rem, 2.6vw, 2.3rem);
    line-height: 1.2;
    max-width: 40rem;
}
.patrocini-list {
    margin-top: var(--space-lg);
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--space-md);
    align-items: stretch;
}
.patrocinio {
    display: grid;
    grid-template-rows: 8.5rem auto;
    gap: 1.2rem;
    height: 100%;
    min-height: 13rem;
    padding: var(--space-md);
    border: 1px solid var(--color-line-dark);
    transition: border-color var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out);
}
.patrocinio:hover { border-color: var(--color-ink); background: var(--color-ivory); }
.patrocinio-logo-frame {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: 8.5rem;
    background: rgba(255, 255, 255, 0.42);
}
.patrocinio img {
    max-height: 6rem;
    max-width: min(100%, 12rem);
    width: auto;
    object-fit: contain;
    mix-blend-mode: multiply;
    filter: grayscale(1);
    opacity: 0.8;
    transition: filter var(--dur-med) var(--ease-out), opacity var(--dur-med) var(--ease-out);
}
.patrocinio:hover img { filter: none; opacity: 1; }
.patrocinio-text { font-size: 0.88rem; color: var(--color-muted); line-height: 1.5; }
.patrocinio-text strong { color: var(--color-ink); font-weight: 600; }

/* ========================= GALLERY ========================= */
.gallery {
    padding: var(--space-xl) 0;
    scroll-margin-top: var(--header-h);
}
.gallery-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--space-md);
    flex-wrap: wrap;
    margin-bottom: var(--space-lg);
}
.gallery-title {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(2.2rem, 4.5vw, 4.25rem);
    line-height: 1.05;
    max-width: 38rem;
}
.gallery-filters { display: flex; gap: 0.25rem; }
.gallery-filter {
    font-size: 0.75rem;
    font-weight: 600;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    padding: 0.65rem 1.2rem;
    color: var(--color-muted);
    border: 1px solid transparent;
    transition: color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);
}
.gallery-filter:hover { color: var(--color-ink); }
.gallery-filter.is-active { color: var(--color-oxblood); border-color: var(--color-line-dark); }

.gallery-grid {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    grid-auto-rows: 9vw;
    grid-auto-flow: dense;
    gap: clamp(0.5rem, 1vw, 1rem);
}
.gallery-item { min-height: 0; }
.gallery-item--large { grid-column: span 4; grid-row: span 3; }
.gallery-item--wide { grid-column: span 4; grid-row: span 2; }
.gallery-item--tall { grid-column: span 2; grid-row: span 4; }
.gallery-item:not(.gallery-item--large):not(.gallery-item--wide):not(.gallery-item--tall) { grid-column: span 2; grid-row: span 2; }
.gallery-item.is-hidden { display: none; }

.gallery-thumb {
    position: relative;
    display: block;
    width: 100%;
    height: 100%;
    overflow: hidden;
    text-align: left;
}
.gallery-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--dur-slow) var(--ease-luxe);
}
.gallery-thumb:hover img, .gallery-thumb:focus-visible img { transform: scale(1.03); }
.gallery-overlay {
    position: absolute;
    inset: auto 0 0 0;
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    padding: 1rem 1.1rem;
    background: linear-gradient(to top, rgba(17,17,15,0.55), transparent);
    color: var(--color-ivory);
    opacity: 0;
    transition: opacity var(--dur-med) var(--ease-out);
}
.gallery-thumb:hover .gallery-overlay,
.gallery-thumb:focus-visible .gallery-overlay { opacity: 1; }
.gallery-caption { font-family: var(--font-display); font-size: 1.25rem; }
.gallery-cat {
    font-size: 0.62rem;
    font-weight: 600;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    color: var(--color-stone);
}

/* ========================= LIGHTBOX ========================= */
.lightbox {
    position: fixed;
    inset: 0;
    z-index: 250;
    background: rgba(17, 17, 15, 0.96);
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--dur-med) var(--ease-out), visibility 0s var(--dur-med);
}
.lightbox.is-open {
    opacity: 1;
    visibility: visible;
    transition: opacity var(--dur-med) var(--ease-out), visibility 0s;
}
.lightbox[hidden] { display: flex; }
.lightbox-stage {
    max-width: min(88vw, 90rem);
    max-height: 82vh;
    display: flex;
    flex-direction: column;
    gap: 1rem;
}
.lightbox-stage img {
    max-width: 100%;
    max-height: 74vh;
    object-fit: contain;
}
.lightbox-caption {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 1.5rem;
    color: var(--color-ivory);
    font-family: var(--font-display);
    font-size: 1.3rem;
}
.lightbox-counter {
    font-family: var(--font-sans);
    font-size: 0.72rem;
    letter-spacing: 0.3em;
    color: var(--color-stone);
}
.lightbox-close, .lightbox-prev, .lightbox-next {
    position: absolute;
    z-index: 2;
    color: var(--color-ivory);
    font-size: 2rem;
    line-height: 1;
    padding: 1rem;
    opacity: 0.75;
    transition: opacity var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);
}
.lightbox-close { top: 1.25rem; right: 1.25rem; }
.lightbox-prev { left: 1.25rem; top: 50%; transform: translateY(-50%); }
.lightbox-next { right: 1.25rem; top: 50%; transform: translateY(-50%); }
.lightbox-close:hover, .lightbox-prev:hover, .lightbox-next:hover { opacity: 1; }
.lightbox-prev:hover { transform: translateY(-50%) translateX(-4px); }
.lightbox-next:hover { transform: translateY(-50%) translateX(4px); }

/* ========================= FOOTER ========================= */
.site-footer {
    position: relative;
    overflow: hidden;
    background: var(--color-ink);
    color: var(--color-ivory);
    padding: var(--space-xl) 0 var(--space-md);
    scroll-margin-top: var(--header-h);
}
.footer-bg, .footer-bg img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: 50% 35%;
}
.footer-shade {
    position: absolute;
    inset: 0;
    background:
        linear-gradient(to bottom, var(--color-ink) 0%, rgba(17, 17, 15, 0.82) 18%, rgba(17, 17, 15, 0.78) 60%, rgba(17, 17, 15, 0.9) 100%);
}
.footer-cta, .footer-grid, .footer-route, .footer-bottom {
    position: relative;
    z-index: 1;
}
.footer-cta {
    max-width: var(--container);
    margin-inline: auto;
    padding-inline: var(--gutter);
}
.footer-cta-big {
    font-family: var(--font-display);
    font-weight: 400;
    font-size: clamp(3.4rem, 10vw, 10rem);
    line-height: 0.92;
    text-transform: uppercase;
}
.footer-cta-sub {
    margin-top: var(--space-sm);
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.32em;
    text-transform: uppercase;
    color: var(--color-champagne);
}
.footer-cta-link {
    display: inline-flex;
    align-items: baseline;
    gap: 0.6rem;
    margin-top: var(--space-md);
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    padding-bottom: 0.5rem;
    position: relative;
}
.footer-cta-link::after {
    content: '';
    position: absolute;
    left: 0;
    bottom: 0;
    width: 2.5rem;
    height: 1px;
    background: currentColor;
    transition: width var(--dur-med) var(--ease-luxe);
}
.footer-cta-link:hover::after { width: 100%; }
.footer-cta-link .text-link-arrow { transition: transform var(--dur-med) var(--ease-luxe); display: inline-block; }
.footer-cta-link:hover .text-link-arrow { transform: translateX(6px); }

.footer-grid {
    max-width: var(--container);
    margin: var(--space-xl) auto 0;
    padding: var(--space-lg) var(--gutter) 0;
    border-top: 1px solid var(--color-line-light);
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--space-lg);
}
.footer-heading {
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--color-champagne);
    margin-bottom: 1.25rem;
}
.footer-contact a, .footer-nav a, .footer-social a {
    display: block;
    padding: 0.3rem 0;
    color: var(--color-stone);
    font-size: 0.95rem;
    transition: color var(--dur-fast) var(--ease-out);
}
.footer-contact a:hover, .footer-nav a:hover, .footer-social a:hover { color: var(--color-ivory); }
.footer-contact p { color: var(--color-stone); font-size: 0.95rem; margin-top: 0.9rem; line-height: 1.6; }

.footer-route {
    max-width: var(--container);
    margin: var(--space-lg) auto 0;
    padding-inline: var(--gutter);
    display: flex;
    align-items: center;
    gap: 1rem;
    color: var(--color-champagne);
}
.footer-route-line { flex: 1; height: 3.75rem; }
.footer-route-start, .footer-route-end { display: flex; align-items: center; gap: 0.75rem; flex-shrink: 0; }
.footer-route-dot {
    width: 0.7rem;
    height: 0.7rem;
    border-radius: 50%;
    background: var(--color-champagne);
}
.footer-route-label {
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.3em;
    text-transform: uppercase;
}

.footer-bottom {
    max-width: var(--container);
    margin: var(--space-lg) auto 0;
    padding: var(--space-md) var(--gutter) 0;
    border-top: 1px solid var(--color-line-light);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-md);
    flex-wrap: wrap;
    font-size: 0.78rem;
    color: var(--color-muted);
}
.footer-bottom img { height: 2.6rem; width: auto; }

/* ========================= RESPONSIVE ========================= */
@media (max-width: 64em) { /* 1024px */
    .manifesto-grid { grid-template-columns: minmax(0, 1fr); gap: var(--space-md); }
    .numbers { grid-template-columns: repeat(2, 1fr); row-gap: var(--space-md); }
    .number-item + .number-item { border-left: 0; padding-left: 0; }
    .number-item:nth-child(even) { border-left: 1px solid var(--color-line-dark); padding-left: var(--space-md); }
    .timeline-day { grid-template-columns: 6.5rem 2rem minmax(0, 1fr); }
    .partners-wall { grid-template-columns: repeat(2, 1fr); }
    .signup-grid { grid-template-columns: minmax(0, 1fr); gap: var(--space-lg); }
    .footer-grid { grid-template-columns: 1fr 1fr; }
    .gallery-grid { grid-auto-rows: 14vw; }
    .gallery-item--large { grid-column: span 6; }
    .gallery-item--wide { grid-column: span 6; }
}

@media (max-width: 48em) { /* 768px — mobile reale */
    :root { --header-h: 4.25rem; }
    .main-nav, .nav-cta { display: none; }
    .menu-toggle { display: flex; }
    body.menu-locked { overflow: hidden; }

    /* Hero: titolo su più righe, composizione ridisegnata */
    .hero-edition { writing-mode: horizontal-tb; right: auto; left: var(--gutter); top: calc(var(--header-h) + 1.25rem); }
    .hero-meta { flex-direction: column; align-items: flex-start; gap: 1.25rem; }
    .hero-title--logo { width: min(100%, 34rem); }
    .hero-title-special { align-self: flex-end; font-size: clamp(3.675rem, 17.25vw, 7.125rem); }
    .hero-tagline { max-width: min(100%, 28rem); align-items: flex-start; text-align: left; }
    .hero[data-variant="special"] .hero-meta { margin-bottom: 1.5rem; }
    .hero-scroll { display: none; }

    .numbers { grid-template-columns: 1fr 1fr; }

    /* Route: rail compatta orizzontale + timeline verticale */
    .route-layout { grid-template-columns: minmax(0, 1fr); gap: var(--space-md); }
    .route-rail {
        position: static;
        min-height: 0;
        min-width: 0;
        flex-direction: column;
    }
    .route-stops { min-width: 0; }
    .route-stop { min-width: 0; }
    .route-line-wrap { display: block; min-height: 0; margin-top: var(--space-md); flex: none; }
    .route-line-wrap svg, .route-dot { display: none; }
    .route-waypoints {
        position: static;
        flex-direction: row;
        flex-wrap: wrap;
        gap: 0.75rem 1.25rem;
        padding: 0;
    }
    .route-waypoint { font-size: 0.68rem; gap: 0.6rem; letter-spacing: 0.18em; }
    .route-stops { gap: var(--space-lg); }

    /* Programma: timeline compatta */
    .timeline-day {
        grid-template-columns: 4.5rem 1.5rem minmax(0, 1fr);
        gap: 0 var(--space-sm);
        padding: var(--space-md) 0;
    }
    .timeline-date strong { font-size: 2.6rem; }
    .timeline-date span { font-size: 0.58rem; letter-spacing: 0.18em; }
    .timeline-split { grid-template-columns: 1fr; }
    .editorial-break { height: 170vh; }

    .partners-wall, .partners-wall--main { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .partner { min-height: 11rem; min-width: 0; }
    .partner-name, .partner-desc { overflow-wrap: break-word; }
    .partner-name { font-size: 1.1rem; hyphens: auto; }
    .partner--main .partner-name { font-size: 1.3rem; }
    .patrocini-list { grid-template-columns: 1fr; }

    /* Gallery: composizione a 2 colonne alternata */
    .gallery-grid { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 34vw; }
    .gallery-item--large,
    .gallery-item--wide { grid-column: span 2; grid-row: span 2; }
    .gallery-item--tall { grid-column: span 1; grid-row: span 2; }
    .gallery-item:not(.gallery-item--large):not(.gallery-item--wide):not(.gallery-item--tall) { grid-column: span 1; grid-row: span 1; }
    .gallery-overlay { opacity: 1; background: linear-gradient(to top, rgba(17,17,15,0.45), transparent); }
    .gallery-caption { font-size: 1rem; }

    .countdown-grid { gap: 0 1.25rem; }
    .contact-inner { grid-template-columns: minmax(0, 1fr); gap: var(--space-lg); align-items: start; }

    .footer-grid { grid-template-columns: 1fr; gap: var(--space-md); }
    .lightbox-prev { left: 0.25rem; }
    .lightbox-next { right: 0.25rem; }
}

@media (max-width: 26.875em) { /* 430px e sotto */
    .gallery-grid { grid-auto-rows: 40vw; }
    .number-value { font-size: 2.6rem; }
    .number-value--route { font-size: 2rem; }
}

/* ========================= GENERATED HOME / ARCHIVE ========================= */
.home-feature-intro {
    padding: var(--space-lg) 0;
    background: var(--color-ink);
    color: var(--color-ivory);
}
.home-feature-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-md);
    color: var(--color-champagne);
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.24em;
    text-transform: uppercase;
}
.edition-status { color: var(--color-stone); }
.edition-status--ongoing { color: var(--color-champagne); }
.home-feature-date {
    margin-top: var(--space-sm);
    font-family: var(--font-display);
    font-size: clamp(2.4rem, 6vw, 5.5rem);
    line-height: 1;
}
.home-feature-summary {
    margin-top: var(--space-sm);
    max-width: 38rem;
    color: var(--color-stone);
    font-size: 1.05rem;
}
.home-feature-intro .text-link { margin-top: var(--space-md); color: var(--color-ivory); }
.home-program-preview,
.archive-preview,
.archive-list {
    padding: var(--space-xl) 0;
}
.home-program-heading,
.archive-heading {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--space-lg);
    margin-bottom: var(--space-lg);
}
.home-program-heading h2,
.archive-heading h2 {
    font-family: var(--font-display);
    font-size: clamp(2.4rem, 5vw, 5rem);
    font-weight: 400;
    line-height: 1;
}
.home-program-list {
    border-top: 1px solid var(--color-line-dark);
}
.home-program-list li {
    display: grid;
    grid-template-columns: 3rem 9rem minmax(0, 1fr);
    gap: var(--space-md);
    align-items: start;
    padding: var(--space-md) 0;
    border-bottom: 1px solid var(--color-line-dark);
}
.home-program-index,
.home-program-list time,
.home-program-place {
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--color-oxblood);
}
.home-program-list h3 {
    font-family: var(--font-display);
    font-size: clamp(1.5rem, 2.8vw, 2.4rem);
    font-weight: 400;
    line-height: 1.05;
}
.home-program-list p {
    max-width: 44rem;
    margin-top: 0.6rem;
    color: var(--color-muted);
}
.archive-preview { background: var(--color-ivory); }
.archive-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--space-md);
}
.edition-card {
    min-width: 0;
    border: 1px solid var(--color-line-dark);
    background: var(--color-warm-white);
    transition: transform var(--dur-med) var(--ease-luxe), background-color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);
}
.edition-card:hover,
.edition-card:focus-within {
    transform: translateY(-5px);
    border-color: var(--color-champagne);
    background: var(--color-ivory);
}
.edition-card--featured { border-color: var(--color-champagne); }
.edition-card-link { display: block; height: 100%; }
.edition-card-media { overflow: hidden; aspect-ratio: 16 / 9; background: var(--color-ink); }
.edition-card-media img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--dur-slow) var(--ease-luxe); }
.edition-card:hover .edition-card-media img { transform: scale(1.035); }
.edition-card-body { display: flex; flex-direction: column; align-items: flex-start; min-height: 17rem; padding: var(--space-md); }
.edition-card-body .label { margin-bottom: var(--space-sm); }
.edition-card-body h3 { font-family: var(--font-display); font-size: clamp(2rem, 4vw, 3.7rem); font-weight: 400; line-height: 0.98; }
.edition-card-date { margin-top: 0.8rem; font-size: 0.8rem; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase; color: var(--color-oxblood); }
.edition-card-summary { max-width: 34rem; margin-top: var(--space-sm); color: var(--color-muted); }
.edition-card .text-link { margin-top: auto; padding-top: var(--space-md); color: var(--color-oxblood); }
.archive-hero { padding: calc(var(--header-h) + var(--space-xl)) 0 var(--space-lg); background: var(--color-ink); color: var(--color-ivory); }
.archive-hero h1 { font-family: var(--font-display); font-size: clamp(4rem, 12vw, 11rem); font-weight: 400; line-height: 0.85; }
.archive-hero p:last-child { max-width: 30rem; margin-top: var(--space-md); color: var(--color-stone); }
.archive-count { color: var(--color-muted); font-size: 0.78rem; letter-spacing: 0.18em; text-transform: uppercase; }
.not-found { min-height: 65vh; padding: calc(var(--header-h) + var(--space-xl)) 0 var(--space-xl); }
.not-found h1 { font-family: var(--font-display); font-size: clamp(4rem, 10vw, 9rem); font-weight: 400; line-height: 0.9; }
.not-found p:not(.label) { max-width: 30rem; margin-top: var(--space-md); color: var(--color-muted); }
.not-found-links { display: flex; flex-wrap: wrap; gap: var(--space-md); margin-top: var(--space-md); }

[data-variant="special"] .edition-card--featured,
[data-variant="special"] .home-feature-intro { border-color: var(--color-champagne); }

@media (max-width: 48em) {
    .home-feature-meta { align-items: flex-start; flex-direction: column; gap: 0.5rem; }
    .home-program-heading, .archive-heading { align-items: flex-start; flex-direction: column; gap: var(--space-sm); }
    .home-program-list li { grid-template-columns: 2rem minmax(0, 1fr); gap: 0.5rem var(--space-sm); }
    .home-program-list time { grid-column: 2; }
    .home-program-list li > div { grid-column: 2; }
    .archive-grid { grid-template-columns: minmax(0, 1fr); }
    .edition-card-body { min-height: 14rem; }
}

/* ========================= REDUCED MOTION ========================= */
@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
    .reveal-inner { transform: none; }
    .hero-scroll-line { animation: none; }
}
