/* ============================================================
   Fonts
   ============================================================ */
@font-face {
  font-family: "Founders Grotesk";
  src: url("fonts/FoundersGrotesk-Regular.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Founders Grotesk X-Condensed";
  src: url("fonts/founders-grotesk-x-condensed-bold.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* ============================================================
   Tokens — grid expressed in rem (root = 16px)
   margin 24px = 1.5rem · gutter 32px = 2rem
   ============================================================ */
:root {
  --bg: #f3f3f3;
  --fg: #010101;
  --cursor: #FF6F00; /* colore cursore/pillola: arancione sul grigio di default */
  --line: rgba(1, 1, 1, 0.15); /* divisori; su sfondo nero diventano grigio chiaro */
  --selection: #FF6F00; /* sfondo selezione: arancione sul grigio · nera sui mood colorati */
  --selection-text: #010101; /* testo selezionato: nero sul grigio · colore del mood sui colorati */

  --margin: 1.5rem;   /* 24px — margini esterni */
  --gutter: 2rem;     /* 32px — gutter tra colonne */
  --cols: 4;
  --max-w: 108rem;    /* 1728px — oltre, il contenuto si centra (no colonne enormi).
                         Per il full-bleed togli max-width/margin-inline da .grid */

  --fs-body: 0.9375rem; /* 15px */
  --lh-body: 1.3;
}

/* Proprietà animabile per "disegnare" i divisori degli accordion (scaleX 0→1).
   Registrandola con @property diventa un <number> tipizzato: così Safari
   ridipinge correttamente lo pseudo-elemento .acc::before quando cambia
   (le custom properties NON registrate spesso non fanno repaint sui ::before,
   e le linee scattano invece di scorrere da sinistra a destra). */
@property --line-scale {
  syntax: "<number>";
  inherits: true;
  initial-value: 1;
}

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

html {
  -webkit-text-size-adjust: 100%;
  /* Sfondo del mood anche su <html>: evita i lampi bianchi nella zona di
     rimbalzo elastico (overscroll) su iOS. */
  background: var(--bg);
  transition: background-color 0.7s ease-in-out;
}

body {
  background: var(--bg);
  color: var(--fg);
  font-family: "Founders Grotesk", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  font-weight: 400;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow: hidden; /* temporary one-screen site */
  /* cambio mood: morph fluido di sfondo + testo */
  transition: background-color 0.7s ease-in-out, color 0.7s ease-in-out;
}

/* Selezione testo: sfondo che segue il mood, testo sempre nero */
::selection {
  background: var(--selection);
  color: var(--selection-text);
}
::-moz-selection {
  background: var(--selection);
  color: var(--selection-text);
}

/* Reveal testi per riga: ogni riga esce da una maschera (overflow hidden) */
.reveal-line {
  display: block;
  overflow: hidden;
}
.reveal-inner {
  display: block;
  will-change: transform;
}

a {
  color: inherit;
  text-decoration: none;
}

/* Animated underline: enters from the left on hover, exits to the right */
.link {
  position: relative;
}

.link::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -0.08em;
  height: 1px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: right center;
  transition: transform 0.45s cubic-bezier(0.65, 0, 0.35, 1);
}

.link:hover::after {
  transform: scaleX(1);
  transform-origin: left center;
}

/* Onwave: always underlined; on hover the line exits (right) and re-enters (left) */
.link--static::after {
  transform: scaleX(1);
  transform-origin: left center;
}

.link--static:hover::after {
  animation: underline-redraw 0.6s cubic-bezier(0.65, 0, 0.35, 1);
}

@keyframes underline-redraw {
  0% {
    transform: scaleX(1);
    transform-origin: right center;
  }
  45% {
    transform: scaleX(0);
    transform-origin: right center;
  }
  55% {
    transform: scaleX(0);
    transform-origin: left center;
  }
  100% {
    transform: scaleX(1);
    transform-origin: left center;
  }
}

/* ============================================================
   Layout
   ============================================================ */
.page {
  min-height: 100vh;
  min-height: 100svh;
  /* topbar, meta e marquee sono fissi: qui restano solo le colonne */
  padding-top: 4rem;
  padding-bottom: calc(13.1vw + 4rem);
}

/* Toggle "info" in alto a destra: apre/chiude la pagina informazioni */
.corner-plus {
  position: fixed;
  top: var(--margin);
  right: var(--margin);
  font-size: var(--fs-body);
  line-height: 1;
  color: var(--fg);
  z-index: 50;
  background: none;
  border: none;
  padding: 0;
  font-family: inherit;
  cursor: pointer;
  text-transform: uppercase;
  transition: color 0.7s ease-in-out;
}

/* Sottolineatura come il link "Onwave": linea sottile sempre presente che si
   ridisegna (esce a destra, rientra da sinistra) al passaggio del cursore. */
.corner-plus::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -0.08em;
  height: 1px;
  background: currentColor;
  transform: scaleX(1);
  transform-origin: left center;
  transition: transform 0.45s cubic-bezier(0.65, 0, 0.35, 1);
}
/* Il "ridisegno" della linea è solo per il mouse: su touch il :hover può
   restare appiccicato dopo il tap e bloccare l'animazione a metà (scaleX 0),
   facendo sparire la sottolineatura. Limitandolo ai dispositivi con hover, su
   mobile la sottolineatura di "about"/"chiudi" resta sempre piena. */
@media (hover: hover) and (pointer: fine) {
  .corner-plus:hover::after {
    animation: underline-redraw 0.6s cubic-bezier(0.65, 0, 0.35, 1);
  }
}

/* ============================================================
   Cursore personalizzato (solo desktop con mouse).
   Cerchio 10px → pillola "Clicca e cambia il mood" sul marquee.
   ============================================================ */
.cursor {
  display: none;
}

@media (hover: hover) and (pointer: fine) {
  .js body,
  .js .marquee,
  .js .corner-plus,
  .js .info {
    cursor: none;
  }

  .js .cursor {
    display: flex;
    position: fixed;
    left: 0;
    top: 0;
    align-items: center;
    justify-content: center;
    width: 10px;
    height: 10px;
    border-radius: 999px;
    background: var(--cursor);
    color: #010101;
    white-space: nowrap;
    overflow: hidden;
    pointer-events: none;
    z-index: 100;
    will-change: transform;
    opacity: 0; /* nascosto finché il mouse non si muove */
    transition: width 0.35s cubic-bezier(0.16, 1, 0.3, 1),
      height 0.35s cubic-bezier(0.16, 1, 0.3, 1),
      background-color 0.3s ease, opacity 0.25s ease;
  }

  .js .cursor.is-hover {
    width: var(--pill-w, 15rem);
    height: 3rem;
    background: var(--cursor);
  }

  .cursor__label {
    font-size: var(--fs-body);
    line-height: 1;
    opacity: 0;
    transition: opacity 0.18s ease;
  }

  .cursor.is-hover .cursor__label {
    opacity: 1;
    transition: opacity 0.25s ease 0.12s;
  }
}

/* Header persistente in alto (home + info, non si ricarica) */
.topbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  display: flex;
  padding: var(--margin) var(--margin) 0.8rem;
  /* header trasparente; il testo segue il colore del mood */
  color: var(--fg);
  z-index: 45;
  transition: color 0.7s ease-in-out;
}

/* "NICO FIORE" cliccabile (maiuscolo): torna alla home */
.brand {
  background: none;
  border: none;
  padding: 0;
  font: inherit;
  color: inherit;
  letter-spacing: inherit;
  text-transform: uppercase;
  cursor: pointer;
}

/* Velo sotto l'header: il contenuto si sfoca e tende, in modo lineare,
   al colore di sfondo — così "NICO FIORE" / "INFO" restano leggibili. */
.header-scrim {
  /* nascosta di default (home desktop non scrolla → non serve). Compare su
     mobile (media query) e sulla pagina about aperta, anche desktop (regola sotto). */
  display: none;
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 6.5rem;
  z-index: 44;
  pointer-events: none;
  /* colore pieno (transiziona dolcemente col mood) + maschera che sfuma */
  background-color: var(--bg);
  -webkit-backdrop-filter: blur(7px);
  backdrop-filter: blur(7px);
  -webkit-mask-image: linear-gradient(to bottom, #000, transparent);
  mask-image: linear-gradient(to bottom, #000, transparent);
  transition: background-color 0.7s ease-in-out;
}

/* Pagina about aperta (scrolla): sfumatura sotto l'header anche su desktop. */
#info-toggle[aria-expanded="true"] ~ .header-scrim {
  display: block;
}

/* Testo introduttivo: visibile solo su mobile, prima di "Servizi" */
.intro-mobile {
  display: none;
}

/* ===== Desktop: griglia editoriale sulla .page =====
   .hero e .sections sono display:contents → bio e accordion diventano celle
   della griglia di .page (bio larga a sinistra · traccia-spaziatrice · servizi ·
   disponibilità · contatti). Su mobile vengono ridefiniti come blocchi normali. */
.page {
  display: grid;
  grid-template-columns: 1.3fr 1.1fr 1.15fr 0.85fr 1fr;
  column-gap: var(--gutter);
  align-items: start;
  padding-inline: var(--margin);
  max-width: var(--max-w);
  margin-inline: auto;
}

.hero,
.sections,
.second {
  display: contents;
}

/* mini footer: solo mobile (seconda parte della home) */
.sitefooter {
  display: none;
}

/* la bio resta a sinistra, sotto il marchio */
.bio {
  grid-column: 1;
}
/* servizi · disponibilità · contatti: a destra (saltano lo spaziatore).
   Partono dal bordo della griglia (come la bio), quindi più in basso della
   riga NICO FIORE / ABOUT, non allineati ad essa. */
.sections .acc:nth-child(1) {
  grid-column: 3;
}
.sections .acc:nth-child(2) {
  grid-column: 4;
}
.sections .acc:nth-child(3) {
  grid-column: 5;
}

.col p:not(.intro-mobile) + p {
  margin-top: 1.2em;
}

/* stacco maggiore prima di ogni intestazione (gruppo successivo).
   Esclude il copy intro (nascosto su desktop) così "Strategia" resta in cima. */
.col p:not(.intro-mobile) + .label {
  margin-top: 2.2em;
}

.label {
  text-transform: uppercase;
}

/* ===== Accordion (sezioni) — su desktop il contenuto è sempre visibile ===== */
.acc__head {
  display: none; /* desktop: l'intestazione-toggle è nascosta, contenuto sempre visibile */
}

/* Contatti: Scrivimi sopra Social su desktop */
.acc__inner--contatti > div + div {
  margin-top: 2.2em;
}

/* Barra persistente in basso: Puglia (sx) + Sto ascoltando (dx).
   Sta sopra il marquee; all'apertura della pagina info scende in fondo. */
.meta {
  position: fixed;
  left: 0;
  right: 0;
  bottom: calc(var(--margin) + 13.1vw + 1rem);
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 1rem;
  padding-inline: var(--margin);
  z-index: 45;
  transition: opacity 0.4s ease;
}

/* Sulla pagina ABOUT, Puglia e "Sto ascoltando" spariscono (sfumano). */
#info-toggle[aria-expanded="true"] ~ .page .meta {
  opacity: 0;
  visibility: hidden;
}

.meta-right {
  text-align: right;
}

.now-playing {
  display: inline-block;
}

/* ============================================================
   Marquee — COMING (SOON)
   ============================================================ */
.marquee {
  position: fixed;
  left: 0;
  right: 0;
  bottom: var(--margin);
  width: 100%;
  overflow: hidden;
  line-height: 0.78; /* hug the glyphs */
  background: var(--bg);
  z-index: 10;
  transition: background-color 0.7s ease-in-out;
  cursor: pointer; /* click per cambiare colore di sfondo */
  user-select: none;
}

.marquee__track {
  display: flex;
  flex-wrap: nowrap;
  width: max-content;
  will-change: transform;
}

.marquee__item {
  font-family: "Founders Grotesk X-Condensed", "Arial Narrow", sans-serif;
  font-weight: 700;
  font-size: 16.8vw;
  line-height: 0.78;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  white-space: nowrap;
  display: block;
}

/* ============================================================
   Entrance animation initial state.
   Hidden ONLY when JS is running (html.js) — so if scripts fail
   to load, the content stays visible instead of blank.
   GSAP reveals these on load.
   ============================================================ */
.js [data-anim] {
  opacity: 0;
}

/* Respect reduced-motion: show everything immediately */
@media (prefers-reduced-motion: reduce) {
  .js [data-anim] {
    opacity: 1;
  }
}

/* ============================================================
   Pagina informazioni (overlay aperto dal "+")
   ============================================================ */
.info {
  position: fixed;
  inset: 0;
  z-index: 40;
  /* spazio per topbar (alto) e barra meta (basso), entrambe persistenti */
  padding: 4rem var(--margin) 3.5rem;
  background: var(--bg);
  overflow-x: hidden;
  overflow-y: auto;
  opacity: 0;
  visibility: hidden;
  transition: background-color 0.7s ease-in-out;
}

.info.is-open {
  opacity: 1;
  visibility: visible;
}

/* Marquee "HELLO" in cima alla pagina info (statico, a tutta larghezza) */
.info__marquee {
  position: static;
  left: auto;
  right: auto;
  bottom: auto;
  width: auto;
  margin: 0 calc(-1 * var(--margin)) 2.5rem;
}

.info__grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  column-gap: var(--gutter);
  row-gap: 2.5rem;
  align-items: start;
}

.info__col {
  display: flex;
  flex-direction: column;
  gap: 2.5rem;
}

.info__photo {
  width: 100%;
  max-width: 16rem;
  aspect-ratio: 3 / 4;
  background: #b54a2b; /* placeholder finché non c'è la foto */
  overflow: hidden;
}

.info__photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.info__block p + p {
  margin-top: 1.3em;
}

/* Colonna intro (bio + foto + portfolio) */
.info__intro {
  display: flex;
  flex-direction: column;
  gap: 1.6rem;
}
.info__intro .info__photo {
  order: -1; /* desktop: foto in cima */
}

/* footer della pagina info (disponibilità + contatti) — solo mobile */
.info__footer {
  display: none;
}

/* ============================================================
   Loop a zoom ricorsivo (solo mobile) — vedi loop.js
   ============================================================ */
/* zona che centra il loop tra la bio e la barra meta (solo mobile) */
.loopzone {
  display: none;
}

.zoomloop {
  /* nascosto di default: per ora compare solo su mobile */
  display: none;
  position: relative;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  background: var(--line);
  -webkit-user-select: none;
  user-select: none;
  cursor: pointer; /* tap per pausa / riprendi l'autoplay */
}
.zoomloop__frame {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100%;
  height: 100%;
  transform: translate(-50%, -50%);
  transform-origin: center center;
  will-change: transform, opacity;
}
.zoomloop__frame img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  pointer-events: none;
  -webkit-user-drag: none;
}

/* ============================================================
   Schermi che saltano col cursore (solo home desktop) — vedi screens.js
   ============================================================ */
.cursor-screens {
  position: fixed;
  inset: 0;
  /* sopra il contenuto, il marquee e la barra meta (Puglia / Sto ascoltando,
     z-45) così le carte escono anche in basso; sotto about (50) e cursore (100) */
  z-index: 46;
  pointer-events: none;
  overflow: hidden;
}
.cursor-screen {
  position: absolute;
  top: 0;
  left: 0;
  width: 14rem; /* sovrascritta da screens.js per variare le dimensioni */
  max-height: 62vh; /* limite per immagini molto verticali (clip) */
  opacity: 0;
  overflow: hidden; /* niente border-radius: angoli vivi */
  will-change: transform, opacity;
}
.cursor-screen img {
  width: 100%;
  height: auto; /* aspetto naturale → ogni carta ha il suo formato */
  display: block;
}

/* ============================================================
   Responsive — collapse to a single column on small screens
   ============================================================ */
@media (max-width: 48rem) {
  :root {
    --fs-body: 0.875rem; /* 14px */
  }

  /* Su mobile il contenuto scorre, il marquee resta fisso in basso */
  body {
    overflow-x: hidden;
    overflow-y: auto;
  }

  .page {
    /* colonna unica: prima schermata (.hero), poi le sezioni oltre il marquee */
    display: flex;
    flex-direction: column;
    align-items: stretch; /* annulla align-items:start della griglia desktop */
    max-width: none;
    padding-inline: 0; /* niente padding orizzontale: marquee/linee full-bleed */
    /* la home mobile è una sola schermata e finisce col COMING (SOON):
       nessun padding sotto, così il marquee resta a filo del bordo. */
    padding-bottom: 0;
  }

  /* HERO = prima schermata: bio + loop + meta + marquee riempiono il viewport;
     meta+marquee restano in basso (margin-top:auto della .meta). La prima
     schermata finisce esattamente col COMING (SOON): l'altezza copre tutto il
     viewport meno la topbar, così il marquee resta a filo del bordo inferiore. */
  .hero {
    display: flex;
    flex-direction: column;
    min-height: calc(100svh - 4rem);
  }

  /* Su mobile la home finisce col COMING (SOON): niente accordion né footer
     (restano su desktop, dove .second è display:contents nella griglia). */
  .second {
    display: none;
  }

  /* SEZIONI (accordion) oltre il marquee: padding per le linee full-bleed */
  .sections {
    display: block;
    padding-inline: var(--margin);
    padding-top: 4rem; /* più spazio sotto il marquee */
  }

  /* mini footer in fondo alla seconda schermata */
  .sitefooter {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    margin-top: auto;
    padding-inline: var(--margin);
    padding-bottom: var(--margin);
    text-transform: uppercase;
  }

  /* la zona del loop cresce e centra il riquadro tra la bio e la barra meta */
  .loopzone {
    display: flex;
    flex: 1 1 auto;
    min-height: 0;
    align-items: center;
    justify-content: center;
  }

  /* il loop compare solo su mobile */
  .zoomloop {
    display: block;
    width: 55%;
  }

  /* su mobile la sfumatura sotto l'header resta, ma senza backdrop-filter:
     il blur è costoso su mobile (layer GPU + ridipinti). Resta il colore di
     sfondo che sfuma in trasparenza: legibilità di NICO FIORE / ABOUT garantita. */
  .header-scrim {
    display: block;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }

  /* "about" / "chiudi": su mobile niente sottolineatura (lo pseudo-elemento
     animato resta solo su desktop col mouse). */
  .corner-plus::after {
    display: none;
  }

  /* reset placement desktop + inset/respiro della bio */
  .bio {
    grid-column: auto;
    margin-top: 0;
    padding-inline: var(--margin);
    /* niente margine: la .loopzone centra il riquadro tra bio e meta */
  }
  .sections .acc:nth-child(1),
  .sections .acc:nth-child(2),
  .sections .acc:nth-child(3) {
    grid-column: auto;
    margin-top: 0;
  }

  /* copy introduttivo dentro "Servizi", prima della lista (solo mobile) */
  .col p.intro-mobile {
    display: block;
  }
  /* su mobile il copy è visibile: ripristina lo stacco prima di "Strategia" */
  .col .intro-mobile + .label {
    margin-top: 2.2em;
  }

  /* ===== Accordion mobile ===== */
  .acc {
    position: relative;
    /* linea a tutta larghezza, da bordo a bordo */
    margin-inline: calc(-1 * var(--margin));
    padding-inline: var(--margin);
  }

  /* Divisori come pseudo-elementi: così si possono "disegnare" all'avvio
     animando lo scaleX. --line-scale va da 0→1 via JS; default 1 (senza JS
     o reduced-motion le linee restano visibili). */
  .acc::before,
  .acc:last-child::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    height: 1px;
    background: var(--line);
    transform: scaleX(var(--line-scale, 1));
    /* --line-origin: left = entra da sinistra · right = esce verso destra */
    transform-origin: var(--line-origin, left) center;
  }
  .acc::before {
    top: 0;
  }
  /* linea di chiusura sotto l'ultimo accordion (Contatti) */
  .acc:last-child::after {
    bottom: 0;
  }

  .acc__head {
    display: flex;
    justify-content: space-between;
    align-items: center;
    width: 100%;
    padding: 1.15rem 0;
    background: none;
    border: none;
    font: inherit;
    color: inherit;
    text-align: left;
    cursor: pointer;
  }

  /* icona disegnata con due barre: anima da + a − (la barra verticale ruota) */
  .acc__icon {
    position: relative;
    /* alta quanto le etichette (SERVIZI, DISPONIBILITÀ, CONTATTI) */
    width: 0.72em;
    height: 0.72em;
    flex: none;
  }
  .acc__icon::before,
  .acc__icon::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    height: 1px;
    background: currentColor;
    transform: translateY(-50%);
    transition: transform 0.4s cubic-bezier(0.65, 0, 0.35, 1);
  }
  .acc__icon::after {
    transform: translateY(-50%) rotate(90deg);
  }
  .acc.is-open .acc__icon::after {
    transform: translateY(-50%) rotate(0deg);
  }

  .acc__body {
    overflow: hidden;
    max-height: 0;
    transition: max-height 0.5s ease;
  }
  .acc.is-open .acc__body {
    max-height: 100rem;
  }

  .acc__inner {
    padding-bottom: 1.5rem;
  }

  /* l'etichetta "Disponibilità" duplicata serve solo a desktop */
  .acc__label-dt {
    display: none;
  }

  /* Contatti: Scrivimi | Social affiancati */
  .acc__inner--contatti {
    display: flex;
    gap: var(--gutter);
  }
  .acc__inner--contatti > div {
    flex: 1;
  }
  .acc__inner--contatti > div + div {
    margin-top: 0;
  }

  /* su mobile meta e marquee scorrono in fondo alla pagina (non fissi) */
  .meta {
    position: static;
    /* Puglia e "Sto ascoltando" sulla stessa riga */
    flex-direction: row;
    justify-content: space-between;
    align-items: flex-start;
    gap: 1rem;
    /* niente linea sopra la barra meta */
    padding-top: 0;
    /* staccata dagli accordion e posizionata sopra il COMING SOON */
    margin-top: auto;
  }

  .meta-right {
    text-align: right;
  }

  /* (l'occultamento di Puglia/Spotify su ABOUT è ora una regola globale) */

  /* COMING (SOON) in fondo: la barra meta (margin-top:auto) spinge in basso
     il gruppo meta + marquee; qui resta solo lo stacco dal meta. */
  .marquee {
    position: static;
    bottom: auto;
    /* meta più vicina al marquee */
    margin-top: 1rem;
  }

  .marquee__item {
    font-size: 40vw;
  }

  /* Pagina informazioni mobile */
  .info {
    padding-bottom: 3rem;
  }

  /* sezioni appaiate su due colonne; bio a tutta larghezza */
  .info__grid {
    grid-template-columns: 1fr 1fr;
    column-gap: var(--gutter);
    row-gap: 2.5rem;
  }
  .info__col:nth-child(1) {
    grid-column: 1 / -1;
    /* più spazio sotto "Esplora il portfolio", prima delle sezioni */
    margin-bottom: 2.5rem;
  }
  .info__col:nth-child(4) {
    order: 1; /* Experience */
  }
  .info__col:nth-child(5) {
    order: 2; /* Awards + Mentions */
  }
  .info__col:nth-child(2) {
    order: 3; /* Education + Course */
  }
  .info__col:nth-child(3) {
    order: 4; /* Workshop */
  }

  /* foto tra i due paragrafi della bio */
  .info__intro .info__photo {
    order: 0;
  }
  /* immagine più piccola e centrata */
  .info__photo {
    max-width: 52%;
    align-self: center;
  }

  /* linee a tutta larghezza prima di Experience e prima di Education */
  .info__col:nth-child(2),
  .info__col:nth-child(4) {
    position: relative;
  }
  .info__col:nth-child(2)::before,
  .info__col:nth-child(4)::before {
    content: "";
    position: absolute;
    top: -1.25rem;
    left: calc(-1 * var(--margin));
    width: 100vw;
    height: 1px;
    background: var(--line);
    /* si "disegna" da sinistra all'apertura di about (vedi openInfo) */
    transform: scaleX(var(--line-scale, 1));
    /* --line-origin: left = entra da sinistra · right = esce verso destra */
    transform-origin: var(--line-origin, left) center;
  }

  /* footer: disponibilità + contatti, linea a tutta larghezza */
  .info__footer {
    position: relative;
    display: flex;
    justify-content: space-between;
    gap: var(--gutter);
    /* più spazio sotto il blocco Experience/Awards/Mention */
    margin-top: 5rem;
    margin-inline: calc(-1 * var(--margin));
    padding: 1.6rem var(--margin) 0;
  }
  /* linea a tutta larghezza sopra il footer, anch'essa "disegnabile" */
  .info__footer::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 1px;
    background: var(--line);
    transform: scaleX(var(--line-scale, 1));
    /* --line-origin: left = entra da sinistra · right = esce verso destra */
    transform-origin: var(--line-origin, left) center;
  }
  .info__footer-right {
    text-align: right;
  }
}
