/* ============================================
   FEDERICO BOGGIA · il foglio di stile del sito
   ============================================

   Da qui passano tutte le pagine: wiki, corsi online, workshop, affitto della
   sala, programmazione, academy, home. Un token cambiato qui le cambia tutte
   insieme.

   L'impaginazione è quella delle landing di Binatomy: fondo chiaro, titoli
   grandi e stretti, fasce bianche e grigie che si alternano, card con angoli
   larghi, bottoni a pillola. Quello che cambia è il colore.

   Il colore che comanda è il **rosso di Federico (#c2001c)**: è il suo, e con
   quello si riconosce il sito personale anche quando linka Binatomy. L'azzurro
   di Binatomy, preso per un giorno come colore principale, è tornato a essere
   un accento come gli altri.

   Le tinte di Binatomy (indigo, viola, arancio) restano dove parlano di
   Binatomy davvero: la fascia dell'alta formazione in fondo alle pagine, e i
   colori con cui i cinque workshop si distinguono l'uno dall'altro.
   ============================================ */

/* I font di Binatomy, importati qui invece che nel <head> di ogni pagina: i file
   sono 183, e un `<link>` per file si scollega al primo che qualcuno dimentica. */
/* CARATTERI-INIZIO — generato da _strumenti/caratteri.py, non si scrive a mano */
@font-face {
  font-family: 'DM Sans';
  font-style: italic;
  font-weight: 100 1000;
  font-display: swap;
  src: url(../fonts/gf/dm-sans-1001000-italic-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'DM Sans';
  font-style: italic;
  font-weight: 100 1000;
  font-display: swap;
  src: url(../fonts/gf/dm-sans-1001000-italic-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'DM Sans';
  font-style: normal;
  font-weight: 100 1000;
  font-display: swap;
  src: url(../fonts/gf/dm-sans-1001000-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'DM Sans';
  font-style: normal;
  font-weight: 100 1000;
  font-display: swap;
  src: url(../fonts/gf/dm-sans-1001000-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: italic;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  src: url(../fonts/gf/instrument-sans-400700-italic-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: italic;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  src: url(../fonts/gf/instrument-sans-400700-italic-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  src: url(../fonts/gf/instrument-sans-400700-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  src: url(../fonts/gf/instrument-sans-400700-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Instrument Serif';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/instrument-serif-400-italic-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Instrument Serif';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/instrument-serif-400-italic-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Instrument Serif';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/instrument-serif-400-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Instrument Serif';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/instrument-serif-400-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-300-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-300-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-400-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-400-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-500-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-500-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-600-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-600-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-700-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-700-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-800-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(../fonts/gf/plus-jakarta-sans-800-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100;
  font-display: swap;
  src: url(../fonts/gf/inter-100-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100;
  font-display: swap;
  src: url(../fonts/gf/inter-100-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 200;
  font-display: swap;
  src: url(../fonts/gf/inter-200-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 200;
  font-display: swap;
  src: url(../fonts/gf/inter-200-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url(../fonts/gf/inter-300-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url(../fonts/gf/inter-300-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/inter-400-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/inter-400-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/gf/inter-500-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/gf/inter-500-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(../fonts/gf/inter-600-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(../fonts/gf/inter-600-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(../fonts/gf/inter-700-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(../fonts/gf/inter-700-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(../fonts/gf/inter-800-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(../fonts/gf/inter-800-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url(../fonts/gf/inter-900-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url(../fonts/gf/inter-900-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/jetbrains-mono-400-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/jetbrains-mono-400-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/gf/jetbrains-mono-500-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/gf/jetbrains-mono-500-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(../fonts/gf/jetbrains-mono-700-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(../fonts/gf/jetbrains-mono-700-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Fira Code';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/fira-code-400-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fira Code';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/gf/fira-code-400-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Fira Code';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/gf/fira-code-500-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fira Code';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/gf/fira-code-500-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Fira Code';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(../fonts/gf/fira-code-600-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fira Code';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(../fonts/gf/fira-code-600-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* CARATTERI-FINE */

:root {
    /* --- Palette Binatomy (fonte: binatomy.com/colorful) --- */
    --bn-indigo: #1b1464;
    --bn-purple: #733397;
    --bn-rose: #ab3e47;
    --bn-flame: #f15a24;
    --bn-orange: #f7931e;
    --bn-gray: #e9ecef;

    /* Il gradiente di Binatomy: si usa SOLO nei blocchi che parlano di
       Binatomy (la fascia dell'alta formazione in fondo alle pagine). */
    --bn-gradient: linear-gradient(135deg, #1b1464 0%, #733397 35%, #ab3e47 65%, #f7931e 100%);

    /* --- Il rosso di Federico: è lui che comanda --- */
    --fb-red: #c2001c;
    --fb-red-dark: #96001a;
    --fb-red-soft: #e63946;
    --fb-red-light: rgba(194, 0, 28, 0.08);
    /* Il filo di gradiente sotto agli hero e le fasce di marca: il rosso che
       scivola nell'arancio, che è l'unico punto in cui il colore si vede pieno. */
    --fb-gradient: linear-gradient(135deg, #7d0012 0%, #c2001c 45%, #f15a24 100%);

    /* Gli alias storici: mezzo sito scrive `--wiki-primary`, e cambiarli qui
       basta per tutte e 200 le pagine. */
    --wiki-primary: var(--fb-red);
    --wiki-primary-dark: var(--fb-red-dark);
    --wiki-primary-soft: var(--fb-red-soft);
    --wiki-brand: var(--fb-red);
    --wiki-brand-light: var(--fb-red-light);

    /* --- Fondo chiaro e testo, come sulle pagine di Binatomy --- */
    --wiki-dark: #0f172a;
    --wiki-bg: #f8fafc;
    --wiki-card-bg: #ffffff;
    --wiki-text: #334155;
    --wiki-text-muted: #64748b;
    --wiki-glass-bg: rgba(15, 23, 42, 0.04);
    --wiki-glass-border: #e2e8f0;

    /* --- Font --- */
    --wiki-font-sans: 'Instrument Sans', 'DM Sans', system-ui, sans-serif;
    --wiki-font-serif: 'Instrument Serif', Georgia, serif;

    /* --- Le categorie della wiki: restano riconoscibili una per una, ma i
           colori sono quelli di marca invece di sei tinte prese a caso --- */
    --wiki-seo: #059669;
    --wiki-seo-light: rgba(5, 150, 105, 0.08);
    --wiki-geo: #733397;
    --wiki-geo-light: rgba(115, 51, 151, 0.08);
    --wiki-ai: #f7931e;
    --wiki-ai-light: rgba(247, 147, 30, 0.10);
    --wiki-web: #2563eb;
    --wiki-web-light: rgba(37, 99, 235, 0.08);
    /* I colori dei cinque workshop: servono a distinguere una giornata
       dall'altra in elenco, e ognuno tinge la propria scheda. */
    --ws-giovani: #c2001c;
    --ws-lavoratori: #f15a24;
    --ws-over60: #ab3e47;
    --ws-professionisti: #733397;
    --ws-programmazione: #1b1464;

    /* --- Ombre e raggi: morbidi e larghi, come le card di Binatomy --- */
    --wiki-shadow: 0 4px 24px rgba(15, 23, 42, 0.05);
    --wiki-shadow-lg: 0 12px 40px rgba(15, 23, 42, 0.08);
    /* Quanto e' alta la barra in cima (misurata: 54.3px). Serve a chi si
       incolla sotto di lei mentre si scorre: l'indice degli articoli e i
       titoli quando ci si arriva da un'ancora. La barra si tira su quando
       si scende, ma questo spazio resta fisso: legarlo a `fb-nav-via`
       farebbe saltare l'indice su e giu' a ogni cambio di direzione, che e'
       peggio del problema che risolve. */
    --fb-barra-h: 56px;
    --wiki-radius: 20px;
    --wiki-radius-sm: 12px;
    --wiki-radius-xs: 8px;

    --cat-color: var(--fb-red);
    --cat-color-light: var(--fb-red-light);
    --cat-color-dark: var(--fb-red-dark);
}

* { box-sizing: border-box; }
body {
    font-family: var(--wiki-font-sans);
    background: var(--wiki-bg);
    color: var(--wiki-text);
    margin: 0;
    padding: 0;
    -webkit-font-smoothing: antialiased;
}

/* I titoli grossi sono stretti e con la spaziatura tirata, come su Binatomy:
   è la cosa che si riconosce prima del colore. */
h1, h2, h3, .wiki-header h1 {
    font-family: var(--wiki-font-sans);
    letter-spacing: -0.02em;
}

/* ============================================
   DOVE SONO COL TABULATORE · l'anello di fuoco
   ============================================

   Il tema comprato disegna il `:focus` su qualche bottone e su nient'altro, e
   su un link dentro a un testo non si vede proprio niente: chi naviga da
   tastiera preme Tab e non sa dove è finito. Questa regola vale per tutto
   quello che si può raggiungere col tabulatore.

   ⚠️ `:focus-visible` e non `:focus`: col mouse l'anello non si vede (nessuno
   vuole un contorno addosso a un bottone appena cliccato), con la tastiera sì.
   È il comportamento che i browser sanno già distinguere da soli. */

a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible {
    outline: 3px solid var(--fb-red);
    outline-offset: 2px;
    border-radius: 3px;
}

/* Sul rosso e sulle fasce scure l'anello rosso sparisce: lì è bianco. */
.bg-base-color a:focus-visible,
.bg-base-color button:focus-visible,
.fb-band--dark a:focus-visible,
.fb-cta-band a:focus-visible,
.wiki-footer a:focus-visible {
    outline-color: #fff;
}

/* ============================================
   SALTA AL CONTENUTO · la prima voce che incontra chi usa la tastiera
   ============================================

   Chi naviga col tabulatore, o con uno screen reader, prima di arrivare al testo
   si fa tutte le voci del menu, su ogni pagina. Questo link sta in cima al
   `<body>`, non si vede finché non prende il fuoco, e premendolo si finisce
   dentro al `<main>`.

   ⚠️ Non si nasconde con `display:none` né con `visibility:hidden`: così
   sparirebbe anche per la tastiera, che è l'unica che lo usa. Si porta fuori
   schermo e si rimette dentro quando ha il fuoco. */

.fb-salta {
    position: absolute;
    left: -9999px;
    top: 0;
    z-index: 1000;
    padding: .7rem 1.1rem;
    background: var(--fb-red);
    color: #fff;
    font-weight: 600;
    text-decoration: none;
    border-radius: 0 0 10px 0;
}

.fb-salta:focus {
    left: 0;
    color: #fff;
    outline: 3px solid #111;
    outline-offset: 2px;
}

/* ============================================
   IL MENU · uno solo, uguale su tutte le pagine
   ============================================

   Prima ce n'erano due: la barra scura sulle 186 pagine interne e il menu a
   panino della home, che è un tema comprato e apriva un pannello a tutto
   schermo. Adesso è questa barra dappertutto, home compresa.

   È bianca e appiccicata in alto: le pagine sono lunghe (un programma di
   workshop è mezzo metro di schermo) e la barra scura in cima si perdeva al
   primo scorrimento. Il nero è rimasto dov'era utile, cioè nel footer.

   Su telefono le voci stanno dietro al pulsante a tre righe, e il pannello si
   apre con una casella di spunta nascosta: il sito è statico, e un menu che
   dipende da JavaScript è un menu che sparisce se lo script non arriva. */
/*
 * ⚠️ **Il vetro non sta sulla barra, sta su uno strato dietro.**
 *
 * `position: sticky` e `backdrop-filter` sullo stesso elemento sono un bug noto di
 * WebKit: su Safari (Mac e iPhone) la barra sparisce mentre si scorre in basso e
 * torna scorrendo in alto. Federico l'ha visto il 2026-08-19, su computer e su
 * telefono; su Chrome non si riproduce, ed è la firma di questo bug.
 *
 * La soluzione è quella standard: la barra resta appiccicata e senza filtri, e il
 * vetro (tinta più sfocatura) lo fa uno `::before` dietro al contenuto. `isolation`
 * tiene lo `z-index: -1` dentro alla barra, sennò lo strato finirebbe sotto la
 * pagina e non si vedrebbe niente.
 *
 * Il fondo pieno resta come ripiego: se `backdrop-filter` non c'è, la barra è
 * bianca e leggibile invece che trasparente.
 */
nav.wiki-site-nav {
    background: rgba(255,255,255,.97) !important;
    border-bottom: 1px solid var(--wiki-glass-border);
    padding: .55rem 0;
    position: sticky;
    top: 0;
    z-index: 500;
    width: 100%;
}
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    nav.wiki-site-nav {
        background: transparent !important;
        isolation: isolate;
    }
    nav.wiki-site-nav::before {
        content: '';
        position: absolute;
        inset: 0;
        z-index: -1;
        background: rgba(255, 255, 255, .92);
        backdrop-filter: saturate(160%) blur(10px);
        -webkit-backdrop-filter: saturate(160%) blur(10px);
    }
}

/*
 * ⚠️ **La barra si tira su quando si scende e torna quando si risale**
 * (2026-09-01, richiesta di Federico: «come su koral.binatomy.com»).
 *
 * Le pagine qui sono lunghe, e una barra bianca sempre in testa si mangia una
 * striscia di schermo del telefono per tutto il tempo. Mentre si scende si sta
 * leggendo, quindi la barra se ne va; risalendo si sta cercando qualcosa,
 * quindi torna subito.
 *
 * La logica sta in `_strumenti/uniforma-menu.py`, blocco `fb-scorrimento`, e ha
 * tre paletti che non vanno «semplificati»: nei primi 140px non si nasconde mai
 * (lì la barra è ancora in cima alla pagina); serve uno spostamento di almeno
 * 8px per cambiare stato, sennò il rimbalzo elastico di iOS la fa lampeggiare;
 * e col menu del telefono aperto (`#fb-menu:checked`) resta ferma, altrimenti
 * sparirebbe portandosi via le voci che si stanno leggendo.
 *
 * Senza JavaScript non succede niente: la classe non arriva mai e la barra
 * resta appiccicata come prima.
 *
 * ⚠️ Il `transform` sta sulla barra, il `backdrop-filter` sul suo `::before`:
 * tenerli separati è la stessa ragione scritta qui sopra, e mettere il vetro
 * sull'elemento che si muove è il modo di far tornare il bug di WebKit.
 */
nav.wiki-site-nav { transition: transform .3s ease; }
nav.wiki-site-nav.fb-nav-via { transform: translateY(-105%); }
@media (prefers-reduced-motion: reduce) {
    nav.wiki-site-nav { transition: none; }
}

/*
 * La lineetta in cima: a che punto della pagina si è.
 *
 * Sta **sopra** la barra (`z-index` più alto) e non dentro: quando la barra si
 * tira su, la lineetta resta dov'è, ed è l'unica cosa che continua a dire
 * quanto manca mentre si scende. Cresce con `transform: scaleX()` e non con
 * `width`, che a ogni pixel di scorrimento rifarebbe l'impaginazione.
 */
.fb-scorrimento {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 3px;
    z-index: 600;
    background: linear-gradient(90deg, var(--fb-red-dark), var(--fb-red) 55%, #f15a24);
    transform: scaleX(0);
    transform-origin: 0 50%;
    pointer-events: none;
}
/*
 * ⚠️ **Su fondo scuro la lineetta diventa bianca** (2026-09-01, segnalato da
 * Federico: sulla hero rossa della home una riga rossa su rosso non si vede).
 * La classe la mette il codice guardando che colore c'è sotto, quindi vale per
 * la hero, per le fasce scure (`fb-band--dark`, `fb-cta-band`) e per il footer
 * senza doverli elencare uno per uno.
 */
.fb-scorrimento--chiaro {
    background: linear-gradient(90deg, rgba(255,255,255,.7), #fff 60%);
}

/*
 * ⚠️ **Il puntatore diventa bianco sul rosso** (2026-09-01, segnalato da
 * Federico: «il puntatore del mouse è rosso in tutto il sito, nella hero dove
 * c'è lo sfondo rosso bianco»).
 *
 * Il puntatore tondo del tema (`.circle-cursor-inner`, il pallino, e
 * `.circle-cursor-outer`, l'anello) è colorato con `--base-color`, che è il
 * rosso `#c2001c`: sulla hero della home, che è rossa a tutta pagina, sparisce.
 * Sta solo sulle sei home (l'italiana e le cinque tradotte), che sono le uniche
 * col markup del tema.
 *
 * La classe la mette il codice sul `<body>` guardando che colore c'è sotto la
 * punta, quindi vale anche per le fasce scure e per il footer, dove un pallino
 * rosso scuro si vede altrettanto poco. Le regole vanno sul `body` (e non solo
 * sul puntatore) per battere `.custom-cursor .circle-cursor-inner` del tema, e
 * la riga con `.cursor-link-hover` serve perché sopra a un link il tema ripete
 * il colore con una specificità più alta.
 */
body.fb-cursore-chiaro .circle-cursor-inner,
body.fb-cursore-chiaro .circle-cursor-inner.cursor-link-hover { background-color: #fff; }
body.fb-cursore-chiaro .circle-cursor-outer { border-color: #fff; }
nav.wiki-site-nav > .container {
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 1rem;
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 1.25rem;
}
nav.wiki-site-nav .nav-logo {
    display: flex;
    align-items: center;
    gap: .6rem;
    text-decoration: none;
    color: var(--wiki-dark);
    font-weight: 700;
    font-size: .92rem;
    flex-shrink: 0;
}
nav.wiki-site-nav .nav-logo img {
    height: 34px !important;
    width: auto !important;
    max-height: 34px !important;
    max-width: 130px !important;
    object-fit: contain;
}
/*
 * Le voci stanno in mezzo alla barra (2026-08-17, scelta di Federico): prima
 * erano tutte a destra e la barra sembrava sbilanciata, con mezzo metro di
 * bianco fra il nome e il menu.
 *
 * `flex: 1` sulla lista le fa occupare lo spazio fra il logo e il bordo, e
 * `center` le centra dentro quello spazio. Il gruppo di destra (Login e
 * Scrivimi) si stacca da solo con `margin-left: auto` sulla voce `nav-fine`,
 * quindi non serve un contenitore in piu' nel markup: sul telefono la lista
 * diventa una colonna e le voci restano tutte dentro la stessa <ul>, che e'
 * quella che la casella di spunta apre e chiude.
 */
nav.wiki-site-nav ul.nav-links {
    display: flex !important;
    flex: 1;
    flex-direction: row !important;
    align-items: center !important;
    justify-content: center;
    row-gap: .5rem;
    gap: 1.4rem;
    list-style: none !important;
    margin: 0 !important;
    padding: 0 !important;
}
/* Le voci restano in mezzo alla barra: due margini automatici uguali, uno prima
   della prima voce e uno prima del gruppo di destra, si spartiscono lo spazio
   libero in parti uguali. Con il solo `auto` su `nav-fine` lo spazio finiva
   tutto lì e le voci si appoggiavano al logo. */
/* ⚠️ `!important` perché serve: la regola qui sotto azzera i margini di TUTTE le
   voci con un `!important` suo (serve contro l'elenco puntato del tema), e senza
   questo se li mangiava anche qui. Risultato: i due margini automatici non
   funzionavano, `justify-content: center` teneva tutto in mezzo alla barra e
   «Login» restava a 190 px dal bordo invece che in alto a destra
   (2026-08-18, «login proprio in alto a destra nel menu»). */
nav.wiki-site-nav ul.nav-links > li:first-child { margin-left: auto !important; }
nav.wiki-site-nav ul.nav-links li.nav-fine { margin-left: auto !important; }
nav.wiki-site-nav ul.nav-links li {
    list-style: none !important;
    margin: 0 !important;
    padding: 0 !important;
}
nav.wiki-site-nav ul.nav-links li::before,
nav.wiki-site-nav ul.nav-links li::marker { display: none !important; content: none !important; }
nav.wiki-site-nav .nav-links a {
    color: var(--wiki-text);
    text-decoration: none;
    font-size: .875rem;
    font-weight: 500;
    white-space: nowrap;
    transition: color .2s;
}
nav.wiki-site-nav .nav-links a:hover { color: var(--fb-red); }
nav.wiki-site-nav .nav-links a.active {
    color: var(--wiki-dark);
    font-weight: 600;
    border-bottom: 2px solid var(--fb-red);
    padding-bottom: 2px;
}
/*
 * La voce in evidenza (Academy) con il prezzo attaccato: è l'unica cosa che si
 * compra dal menu. Contorno rosso e non pastiglia piena, perché accanto c'è già
 * la pastiglia di WhatsApp e due pieni rossi in fila si annullano a vicenda.
 */
nav.wiki-site-nav .nav-links a.nav-evidenza {
    display: inline-flex;
    align-items: center;
    gap: .45rem;
    color: var(--fb-red);
    font-weight: 600;
    border: 1.5px solid var(--fb-red);
    border-radius: 30px;
    /* Fianchi uguali: prima erano sbilanciati (.85rem a sinistra, .5rem a destra)
       perché a destra c'era la pastiglia col prezzo, che dal 2026-08-17 non c'è più. */
    padding: .34rem .95rem;
    transition: background .2s, color .2s;
}
nav.wiki-site-nav .nav-links a.nav-evidenza.active { border-bottom: 1.5px solid var(--fb-red); padding-bottom: .34rem; }
nav.wiki-site-nav .nav-links a.nav-evidenza:hover { background: var(--fb-red); color: #fff; }

/*
 * L'accesso alla piattaforma: dal 2026-08-18 è LA pastiglia della barra, rossa
 * e col battito. Prima era nera per non pestarsi con «Scrivimi», che le stava
 * accanto pieno di rosso; «Scrivimi» dal menu è uscito (adesso è la bolla in
 * fondo a destra) e il posto in alto a destra è rimasto tutto suo.
 * Accanto resta «Academy», che è rosso ma di solo contorno: un pieno e un
 * contorno si distinguono, due pieni si annullano.
 */
nav.wiki-site-nav .nav-links a.nav-login {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    background: var(--fb-red);
    color: #fff;
    font-size: .82rem;
    font-weight: 600;
    padding: .5rem 1.15rem;
    border-radius: 30px;
    white-space: nowrap;
    transition: background .2s, transform .2s;
    animation: fb-login-pulse 2.6s cubic-bezier(.22,.61,.36,1) infinite;
}
/* Il battito è un'ombra che si allarga e sfuma, non un ingrandimento: la
   pastiglia sta ferma, così il puntatore la prende dove la vede, e le voci di
   fianco non si spostano ogni due secondi. */
@keyframes fb-login-pulse {
    0%   { box-shadow: 0 4px 14px rgba(194,0,28,.28), 0 0 0 0 rgba(194,0,28,.45); }
    70%  { box-shadow: 0 4px 14px rgba(194,0,28,.28), 0 0 0 14px rgba(194,0,28,0); }
    100% { box-shadow: 0 4px 14px rgba(194,0,28,.28), 0 0 0 0 rgba(194,0,28,0); }
}
nav.wiki-site-nav .nav-links a.nav-login:hover {
    background: var(--fb-red-dark);
    color: #fff;
    transform: translateY(-1px);
    animation: none;
}
nav.wiki-site-nav .nav-links a.nav-login svg { flex-shrink: 0; }
/* Chi ha chiesto al sistema operativo di non muovere niente non vede il battito. */
@media (prefers-reduced-motion: reduce) {
    nav.wiki-site-nav .nav-links a.nav-login { animation: none; }
}

/* La pastiglia verde di WhatsApp nel menu (`nav-cta`) non c'è più, né qui né
   nelle 195 pagine (2026-08-18, scelta di Federico): si scrive dalla bolla in
   fondo a destra, che è dove la gente cerca la chat. */

/* Il pulsante a tre righe: si vede solo sul telefono. */
.fb-menu-btn {
    display: none;
    flex-direction: column;
    justify-content: center;
    gap: 5px;
    width: 42px;
    height: 38px;
    padding: 0 9px;
    border-radius: 10px;
    cursor: pointer;
    flex-shrink: 0;
}
.fb-menu-btn span {
    display: block;
    height: 2px;
    width: 100%;
    background: var(--wiki-dark);
    border-radius: 2px;
    transition: transform .2s, opacity .2s;
}
.fb-menu-check:checked ~ .fb-menu-btn span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.fb-menu-check:checked ~ .fb-menu-btn span:nth-child(2) { opacity: 0; }
.fb-menu-check:checked ~ .fb-menu-btn span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

@media(max-width:900px) {
    nav.wiki-site-nav > .container { flex-wrap: wrap; }
    .fb-menu-btn { display: flex; }
    nav.wiki-site-nav ul.nav-links {
        display: none !important;
        width: 100%;
        /* ⚠️ Serve insieme a `width: 100%`, non al suo posto: il `flex: 1` della
           regola di sopra (le voci centrate nella barra larga) mette
           `flex-basis: 0`, e con quello la lista non chiede più tutta la riga.
           Risultato: il menu aperto si affiancava al logo invece di aprirsi
           sotto. Con `flex-basis: 100%` torna a capo, che è il posto suo. */
        flex: 0 0 100%;
        flex-direction: column !important;
        align-items: stretch !important;
        gap: 0;
        padding: .5rem 0 .75rem !important;
        border-top: 1px solid var(--wiki-glass-border);
        margin-top: .55rem !important;
    }
    .fb-menu-check:checked ~ ul.nav-links { display: flex !important; }
    /* In colonna il distacco del gruppo di destra non ha senso: spingerebbe
       «Login» in fondo lasciando un buco in mezzo alla lista. */
    nav.wiki-site-nav ul.nav-links > li:first-child,
    nav.wiki-site-nav ul.nav-links li.nav-fine { margin-left: 0 !important; }
    /* In colonna la pastiglia diventa una riga come le altre: piena larghezza,
       altrimenti resta un bottoncino perso a sinistra. E non batte: l'anello che
       si allarga uscirebbe sopra le righe del menu aperto. */
    nav.wiki-site-nav .nav-links a.nav-login {
        /* `flex` e non `inline-flex`: la riga sotto mette `display: block` a tutte
           le voci, ma non batte questa, che e' piu' specifica. Senza questo
           `display` la pastiglia restava un bottoncino perso a sinistra. */
        display: flex;
        justify-content: center;
        margin: .5rem 0 .25rem;
        animation: none;
    }
    nav.wiki-site-nav .nav-links a {
        display: block;
        padding: .75rem .25rem;
        font-size: .95rem;
        border-bottom: 1px solid var(--wiki-glass-border);
    }
    /* Su telefono «Academy» smette di essere una pastiglia col contorno e torna una
       riga come le altre (2026-08-19, «academy da mobile pulsante normale sennò dà
       fastidio»). Nel menu aperto le righe sono tutte uguali, e un contorno rosso in
       mezzo all'elenco tira l'occhio senza servire: il pulsante che deve saltare
       all'occhio è «Login», che resta pieno e a piena larghezza. */
    nav.wiki-site-nav .nav-links a.nav-evidenza {
        display: block;
        border: 0;
        border-bottom: 1px solid var(--wiki-glass-border);
        border-radius: 0;
        padding: .75rem .25rem;
        color: var(--fb-red);
        font-weight: 600;
    }
    nav.wiki-site-nav .nav-links a.nav-evidenza:hover { background: none; color: var(--fb-red-dark); }
    nav.wiki-site-nav .nav-links li:last-child a { border-bottom: none; }
    nav.wiki-site-nav .nav-links a.active { border-bottom: 1px solid var(--wiki-glass-border); color: var(--fb-red); }
}

/* ---- Animations ---- */
@keyframes wiki-gradient {
    0%, 100% { background-position: 0% 50%; }
    50% { background-position: 100% 50%; }
}
@keyframes bubble-float-1 {
    0%, 100% { transform: translate(0, 0) scale(1); }
    33% { transform: translate(30px, -40px) scale(1.1); }
    66% { transform: translate(-20px, -20px) scale(0.95); }
}
@keyframes bubble-float-2 {
    0%, 100% { transform: translate(0, 0) scale(1); }
    33% { transform: translate(-40px, -30px) scale(1.05); }
    66% { transform: translate(25px, -50px) scale(0.9); }
}
@keyframes bubble-float-3 {
    0%, 100% { transform: translate(0, 0) scale(0.95); }
    50% { transform: translate(20px, -35px) scale(1.08); }
}
@keyframes bubble-float-4 {
    0%, 100% { transform: translate(0, 0) scale(1.05); }
    40% { transform: translate(-30px, -25px) scale(0.92); }
    80% { transform: translate(15px, -45px) scale(1.02); }
}

/* ---- HEADER ---- */
/* L'hero è CHIARO, come su Binatomy: fondo bianco e testo scuro.
   Prima era un gradiente rosso saturo con il testo bianco sopra. Il colore non
   è sparito, si è spostato: sta nelle luci soffuse dietro (`.wiki-bubble`) e nel
   filo di gradiente in fondo, che è quello che tiene insieme le due marche. */
.wiki-header {
    /* Stesso fondo dell'hero delle landing: bianco che sfuma dal grigino, col
       velo del colore della pagina in cima. Le pagine che non sono ancora
       passate ai blocchi `fb-` si leggono comunque come le altre. */
    background: linear-gradient(to bottom, var(--wiki-bg), var(--wiki-card-bg));
    color: var(--wiki-dark);
    padding: 3.5rem 0 4.5rem;
    position: relative;
    overflow: visible;
    z-index: 20;
    border-bottom: 1px solid var(--wiki-glass-border);
}
.wiki-header::before {
    content: '';
    position: absolute;
    inset: 0 0 auto;
    height: 190px;
    background: linear-gradient(to bottom, color-mix(in srgb, var(--cat-color) 14%, transparent), transparent);
    pointer-events: none;
}

/* Il filo di gradiente in fondo all'hero: è l'unico punto in cui il colore si
   vede pieno, e basta per riconoscere il sito. */
.wiki-header::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: -1px;
    height: 3px;
    background: var(--fb-gradient);
    background-size: 300% 100%;
    animation: wiki-gradient 12s ease infinite;
}
.wiki-header .container {
    position: relative;
    z-index: 2;
}

/* Le luci soffuse dietro al titolo.
   Su fondo bianco un alone bianco non si vede: sono diventate le tinte di
   marca a bassissima opacità, che è quello che fa Binatomy sotto al logo. */
.wiki-bubble {
    position: absolute;
    border-radius: 50%;
    pointer-events: none;
    filter: blur(6px);
}
.wiki-bubble:nth-child(1) { width: 260px; height: 260px; top: -12%; left: 58%; background: radial-gradient(circle, rgba(194,0,28,0.12) 0%, rgba(194,0,28,0) 70%); animation: bubble-float-1 14s ease-in-out infinite; }
.wiki-bubble:nth-child(2) { width: 200px; height: 200px; top: 44%; left: 26%; background: radial-gradient(circle, rgba(241,90,36,0.10) 0%, rgba(241,90,36,0) 70%); animation: bubble-float-3 18s ease-in-out infinite; }
.wiki-bubble:nth-child(3) { width: 320px; height: 320px; top: -20%; left: 76%; background: radial-gradient(circle, rgba(230,57,70,0.11) 0%, rgba(230,57,70,0) 70%); animation: bubble-float-2 24s ease-in-out infinite; }
.wiki-bubble:nth-child(4) { width: 180px; height: 180px; top: 52%; left: 84%; background: radial-gradient(circle, rgba(125,0,18,0.09) 0%, rgba(125,0,18,0) 70%); animation: bubble-float-4 16s ease-in-out infinite; }
.wiki-bubble:nth-child(5) { width: 240px; height: 240px; top: 18%; left: -6%; background: radial-gradient(circle, rgba(247,147,30,0.12) 0%, rgba(247,147,30,0) 70%); animation: bubble-float-1 21s ease-in-out infinite 2s; }

/* Il titolo grosso e stretto, con la spaziatura tirata: è la cosa che si
   riconosce di Binatomy prima ancora del colore. */
.wiki-header h1 {
    font-size: clamp(2.3rem, 5vw, 3.6rem);
    font-weight: 700;
    line-height: 1.04;
    letter-spacing: -0.03em;
    color: var(--wiki-dark);
    margin: 0 0 .8rem;
}
.wiki-header .lead {
    font-size: 1.2rem;
    line-height: 1.65;
    color: var(--wiki-text-muted);
    margin: 0;
    font-weight: 400;
    max-width: 62ch;
}
.wiki-header .lead a { color: var(--wiki-primary); }

/* ---- BREADCRUMB ---- */
.wiki-breadcrumb {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    /* Su fondo bianco un vetro bianco non si vede: adesso è una pillola grigia. */
    background: var(--wiki-glass-bg);
    border: 1px solid var(--wiki-glass-border);
    border-radius: 25px;
    padding: .45rem 1.1rem;
    font-size: .82rem;
    font-weight: 500;
    margin-bottom: 1.2rem;
    color: #fff;
}
.wiki-breadcrumb { color: var(--wiki-text-muted); }
.wiki-breadcrumb a { color: var(--wiki-primary); text-decoration: none; }
.wiki-breadcrumb a:hover { text-decoration: underline; }
.wiki-breadcrumb .sep { color: #cbd5e1; }

/* ---- MAIN CONTAINER ---- */
.wiki-container {
    max-width: 1320px;
    margin: 0 auto !important;
    padding: 4rem 1rem 4rem !important;
    position: relative;
    z-index: 10;
}

/* ---- ARTICLE LAYOUT (TOC | Content | Sidebar) ---- */
.wiki-layout {
    display: grid;
    grid-template-columns: 210px 1fr 250px;
    gap: 2rem;
    align-items: start;
}
/* Indice (sinistra): resta sempre visibile durante lo scroll */
.wiki-toc-wrapper { position: sticky; top: calc(var(--fb-barra-h) + 1.5rem); align-self: start; }
@media(max-width:1100px) {
    .wiki-layout { grid-template-columns: 1fr 260px; }
    .wiki-toc-wrapper { display: none; }
}
@media(max-width:768px) {
    .wiki-layout { grid-template-columns: 1fr; }
    .wiki-sidebar { order: -1; }
}

/* ---- TABLE OF CONTENTS ---- */
.wiki-toc {
    position: sticky;
    top: calc(var(--fb-barra-h) + 1.5rem);
    background: var(--wiki-card-bg);
    border-radius: var(--wiki-radius);
    padding: 1.25rem;
    box-shadow: var(--wiki-shadow);
    border: 1px solid var(--wiki-glass-border);
}
.wiki-toc h4 {
    font-size: .75rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--wiki-text-muted);
    margin: 0 0 .75rem;
    font-weight: 700;
}
.wiki-toc ul { list-style: none; padding: 0; margin: 0; }
.wiki-toc li { margin-bottom: .35rem; }
.wiki-toc a {
    font-size: .82rem;
    color: var(--wiki-text-muted);
    text-decoration: none;
    display: block;
    padding: .3rem .6rem;
    border-radius: var(--wiki-radius-xs);
    border-left: 2px solid transparent;
    transition: all .2s;
}
.wiki-toc a:hover,
.wiki-toc a.active {
    color: var(--cat-color);
    background: var(--cat-color-light);
    border-left-color: var(--cat-color);
}

/* ---- CONTENT AREA ---- */
.wiki-content {
    background: var(--wiki-card-bg);
    border-radius: var(--wiki-radius);
    padding: 2.5rem;
    box-shadow: var(--wiki-shadow-lg);
    border: 1px solid var(--wiki-glass-border);
    line-height: 1.75;
}
.wiki-content h2 {
    font-size: 1.4rem;
    font-weight: 700;
    margin: 2.5rem 0 1rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--wiki-glass-border);
    scroll-margin-top: calc(var(--fb-barra-h) + 1rem);
}
.wiki-content h2:first-of-type { border-top: none; margin-top: .5rem; padding-top: 0; }
.wiki-content h3 {
    font-size: 1.15rem;
    font-weight: 600;
    margin: 1.8rem 0 .75rem;
    scroll-margin-top: calc(var(--fb-barra-h) + 1rem);
}
.wiki-content p { margin: 0 0 1rem; font-size: .95rem; }
.wiki-content ul, .wiki-content ol { margin: 0 0 1.25rem; padding-left: 1.5rem; }
.wiki-content li { margin-bottom: .4rem; font-size: .95rem; }
.wiki-content strong { font-weight: 700; }
.wiki-content a { color: var(--cat-color); text-decoration: none; font-weight: 500; }
.wiki-content a:hover { text-decoration: underline; }
.wiki-content blockquote {
    border: 1px solid var(--wiki-glass-border);
    background: var(--cat-color-light);
    padding: 1rem 1.25rem;
    border-radius: var(--wiki-radius-sm);
    margin: 1.5rem 0;
    font-size: .92rem;
}
.wiki-content code {
    background: var(--wiki-glass-bg);
    padding: .15rem .4rem;
    border-radius: 4px;
    font-size: .85rem;
}
.wiki-content .info-box {
    background: rgba(59,130,246,0.06);
    border: 1px solid var(--wiki-glass-border);
    border-radius: var(--wiki-radius-sm);
    padding: 1.25rem;
    margin: 1.5rem 0;
    font-size: .9rem;
}
.wiki-content .info-box strong { color: #3b82f6; }
.wiki-content table {
    width: 100%;
    border-collapse: collapse;
    margin: 1.5rem 0;
    font-size: .9rem;
}
.wiki-content th, .wiki-content td {
    padding: .65rem .85rem;
    border: 1px solid var(--wiki-glass-border);
    text-align: left;
}
.wiki-content th {
    background: var(--cat-color-light);
    font-weight: 600;
    font-size: .82rem;
    text-transform: uppercase;
    letter-spacing: .03em;
}

/* Meta info sotto il titolo */
.wiki-meta {
    display: flex;
    gap: 1.5rem;
    flex-wrap: wrap;
    font-size: .8rem;
    color: var(--wiki-text-muted);
    margin-bottom: 1.5rem;
    padding-bottom: 1rem;
    border-bottom: 1px solid var(--wiki-glass-border);
}
.wiki-meta span { display: inline-flex; align-items: center; gap: .3rem; }

/* ---- SIDEBAR ---- */
.wiki-sidebar { align-self: start; }
.wiki-sidebar-card {
    background: var(--wiki-card-bg);
    border-radius: var(--wiki-radius);
    padding: 1.25rem;
    box-shadow: var(--wiki-shadow);
    border: 1px solid var(--wiki-glass-border);
    margin-bottom: 1.25rem;
}
.wiki-sidebar-card h4 {
    font-size: .75rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--wiki-text-muted);
    margin: 0 0 .75rem;
    font-weight: 700;
}
.wiki-sidebar-card ul { list-style: none; padding: 0; margin: 0; }
.wiki-sidebar-card li { margin-bottom: .3rem; }
.wiki-sidebar-card a {
    font-size: .85rem;
    color: var(--wiki-text);
    text-decoration: none;
    display: block;
    padding: .35rem .5rem;
    border-radius: var(--wiki-radius-xs);
    transition: all .2s;
}
.wiki-sidebar-card a:hover {
    background: var(--cat-color-light);
    color: var(--cat-color);
}
.wiki-sidebar-card a.current {
    background: var(--cat-color-light);
    color: var(--cat-color);
    font-weight: 600;
}

/* Author CTA box */
.wiki-author-box {
    background: linear-gradient(135deg, var(--cat-color-light), var(--wiki-glass-bg));
    border-radius: var(--wiki-radius);
    padding: 1.25rem;
    border: 1px solid var(--wiki-glass-border);
    text-align: center;
}
.wiki-author-box img {
    width: 72px;
    height: 72px;
    border-radius: 50%;
    margin-bottom: .75rem;
    border: 3px solid var(--cat-color);
    box-shadow: 0 4px 12px rgba(0,0,0,0.1);
    object-fit: cover;
}
.wiki-author-box h5 { font-size: .95rem; margin: 0 0 .25rem; font-weight: 700; }
.wiki-author-box p { font-size: .78rem; color: var(--wiki-text-muted); margin: 0 0 .85rem; }
.wiki-author-box .btn-wiki {
    display: block;
    background: var(--cat-color);
    color: #fff;
    font-size: .8rem;
    font-weight: 600;
    padding: .5rem 1.1rem;
    border-radius: 25px;
    text-decoration: none;
    text-align: center;
    transition: opacity .2s;
}
.wiki-author-box .btn-wiki:hover { opacity: .85; color: #fff; }
.wiki-author-box .btn-whatsapp {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .4rem;
    background: #25d366;
    color: #fff;
    font-size: .8rem;
    font-weight: 600;
    padding: .5rem 1.1rem;
    border-radius: 25px;
    text-decoration: none;
    text-align: center;
    transition: transform .2s, box-shadow .2s;
    margin-top: .5rem;
}
.wiki-author-box .btn-whatsapp:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 12px rgba(37,211,102,0.4);
    color: #fff;
}
/* ---- Il bottone di Sognatori, la community su Telegram (2026-09-18) ----
   Ha preso il posto del «Scrivimi» verde di WhatsApp nella scheda dell'autore,
   su wiki e corsi. Stessa forma del verde: cambia solo il colore, che è
   l'azzurro di Telegram. ⚠️ La bolla di WhatsApp in fondo a destra RESTA: chi
   vuole scrivere a Federico da lì lo fa ancora, e il bottone qui porta in un
   posto diverso, dove ci sono anche gli altri. */
.wiki-author-box .btn-telegram {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .4rem;
    background: #229ed9;
    color: #fff;
    font-size: .8rem;
    font-weight: 600;
    padding: .5rem 1.1rem;
    border-radius: 25px;
    text-decoration: none;
    text-align: center;
    transition: transform .2s, box-shadow .2s;
    margin-top: .5rem;
}
.wiki-author-box .btn-telegram:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 12px rgba(34,158,217,.4);
    color: #fff;
}

/* ---- La bolla di WhatsApp, in fondo a destra ----
   Il bottone verde c'era già, e di fianco aveva la nuvoletta «Scrivimi ora»
   disegnata con un `::after`. Dal 2026-08-18 la nuvoletta si apre davvero:
   premendo il bottone esce una bolla con la faccia, una riga di saluto e il
   pulsante che porta su WhatsApp col messaggio già scritto. È lì che è finito
   «Scrivimi», che prima stava nel menu in alto.

   Si apre con una casella di spunta e non con JavaScript, come il menu del
   telefono: il sito è statico, e una bolla che dipende da uno script è una bolla
   che sparisce quando lo script non arriva.

   ⚠️ Il markup non si scrive a mano nelle pagine, che sono 195: sta in
   `_strumenti/uniforma-menu.py`, che lo riscrive in tutte insieme e si tiene il
   messaggio precompilato della pagina (su ogni corso è diverso). */
.fb-wa {
    position: fixed;
    bottom: 30px;
    right: 30px;
    /* Un filo sopra il resto di quello che sta appiccicato in fondo a destra: il
       tasto «torna su» dei corsi (`corso-top-btn`, iniettato da
       `corsi/torna-su.js`) sta a 1000 e arriva dopo nel documento, quindi a pari
       z-index spuntava sopra la bolla aperta. */
    z-index: 1001;
    font-family: var(--wiki-font-sans);
    /* La larghezza è quella del bottone: la bolla e la nuvoletta stanno in
       `position: absolute` e si appendono a questo riquadro di 56px. */
    width: 56px;
}
/* La casella resta raggiungibile col tabulatore, quindi invisibile e non
   `hidden`: con `hidden` la bolla si aprirebbe soltanto col mouse. */
.fb-wa-check {
    position: absolute;
    right: 0;
    bottom: 0;
    width: 1px;
    height: 1px;
    margin: 0;
    opacity: 0;
    pointer-events: none;
}

/* Il bottone: batte come un cuore. Il battito è un'ombra che si allarga e
   sfuma, non un ingrandimento, così il bottone sta fermo e il dito lo prende
   dove lo vede. */
.fb-wa-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    background: #25d366;
    color: #fff;
    border-radius: 50%;
    cursor: pointer;
    box-shadow: 0 4px 15px rgba(37,211,102,.4);
    transition: transform .2s, box-shadow .2s, background .2s;
    animation: wiki-wa-pulse 2.4s cubic-bezier(.22,.61,.36,1) infinite;
}
@keyframes wiki-wa-pulse {
    0%   { box-shadow: 0 4px 15px rgba(37,211,102,.4), 0 0 0 0 rgba(37,211,102,.55); }
    70%  { box-shadow: 0 4px 15px rgba(37,211,102,.4), 0 0 0 20px rgba(37,211,102,0); }
    100% { box-shadow: 0 4px 15px rgba(37,211,102,.4), 0 0 0 0 rgba(37,211,102,0); }
}
.fb-wa-btn:hover {
    transform: scale(1.08);
    box-shadow: 0 6px 20px rgba(37,211,102,.5);
    animation: none;
}
.fb-wa-check:focus-visible ~ .fb-wa-btn {
    outline: 3px solid var(--wiki-dark);
    outline-offset: 3px;
}
/* A bolla aperta il bottone diventa la croce che la chiude: due bottoni per la
   stessa cosa, uno sopra l'altro, sarebbero uno di troppo in un angolo. */
.fb-wa-icona,
.fb-wa-x { display: flex; align-items: center; justify-content: center; }
.fb-wa-x { font-size: 1.9rem; line-height: 1; display: none; }
.fb-wa-check:checked ~ .fb-wa-btn {
    background: var(--wiki-dark);
    box-shadow: 0 4px 15px rgba(15,23,42,.25);
    animation: none;
}
.fb-wa-check:checked ~ .fb-wa-btn .fb-wa-icona { display: none; }
.fb-wa-check:checked ~ .fb-wa-btn .fb-wa-x { display: flex; }

/* La nuvoletta di richiamo: si clicca anche lei, e sparisce quando la bolla si
   apre, sennò sarebbero due fumetti sovrapposti.
   Non c'è subito: esce dopo sei secondi (2026-08-18, scelta di Federico). Chi
   arriva sulla pagina prima legge quello che è venuto a leggere; l'invito a
   scrivere arriva quando si è fermato. Il ritardo è il `6s` dell'animazione, e
   `forwards` è quello che la tiene ferma dov'è arrivata invece di rimandarla
   indietro. */
.fb-wa-nuvola {
    position: absolute;
    right: calc(100% + 14px);
    top: 50%;
    transform: translateY(-50%);
    background: var(--wiki-card-bg);
    color: var(--wiki-dark);
    font-size: .9rem;
    font-weight: 600;
    line-height: 1;
    white-space: nowrap;
    padding: .6rem .9rem;
    border-radius: 12px;
    box-shadow: 0 8px 22px rgba(15,23,42,.16);
    cursor: pointer;
    opacity: 0;
    transition: opacity .2s, transform .2s;
    animation: fb-wa-nuvola-entra .45s cubic-bezier(.22,.61,.36,1) 6s forwards;
}
@keyframes fb-wa-nuvola-entra {
    from { opacity: 0; transform: translateY(-50%) translateX(14px) scale(.92); }
    to   { opacity: 1; transform: translateY(-50%) translateX(0) scale(1); }
}
/* La punta, che la attacca al bottone */
.fb-wa-nuvola::after {
    content: '';
    position: absolute;
    left: 100%;
    top: 50%;
    width: 10px;
    height: 10px;
    margin-left: -5px;
    background: var(--wiki-card-bg);
    transform: translateY(-50%) rotate(45deg);
    border-radius: 2px;
    box-shadow: 3px -3px 6px rgba(15,23,42,.06);
}
.fb-wa-check:checked ~ .fb-wa-nuvola {
    animation: none;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-50%) translateX(8px);
}

/* La bolla. Sta chiusa con `visibility` e non con `display: none` perché così
   l'apertura si vede: sale di dodici pixel e cresce dal suo angolo in basso a
   destra, che è dove sta il bottone che l'ha aperta. */
.fb-wa-bolla {
    position: absolute;
    right: 0;
    bottom: calc(100% + 14px);
    width: 320px;
    max-width: calc(100vw - 60px);
    background: var(--wiki-card-bg);
    border-radius: 18px;
    box-shadow: 0 18px 50px rgba(15,23,42,.20);
    overflow: hidden;
    opacity: 0;
    visibility: hidden;
    transform: translateY(12px) scale(.96);
    transform-origin: bottom right;
    transition: opacity .22s ease, transform .22s cubic-bezier(.22,.61,.36,1), visibility .22s;
}
.fb-wa-check:checked ~ .fb-wa-bolla {
    opacity: 1;
    visibility: visible;
    transform: translateY(0) scale(1);
}
/* La testa: il verde scuro di WhatsApp, che si riconosce prima di leggere. */
.fb-wa-testa {
    display: flex;
    align-items: center;
    gap: .65rem;
    background: #075e54;
    color: #fff;
    padding: .8rem .9rem;
}
.fb-wa-testa img {
    width: 42px;
    height: 42px;
    border-radius: 50%;
    object-fit: cover;
    flex-shrink: 0;
    background: #fff;
}
.fb-wa-chi { display: flex; flex-direction: column; gap: .18rem; min-width: 0; }
.fb-wa-chi strong { font-size: .92rem; font-weight: 700; line-height: 1.2; }
.fb-wa-chi span {
    display: flex;
    align-items: center;
    gap: .35rem;
    font-size: .76rem;
    line-height: 1.2;
    color: rgba(255,255,255,.82);
}
/* Il pallino verde della presenza */
.fb-wa-chi span::before {
    content: '';
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: #25d366;
    flex-shrink: 0;
}
.fb-wa-chiudi {
    margin-left: auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    flex-shrink: 0;
    border-radius: 50%;
    font-size: 1.35rem;
    line-height: 1;
    color: #fff;
    opacity: .75;
    cursor: pointer;
    transition: opacity .2s, background .2s;
}
.fb-wa-chiudi:hover { opacity: 1; background: rgba(255,255,255,.16); }
/* Il messaggio: l'angolo in basso a sinistra stretto lo fa sembrare quello che
   è, cioè il primo messaggio di una chat. */
.fb-wa-msg {
    margin: .9rem .9rem 0;
    padding: .7rem .85rem;
    background: var(--wiki-glass-bg);
    border-radius: 14px 14px 14px 4px;
    font-size: .88rem;
    line-height: 1.55;
    color: var(--wiki-text);
}
.fb-wa-vai {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .5rem;
    margin: .85rem .9rem 1rem;
    padding: .75rem 1rem;
    background: #25d366;
    color: #fff !important;
    font-size: .9rem;
    font-weight: 700;
    text-decoration: none !important;
    border: none;
    border-radius: 30px;
    transition: background .2s, transform .2s;
}
.fb-wa-vai:hover { background: #1fb855; transform: translateY(-1px); }
.fb-wa-vai svg { flex-shrink: 0; }

/* Sul telefono lo schermo è tutto occupato: resta il bottone, la nuvoletta no. */
@media (max-width: 480px) {
    .fb-wa { bottom: 18px; right: 18px; }
    .fb-wa-nuvola { display: none; }
    .fb-wa-bolla { max-width: calc(100vw - 36px); }
}
/* Chi ha chiesto al sistema operativo di non muovere niente non vede il battito
   e non vede l'apertura: la bolla c'è o non c'è. */
@media (prefers-reduced-motion: reduce) {
    .fb-wa-btn { animation: none; }
    .fb-wa-bolla,
    .fb-wa-nuvola { transition: none; }
    /* La nuvoletta esce comunque dopo i sei secondi, ma senza scivolare: se le
       togliessimo l'animazione resterebbe invisibile per sempre. */
    .fb-wa-nuvola { animation-duration: .01s; }
}
/* Sulla carta non serve a niente. */
/* In stampa non ci va niente che inviti a fare qualcosa: la bolla di
   WhatsApp, e la striscia del webinar col suo riquadro (che sulla pagina
   del CV finiva dentro al PDF). */
@media print { .fb-wa, .fb-avviso, .fb-modale, .fb-modale-fondo { display: none !important; } }

/* ---- CATEGORY INDEX CARDS ---- */
.wiki-cat-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
    gap: 1.5rem;
}
.wiki-cat-card {
    background: var(--wiki-card-bg);
    border-radius: 24px;
    padding: 1.75rem;
    box-shadow: var(--wiki-shadow);
    border: 1px solid var(--wiki-glass-border);
    transition: transform .2s, box-shadow .2s, border-color .2s;
    text-decoration: none;
    color: inherit;
    display: block;
}
.wiki-cat-card:hover {
    transform: translateY(-3px);
    box-shadow: var(--wiki-shadow-lg);
    border-color: color-mix(in srgb, var(--cat-color) 45%, transparent);
}
.wiki-cat-card h3 { letter-spacing: -.01em; }
.wiki-cat-card p { font-size: .95rem; }
.wiki-cat-card .cat-icon {
    width: 48px;
    height: 48px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.4rem;
    margin-bottom: 1rem;
}
.wiki-cat-card h3 { font-size: 1.1rem; font-weight: 700; margin: 0 0 .4rem; }
.wiki-cat-card p { font-size: .85rem; color: var(--wiki-text-muted); margin: 0 0 1rem; line-height: 1.5; }
.wiki-cat-card .cat-count {
    font-size: .75rem;
    font-weight: 600;
    color: var(--cat-color);
    text-transform: uppercase;
    letter-spacing: .05em;
}

/* Article list card on category index */
.wiki-article-list { list-style: none; padding: 0; margin: 0; }
.wiki-article-list li {
    border-bottom: 1px solid var(--wiki-glass-border);
}
.wiki-article-list li:last-child { border-bottom: none; }
.wiki-article-list a {
    display: flex;
    align-items: center;
    gap: .75rem;
    padding: .85rem .5rem;
    text-decoration: none;
    color: var(--wiki-text);
    font-size: .92rem;
    font-weight: 500;
    transition: all .2s;
    border-radius: var(--wiki-radius-xs);
}
.wiki-article-list a:hover {
    background: var(--cat-color-light);
    color: var(--cat-color);
    padding-left: 1rem;
}
.wiki-article-list .num {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--cat-color-light);
    color: var(--cat-color);
    font-size: .72rem;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

/* ---- SEARCH ---- */
.wiki-search-wrapper { position: relative; max-width: 480px; margin: 0 auto 2rem; z-index: 200; }
.wiki-search-input {
    width: 100%;
    padding: .85rem 1.25rem .85rem 3rem;
    border: 1px solid var(--wiki-glass-border);
    border-radius: 50px;
    background: var(--wiki-card-bg);
    font-size: .92rem;
    font-family: inherit;
    box-shadow: var(--wiki-shadow);
    outline: none;
    transition: border-color .2s;
}
.wiki-search-input:focus { border-color: var(--wiki-primary); box-shadow: 0 0 0 3px rgba(194,0,28,0.1); }
.wiki-search-icon {
    position: absolute;
    left: 1.1rem;
    top: 50%;
    transform: translateY(-50%);
    color: var(--wiki-text-muted);
    font-size: 1rem;
}
.wiki-search-results {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    background: var(--wiki-card-bg);
    border-radius: var(--wiki-radius-sm);
    box-shadow: var(--wiki-shadow-lg);
    border: 1px solid var(--wiki-glass-border);
    margin-top: .5rem;
    max-height: 320px;
    overflow-y: auto;
    display: none;
    z-index: 9999;
}
.wiki-search-results.active { display: block; }
.wiki-search-results a {
    display: block;
    padding: .75rem 1.1rem;
    text-decoration: none;
    color: var(--wiki-text);
    font-size: .88rem;
    border-bottom: 1px solid var(--wiki-glass-border);
    transition: background .15s;
}
.wiki-search-results a:last-child { border-bottom: none; }
.wiki-search-results a:hover { background: var(--wiki-glass-bg); }
.wiki-search-results .cat-badge {
    font-size: .68rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .05em;
    padding: .15rem .5rem;
    border-radius: 20px;
    margin-right: .5rem;
}

/* ---- HUB PAGE (wiki/index.html) ---- */
.wiki-hub-hero {
    text-align: center;
    padding: 4.5rem 0 7rem;
}
.wiki-hub-hero h1 {
    font-size: clamp(2.4rem, 5.2vw, 3.75rem);
    font-weight: 700;
    letter-spacing: -.03em;
    line-height: 1.04;
    margin: 0 0 .9rem;
}
.wiki-hub-hero .lead {
    font-size: 1.2rem;
    max-width: 620px;
    margin: 0 auto 2rem;
}
/* Sugli hero centrati anche il sottotitolo e i bottoni stanno in mezzo. */
.wiki-hub-hero .fb-sub { margin-left: auto; margin-right: auto; }
/* Briciole e pastiglia sono tutte e due `inline-flex`: senza questo finiscono
   appaiate sulla stessa riga e sembrano un unico pezzo storto. */
.wiki-hub-hero .wiki-breadcrumb,
.wiki-hub-hero .fb-kicker { display: flex; width: fit-content; margin-left: auto; margin-right: auto; }
.wiki-hub-hero .fb-actions,
.wiki-hub-hero .corso-hero-meta { justify-content: center; }

/* ---- IL FOOTER, uguale su tutte le pagine ---- */
footer.wiki-footer {
    background: var(--wiki-dark) !important;
    color: rgba(255,255,255,.7) !important;
    padding: 3.5rem 0 2rem !important;
    margin-top: 3rem;
    text-align: left !important;
}
/* Quando sopra al footer c'è la fascia scura dei contatti i 3rem di stacco
   diventano una striscia bianca in mezzo a due blocchi scuri: lì si azzerano,
   così il nero continua fino in fondo (2026-08-18). */
/* ⚠️ Fratello generico (`~`) e non adiacente (`+`): fra la fascia e il footer
   uniforma-menu.py infila il blocco `fb-wa` della bolla di WhatsApp, quindi con
   il `+` la regola non si applicava piu' e tornava la striscia bianca da 3rem
   in mezzo a due blocchi scuri (2026-09-03). */
/* ⚠️ Fra la fascia e il footer `_strumenti/uniforma-menu.py` infila il blocco
   `fb-wa` della bolla di WhatsApp, gli script e la lineetta di scorrimento: da
   quando c'e' la bolla, il fratello adiacente non trova piu' niente e tornava una
   striscia bianca da 3rem in mezzo a due blocchi scuri (2026-09-03).
   ⚠️ E non basta il fratello generico `~`: quello vede una `fb-cta-band` in
   QUALUNQUE punto prima, e sulle schede dei workshop la fascia sta in mezzo alla
   pagina mentre l'ultima sezione e' chiara, quindi azzerava lo stacco anche dove
   serviva. Si guarda l'ULTIMA sezione, che e' quella che tocca il footer: se e'
   scura lo stacco sparisce, sennò resta. Il secondo blocco e' per le pagine che
   tengono le sezioni dentro a un <main> (academy).
   Dove `:has()` non c'e', torna lo stacco: brutto, e non rompe niente. */
/* ⚠️ La classe la mette `_strumenti/uniforma-menu.py`, guardando qual è l'ultima
   sezione della pagina, e NON un selettore. In CSS questo caso non si prende: il
   fratello adiacente (`+`) non vede il footer perché in mezzo c'è la bolla di
   WhatsApp; il fratello generico (`~`) vede anche una fascia a metà pagina, e
   sulle schede dei workshop azzerava lo stacco dove serviva; e `:has()` con
   `:last-of-type` in Chromium corrisponde ma non applica il margine (la regola è
   nel CSSOM, `matches()` dice sì, il margine resta a 3rem). */
footer.wiki-footer--attaccato { margin-top: 0; }
/* Il logo AIPIA nel footer: è la versione bianca su trasparente, presa dal loro
   sito e tenuta in casa (`images/aipia-bianco.png`) invece di puntare al loro
   server. Sotto c'è la riga con la tessera, che porta alla pagina di verifica: una
   credenziale vale perché si controlla, e un distintivo senza link lo mette chiunque. */
.footer-aipia {
    display: block;
    margin-top: 1.1rem;
    text-decoration: none;
    max-width: 200px;
}
.footer-aipia img {
    display: block;
    width: 100%;
    height: auto;
    /* ⚠️ Un filo spento, come il resto del testo del footer: a piena opacità il
       logo di un'altra organizzazione grida più del nome di Federico. */
    opacity: .75;
    transition: opacity .2s;
}
.footer-aipia span {
    display: block;
    margin-top: .35rem;
    font-size: .78rem;
    color: rgba(255, 255, 255, .55);
}
.footer-aipia:hover img { opacity: 1; }
.footer-aipia:hover span { color: rgba(255, 255, 255, .85); }

footer.wiki-footer > .container {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 1.5rem;
}
footer.wiki-footer .wiki-footer-top {
    display: grid !important;
    /* Cinque colonne: Federico, i workshop, i corsi online, la wiki e il resto
       del sito. Le colonne di sezione stanno tutte qui e non cambiano da una
       pagina all'altra, sennò il footer torna a essere diverso ovunque. */
    grid-template-columns: 1.6fr repeat(4, 1fr);
    gap: 2rem;
    margin-bottom: 2.5rem;
    padding-bottom: 2rem;
    border-bottom: 1px solid rgba(255,255,255,.08);
}
@media(max-width:1000px) { footer.wiki-footer .wiki-footer-top { grid-template-columns: 1fr 1fr 1fr; gap: 1.75rem; } }
@media(max-width:768px) { footer.wiki-footer .wiki-footer-top { grid-template-columns: 1fr 1fr; gap: 1.5rem; } }
@media(max-width:480px) { footer.wiki-footer .wiki-footer-top { grid-template-columns: 1fr; } }
footer.wiki-footer .wiki-footer-top h5 {
    color: #fff !important;
    font-size: .72rem;
    text-transform: uppercase;
    letter-spacing: .1em;
    margin: 0 0 1rem !important;
    font-weight: 700;
}
footer.wiki-footer .wiki-footer-top p {
    font-size: .82rem;
    line-height: 1.6;
    margin: 0 0 .75rem;
    color: rgba(255,255,255,.5);
}
footer.wiki-footer .wiki-footer-top a {
    color: rgba(255,255,255,.55) !important;
    text-decoration: none !important;
    font-size: .82rem;
    display: block !important;
    padding: .2rem 0;
    transition: color .2s;
}
footer.wiki-footer .wiki-footer-top a:hover { color: #fff !important; }
footer.wiki-footer .wiki-footer-bottom {
    padding-top: 1.5rem;
    display: flex !important;
    justify-content: space-between !important;
    align-items: center !important;
    flex-wrap: wrap;
    gap: 1rem;
}
footer.wiki-footer .wiki-footer-cats {
    display: flex !important;
    flex-wrap: wrap;
    gap: .5rem 1.25rem;
}
footer.wiki-footer .wiki-footer-cats a {
    font-size: .78rem;
    color: rgba(255,255,255,.4) !important;
    text-decoration: none !important;
    font-weight: 500;
    transition: color .2s;
}
footer.wiki-footer .wiki-footer-cats a:hover { color: rgba(255,255,255,.8) !important; }
footer.wiki-footer small { color: rgba(255,255,255,.35) !important; font-size: .75rem; }
footer.wiki-footer small a { color: var(--wiki-primary) !important; text-decoration: none !important; }

/* ---- FOOTER · la fascia che porta ai workshop ----
   ⚠️ SPENTA dal 2026-08-30 (scelta di Federico: «togli questo dal footer»):
   nessuna pagina ha più questo markup. Le regole restano perché anche il markup
   resta, commentato in `_strumenti/uniforma-menu.py` (cerca FASCIA-WORKSHOP):
   qui non c'è git, e riaccenderla senza il suo foglio darebbe una fascia nuda. */
/* ⚠️ LA FASCIA DELLA NEWSLETTER, IN CIMA AL FOOTER DI TUTTE LE PAGINE
   (2026-09-30). È il passaggio 2 del funnel di Federico: corso gratuito →
   newsletter → Academy → Divide et Delega. Sta in cima al footer proprio
   perché così finisce anche in fondo a ogni lezione dei corsi gratuiti, che
   è il punto in cui uno ha appena finito di leggere e decide se andare avanti.
   Il markup lo scrive `_strumenti/uniforma-menu.py`, non si tocca a mano.
   ⚠️ Non è flex sul testo: il modulo e il testo sono due blocchi, ma dentro
   al testo si va di margini normali. È la regola di `.corso-checklist` e
   `.fb-check`, dove un flex spezzava le righe con un link dentro. */
footer.wiki-footer .fb-news {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 22px 40px;
    padding: 26px 28px;
    margin-bottom: 40px;
    border-radius: 18px;
    background: linear-gradient(135deg, rgba(194, 0, 28, .10), rgba(194, 0, 28, .04));
    border: 1px solid rgba(194, 0, 28, .22);
}
footer.wiki-footer .fb-news-txt { flex: 1 1 280px; min-width: 0; }
footer.wiki-footer .fb-news-occhiello {
    display: block;
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .09em;
    text-transform: uppercase;
    color: var(--fb-red);
    margin-bottom: 6px;
}
footer.wiki-footer .fb-news h4 {
    margin: 0 0 6px;
    font-size: 1.24rem;
    font-weight: 700;
    letter-spacing: -.01em;
    color: #fff;
}
footer.wiki-footer .fb-news p {
    margin: 0;
    font-size: .93rem;
    line-height: 1.55;
    max-width: 46ch;
}
footer.wiki-footer .fb-news-form {
    flex: 1 1 320px;
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
}
footer.wiki-footer .fb-news-lab {
    position: absolute;
    width: 1px; height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
footer.wiki-footer .fb-news-form input {
    flex: 1 1 190px;
    min-width: 0;
    padding: 13px 16px;
    font: inherit;
    font-size: 1rem;
    color: #fff;
    background: rgba(255, 255, 255, .07);
    border: 1px solid rgba(255, 255, 255, .22);
    border-radius: 10px;
}
footer.wiki-footer .fb-news-form input::placeholder { color: rgba(255, 255, 255, .45); }
footer.wiki-footer .fb-news-form input:focus-visible {
    outline: 2px solid var(--fb-red);
    outline-offset: 2px;
    background: rgba(255, 255, 255, .12);
}
footer.wiki-footer .fb-news-form button {
    padding: 13px 26px;
    font: inherit;
    font-size: 1rem;
    font-weight: 700;
    color: #fff;
    background: var(--fb-red);
    border: 0;
    border-radius: 10px;
    cursor: pointer;
    transition: background .2s ease;
}
/* Col mouse sopra il rosso si scurisce e resta rosso: è la regola del
   2026-09-03, un tasto va nella propria direzione e non diventa un altro. */
footer.wiki-footer .fb-news-form button:hover { background: #960015; }
footer.wiki-footer .fb-news-form button:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
@media (max-width: 560px) {
    footer.wiki-footer .fb-news { padding: 22px 18px; gap: 18px; }
    footer.wiki-footer .fb-news-form input,
    footer.wiki-footer .fb-news-form button { flex: 1 1 100%; }
}

footer.wiki-footer .footer-altaformazione {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1.5rem;
    flex-wrap: wrap;
    background: var(--fb-gradient);
    background-size: 200% 200%;
    border-radius: var(--wiki-radius);
    padding: 1.6rem 1.9rem;
    margin-bottom: 2.5rem;
    text-decoration: none !important;
    transition: transform .2s, box-shadow .2s;
}
footer.wiki-footer .footer-altaformazione:hover { transform: translateY(-2px); box-shadow: 0 12px 30px rgba(194, 0, 28, .3); }
footer.wiki-footer .footer-altaformazione .faf-txt { display: block; flex: 1; min-width: 240px; }
footer.wiki-footer .footer-altaformazione .faf-eyebrow {
    display: block;
    font-size: .68rem; font-weight: 700;
    letter-spacing: .12em; text-transform: uppercase;
    color: rgba(255,255,255,.72) !important;
    margin-bottom: .45rem;
}
footer.wiki-footer .footer-altaformazione .faf-title {
    display: block;
    color: #fff !important;
    font-size: 1.18rem; font-weight: 800;
    letter-spacing: -.01em; margin-bottom: .35rem;
}
footer.wiki-footer .footer-altaformazione .faf-desc {
    display: block;
    color: rgba(255,255,255,.85) !important;
    font-size: .85rem; line-height: 1.5; max-width: 62ch;
}
footer.wiki-footer .footer-altaformazione .faf-btn {
    flex-shrink: 0;
    background: #fff; color: var(--fb-red) !important;
    font-weight: 700; font-size: .9rem;
    padding: .75rem 1.5rem; border-radius: 30px;
    display: inline-flex; align-items: center; gap: .5rem; white-space: nowrap;
}
footer.wiki-footer .footer-altaformazione .faf-btn span { font-size: 1.1em; line-height: 1; }
@media(max-width:560px) {
    footer.wiki-footer .footer-altaformazione { padding: 1.35rem 1.4rem; }
    footer.wiki-footer .footer-altaformazione .faf-btn { width: 100%; justify-content: center; }
}

/* ---- MOBILE TOC TOGGLE ---- */
.wiki-toc-mobile {
    display: none;
    background: var(--wiki-card-bg);
    border-radius: var(--wiki-radius);
    padding: 1rem 1.25rem;
    box-shadow: var(--wiki-shadow);
    border: 1px solid var(--wiki-glass-border);
    margin-bottom: 1.25rem;
    cursor: pointer;
}
.wiki-toc-mobile .toc-toggle {
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: .85rem;
    font-weight: 600;
}
.wiki-toc-mobile .toc-toggle i { transition: transform .2s; }
.wiki-toc-mobile.open .toc-toggle i { transform: rotate(180deg); }
.wiki-toc-mobile ul { display: none; list-style: none; padding: .75rem 0 0; margin: 0; }
.wiki-toc-mobile.open ul { display: block; }
.wiki-toc-mobile li { margin-bottom: .3rem; }
.wiki-toc-mobile a {
    font-size: .82rem;
    color: var(--wiki-text-muted);
    text-decoration: none;
    padding: .25rem 0;
    display: block;
}
@media(max-width:1100px) { .wiki-toc-mobile { display: block; } }

/* ---- Category-specific colors ---- */
[data-category="seo"] { --cat-color: var(--wiki-seo); --cat-color-light: var(--wiki-seo-light); --cat-color-dark: #047857; }
[data-category="geo"] { --cat-color: var(--wiki-geo); --cat-color-light: var(--wiki-geo-light); --cat-color-dark: #6d28d9; }
[data-category="ai"] { --cat-color: var(--wiki-ai); --cat-color-light: var(--wiki-ai-light); --cat-color-dark: #b45309; }
[data-category="siti-web"] { --cat-color: var(--wiki-web); --cat-color-light: var(--wiki-web-light); --cat-color-dark: #1d4ed8; }
[data-category="brand"] { --cat-color: var(--wiki-brand); --cat-color-light: var(--wiki-brand-light); --cat-color-dark: var(--wiki-primary-dark); }

/* ---- Gradiente header per categoria: riprende il colore della propria sezione ---- */
/* (sovrascrivo solo background-image: background-size 300% e l'animazione restano) */
/* La categoria si riconosce dal filo di colore sotto l'hero, non dal fondo:
   il fondo è chiaro dappertutto, e cinque gradienti pieni diversi facevano
   sembrare cinque siti. */
[data-category="seo"] .wiki-header::after  { background: linear-gradient(90deg, #047857, #10b981, #047857); }
[data-category="geo"] .wiki-header::after  { background: linear-gradient(90deg, #4c1d95, #733397, #4c1d95); }
[data-category="ai"] .wiki-header::after   { background: linear-gradient(90deg, #f15a24, #f7931e, #f15a24); }
[data-category="siti-web"] .wiki-header::after { background: linear-gradient(90deg, #1d4ed8, #60a5fa, #1d4ed8); }
/* brand + hub usano il gradiente rosso di default (.wiki-header) */

/* ============================================
   WIKI v2 · ICONE LUCIDE + ILLUSTRAZIONI unDRAW
   ============================================ */

/* ---- Lucide icons (svg via data-lucide) ---- */
[data-lucide] {
    display: inline-block;
    width: 1em;
    height: 1em;
    vertical-align: -0.15em;
    stroke-width: 2;
    flex-shrink: 0;
}
.wiki-meta [data-lucide] { width: 15px; height: 15px; }
.toc-toggle [data-lucide] { width: 16px; height: 16px; }
i.wiki-search-icon[data-lucide], .wiki-search-icon { width: 18px; height: 18px; }
.wiki-cat-card .cat-icon [data-lucide] { width: 24px; height: 24px; }
.wiki-header h1 [data-lucide] { width: .95em; height: .95em; vertical-align: -0.08em; margin-right: .35rem; }
.wiki-content .info-box h4 [data-lucide] { width: 18px; height: 18px; vertical-align: -0.22em; margin-right: .4rem; }
.wiki-content h2 [data-lucide] {
    width: 20px; height: 20px; vertical-align: -0.18em;
    color: var(--cat-color); margin-right: .55rem;
}
.wiki-sidebar-card h4 [data-lucide],
.wiki-author-box [data-lucide] { width: 15px; height: 15px; }
.btn-wiki [data-lucide], .btn-whatsapp [data-lucide] { width: 15px; height: 15px; vertical-align: -0.18em; }

/* ---- Hero illustration (header destra: articoli + indici categoria) ---- */
.wiki-header { overflow: hidden; }
.wiki-hero-illustration {
    position: absolute;
    right: 3.5%;
    bottom: 6px;
    width: clamp(180px, 26vw, 290px);
    max-height: 80%;
    height: auto;
    pointer-events: none;
    z-index: 1;
    filter: drop-shadow(0 14px 26px rgba(0,0,0,0.18));
    animation: wiki-illu-in .8s cubic-bezier(.2,.7,.3,1) both;
}
@keyframes wiki-illu-in { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }
/* lascia spazio al testo perche' non finisca sotto l'illustrazione */
@media (min-width: 993px) {
    .wiki-header:not(.wiki-hub-hero) .container > .wiki-breadcrumb,
    .wiki-header:not(.wiki-hub-hero) .container > h1,
    .wiki-header:not(.wiki-hub-hero) .container > .lead { max-width: 68%; }
}
@media (max-width: 992px) { .wiki-hero-illustration { display: none; } }
/*
 * Sugli hero centrati (corsi, wiki, pubblicazioni) il testo sta in mezzo e
 * l'illustrazione resta appesa a destra: finché la finestra non è larga almeno
 * ~1300px le due cose si sovrappongono, e siccome l'SVG ha il suo cerchio
 * pieno il lead usciva tagliato a metà parola. Sotto quella soglia
 * l'illustrazione è solo una decorazione, quindi sparisce.
 */
@media (max-width: 1300px) { .wiki-hub-hero .wiki-hero-illustration { display: none; } }

/* Hub (hero centrato): illustrazione come blocco sotto il lead */
.wiki-hub-hero .wiki-hero-figure {
    margin: 1.75rem auto 0;
    max-width: 360px;
}
.wiki-hero-figure img {
    width: 100%;
    height: auto;
    filter: drop-shadow(0 14px 26px rgba(0,0,0,0.16));
}

/* ---- Figura illustrata dentro il contenuto ---- */
.wiki-figure {
    margin: 2rem 0;
    text-align: center;
    background: var(--cat-color-light);
    border: 1px solid var(--wiki-glass-border);
    border-radius: var(--wiki-radius-sm);
    padding: 1.75rem 1.5rem 1.25rem;
}
.wiki-figure img { width: 100%; max-width: 360px; height: auto; }
.wiki-figure figcaption {
    font-size: .8rem;
    color: var(--wiki-text-muted);
    margin-top: .9rem;
    font-style: italic;
}

/* ---- Key takeaways / punti chiave ---- */
.wiki-takeaways {
    background: linear-gradient(135deg, var(--cat-color-light), var(--wiki-glass-bg));
    border: 1px solid var(--wiki-glass-border);
    border-radius: var(--wiki-radius-sm);
    padding: 1.5rem 1.6rem;
    margin: 2.25rem 0;
}
.wiki-takeaways h4 {
    display: flex; align-items: center; gap: .5rem;
    font-size: 1rem; font-weight: 700; margin: 0 0 .85rem;
    color: var(--cat-color);
}
.wiki-takeaways h4 [data-lucide] { width: 20px; height: 20px; }
.wiki-takeaways ul { margin: 0; padding-left: 1.3rem; }
.wiki-takeaways li { font-size: .92rem; margin-bottom: .45rem; }
.wiki-takeaways li:last-child { margin-bottom: 0; }

/* ---- CTA formazione in coda articolo ---- */
.wiki-cta-formazione {
    margin: 2.5rem 0 .5rem;
    background: linear-gradient(135deg, var(--cat-color), var(--cat-color-dark));
    color: #fff;
    border-radius: var(--wiki-radius);
    padding: 1.75rem 1.9rem;
    display: flex; align-items: center; justify-content: space-between;
    gap: 1.25rem; flex-wrap: wrap;
}
.wiki-cta-formazione .txt h4 { color: #fff; font-size: 1.15rem; font-weight: 700; margin: 0 0 .35rem; }
.wiki-cta-formazione .txt p { color: rgba(255,255,255,.85); font-size: .9rem; margin: 0; }
.wiki-cta-formazione a {
    background: #fff; color: var(--cat-color) !important;
    font-weight: 700; font-size: .9rem;
    padding: .7rem 1.4rem; border-radius: 30px;
    text-decoration: none !important; white-space: nowrap;
    display: inline-flex; align-items: center; gap: .45rem;
    transition: transform .2s, box-shadow .2s;
}
.wiki-cta-formazione a:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(0,0,0,.2); }
.wiki-cta-formazione a [data-lucide] { width: 16px; height: 16px; }

/* ============================================
   LE LANDING · l'impaginazione delle pagine di Binatomy
   ============================================

   Questi blocchi sono il modo in cui sono fatte le landing di binatomy.com, che
   è l'impaginazione che volevamo anche qui: hero chiaro con il titolo grande,
   una striscia con i fatti della giornata, poi fasce bianche e grigie che si
   alternano fino in fondo, e in mezzo card con gli angoli larghi.

   Le classi cominciano tutte per `fb-` e non toccano niente di quello che c'è
   sopra: le pagine vecchie continuano a funzionare con le loro, e chi viene
   rifatto passa a queste.

   Il colore della pagina è `--fb-accent`, che si scrive sul tag della sezione
   (`style="--fb-accent:#733397"`). Dove non c'è si ricade sul rosso. Serve ai
   workshop, che sono cinque e devono distinguersi fra loro.
   ============================================ */

.fb-hero,
.fb-band,
.fb-card,
.fb-cta-band { --fb-accent: var(--fb-red); --fb-accent-dark: var(--fb-red-dark); }

/* ---- Le fasce: bianca, grigia, scura ---- */
.fb-band {
    position: relative;
    padding: 4rem 1.5rem;
    background: var(--wiki-card-bg);
    border-bottom: 1px solid var(--wiki-glass-border);
}
.fb-band--alt { background: var(--wiki-bg); }
.fb-band--dark {
    background: var(--wiki-dark);
    color: rgba(255,255,255,.72);
    border-bottom: none;
}
.fb-band--tight { padding: 2.5rem 1.5rem; }
.fb-inner { max-width: 1120px; margin: 0 auto; }
.fb-inner--narrow { max-width: 760px; }

/* ---- L'hero ---- */
.fb-hero {
    position: relative;
    overflow: hidden;
    padding: 3rem 1.5rem 3.5rem;
    background: linear-gradient(to bottom, var(--wiki-bg), var(--wiki-card-bg));
    border-bottom: 1px solid var(--wiki-glass-border);
}
/* Il velo del colore della pagina, in cima. Su fondo chiaro è quello che
   distingue una giornata dall'altra senza colorare tutto. */
.fb-hero::before {
    content: '';
    position: absolute;
    inset: 0 0 auto;
    height: 190px;
    background: linear-gradient(to bottom, color-mix(in srgb, var(--fb-accent) 15%, transparent), transparent);
    pointer-events: none;
}
.fb-hero > * { position: relative; z-index: 1; }
.fb-hero-inner {
    max-width: 1120px;
    margin: 0 auto;
    display: grid;
    gap: 2.5rem;
    align-items: center;
}
@media(min-width: 992px) {
    .fb-hero { padding: 3.5rem 1.5rem 4rem; }
    .fb-hero-inner--figure { grid-template-columns: 1fr 380px; }
}

/* Il ritorno all'elenco, sopra al titolo. */
.fb-back {
    /* Larghezza giusta ma su una riga sua: da `inline-flex` finiva appaiato
       alla pastiglia del titolo, e sembravano la stessa cosa. */
    display: flex;
    width: fit-content;
    align-items: center;
    gap: .4rem;
    font-size: .88rem;
    color: var(--wiki-text-muted);
    text-decoration: none;
    margin-bottom: 1.6rem;
    transition: color .2s;
}
.fb-back:hover { color: var(--wiki-dark); }
.fb-back [data-lucide] { width: 16px; height: 16px; }

/* La pastiglia sopra al titolo: dice che cos'è e quanto dura. */
.fb-kicker {
    display: inline-flex;
    align-items: center;
    gap: .45rem;
    background: var(--wiki-card-bg);
    /* Niente contorno colorato (2026-08-19, «togli tutti i bordi rossi»): la
       pastiglia si stacca dal fondo con l'ombra, e il colore resta nel testo. */
    border: 1px solid var(--wiki-glass-border);
    color: var(--fb-accent);
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
    border-radius: 30px;
    padding: .45rem 1rem;
    margin-bottom: 1.25rem;
}
.fb-kicker [data-lucide] { width: 14px; height: 14px; }

.fb-hero h1,
.fb-h1 {
    font-size: clamp(2.3rem, 5.2vw, 3.75rem);
    font-weight: 700;
    line-height: 1.04;
    letter-spacing: -.03em;
    color: var(--wiki-dark);
    margin: 0;
}
/* Il nome della giornata, sotto al titolo: il titolo dice di che si tratta,
   questa riga dice cosa esci sapendo fare. Nel colore della pagina. */
.fb-sub {
    font-size: clamp(1.4rem, 3vw, 1.9rem);
    font-weight: 600;
    line-height: 1.2;
    letter-spacing: -.02em;
    color: var(--fb-accent);
    margin: .75rem 0 0;
    max-width: 34ch;
}
.fb-lead {
    font-size: 1.2rem;
    line-height: 1.65;
    color: var(--wiki-text-muted);
    margin: 1.25rem 0 0;
    max-width: 60ch;
}
.fb-band--dark .fb-lead { color: rgba(255,255,255,.75); }

/* ---- Bottoni ---- */
.fb-actions { display: flex; flex-wrap: wrap; gap: .75rem; margin-top: 2rem; }
/* ⚠️ `--fb-accent` col ripiego sul rosso, e non nudo: `--fb-accent` è scritto
   sulle sezioni `fb-`, e un `fb-btn` messo in una sezione del tema (la home) si
   trovava senza. Un `var()` che non risolve non lascia il valore di prima: butta
   via tutta la dichiarazione, quindi `border: 2px solid var(--fb-accent)` faceva
   sparire anche il 2px e il solid, e il bottone vuoto restava senza contorno. */
.fb-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .5rem;
    background: var(--fb-accent, var(--fb-red));
    color: #fff !important;
    border: 2px solid var(--fb-accent, var(--fb-red));
    font-size: 1rem;
    font-weight: 600;
    padding: .85rem 1.9rem;
    border-radius: 40px;
    text-decoration: none !important;
    box-shadow: 0 10px 24px color-mix(in srgb, var(--fb-accent, var(--fb-red)) 28%, transparent);
    transition: transform .2s, box-shadow .2s, background .2s;
    cursor: pointer;
}
.fb-btn:hover { transform: translateY(-2px); box-shadow: 0 14px 30px color-mix(in srgb, var(--fb-accent, var(--fb-red)) 34%, transparent); color: #fff !important; }
.fb-btn--lg { font-size: 1.08rem; padding: 1rem 2.2rem; }
.fb-btn--ghost {
    background: transparent;
    color: var(--wiki-dark) !important;
    border-color: var(--wiki-glass-border);
    box-shadow: none;
}
.fb-btn--ghost:hover { border-color: var(--wiki-dark); color: var(--wiki-dark) !important; box-shadow: none; }
/* Il bottone vuoto sul fondo scuro: senza questa riga il testo restava scuro
   sopra allo scuro, cioè un bottone con dentro niente. */
.fb-band--dark .fb-btn--ghost,
.fb-cta-band .fb-btn--ghost { color: #fff !important; border-color: rgba(255,255,255,.35); }
.fb-band--dark .fb-btn--ghost:hover,
.fb-cta-band .fb-btn--ghost:hover { border-color: #fff; color: #fff !important; }
/* Tranne quando la fascia è chiara, che è il caso della giornata su misura. */
.fb-cta-band--light .fb-btn--ghost { color: var(--wiki-dark) !important; border-color: var(--wiki-glass-border); }
.fb-cta-band--light .fb-btn--ghost:hover { border-color: var(--wiki-dark); color: var(--wiki-dark) !important; }
.fb-btn--wa { background: #25d366; border-color: #25d366; box-shadow: 0 10px 24px rgba(37,211,102,.28); }
.fb-btn--wa:hover { box-shadow: 0 14px 30px rgba(37,211,102,.34); }
.fb-btn [data-lucide], .fb-btn i { width: 18px; height: 18px; }

/* ---- Il pulsante «Iscriviti» ----
   È quello che stava di fianco a ogni data su binatomy.com, e Federico voleva
   questo (2026-08-17). Le misure sono le sue: pastiglia tonda, 1,5rem di fianco
   e 0,75rem sopra e sotto, testo bianco a 600, ombra corta, e col mouse sopra
   cresce del 3% invece di alzarsi. Il lucchetto davanti dice che si paga lì.

   Non è un `fb-btn`: quello è il bottone grosso dell'hero, con l'ombra colorata
   larga e il bordo di 2px. Dentro alla riga di una data una data sola occupava
   mezza schermata.

   Il colore è quello della pagina (`--fb-accent`, che ogni workshop si scrive
   sulla sezione): su binatomy.com era `background: course.color`, cioè la stessa
   cosa. Serve sia ai workshop sia alla pagina delle date. */
.fb-iscriviti {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    background: var(--fb-accent, var(--fb-red));
    color: #fff !important;
    border: 0;
    font-size: 1rem;
    font-weight: 600;
    line-height: 1.5;
    padding: .75rem 1.5rem;
    border-radius: 9999px;
    white-space: nowrap;
    text-decoration: none !important;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,.1), 0 2px 4px -2px rgba(0,0,0,.1);
    transition: transform .15s ease;
    cursor: pointer;
}
.fb-iscriviti:hover,
.fb-iscriviti:focus { transform: scale(1.03); color: #fff !important; }
.fb-iscriviti [data-lucide], .fb-iscriviti i { width: 16px; height: 16px; }

/* «Dettagli», che non è un'iscrizione: stessa forma, senza il colore pieno. */
.fb-iscriviti--ghost {
    background: transparent;
    color: var(--wiki-dark) !important;
    box-shadow: inset 0 0 0 1px var(--wiki-glass-border);
}
.fb-iscriviti--ghost:hover,
.fb-iscriviti--ghost:focus { color: var(--wiki-dark) !important; box-shadow: inset 0 0 0 1px var(--wiki-dark); }

/* Sul telefono, nel calendario della sala, prende tutta la riga: di fianco al
   prezzo non ci sta, e mezzo bottone incolonnato a destra si legge come un errore.
   Due misure e non una: `flex: 1 0 100%` sul bottone da solo lo fermava al 70%
   della riga, perché prezzo e bottone stanno in un flex loro (`cal-side`) che è
   largo quanto il proprio contenuto. Va allargato anche quello.

   ⚠️ Qui c'era anche `.fb-date .fb-date-right`, cioè le date dei workshop: quel
   markup non esiste più (2026-08-19, vedi `fb-agenda`), e lì il piede della scheda
   tiene prezzo a sinistra e bottone a destra sulla stessa riga, che a 390px ci sta. */
@media(max-width:560px) {
    .cal-row .cal-side { flex: 1 0 100%; }
    .cal-side .fb-iscriviti { flex: 1 0 100%; justify-content: center; }
}

/* ---- La riga sotto al bottone: prossima data, posti, prezzo ---- */
.fb-hero-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .6rem 1rem;
    margin-top: 1.5rem;
    font-size: 1.05rem;
    color: var(--wiki-text-muted);
}
.fb-hero-meta strong { color: var(--wiki-dark); font-weight: 600; }
.fb-price {
    margin-top: .6rem;
    font-size: 1rem;
    color: var(--wiki-text-muted);
}
.fb-price b { font-size: 1.6rem; font-weight: 700; color: var(--wiki-dark); }
.fb-price del { color: #94a3b8; margin-left: .4rem; text-decoration-thickness: 2px; }

/* ---- «Lo regali?» ----
   Sta sotto al prezzo del workshop degli over 60, e da' del tu su una pagina che
   da' del voi (2026-09-04, Federico: «questo potresti essere te, o ancora piu'
   probabile tuo nonno o tua nonna: regalagli questo workshop»). Chi paga spesso
   e' il figlio o il nipote, che legge la stessa pagina ma non e' chi viene in
   aula. Il riquadro col colore del workshop serve proprio a dire «questa riga
   non parla a te che verrai, parla a chi ti ha portato qui».
   ⚠️ L'icona sta in `position:absolute` e non in un flex: dentro un flex ogni
   pezzo di testo diventa un elemento a se', e una riga con un grassetto o un
   link in mezzo si spacca in tronconi distanziati. E' gia' capitato tre volte. */
.fb-regalo {
    position: relative;
    margin-top: 1.1rem;
    padding: .85rem 1rem .85rem 2.9rem;
    border-radius: 12px;
    background: color-mix(in srgb, var(--fb-accent, var(--fb-red)) 7%, #fff);
    border: 1px solid color-mix(in srgb, var(--fb-accent, var(--fb-red)) 22%, #fff);
    font-size: .97rem;
    line-height: 1.55;
    color: var(--wiki-dark);
}
.fb-regalo i, .fb-regalo svg {
    position: absolute;
    left: 1rem;
    top: 1.05rem;
    width: 18px;
    height: 18px;
    color: var(--fb-accent, var(--fb-red));
}

/* La pastiglia dei posti: a semaforo, come sulle pagine di Binatomy. */
.fb-seats {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    font-size: .95rem;
    font-weight: 600;
    border-radius: 30px;
    padding: .35rem .95rem;
    white-space: nowrap;
    box-shadow: inset 0 0 0 1px currentColor;
}
.fb-seats::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.fb-seats--ok { color: #047857; background: rgba(4,120,87,.08); }
.fb-seats--few { color: #b45309; background: rgba(180,83,9,.09); }
.fb-seats--last { color: var(--fb-red); background: var(--fb-red-light); }
.fb-seats--full { color: #64748b; background: rgba(100,116,139,.1); }

/* ---- La foto ---- */
.fb-figure {
    margin: 0;
    background: var(--wiki-card-bg);
    border-radius: 26px;
    overflow: hidden;
    box-shadow: 0 20px 45px rgba(15,23,42,.12);
    border: 1px solid var(--wiki-glass-border);
}
.fb-figure img { display: block; width: 100%; height: auto; object-fit: cover; }
.fb-figure--hero img { aspect-ratio: 4 / 3; }
/* La mappa dentro alla stessa cornice delle foto (2026-08-18): nel blocco «Dove
   si tiene» ha preso il posto della foto dell'aula, perché quello che serve lì è
   sapere dove si va. L'`iframe` di Google non ha un'altezza sua, quindi gliela
   diamo noi: 4/3 come le foto, e sui fianchi stretti non scende sotto i 280px. */
.fb-figure--mappa { line-height: 0; }
.fb-figure--mappa iframe {
    display: block;
    width: 100%;
    aspect-ratio: 4 / 3;
    min-height: 280px;
    border: 0;
}
/*
 * La foto della home è un ritaglio con il fondo trasparente: la scheda bianca
 * di `.fb-figure` gliela rimetteva dietro, e sembrava una foto incorniciata
 * invece che una persona appoggiata sull'hero. L'ombra passa sulla sagoma.
 */
.fb-figure--cutout {
    background: none;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    overflow: visible;
}
.fb-figure--cutout img { filter: drop-shadow(0 18px 34px rgba(15, 23, 42, .18)); }
.fb-figure figcaption {
    font-size: .82rem;
    line-height: 1.55;
    color: var(--wiki-text-muted);
    padding: .9rem 1.25rem;
}

/* ---- Il prezzo, quando è lui la cosa da guardare ---- */
.fb-prezzo {
    display: inline-flex;
    align-items: center;
    gap: 1.1rem;
    margin-top: 1.75rem;
    padding: 1rem 1.5rem;
    border: 1px solid var(--wiki-glass-border);
    border-radius: 20px;
    background: var(--wiki-card-bg);
    text-align: left;
}
.fb-prezzo-cifra {
    font-size: clamp(2.1rem, 4.5vw, 2.9rem);
    font-weight: 700;
    line-height: 1;
    letter-spacing: -.03em;
    color: var(--fb-accent, var(--fb-red));
}
.fb-prezzo-nota {
    font-size: .95rem;
    line-height: 1.5;
    color: var(--wiki-text-muted);
    max-width: 26ch;
}
/* Sugli hero centrati il blocco sta in mezzo come il resto. */
.wiki-hub-hero .fb-prezzo { margin-left: auto; margin-right: auto; }
@media(max-width: 480px) {
    .fb-prezzo { flex-direction: column; align-items: flex-start; gap: .5rem; padding: 1.1rem 1.2rem; }
    .wiki-hub-hero .fb-prezzo { align-items: center; text-align: center; }
    .fb-prezzo-nota { max-width: none; }
}

/* ---- La frase che tiene insieme il resto ----
   Dal 2026-08-17 è una card, non una citazione con la riga a lato: sul fondo
   grigio chiaro della home il velo di rosso all'8% non si vedeva, e la frase
   sembrava un paragrafo qualunque in mezzo agli altri. Ora è un rettangolo
   bianco con l'ombra e le virgolette in filigrana; la fascia rossa a sinistra
   è stata levata il 2026-08-18. */
.fb-manifesto {
    position: relative;
    margin: 0 0 3.5rem;
    padding: 2.5rem 3rem;
    border: 1px solid var(--wiki-glass-border);
    border-radius: 22px;
    background: var(--wiki-card-bg);
    box-shadow: 0 18px 44px rgba(15,23,42,.09);
    overflow: hidden;
}
/* Le virgolette: un fregio, quindi grosso, scolorito e sotto al testo. */
.fb-manifesto::before {
    content: '\201C';
    position: absolute;
    /* Le virgolette stanno dentro alla card: il disegno del carattere ha l'inchiostro
       in cima al quadratone, e tirandole più su l'`overflow: hidden` le tagliava. */
    top: .2rem;
    right: 1.75rem;
    font-size: 7.5rem;
    line-height: 1;
    color: var(--fb-accent, var(--fb-red));
    opacity: .10;
    pointer-events: none;
}
.fb-manifesto p {
    position: relative;
    margin: 0;
    font-size: clamp(1.25rem, 2.2vw, 1.75rem);
    font-weight: 500;
    line-height: 1.45;
    letter-spacing: -.015em;
    color: var(--wiki-dark);
    max-width: 46ch;
}
.fb-manifesto strong { font-weight: 700; color: var(--fb-accent, var(--fb-red)); }
.fb-manifesto em { font-style: italic; }

/* ---- La stessa card, usata per l'Academy in home (2026-09-03) ----
   Scelta di Federico: «non mi piace scura, la vorrei graficamente come la card
   del pensiero computazionale, sfondo bianco, meno testo, togli le pill, tutto
   in una card, niente divisione in due colonne». Prima era un pannello nero in
   due colonne con cinque pastiglie e tre passi numerati.

   ⚠️ `fb-manifesto` nasce per una citazione: ha un solo `p`, grande come un
   titolo (fino a 1.75rem) e largo 46 caratteri. Qui dentro ci sono un occhiello,
   un titolo e due bottoni, quindi il paragrafo torna a misura di lettura e il
   titolo si prende lui la parte grande. Senza questa variante il testo usciva
   grande come la citazione e i bottoni schiacciati contro il bordo.

   ⚠️ Le virgolette in filigrana restano: sono il segno che lega le due card, ed
   e' il motivo per cui questa si riconosce come parente dell'altra. */
.fb-manifesto--academy { margin-bottom: 0; }

/* ⚠️ Qui si misura in `em` e non in `rem`, e non è un vezzo. La home carica il
   tema, che sotto una certa larghezza mette `html { font-size: 12px }` tenendo
   il `body` a 17px: un `1rem` diventa 12px mentre il paragrafo accanto resta a
   17. Misurato: con i `rem` questo titolo veniva 18px e il testo 12px, dentro una
   pagina in cui tutto intorno è 17px. Gli `em` seguono il body, quindi la card
   resta in scala con la pagina invece che con la radice. */
.fb-manifesto--academy .fb-manifesto-occhio {
    position: relative;
    display: block;
    margin-bottom: .7em;
    font-size: .8em;
    font-weight: 700;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--fb-accent, var(--fb-red));
}

.fb-manifesto--academy h3 {
    position: relative;
    margin: 0 0 .55em;
    font-size: clamp(1.55em, 3vw, 2.2em);
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: -.025em;
    color: var(--wiki-dark);
}

/* La misura da leggere, non da citare. */
.fb-manifesto--academy p {
    font-size: 1.05em;
    font-weight: 400;
    line-height: 1.62;
    letter-spacing: 0;
    max-width: 62ch;
    color: var(--wiki-text-muted);
}

.fb-manifesto--academy p strong { color: var(--wiki-dark); font-weight: 700; }

.fb-manifesto--academy .fb-actions {
    position: relative;
    margin-top: 1.55em;
}

/* Niente riduzione a mano sotto i 575px: con gli `em` la card scende insieme al
   body, e una soglia in piu' la rimpicciolirebbe due volte. */
@media(max-width: 640px) {
    .fb-manifesto { margin-bottom: 2.5rem; padding: 1.6rem 1.4rem; border-radius: 18px; }
    .fb-manifesto::before { font-size: 6rem; right: .8rem; }
}

/* ---- La cornice delle foto ----
   Dal 2026-08-18. Il tema ci metteva `box-shadow-large`, che è un alone piatto
   tutto intorno (0 0 25px al 8%): sul grigio chiaro della home non si vedeva, e
   la foto sembrava incollata sul fondo. Qui l'ombra è proiettata in basso, con
   due strati (una larga e morbida per lo stacco, una corta e stretta per
   l'appoggio), così la foto sta sopra la pagina invece che dentro.
   ⚠️ L'ingrandimento sta sull'`img`, il taglio sulla cornice: è la cornice che
   ha `overflow: hidden`, sennò lo `scale` dell'immagine sborda dalla colonna. */
.fb-foto {
    position: relative;
    overflow: hidden;
    border-radius: 16px;
    box-shadow: 0 24px 50px -14px rgba(15,23,42,.30), 0 8px 18px -10px rgba(15,23,42,.20);
    transition: box-shadow .5s cubic-bezier(.2,.6,.2,1), transform .5s cubic-bezier(.2,.6,.2,1);
    /* Safari: la cornice si fa un contesto suo, altrimenti il raggio non taglia
       l'immagine mentre si muove e ricompaiono gli angoli quadrati. */
    isolation: isolate;
}
.fb-foto img {
    display: block;
    width: 100%;
}
/* Solo dove c'è un mouse: sul telefono il `:hover` resta acceso dopo il tocco,
   e la foto resterebbe ingrandita finché non si toglie il dito da un'altra parte. */
@media (hover: hover) {
    .fb-foto img { transition: transform .7s cubic-bezier(.2,.6,.2,1); }
    .fb-foto:hover {
        transform: translateY(-4px);
        box-shadow: 0 34px 66px -12px rgba(15,23,42,.38), 0 10px 22px -10px rgba(15,23,42,.24);
    }
    .fb-foto:hover img { transform: scale(1.05); }
}
/* Chi ha chiesto al sistema di non far muovere le cose tiene l'ombra e perde il movimento. */
@media (prefers-reduced-motion: reduce) {
    .fb-foto, .fb-foto img { transition: none; }
    .fb-foto:hover, .fb-foto:hover img { transform: none; }
}

/* ---- La striscia dei fatti ---- */
.fb-facts {
    background: var(--wiki-card-bg);
    border-bottom: 1px solid var(--wiki-glass-border);
    padding: 1.5rem;
}
.fb-facts ul {
    max-width: 1120px;
    margin: 0 auto;
    padding: 0;
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: .9rem 2.4rem;
    font-size: 1.02rem;
    color: var(--wiki-text);
}
.fb-facts li { display: inline-flex; align-items: center; gap: .6rem; }
.fb-facts [data-lucide] { width: 19px; height: 19px; color: #94a3b8; flex-shrink: 0; }

/* ---- Titoli di sezione ---- */
.fb-h2 {
    font-size: clamp(1.6rem, 3vw, 2.1rem);
    font-weight: 600;
    letter-spacing: -.02em;
    color: var(--wiki-dark);
    margin: 0;
    display: flex;
    align-items: center;
    gap: .6rem;
}
.fb-band--dark .fb-h2 { color: #fff; }
.fb-h2 [data-lucide] { width: 26px; height: 26px; color: var(--fb-accent); }
.fb-text { max-width: 68ch; margin-top: 1.25rem; font-size: 1.08rem; line-height: 1.75; color: var(--wiki-text); }
.fb-text p { margin: 0 0 1rem; }
.fb-text p:last-child { margin-bottom: 0; }
.fb-text a { color: var(--fb-accent); font-weight: 500; }

/* Il riquadro «per chi è»: una riga di colore a sinistra, niente scatola. */
.fb-quote {
    /* La riga a sinistra resta, grigia: il colore era quello che faceva sembrare
       la pagina piena di bordi rossi. */
    border-left: 3px solid var(--wiki-glass-border);
    padding-left: 1.4rem;
    margin: 1.75rem 0 0;
    max-width: 62ch;
}
.fb-quote .lbl {
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--wiki-text-muted);
}
.fb-quote p { margin: .5rem 0 0; font-size: 1.1rem; line-height: 1.7; color: var(--wiki-text); }

/* ---- Card ---- */
.fb-grid { display: grid; gap: 1.25rem; margin-top: 2rem; }
.fb-grid--2 { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.fb-grid--3 { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
.fb-grid--4 { grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
.fb-card {
    background: var(--wiki-card-bg);
    border: 1px solid var(--wiki-glass-border);
    border-radius: 24px;
    padding: 1.75rem;
    box-shadow: var(--wiki-shadow);
}
a.fb-card {
    display: block;
    text-decoration: none;
    color: inherit;
    transition: transform .2s, box-shadow .2s, border-color .2s;
}
a.fb-card:hover {
    transform: translateY(-3px);
    box-shadow: var(--wiki-shadow-lg);
    border-color: var(--wiki-glass-border);
}
.fb-card h3 { font-size: 1.15rem; font-weight: 700; margin: 0 0 .5rem; color: var(--wiki-dark); letter-spacing: -.01em; }
.fb-card p { font-size: .97rem; line-height: 1.65; margin: 0 0 .8rem; color: var(--wiki-text); }
.fb-card p:last-child { margin-bottom: 0; }
/* Un link dentro a una card prende il colore della card: senza questa riga
   restava l'azzurro del browser, che sulle pagine rosse stonava. */
.fb-card p a, .fb-card li a { color: var(--fb-accent); font-weight: 500; }
.fb-card-icon {
    width: 46px; height: 46px;
    border-radius: 14px;
    display: inline-flex; align-items: center; justify-content: center;
    background: color-mix(in srgb, var(--fb-accent) 12%, transparent);
    color: var(--fb-accent);
    margin-bottom: 1rem;
}
.fb-card-icon [data-lucide] { width: 23px; height: 23px; }
.fb-card-tag {
    display: inline-block;
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--fb-accent);
    background: color-mix(in srgb, var(--fb-accent) 10%, transparent);
    border-radius: 20px;
    padding: .28rem .75rem;
    margin-bottom: .8rem;
}
.fb-card-meta { list-style: none; margin: 1rem 0 0; padding: 0; }
.fb-card-meta li {
    display: flex; align-items: center; gap: .55rem;
    font-size: .88rem; color: var(--wiki-text-muted);
    padding: .22rem 0;
}
.fb-card-meta [data-lucide] { width: 15px; height: 15px; color: var(--fb-accent); flex-shrink: 0; }
.fb-card-go {
    display: inline-flex; align-items: center; gap: .4rem;
    margin-top: 1.1rem;
    font-size: .9rem; font-weight: 700; color: var(--fb-accent);
}
.fb-card-go [data-lucide] { width: 16px; height: 16px; transition: transform .2s; }
a.fb-card:hover .fb-card-go [data-lucide] { transform: translateX(4px); }

/* ---- Elenchi con la spunta ----
   ⚠️ La riga NON è un flex, e non deve tornare a esserlo: dentro un flex ogni
   pezzo di testo diventa un elemento a sé, quindi una riga con un grassetto o
   un link in mezzo si spaccava in tronconi distanziati («Professionisti e
   imprenditori  che vogliono...»). L'icona sta fuori dal testo perché è
   posizionata, non perché la riga è una colonna di caselle. */
.fb-check { list-style: none; margin: 1.5rem 0 0; padding: 0; display: grid; gap: .75rem; }
.fb-check--2 { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: .75rem 2rem; }
.fb-check li {
    position: relative;
    padding-left: 1.75rem;
    font-size: 1rem;
    line-height: 1.6;
    color: var(--wiki-text);
}
.fb-check [data-lucide] {
    position: absolute;
    left: 0;
    top: .22em;
    width: 19px;
    height: 19px;
    color: #059669;
}
.fb-list { list-style: none; margin: 1rem 0 0; padding: 0; }
.fb-list li {
    position: relative;
    padding: .3rem 0 .3rem 1rem;
    font-size: .97rem;
    line-height: 1.6;
    color: var(--wiki-text);
}
.fb-list li::before {
    content: '';
    position: absolute;
    left: 0;
    top: 1rem;
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: #cbd5e1;
}

/* ---- I passi numerati ---- */
.fb-step-n {
    display: inline-flex; align-items: center; justify-content: center;
    width: 34px; height: 34px;
    border-radius: 50%;
    background: var(--fb-accent);
    color: #fff;
    font-weight: 700; font-size: .95rem;
    margin-bottom: .9rem;
}

/* ---- La giornata ora per ora ---- */
.fb-timeline { list-style: none; margin: 2rem 0 0; padding: 0 0 0 1.75rem; border-left: 2px solid var(--wiki-glass-border); }
.fb-slot { position: relative; padding-bottom: 2.1rem; }
.fb-slot:last-child { padding-bottom: 0; }
.fb-slot::before {
    content: '';
    position: absolute;
    left: calc(-1.75rem - 7px);
    top: .45rem;
    width: 12px; height: 12px;
    border-radius: 50%;
    background: var(--fb-accent);
    box-shadow: 0 0 0 4px var(--wiki-card-bg);
}
.fb-band--alt .fb-slot::before { box-shadow: 0 0 0 4px var(--wiki-bg); }
.fb-slot-time {
    display: inline-block;
    font-size: .8rem; font-weight: 700;
    color: var(--fb-accent);
    background: color-mix(in srgb, var(--fb-accent) 10%, transparent);
    border-radius: 20px;
    padding: .22rem .8rem;
    margin-bottom: .5rem;
}
.fb-slot h3 { font-size: 1.12rem; font-weight: 700; margin: 0 0 .4rem; color: var(--wiki-dark); }
.fb-slot p { font-size: 1rem; line-height: 1.65; margin: 0; color: var(--wiki-text); }
.fb-slot ul { margin: .8rem 0 0; padding-left: 1.15rem; font-size: .94rem; line-height: 1.8; color: var(--wiki-text-muted); }

/* ---- Le date: l'agenda ---- */
/* Una scheda a tutta larghezza per giornata (2026-08-19, seconda passata, su una
   schermata portata da Federico: «tipo così devono essere»). Tre colonne fisse —
   **quando** (il giorno grande a sinistra), **cosa** (titolo, descrizione, orario,
   posti, dove), **quanto** (il prezzo e il pulsante a destra) — e il mese scritto
   sopra il suo gruppo.

   ⚠️ Questo blocco ha già cambiato forma due volte in un giorno, e la storia serve
   a non girare in tondo:

   1. all'inizio erano righe larghe, con la data a sinistra e prezzo e pulsante
      persi a destra;
   2. stamattina sono diventate card strette in griglia (`minmax(270px, 1fr)`),
      perché su quelle righe l'occhio doveva attraversare mezzo schermo per legare
      una data al suo prezzo, e sul telefono la riga si spezzava in tronconi;
   3. adesso tornano larghe, **ma non sono la riga di prima**: la griglia è di tre
      colonne dichiarate, quindi il prezzo sta sempre nello stesso punto e non
      galleggia; e sotto i 760px prezzo e pulsante **scendono come piede della
      scheda** (`grid-column: 1 / -1`), che è esattamente il punto in cui la riga
      vecchia si rompeva.

   Se un domani viene la tentazione di rifarle strette: il motivo per cui sono larghe
   è che nell'hub una riga porta titolo e descrizione di cinque workshop diversi, e
   in una card da 270px quel testo non ci sta.

   ⚠️ Il markup lo scrive `workshop/workshop.js` e non si tocca a mano. */
.fb-agenda { display: flex; flex-direction: column; gap: .9rem; margin-top: 1.75rem; }

/* Il mese sopra il suo gruppo di giornate: c'è solo dove le date sono di workshop
   diversi (l'hub). Sulle schede dei singoli workshop no, perché lì le date sono una
   per mese e verrebbero cinque intestazioni con una scheda sotto ciascuna: il mese
   sta nella colonna del giorno. */
.fb-agenda-mese {
    margin: 1.7rem 0 .1rem;
    font-size: 1.35rem;
    font-weight: 700;
    color: var(--wiki-dark);
}
.fb-agenda-mese:first-child { margin-top: 0; }

/* ---- I MESI, CHE SI APRONO E SI CHIUDONO ----
   Da ottobre a giugno sono nove mesi: sull'hub sessanta date, sul calendario
   settantotto righe. Tutte aperte, il footer sta a nove schermate di
   scorrimento, e su un telefono non si arriva in fondo. Aperto resta il primo
   mese, che e' quello corrente da se' perche' le date passate non vengono
   scritte (2026-09-03, richiesta di Federico: «tieni aperto solo il mese
   corrente»). Il markup lo scrivono `workshop/workshop.js` e
   `calendario/calendario.js`, funzione `blocco()`, e non si tocca a mano.
   ⚠️ Sono <details>: si aprono anche senza JavaScript e la ricerca del browser
   trova il testo dentro a quelli chiusi. Un pannello fatto con un pulsante e
   `display:none` non fa nessuna delle due cose. */
.fb-mese { border-top: 1px solid var(--wiki-glass-border); }
.fb-mese:first-of-type { border-top: 0; }
summary.fb-agenda-mese {
    display: flex;
    align-items: baseline;
    gap: .7rem;
    margin: 0;
    padding: 1.1rem 0 .9rem;
    cursor: pointer;
    list-style: none;
}
/* Il triangolino di serie e' diverso in ogni browser e non si colora: si spegne
   e si disegna la freccia con due bordi. */
summary.fb-agenda-mese::-webkit-details-marker { display: none; }
summary.fb-agenda-mese::marker { content: ''; }
summary.fb-agenda-mese::after {
    content: '';
    width: .5em;
    height: .5em;
    margin-left: auto;
    border-right: 2.5px solid currentColor;
    border-bottom: 2.5px solid currentColor;
    border-radius: 1px;
    opacity: .45;
    transform: translateY(-.18em) rotate(45deg);
    transition: transform .18s ease;
}
.fb-mese[open] > summary.fb-agenda-mese::after {
    transform: translateY(.05em) rotate(-135deg);
}
summary.fb-agenda-mese:hover { color: var(--fb-red); }
summary.fb-agenda-mese:hover::after { opacity: .8; }
/* Il conto delle date: da chiuso e' la sola cosa che dice se quel mese vale la
   pena di aprirlo. */
.fb-mese-n {
    font-size: .8rem;
    font-weight: 500;
    color: var(--wiki-text-muted);
    letter-spacing: .01em;
}
.fb-mese > .fb-agenda { padding-bottom: 1.4rem; }

/* Una giornata. Tre colonne: quando, cosa, quanto.
   ⚠️ Il markup lo scrive `workshop/workshop.js` e non si tocca a mano. */
.fb-agenda-card {
    display: grid;
    grid-template-columns: 4.4rem 1fr auto;
    align-items: center;
    gap: 1.3rem;
    background: var(--wiki-card-bg);
    border: 1px solid var(--wiki-glass-border);
    border-radius: var(--wiki-radius);
    padding: 1.15rem 1.5rem;
    box-shadow: var(--wiki-shadow);
    transition: transform .2s, box-shadow .2s;
}
@media (hover: hover) {
    .fb-agenda-card:hover { transform: translateY(-2px); box-shadow: var(--wiki-shadow-lg); }
}
/* Una data su cui non si prenota più resta in pagina, ma si vede che è passata: chi
   arriva da un link vecchio deve capire perché non c'è il pulsante. */
.fb-agenda-card--full { opacity: .62; }

.fb-agenda-quando { text-align: center; }
.fb-agenda-dow, .fb-agenda-mon {
    display: block;
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--wiki-text-muted);
}
.fb-agenda-day {
    display: block;
    font-size: 2.1rem;
    font-weight: 700;
    line-height: 1.02;
    color: var(--wiki-dark);
}

/* La riga di colore è il bordo sinistro del testo, non un blocco a sé: è il colore
   del workshop (`--fb-accent`), ed è quello che fa riconoscere di quale giornata si
   sta leggendo in una lista dove ce ne sono cinque diverse. */
.fb-agenda-corpo {
    min-width: 0;
    border-left: 3px solid var(--fb-accent, var(--fb-red));
    padding-left: 1.25rem;
}
.fb-agenda-titolo { margin: 0; font-size: 1.12rem; font-weight: 700; line-height: 1.35; }
.fb-agenda-titolo a { color: var(--wiki-dark); text-decoration: none; }
.fb-agenda-titolo a:hover { color: var(--fb-accent, var(--fb-red)); }
/* Quando nella riga del titolo c'è solo la pastiglia (le date sulla scheda di un
   workshop), il margine sinistro che la stacca dal titolo non serve. */
.fb-agenda-titolo--sola { line-height: 1; }
.fb-agenda-titolo--sola .fb-stato { margin-left: 0; }
.fb-agenda-cosa { margin: .3rem 0 0; font-size: .95rem; line-height: 1.5; color: var(--wiki-text-muted); }

/* Orario, posti, dove, pranzo. Flex qui va bene: ogni pezzo è una voce a sé e non
   una frase, quindi non c'è testo che si spezzi in tronconi. */
.fb-agenda-meta {
    display: flex;
    flex-wrap: wrap;
    /* Lo spazio fra le voci è il minimo che le tiene su una riga sola sulle schede
       dei workshop, dove la colonna è più stretta che nell'hub. */
    gap: .3rem .9rem;
    margin: .6rem 0 0;
    font-size: .85rem;
    color: var(--wiki-text-muted);
}
.fb-agenda-meta > span { display: inline-flex; align-items: center; gap: .35rem; }
.fb-agenda-meta [data-lucide] { width: 14px; height: 14px; flex: 0 0 14px; }
/* Dentro la riga i posti non vanno a capo e non prendono il margine che hanno
   quando stanno sotto il prezzo. */
.fb-agenda-meta .fb-posti { display: inline-flex; margin: 0; }
.fb-agenda-meta .fb-pranzo { color: #047857; }

.fb-agenda-destra { display: flex; flex-direction: column; align-items: flex-end; gap: .6rem; }
.fb-agenda-prezzo { font-size: 1.5rem; font-weight: 700; line-height: 1.1; color: var(--wiki-dark); white-space: nowrap; }
/* Il prezzo pieno barrato va SOTTO la cifra e non di fianco: nella colonna di destra
   non c'è larghezza per due numeri, e affiancati sembravano una somma. */
.fb-agenda-prezzo del { display: block; font-size: .85rem; font-weight: 400; color: var(--wiki-text-muted); }

/* Sul telefono le tre colonne non stanno: quando e cosa restano affiancati, prezzo e
   pulsante scendono sotto come piede della scheda. */
@media (max-width: 760px) {
    /* `start` e non `center`: su una scheda alta due righe di descrizione il giorno
       galleggiava in mezzo, di fianco al testo invece che al titolo. */
    .fb-agenda-card { grid-template-columns: 3.2rem 1fr; gap: .9rem; padding: 1.1rem 1.15rem; align-items: start; }
    .fb-agenda-day { font-size: 1.8rem; }
    .fb-agenda-corpo { padding-left: .95rem; }
    .fb-agenda-destra {
        grid-column: 1 / -1;
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
        gap: 1rem;
        margin-top: .2rem;
        padding-top: .9rem;
        border-top: 1px solid var(--wiki-glass-border);
    }
}

/* ---- La riga di una data, come stava su binatomy.com ----
   Tre pezzi in più rispetto a prima (2026-08-17, «come era su binatomy.com però
   coi colori di Federico Boggia»): la pastiglia dello stato sopra la data con la
   spiegazione dietro la «i», la riga del pranzo, e i posti scritti sempre.
   I colori sono quelli del sito: il verde e l'ambra restano quelli del semaforo,
   il rosso è `--fb-red` e non il rosso di sistema. */

/* La pastiglia: è un <button> perché si apre col tocco, ma non deve sembrare un
   bottone. */
.fb-stato {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    position: relative;
    /* Sta di fianco al titolo, sulla stessa riga: il margine sopra/sotto che aveva
       quando stava da sola sopra la data la staccherebbe dal titolo. */
    margin: 0 0 0 .5rem;
    vertical-align: .1em;
    padding: .25rem .6rem;
    border: 0;
    border-radius: 20px;
    font-family: inherit;
    font-size: .68rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    cursor: help;
}
.fb-stato [data-lucide] { width: 13px; height: 13px; }
.fb-stato .fb-stato-i { opacity: .6; }
.fb-stato--confermata { color: #047857; background: rgba(4,120,87,.10); }
.fb-stato--ultimi { color: #b45309; background: rgba(180,83,9,.10); }
.fb-stato--disponibile { color: var(--wiki-text-muted); background: rgba(100,116,139,.10); }
.fb-stato--chiuso { color: #64748b; background: rgba(100,116,139,.12); }

/* La spiegazione. Si apre a DESTRA della pastiglia: sotto copriva la data e i
   posti, cioè le due righe che si stanno leggendo. Sul telefono torna sotto,
   perché a destra non c'è larghezza. */
.fb-stato-info {
    display: none;
    position: absolute;
    left: 100%;
    top: 50%;
    transform: translateY(-50%);
    margin-left: .7rem;
    width: 19rem;
    z-index: 30;
    background: #fff;
    border-radius: 14px;
    box-shadow: 0 12px 30px rgba(15,23,42,.16);
    border: 1px solid var(--wiki-glass-border);
    padding: .8rem .9rem;
    font-size: .78rem;
    font-weight: 400;
    line-height: 1.55;
    letter-spacing: 0;
    text-transform: none;
    text-align: left;
    color: var(--wiki-text);
    white-space: normal;
}
.fb-stato:hover .fb-stato-info,
.fb-stato.is-open .fb-stato-info { display: block; }

/* ⚠️ Dentro una scheda dell'agenda la spiegazione si aggancia alla SCHEDA, non alla
   pastiglia, e questo non è un dettaglio: la pastiglia sta rientrata di ~120px dal
   bordo dello schermo (colonna del giorno + gap + riga di colore + padding del
   corpo), quindi `left: 0` con una larghezza calcolata su `100vw - 4rem` la mandava
   **fuori dallo schermo** sotto i 430px, e `left: 100%` con 19rem fissi la mandava
   fuori dalla scheda fra 768 e 900px. Misurato: a 360px `scrollWidth` passava da 360
   a 418, cioè la pagina cominciava a scorrere di lato mentre si legge, e l'ultima
   riga della spiegazione restava fuori.

   Agganciata alla scheda non può sbordare, perché la scheda è larga quanto la
   pagina: `position: static` sulla pastiglia toglie il vecchio ancoraggio, e i due
   `1rem` la tengono dentro i fianchi della scheda a qualunque larghezza. */
.fb-agenda-card { position: relative; }

/* ⚠️ Sopra i 760px la spiegazione sta attaccata **alla pastiglia**, subito sotto, e
   non in fondo alla scheda: ancorata alla scheda finiva a cavallo di quella dopo e
   sembrava un riquadro staccato, arrivato lì per sbaglio (visto il 21 agosto 2026).
   Qui lo spazio c'è: il corpo della scheda è largo centinaia di pixel, e 22rem ci
   stanno sempre. */
@media (min-width: 761px) {
    .fb-agenda-card .fb-stato-info {
        left: 0;
        right: auto;
        top: calc(100% + .45rem);
        transform: none;
        margin: 0;
        width: max-content;
        max-width: 22rem;
    }
}

/* Sotto i 760px torna ancorata alla scheda e larga quanto lei: lì la pastiglia è
   rientrata e una scatola larga 22rem uscirebbe dallo schermo — è il bug misurato
   il 20 agosto (a 360px la pagina scorreva di lato di 58px). */
@media (max-width: 760px) {
    .fb-agenda-card .fb-stato { position: static; }
    .fb-agenda-card .fb-stato-info {
        left: 1rem;
        right: 1rem;
        top: calc(100% - .4rem);
        transform: none;
        margin: 0;
        width: auto;
        max-width: none;
    }
}

/* Sopra la scheda che viene dopo, sempre: la nuvoletta esce dai bordi della sua
   scheda, e senza questo la scheda successiva le passa sopra il bordo inferiore. */
.fb-agenda-card:hover,
.fb-agenda-card:focus-within { z-index: 50; }
@media(max-width:760px) {
    .fb-stato-info {
        left: 0;
        top: 100%;
        transform: none;
        margin: .5rem 0 0;
        width: min(19rem, calc(100vw - 4rem));
    }
}

/* «giornata intera, pranzo incluso»: la domanda che arriva sempre, scritta su
   ogni riga invece che una volta in fondo alla pagina. */

/* I posti rimasti, a semaforo: da 11 in su verde, da 5 a 10 ambra, sotto i 5
   rosso. Il numero è vero e cresce con la distanza della data, quindi si scrive
   sempre, non solo quando fa paura. */
.fb-posti { display: block; margin-top: .15rem; font-size: .82rem; font-weight: 600; }
.fb-posti::first-letter { text-transform: uppercase; }
.fb-posti--tanti { color: #047857; }
.fb-posti--medi { color: #b45309; }
.fb-posti--pochi { color: var(--fb-red); }
.fb-posti--chiusi { color: var(--wiki-text-muted); font-weight: 500; }
.fb-dates-loading, .fb-dates-fallback, .fb-dates-error { font-size: 1rem; color: var(--wiki-text-muted); margin: 1.5rem 0 0; }

/* ============================================================
   I BOTTONI DEL TEMA NON SI SCAMBIANO IL COLORE  (2026-09-03)
   ============================================================
   Segnalato in una revisione della home: col mouse sopra, i tasti si
   scambiavano l'aspetto. Nel tema `.btn-white` (il principale, bianco pieno)
   diventa trasparente, e `.btn-transparent-white-light` (i secondari, di solo
   contorno) diventa bianco pieno. Risultato: il principale perde forza e i
   secondari la prendono, e uno che passa il mouse pensa che sia un guasto.

   Qui il principale resta pieno e si scurisce appena; i secondari si accendono
   di un velo, senza mai diventare il principale. La gerarchia dei tre tasti
   resta la stessa ferma e col mouse sopra.

   ⚠️ Sta in questo foglio e non nel `<style>` delle pagine perche' le sei home
   (italiana piu' le cinque tradotte) hanno lo stesso problema, e wiki.css e'
   l'unico posto che le raggiunge tutte. Sono anche le sole pagine del sito che
   usano queste due classi. */
.btn.btn-white:hover,
.btn.btn-white:active,
.btn.btn-white:focus {
    background-color: #eeeeee;
    border-color: #eeeeee;
    color: var(--wiki-dark);
}
.btn.btn-transparent-white-light:hover,
.btn.btn-transparent-white-light:active,
.btn.btn-transparent-white-light:focus {
    background-color: rgba(255, 255, 255, .18);
    border-color: rgba(255, 255, 255, .75);
    color: #fff;
}

/* ============================================================
   I FILTRI DEL CALENDARIO  (`calendario/index.html`, 2026-09-02)
   ============================================================
   Pastiglie che accendono e spengono le righe dell'elenco. Sono l'unica cosa
   che quella pagina ha in piu' delle altre, e stanno qui perche' qui stanno
   tutti gli altri blocchi `fb-`: un foglio a parte per tre regole sarebbe un
   secondo posto dove cercare quando i colori cambiano.

   Il colore acceso e' `--fb-accent`, che ogni pastiglia si porta scritto
   addosso (`style="--fb-accent:..."`, messo da `calendario.js`): cosi' il
   filtro di un workshop ha il colore di quel workshop, ed e' la stessa
   tinta che ha la sua riga nell'elenco.

   ⚠️ Il filtro spento tiene il bordo e non il pieno: sei pastiglie piene di
   sei colori diversi sono un semaforo rotto, e non si capisce quale sia
   quella attiva. */
.fb-filtri {
    display: flex;
    flex-wrap: wrap;
    gap: .55rem;
    margin: 1.75rem 0 -.4rem;
}
.fb-filtro {
    appearance: none;
    border: 1px solid var(--wiki-border, rgba(100,116,139,.28));
    background: #fff;
    color: var(--wiki-text-muted);
    font: inherit;
    font-size: .88rem;
    font-weight: 600;
    line-height: 1;
    padding: .55rem .95rem;
    border-radius: 999px;
    cursor: pointer;
    transition: color .18s, border-color .18s, background .18s, transform .18s;
}
@media (hover: hover) {
    .fb-filtro:hover { color: var(--wiki-dark); border-color: var(--fb-accent, var(--fb-red)); }
}
.fb-filtro:focus-visible {
    outline: 2px solid var(--fb-accent, var(--fb-red));
    outline-offset: 2px;
}
.fb-filtro.is-on {
    background: var(--fb-accent, var(--fb-red));
    border-color: var(--fb-accent, var(--fb-red));
    color: #fff;
}
@media (max-width: 575px) {
    .fb-filtri { gap: .45rem; }
    .fb-filtro { font-size: .82rem; padding: .5rem .8rem; }
}

/* ---- La fascia «prenota» ---- */
.fb-cta-band {
    background: var(--wiki-dark);
    color: #fff;
    padding: 3.25rem 1.5rem;
    border-bottom: none;
}
.fb-cta-band .fb-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1.75rem;
    flex-wrap: wrap;
}
.fb-cta-band h2 { font-size: clamp(1.5rem, 3vw, 2rem); font-weight: 600; letter-spacing: -.02em; margin: 0; color: #fff; }
.fb-cta-band p { margin: .7rem 0 0; color: rgba(255,255,255,.72); font-size: 1.05rem; line-height: 1.6; max-width: 52ch; }
.fb-cta-band .fb-actions { margin-top: 0; }
.fb-cta-band--light { background: var(--wiki-bg); color: var(--wiki-text); border-bottom: 1px solid var(--wiki-glass-border); }
.fb-cta-band--light h2 { color: var(--wiki-dark); }
.fb-cta-band--light p { color: var(--wiki-text-muted); }

/* ---- Le domande in fondo ---- */
.fb-faq { margin-top: 2rem; border-top: 1px solid var(--wiki-glass-border); }
.fb-faq details { border-bottom: 1px solid var(--wiki-glass-border); padding: 1.35rem 0; }
/*
 * ⚠️ **Niente flex qui.** La domanda era un `display: flex` con
 * `justify-content: space-between` per spingere il «+» a destra. Dentro un flex ogni
 * pezzo di testo diventa un elemento a sé: una domanda come «I 50 € comprendono
 * <em>Divide et Impera</em>?» si spaccava in tre tronconi allontanati fra loro
 * («I 50 € comprendono ... Divide et Impera ... ?»), e si leggeva male
 * (2026-08-19, segnalato da Federico).
 *
 * È lo stesso inciampo di `.corso-checklist` e `.fb-check`, che sta scritto in
 * CLAUDE.md: il testo resta in flusso normale e il segno si mette in
 * `position: absolute`. Il rientro a destra lo fa il `padding-right`, così il «+»
 * non finisce mai sopra le parole.
 */
.fb-faq summary {
    position: relative;
    padding-right: 2.5rem;
    cursor: pointer;
    list-style: none;
    font-size: 1.08rem;
    font-weight: 600;
    line-height: 1.45;
    color: var(--wiki-dark);
}
.fb-faq summary::-webkit-details-marker { display: none; }
.fb-faq summary::after {
    content: '+';
    position: absolute;
    top: -.15rem;
    right: 0;
    font-size: 1.5rem;
    font-weight: 300;
    line-height: 1.2;
    color: var(--fb-accent);
    transition: transform .2s;
}
.fb-faq details[open] summary::after { transform: rotate(45deg); }
.fb-faq p { margin: .9rem 0 0; font-size: 1rem; line-height: 1.7; color: var(--wiki-text-muted); max-width: 72ch; }

/* ---- La riga sotto a un elenco: una cosa da sapere, non un avviso ----
   La usano le date dei workshop (cosa succede se la giornata non si riempie) e
   il listino della sala. */
.fb-note {
    margin: 1.5rem 0 0;
    padding: 1rem 1.25rem;
    background: var(--wiki-card-bg);
    border: 1px solid var(--wiki-glass-border);
    border-left: 3px solid var(--wiki-glass-border);
    border-radius: var(--wiki-radius-sm);
    font-size: .95rem;
    line-height: 1.6;
    color: var(--wiki-text);
}

/*
 * La riga sotto ai bottoni di una hero: rimborso, «già iscritto?», le cose che
 * rassicurano e non si devono leggere per prime.
 *
 * ⚠️ Non è una `fb-note`. La nota è un riquadro che regge una frase lunga; su
 * una riga corta e centrata diventava una scatola vuota larga tutta la pagina
 * con quattro parole in mezzo (2026-08-17, pagina academy). Qui non c'è né
 * bordo né fondo: è larga quanto il testo e sta in mezzo.
 *
 * Due pezzi divisi dal punto, che a schermo stretto vanno a capo da soli.
 */
.fb-sottonota {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: .5rem .9rem;
    margin: 1.1rem auto 0;
    padding: 0;
    max-width: 44rem;
    font-size: .9rem;
    line-height: 1.5;
    color: var(--wiki-text-muted);
}
.fb-sottonota > span { display: inline-flex; align-items: center; gap: .35rem; }
.fb-sottonota [data-lucide] { width: 15px; height: 15px; opacity: .75; }
/* Il punto divisore: sparisce quando i due pezzi finiscono su righe diverse,
   perché a capo un punto da solo si legge come un errore di battitura. */
.fb-sottonota-sep { color: var(--wiki-glass-border); }
@media(max-width:520px) {
    .fb-sottonota { flex-direction: column; gap: .45rem; }
    .fb-sottonota-sep { display: none; }
}

/* Il titolo di una card può avere l'icona davanti. */
.fb-card h3 [data-lucide] {
    width: 19px;
    height: 19px;
    color: var(--fb-accent);
    vertical-align: -.18em;
    margin-right: .4rem;
}

/* ---- Chi organizza ---- */
.fb-org {
    display: flex;
    align-items: center;
    gap: 1.4rem;
    flex-wrap: wrap;
    background: var(--wiki-card-bg);
    border: 1px solid var(--wiki-glass-border);
    border-radius: 20px;
    padding: 1.4rem 1.7rem;
}
.fb-org img { max-height: 40px; width: auto; }
.fb-org p { margin: 0; flex: 1; min-width: 250px; font-size: .95rem; line-height: 1.65; color: var(--wiki-text); }

/*
 * ---- Le sezioni della home sul telefono ----
 *
 * La home e le cinque traduzioni hanno ancora le sezioni del tema Crafto, e le
 * portano scritte in pagina come `big-section ... pb-3 sm-pt-0`. Sotto ai 768px
 * quelle due classi fanno `padding-top: 0` e `padding-bottom: 1rem`, entrambe
 * `!important`: il risultato è che una sezione comincia attaccata alla riga
 * precedente e da telefono la pagina è un blocco unico. Qui si rimette il
 * respiro senza toccare il markup delle sei pagine né i CSS del tema.
 */
@media(max-width: 767px) {
    section.big-section.sm-pt-0 { padding-top: 3rem !important; }
    section.big-section.pb-3 { padding-bottom: 1.5rem !important; }
}

@media(max-width: 640px) {
    .fb-band, .fb-hero { padding-left: 1.15rem; padding-right: 1.15rem; }
    .fb-band { padding-top: 3rem; padding-bottom: 3rem; }
    .fb-card { padding: 1.4rem; }
    /* Le date hanno il loro blocco sotto i 760px, vedi `fb-agenda`. */
    .fb-btn { width: 100%; }
    .fb-facts ul { gap: .7rem 1.4rem; font-size: .95rem; }
}

/* ---- LE OFFERTE DI LANCIO: prezzo barrato, pastiglia, conto alla rovescia ----
 *
 * (2026-09-15, richiesta di Federico: «fai vedere lo sconto e il countdown»)
 *
 * ⚠️ Il barrato qui è **vero**, e questa è la differenza con i workshop: sulle
 * righe delle date il prezzo pieno barrato è stato tolto il 2026-09-02 perché
 * era uguale a quello che si pagava, cioè una promozione finta. Qui 890 e 445
 * sono due cifre diverse e la seconda scade davvero, quindi il barrato dice una
 * cosa vera. Se un giorno l'offerta finisce, va tolto anche il barrato.
 *
 * ⚠️ Il prezzo vecchio è in `<s>` e non in un `<span>` con `line-through`:
 * la riga in mezzo è quello che si vede, ma «questo prezzo non vale più» è
 * quello che serve a chi ascolta la pagina invece di guardarla.
 */
.fb-offerta {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: .5rem .75rem;
}
.fb-barrato {
    color: var(--wiki-muted);
    font-weight: 500;
    text-decoration-thickness: 2px;
}
.fb-pastiglia-sconto {
    display: inline-block;
    background: var(--fb-accent, var(--fb-red));
    color: #fff;
    font-size: .78rem;
    font-weight: 700;
    letter-spacing: .02em;
    padding: .2em .6em;
    border-radius: 999px;
    white-space: nowrap;
}

/* Il conto alla rovescia. Sta su una riga sua, sotto al prezzo: di fianco
   ballerebbe da un minuto all'altro, portandosi dietro la cifra. */
/* ⚠️ NIENTE FLEX QUI. Era `display:flex` con `gap`, e in un flex ogni pezzo di
   testo diventa un elemento a se': la riga «..., ancora 76 giorni e 11 ore.»
   usciva col punto finale staccato di mezzo spazio, perche' l'orologio, il
   testo, lo <span> del conto e il punto erano quattro elementi affiancati.
   E' lo stesso inciampo di `.corso-checklist`, `.fb-check` e `.fb-faq summary`,
   che per questo mettono l'icona in `position:absolute`. Qui basta meno:
   l'orologio e' inline e si allinea con `vertical-align`. */
.fb-scadenza {
    margin-top: .7rem;
    font-size: .9rem;
    color: var(--wiki-muted);
}
.fb-scadenza svg {
    vertical-align: -2px;
    margin-right: .35rem;
}
.fb-conto {
    font-weight: 700;
    color: var(--fb-accent, var(--fb-red));
    font-variant-numeric: tabular-nums;
}
/* Dentro a una fascia scura o a una card scura il rosso non si legge. */
.fb-band--scura .fb-scadenza,
.fba .fb-scadenza { color: rgba(255,255,255,.75); }
.fb-band--scura .fb-conto,
.fba .fb-conto { color: #fff; }
.fb-band--scura .fb-barrato,
.fba .fb-barrato { color: rgba(255,255,255,.6); }

/* ---- «LEGGI TUTTO»: la storia si accorcia, il punto resta ----
 *
 * (2026-09-15, richiesta di Federico: «per evitare effetto wall of text che ne
 * dici di un tasto leggi tutto dopo le prime due tre righe»)
 *
 * ⚠️ Si accorcia **solo la storia**, cioè i primi quattro capoversi. La
 * missione e la riga che finisce con «il tempo!» stanno fuori e si vedono sempre:
 * accorciando tutto, chi non apre leggerebbe l'attacco e niente altro, e il
 * punto del pezzo non arriverebbe mai.
 *
 * ⚠️ Niente JavaScript: e' una casella di spunta nascosta, come il menu del
 * telefono e la bolla di WhatsApp. Il sito e' statico, e un testo che si apre
 * solo se lo script arriva e' un testo che qualcuno non legge.
 *
 * ⚠️ Il testo e' **tagliato, non tolto**: `overflow:hidden` e non
 * `display:none`, quindi resta nel documento, Google lo legge e la ricerca del
 * browser lo trova. Con `display:none` sarebbe testo nascosto a un motore di
 * ricerca su una pagina che vende, che e' un'altra faccenda.
 *
 * ⚠️ La sfumatura e' una **maschera sul testo** e non una striscia di colore
 * sopra: la sezione ha un gradiente verticale, quindi una striscia tinta di
 * bianco lascerebbe un bordo visibile dove il gradiente non e' bianco. Dove la
 * maschera non c'e', il taglio e' netto e la pagina funziona lo stesso.
 *
 * ⚠️ **Aperto resta aperto** (2026-09-17, Federico: «dopo che lo apri non
 * mostrare chiudi», «se fanno leggi tutto resta aperto stop»). Premuto «Leggi
 * tutto», il pulsante sparisce e non diventa «Chiudi»: chi ha chiesto di
 * leggere legge, e un tasto per richiudere quattro capoversi non serve a
 * nessuno. La spunta resta spuntata, e non c'e' niente nel markup che la
 * possa togliere.
 */
.fb-storia-check {
    /* Resta raggiungibile col tasto di tabulazione e si apre con la barra
       spaziatrice: con `display:none` non la si potrebbe aprire da tastiera. */
    position: absolute;
    opacity: 0;
    width: 1px;
    height: 1px;
    margin: 0;
    pointer-events: none;
}
.fb-storia {
    max-height: 8.6em;
    overflow: hidden;
    transition: max-height .5s ease;
    -webkit-mask-image: linear-gradient(to bottom, #000 64%, transparent 97%);
    mask-image: linear-gradient(to bottom, #000 64%, transparent 97%);
}
.fb-storia-check:checked ~ .fb-storia {
    max-height: 240em;
    -webkit-mask-image: none;
    mask-image: none;
}
.fb-apri {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    margin: .7rem 0 1.1rem;
    padding: .35em .1em;
    font-size: .93rem;
    font-weight: 600;
    color: var(--fb-red);
    cursor: pointer;
    border-bottom: 1px solid currentColor;
    line-height: 1.2;
}
.fb-apri:hover { color: #960015; }
.fb-storia-check:checked ~ .fb-apri { display: none; }
.fb-storia-check:focus-visible ~ .fb-apri {
    outline: 2px solid var(--fb-red);
    outline-offset: 3px;
    border-radius: 2px;
}
@media (prefers-reduced-motion: reduce) {
    .fb-storia { transition: none; }
}

/* ==========================================================================
 * L'AVVISO IN CIMA: il webinar gratuito (2026-09-17)
 *
 * Una striscia sottile appiccicata sopra la barra del menu, su tutte le pagine
 * italiane. Dice tre cose e basta, perche' e' alta quaranta pixel: che il
 * webinar e' gratuito, quando e', e quanti posti restano. Premendola si apre il
 * riquadro che spiega come si entra.
 *
 * ⚠️ IL MARKUP LO SCRIVE `_strumenti/uniforma-menu.py` (blocco `avviso()`), come
 * il menu e il footer: qui non si tocca a mano nelle pagine. Per spegnerlo dopo
 * il webinar si mette `WEBINAR = None` in quel file e si rilancia
 * `python3 _strumenti/uniforma-menu.py --scrivi`.
 *
 * ⚠️ L'ALTEZZA DELLA STRISCIA E' UN NUMERO, E LO SANNO IN TRE.
 * La striscia e' appiccicata a `top: 0`, quindi la barra del menu deve
 * scendere di altrettanto, e con lei lo stacco delle ancore (`--fb-barra-h`) e
 * la lineetta di scorrimento. Tutti e tre si agganciano con il fratello
 * (`.fb-avviso ~ ...`) e non con `:has()`: il blocco sta a fianco del `<nav>` e
 * davanti a tutto il resto della pagina, quindi il fratello li prende tutti, e
 * quando l'avviso non c'e' (webinar finito) non c'e' nemmeno la regola. Il
 * `:has()` qui dentro ha gia' dato un caso in cui il selettore corrisponde e la
 * proprieta' non si applica: vedi il commento sul footer attaccato.
 *
 * ⚠️ L'ALTEZZA E' FISSA E IL TESTO NON VA A CAPO (`height` + `nowrap`): se la
 * striscia si impilasse su due righe su un telefono, i tre numeri qui sopra
 * sarebbero sbagliati e la barra del menu coprirebbe il menu.
 * ========================================================================== */
/* ⚠️ QUI LE MISURE SONO IN PIXEL E NON IN `rem`, ED E' UNA SCELTA.
 * Le sei home caricano il tema, che mette `html { font-size: 12px }` sotto una
 * certa larghezza: lo stesso `rem` vale 12px li' e 16px in tutto il resto del
 * sito, e la striscia (che e' alta 40px fissi) usciva scritta piccola sulla
 * home e giusta sulle pagine della wiki. Misurato: 9,36px contro 12,48px.
 */
:root { --fb-avviso-h: 40px; }

.fb-avviso {
    position: sticky;
    top: 0;
    /* Sopra la barra del menu (500), sotto la lineetta di scorrimento (600). */
    z-index: 520;
    height: var(--fb-avviso-h);
    background: linear-gradient(90deg, #0f172a, #1e2334 55%, #2a1015);
    color: #fff;
    font-family: var(--wiki-font-sans);
    overflow: hidden;
}
/* La barra del menu scende sotto la striscia, e con lei lo stacco che usano
   l'indice degli articoli e i titoli raggiunti da un'ancora. */
.fb-avviso ~ nav.wiki-site-nav { top: var(--fb-avviso-h); }
.fb-avviso ~ * { --fb-barra-h: calc(56px + var(--fb-avviso-h)); }
/* La lineetta di scorrimento si mette sotto la striscia invece che sopra: su
   questo fondo scuro una riga rossa non si vede, e il codice che la fa
   diventare bianca guarda il colore in quel punto (vedi `js/scorrimento.js`). */
.fb-avviso ~ .fb-scorrimento { top: var(--fb-avviso-h); }

/* Chiusa: torna tutto com'era. La spunta e' un fratello anche lei, quindi
   arriva alla barra, alle ancore e alla lineetta senza JavaScript. */
.fb-avviso-via:checked ~ .fb-avviso { display: none; }
.fb-avviso-via:checked ~ nav.wiki-site-nav { top: 0; }
.fb-avviso-via:checked ~ * { --fb-barra-h: 56px; }
.fb-avviso-via:checked ~ .fb-scorrimento { top: 0; }

/* Tutta la riga si preme: chi vuole sapere cos'e' non deve centrare il
   pulsante, e chi vuole il posto lo trova comunque in fondo a destra. */
.fb-avviso-riga {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 11px;
    height: 100%;
    padding: 0 42px 0 16px;
    font-size: 14px;
    line-height: 1;
    white-space: nowrap;
    cursor: pointer;
}
.fb-avviso-riga:hover .fb-avviso-btn { background: #960015; }
/* La spunta sta fuori dalla striscia (il riquadro e' un fratello, sennò lo
   `overflow: hidden` della striscia lo taglierebbe), quindi il fuoco si
   disegna scendendo dentro di lei. */
.fb-modale-check:focus-visible ~ .fb-avviso .fb-avviso-riga {
    outline: 2px solid #fff;
    outline-offset: -4px;
}
/* Il pallino rosso che batte: e' l'unica cosa che si muove in tutta la
   striscia, e dice «questa cosa ha una data». */
.fb-avviso-punto {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--fb-red);
    box-shadow: 0 0 0 0 rgba(194,0,28,.7);
    animation: fb-avviso-batte 2.2s cubic-bezier(.22,.61,.36,1) infinite;
    flex-shrink: 0;
}
@keyframes fb-avviso-batte {
    0%   { box-shadow: 0 0 0 0 rgba(194,0,28,.7); }
    70%  { box-shadow: 0 0 0 9px rgba(194,0,28,0); }
    100% { box-shadow: 0 0 0 0 rgba(194,0,28,0); }
}
.fb-avviso-forte { font-weight: 700; }
.fb-avviso-titolo,
.fb-avviso-quando { color: rgba(255,255,255,.72); }
.fb-avviso-sep { color: rgba(255,255,255,.3); }
/* I posti che restano: il numero e' la ragione per cui uno si muove adesso
   invece che giovedi', quindi sta in chiaro e in grassetto. */
.fb-avviso-posti { font-weight: 700; color: #ffd7dc; }
.fb-avviso-btn {
    background: var(--fb-red);
    color: #fff;
    font-weight: 700;
    padding: .42em 1em;
    border-radius: 999px;
    transition: background .2s;
}
/* La croce che la manda via. Sta in un angolo e non in mezzo alla riga: e' la
   cosa meno importante della striscia, ma chi ha gia' deciso di no deve
   poterla togliere invece di vedersela a ogni pagina. */
.fb-avviso-chiudi {
    position: absolute;
    top: 0;
    right: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: var(--fb-avviso-h);
    color: rgba(255,255,255,.55);
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
}
.fb-avviso-chiudi:hover { color: #fff; }

/* ⚠️ COSA SI PERDE STRINGENDO, E IN CHE ORDINE.
 *
 * La riga non va a capo e la striscia e' alta quaranta pixel, quindi su uno
 * schermo stretto qualcosa deve uscire. L'ordine e' misurato in un iframe da
 * 320, 360, 390 e 430 pixel (Chrome a finestra piena si ferma a 500: le misure
 * vere del telefono si prendono cosi'), e va dal meno utile al piu' utile:
 *
 *   sotto 1100  esce il titolo del webinar, che si legge nel riquadro;
 *   sotto  620  il testo si stringe e la striscia passa a 38px;
 *   sotto  440  escono la data e la parola «restano»;
 *   sotto  360  resta «Webinar» senza «gratuito».
 *
 * L'ultima cosa a restare e' sempre questa: che c'e' un webinar, quanti posti
 * sono rimasti e il pulsante. Il giorno e l'ora sono a un dito di distanza,
 * dentro al riquadro, e chi ha premuto li' li legge per intero. */
@media (max-width: 1099px) { .fb-avviso-titolo, .fb-avviso-titolo + .fb-avviso-sep { display: none; } }
@media (max-width: 619px) {
    :root { --fb-avviso-h: 38px; }
    .fb-avviso-riga { gap: 8px; padding: 0 34px 0 11px; font-size: 12.5px; }
}
@media (max-width: 439px) {
    .fb-avviso-riga { font-size: 12px; }
    .fb-avviso-quando, .fb-avviso-quando + .fb-avviso-sep { display: none; }
    .fb-avviso-restano { display: none; }
}
@media (max-width: 359px) {
    .fb-avviso-riga { gap: 7px; padding: 0 30px 0 9px; }
    .fb-avviso-gratis { display: none; }
}
@media (prefers-reduced-motion: reduce) {
    .fb-avviso-punto { animation: none; }
}

/* --------------------------------------------------------------------------
 * Il riquadro che spiega come si entra.
 *
 * Si apre con una casella di spunta, come la bolla di WhatsApp e come il menu
 * del telefono: il sito e' statico, e un riquadro che dipende da uno script e'
 * un riquadro che non si apre quando lo script non arriva. `js/avviso.js`
 * aggiunge soltanto la chiusura col tasto Esc.
 * -------------------------------------------------------------------------- */
.fb-modale-check {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: 0;
    opacity: 0;
    pointer-events: none;
}
/* ⚠️ I DUE PEZZI DEL RIQUADRO SONO SCRITTI `hidden` IN PAGINA, E QUI SI
   RIACCENDONO. Senza questo foglio (un CSS che non arriva, una pagina di errore
   servita mentre il sito e' a pezzi) il riquadro non sarebbe `position: fixed`,
   quindi comparirebbe disteso in cima a ogni pagina con tutto il programma del
   webinar. Con `hidden` nel markup e il `display` qui dentro, quando il foglio
   c'e' funziona tutto, e quando non c'e' non si vede niente.
   ⚠️ Il `!important` qui serve davvero, e si vede dal browser: la regola del
   browser per `hidden` e' `[hidden]:not([hidden=until-found]) { display: none
   !important }`, quindi un `display: block` normale perde e il riquadro non si
   apre piu'. Provato: `display` restava `none` a casella spuntata. */
.fb-modale-fondo,
.fb-modale {
    display: block !important;
    position: fixed;
    opacity: 0;
    visibility: hidden;
    transition: opacity .22s ease, visibility .22s, transform .22s cubic-bezier(.22,.61,.36,1);
}
.fb-modale-fondo {
    inset: 0;
    /* Sopra la bolla di WhatsApp (1001), che sennò batte sul riquadro aperto. */
    z-index: 1100;
    background: rgba(10,14,25,.62);
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
    cursor: pointer;
}
.fb-modale {
    z-index: 1101;
    top: 50%;
    left: 50%;
    width: 520px;
    max-width: calc(100vw - 32px);
    max-height: calc(100vh - 32px);
    overflow-y: auto;
    transform: translate(-50%, -46%) scale(.97);
    background: var(--wiki-card-bg);
    color: var(--wiki-text);
    border-radius: var(--wiki-radius);
    box-shadow: 0 30px 80px rgba(15,23,42,.35);
    padding: 27px 27px 24px;
    text-align: left;
}
.fb-modale-check:checked ~ .fb-modale-fondo,
.fb-modale-check:checked ~ .fb-modale { opacity: 1; visibility: visible; }
.fb-modale-check:checked ~ .fb-modale { transform: translate(-50%, -50%) scale(1); }
@media (prefers-reduced-motion: reduce) {
    .fb-modale-fondo, .fb-modale { transition: none; }
}

.fb-modale-x {
    position: absolute;
    top: 13px;
    right: 16px;
    font-size: 26px;
    line-height: 1;
    color: var(--wiki-text-muted);
    cursor: pointer;
}
.fb-modale-x:hover { color: var(--wiki-dark); }
.fb-modale-pillola {
    display: inline-block;
    background: var(--fb-red-light);
    color: var(--fb-red);
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    padding: .34em .8em;
    border-radius: 999px;
    margin-bottom: 13px;
}
.fb-modale h2 {
    font-size: 23px;
    line-height: 1.25;
    margin: 0 0 6px;
    color: var(--wiki-dark);
}
.fb-modale-lead { font-size: 16px; color: var(--wiki-text); margin: 0 0 16px; }
/* I fatti in fila: giorno, ora, durata, quanto costa, quanti siamo. */
.fb-modale-fatti {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin: 0 0 16px;
    padding: 0;
    list-style: none;
}
.fb-modale-fatti li {
    background: var(--wiki-bg);
    border: 1px solid var(--wiki-glass-border);
    border-radius: 999px;
    padding: .34em .8em;
    font-size: 13px;
    font-weight: 600;
    color: var(--wiki-dark);
}
.fb-modale-fatti li::before, .fb-modale-fatti li::marker { content: none; }
/* La riga dell'urgenza: quanto manca e quanti posti restano. */
/* ⚠️ Niente barretta di colore a sinistra (2026-09-24, Federico: «togli bordi
   laterali»). Con il bordo solo da un lato gli angoli dovevano restare vivi a
   sinistra e tondi a destra, e il riquadro sembrava tagliato via da qualcosa.
   Il colore lo porta il fondo, che basta. */
.fb-modale-urgenza {
    display: block;
    background: linear-gradient(90deg, rgba(194,0,28,.08), rgba(241,90,36,.08));
    border-radius: 12px;
    padding: 11px 15px;
    margin: 0 0 18px;
    font-size: 14px;
    color: var(--wiki-dark);
}
.fb-modale-urgenza strong { color: var(--fb-red); }
.fb-modale h3 {
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: var(--wiki-text-muted);
    margin: 18px 0 9px;
}
/* ⚠️ Niente flex su queste righe: il numero sta in `position: absolute`. Dentro
   un flex una riga con un grassetto o un link in mezzo si spacca in tronconi
   distanziati, ed e' successo tre volte in questo foglio (`.corso-checklist`,
   `.fb-check`, `.fb-faq summary`). */
.fb-modale-passi { margin: 0; padding: 0; list-style: none; counter-reset: passo; }
.fb-modale-passi li {
    position: relative;
    counter-increment: passo;
    padding: 0 0 9px 30px;
    font-size: 15px;
    line-height: 1.5;
}
.fb-modale-passi li::before {
    content: counter(passo);
    position: absolute;
    left: 0;
    top: .06em;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--fb-red);
    color: #fff;
    font-size: 12px;
    font-weight: 700;
    line-height: 22px;
    text-align: center;
}
.fb-modale-passi li::marker { content: none; }
/* ⚠️ IL MODULO DEL WEBINAR (2026-09-24). Prima qui c'era un solo bottone, ed
   era azzurro Telegram (#229ED9) perche' portava nel canale. Adesso e' il tasto
   che manda l'iscrizione, quindi e' rosso come tutti gli altri tasti del sito:
   un colore di un'altra azienda su un tasto che parla con questo server diceva
   a chi legge che stava per uscire dal sito.
   ⚠️ Vale anche qui la regola dei tasti (CLAUDE.md): col mouse sopra il rosso si
   scurisce e resta rosso, non diventa un'altra cosa. */
.fb-modale-form { margin: 0; }
.fb-modale-campo { margin: 0 0 12px; }
.fb-modale-campo label {
    display: block;
    margin-bottom: 5px;
    font-size: 13px;
    font-weight: 700;
    color: var(--wiki-dark);
}
.fb-modale-campo input {
    display: block;
    width: 100%;
    padding: 12px 14px;
    font: inherit;
    font-size: 15px;
    color: var(--wiki-dark);
    background: #fff;
    border: 1.5px solid var(--wiki-glass-border);
    border-radius: 12px;
    transition: border-color .18s, box-shadow .18s;
}
.fb-modale-campo input::placeholder { color: #94a3b8; }
.fb-modale-campo input:focus {
    outline: none;
    border-color: var(--fb-red);
    box-shadow: 0 0 0 3px rgba(194,0,28,.13);
}
/* Il campo trappola: lo vede solo un programma che legge il markup. ⚠️ Non si
   nasconde con `display:none`, che certi riempitori automatici saltano, e non
   si toglie dal flusso col solo `opacity`: sta fuori dallo schermo e non si
   puo' raggiungere col tabulatore. */
.fb-modale-trappola {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}
.fb-modale-vai {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 100%;
    margin-top: 18px;
    padding: 14px 19px;
    background: var(--fb-red);
    color: #fff !important;
    font-family: inherit;
    font-weight: 700;
    font-size: 16px;
    border: 0;
    border-radius: 999px;
    text-decoration: none;
    cursor: pointer;
    box-shadow: 0 10px 24px rgba(194,0,28,.28);
    transition: background .2s, box-shadow .2s;
}
.fb-modale-vai:hover { background: #960015; box-shadow: 0 14px 30px rgba(194,0,28,.34); }
.fb-modale-vai:disabled { background: #94a3b8; box-shadow: none; cursor: default; }
/* L'esito sta sotto al tasto e non al posto suo: chi usa un lettore di schermo
   lo sente perche' e' `aria-live`, e chi guarda non vede il riquadro saltare. */
/* ⚠️ LA CONFERMA SI VEDE, E NON E' UN VEZZO (2026-09-24, Federico: «più
   evidente la conferma»). È l'unica cosa che dice a una persona che il suo posto
   c'è: se somiglia a una nota a margine, quella persona preme di nuovo il tasto
   o se ne va nel dubbio. Quindi pannello pieno, filo tutt'intorno e la spunta
   tonda davanti.
   ⚠️ La spunta è in `position:absolute` e non in un flex: dentro un flex ogni
   pezzo di testo diventa un elemento a sé e la frase si spezza in tronconi. È la
   stessa regola di `.fb-check`, `.corso-checklist` e `.fb-faq summary`. */
.fb-modale-esito {
    position: relative;
    margin: 14px 0 0;
    padding: 15px 17px 15px 52px;
    font-size: 15.5px;
    font-weight: 600;
    line-height: 1.5;
    border-radius: 14px;
}
.fb-modale-esito::before {
    position: absolute;
    left: 16px;
    top: 15px;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    color: #fff;
    font-size: 14px;
    font-weight: 700;
    line-height: 24px;
    text-align: center;
}
@media (prefers-reduced-motion: no-preference) {
    .fb-modale-esito { animation: fb-esito-entra .3s cubic-bezier(.22,.61,.36,1); }
}
@keyframes fb-esito-entra {
    from { opacity: 0; transform: translateY(-6px); }
    to { opacity: 1; transform: none; }
}
/* ⚠️ Vuoto sparisce, e non con `hidden`: una zona `aria-live` nascosta il
   lettore di schermo la ignora, quindi resta nella pagina e si mostra da se'
   quando ci finisce dentro del testo. */
.fb-modale-esito:empty { display: none; }
.fb-modale-esito--si {
    background: rgba(5,150,105,.10);
    box-shadow: inset 0 0 0 1.5px rgba(5,150,105,.28);
    color: #065f46;
}
.fb-modale-esito--si::before { content: "\2713"; background: #059669; }
.fb-modale-esito--no {
    background: var(--fb-red-soft, rgba(194,0,28,.07));
    box-shadow: inset 0 0 0 1.5px rgba(194,0,28,.24);
    color: #7f1d1d;
}
.fb-modale-esito--no::before { content: "!"; background: var(--fb-red); }
.fb-modale-alt {
    margin: 13px 0 0;
    font-size: 14px;
    line-height: 1.5;
    text-align: center;
    color: var(--wiki-text-muted);
}
.fb-modale-alt a { color: var(--fb-red); font-weight: 600; }
@media (max-width: 519px) {
    .fb-modale { padding: 22px 19px 19px; }
    .fb-modale h2 { font-size: 20px; }
}

/* ============================================================
   LA PREPARAZIONE GUIDATA  (corsi/montaggio-video-ai/installa.html)
   ============================================================
   Una pagina che si segue col Terminale aperto di fianco: otto passi, una
   spunta per passo, e la barra in cima che dice a che punto si è. Le spunte
   restano nel browser di chi legge (localStorage), quindi si può chiudere e
   riprendere domani.

   ⚠️ Il passo fatto si SMORZA e non sparisce: chi configura un computer torna
   indietro in continuazione a rileggere il comando di due passi fa. Nascondere
   il fatto sembra ordinato e costringe a riaprirlo ogni volta.

   ⚠️ `.fb-fatto` è flex, e si può: dentro ci sono un <input> e uno <span> che
   tiene TUTTO il testo. È la stessa regola di `.corso-checklist` e `.fb-check`,
   dove il testo sciolto dentro a un flex si spaccava in tronconi. */

.fb-avanzamento {
    position: sticky; top: calc(var(--fb-barra-h, 64px) + 10px); z-index: 5;
    margin: 0 0 1.8rem; padding: 12px 16px;
    background: #fff; border: 1px solid var(--wiki-border);
    border-radius: 12px; box-shadow: 0 6px 20px rgba(15,23,42,.07);
}
.fb-avanzamento-barra {
    height: 6px; border-radius: 99px; background: var(--wiki-bg-soft, #eef1f5);
    overflow: hidden;
}
.fb-avanzamento-barra span {
    display: block; height: 100%; width: 0; border-radius: 99px;
    background: var(--cat-color, var(--fb-red)); transition: width .35s ease;
}
.fb-avanzamento-testo {
    margin: 8px 0 0; font-size: .86rem; font-weight: 600;
    color: var(--wiki-text-muted);
}

.fb-passo {
    position: relative; margin: 0 0 1.4rem; padding: 1.4rem 1.5rem .9rem;
    border: 1px solid var(--wiki-border); border-radius: 14px;
    background: #fff; transition: opacity .25s ease, border-color .25s ease;
}
.fb-passo > h2 { border-top: none; margin-top: 0; padding-top: 0; }
.fb-passo--fatto { opacity: .62; border-color: var(--cat-color, var(--fb-red)); }
.fb-passo--fatto:hover, .fb-passo--fatto:focus-within { opacity: 1; }

.fb-passo-n {
    display: inline-grid; place-items: center;
    width: 1.75em; height: 1.75em; margin-right: .1em;
    border-radius: 50%; font-size: .74em; font-weight: 700;
    color: var(--cat-color, var(--fb-red));
    background: color-mix(in srgb, var(--cat-color, var(--fb-red)) 12%, transparent);
}

.fb-fatto {
    display: flex; align-items: center; gap: 10px;
    margin: 1.2rem 0 .3rem; padding: 10px 14px;
    border-radius: 10px; cursor: pointer; user-select: none;
    background: var(--wiki-bg-soft, #f6f8fa);
    font-size: .92rem; font-weight: 600; color: var(--wiki-text-muted);
}
.fb-fatto:hover { background: color-mix(in srgb, var(--cat-color, var(--fb-red)) 8%, #f6f8fa); }
.fb-fatto input { width: 18px; height: 18px; accent-color: var(--cat-color, var(--fb-red)); cursor: pointer; }
.fb-fatto input:checked + span { color: var(--cat-color, var(--fb-red)); }

/* Il bottone Copia sta dentro al blocco scuro, in alto a destra. */
article pre { position: relative; }
.fb-copia {
    position: absolute; top: 10px; right: 10px;
    padding: 5px 11px; border: 1px solid rgba(255,255,255,.22);
    border-radius: 7px; background: rgba(255,255,255,.1); color: #fff;
    font: 600 .76rem/1 inherit; letter-spacing: .02em; cursor: pointer;
    opacity: .5; transition: opacity .18s ease, background .18s ease;
}
article pre:hover .fb-copia, .fb-copia:focus-visible { opacity: 1; }
.fb-copia:hover { background: rgba(255,255,255,.2); }
.fb-copia--ok { background: #16a34a; border-color: #16a34a; opacity: 1; }

.fb-scarica { display: flex; flex-wrap: wrap; gap: 12px; margin: 1.1rem 0; }
.fb-file {
    display: flex; flex-direction: column; gap: 2px; align-items: flex-start;
    padding: 11px 17px; border-radius: 11px; cursor: pointer; text-align: left;
    border: 1.5px solid var(--cat-color, var(--fb-red));
    background: #fff; color: var(--cat-color, var(--fb-red));
    transition: background .18s ease, transform .18s ease;
}
.fb-file:hover { background: color-mix(in srgb, var(--cat-color, var(--fb-red)) 8%, #fff); transform: translateY(-1px); }
.fb-file strong { font-size: .95rem; font-weight: 700; }
.fb-file span { font-size: .78rem; font-weight: 500; color: var(--wiki-text-muted); }
.fb-file--ok { background: color-mix(in srgb, var(--cat-color, var(--fb-red)) 12%, #fff); }
.fb-file--ok strong::after { content: " ✓"; }

@media (max-width: 600px) {
    .fb-passo { padding: 1.1rem 1.1rem .8rem; }
    .fb-avanzamento { position: static; }
    .fb-copia { opacity: 1; }
    .fb-scarica { flex-direction: column; }
    .fb-file { width: 100%; }
}

/* La scelta del sistema, dentro alla preparazione guidata.
   ⚠️ Senza JavaScript i tre blocchi restano TUTTI visibili, ognuno col suo
   titoletto «Su Mac / Su Windows / Su Linux»: chi sta configurando una
   macchina deve poter finire comunque. Lo script ne lascia uno e mette
   `fb-ha-sistema` sul body, che è quello che spegne i titoletti. */
.fb-scegli-sistema {
    display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px;
    margin: 0 0 1.2rem; padding: 12px 16px;
    border: 1px solid var(--wiki-border); border-radius: 12px;
    background: var(--wiki-bg-soft, #f6f8fa);
}
.fb-scegli-eti { font-size: .9rem; font-weight: 700; color: var(--wiki-text-muted); }
.fb-scegli-btn { display: flex; flex-wrap: wrap; gap: 8px; }
.fb-sistema-btn {
    padding: 7px 16px; border-radius: 99px; cursor: pointer;
    border: 1.5px solid var(--wiki-border); background: #fff;
    font: 600 .88rem/1 inherit; color: var(--wiki-text-muted);
    transition: background .18s ease, color .18s ease, border-color .18s ease;
}
.fb-sistema-btn:hover { border-color: var(--cat-color, var(--fb-red)); }
.fb-sistema-btn--su {
    border-color: var(--cat-color, var(--fb-red));
    background: var(--cat-color, var(--fb-red)); color: #fff;
}
.fb-sistema { margin: .6rem 0 1rem; }
.fb-sistema-eti {
    margin: 0 0 .4rem; font-size: .82rem; font-weight: 700;
    letter-spacing: .06em; text-transform: uppercase;
    color: var(--cat-color, var(--fb-red));
}
.fb-ha-sistema .fb-sistema-eti { display: none; }
.fb-passo--aiuto { border-style: dashed; background: var(--wiki-bg-soft, #f6f8fa); }

/* I comandi, sotto una linguetta.
   ⚠️ Nel corso «Montare i video con l'AI» il pubblico è chi monta video e non
   programma: la lezione si legge tutta senza vedere una riga di comando, e chi
   il comando lo vuole apre la linguetta. Il testo attorno però resta vero e
   completo da solo: la linguetta aggiunge, non sostituisce. */
details.fb-comando {
    margin: 1rem 0; border: 1px solid var(--wiki-border); border-radius: 10px;
    background: var(--wiki-bg-soft, #f6f8fa); overflow: hidden;
}
details.fb-comando > summary {
    padding: 11px 16px; cursor: pointer; list-style: none;
    font-size: .9rem; font-weight: 600; color: var(--cat-color, var(--fb-red));
}
details.fb-comando > summary::-webkit-details-marker { display: none; }
details.fb-comando > summary::before { content: "▸ "; }
details.fb-comando[open] > summary::before { content: "▾ "; }
details.fb-comando > summary:hover { background: rgba(0,0,0,.03); }
details.fb-comando pre { margin: 0 12px 12px; }
