/* =========================================================
   Luca Antonini — curriculum vitae (cv.html)

   Questo NON è il sito: è un documento. Metrica A4, pensato
   prima per la stampa e poi per lo schermo — dove il foglio è
   mostrato come tale, su un piano scuro.

   L'impaginazione è a due colonne: una fascia scura a tutta
   altezza tiene identità, recapiti e competenze; la colonna
   chiara racconta profilo, esperienza, formazione e progetti.
   Chi legge sa sempre da che parte guardare: i dati a sinistra,
   il percorso a destra.
   ========================================================= */

:root {
  --paper:    #ffffff;
  --desk:     #14181a;

  --side:     #10201e;   /* la fascia */
  --side-tx:  #d7e4e1;
  --side-dim: #8ea8a3;
  --side-rule:rgba(255, 255, 255, .16);
  --side-acc: #4ec9bd;

  --ink:      #101a19;   /* titoli e parole che devono pesare */
  --body:     #2c3937;   /* testo corrente: scuro, non nero    */
  --mute:     #6d807d;   /* etichette e cose di servizio       */
  --rule:     #dfe6e4;

  --font: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, Helvetica, Arial, sans-serif;
  --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
}

*, *::before, *::after { box-sizing: border-box; }

/* Tutte le misure del documento sono in rem: la scala si governa da <html>,
   in un punto solo, così le proporzioni del foglio a schermo sono le stesse
   che avrà in stampa (dove cambia soltanto questo valore). */
html { font-size: 13.6px; }

body {
  margin: 0;
  background: var(--desk);
  color: var(--body);
  font-family: var(--font);
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3 { margin: 0; line-height: 1.2; font-weight: 700; color: var(--ink); }
p { margin: 0; }
ul { margin: 0; padding: 0; list-style: none; }
a { color: inherit; }

:focus-visible { outline: 2px solid var(--side-acc); outline-offset: 2px; }

.dot { color: var(--mute); margin-inline: .3em; }
.nw  { white-space: nowrap; }

/* =========================================================
   Barra strumenti — solo a schermo
   ========================================================= */
.toolbar {
  position: sticky; top: 0; z-index: 10;
  display: flex; align-items: center; justify-content: space-between;
  gap: 1rem; flex-wrap: wrap;
  padding: .75rem 1.25rem;
  background: rgba(12, 16, 18, .92);
  backdrop-filter: blur(8px);
  border-bottom: 1px solid #26302f;
  font: 500 .85rem/1 var(--mono);
  color: #9bb0ac;
}
.toolbar__right { display: flex; align-items: center; gap: .6rem; }
.toolbar__back { text-decoration: none; color: #9bb0ac; }
.toolbar__back:hover { color: #e6edeb; }

.langswitch { display: inline-flex; border: 1px solid #2b3634; border-radius: 4px; overflow: hidden; }
.langswitch button {
  font: 600 .78rem/1 var(--mono);
  padding: .4rem .5rem; border: 0; background: transparent; color: #7d918e; cursor: pointer;
}
.langswitch button:hover { color: #e6edeb; }
.langswitch button[aria-pressed="true"] { background: #4fd0c4; color: #06110f; }

.toolbar__print {
  font: 500 .8rem/1 var(--mono);
  padding: .48rem .8rem;
  border: 1px solid #2b3634; border-radius: 4px;
  background: transparent; color: #9bb0ac; cursor: pointer;
}
.toolbar__print:hover { border-color: #4fd0c4; color: #e6edeb; }

/* =========================================================
   Il foglio
   Le due colonne non hanno margini attorno: sono loro a portarsi
   il proprio incavo, così la fascia arriva ai bordi della carta.
   ========================================================= */
.sheet {
  display: grid;
  grid-template-columns: 64mm 1fr;
  width: 210mm;
  max-width: 100%;
  min-height: 297mm;
  margin: 2rem auto;
  background: var(--paper);
  box-shadow: 0 2px 24px rgba(0, 0, 0, .45);
  print-color-adjust: exact;
  -webkit-print-color-adjust: exact;
}

/* =========================================================
   Colonna laterale
   ========================================================= */
.cv-side {
  background: var(--side);
  color: var(--side-tx);
  padding: 16mm 8mm 12mm;
}
.cv-name {
  color: #fff;
  font-size: 1.95rem;
  line-height: 1.05;
  letter-spacing: -.02em;
}
.cv-role {
  color: var(--side-acc);
  font-size: .82rem; font-weight: 600;
  letter-spacing: .01em;
  margin-top: 2mm;
}

.cv-side__block { margin-top: 8mm; }
.cv-side__title {
  font: 700 .62rem/1 var(--mono);
  letter-spacing: .18em; text-transform: uppercase;
  color: var(--side-acc);
  padding-bottom: 2mm; margin-bottom: 3mm;
  border-bottom: 1px solid var(--side-rule);
}
.cv-side__list li {
  font-size: .76rem; line-height: 1.65;
  color: var(--side-tx);
  overflow-wrap: break-word;
}
.cv-side__list li + li { margin-top: .8mm; }
.cv-contacts li { font-family: var(--mono); font-size: .7rem; }
.cv-contacts a { text-decoration: none; }
.cv-contacts a:hover { text-decoration: underline; }

/* livello di una competenza: tre tacche, e tre accese vuol dire avanzato */
.cv-lvl + .cv-lvl { margin-top: 2.6mm; }
.cv-lvl__row { display: flex; justify-content: space-between; align-items: baseline; gap: 2mm; }
.cv-lvl__name { font-size: .8rem; font-weight: 600; color: #fff; }
.cv-lvl__tag {
  font: 400 .62rem/1 var(--mono);
  text-transform: uppercase; letter-spacing: .1em;
  color: var(--side-dim);
}
.cv-lvl__bar { display: flex; gap: 1.1mm; margin-top: 1.4mm; }
.cv-lvl__bar i { flex: 1; height: 1.5mm; border-radius: .7mm; background: var(--side-rule); }
.cv-lvl__bar i.on { background: var(--side-acc); }

/* =========================================================
   Colonna principale
   ========================================================= */
.cv-main { padding: 16mm 13mm 12mm; min-width: 0; }

.cv-section + .cv-section { margin-top: 7mm; }
.cv-section__title {
  font: 700 .74rem/1 var(--font);
  letter-spacing: .16em; text-transform: uppercase;
  color: var(--ink);
  padding-bottom: 2mm; margin-bottom: 3.5mm;
  border-bottom: 2px solid var(--ink);
  break-after: avoid;
}

.cv-profile { font-size: .87rem; }
.cv-profile em { font-style: normal; font-weight: 700; color: var(--ink); }

/* la data è un'informazione da trovare a colpo d'occhio */
.cv-date {
  font: 600 .68rem/1.4 var(--mono);
  color: var(--ink);
  white-space: nowrap;
}

.cv-job__head {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: .5rem 4mm; flex-wrap: wrap;
}
.cv-job__role { font-size: 1.05rem; }
.cv-job__org {
  font-size: .84rem; font-weight: 600;
  color: var(--mute);
  margin-top: .6mm;
}

/* incarico presso un cliente */
.cv-task {
  margin-top: 4mm;
  padding-left: 5mm;
  border-left: 2px solid var(--rule);
  break-inside: avoid;
}
.cv-task__head {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: .3rem 4mm; flex-wrap: wrap;
}
/* La riga cliente può essere lunga: la lascio restringere e andare a capo
   al proprio interno, così la data resta allineata a destra sulla prima riga
   invece di essere spinta sotto. */
.cv-task__client {
  flex: 1 1 12rem; min-width: 0;
  font-size: .92rem; font-weight: 700; color: var(--ink);
}
.cv-task__label {
  display: block;
  font: 600 .6rem/1.3 var(--mono);
  text-transform: uppercase; letter-spacing: .12em;
  color: var(--mute);
}
.cv-task__summary { font-size: .84rem; margin: 1.6mm 0 2mm; }

.cv-list li {
  position: relative;
  padding-left: 4mm;
  font-size: .84rem;
  margin-bottom: 1mm;
}
.cv-list li::before {
  content: "";
  position: absolute; left: 0; top: .55em;
  width: 1.5mm; height: 1.5mm;
  background: var(--mute);
}
.cv-list strong { color: var(--ink); font-weight: 700; }

.cv-stack {
  margin-top: 2mm;
  font: 400 .7rem/1.5 var(--mono);
  color: var(--mute);
}
.cv-stack__label {
  font-weight: 700; color: var(--ink);
  text-transform: uppercase; letter-spacing: .1em;
  font-size: .6rem;
  margin-right: 1.5mm;
}

/* =========================================================
   Formazione e progetti
   ========================================================= */
.cv-edu, .cv-proj { break-inside: avoid; }
.cv-edu + .cv-edu { margin-top: 4mm; }
.cv-edu__degree, .cv-proj__name { font-size: .92rem; }
.cv-edu__org { font-size: .82rem; font-weight: 600; color: var(--mute); }
.cv-edu__meta { font-size: .84rem; margin-top: 1.2mm; }
.cv-edu__meta strong { color: var(--ink); }

.cv-proj__org { font: 600 .68rem/1.4 var(--mono); color: var(--mute); }
.cv-proj__link {
  margin-top: 1.2mm;
  font: 400 .72rem/1.4 var(--mono);
  color: var(--mute);
}
.cv-proj__link a { text-decoration: none; }
.cv-proj__link a:hover { text-decoration: underline; }

/* =========================================================
   Schermi stretti — la fascia non può stare di fianco,
   si mette in testa al documento
   ========================================================= */
@media screen and (max-width: 52rem) {
  html { font-size: 15px; }
  .sheet {
    grid-template-columns: 1fr;
    min-height: 0;
    margin: 1rem auto;
  }
  .cv-side { padding: 1.75rem 1.25rem 1.5rem; }
  .cv-name { font-size: 2rem; }
  .cv-side__list li, .cv-contacts li { font-size: .85rem; }
  .cv-main { padding: 1.75rem 1.25rem 2rem; }
  .cv-date { white-space: normal; }
}

/* =========================================================
   Stampa — qui il documento è a casa sua
   ========================================================= */
@page { size: A4; margin: 0; }

@media print {
  /* Tutte le misure sono in rem, quindi si riferiscono a <html>: la scala
     di stampa si governa da qui, in un punto solo, e ogni proporzione
     resta quella pensata a schermo. Con questo corpo il curriculum sta
     in una pagina sola. */
  html { font-size: 9.6pt; }

  body { background: #fff; font-size: 1rem; line-height: 1.5; }
  .toolbar { display: none !important; }

  .sheet {
    width: auto; max-width: none;
    min-height: 297mm;
    margin: 0;
    box-shadow: none;
  }

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