/* =============================================================================
   FooLab — CV pubblico (/curriculum-vitae) · revisione leggibilità 2026-07
   -----------------------------------------------------------------------------
   OVERLAY sopra cv-public.css: va caricato PER ULTIMO (dopo quotation.css,
   quotation-public.css, cv-public.css) e ne riscrive tipografia, ritmo
   verticale e superfici nel linguaggio FooLab, senza toccare il markup della
   pagina né la logica del PDF.

   PERCHÉ UN OVERLAY E NON UNA RISCRITTURA
   ---------------------------------------
   La stessa URL è renderizzata da Browsershot per generare il PDF
   (CvController::renderPdfFromUrl, showBackground attivo): cv-public.css
   contiene le regole di paginazione e di `body.cv-pdf-mode` già tarate. Un
   overlay lascia intatte quelle regole e si limita a presentazione e ritmo,
   con una sezione dedicata in coda che ricompatta tutto in modalità PDF.

   VINCOLO: solo var(--fl-*) da foolab-tokens.css, caricato prima.
   ========================================================================== */

/* =========================================================================
   1. BASE — tipografia leggibile al posto di Arial 11px
   ====================================================================== */
.cv-container{
  max-width:var(--fl-container-full);
  padding:var(--fl-space-7) var(--fl-space-5) var(--fl-space-8);
  font-family:var(--fl-font-body);
  font-size:var(--fl-fs-sm);
  line-height:var(--fl-lh-lead);
  color:var(--fl-ink);
  background:var(--fl-bg);
}
.cv-container ul{font-size:inherit}
.cv-container p{margin-bottom:var(--fl-space-3)}

.cv-summary,
.cv-interests{
  font-size:var(--fl-fs-md);
  line-height:var(--fl-lh-lead);
  max-width:var(--fl-measure);
  color:var(--fl-ink);
}
/* Il sommario di progetto vive dentro card già strette: niente clamp di misura,
   altrimenti andava a capo a metà della card lasciando un buco a destra. */
.cv-project-summary{
  font-size:var(--fl-fs-sm);
  line-height:var(--fl-lh-lead);
  color:var(--fl-ink);
}
.cv-interests{font-style:normal;opacity:.85}

.cv-highlights-list{padding-left:var(--fl-space-5);margin:0;display:grid;gap:var(--fl-space-2)}
.cv-highlights-list li{font-size:var(--fl-fs-sm);line-height:var(--fl-lh-lead);margin:0}
.cv-highlights-list li::marker{color:var(--fl-blue)}

/* =========================================================================
   2. TESTATA — nome + ruolo come hero
   ====================================================================== */
.cv-title{
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-black);
  font-size:var(--fl-fs-h2);
  line-height:var(--fl-lh-tight);
  color:var(--fl-ink);
  margin:0 0 var(--fl-space-3);
  padding:0;
  border-bottom:0;
}
.cv-title i{color:var(--fl-blue);margin-right:var(--fl-space-3)}

.cv-container > .mb-3:first-child{
  background:var(--fl-panel);
  border:var(--fl-border);
  border-radius:var(--fl-radius-xl);
  box-shadow:var(--fl-shadow-lg);
  padding:var(--fl-space-7) var(--fl-space-6);
  margin-bottom:var(--fl-space-8) !important;
}
.cv-container > .mb-3:first-child .cv-info-text{
  font-size:var(--fl-fs-lead);
  line-height:var(--fl-lh-lead);
  max-width:var(--fl-measure);
  color:var(--fl-ink);
  opacity:.85;
  margin:0;
}

/* =========================================================================
   3. TITOLI DI SEZIONE — stessa testata della home (barretta + Baloo)
   ====================================================================== */
.cv-subtitle{
  position:relative;
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-black);
  font-size:var(--fl-fs-h2);
  line-height:var(--fl-lh-tight);
  color:var(--fl-ink);
  padding:0 0 0 var(--fl-space-5);
  border-bottom:0;
  margin:0 0 var(--fl-space-3);
}
.cv-subtitle::before{
  content:"";
  position:absolute;left:0;top:.18em;bottom:.18em;
  width:var(--fl-border-w);
  background:var(--fl-yellow);
  border:var(--fl-border-w-xs) solid var(--fl-line);
  border-radius:var(--fl-radius-pill);
}
.cv-subtitle i{color:var(--fl-blue);margin-right:var(--fl-space-3) !important}

.cv-info-text{
  font-size:var(--fl-fs-sm);
  line-height:var(--fl-lh-lead);
  color:var(--fl-ink);
  opacity:.75;
  max-width:var(--fl-measure);
  margin-top:var(--fl-space-2);
}
/* Riga tratteggiata che chiude la testata di sezione e apre il contenuto */
.cv-container > .mb-3::after{
  content:"";
  display:block;
  margin-top:var(--fl-space-3);
  border-top:var(--fl-dash-soft);
}
.cv-container > .mb-3:first-child::after{display:none}
.cv-info-text i{color:var(--fl-blue-d)}

/* Ritmo verticale: le testate di sezione respirano, i blocchi si separano */
.cv-container > .mb-3{margin-bottom:var(--fl-space-5) !important}
.cv-container > .mb-4,
.cv-container > .row.mb-4{margin-bottom:var(--fl-space-8) !important}

/* =========================================================================
   4. SUPERFICI — card cartoon al posto delle card bootstrap b/n
   ====================================================================== */
/* NB: cv-public.css dichiara `border: 1px dashed #000 !important` sulle card
   (eredità dello stile preventivi). Per sostituire il tratteggio col bordo
   cartoon serve !important anche qui — è l'unico punto in cui l'overlay lo usa,
   e solo su bordo/raggio, mai su colori o spaziature. */
.cv-container .card,
.cv-container .cv-card{
  background:var(--fl-panel);
  border:var(--fl-border-sm) !important;
  border-radius:var(--fl-radius-lg) !important;
  box-shadow:var(--fl-shadow);
  overflow:hidden;
}
.cv-container .cv-card:hover{box-shadow:var(--fl-shadow-hover)}
.cv-container .cv-card-static:hover{box-shadow:var(--fl-shadow)}

.cv-container .cv-card-header,
.cv-container .card-header{
  background:var(--fl-ink);
  color:var(--fl-on-dark);
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-black);
  font-size:var(--fl-fs-md);
  letter-spacing:0;
  text-transform:none;
  border:0;
  border-bottom:var(--fl-border-sm);
  padding:var(--fl-space-3) var(--fl-space-4);
}
.cv-container .cv-card-header i{color:var(--fl-yellow)}

.cv-container .cv-card-body,
.cv-container .card-body{padding:var(--fl-space-5)}
.cv-container .cv-card-footer,
.cv-container .card-footer{
  background:var(--fl-tint-grey);
  border-top:var(--fl-dash-sm);
  padding:var(--fl-space-4) var(--fl-space-5);
}

/* Esperienza in corso: pallino e bordo evidenziati col verde di marca */
.cv-container .cv-experience-card.is-active{border-color:var(--fl-green)}
.cv-container .cv-status-dot.is-active{background:var(--fl-green)}

/* Tabelle informative (candidato, formazione, lingue) */
.cv-container .cv-info-table td{
  padding:var(--fl-space-2) var(--fl-space-2);
  vertical-align:top;
  border-bottom:var(--fl-dash-soft);
}
.cv-container .cv-info-table tr:last-child td{border-bottom:0}
.cv-container .cv-info-label{
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-bold);
  font-size:var(--fl-fs-sm);
  color:var(--fl-blue-d);
  white-space:nowrap;
  padding-right:var(--fl-space-4) !important;
}
.cv-container .cv-info-value{font-size:var(--fl-fs-sm)}
.cv-container .cv-info-value a{color:var(--fl-blue-d);text-decoration:underline;text-underline-offset:.2em}

/* Marchio personale: come il logo Footility, NERO SU BIANCO. */
.cv-container .cv-logo-box{
  display:inline-flex;align-items:center;justify-content:center;
  width:92px;height:92px;
  background:var(--fl-panel);color:var(--fl-ink);
  border:var(--fl-border-sm);
  border-radius:var(--fl-radius-lg);
  box-shadow:var(--fl-shadow-sm);
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-black);
  font-size:2rem;
}

/* =========================================================================
   5. METRICHE — riquadri grandi e leggibili
   ====================================================================== */
.cv-container .cv-metric-card{
  height:100%;
  display:flex;flex-direction:column;align-items:flex-start;gap:var(--fl-space-2);
  background:var(--fl-panel);
  border:var(--fl-border-sm) !important;
  border-radius:var(--fl-radius-lg) !important;
  box-shadow:var(--fl-shadow-sm);
  padding:var(--fl-space-5);
}
.cv-container .cv-metric-card:hover{background:var(--fl-tint-yellow);color:var(--fl-ink)}
.cv-container .cv-metric-card:hover .cv-metric-label,
.cv-container .cv-metric-card:hover .cv-metric-icon{color:var(--fl-ink);border-color:var(--fl-line)}
.cv-container .cv-metric-icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:44px;height:44px;
  background:var(--fl-tint-blue);color:var(--fl-blue-d);
  border:var(--fl-border-xs);border-radius:var(--fl-radius-md);
  font-size:var(--fl-fs-lg);
  margin-bottom:var(--fl-space-2);
}
.cv-container .cv-metric-value{
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-black);
  font-size:2.2rem;
  line-height:1;
  color:var(--fl-ink);
}
.cv-container .cv-metric-label{
  font-size:var(--fl-fs-xs);
  font-weight:var(--fl-fw-bold);
  letter-spacing:.06em;
  text-transform:uppercase;
  opacity:.7;
}

/* =========================================================================
   6. PILL / SKILL — chip FooLab
   ====================================================================== */
.cv-container .cv-pill{
  display:inline-block;
  background:var(--fl-tint-grey);
  color:var(--fl-ink);
  border:var(--fl-border-xs);
  border-radius:var(--fl-radius-pill);
  padding:var(--fl-space-1) var(--fl-space-3);
  margin:0 var(--fl-space-2) var(--fl-space-2) 0;
  font-size:var(--fl-fs-xs);
  font-weight:var(--fl-fw-bold);
  line-height:1.5;
}
.cv-container .cv-pill-new{background:var(--fl-tint-yellow);border-color:var(--fl-line)}
.cv-container .cv-pill-new-badge{color:var(--fl-blue-d);font-weight:var(--fl-fw-black)}

/* ---- Tag colorati per FAMIGLIA DI COMPETENZA -------------------------------
   Il CV risultava piatto perché 80+ pill erano tutte dello stesso grigio: non
   aiutano a leggere, diventano rumore. Le coloriamo per gruppo di competenza
   (Backend / Frontend / Mobile / CMS & Tools), così lo sguardo raggruppa da
   solo. La classe di gruppo la mette il Blade (cv-skills-col--N), non un
   :nth-of-type: l'ordine dei gruppi cambia col contenuto.
------------------------------------------------------------------------------ */
.cv-container .cv-skills-col--0 .cv-pill{background:var(--fl-tint-blue)}
.cv-container .cv-skills-col--1 .cv-pill{background:var(--fl-tint-green)}
.cv-container .cv-skills-col--2 .cv-pill{background:var(--fl-tint-purple)}
.cv-container .cv-skills-col--3 .cv-pill{background:var(--fl-tint-orange)}
.cv-container .cv-skills-col--0 .cv-skills-group-header{background:var(--fl-tint-blue)}
.cv-container .cv-skills-col--1 .cv-skills-group-header{background:var(--fl-tint-green)}
.cv-container .cv-skills-col--2 .cv-skills-group-header{background:var(--fl-tint-purple)}
.cv-container .cv-skills-col--3 .cv-skills-group-header{background:var(--fl-tint-orange)}

/* Le pill di stack dentro esperienze e progetti restano chiare ma con l'accento
   sul bordo: distinguono senza competere coi tag di competenza. */
.cv-container .cv-experience-card .cv-pill,
.cv-container .cv-closed-card .cv-pill{
  background:var(--fl-panel);
  border-color:var(--fl-blue);
  color:var(--fl-blue-d);
}

/* Competenze in evidenza: dalla barra nera a sticker gialli inclinati */
.cv-container .cv-top-skill-pill:nth-child(odd){transform:rotate(-2deg)}
.cv-container .cv-top-skill-pill:nth-child(even){transform:rotate(1.5deg)}

/* ---- Periodo come sticker inclinato ---------------------------------------- */
.cv-container .cv-item-period{
  background:var(--fl-yellow) !important;
  color:var(--fl-ink) !important;
  border:var(--fl-border-sm) !important;
  box-shadow:var(--fl-shadow-sm);
  transform:rotate(-2deg);
}
.cv-container .cv-item-period.is-active{
  background:var(--fl-green) !important;
  color:var(--fl-on-green) !important;
}

.cv-container .cv-top-skills-bar{
  display:flex;flex-wrap:wrap;gap:var(--fl-space-3);
  background:var(--fl-surface-dark);
  border:var(--fl-border-sm);
  border-radius:var(--fl-radius-lg);
  box-shadow:var(--fl-shadow);
  padding:var(--fl-space-5);
  margin-bottom:var(--fl-space-8);
}
.cv-container .cv-top-skill-pill{
  background:var(--fl-yellow);color:var(--fl-ink);
  border:var(--fl-border-xs);
  border-radius:var(--fl-radius-pill);
  padding:var(--fl-space-2) var(--fl-space-4);
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-bold);
  font-size:var(--fl-fs-sm);
}

.cv-container .cv-skills-group-header{
  display:flex;align-items:center;gap:var(--fl-space-3);
  background:var(--fl-tint-blue);
  color:var(--fl-ink);
  border-bottom:var(--fl-border-w-xs) solid var(--fl-line);
  padding:var(--fl-space-3) var(--fl-space-4);
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-black);
  font-size:var(--fl-fs-md);
  letter-spacing:0;
}
.cv-container .cv-skills-group-header i{color:var(--fl-blue-d)}
.cv-container .cv-skills-group-body{padding:var(--fl-space-5)}

/* =========================================================================
   7. ESPERIENZE / PROGETTI
   ====================================================================== */
.cv-container .cv-experience-card{margin-bottom:var(--fl-space-5) !important}
.cv-container .cv-experience-company{
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-black);
  font-size:var(--fl-fs-md);
  letter-spacing:0;
}
.cv-container .cv-experience-location{font-weight:var(--fl-fw-regular);opacity:.7}
.cv-container .cv-experience-role{
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-bold);
  font-size:var(--fl-fs-md);
  color:var(--fl-blue-d);
  margin-bottom:var(--fl-space-3);
}
.cv-container .cv-item-period{
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-bold);
  font-size:var(--fl-fs-xs);
  border-radius:var(--fl-radius-pill) !important;
  padding:var(--fl-space-1) var(--fl-space-3);
  white-space:nowrap;
}
.cv-container .cv-item-highlights{
  padding-left:var(--fl-space-5);
  display:grid;gap:var(--fl-space-2);
}
.cv-container .cv-item-highlights li{font-size:var(--fl-fs-sm);line-height:var(--fl-lh-lead)}
.cv-container .cv-item-highlights li::marker{color:var(--fl-blue)}

.cv-container .cv-closed-card{
  height:100%;
  background:var(--fl-panel);
  border:var(--fl-border-xs);
  border-radius:var(--fl-radius-md);
  box-shadow:var(--fl-shadow-sm);
  padding:var(--fl-space-4);
}
.cv-container .cv-closed-card-title{
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-black);
  font-size:var(--fl-fs-md);
  margin-bottom:var(--fl-space-1);
}
.cv-container .cv-closed-card-client{font-size:var(--fl-fs-xs);color:var(--fl-blue-d);margin-bottom:var(--fl-space-2)}
.cv-container .cv-closed-card-summary{font-size:var(--fl-fs-sm);line-height:var(--fl-lh-lead);margin-bottom:var(--fl-space-3)}

.cv-container .cv-soft-list{
  list-style:none;padding:0;margin:0;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:var(--fl-space-3);
}
.cv-container .cv-soft-list li{
  background:var(--fl-tint-grey);
  border:var(--fl-border-xs);
  border-radius:var(--fl-radius-sm);
  padding:var(--fl-space-3) var(--fl-space-4);
  font-size:var(--fl-fs-sm);
  line-height:var(--fl-lh-lead);
}

/* =========================================================================
   8. BOTTONI E CTA FINALE
   ====================================================================== */
.cv-container .btn{
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-bold);
  border-radius:var(--fl-radius-md);
  border:var(--fl-border-xs);
  box-shadow:var(--fl-shadow-sm);
  padding:var(--fl-space-2) var(--fl-space-4);
}
.cv-container .btn:active{transform:translateY(var(--fl-border-w-xs));box-shadow:none}
.cv-container .btn-dark{background:var(--fl-blue);border-color:var(--fl-line);color:var(--fl-on-blue)}
.cv-container .btn-dark:hover{background:var(--fl-blue-d);color:var(--fl-on-blue)}
.cv-container .btn-outline-dark{background:var(--fl-panel);border-color:var(--fl-line);color:var(--fl-ink)}
.cv-container .btn-outline-dark:hover{background:var(--fl-tint-yellow);color:var(--fl-ink)}

.cv-container .cv-cta-card{
  background:var(--fl-yellow);
  color:var(--fl-ink);
  border:var(--fl-border) !important;
  border-radius:var(--fl-radius-xl) !important;
  box-shadow:var(--fl-shadow-lg);
  padding:var(--fl-space-6);
  margin-top:var(--fl-space-8);
}
.cv-container .cv-cta-title{
  font-family:var(--fl-font-display);
  font-weight:var(--fl-fw-black);
  font-size:var(--fl-fs-h3);
  margin-bottom:var(--fl-space-2);
}
.cv-container .cv-cta-sub{
  font-size:var(--fl-fs-md);
  line-height:var(--fl-lh-lead);
  color:var(--fl-ink);
  opacity:.85;
  max-width:var(--fl-measure);
}

/* =========================================================================
   9. CORNICE DI PAGINA E FOOTER
   ====================================================================== */
/* La cornice storica .foo-border è DOPPIA (due div annidati con bordo 3px) e
   incornicia tutta la pagina: con le card che hanno già il loro bordo diventava
   un doppio bordo su tutto il perimetro. Nella skin FooLab la togliamo. */
body:has(.cv-container) .foo-border{
  border:0;
  margin:0;
  width:100%;
  height:auto;
  background:var(--fl-bg);
}

.cv-public-footer{
  background:var(--fl-panel);
  border-top:var(--fl-border-sm);
  font-family:var(--fl-font-body);
  font-size:var(--fl-fs-xs);
  padding:var(--fl-space-4) var(--fl-space-5) !important;
}
.cv-public-footer .foo-font{font-size:1.4rem}

/* =========================================================================
   10. MOBILE
   ====================================================================== */
@media (max-width:640px){
  .cv-container{padding:var(--fl-space-5) var(--fl-space-4) var(--fl-space-7)}
  .cv-container > .mb-3:first-child{padding:var(--fl-space-5) var(--fl-space-4)}
  .cv-container .cv-metric-value{font-size:1.8rem}
  .cv-container .cv-top-skills-bar{padding:var(--fl-space-4)}
}

/* =========================================================================
   11. MODALITÀ PDF / STAMPA — ricompatta e appiattisce
   -------------------------------------------------------------------------
   Il PDF è il render della stessa pagina (Browsershot, showBackground attivo):
   qui riduciamo la scala e togliamo le ombre dure, che in stampa diventano
   bande nere e mangiano lo spazio utile del foglio A4.
   ====================================================================== */
body.cv-pdf-mode .cv-container{
  padding:0;
  font-size:11.5px;
  line-height:1.45;
  background:var(--fl-panel);
}
body.cv-pdf-mode .cv-container .cv-highlights-list,
body.cv-pdf-mode .cv-container .cv-item-highlights,
body.cv-pdf-mode .cv-container .cv-soft-list{gap:var(--fl-space-1)}
body.cv-pdf-mode .cv-container .cv-experience-card{margin-bottom:var(--fl-space-3) !important}
body.cv-pdf-mode .cv-container .cv-top-skills-bar{
  padding:var(--fl-space-3);
  gap:var(--fl-space-2);
  margin-bottom:var(--fl-space-5);
}
body.cv-pdf-mode .cv-container .cv-metric-card{padding:var(--fl-space-3)}
body.cv-pdf-mode .cv-container .cv-card-header,
body.cv-pdf-mode .cv-container .card-header{padding:var(--fl-space-2) var(--fl-space-3)}
body.cv-pdf-mode .cv-container .cv-logo-box{width:64px;height:64px;font-size:1.4rem}
body.cv-pdf-mode .cv-container .card,
body.cv-pdf-mode .cv-container .cv-card,
body.cv-pdf-mode .cv-container .cv-metric-card,
body.cv-pdf-mode .cv-container .cv-closed-card,
body.cv-pdf-mode .cv-container .cv-top-skills-bar{
  box-shadow:none;
  border-width:var(--fl-border-w-xs);
}
body.cv-pdf-mode .cv-container > .mb-3:first-child{
  box-shadow:none;
  border-width:var(--fl-border-w-xs);
  padding:var(--fl-space-4);
  margin-bottom:var(--fl-space-5) !important;
}
body.cv-pdf-mode .cv-container > .mb-4,
body.cv-pdf-mode .cv-container > .row.mb-4{margin-bottom:var(--fl-space-5) !important}
body.cv-pdf-mode .cv-subtitle,
body.cv-pdf-mode .cv-title{font-size:1.2rem;margin-bottom:var(--fl-space-2)}
body.cv-pdf-mode .cv-container .cv-metric-value{font-size:1.4rem}
body.cv-pdf-mode .cv-container .cv-summary,
body.cv-pdf-mode .cv-container .cv-interests,
body.cv-pdf-mode .cv-container .cv-project-summary{font-size:11.5px;max-width:none}
body.cv-pdf-mode .cv-container .cv-card-body,
body.cv-pdf-mode .cv-container .card-body,
body.cv-pdf-mode .cv-container .cv-skills-group-body{padding:var(--fl-space-3)}

@media print{
  .cv-container .card,
  .cv-container .cv-card,
  .cv-container .cv-metric-card,
  .cv-container .cv-closed-card{box-shadow:none}
}

/* ==========================================================================
   CV ESTESO — densità di stampa (epica #997 / CV #4, att. #36407)
   Obiettivo: da 8 a 3-4 pagine SENZA perdere contenuto.
   Spec: docs/CV-REDESIGN-DIRECTION.md §4
   Sta qui e non in css/cv-public.css perché questo foglio è caricato per
   ultimo e usa la specificità .cv-container: le regole di paginazione vanno
   dichiarate dove possono effettivamente vincere.
   ========================================================================== */

body.cv-pdf-mode .cv-container{
    font-size:9pt !important;
    line-height:1.25 !important;
}

body.cv-pdf-mode .cv-container .cv-title{font-size:17pt !important}
body.cv-pdf-mode .cv-container .cv-subtitle{font-size:10pt !important;margin-bottom:var(--fl-space-1) !important}
body.cv-pdf-mode .cv-container .cv-info-text{font-size:9pt !important}

/* Padding delle card: la voce di spesa maggiore in altezza. */
body.cv-pdf-mode .cv-container .cv-card .card-body,
body.cv-pdf-mode .cv-container .cv-card-body,
body.cv-pdf-mode .cv-container .cv-experience-card .cv-card-body,
body.cv-pdf-mode .cv-container .cv-project-card .cv-card-body{
    padding:var(--fl-space-2) var(--fl-space-3) !important;
}

body.cv-pdf-mode .cv-container .cv-card-header,
body.cv-pdf-mode .cv-container .card-header{
    padding:var(--fl-space-1) var(--fl-space-3) !important;
    font-size:9.2pt !important;
}

body.cv-pdf-mode .cv-container .cv-metric-card{padding:var(--fl-space-2) !important}
body.cv-pdf-mode .cv-container .cv-logo-box{width:52px;height:52px;font-size:1.1rem}

body.cv-pdf-mode .cv-container .card,
body.cv-pdf-mode .cv-container .cv-card,
body.cv-pdf-mode .cv-container .cv-experience-card,
body.cv-pdf-mode .cv-container .cv-project-card{
    margin-bottom:var(--fl-space-2) !important;
}

/* Margini di sezione dimezzati (annulla il space-5 precedente). */
body.cv-pdf-mode .cv-container > .mb-4,
body.cv-pdf-mode .cv-container > .row.mb-4{margin-bottom:var(--fl-space-3) !important}
body.cv-pdf-mode .cv-container .mb-3{margin-bottom:var(--fl-space-2) !important}

/* Bullet densi. */
body.cv-pdf-mode .cv-container .cv-item-highlights li,
body.cv-pdf-mode .cv-container .cv-highlights-list li,
body.cv-pdf-mode .cv-container .list-group-item{
    padding-top:.06rem !important;
    padding-bottom:.06rem !important;
    line-height:1.24 !important;
}

/* Progetti su 2 colonne anche in stampa: con la griglia CSS (non flex) gli
   artefatti di overlap che avevano motivato il display:block non si presentano. */
body.cv-pdf-mode .cv-container .cv-project-grid{
    display:grid !important;
    grid-template-columns:repeat(2,minmax(0,1fr)) !important;
    gap:var(--fl-space-2) !important;
}

body.cv-pdf-mode .cv-container .cv-project-grid > [class*="col-"]{
    width:auto !important;
    max-width:none !important;
    flex:none !important;
    margin-bottom:0 !important;
    padding-left:0 !important;
    padding-right:0 !important;
}

/* page-break-inside: avoid resta sulle card intere, non sulle righe generiche:
   è quello che generava le code bianche di fine pagina. */
body.cv-pdf-mode .cv-container .list-group-item,
body.cv-pdf-mode .cv-container .row > [class*="col-"]{
    page-break-inside:auto !important;
    break-inside:auto !important;
}

/* Le code bianche di fine pagina restavano perché OGNI card era indivisibile:
   con 26 card grandi il break-avoid costava ~2 pagine di vuoto. Nel CV esteso
   una card che si spezza è accettabile; resta indivisibile solo cio che è
   piccolo (metriche) e la coppia titolo+prima riga. */
body.cv-pdf-mode .cv-container .cv-card,
body.cv-pdf-mode .cv-container .card,
body.cv-pdf-mode .cv-container .cv-experience-card,
body.cv-pdf-mode .cv-container .cv-project-card,
body.cv-pdf-mode .cv-container .cv-closed-card{
    page-break-inside:auto !important;
    break-inside:auto !important;
}

body.cv-pdf-mode .cv-container .cv-metric-card{
    page-break-inside:avoid !important;
    break-inside:avoid !important;
}

/* Riduce il blocco identità in testa: la logo-box ha un min-height inline. */
body.cv-pdf-mode .cv-container .cv-logo-box{width:44px !important;height:44px !important;font-size:1rem !important}
body.cv-pdf-mode .cv-container [style*="min-height: 130px"]{min-height:0 !important}

/* Esperienze su 2 colonne in stampa (wrapper .cv-experience-grid, CV #4). */
body.cv-pdf-mode .cv-container .cv-experience-grid{
    display:grid !important;
    grid-template-columns:repeat(2,minmax(0,1fr)) !important;
    gap:var(--fl-space-2) !important;
    align-items:start;
}

body.cv-pdf-mode .cv-container .cv-experience-grid > .cv-experience-card{
    margin-bottom:0 !important;
}

/* --- CV #4: multi-colonna di stampa sulle sezioni più alte -------------- */
/* Nessun contenuto rimosso: le stesse voci vengono impaginate su più colonne. */

body.cv-pdf-mode .cv-container .cv-metrics-grid{
    display:grid !important;
    grid-template-columns:repeat(4,minmax(0,1fr)) !important;
    gap:var(--fl-space-2) !important;
}

body.cv-pdf-mode .cv-container .cv-project-grid{
    grid-template-columns:repeat(3,minmax(0,1fr)) !important;
}

body.cv-pdf-mode .cv-container .cv-archive-grid,
body.cv-pdf-mode .cv-container .cv-skills-grid{
    display:grid !important;
    grid-template-columns:repeat(3,minmax(0,1fr)) !important;
    gap:var(--fl-space-2) !important;
    align-items:start;
}

body.cv-pdf-mode .cv-container .cv-metrics-grid > [class*="col-"],
body.cv-pdf-mode .cv-container .cv-archive-grid > [class*="col-"],
body.cv-pdf-mode .cv-container .cv-skills-grid > [class*="col-"]{
    width:auto !important;
    max-width:none !important;
    flex:none !important;
    padding-left:0 !important;
    padding-right:0 !important;
    margin-bottom:0 !important;
}

/* Soft skill su 2 colonne. */
body.cv-pdf-mode .cv-container .cv-soft-list{
    column-count:2;
    column-gap:var(--fl-space-4);
}

/* Blocco identità in testa: la colonna del logo occupava 130px inline. */
body.cv-pdf-mode .cv-container .cv-info-table td{padding-top:.05rem !important;padding-bottom:.05rem !important}

/* Correzione misurata: a 3 colonne le card progetto si stringono e il testo va
   a capo di più, crescendo in altezza (1292px → 1410px). Restano a 2. */
body.cv-pdf-mode .cv-container .cv-project-grid{
    grid-template-columns:repeat(2,minmax(0,1fr)) !important;
}

/* Corpo delle card leggermente più fitto (resta sopra la soglia di 8pt). */
body.cv-pdf-mode .cv-container .cv-card-body,
body.cv-pdf-mode .cv-container .cv-item-highlights,
body.cv-pdf-mode .cv-container .cv-pill{
    font-size:8.4pt !important;
}

/* Testate di sezione: da blocco a riga singola. */
body.cv-pdf-mode .cv-container > .mb-3{margin-bottom:var(--fl-space-1) !important}
body.cv-pdf-mode .cv-container > .mb-3 .cv-info-text{font-size:8pt !important;margin-top:0 !important}

/* Soft skill: la lista è flex, column-count non si applica finché non torna block. */
body.cv-pdf-mode .cv-container .cv-soft-list{
    display:block !important;
    column-count:2;
    column-gap:var(--fl-space-4);
}
body.cv-pdf-mode .cv-container .cv-soft-list li{break-inside:avoid}

/* Blocco identità: la colonna del logo teneva 130px di min-height inline. */
body.cv-pdf-mode .cv-container .cv-logo-box{width:38px !important;height:38px !important;font-size:.9rem !important}

/* In stampa i tag dello stack diventano testo separato da punti: stesse voci,
   senza il costo in altezza di bordo, padding e a-capo di ogni pill. */
body.cv-pdf-mode .cv-container .cv-pill{
    display:inline !important;
    padding:0 !important;
    margin:0 !important;
    border:none !important;
    background:none !important;
    border-radius:0 !important;
    line-height:1.2 !important;
}

body.cv-pdf-mode .cv-container .cv-pill + .cv-pill::before{
    content:" · ";
    opacity:.45;
}

body.cv-pdf-mode .cv-container .cv-card-header{
    line-height:1.2 !important;
}

body.cv-pdf-mode .cv-container .cv-experience-card .mb-2,
body.cv-pdf-mode .cv-container .cv-project-card .mb-2{
    margin-bottom:var(--fl-space-1) !important;
}

/* Chromium non frammenta bene le griglie CSS: una riga di griglia che non
   entra nello spazio residuo slitta INTERA alla pagina dopo, lasciando code
   bianche. Il multi-colonna invece si spezza per elemento. */
body.cv-pdf-mode .cv-container .cv-experience-grid,
body.cv-pdf-mode .cv-container .cv-project-grid{
    display:block !important;
    column-count:2;
    column-gap:var(--fl-space-3);
}

body.cv-pdf-mode .cv-container .cv-experience-grid > *,
body.cv-pdf-mode .cv-container .cv-project-grid > [class*="col-"]{
    break-inside:avoid;
    page-break-inside:avoid;
    margin-bottom:var(--fl-space-2) !important;
    width:auto !important;
    max-width:none !important;
}

/* Stesso trattamento per skill, archivio e formazione: multi-colonna che
   frammenta, invece di griglie che slittano intere. */
body.cv-pdf-mode .cv-container .cv-skills-grid,
body.cv-pdf-mode .cv-container .cv-archive-grid{
    display:block !important;
    column-count:2;
    column-gap:var(--fl-space-3);
}

body.cv-pdf-mode .cv-container .cv-skills-grid > [class*="col-"],
body.cv-pdf-mode .cv-container .cv-archive-grid > [class*="col-"]{
    break-inside:avoid;
    page-break-inside:avoid;
    width:auto !important;
    max-width:none !important;
    margin-bottom:var(--fl-space-2) !important;
}
