*{box-sizing:border-box}
:root{
  --deep:#080e13; --mid:#0e1a23; --card:#132029; --line:#22323d;
  --bone:#e9edf0; --mut:#8fa0ad; --accent:#e4602f; --accent-ink:#0a1118;
  --gut:clamp(1.2rem,4vw,3.5rem); --sec:clamp(4.5rem,9vw,8rem);
  --ease:cubic-bezier(.23,1,.32,1);
}
html{scroll-behavior:smooth}
body{margin:0;background:var(--deep);color:var(--bone);font-family:Manrope,system-ui,sans-serif;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}
img,video{display:block;max-width:100%}
h1,h2,h3{font-family:'Bebas Neue',Impact,sans-serif;font-weight:400;letter-spacing:.02em;margin:0;line-height:.94;text-wrap:balance}
.mono{font-family:'IBM Plex Mono',ui-monospace,monospace}
a{color:inherit}
.eyebrow{font-family:'IBM Plex Mono',monospace;font-size:.72rem;letter-spacing:.24em;text-transform:uppercase;color:var(--accent);margin:0 0 1rem}
.lede{color:var(--mut);font-size:1.08rem;line-height:1.68;max-width:52ch;margin:0}

/* nav ------------------------------------------------------------------- */
.nav{position:fixed;top:0;left:0;right:0;z-index:50;display:flex;justify-content:space-between;align-items:center;
     padding:1.15rem var(--gut);transition:background .4s var(--ease),backdrop-filter .4s var(--ease);}
.nav.is-stuck{background:rgba(8,14,19,.86);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.nav__mark{font-family:'Bebas Neue',sans-serif;font-size:1.3rem;letter-spacing:.09em;text-decoration:none;display:flex;align-items:center;gap:.6rem}
.nav__ic{width:19px;height:19px;flex:none;background-image:linear-gradient(45deg,var(--accent) 25%,#fff 25%,#fff 75%,var(--accent) 75%),linear-gradient(45deg,var(--accent) 25%,#fff 25%,#fff 75%,var(--accent) 75%);background-size:9.5px 9.5px;background-position:0 0,4.75px 4.75px}
.nav ul{display:flex;gap:1.9rem;list-style:none;margin:0;padding:0;font-size:.88rem}
/* 2A — underline grows */
.nav ul a{position:relative;text-decoration:none;color:var(--mut);padding:.3rem 0;transition:color .28s var(--ease)}
.nav ul a::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1.5px;background:var(--accent);
  transform:scaleX(0);transition:transform .34s var(--ease)}
@media (hover:hover) and (pointer:fine){
  .nav ul a:hover{color:var(--bone)}
  .nav ul a:hover::after{transform:scaleX(1)}
}
.nav__cta{position:relative;background:transparent;color:var(--accent);border:1px solid var(--accent);text-decoration:none;
  font-weight:700;font-size:.82rem;letter-spacing:.06em;text-transform:uppercase;padding:.7rem 1.3rem;overflow:hidden;z-index:0;
  transition:color .32s var(--ease)}
.nav__cta::before{content:"";position:absolute;inset:0;background:var(--accent);transform:scaleX(0);transform-origin:left;
  transition:transform .42s var(--ease);z-index:-1}
@media (hover:hover) and (pointer:fine){ .nav__cta:hover{color:var(--accent-ink)} .nav__cta:hover::before{transform:scaleX(1)} }
@media(max-width:860px){.nav ul{display:none}}

/* hero ------------------------------------------------------------------ */
.hero{position:relative;min-height:100svh;display:grid;place-items:center;overflow:hidden;isolation:isolate}
.hero__bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}
.hero::after{content:"";position:absolute;inset:0;z-index:-1;
  background:radial-gradient(115% 85% at 50% 40%,rgba(8,14,19,.15) 0%,rgba(8,14,19,.68) 58%,rgba(8,14,19,.97) 100%)}
.hero__in{text-align:center;padding:7rem var(--gut) 9rem;max-width:60rem}
.hero h1{font-size:clamp(2.9rem,9.4vw,8.4rem);margin:0 0 1.3rem}
.hero .lede{margin:0 auto 2.3rem;color:#c2ced6}
/* 1B — fills from the left. Outline at rest, solid on hover. */
.cta{position:relative;display:inline-block;background:transparent;color:var(--accent);border:1px solid var(--accent);
     text-decoration:none;font-weight:700;letter-spacing:.07em;text-transform:uppercase;padding:1rem 2.3rem;font-size:.92rem;
     overflow:hidden;z-index:0;transition:color .32s var(--ease)}
.cta::before{content:"";position:absolute;inset:0;background:var(--accent);transform:scaleX(0);transform-origin:left;
     transition:transform .42s var(--ease);z-index:-1}
.cta:active{transform:translateY(1px)}
@media (hover:hover) and (pointer:fine){
  .cta:hover{color:var(--accent-ink)}
  .cta:hover::before{transform:scaleX(1)}
}
.hero__note{margin:1.1rem 0 0;font-size:.84rem;color:var(--mut)}
.strip{position:absolute;bottom:0;left:0;right:0;display:grid;grid-template-columns:repeat(4,1fr);
       border-top:1px solid var(--line);background:rgba(8,14,19,.55);backdrop-filter:blur(6px)}
.strip div{padding:1.1rem var(--gut);border-right:1px solid var(--line);text-align:center}
.strip div:last-child{border-right:0}
.strip b{font-family:'Bebas Neue',sans-serif;font-size:1.75rem;display:block;line-height:1}
.strip span{font-family:'IBM Plex Mono',monospace;font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;color:var(--mut);display:block;margin-top:.3rem}
@media(max-width:760px){.strip{grid-template-columns:repeat(2,1fr)}.strip div:nth-child(2){border-right:0}}

/* sections -------------------------------------------------------------- */
.sec{padding:var(--sec) var(--gut)}
/* 6A — the page ground crossfades; sections stay transparent */
body{transition:background-color .9s var(--ease)}
.sec__h{font-size:clamp(2rem,5.4vw,4.2rem);margin:0 0 1rem}
.sec__lede{margin-bottom:3.2rem}
.two{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,5vw,5rem);align-items:center}
.two img{width:100%;height:min(62vh,560px);object-fit:cover}
@media(max-width:880px){.two{grid-template-columns:1fr}}

/* route cards — D3's signature */
.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem}
.card{position:relative;aspect-ratio:3/4.4;overflow:hidden;background:var(--card)}
.card img{width:100%;height:100%;object-fit:cover;transition:transform .85s var(--ease)}
/* 3C — inner frame draws left to right */
.card::before{content:"";position:absolute;inset:.55rem;border:1px solid var(--accent);z-index:3;
  clip-path:inset(0 100% 0 0);transition:clip-path .55s var(--ease);pointer-events:none}
@media (hover:hover) and (pointer:fine){
  .card:hover img{transform:scale(1.05)}
  .card:hover::before{clip-path:inset(0 0 0 0)}
}
.card::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 40%,rgba(5,10,14,.94))}
.card__t{position:absolute;left:1.05rem;right:1.05rem;bottom:1rem;z-index:2}
.card__km{font-family:'Bebas Neue',sans-serif;font-size:1.95rem;line-height:1}
.card__d{font-size:.83rem;color:var(--mut);margin-top:.2rem}
@media(max-width:900px){.cards{grid-template-columns:repeat(2,1fr)}}

/* elevation profile */
.prof{position:relative;margin-top:3rem;border:1px solid var(--line);background:var(--card)}
.prof svg{display:block;width:100%;height:min(38vh,300px)}
.prof__marks{display:flex;justify-content:space-between;padding:.75rem 1.2rem;border-top:1px solid var(--line);
             font-family:'IBM Plex Mono',monospace;font-size:.7rem;color:var(--mut);letter-spacing:.05em;flex-wrap:wrap;gap:.5rem}

/* 2026 proof */
.mosaic{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:15vw;gap:.8rem}
.mosaic img{width:100%;height:100%;object-fit:cover}
.mosaic .tall{grid-row:span 2}
@media(max-width:880px){.mosaic{grid-template-columns:repeat(2,1fr);grid-auto-rows:32vw}}

/* info rows (from ref2, in D3's palette) */
.rows{border:1px solid var(--line)}
.row{display:grid;grid-template-columns:1fr auto;gap:1.5rem;padding:1.25rem 1.4rem;border-bottom:1px solid var(--line);align-items:center}
.row:last-child{border-bottom:0}
.row b{font-weight:600;font-size:1.02rem}
.row small{display:block;color:var(--mut);font-size:.88rem;margin-top:.2rem}
.row .v{font-family:'IBM Plex Mono',monospace;font-size:.86rem;text-align:right;white-space:nowrap}
.ph{color:#f0a868;background:rgba(240,168,104,.12);padding:.12em .5em;font-family:'IBM Plex Mono',monospace;font-size:.8em;letter-spacing:.04em}

/* faq */
.faq details{border-bottom:1px solid var(--line);padding:1.15rem 0}
.faq summary{cursor:pointer;font-weight:600;list-style:none;display:flex;justify-content:space-between;gap:1rem}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";color:var(--accent);font-family:'IBM Plex Mono',monospace}
.faq details[open] summary::after{content:"–"}
.faq p{color:var(--mut);margin:.8rem 0 0;max-width:62ch}

/* closing cta */
.band{position:relative;padding:var(--sec) var(--gut);text-align:center;overflow:hidden}
.band img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}
.band::after{content:"";position:absolute;inset:0;z-index:-1;background:rgba(8,14,19,.76)}
.band h2{font-size:clamp(2rem,6vw,4.6rem);margin:0 0 1.4rem}

footer{padding:3rem var(--gut);border-top:1px solid var(--line);display:flex;justify-content:space-between;
       gap:1.5rem;flex-wrap:wrap;font-size:.85rem;color:var(--mut)}

/* 8C — light follows the cursor on dark blocks */
.spot{position:relative;isolation:isolate;overflow:hidden}
.spot::before{content:"";position:absolute;width:620px;height:620px;border-radius:50%;z-index:-1;pointer-events:none;
  background:radial-gradient(circle,rgba(228,96,47,.15),transparent 68%);
  left:var(--mx,50%);top:var(--my,50%);transform:translate(-50%,-50%);
  opacity:0;transition:opacity .5s var(--ease)}
.spot.is-lit::before{opacity:1}

/* 4A + 7A — photographs and the hero drift slower than the page */
.pfx{overflow:hidden;position:relative}
.pfx img{width:100%;height:118%;object-fit:cover;position:absolute;top:-9%;left:0;will-change:transform}
.hero__bg{height:118%;top:-9%;will-change:transform}

/* 10A — the closing photograph breathes */
.band img{animation:breathe 30s var(--ease) infinite alternate}
@keyframes breathe{from{transform:scale(1)}to{transform:scale(1.08) translate(-1.2%,-.8%)}}

/* S1 — the profile draws itself, then reads out where the cursor is */
.prof .ln{stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset 1.9s var(--ease)}
.prof.is-in .ln{stroke-dashoffset:0}
.prof .fill{opacity:0;transition:opacity 1.1s var(--ease) .6s}
.prof.is-in .fill{opacity:1}
.prof__cursor{position:absolute;top:0;width:1px;background:var(--accent);opacity:0;transition:opacity .25s;pointer-events:none}
.prof__dot{position:absolute;width:9px;height:9px;background:var(--accent);border-radius:50%;transform:translate(-50%,-50%);opacity:0;transition:opacity .25s;pointer-events:none}
.prof__out{position:absolute;pointer-events:none;font-family:'IBM Plex Mono',monospace;font-size:.68rem;background:var(--accent);
  color:var(--accent-ink);padding:.16rem .45rem;transform:translate(-50%,-150%);opacity:0;transition:opacity .25s;white-space:nowrap}

/* reveals */
[data-reveal]{opacity:0;transform:translate3d(0,18px,0);transition:opacity .8s var(--ease),transform .8s var(--ease)}
[data-reveal].is-in{opacity:1;transform:none}
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  [data-reveal]{opacity:1;transform:none}
  .card:hover img{transform:none}
  .card::before{clip-path:inset(0 0 0 0)}
  .prof .ln{stroke-dashoffset:0!important}
  .prof .fill{opacity:1!important}
  .band img{animation:none}
  .hero__bg,.pfx img{transform:none!important}
  .spot::before{display:none}
}


/* ======================================================================
   Inner pages. Same language as the homepage: no new direction, only
   layouts the homepage did not need.
   ====================================================================== */

.page-head{padding:calc(var(--sec) * .75) var(--gut) 0}
.page-head h1{font-size:clamp(2.4rem,7vw,5.4rem);margin:0 0 1rem}
.crumb{font-family:'IBM Plex Mono',monospace;font-size:.7rem;letter-spacing:.2em;text-transform:uppercase;color:var(--mut);margin:0 0 1.1rem}
.crumb a{color:var(--accent);text-decoration:none}

/* segment list — the route, told in order */
.seg{display:grid;grid-template-columns:8.5rem 1fr;gap:2rem;padding:2.2rem 0;border-bottom:1px solid var(--line);align-items:start}
.seg:last-child{border-bottom:0}
.seg__km{font-family:'Bebas Neue',sans-serif;font-size:2rem;line-height:1;color:var(--accent)}
.seg__alt{font-family:'IBM Plex Mono',monospace;font-size:.72rem;color:var(--mut);letter-spacing:.08em;margin-top:.35rem}
.seg h3{font-size:1.55rem;margin:0 0 .5rem}
.seg p{color:var(--mut);margin:0;max-width:60ch}
.seg figure{margin:1rem 0 0}
.seg img{width:100%;max-width:34rem;aspect-ratio:16/10;object-fit:cover}
@media(max-width:760px){.seg{grid-template-columns:1fr;gap:.6rem}}

/* plan view of the route, drawn from the GPX */
.plan{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(1.5rem,4vw,3.5rem);align-items:center}
.plan__box{border:1px solid var(--line);background:var(--card);padding:1.2rem}
.plan svg{width:100%;height:auto;display:block}
@media(max-width:880px){.plan{grid-template-columns:1fr}}

/* gallery */
.gal{columns:3;column-gap:1rem}
.gal figure{margin:0 0 1rem;break-inside:avoid;position:relative;overflow:hidden}
.gal img{width:100%;display:block;transition:transform .8s var(--ease)}
.gal figcaption{font-family:'IBM Plex Mono',monospace;font-size:.66rem;color:var(--mut);padding-top:.4rem}
@media (hover:hover) and (pointer:fine){ .gal figure:hover img{transform:scale(1.035)} }
@media(max-width:900px){.gal{columns:2}}
@media(max-width:560px){.gal{columns:1}}

/* prose — regulamento */
.prose{max-width:68ch}
.prose h2{font-size:clamp(1.5rem,3.4vw,2.3rem);margin:2.8rem 0 .8rem}
.prose h2:first-child{margin-top:0}
.prose p,.prose li{color:var(--mut);line-height:1.75}
.prose ul{padding-left:1.1rem}
.prose li{margin-bottom:.5rem}
.prose .ph{display:inline-block}

/* results table */
.res{width:100%;border-collapse:collapse;font-size:.95rem}
.res th,.res td{text-align:left;padding:.62rem .8rem;border-bottom:1px solid var(--line);white-space:nowrap}
.res th{font-family:'IBM Plex Mono',monospace;font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;color:var(--mut);font-weight:400}
.res td.pos,.res td.time,.res td.bib{font-variant-numeric:tabular-nums;font-family:'IBM Plex Mono',monospace}
.res td.time{text-align:right;color:var(--bone)}
.res td.pos{width:3.4rem;color:var(--accent)}
.res tr[data-outcome]:not([data-outcome="finished"]) td{color:var(--mut)}
.res__wrap{overflow-x:auto;border:1px solid var(--line)}
.res__cat{font-family:'Bebas Neue',sans-serif;font-size:1.5rem;margin:2.6rem 0 .8rem;display:flex;gap:.7rem;align-items:baseline}
.res__cat span{font-family:'IBM Plex Mono',monospace;font-size:.7rem;color:var(--mut)}
.empty{border:1px solid var(--line);background:var(--card);padding:2.4rem;text-align:center;color:var(--mut)}
.empty b{display:block;font-family:'Bebas Neue',sans-serif;font-size:1.6rem;color:var(--bone);margin-bottom:.5rem}

/* footer nav */
.fnav{display:flex;gap:1.3rem;flex-wrap:wrap}
.fnav a{color:var(--mut);text-decoration:none}
@media (hover:hover) and (pointer:fine){ .fnav a:hover{color:var(--bone)} }
