/* css/site.css — stili di sezione specifici del sito. Riempito nelle Fasi 2 (.it) e 3 (.tech). */

/* === .it TYPOGRAPHY OVERRIDES ===
   Allineate al mockup approvato (canvas «Referto archiwave.it», artboard «Home — Teatro
   spento»). Il sito era rimasto alla scala tipografica ereditata dal pannello admin:
   occhielli in sans grigio, titoli di sezione a 32px. Nel mockup gli occhielli sono in
   mono terracotta e i titoli a 40px, ed e' quella la resa decisa. */

/* Occhielli: dal sans al MONO. Sul mockup ogni etichetta breve — occhiello di sezione,
   categoria della scheda, etichetta di campo — e' in IBM Plex Mono: e' la voce «tecnica»
   del sistema, e distinguerla dal corpo del testo e' quello che le fa leggere come
   didascalie invece che come titolini. Colore e corpo cambiano per contesto, qui sotto. */
[data-site="it"] .t-label {
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .14em;
}

/* === .it TYPOGRAPHY OVERRIDES === */
/* Il display era in CORSIVO (31/08/2026: tolto). Un serif inclinato su un titolo grande
   e' un effetto, e qui si applicava a ogni pagina: il tondo lascia parlare la lettera.
   Il peso scende a 400 perche' l'EB Garamond a 48px e oltre in 500 impasta le grazie. */
[data-site="it"] .t-display {
  font-weight: 400;
  font-style: normal;
}
[data-site="it"] .t-h1, [data-site="it"] .t-h2 {
  font-weight: 400;
}
/* Titoli di sezione a 40px come nel mockup (erano 32). A 32px il serif non reggeva il
   confronto con l'occhiello sopra e la sezione non aveva una testa: e' la misura che
   separa un titolo da un sottotitolo. */
[data-site="it"] .t-h1 {
  font-size: 40px;
  line-height: 1.12;
  letter-spacing: -0.012em;
}

/* === .it HERO: scena "project-lab" — render + griglia tecnica + pannello vetro === */
[data-site="it"] .hero {
  position: relative;
  min-height: 92vh;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
}
[data-site="it"] .hero-media { position: absolute; inset: 0; }
[data-site="it"] .hero-media img { width: 100%; height: 100%; object-fit: cover; }
/* Velo verticale: l'immagine resta leggibile in alto, il testo poggia sul pieno in basso.
   ⚠️ TARATO PER UNA FOTOGRAFIA QUALSIASI, non per quella di oggi. Dal 31/08/2026 la
   copertina non e' piu' un render notturno fisso: e' il progetto pubblicato piu' recente,
   quindi puo' essere un tetto in cotto in pieno sole come un interno scuro. Il velo deve
   reggere il caso peggiore, non quello che si ha davanti mentre lo si scrive.
   Il primo tentativo era tarato sul render scuro e l'occhiello spariva sul cotto. */
[data-site="it"] .hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg,
    rgba(15, 17, 19, .08) 0%,
    rgba(15, 17, 19, .30) 34%,
    rgba(15, 17, 19, .74) 56%,
    rgba(15, 17, 19, .96) 100%);
}
/* GRIGLIA BLUEPRINT — RIMOSSA il 31/08/2026.
   Era un reticolo che si accendeva sotto il cursore: una scenografia da tavolo tecnico
   sopra un rendering d'archivio, cioe' una misura che non misurava niente.
   Nella prima stesura restava una regola «display: none» e il div in index.php: una
   mezza misura che lasciava js/mouse-tracker.js a registrare mousemove e a scrivere
   --mouse-x/--mouse-y per nessuno. Ora sono spariti insieme il div, lo script e questa
   regola — e con loro la riga in sync-shared.ps1 e in pacchetto-it.sh. */
/* COORDINATE E SCALA agli angoli della copertina — REGOLE RIMOSSE il 31/08/2026
   insieme agli elementi che le portavano. Dicevano «N 41.9028° / E 12.4964°» (il centro
   di Roma, non un cantiere) e «SCALA 1:100 — REV. 04» (la revisione di nessun disegno).
   Nessun file PHP genera piu' .hero-coords ne' .hero-coord, su nessuno dei due siti. */
[data-site="it"] .hero-inner {
  position: relative;
  z-index: 3;
  padding: 0 var(--s5) var(--s8);
  width: 100%;
}
/* Il pannello era un rettangolo di VETRO SFOCATO sopra l'immagine (31/08/2026: tolto).
   Resta la sola riga di regola a sinistra: il testo poggia sulla scena come la didascalia
   di una tavola, invece di galleggiarci sopra dentro un riquadro. Il velo verticale
   di .hero::after basta gia' a tenere leggibile il testo. */
[data-site="it"] .hero-panel {
  max-width: 720px;
  padding: 0 0 0 var(--s5);
  background: none;
  border: none;
  border-left: 2px solid var(--accent);
  border-radius: 0;
}
[data-site="it"] .hero-kicker {
  color: var(--accent);
  letter-spacing: .14em;
  text-transform: uppercase;
  margin: 0;
}
/* Titolo scalabile: sans display importante, non trabocca su mobile */
[data-site="it"] .hero-title {
  margin: var(--s3) 0 0;
  font-size: clamp(34px, 5.4vw, 64px);
  line-height: 1.08;
  color: var(--ink);
}
[data-site="it"] .hero-sub { max-width: 540px; color: var(--ink-soft); margin: var(--s4) 0 var(--s5); }
[data-site="it"] .hero-cta { display: flex; gap: var(--s3); flex-wrap: wrap; }
[data-site="it"] .hero-cta .btn-outline { border-color: var(--ink-faint); }
/* PANNELLO «01 progetto / 02 computo / 03 prototipo» — REGOLE RIMOSSE il 31/08/2026
   insieme all'elemento. La stessa triade numerata compariva due volte nella stessa
   pagina: qui, inventata, e sulle schede dei Servizi, dove i numeri vengono dal
   database. Ne e' rimasta una, quella vera. */
/* Su schermo stretto il testo della copertina risale nella meta' alta dell'immagine, dove
   il rendering e' chiaro: il velo tarato sul desktop non basta piu'. Il pannello di vetro
   copriva questo caso senza che si vedesse; togliendolo, il velo deve farlo da solo. */
@media (max-width: 860px) {
  [data-site="it"] .hero::after {
    background: linear-gradient(180deg,
      rgba(15, 17, 19, .26) 0%,
      rgba(15, 17, 19, .58) 30%,
      rgba(15, 17, 19, .86) 55%,
      rgba(15, 17, 19, .97) 100%);
  }
}
@media (max-width: 640px) {
  /* Il pannello non e' piu' un riquadro con imbottitura su quattro lati ma un testo
     appoggiato a una regola: su mobile si riduce solo lo stacco dalla regola. */
  [data-site="it"] .hero-panel { padding: 0 0 0 var(--s4); }
}

/* === .it PROGETTI === */
[data-site="it"] .portfolio { padding: var(--s8) 0; }
[data-site="it"] .portfolio .section-header { max-width: 640px; margin: 0 0 var(--s6); }
[data-site="it"] .portfolio .section-header .t-h1 { margin: var(--s2) 0 0; color: var(--ink); }
[data-site="it"] .portfolio .section-subtitle { color: var(--ink-soft); margin: var(--s3) 0 0; }

[data-site="it"] .portfolio-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: var(--s5);
}
/* SCHEDA A DIDASCALIA ESTERNA (31/08/2026, allineamento al mockup approvato).
   Prima il testo stava SOPRA la fotografia, dentro un velo scuro che serviva a renderlo
   leggibile. Quel velo era il problema: per far leggere quattro righe bisognava spegnere
   meta' immagine, e le immagini sono la cosa che si e' venuti a vedere.
   Ora la fotografia e' intera e la didascalia sta sotto, sul fondo della pagina — come la
   didascalia di una tavola. Nessun velo da tarare, nessun contrasto da inseguire: il testo
   e' su fondo pieno e si legge sempre, qualunque sia la foto.
   ⚠️ Vale anche per progetti.php: le due pagine condividono queste classi, ed e' voluto. */
[data-site="it"] .portfolio-item {
  display: flex;
  flex-direction: column;
  position: relative;
  background: none;
  border: none;
  border-radius: 0;
  overflow: visible;
}
/* Il sollevamento resta (e' l'unico punto della home dove il movimento serve: dice
   «questa scheda si apre»), ma senza l'alone colorato — su ogni riquadro era il segno
   che l'effetto non era stato scelto, solo applicato.
   ⚠️ Solo su «--link». Quando un progetto non ha slug, index.php genera un <div> invece
   di un <a>: si solleva, l'immagine ingrandisce, ma non si apre niente. Un riquadro che
   reagisce al mouse dichiara di essere cliccabile — e qui sarebbe una bugia. */
/* Con la didascalia fuori dall'immagine, sollevare l'intera scheda muoverebbe anche il
   testo: il movimento resta dentro la cornice della fotografia, che e' la parte che si
   apre. Il bordo si accende, l'immagine avanza appena. */
[data-site="it"] .portfolio-item--link:hover .portfolio-image {
  border-color: color-mix(in srgb, var(--accent) 55%, transparent);
}
[data-site="it"] .portfolio-image {
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  background: var(--surface-alt);
  border: 1px solid var(--rule);
  transition: transform .4s ease, border-color .3s ease;
  /* FILTRO GRIGIO RIMOSSO il 31/08/2026 (era grayscale(.45) brightness(.78)).
     Ricondurre le miniature al tono del sito le uniformava a una texture: sbiadiva
     cioe' l'unica cosa in pagina che un altro non potrebbe avere, e restituiva il colore
     solo a chi ci passava sopra col mouse — su un telefono, mai. */
}
[data-site="it"] .portfolio-item--link:hover .portfolio-image {
  transform: scale(1.04);
}
/* Il blocco di didascalia, ora fuori dall'immagine e su fondo pagina.
   ⚠️ Il gradiente che stava qui e' SPARITO, ed e' il punto di tutta la modifica: non c'e'
   piu' niente da velare, quindi non c'e' piu' un contrasto da rincorrere a ogni foto
   nuova. Le tre tarature fatte nelle ore scorse — miniature, copertina scheda, mobile —
   nascevano tutte dallo stesso vincolo, che qui viene rimosso alla radice. */
[data-site="it"] .portfolio-overlay {
  position: static;
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: var(--s4) 0 0;
  background: none;
}
/* La card che porta a una scheda è un collegamento: deve comportarsi come tale
   (nessuna sottolineatura ereditata, fuoco visibile da tastiera).
   ⚠️ NON «display: block»: la scheda e' una colonna flex (immagine sopra, testo sotto),
   e block la rimetterebbe in flusso normale. */
[data-site="it"] .portfolio-item--link { text-decoration: none; color: inherit; }
[data-site="it"] .portfolio-item--link:focus-visible { outline: none; box-shadow: var(--ring); }

/* «Vedi scheda ↗» compare SOLO sulle card che una scheda ce l'hanno davvero.
   Per anni è stato scritto su tutte, mentre la pagina di dettaglio non esisteva:
   un invito a cliccare dove non c'era nulla da aprire.
   ⚠️ Ora e' SEMPRE VISIBILE, come nel mockup. Prima appariva al passaggio del mouse:
   su un telefono non appariva mai, e l'unico segno che la scheda si apre restava invisibile
   proprio a chi non ha un mouse. In terracotta solo quando ci si passa sopra. */
[data-site="it"] .portfolio-item--link .portfolio-overlay::after {
  content: "Vedi scheda ↗";
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: .08em;
  color: var(--ink-faint);
  margin-top: var(--s2);
  transition: color .3s ease;
}
[data-site="it"] .portfolio-item--link:hover .portfolio-overlay::after,
[data-site="it"] .portfolio-item--link:focus-visible .portfolio-overlay::after {
  opacity: 1;
  transform: translateY(0);
}
/* TINTA D'ACCENTO IN HOVER — RIMOSSA il 31/08/2026. Lavava di colore l'intera fotografia
   al passaggio del mouse: con le miniature a colori pieni sarebbe un danno, non un effetto. */
/* Tipografia della didascalia, dal mockup: categoria e anno in mono terracotta, titolo nel
   serif, descrizione nel grigio del corpo. Il titolo NON e' piu' sopra una fotografia,
   quindi non ha bisogno di essere grande per farsi valere: 23px bastano. */
[data-site="it"] .portfolio-overlay .t-label { color: var(--accent); font-size: 11px; letter-spacing: .12em; }
[data-site="it"] .portfolio-overlay .t-h2 {
  margin: 0;
  color: var(--ink);
  font-size: 23px;
  line-height: 1.2;
}
[data-site="it"] .portfolio-overlay .t-meta { margin: 0; font-size: 14px; line-height: 1.55; color: var(--ink-soft); }
[data-site="it"] .portfolio-cta { display: flex; justify-content: center; margin-top: var(--s7); }

/* ⚠️ Su mobile non c'e' piu' NIENTE da correggere qui, e la regola che c'era e' sparita.
   Serviva a infittire il velo perche' il testo, sovrapposto a una card piu' bassa, finiva
   nell'area chiara della fotografia. Con la didascalia fuori dall'immagine il problema non
   esiste piu' a nessuna larghezza: e' il vantaggio vero di questa struttura, non l'estetica. */

/* === .it STUDIO === */
[data-site="it"] .studio { padding: var(--s8) 0; background: var(--surface-alt); }
/* Editoriale a due colonne: testo + immagine, collassa a 1 colonna su mobile */
[data-site="it"] .studio-content {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--s8);
  align-items: center;
}
[data-site="it"] .studio-text .t-h1 { margin: var(--s2) 0 var(--s5); color: var(--ink); }
[data-site="it"] .studio-text .t-body { color: var(--ink-soft); margin: 0 0 var(--s4); }
[data-site="it"] .studio-text .t-body:last-child { margin-bottom: 0; }
[data-site="it"] .studio-card {
  position: relative;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  border-radius: var(--r4);
  background: var(--surface);
}
[data-site="it"] .studio-image { width: 100%; height: 100%; object-fit: cover; }
/* Overlay ancorato in basso, coerente con le card portfolio */
[data-site="it"] .studio-overlay {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: flex-end;
  padding: var(--s5);
  background: linear-gradient(180deg, transparent 50%, rgba(20, 18, 16, .9) 100%);
}
/* Didascalia come nel sito 2025: bianca e in tondo, non l'etichetta tecnica maiuscola.
   Sull'immagine il verde d'accento competeva con le luci del render, e il maiuscoletto da
   10px si leggeva come una targhetta invece che come una frase. */
[data-site="it"] .studio-overlay .t-label {
  color: var(--ink);
  font-size: 17px;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
}
@media (max-width: 860px) {
  [data-site="it"] .studio-content { grid-template-columns: 1fr; gap: var(--s6); }
  [data-site="it"] .studio-visual { order: -1; }
}

/* === .it SERVIZI === */
[data-site="it"] .services { padding: var(--s8) 0; }
[data-site="it"] .services .section-header { max-width: 640px; margin: 0 0 var(--s6); }
[data-site="it"] .services .section-header .t-h1 { margin: var(--s2) 0 0; color: var(--ink); }
[data-site="it"] .services .section-subtitle { color: var(--ink-soft); margin: var(--s3) 0 0; }

/* Pipeline di processo: griglia di step numerati, connessi da una linea tecnica superiore */
[data-site="it"] .pipeline-grid.services-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: var(--s5);
  position: relative;
}
/* Da PANNELLO a COLONNA (31/08/2026). Il riquadro aveva fondo proprio, quattro bordi,
   angoli tondi, ombra interna piu' ombra esterna, e in hover si sollevava dentro un alone
   colorato: cinque effetti per dire una cosa sola. Resta una riga sopra il testo — la
   stessa che divide le colonne di una tavola — e il colore arriva solo quando serve. */
[data-site="it"] .service-card {
  position: relative;
  padding: var(--s5) 0 0;
  background: none;
  border: none;
  border-top: 1px solid color-mix(in srgb, var(--ink-soft) 22%, transparent);
  border-radius: 0;
  box-shadow: none;
  transition: border-top-color .3s ease;
}
[data-site="it"] .service-card:hover {
  border-top-color: var(--accent);
}

/* L'immagine del servizio, quando il pannello ne ha scelta una.
   Nessun bordo, nessuna ombra, nessun angolo arrotondato: la scheda .it e' una voce
   numerata, non un riquadro, e un'immagine incorniciata rimetterebbe la scatola che questa
   sezione ha tolto. `aspect-ratio` fissa lo spazio prima che l'immagine arrivi, cosi' il
   testo sotto non salta a caricamento avvenuto. */
[data-site="it"] .service-image {
  display: block;
  width: 100%;
  max-width: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  margin-bottom: var(--s3);
  background: color-mix(in srgb, var(--ink-soft) 8%, transparent);
}

/* Il numero di passo prende l'accento: e' il solo segno colorato della scheda, e cosi'
   la colonna si legge come una voce numerata invece che come un riquadro decorato. */
[data-site="it"] .service-step {
  font-size: 12px;
  letter-spacing: .12em;
  color: var(--accent);
  margin-bottom: var(--s3);
}
/* L'icona era un riquadro da 44px prima di ogni titolo. Ridotta al segno che serve:
   nella colonna il titolo deve arrivare per primo. */
[data-site="it"] .service-icon {
  width: auto;
  height: auto;
  display: flex;
  align-items: center;
  margin-bottom: var(--s3);
  color: var(--accent);
  font-size: 16px;
}
[data-site="it"] .service-icon svg { width: 18px; height: 18px; }
/* Titolo nel serif del sito: nella colonna senza riquadro e' lui a fare la gerarchia. */
[data-site="it"] .service-title {
  margin: 0 0 var(--s3);
  color: var(--ink);
  font-family: var(--font-display);
  font-size: 25px;
  font-weight: 400;
  line-height: 1.2;
}
[data-site="it"] .service-description { color: var(--ink-soft); }
[data-site="it"] .service-description p:last-child { margin-bottom: 0; }
[data-site="it"] .service-features {
  list-style: none;
  margin: var(--s4) 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--s2);
}
[data-site="it"] .service-features li {
  font-family: var(--font-sans);
  font-size: 13px;
  color: var(--ink-muted);
  padding-left: var(--s4);
  position: relative;
}
[data-site="it"] .service-features li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 8px;
  width: 6px;
  height: 1px;
  background: var(--accent);
}
[data-site="it"] .service-link {
  display: inline-block;
  margin-top: var(--s5);
  font-family: var(--font-sans);
  font-size: 14px;
  font-weight: 500;
  color: var(--accent);
}
/* Badge "In sviluppo": stato neutro, NON usa l'accento */
[data-site="it"] .service-link.disabled { color: var(--ink-faint); cursor: default; }

/* === .it CONTATTI === */
[data-site="it"] .contact { padding: var(--s8) 0; background: var(--surface-alt); }
/* Editoriale a due colonne: info a sinistra, form a destra; collassa su mobile */
[data-site="it"] .contact-content {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--s8);
  align-items: start;
}
[data-site="it"] .contact-info .t-h1 { margin: var(--s2) 0 var(--s4); color: var(--ink); }
[data-site="it"] .contact-description { color: var(--ink-soft); margin: 0 0 var(--s5); }
[data-site="it"] .contact-methods { display: flex; flex-direction: column; gap: var(--s3); }
[data-site="it"] .contact-method {
  display: inline-flex;
  align-items: center;
  gap: var(--s2);
  color: var(--accent);
}
[data-site="it"] .contact-method svg { flex-shrink: 0; }

/* Form: pannello di intake tecnico compatto, non brochure — righe accoppiate + superficie "panel" */
/* Il campo-esca contro i programmi che compilano moduli automaticamente.
   Si porta FUORI DALLO SCHERMO invece di usare display:none, e non e' un dettaglio: molti di
   quei programmi saltano i campi dichiarati invisibili, e un'esca che il bersaglio evita non
   serve a niente. Cosi' invece il campo esiste, viene letto, viene compilato — e il backend
   sa che chi ha compilato non stava guardando la pagina.
   ⚠️ Non si usa l'attributo [hidden]: in questo stesso progetto si e' gia' visto che una
   regola con display:flex lo scavalca (agosto 2026). Qui il posizionamento non dipende da
   nessuna cascata.
   Senza selettore [data-site]: il campo non deve mai comparire, su nessuno dei due siti. */
.esca {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

[data-site="it"] .contact-form { display: flex; flex-direction: column; gap: var(--s4); }
[data-site="it"] .contact-form .form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--s4);
}
[data-site="it"] .contact-form .form-group { display: flex; flex-direction: column; gap: var(--s2); }
[data-site="it"] .contact-form label { color: var(--ink-faint); }
[data-site="it"] .contact-form input,
[data-site="it"] .contact-form select,
[data-site="it"] .contact-form textarea {
  width: 100%;
  padding: var(--s3) var(--s4);
  background: var(--surface-panel);
  border: 1px solid var(--rule);
  border-radius: var(--r1);
  color: var(--ink);
  font-family: var(--font-sans);
  font-size: 14px;
  transition: border-color .15s ease, box-shadow .15s ease;
}
[data-site="it"] .contact-form textarea { resize: vertical; min-height: 100px; }
[data-site="it"] .contact-form input::placeholder,
[data-site="it"] .contact-form textarea::placeholder { color: var(--ink-faint); }
/* Focus editoriale: bordo + glow terracotta/cyan (--accent), nessun outline blu di default */
[data-site="it"] .contact-form input:focus,
[data-site="it"] .contact-form select:focus,
[data-site="it"] .contact-form textarea:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);
}
[data-site="it"] .contact-form select option[disabled] { color: var(--ink-faint); }
[data-site="it"] .contact-form .btn-primary { align-self: flex-start; }

@media (max-width: 560px) {
  [data-site="it"] .contact-form .form-row { grid-template-columns: 1fr; }
}

@media (max-width: 860px) {
  [data-site="it"] .contact-content { grid-template-columns: 1fr; gap: var(--s6); }
}

/* === .tech HERO === */
/* Niente foto full-bleed: sfondo a gradiente scuro "da laboratorio" con griglia mono sottile */
[data-site="tech"] .hero {
  position: relative;
  min-height: 78vh;
  display: flex;
  align-items: center;
  overflow: hidden;
  background:
    radial-gradient(ellipse 60% 50% at 85% 0%, color-mix(in srgb, var(--accent) 16%, transparent) 0%, transparent 60%),
    linear-gradient(160deg, var(--surface-alt) 0%, #0d0d0d 100%);
}
/* Griglia tecnica in filigrana, puro dettaglio "laboratorio" */
[data-site="tech"] .hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(color-mix(in srgb, var(--ink) 5%, transparent) 1px, transparent 1px),
    linear-gradient(90deg, color-mix(in srgb, var(--ink) 5%, transparent) 1px, transparent 1px);
  background-size: 40px 40px;
  mask-image: linear-gradient(180deg, transparent 0%, #000 30%, #000 70%, transparent 100%);
  pointer-events: none;
}
[data-site="tech"] .hero-inner {
  position: relative;
  z-index: 1;
  padding: var(--s8) var(--s5);
  width: 100%;
}
/* Il badge «.hero-version» e' stato rimosso il 05/09/2026 insieme al nodo che lo portava
   (vedi tech/index.php): regole senza elemento sono codice morto che il prossimo lettore
   scambia per superficie viva. */
[data-site="tech"] .hero-inner .t-label { color: var(--accent); }
[data-site="tech"] .hero-inner .t-display {
  margin: var(--s3) 0 0;
  font-size: clamp(40px, 7vw, 88px);
  color: var(--ink);
}
[data-site="tech"] .hero-sub { max-width: 540px; color: var(--ink-soft); margin: var(--s4) 0 var(--s5); }
[data-site="tech"] .hero-cta { display: flex; gap: var(--s3); flex-wrap: wrap; }
[data-site="tech"] .hero-cta .btn-outline { border-color: var(--ink-faint); }

/* === .tech LAB DASHBOARD (Task 5) === */
/* Home .tech: hero a due colonne, copy + console di stato. Sostituisce l'hero singolo brochure. */
[data-site="tech"] .tech-lab-hero { min-height: 0; padding: var(--s8) 0; align-items: stretch; }
[data-site="tech"] .tech-dashboard {
  display: grid;
  grid-template-columns: minmax(0, 1.1fr) minmax(280px, .9fr);
  gap: var(--s7);
  align-items: center;
  padding: 0;
}
[data-site="tech"] .tech-hero-copy .hero-cta { margin-top: var(--s2); }

/* Console: pannello "da strumento" — superficie rilevata, righe di stato, moduli.
   Riusabile in altre pagine .tech dove serva mostrare uno stato sintetico. */
.lab-console {
  display: flex;
  flex-direction: column;
  gap: var(--s4);
  padding: var(--s5);
  background: var(--surface-panel);
  border: 1px solid var(--rule);
  border-radius: var(--r2);
  box-shadow: 
    inset 0 1px 0 rgba(255, 255, 255, 0.045),
    var(--shadow-card);
}
.lab-console-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-bottom: var(--s4);
  border-bottom: 1px solid var(--rule);
  color: var(--ink-muted);
}
.lab-console-sublabel { margin: var(--s2) 0 0; }

/* Riga console: una entità monitorata (prodotto, servizio) con nome/dominio a sinistra, versione+stato a destra */
.console-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s4);
  padding: var(--s3) 0;
  border-bottom: 1px solid var(--rule);
}
.console-row:last-of-type { border-bottom: none; }
.console-row-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.console-row-name { color: var(--ink); }
.console-row-domain { color: var(--ink-muted); }
.console-row-meta { display: flex; align-items: center; gap: var(--s3); flex-shrink: 0; }

/* Status pill: indicatore di stato riusabile (online/attivo = --ok, in sviluppo/beta = --accent-3) */
.status-pill {
  display: inline-flex;
  align-items: center;
  gap: var(--s2);
  font-family: var(--font-sans);
  font-size: 12px;
  font-weight: 500;
  color: var(--ink-soft);
  white-space: nowrap;
}
.status-pill-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ink-muted);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--ink-muted) 20%, transparent);
}
.status-pill--ok .status-pill-dot {
  background: var(--ok);
  box-shadow: 
    0 0 8px var(--ok), 
    0 0 0 3px color-mix(in srgb, var(--ok) 25%, transparent);
  animation: status-pulse-ok 2.4s ease-in-out infinite;
}
.status-pill--active .status-pill-dot {
  background: var(--accent);
  box-shadow: 
    0 0 8px var(--accent), 
    0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent);
  animation: status-pulse-accent 2.4s ease-in-out infinite;
}
.status-pill--beta .status-pill-dot {
  background: var(--accent-3);
  box-shadow: 
    0 0 8px var(--accent-3), 
    0 0 0 3px color-mix(in srgb, var(--accent-3) 25%, transparent);
  animation: status-pulse-beta 2.4s ease-in-out infinite;
}

@keyframes status-pulse-ok {
  0%, 100% {
    transform: scale(1);
    box-shadow: 0 0 6px var(--ok), 0 0 0 2px color-mix(in srgb, var(--ok) 30%, transparent);
  }
  50% {
    transform: scale(1.22);
    box-shadow: 0 0 12px var(--ok), 0 0 0 4px color-mix(in srgb, var(--ok) 15%, transparent);
  }
}
@keyframes status-pulse-accent {
  0%, 100% {
    transform: scale(1);
    box-shadow: 0 0 6px var(--accent), 0 0 0 2px color-mix(in srgb, var(--accent) 30%, transparent);
  }
  50% {
    transform: scale(1.22);
    box-shadow: 0 0 12px var(--accent), 0 0 0 4px color-mix(in srgb, var(--accent) 15%, transparent);
  }
}
@keyframes status-pulse-beta {
  0%, 100% {
    transform: scale(1);
    box-shadow: 0 0 6px var(--accent-3), 0 0 0 2px color-mix(in srgb, var(--accent-3) 30%, transparent);
  }
  50% {
    transform: scale(1.22);
    box-shadow: 0 0 12px var(--accent-3), 0 0 0 4px color-mix(in srgb, var(--accent-3) 15%, transparent);
  }
}


/* Metric chip: badge mono per versioni/build/metriche — riusabile ovunque serva un valore tecnico compatto */
.metric-chip {
  display: inline-block;
  padding: var(--s1) var(--s3);
  font-family: var(--font-mono);
  font-size: 12px;
  color: var(--accent);
  border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
  border-radius: var(--r1);
  background: color-mix(in srgb, var(--accent) 8%, transparent);
}

/* Module list: elenco compatto di moduli/funzioni attive, stile terminale */
.module-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--s2); }
.module-list li {
  font-family: var(--font-mono);
  font-size: 13px;
  color: var(--ink-soft);
  padding-left: var(--s4);
  position: relative;
}
.module-list li::before { content: "›"; position: absolute; left: 0; color: var(--accent); }

/* === HOME .tech — sezioni "prodotti live" e "ricerca attiva" ===
   Schede "anteprima" ricche, stessa famiglia visiva delle solution-card/research-card:
   superficie panel staccata dal fondo (non piu' surface-alt quasi invisibile), corpo denso
   (dominio + descrizione + moduli/output) e piede stato/azione. Riequilibra le fasce che
   prima restavano quasi vuote e usa tutta la larghezza con 2 colonne piene. */
[data-site="tech"] .tech-strip {
  position: relative;
  padding: var(--s6) 0;              /* ridotto da s7: meno vuoto verticale tra le fasce */
  border-top: none;
}
[data-site="tech"] .tech-strip::before {
  content: "";
  position: absolute;
  top: 0;
  left: var(--s5);
  right: var(--s5);
  height: 4px;
  background: repeating-linear-gradient(
    90deg,
    var(--rule) 0px,
    var(--rule) 1px,
    transparent 1px,
    transparent 10px
  );
  opacity: 0.6;
}
[data-site="tech"] .tech-strip-label { margin: 0 0 var(--s4); }

/* Due colonne piene: le card ricche riempiono la larghezza invece di stirarsi vuote.
   `.products-strip-grid` e' uscita il 05/09/2026 con la striscia «Prodotti live» della
   home, che ripeteva i prodotti gia' elencati dalla console di stato. */
[data-site="tech"] .research-strip-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--s5);
}

/* Scheda anteprima: superficie panel (si stacca dal fondo), corpo sopra + piede sotto.
   box-shadow / lift all'hover ereditati dalla regola pannelli condivisa piu' in basso. */
[data-site="tech"] .strip-card {
  display: flex;
  flex-direction: column;
  gap: var(--s4);
  padding: var(--s6) var(--s5);
  background: var(--surface-panel);
  border: 1px solid var(--rule);
  border-radius: var(--r2);
}
[data-site="tech"] .strip-card:hover { border-color: var(--accent); }
[data-site="tech"] .strip-card-main { display: flex; flex-direction: column; gap: var(--s3); }
/* flex-wrap di sicurezza: nomi lunghi ("Intelligenza Artificiale") + chip/pill su card strette a 390px */
[data-site="tech"] .strip-card-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--s2) var(--s3); }
[data-site="tech"] .strip-card-name { margin: 0; font-family: var(--font-display); font-size: 22px; line-height: 1.15; color: var(--ink); }
[data-site="tech"] .strip-card-domain { margin: 0; color: var(--ink-muted); }
[data-site="tech"] .strip-card-desc { margin: 0; color: var(--ink-soft); }
[data-site="tech"] .strip-card-modules { margin-top: var(--s1); }
/* Piede: stato a sx + link a dx (prodotti) oppure solo link a dx (ricerca), ancorato in
   basso (margin-top:auto -> piedi allineati tra card affiancate) e separato da riga. */
[data-site="tech"] .strip-card-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--s3);
  margin-top: auto;
  padding-top: var(--s4);
  border-top: 1px solid var(--rule);
}
[data-site="tech"] .strip-card-foot--end { justify-content: flex-end; }
[data-site="tech"] .strip-card-link { color: var(--accent); text-decoration: none; white-space: nowrap; }
[data-site="tech"] .strip-card-link:hover { text-decoration: underline; }

/* CTA finale home .tech: pannello coerente con le schede (superficie panel staccata dal
   fondo), copy a sinistra + azioni a destra su desktop; impilato e allineato a sinistra
   sotto i 760px. Riusa il tick tecnico in alto della .tech-strip. */
[data-site="tech"] .tech-home-cta-panel {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--s5) var(--s6);
  padding: var(--s7) var(--s6);
  background: var(--surface-panel);
  border: 1px solid var(--rule);
  border-radius: var(--r2);
  box-shadow: var(--shadow-panel);
}
[data-site="tech"] .tech-home-cta-copy { max-width: 560px; }
[data-site="tech"] .tech-home-cta-title { margin: 0; }
[data-site="tech"] .tech-home-cta-desc { margin: var(--s3) 0 0; color: var(--ink-soft); }
[data-site="tech"] .tech-home-cta-actions { flex-wrap: wrap; }
@media (max-width: 760px) {
  [data-site="tech"] .tech-home-cta-panel { flex-direction: column; align-items: flex-start; }
}

@media (max-width: 860px) {
  [data-site="tech"] .tech-dashboard { grid-template-columns: 1fr; gap: var(--s6); }
  /* La console non deve restare larga quanto la colonna 1.1fr del desktop: si allinea al container */
  .lab-console { max-width: 100%; }
}

/* ⚠️ QUI C'ERA un blocco `@media (max-width: 420px)` per .console-row — RIMOSSO il
   07/09/2026 perché faceva uscire lo stato dei prodotti fuori dallo schermo del telefono.

   Diceva: `.console-row { flex-wrap: wrap }` e `.console-row-meta { flex-basis: 100% }`.
   Era scritto per il layout PRECEDENTE della riga console — nome a sinistra, versione e
   stato a destra, tutto IN RIGA — dove significava «sotto i 400px manda le metriche a capo,
   su una seconda riga». Intento giusto, e per quel layout funzionava.

   Poi il tema «Officina Digital» ha ridisegnato la stessa classe come una SCHEDA IN COLONNA
   (`#aw-digital .console-row { flex-direction: column }`, più sotto in questo file). Quelle
   due proprietà non hanno lo stesso significato nelle due direzioni: in colonna «andare a
   capo» vuol dire aprire una COLONNA A FIANCO, non una riga sotto. Lo stato finiva quindi
   accanto alla scheda, fuori dallo schermo. Misurato il 07/09/2026 con una sonda a 345px di
   viewport: documento largo 540px, cioè 195px di scorrimento orizzontale.

   🔑 La lezione, che vale oltre questo caso: il tema .tech adatta il layout con CONTAINER
   QUERY (`@container`), questo blocco era una MEDIA QUERY di viewport. Due sistemi di soglie
   che non si conoscono, sullo stesso selettore. La scheda si stringe già da sola grazie alle
   container query, quindi qui non serve nulla: si toglie la regola, non se ne aggiunge una
   che la contrasti.

   Presidiato da backend/tests/ConsoleProdottiMobileTest.php. */

/* Kicker mono riusabile per titoli di pagina .tech (Soluzioni, Ricerca...): stesso trattamento cromatico del t-label esistente, ma mono */
[data-site="tech"] .page-kicker {
  margin: 0;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--accent);
}

/* ⚠️ QUI VIVEVA IL BLOCCO « .tech SOLUZIONI » — rimosso il 05/09/2026 con la pagina che
   lo usava. `soluzioni.php` e `prodotti.php` erano la stessa vetrina dello stesso catalogo:
   sono confluite in `prodotti.php`, e queste tredici classi (.solutions*, .solution-card*,
   .solution-name/domain/desc/modules) non avevano piu' un solo elemento a cui applicarsi.
   Le ombre e il sollevamento all'hover NON si sono persi: .catalogo-card e' gia' dentro il
   blocco condiviso piu' sotto, che e' quello che governa davvero quel linguaggio — le
   regole qui erano le stesse proprieta' scritte due volte, e perdenti. */

/* === .tech RICERCA — experiment panels (Task 7) === */
[data-site="tech"] .research { padding: var(--s8) 0; }
[data-site="tech"] .research-title { margin: var(--s2) 0 0; font-size: clamp(32px, 5vw, 56px); color: var(--ink); }
[data-site="tech"] .research-sub { max-width: 640px; color: var(--ink-soft); margin: var(--s4) 0 0; }

[data-site="tech"] .research-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: var(--s5);
  margin-top: var(--s7);
}
/* Pannello esperimento: stessa superficie delle solution-card, coerenza visiva "laboratorio" */
[data-site="tech"] .research-card {
  display: flex;
  flex-direction: column;
  padding: var(--s6) var(--s5);
  background: var(--surface-panel);
  border: 1px solid var(--rule);
  border-radius: var(--r2);
  box-shadow: 
    inset 0 1px 0 rgba(255, 255, 255, 0.045),
    0 10px 30px -14px rgba(0, 0, 0, 0.70);
  transition: border-color 0.3s ease, box-shadow 0.3s ease;
}
[data-site="tech"] .research-card:hover {
  border-color: var(--accent);
  box-shadow: 
    inset 0 1px 0 rgba(255, 255, 255, 0.075),
    0 0 20px -5px color-mix(in srgb, var(--accent) 30%, transparent),
    0 20px 46px -18px rgba(0, 0, 0, 0.78);
}
[data-site="tech"] .research-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s3);
  margin-bottom: var(--s4);
}
[data-site="tech"] .research-name { margin: 0 0 var(--s2); color: var(--ink); }
/* Dominio applicato: riga mono discreta tra titolo e descrizione, coerente con .solution-domain */
[data-site="tech"] .research-domain { color: var(--ink-muted); margin: 0 0 var(--s3); }
[data-site="tech"] .research-desc { color: var(--ink-soft); margin: 0 0 var(--s4); }
[data-site="tech"] .research-outputs { margin: 0 0 var(--s4); }
/* Relazione con l'architettura: chiusura del pannello, separata da riga come i piedi pannello prodotto */
[data-site="tech"] .research-relation {
  margin: auto 0 0;
  padding-top: var(--s4);
  border-top: 1px solid var(--rule);
  color: var(--ink-muted);
}

/* === .tech INNOVAZIONE — lab roadmap (Task 7) === */
[data-site="tech"] .innovation { padding: var(--s8) 0; }
[data-site="tech"] .innovation-title { margin: var(--s2) 0 0; font-size: clamp(32px, 5vw, 56px); color: var(--ink); }
[data-site="tech"] .innovation-sub { max-width: 640px; color: var(--ink-soft); margin: var(--s4) 0 0; }

/* Sezione pipeline: riusa .innovation-process esistente (5 step numerati) come stadi della roadmap */
[data-site="tech"] .innovation-process-section { padding: var(--s8) 0; border-top: 1px solid var(--rule); }
[data-site="tech"] .innovation-process-title { margin: var(--s2) 0 0; color: var(--ink); }
[data-site="tech"] .innovation-process-sub { max-width: 640px; color: var(--ink-soft); margin: var(--s3) 0 0; }
[data-site="tech"] .innovation-process {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: var(--s5);
  margin: var(--s6) 0 0;
  padding: 0;
  list-style: none;
}
[data-site="tech"] .innovation-process-step { text-align: left; }
[data-site="tech"] .innovation-process-num { display: block; color: var(--accent); font-size: 24px; margin-bottom: var(--s2); }
[data-site="tech"] .innovation-process-name { margin: 0 0 var(--s2); color: var(--ink); }
[data-site="tech"] .innovation-process-desc { color: var(--ink-soft); margin: 0; }

/* Capacità validate: stadio 05 della pipeline, stessa griglia showcase già esistente */
[data-site="tech"] .innovation-showcase-section { padding: var(--s8) 0; border-top: 1px solid var(--rule); }
[data-site="tech"] .innovation-showcase-title { margin: var(--s2) 0 0; color: var(--ink); }

[data-site="tech"] .innovation-showcase {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: var(--s4);
  margin-top: var(--s6);
}
[data-site="tech"] .innovation-showcase-item {
  background: var(--surface-alt);
  border: 1px solid var(--rule);
  border-radius: var(--r2);
  padding: var(--s5);
}
[data-site="tech"] .innovation-showcase-item--featured { border-color: var(--accent); }
[data-site="tech"] .innovation-showcase-head { margin-bottom: var(--s3); }
[data-site="tech"] .innovation-showcase-name { margin: 0 0 var(--s3); color: var(--ink); }
[data-site="tech"] .innovation-showcase-desc { color: var(--ink-soft); margin: 0 0 var(--s4); }

/* Prossimi esperimenti: stadi 01-03 della pipeline, griglia compatta a 3 colonne */
[data-site="tech"] .innovation-next-section { padding: var(--s8) 0; border-top: 1px solid var(--rule); }
[data-site="tech"] .innovation-next-title { margin: var(--s2) 0 0; color: var(--ink); }
[data-site="tech"] .innovation-next-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: var(--s4);
  margin-top: var(--s6);
}
[data-site="tech"] .innovation-next-item {
  display: flex;
  flex-direction: column;
  gap: var(--s3);
  padding: var(--s5);
  background: var(--surface-panel);
  border: 1px solid var(--rule);
  border-radius: var(--r2);
}
[data-site="tech"] .innovation-next-item .status-pill { align-self: flex-start; }
[data-site="tech"] .innovation-next-name { margin: 0; color: var(--ink); }
[data-site="tech"] .innovation-next-desc { color: var(--ink-soft); margin: 0; }
[data-site="tech"] .innovation-next-link { margin: var(--s6) 0 0; }
[data-site="tech"] .innovation-next-link a { color: var(--accent); font-family: var(--font-sans); font-weight: 500; }
[data-site="tech"] .innovation-next-link a:hover { text-decoration: underline; }

[data-site="tech"] .innovation-cta-section { padding: var(--s8) 0; border-top: 1px solid var(--rule); }
[data-site="tech"] .innovation-cta-inner { text-align: center; }
[data-site="tech"] .innovation-cta-desc { max-width: 560px; margin: var(--s3) auto var(--s5); color: var(--ink-soft); }
[data-site="tech"] .innovation-cta-actions { display: flex; gap: var(--s3); justify-content: center; flex-wrap: wrap; }

/* === .tech CONTATTI === */
[data-site="tech"] .contact { padding: var(--s8) 0; background: var(--surface-alt); }
/* Editoriale a due colonne: metodi di contatto a sinistra, form a destra; collassa su mobile */
[data-site="tech"] .contact-content {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--s8);
  align-items: start;
}
[data-site="tech"] .contact-info .t-h1 { margin: var(--s2) 0 var(--s4); color: var(--ink); }
[data-site="tech"] .contact-description { color: var(--ink-soft); margin: 0 0 var(--s5); }
[data-site="tech"] .contact-methods { display: flex; flex-direction: column; gap: var(--s4); }
[data-site="tech"] .contact-method {
  display: flex;
  align-items: flex-start;
  gap: var(--s3);
  padding: var(--s4);
  background: var(--surface);
  border: 1px solid var(--rule);
  border-radius: var(--r1);
  color: var(--ink);
  transition: border-color .2s ease;
}
[data-site="tech"] .contact-method:hover { border-color: var(--accent); }
[data-site="tech"] .contact-method svg { flex-shrink: 0; color: var(--accent); margin-top: 2px; }
[data-site="tech"] .contact-method-text { display: flex; flex-direction: column; gap: var(--s1); }
[data-site="tech"] .contact-method-title { color: var(--ink); }
[data-site="tech"] .contact-method-desc { color: var(--ink-muted); }

/* Form: pannello di intake tecnico compatto, non brochure — righe accoppiate + superficie "panel" */
[data-site="tech"] .contact-form { display: flex; flex-direction: column; gap: var(--s4); }
[data-site="tech"] .contact-form .form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--s4);
}
[data-site="tech"] .contact-form .form-group { display: flex; flex-direction: column; gap: var(--s2); }
[data-site="tech"] .contact-form label { color: var(--ink-faint); }
[data-site="tech"] .contact-form input,
[data-site="tech"] .contact-form select,
[data-site="tech"] .contact-form textarea {
  width: 100%;
  padding: var(--s3) var(--s4);
  background: var(--surface-panel);
  border: 1px solid var(--rule);
  border-radius: var(--r1);
  color: var(--ink);
  font-family: var(--font-sans);
  font-size: 14px;
  transition: border-color .15s ease, box-shadow .15s ease;
}
[data-site="tech"] .contact-form textarea { resize: vertical; min-height: 100px; }
[data-site="tech"] .contact-form input::placeholder,
[data-site="tech"] .contact-form textarea::placeholder { color: var(--ink-faint); }
/* Focus tecnologico: bordo + glow verde (--accent), nessun outline blu di default */
[data-site="tech"] .contact-form input:focus,
[data-site="tech"] .contact-form select:focus,
[data-site="tech"] .contact-form textarea:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);
}
[data-site="tech"] .contact-form select option[disabled] { color: var(--ink-faint); }
[data-site="tech"] .contact-form .btn-primary { align-self: flex-start; }

@media (max-width: 860px) {
  [data-site="tech"] .contact-content { grid-template-columns: 1fr; gap: var(--s6); }
}

@media (max-width: 560px) {
  [data-site="tech"] .contact-form .form-row { grid-template-columns: 1fr; }
}

/* ==========================================================================
   Task 9 — Responsive pass: collasso esplicito a 1 colonna, breakpoint 760px
   Le grid "card" sotto usano auto-fill/auto-fit con minmax(260–320px, 1fr):
   tra ~760px e il loro minimo il browser terrebbe 2 colonne strette (compromesso
   scomodo). Forziamo 1fr per un collasso netto, coerente col resto del sistema
   (nav/dashboard/studio/contact già collassano a 860px). Pannelli/console restano
   ancorati alla larghezza del contenitore (niente overflow orizzontale).
   ========================================================================== */
@media (max-width: 760px) {
  .tech-dashboard,
  [data-site="it"] .studio-content,
  [data-site="tech"] .contact-content {
    grid-template-columns: 1fr;
  }

  .lab-console {
    max-width: 100%;
  }

  /* .it: pipeline servizi e griglia portfolio — stessa logica card-grid */
  [data-site="it"] .pipeline-grid.services-grid,
  [data-site="it"] .portfolio-grid,
  /* .tech: pannelli prodotto/ricerca e strisce home */
  [data-site="tech"] .catalogo-grid,
  [data-site="tech"] .research-grid,
  [data-site="tech"] .research-strip-grid,
  /* .tech: roadmap innovazione (pipeline, capacità validate, prossimi esperimenti) */
  [data-site="tech"] .innovation-process,
  [data-site="tech"] .innovation-showcase,
  [data-site="tech"] .innovation-next-grid {
    grid-template-columns: 1fr;
  }
}

/* ==========================================================================
   Design elevation pass (Opus) — profondità dei pannelli, lift all'hover,
   ingresso scaglionato dell'hero, dettagli tecnici sui kicker.
   Additivo, stessa direzione "AI Lab": accenti = stato, non decorazione.
   ========================================================================== */

/* Profondità coerente su tutte le famiglie di pannello (luce dall'alto + drop morbido) */
/* ⚠️ 31/08/2026 — Le voci «[data-site="it"]» sono state TOLTE da questo blocco, non
   neutralizzate piu' sotto. Il blocco ripeteva ombre e sollevamenti gia' decisi nelle
   regole di sezione (righe ~139-290): la stessa proprieta' scritta due volte, e chi
   cambiava la prima non vedeva effetto perche' vinceva la seconda. E' esattamente il
   difetto che aveva prodotto «tutto ha lo stesso effetto».
   Adesso ogni regola .it vive in UN SOLO punto: la sua sezione. Questo blocco resta,
   ma governa solo .tech e .lab-console, dove quel linguaggio e' voluto. */
[data-site="tech"] .catalogo-card,
[data-site="tech"] .research-card,
[data-site="tech"] .strip-card,
[data-site="tech"] .innovation-showcase-item,
[data-site="tech"] .innovation-next-item,
.lab-console {
  box-shadow: var(--shadow-panel);
  transition: border-color .25s ease, border-top-color .25s ease, transform .25s ease, box-shadow .25s ease;
}
/* Lift all'hover: il pannello si solleva; il bordo si accende (accento = stato attivo) */
[data-site="tech"] .catalogo-card:hover,
[data-site="tech"] .research-card:hover,
[data-site="tech"] .strip-card:hover,
[data-site="tech"] .innovation-showcase-item:hover,
[data-site="tech"] .innovation-next-item:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-hover);
}

/* La card portfolio e il pannello hero .it stavano qui: ora vivono solo nelle loro
   sezioni (righe ~139-215 e ~68-80). Vedi la nota in cima al blocco. */

/* TRATTINO prima degli occhielli di sezione — REGOLA RIMOSSA il 31/08/2026.
   Nel mockup approvato non c'e', e con l'occhiello ora in terracotta il trattino
   raddoppiava lo stesso accento a mezzo centimetro di distanza.
   ⚠️ Era scoperta solo su .it (`[data-site="it"] .section-header .t-label::before`):
   sparisce e basta, non si sposta su .tech, che non l'ha mai avuta. */

/* Ingresso scaglionato dell'hero: rivelazione ordinata al load (keyframe in base.css).
   Sotto prefers-reduced-motion la durata è azzerata -> gli elementi compaiono subito. */
[data-site="it"] .hero-kicker,
[data-site="it"] .hero-title,
[data-site="it"] .hero-sub,
[data-site="it"] .hero-cta,
[data-site="tech"] .hero-inner .t-label,
[data-site="tech"] .hero-inner .t-display,
[data-site="tech"] .hero-sub,
[data-site="tech"] .hero-cta,
[data-site="tech"] .lab-console {
  animation: lab-rise .6s cubic-bezier(.2, .7, .2, 1) both;
}
[data-site="it"] .hero-title,
[data-site="tech"] .hero-inner .t-display { animation-delay: .06s; }
[data-site="it"] .hero-sub,
[data-site="tech"] .hero-sub { animation-delay: .12s; }
[data-site="it"] .hero-cta,
[data-site="tech"] .hero-cta { animation-delay: .18s; }
[data-site="tech"] .lab-console { animation-delay: .24s; }

/* === .tech PRODOTTI — catalogo download (Task 6 topologia produzione) ===
   Stessa famiglia visiva delle solution-card: le schede nascono dall'API, quindi qui si
   descrive solo la superficie, non il contenuto. Nessun token nuovo. */
[data-site="tech"] .catalogo { padding: var(--s8) 0; }
[data-site="tech"] .catalogo-title { margin: var(--s2) 0 0; font-size: clamp(32px, 5vw, 56px); color: var(--ink); }
[data-site="tech"] .catalogo-sub { max-width: 640px; color: var(--ink-soft); margin: var(--s4) 0 0; }

/* Gli stati vivono sopra la griglia e non la sostituiscono: un errore di rete lascia
   visibile il catalogo gia' caricato. */
[data-site="tech"] .catalogo-stato { margin: var(--s5) 0 0; color: var(--ink-muted); }
[data-site="tech"] .catalogo-stato--errore { color: var(--accent); }
[data-site="tech"] .catalogo-stato[hidden] { display: none; }

/* I due gruppi del catalogo — «Disponibili» e «In sviluppo» (05/09/2026).
   La gerarchia la fa lo SPAZIO, non un riquadro: due blocchi separati da un respiro ampio
   si leggono come due insiemi distinti senza aggiungere bordi a una pagina che ne ha gia'
   uno per scheda. */
[data-site="tech"] .catalogo-gruppo { margin-top: var(--s8); }
[data-site="tech"] .catalogo-gruppo:first-of-type { margin-top: var(--s7); }
[data-site="tech"] .catalogo-gruppo-titolo { margin: 0; color: var(--ink); }
[data-site="tech"] .catalogo-gruppo-nota { margin: var(--s2) 0 0; color: var(--ink-muted); max-width: 60ch; }

[data-site="tech"] .catalogo-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: var(--s5);
  margin-top: var(--s5);
}
[data-site="tech"] .catalogo-card {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: var(--s5);
  padding: var(--s6) var(--s5);
  background: var(--surface-panel);
  border: 1px solid var(--rule);
  border-radius: var(--r2);
}
[data-site="tech"] .catalogo-card:hover { border-color: var(--accent); }
[data-site="tech"] .catalogo-card-main { display: flex; flex-direction: column; gap: var(--s3); }
[data-site="tech"] .catalogo-card-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--s3);
}
[data-site="tech"] .catalogo-name { margin: 0; color: var(--ink); }
[data-site="tech"] .catalogo-domain { margin: 0; color: var(--ink-muted); }
[data-site="tech"] .catalogo-desc { color: var(--ink-soft); margin: 0; }
/* Come .solution-card-foot: se meta-dati e pulsante non stanno affiancati vanno a capo,
   invece di stringere il testo del pulsante. */
[data-site="tech"] .catalogo-card-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--s3) var(--s4);
  padding-top: var(--s4);
  border-top: 1px solid var(--rule);
}
[data-site="tech"] .catalogo-meta { color: var(--ink-muted); }
[data-site="tech"] .catalogo-modules { margin-top: var(--s2); }

/* ⚠️ QUI VIVEVANO LE REGOLE DELLA LISTA «In sviluppo» — righe basse e senza bordo — tolte
   il 05/09/2026 insieme alla forma che descrivevano. L'idea era che la forma dicesse da
   sola la differenza fra «lo scarico adesso» e «e' in lavorazione»; in cambio pero' quei
   prodotti perdevano descrizione e moduli, cioe' proprio cio' che fa capire a cosa
   serviranno. Ora usano la stessa scheda dei disponibili: la distinzione la fanno il titolo
   del gruppo e il chip «In sviluppo» al posto del numero di versione. */
/* I pulsanti della scheda restano un gruppo unico all'estremita' del piede: se lo spazio
   manca vanno a capo insieme, invece di separare "Scopri" da "Scarica". */
[data-site="tech"] .catalogo-azioni { display: flex; align-items: center; gap: var(--s3); flex-wrap: wrap; }

/* ---------------------------------------------------------------------------
   Pagina legale (informativa privacy)
   Un testo lungo si legge per riga, non per larghezza: la colonna e' limitata a
   circa 72 caratteri, che e' il punto oltre il quale l'occhio perde il capo riga.
   --------------------------------------------------------------------------- */
.legal { padding: var(--s8) 0; }
.legal-content { max-width: 72ch; }
.legal-content h1 { margin-bottom: var(--s5); }
.legal-content h2 { margin: var(--s7) 0 var(--s4); }
.legal-content h3 { margin: var(--s5) 0 var(--s3); color: var(--ink-soft); }
.legal-content p { margin-bottom: var(--s4); color: var(--ink-soft); }
/* Specificita' doppia invece di !important: la regola sopra vale per ogni p della pagina,
   e l'introduzione deve batterla senza ricorrere alla forza bruta. */
.legal-content .legal-intro { color: var(--ink); }
.legal-content a { color: var(--accent); }
.legal-list { margin: 0 0 var(--s4) var(--s5); display: flex; flex-direction: column; gap: var(--s3); }
.legal-list li { color: var(--ink-soft); }
.legal-date { margin-top: var(--s7); padding-top: var(--s4); border-top: 1px solid var(--rule); color: var(--ink-muted); }

/* Rimando all'informativa sotto il modulo contatti: sta con il pulsante, non compete con
   lui. Colore attenuato, dimensione della didascalia, link accentato solo al passaggio. */
.form-privacy { margin-top: var(--s4); color: var(--ink-muted); }
.form-privacy a { color: var(--ink-soft); text-decoration: underline; text-underline-offset: 3px; }
.form-privacy a:hover { color: var(--accent); }


/* ===================================================================== */
/* === .it SCHEDA PROGETTO (progetto.php) ============================== */
/* Il dettaglio che la card prometteva con «Vedi scheda ↗» senza poterlo
   mantenere. Stessi token della home: la scheda deve sembrare la stessa
   casa vista da dentro, non una stanza aggiunta dopo. */

/* --- Testata: la copertina fa da fondale, il testo ci sta sopra --- */
[data-site="it"] .progetto-hero {
  position: relative;
  min-height: clamp(340px, 52vh, 560px);
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  background: var(--surface-alt);
  border-bottom: 1px solid var(--rule);
}
[data-site="it"] .progetto-hero-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* Stessa cura della griglia — il render arretra, il titolo avanza — ma con mano
     molto piu' leggera: qui l'immagine è grande e spesso è già un render notturno,
     e il filtro della card la spegneva fino a farla sparire. Il velo sottostante
     garantisce già il contrasto del testo. */
  filter: grayscale(.12) brightness(.92) contrast(1.03) saturate(.95);
}
/* Velo in due tempi: scuro pieno in basso dove cade il testo, quasi
   trasparente in alto perché l'immagine resti riconoscibile. */
[data-site="it"] .progetto-hero-velo {
  position: absolute;
  inset: 0;
  /* Rinforzato il 31/08/2026 insieme alla rimozione del filtro grigio su .progetto-hero-img:
     senza quel filtro la copertina resta chiara, e la briciola «Progetti / Categoria» — che
     e' il testo piu' piccolo della pagina — spariva sopra un intonaco giallo.
     Tolta anche la macchia radiale d'accento in basso a sinistra: tingeva la fotografia. */
  background: linear-gradient(180deg,
    rgba(15, 17, 19, .22) 0%,
    rgba(15, 17, 19, .58) 45%,
    rgba(15, 17, 19, .97) 100%);
}
/* Il pulsante che apre il visore dalla copertina: invisibile, ma e' un vero pulsante.
   Sta sopra il velo e sotto il testo — vedi l'ordine nel DOM in progetto.php. */
[data-site="it"] .progetto-hero-apri {
  position: absolute;
  inset: 0;
  border: 0;
  background: transparent;
  padding: 0;
  cursor: zoom-in;
}
/* Un pulsante invisibile senza contorno di fuoco e' irraggiungibile a chi naviga con Tab:
   ci si arriva e non si sa di esserci. */
[data-site="it"] .progetto-hero-apri:focus-visible { outline: 2px solid var(--accent); outline-offset: -4px; }

[data-site="it"] .progetto-hero-testo {
  position: relative;
  padding-top: var(--s8);
  padding-bottom: var(--s7);
}
[data-site="it"] .progetto-briciole { display: flex; gap: var(--s2); align-items: center; margin: 0 0 var(--s4); }
[data-site="it"] .progetto-briciole a { color: var(--ink-soft); text-decoration: none; }
[data-site="it"] .progetto-briciole a:hover { color: var(--accent); }
[data-site="it"] .progetto-titolo { margin: 0; max-width: 18ch; color: var(--ink); }
[data-site="it"] .progetto-sintesi {
  margin: var(--s4) 0 0;
  max-width: 56ch;
  color: var(--ink-soft);
}

/* --- Riga dei dati: sottile, separata da filetti --- */
[data-site="it"] .progetto-dati { border-bottom: 1px solid var(--rule); background: var(--surface-alt); }
[data-site="it"] .progetto-dati-riga {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s7);
  padding-top: var(--s5);
  padding-bottom: var(--s5);
}
[data-site="it"] .progetto-dato { display: flex; flex-direction: column; gap: var(--s1); }
[data-site="it"] .progetto-dato-valore { color: var(--ink); }

/* --- Il testo: una colonna sola, larga quanto si legge bene --- */
[data-site="it"] .progetto-testo { padding: var(--s8) 0 var(--s7); }
[data-site="it"] .progetto-colonna { max-width: 68ch; }
[data-site="it"] .progetto-colonna p {
  margin: 0 0 var(--s5);
  color: var(--ink-soft);
  line-height: 1.75;
}
/* Il primo paragrafo apre il racconto: più grande, più chiaro, con un filetto
   accentato a sinistra che lo lega alla testata.

   ⚠️ `> p:first-of-type`, non `p:first-child`. Da quando il testo esteso può contenere
   titoli e citazioni (31/08/2026), `p:first-child` colpiva ANCHE il paragrafo dentro un
   <blockquote> — che è primo figlio del suo contenitore — e ogni citazione si presentava
   col filetto d'apertura, come se il racconto ricominciasse da capo. Con `> ` si guarda
   solo ai figli diretti della colonna, e con `first-of-type` l'apertura resta al primo
   paragrafo anche quando il testo comincia con un titolo.

   ⚠️ `:not(.t-label)` aggiunto il 17/09/2026, e per la stessa ragione di allora. La
   sezione Video mette un'etichetta `.t-label` dentro la colonna — il primo caso in cui un
   nodo che non è racconto ci entra — e quell'etichetta è un <p>, figlia diretta e prima
   del suo tipo: prendeva l'apertura tutta intera, filetto terracotta compreso.
   🔑 Si esclude qui invece di rimediare con una regola più specifica là: questa regola è
   scritta DUE volte, e la copia dentro `@media (max-width: 640px)` sta più in basso nel
   file — una toppa a pari specificità avrebbe perso contro di lei, e l'etichetta sarebbe
   tornata vestita da apertura SOLO sul telefono. Detto così, vale anche per la prossima
   etichetta che entrerà nella colonna. */
[data-site="it"] .progetto-colonna > p:not(.t-label):first-of-type {
  font-size: 19px;
  line-height: 1.65;
  color: var(--ink);
  padding-left: var(--s5);
  border-left: 2px solid var(--accent);
}
[data-site="it"] .progetto-colonna > p:last-child { margin-bottom: 0; }

/* --- Il testo formattato: titoli, elenchi, citazioni, stacchi ---
   Sono le forme che backend/classes/TestoFormattato.php può produrre a partire dai
   marcatori scritti nel pannello. Senza queste regole comparirebbero con gli stili
   predefiniti del browser — corpo sbagliato, margini sbagliati, blu di sistema sui link —
   dentro una pagina progettata. L'anteprima del pannello (admin/css/admin.css) ripete gli
   stessi rapporti: se si cambia qui, si cambia anche là, o l'anteprima smette di
   anticipare quello che si vedrà. Presidiato da backend/tests/AnteprimaFedeleTest.php. */
[data-site="it"] .progetto-colonna h2,
[data-site="it"] .progetto-colonna h3,
[data-site="it"] .progetto-colonna h4 {
  font-family: var(--font-serif);
  font-weight: 500;
  color: var(--ink);
  margin: var(--s6) 0 var(--s3);
}
[data-site="it"] .progetto-colonna h2 { font-size: 27px; font-style: italic; }
[data-site="it"] .progetto-colonna h3 { font-size: 22px; font-style: italic; }
[data-site="it"] .progetto-colonna h4 { font-size: 18px; }
[data-site="it"] .progetto-colonna ul,
[data-site="it"] .progetto-colonna ol {
  margin: 0 0 var(--s5);
  padding-left: var(--s5);
  color: var(--ink-soft);
  line-height: 1.75;
}
[data-site="it"] .progetto-colonna li { margin-bottom: var(--s2); }
/* La citazione ha il filetto come l'apertura, ma sottile e senza accento: è una voce
   dentro il racconto, non un secondo inizio. */
[data-site="it"] .progetto-colonna blockquote {
  margin: 0 0 var(--s5);
  padding-left: var(--s5);
  border-left: 1px solid var(--rule);
  font-style: italic;
}
[data-site="it"] .progetto-colonna blockquote p { color: var(--ink); }
[data-site="it"] .progetto-colonna hr {
  border: 0;
  border-top: 1px solid var(--rule);
  margin: var(--s7) 0;
}
[data-site="it"] .progetto-colonna a {
  color: var(--ink);
  text-decoration: underline;
  text-decoration-color: var(--accent);
  text-underline-offset: 3px;
}
[data-site="it"] .progetto-colonna a:hover { color: var(--accent); }

/* --- Video del progetto (17/09/2026): il lettore del browser, vestito ---------------
   I file li carica chi ha accesso all'FTP, non il pannello: proporzioni, peso e durata
   sono ignoti nel momento in cui si scrive questa regola. Per questo il foglio decide la
   LARGHEZZA e lascia l'altezza al file — l'unica scelta che non puo' sbagliarsi. */
[data-site="it"] .progetto-video-sezione { padding: 0 0 var(--s7); }

/* Il `p.` non e' pignoleria: `.progetto-colonna p` porta un `margin-bottom` di --s5 e il
   colore del corpo del racconto, e batte per un pelo una regola di sola classe (ha un
   selettore di tipo in piu'). Senza il `p.` davanti, queste due righe non arriverebbero.

   ⚠️ Che l'etichetta non prenda il vestito d'APERTURA del racconto non si decide qui: si
   decide con `:not(.t-label)` sulla regola d'apertura, piu' su in questo stesso file. La
   ragione sta li'. */
[data-site="it"] .progetto-colonna > p.progetto-video-titolo {
  margin: 0 0 var(--s4);
  color: var(--ink-muted);
}

/* Due lettori attaccati, entrambi scuri e senza cornice, si leggono come un video solo. */
[data-site="it"] .progetto-video-lista { display: grid; gap: var(--s5); }

/* <figure> nasce con «margin: 1em 40px» nel foglio del browser: senza azzerarlo i video —
   e soltanto loro — sarebbero rientrati di 40px rispetto a tutto il resto della colonna. */
[data-site="it"] .progetto-video { margin: 0; }

[data-site="it"] .progetto-video video {
  /* <video> e' inline: sotto il lettore resterebbe lo spazio di una riga di testo, e la
     didascalia si staccherebbe senza che nessun margine lo spieghi. */
  display: block;
  width: 100%;
  /* Le proporzioni le porta il file. Un'altezza fissa qui vorrebbe dire scegliere oggi il
     formato dei video che verranno caricati domani. */
  height: auto;
  /* Con `preload="none"` e senza anteprima il lettore e' un rettangolo vuoto prima ancora
     che si tocchi il tasto: il fondo dichiarato lo tiene dentro la pagina. */
  background: var(--surface-alt);
  border: 1px solid var(--rule);
  border-radius: var(--r2);
}

/* La didascalia e' il titolo del video, non un altro paragrafo del racconto: col corpo del
   testo si leggerebbe come se la storia continuasse. */
[data-site="it"] .progetto-video-didascalia {
  margin: var(--s3) 0 0;
  font-size: 15px;
  color: var(--ink-muted);
}

/* --- Galleria: griglia fluida, ogni foto è un pulsante --- */
[data-site="it"] .progetto-galleria { padding: 0 0 var(--s8); }
[data-site="it"] .progetto-galleria-titolo { margin: 0 0 var(--s4); }
[data-site="it"] .progetto-galleria-griglia {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: var(--s4);
}
[data-site="it"] .progetto-foto {
  position: relative;
  padding: 0;
  border: 1px solid var(--rule);
  border-radius: var(--r2);
  overflow: hidden;
  background: var(--surface-alt);
  cursor: zoom-in;
  aspect-ratio: 3 / 2;
  transition: transform .3s ease, border-color .3s ease, box-shadow .3s ease;
}
[data-site="it"] .progetto-foto img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  filter: grayscale(.35) brightness(.82);
  transition: transform .45s ease, filter .45s ease;
}
[data-site="it"] .progetto-foto:hover { transform: translateY(-3px); border-color: color-mix(in srgb, var(--accent) 45%, transparent); box-shadow: var(--shadow-hover); }
[data-site="it"] .progetto-foto:hover img { transform: scale(1.05); filter: grayscale(0) brightness(1); }
[data-site="it"] .progetto-foto:focus-visible { outline: none; box-shadow: var(--ring); }

/* --- Tag: etichette tecniche, non decorazione --- */
[data-site="it"] .progetto-tag-sezione { border-top: 1px solid var(--rule); }
[data-site="it"] .progetto-tag-riga { display: flex; flex-wrap: wrap; gap: var(--s2); padding: var(--s5) var(--s5); }
[data-site="it"] .progetto-tag {
  font-size: 11px;
  padding: var(--s1) var(--s3);
  border: 1px solid var(--rule);
  border-radius: var(--r1);
  color: var(--ink-muted);
  background: var(--surface-alt);
}

/* --- Uscite --- */
[data-site="it"] .progetto-altri { padding: var(--s7) 0 var(--s8); background: var(--surface-alt); border-top: 1px solid var(--rule); }
[data-site="it"] .progetto-altri-griglia {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: var(--s4);
  margin: var(--s4) 0 var(--s7);
}
[data-site="it"] .progetto-altro {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s4);
  padding: var(--s5);
  border: 1px solid var(--rule);
  border-radius: var(--r2);
  background: var(--surface-panel);
  color: var(--ink);
  text-decoration: none;
  box-shadow: var(--shadow-panel);
  transition: transform .25s ease, border-color .25s ease, box-shadow .25s ease;
}
[data-site="it"] .progetto-altro:hover { transform: translateY(-3px); border-color: color-mix(in srgb, var(--accent) 45%, transparent); box-shadow: var(--shadow-hover); }
[data-site="it"] .progetto-altro:hover .progetto-altro-freccia { color: var(--accent); transform: translateX(3px); }
[data-site="it"] .progetto-altro-freccia { color: var(--ink-faint); transition: color .25s ease, transform .25s ease; }
[data-site="it"] .progetto-ritorno { display: flex; flex-wrap: wrap; gap: var(--s3); }

/* --- Visore a schermo intero --- */
[data-site="it"] .progetto-visore {
  padding: 0;
  border: none;
  background: transparent;
  max-width: min(94vw, 1400px);
  max-height: 92vh;
}
[data-site="it"] .progetto-visore::backdrop { background: rgba(8, 11, 15, .92); backdrop-filter: blur(6px); }
[data-site="it"] .progetto-visore img { display: block; width: 100%; height: auto; max-height: 92vh; object-fit: contain; border-radius: var(--r2); }
[data-site="it"] .progetto-visore-chiudi {
  position: absolute;
  top: var(--s3);
  right: var(--s3);
  width: 40px;
  height: 40px;
  border: 1px solid var(--rule);
  border-radius: 50%;
  background: var(--surface-glass);
  color: var(--ink);
  font-size: 16px;
  cursor: pointer;
  transition: border-color .25s ease, color .25s ease;
}
[data-site="it"] .progetto-visore-chiudi:hover { border-color: var(--accent); color: var(--accent); }

/* Il <dialog> nascosto resta nascosto. In un browser che non conosce <dialog> l'attributo
   `hidden` e' l'unica cosa che tiene il visore fuori dalla pagina: questa riga lo dice anche
   al foglio di stile, invece di affidarlo al solo foglio predefinito del browser. */
[data-site="it"] .progetto-visore[hidden] { display: none; }

[data-site="it"] .progetto-visore-freccia {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 48px;
  height: 48px;
  border: 1px solid var(--rule);
  border-radius: 50%;
  background: var(--surface-glass);
  color: var(--ink);
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
  transition: border-color .25s ease, color .25s ease;
}
[data-site="it"] .progetto-visore-freccia:hover { border-color: var(--accent); color: var(--accent); }
[data-site="it"] .progetto-visore-freccia.is-prec { left: var(--s3); }
[data-site="it"] .progetto-visore-freccia.is-succ { right: var(--s3); }
[data-site="it"] .progetto-visore-contatore {
  position: absolute;
  bottom: var(--s3);
  left: 50%;
  transform: translateX(-50%);
  margin: 0;
  padding: 4px 10px;
  border-radius: var(--r1);
  background: var(--surface-glass);
  color: var(--ink-soft);
  font-size: 13px;
}

/* --- Pagina di errore 404 --- */
[data-site="it"] .progetto-vuoto { padding: var(--s8) 0; min-height: 52vh; display: flex; align-items: center; }
[data-site="it"] .progetto-vuoto .t-display { margin: var(--s2) 0 var(--s4); }
[data-site="it"] .progetto-vuoto-testo { max-width: 52ch; color: var(--ink-soft); margin: 0 0 var(--s6); }

/* --- Adattamenti su schermo stretto --- */
@media (max-width: 640px) {
  [data-site="it"] .progetto-hero { min-height: 320px; }
  [data-site="it"] .progetto-hero-testo { padding-top: var(--s7); padding-bottom: var(--s5); }
  [data-site="it"] .progetto-titolo { max-width: none; font-size: 34px; }
  [data-site="it"] .progetto-dati-riga { gap: var(--s5); }
  [data-site="it"] .progetto-testo { padding: var(--s7) 0 var(--s5); }
  /* Stesso selettore della regola piena, e non per simmetria: se qui restasse
     `p:first-child`, su schermo stretto il filetto d'apertura tornerebbe su ogni
     citazione — e senza `:not(.t-label)` tornerebbe sull'etichetta «Video», solo qui
     sotto i 640px. Questa riga sta più in basso della regola piena: a pari specificità
     vince lei, quindi ogni esclusione va ripetuta. */
  [data-site="it"] .progetto-colonna > p:not(.t-label):first-of-type { font-size: 17px; padding-left: var(--s4); }
  [data-site="it"] .progetto-colonna h2 { font-size: 24px; }
  [data-site="it"] .progetto-colonna h3 { font-size: 20px; }
}

/* Chi ha chiesto meno animazioni non deve vedere zoom né scorrimenti. */
@media (prefers-reduced-motion: reduce) {
  [data-site="it"] .progetto-foto,
  [data-site="it"] .progetto-foto img,
  [data-site="it"] .progetto-altro,
  [data-site="it"] .progetto-altro-freccia { transition: none; }
  [data-site="it"] .progetto-foto:hover { transform: none; }
  [data-site="it"] .progetto-foto:hover img { transform: none; }
  [data-site="it"] .progetto-altro:hover { transform: none; }
}


/* === .it ELENCO PROGETTI (progetti.php) ============================== */
/* Riusa la griglia e le card della home: e' lo stesso oggetto visto per
   intero, non un secondo modo di mostrare le stesse cose. */

[data-site="it"] .progetti-elenco { padding: var(--s8) 0; }
[data-site="it"] .progetti-testata { max-width: 640px; margin: 0 0 var(--s6); }
[data-site="it"] .progetti-titolo { margin: var(--s2) 0 0; color: var(--ink); }
[data-site="it"] .progetti-sottotitolo { margin: var(--s3) 0 0; color: var(--ink-soft); }
[data-site="it"] .progetti-avviso { color: var(--ink-soft); }

/* Filtri: nascosti finché lo script non li abilita, così non restano
   pulsanti che non fanno nulla se il JavaScript non gira. */
[data-site="it"] .progetti-filtri { display: none; flex-wrap: wrap; gap: var(--s2); margin: 0 0 var(--s5); }
[data-site="it"] .progetti-filtri.is-pronto { display: flex; }
[data-site="it"] .progetti-filtro {
  display: inline-flex;
  align-items: center;
  gap: var(--s2);
  padding: var(--s2) var(--s4);
  font-family: var(--font-sans);
  font-size: 13px;
  font-weight: 500;
  color: var(--ink-soft);
  background: var(--surface-alt);
  border: 1px solid var(--rule);
  border-radius: var(--r1);
  cursor: pointer;
  transition: color .25s ease, border-color .25s ease, background-color .25s ease;
}
[data-site="it"] .progetti-filtro:hover { color: var(--ink); border-color: color-mix(in srgb, var(--accent) 40%, transparent); }
[data-site="it"] .progetti-filtro:focus-visible { outline: none; box-shadow: var(--ring); }
[data-site="it"] .progetti-filtro.is-attivo {
  color: var(--accent-ink);
  background: var(--accent);
  border-color: var(--accent);
}
[data-site="it"] .progetti-filtro-n { font-family: var(--font-mono); font-size: 11px; opacity: .7; }

[data-site="it"] .progetti-conteggio { margin: var(--s5) 0 0; }

/* In elenco il titolo della card è un h2: stessa resa dell'h3 della home. */
[data-site="it"] .progetti-elenco .portfolio-overlay .t-h2 { margin: 0; color: var(--ink); }

/* ==========================================================================
   .it — «TEATRO SPENTO» (31/08/2026)
   Spegne, SOLO su .it, gli effetti che base.css applica a entrambi i siti.
   Vive qui e non in base.css perche' base.css e' condiviso: .tech tiene il suo
   linguaggio da laboratorio, che li' e' vero. site.css e' caricato dopo base.css,
   quindi queste regole vincono senza bisogno di !important.
   ========================================================================== */

/* Il pallino accanto a «system online» PULSAVA all'infinito. Un indicatore che lampeggia
   promette un impianto che sorveglia qualcosa: qui non sorveglia niente. La scritta resta
   (e' testo del sito), il battito no. */
[data-site="it"] .lab-nav .nav-status-dot {
  animation: none;
  background: var(--accent);
  box-shadow: none;
}
[data-site="it"] .lab-footer .footer-status-dot {
  background: var(--accent);
  box-shadow: none;
}

/* La barra non e' piu' vetro sfocato: --surface-glass su .it e' opaco, e il backdrop-filter
   diventa lavoro inutile per il browser a ogni scorrimento. */
[data-site="it"] .lab-nav {
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  box-shadow: none;
}

/* BOTTONI — via l'alone colorato e il sollevamento. Restavano tre effetti sovrapposti
   (translate, filtro di luminosita', ombra colorata) su un elemento che deve solo
   rispondere. Il fuoco da tastiera resta intatto: quello e' accessibilita', non decoro. */
[data-site="it"] .btn-primary:hover {
  filter: none;
  transform: none;
  box-shadow: none;
  background: color-mix(in srgb, var(--accent) 88%, #ffffff);
}
[data-site="it"] .btn-outline:hover {
  transform: none;
  box-shadow: none;
  border-color: var(--accent);
  color: var(--accent);
}

/* SCHEDA PROGETTO ed ELENCO — le stesse due abitudini, negli stessi termini:
   niente alone d'accento sotto il riquadro, niente miniature scolorite a riposo. */
[data-site="it"] .progetto-foto:hover,
[data-site="it"] .progetto-altro:hover {
  box-shadow: 0 16px 36px -10px rgba(0, 0, 0, .75);
}
[data-site="it"] .progetto-foto img {
  filter: none;
}
[data-site="it"] .progetto-visore::backdrop {
  background: rgba(15, 17, 19, .95);
  backdrop-filter: none;
}

/* Anche l'immagine grande della scheda progetto era desaturata: stesso motivo, stessa
   correzione delle miniature. Il velo sottostante basta gia' al contrasto del testo. */
[data-site="it"] .progetto-hero-img { filter: none; }

/* --------------------------------------------------------------------------
   Marchio in serif, come nel mockup approvato (31/08/2026).
   Nella barra e nel piede «ArchiWave» era in sans 15px/700: la stessa voce dei
   collegamenti accanto, quindi il nome non si distingueva da una voce di menu.
   Nel serif del sito diventa una firma, e riprende il carattere dei titoli.
   ⚠️ Solo su .it: su .tech il marchio resta in sans, dove e' coerente col resto.
   ⚠️ Il LOGO non si tocca. Nel mockup al suo posto c'era un quadrato con una «A»:
   era un segnaposto disegnato perche' non potevo incorporare il file, non una
   proposta. Sostituire un marchio vero con un segnaposto sarebbe scambiare un
   ripiego per una decisione. (Che il logo si legga poco sul fondo scuro resta un
   punto aperto, ed e' una scelta di identita', non di CSS.)
   -------------------------------------------------------------------------- */
[data-site="it"] .lab-nav .brand-name,
[data-site="it"] .lab-footer .footer-brand-name {
  font-family: var(--font-display);
  font-size: 22px;
  font-weight: 500;
  line-height: 1.15;
}

/* Titolo di copertina: 58px come nel mockup (il massimo era 64). Il minimo e la
   scalatura restano, perche' il mockup e' un solo fotogramma a 1440px e non dice
   niente su cosa deve succedere a 390. */
[data-site="it"] .hero-title { font-size: clamp(34px, 5.4vw, 58px); }


/* === .tech OFFICINA DIGITAL — layout approvato il 06/09/2026.
   Adattato da _mockup/officina-digital-2026-09-06/digital.css.
   I dati, le rotte e i moduli restano quelli del frontend. */
[data-site="tech"] {
 --surface:#121a1e; --surface-alt:#121a1e; --surface-panel:#1b262b; --surface-glass:#121a1e;
 --ink:#edf0ee; --ink-soft:#bdc6c9; --ink-muted:#9fadb2; --ink-faint:#9fadb2;
 --rule:#35454d; --accent:#a8c5d0; --accent-2:#a8c5d0; --accent-ink:#121a1e;
 --font-sans: 'Inter',Arial,sans-serif; --font-display:var(--font-sans);
 --shadow-card:none; --shadow-panel:none; --shadow-hover:none;
}
#aw-digital {padding-top:0}
#aw-digital .nav {position:static;background:transparent;backdrop-filter:none;border:0;box-shadow:none}
#aw-digital .nav-inner {height:auto}
#aw-digital .nav-brand {text-transform:none}
#aw-digital .brand-name .accent {font-size:inherit;font-weight:400;margin:0;letter-spacing:inherit}
#aw-digital .brand-mode {text-transform:uppercase}
#aw-digital .nav-status {display:none}
#aw-digital .nav-link {padding:0;border:0;background:none;text-transform:none;letter-spacing:0}
#aw-digital .nav-link::before {display:none}
#aw-digital .hero {min-height:0;padding:0;background:none;overflow:visible}
#aw-digital .hero::before,#aw-digital .hero::after,#aw-digital .tech-strip::before {display:none}
#aw-digital .tech-dashboard {row-gap:0;align-items:stretch}
#aw-digital .tech-hero-copy {display:block}
#aw-digital .t-display {max-width:none;text-transform:none;text-wrap:initial}
#aw-digital .hero-inner * {animation:none;opacity:1;transform:none}
#aw-digital .hero-sub {margin:0}
#aw-digital .hero-cta {margin:0;justify-content:flex-start}
#aw-digital .btn {width:auto;box-shadow:none;letter-spacing:0;text-transform:none}
#aw-digital .btn:hover {box-shadow:none;filter:none}
#aw-digital .lab-console {display:block;margin:0;background:none;box-shadow:none;border:0;border-radius:0}
#aw-digital .lab-console-head {padding:0;border:0;background:none}
#aw-digital .console-row {border-bottom:1px solid #304047}
#aw-digital .console-row-meta {align-items:center}
#aw-digital .metric-chip,#aw-digital .status-pill {padding:0;border:0;background:none;line-height:1.5;font-weight:400;letter-spacing:0}
#aw-digital .status-pill-dot {display:none}
#aw-digital .tech-strip,#aw-digital .research,#aw-digital .catalogo,#aw-digital .contact,#aw-digital .innovation-process-section {padding:0;border:0;background:none}
#aw-digital .strip-card,#aw-digital .research-card {padding:0;background:none;border:0;box-shadow:none;transform:none;border-radius:0;display:block}
#aw-digital .strip-card:hover,#aw-digital .research-card:hover {background:none;box-shadow:none;transform:none}
#aw-digital .strip-card-main {display:block}
#aw-digital .strip-card-foot {padding:0;border:0;justify-content:flex-start;margin:0}
#aw-digital .strip-card-link {display:inline-flex;align-items:center;min-height:44px;margin-top:14px;font-size:12px;color:var(--accent)}
#aw-digital .catalogo-gruppo {margin:0;display:block}
#aw-digital .catalogo-grid {margin:0}
#aw-digital .catalogo-card {gap:0;box-shadow:none;transform:none}
#aw-digital .catalogo-card:hover {box-shadow:none;transform:none}
#aw-digital .catalogo-card-main {display:block}
#aw-digital .catalogo-card-foot {padding:0;border:0}
#aw-digital .catalogo-azioni {display:flex;gap:24px;flex-wrap:wrap}
#aw-digital .catalogo-modules li::before,#aw-digital .research-outputs li::before {display:none}
#aw-digital .research-grid {display:block;margin:0}
#aw-digital .research-card-head {margin:0;padding:0}
#aw-digital .research-relation {border-top:0;margin:0}
#aw-digital .innovation-process {counter-reset:none}
#aw-digital .innovation-process-step {padding:0;border:0}
#aw-digital .innovation-process-step::before,#aw-digital .innovation-process-step::after {display:none}
#aw-digital .innovation-cta-section {background:none;border:0;padding:0}
#aw-digital .contact-info {display:block}
#aw-digital .contact-method {background:none;border-radius:0;box-shadow:none}
#aw-digital .contact-method svg {display:none}
#aw-digital .contact-methods {margin:0}
#aw-digital .contact-form {display:block;margin:0}
#aw-digital .form-group {gap:0}
#aw-digital .form-group label {font:inherit;letter-spacing:0;text-transform:none}
#aw-digital .footer {margin:0;background:none}
#aw-digital .footer-grid {padding-top:0}
#aw-digital .footer-col {gap:8px}
#aw-digital .footer-link {font-size:inherit}
#aw-digital .footer-brand-mode {display:none}
#aw-digital .footer-tagline {font-size:11px}
#aw-digital .footer-bottom {min-height:0}
#aw-digital .footer-bottom :is(span,a) {font-size:9px}

#aw-digital {
  --aw-bg:#121a1e;--aw-panel:#1b262b;--aw-ink:#edf0ee;--aw-soft:#bdc6c9;
  --aw-muted:#9fadb2;--aw-line:#35454d;--aw-accent:#a8c5d0;
  --od-sans:'Inter',Arial,sans-serif;--od-mono:'IBM Plex Mono',monospace;
  container-type:inline-size;background:var(--aw-bg);color:var(--aw-ink);color-scheme:dark;
  font:400 15px/1.65 var(--od-sans);text-align:left;-webkit-font-smoothing:antialiased;
}
#aw-digital *,#aw-digital *::before,#aw-digital *::after{box-sizing:border-box}
#aw-digital [hidden]{display:none!important}
#aw-digital h1,#aw-digital h2,#aw-digital h3,#aw-digital p,#aw-digital figure{margin:0;color:inherit}
#aw-digital a{color:inherit;text-decoration:none}
#aw-digital button,#aw-digital input,#aw-digital select,#aw-digital textarea{font:inherit}
#aw-digital button,#aw-digital a{touch-action:manipulation}
#aw-digital button{cursor:pointer}
#aw-digital :is(a,button,input,textarea,select):focus-visible{outline:2px solid var(--aw-accent);outline-offset:5px}
#aw-digital h1:focus{outline:none}
#aw-digital ::selection{background:var(--aw-accent);color:var(--aw-bg)}
#aw-digital .container{max-width:1480px;margin:auto;padding:0 clamp(22px,4.5cqw,72px)}
#aw-digital .nav-inner{min-height:104px;display:flex;align-items:center;justify-content:space-between;gap:28px;border-bottom:1px solid var(--aw-line)}
#aw-digital .nav-brand{display:flex;align-items:center;gap:14px;flex-shrink:0}
#aw-digital .nav-brand img{width:48px;height:29px;object-fit:contain;filter:brightness(0) invert(.8)}
#aw-digital .brand-name{display:block;font-size:24px;line-height:1.2;font-weight:500;letter-spacing:-1px}
#aw-digital .brand-name em{color:var(--aw-accent);font-style:normal;font-weight:400}
#aw-digital .brand-mode{font:400 10px/1.4 var(--od-mono);letter-spacing:.16em;color:var(--aw-muted);display:block;margin-top:4px}
#aw-digital .nav-menu{display:flex;align-items:center;gap:30px}
#aw-digital .nav-menu a{display:flex;align-items:center;min-height:44px;font-size:12px;color:var(--aw-soft);position:relative}
#aw-digital .nav-menu a[aria-current]{color:var(--aw-ink)}
#aw-digital .nav-menu a[aria-current]::after{content:'';position:absolute;bottom:0;left:0;width:16px;height:2px;background:var(--aw-accent)}
#aw-digital .nav-menu a.accent{margin-left:12px;color:var(--aw-accent)}
#aw-digital .nav-menu a:hover{color:var(--aw-ink)}
/* Tre barre in alto a destra, identiche a quelle di .it (07/09/2026). Qui c'era un
   riquadro con la parola «Menu»: stessa azione, due pulsanti diversi. Le misure ripetono
   quelle di .lab-nav in base.css — cambiarle qui senza cambiarle la' rifa' la differenza. */
#aw-digital .nav-toggle{display:none;flex-direction:column;justify-content:center;gap:5px;width:32px;height:32px;padding:0;background:transparent;border:0;border-radius:0;cursor:pointer;flex-shrink:0}
/* Il colore delle barre segue il tema .tech; transform e opacita' — l'animazione in X
   quando il menu e' aperto — restano a base.css, su .nav-toggle.active span. */
#aw-digital .nav-toggle span{display:block;width:100%;height:2px;background:var(--aw-ink);border-radius:1px}
#aw-digital .aw-online{font:400 10px var(--od-mono);white-space:nowrap;color:var(--aw-muted)}
#aw-digital .aw-online::before{content:'';display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--aw-accent);margin-right:8px;vertical-align:middle}
#aw-digital .nav-inner>.aw-online{display:none}
#aw-digital .tech-dashboard{display:grid;grid-template-columns:minmax(0,1.03fr) minmax(0,1fr);column-gap:18px;position:relative;padding-top:48px}
#aw-digital .aw-kicker{font:400 11px/1.6 var(--od-mono);letter-spacing:.075em;text-transform:uppercase;color:var(--aw-muted)}
#aw-digital .tech-dashboard>.aw-kicker{grid-column:1;align-self:end;color:var(--aw-accent);margin-bottom:32px;display:flex;align-items:center;gap:12px}
#aw-digital .tech-dashboard>.aw-kicker::before{content:'';width:22px;height:1px;background:var(--aw-accent)}
#aw-digital .tech-hero-copy{grid-column:1;grid-row:2;position:relative;z-index:1;padding-bottom:64px}
#aw-digital .t-display{font-size:clamp(48px,5.65cqw,82px);line-height:1.025;font-weight:500;letter-spacing:-.07em;text-wrap:initial}
#aw-digital .t-display span{display:block;color:var(--aw-accent);font-weight:400}
#aw-digital .aw-intro-copy{margin-top:31px}
#aw-digital .aw-intro-copy>p{font-size:14px;line-height:1.8;color:var(--aw-soft);max-width:44ch}
#aw-digital .hero-cta{display:flex;align-items:center;flex-wrap:wrap;gap:24px;margin-top:28px}
#aw-digital .btn{display:inline-flex;align-items:center;justify-content:space-between;gap:30px;min-height:46px;padding:11px 0;font-size:12px;font-weight:500;background:transparent;color:var(--aw-ink);border:0;border-bottom:1px solid var(--aw-line);transition:background .2s,color .2s,transform .2s}
#aw-digital .btn::after{content:'↗';font:400 20px Arial,sans-serif}
#aw-digital .btn.btn-primary{border:1px solid var(--aw-accent);background:var(--aw-accent);color:#121a1e;border-radius:5px;padding:13px 19px;box-shadow:0 4px 20px #080e121a}
#aw-digital .btn:hover{color:var(--aw-accent);transform:translateY(-2px)}
#aw-digital .btn.btn-primary:hover{background:#c4dae2;color:#121a1e}
#aw-digital .officina-hero-visual{grid-column:2;grid-row:1/3;align-self:stretch;display:flex;flex-direction:column;min-width:0;position:relative;margin-bottom:32px}
#aw-digital .officina-stage-top{display:flex;align-items:center;justify-content:space-between;color:var(--aw-muted);font:400 9px var(--od-mono);letter-spacing:.13em;padding:0 0 0 24px}
#aw-digital .od-cross{font-size:22px;font-weight:400;line-height:1}
#aw-digital .officina-sculpture{position:relative;min-height:360px;flex:1;display:grid;place-items:center;background:radial-gradient(ellipse at 55% 55%,#a8c5d00b,transparent 63%)}
#aw-digital .officina-canvas{display:block;position:absolute;inset:0;width:100%;height:100%;cursor:grab;touch-action:none}
#aw-digital .officina-canvas:active{cursor:grabbing}
#aw-digital .officina-axis{position:absolute;left:24px;bottom:25px;font:400 9px var(--od-mono);letter-spacing:.16em;color:var(--aw-muted);pointer-events:none}
#aw-digital .officina-hero-visual figcaption{display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;align-items:center;border-top:1px solid var(--aw-line);padding:15px 0 0 24px;font-size:11px;color:var(--aw-soft)}
#aw-digital .officina-controls{display:flex;gap:4px;align-items:center}
#aw-digital .officina-controls button{min-height:36px;background:transparent;border:0;padding:7px 9px;color:var(--aw-muted);font-size:10px;border-radius:3px}
#aw-digital .officina-controls button[aria-pressed=true]{background:var(--aw-panel);color:var(--aw-ink)}
#aw-digital .officina-controls button:hover{color:var(--aw-ink)}
#aw-digital .lab-console{grid-column:1/-1;border-top:1px solid var(--aw-line);padding-top:18px}
#aw-digital .lab-console-head{display:flex;align-items:center;justify-content:space-between;color:var(--aw-muted);font:400 10px var(--od-mono);margin-bottom:22px}
#aw-digital .lab-console-head .status-pill{color:var(--aw-accent)}
#aw-digital .officina-products{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
#aw-digital .console-row{display:flex;flex-direction:column;align-items:flex-start;position:relative;min-width:0;padding:27px 25px 24px;background:#172126;border:1px solid #304047;border-radius:8px;transition:border-color .2s,background .2s,transform .2s}
#aw-digital .console-row:first-child{background:var(--aw-accent);color:#162229;border-color:var(--aw-accent)}
#aw-digital .console-row:hover{transform:translateY(-4px);border-color:var(--aw-accent);background:#202d33}
#aw-digital .console-row:first-child:hover{background:#bdd3dc}
#aw-digital .od-product-mark{font:500 20px var(--od-mono);letter-spacing:-.1em;display:grid;place-items:center;width:44px;height:44px;border:1px solid #536a75;color:var(--aw-accent);border-radius:10px;margin-bottom:30px}
#aw-digital .console-row:first-child .od-product-mark{color:#162229;border-color:#7899a8}
#aw-digital .console-row .od-product-mark-original{border:0;border-radius:0}
#aw-digital .od-product-logo{display:block;width:44px;height:44px;object-fit:contain}
#aw-digital .console-row-name{font-size:clamp(22px,2.1cqw,30px);font-weight:500;letter-spacing:-.055em;line-height:1.13;margin-bottom:15px;max-width:100%;overflow-wrap:anywhere}
#aw-digital .aw-domain{font-size:12px;color:var(--aw-muted);line-height:1.7}
#aw-digital .console-row>.aw-domain{max-width:33ch;flex:1}
#aw-digital .console-row:first-child .aw-domain{color:#334d59}
#aw-digital .console-row-meta{width:100%;display:flex;justify-content:space-between;gap:12px;border-top:1px solid #35454d;margin-top:29px;padding-top:15px;font-size:10px;color:var(--aw-muted)}
#aw-digital .console-row:first-child .console-row-meta{border-color:#7899a8;color:#334d59}
#aw-digital .metric-chip{font:400 11px/1.5 var(--od-mono);color:var(--aw-accent)}
#aw-digital .console-row:first-child .metric-chip{color:#162229}
#aw-digital .status-pill{font-size:10px;white-space:nowrap}
#aw-digital .console-row h2 a::after{content:'↗';position:absolute;right:26px;top:30px;font:400 22px Arial,sans-serif}
#aw-digital .console-row h2 a::before{content:'';position:absolute;inset:0;border-radius:8px}
#aw-digital .aw-modules{display:flex;gap:32px;align-items:center;justify-content:space-between;padding:25px 0 31px}
#aw-digital .aw-modules .aw-kicker{font-size:10px;flex-shrink:0}
#aw-digital .aw-modules ul{display:flex;flex-wrap:wrap;list-style:none;gap:24px;margin:0;padding:0;color:var(--aw-soft);font-size:11px}
#aw-digital .aw-modules li::before{content:'+';margin-right:12px;color:var(--aw-accent)}
#aw-digital .tech-strip-inner{padding:56px 0 60px;border-top:1px solid var(--aw-line)}
#aw-digital .tech-strip-inner>.aw-kicker{font-family:var(--od-sans);font-size:35px;letter-spacing:-.05em;line-height:1.2;text-transform:none;color:var(--aw-ink);font-weight:400;margin-bottom:30px}
#aw-digital .research-strip-grid{display:grid;grid-template-columns:1fr 1fr;gap:28px}
#aw-digital .strip-card{min-width:0}
#aw-digital .od-research-art{height:248px;position:relative;overflow:hidden;border-radius:7px;border:1px solid var(--aw-line);background:#162126;margin-bottom:24px}
#aw-digital .od-research-art svg{display:block;width:100%;height:100%}
#aw-digital .strip-card-head{display:flex;justify-content:space-between;gap:12px;font:400 10px var(--od-mono);color:var(--aw-muted);margin-bottom:17px}
#aw-digital .strip-card-head>span:first-child{color:var(--aw-accent)}
#aw-digital .strip-card h3{font-size:28px;letter-spacing:-.05em;font-weight:400;line-height:1.2;max-width:26ch;margin-bottom:14px}
#aw-digital .strip-card .aw-domain{font-size:11px;margin-bottom:13px}
#aw-digital .aw-desc{font-size:13px;line-height:1.8;color:var(--aw-soft)}
#aw-digital .strip-card .aw-detail{display:inline-flex;align-items:center;min-height:44px;margin-top:14px;font-size:12px;color:var(--aw-accent)}
#aw-digital .strip-card:hover .od-research-art{border-color:#718e9b}
#aw-digital .tech-home-cta-panel{display:grid;grid-template-columns:1.1fr 1fr;align-items:center;gap:65px;padding:45px;background:var(--aw-panel);border:1px solid var(--aw-line);border-radius:8px;margin-bottom:60px;position:relative}
#aw-digital .tech-home-cta-panel h2{font-size:clamp(30px,3.4cqw,46px);font-weight:400;line-height:1.1;letter-spacing:-.06em;max-width:16ch}
#aw-digital .tech-home-cta-panel p{font-size:13px;color:var(--aw-soft)}
#aw-digital .tech-home-cta-panel .hero-cta{margin-top:20px}
#aw-digital .lab-footer{border-top:1px solid var(--aw-line);padding-top:38px}
#aw-digital .footer-grid{display:grid;grid-template-columns:1.3fr .65fr .65fr 1fr;gap:30px;padding-bottom:38px}
#aw-digital .footer-brand-name{font-size:22px;letter-spacing:-1px}
#aw-digital .footer-brand>p{font-size:11px;color:var(--aw-muted);max-width:27ch;margin-top:18px}
#aw-digital .footer-col{display:flex;align-items:flex-start;flex-direction:column;gap:8px;font-size:11px;color:var(--aw-soft)}
#aw-digital .footer-col .aw-kicker{font-size:10px;margin-bottom:10px}
#aw-digital .footer-col a:hover{text-decoration:underline;text-underline-offset:4px}
#aw-digital .footer-bottom{border-top:1px solid var(--aw-line);display:flex;justify-content:space-between;gap:24px;padding:20px 0;font-size:9px;color:var(--aw-muted)}
#aw-digital .aw-page-head{display:grid;grid-template-columns:1fr 1fr;align-items:end;gap:60px;padding:62px 0 52px;border-bottom:1px solid var(--aw-line)}
#aw-digital .aw-page-head h1{font-size:clamp(60px,7.6cqw,106px);letter-spacing:-.075em;line-height:1.02;font-weight:400;margin-top:16px}
#aw-digital .aw-page-head>p{font-size:14px;color:var(--aw-soft);max-width:53ch}
#aw-digital .catalogo-gruppo{padding:40px 0 48px;border-bottom:1px solid var(--aw-line)}
#aw-digital .aw-group-head{display:flex;align-items:baseline;gap:30px;margin-bottom:28px}
#aw-digital .aw-group-head h2{font-size:23px;font-weight:400;letter-spacing:-.04em}
#aw-digital .aw-group-head p{font-size:12px;color:var(--aw-muted)}
#aw-digital .catalogo-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}
#aw-digital .catalogo-card{min-width:0;background:var(--aw-panel);border:1px solid var(--aw-line);border-radius:8px;padding:30px;display:flex;flex-direction:column;align-items:stretch}
#aw-digital .catalogo-card header{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:20px}
#aw-digital .catalogo-card h3{font-size:34px;font-weight:400;letter-spacing:-.06em;line-height:1.1;overflow-wrap:anywhere}
#aw-digital .catalogo-card .aw-domain{margin-bottom:20px}
#aw-digital .catalogo-card ul{list-style:none;display:grid;gap:9px;margin:25px 0 0;padding:0;font-size:12px;color:var(--aw-soft)}
#aw-digital .catalogo-card li{border-left:2px solid var(--aw-accent);padding-left:13px}
#aw-digital .catalogo-card-foot{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-top:28px;font:400 11px var(--od-mono);color:var(--aw-muted)}
#aw-digital .catalogo-card-foot .hero-cta{margin:0}
#aw-digital [data-prodotti="disponibili"]{grid-template-columns:1fr}
#aw-digital [data-prodotti="disponibili"] .catalogo-card{position:relative;padding:40px;padding-right:34%;background:linear-gradient(110deg,#273b44,#1b262b 70%);overflow:hidden}
#aw-digital .od-catalog-logo{position:absolute;right:6%;top:50%;transform:translateY(-50%);width:clamp(140px,15cqw,210px);height:auto;object-fit:contain;pointer-events:none}
#aw-digital [data-prodotti="disponibili"] h3{font-size:64px;color:var(--aw-accent)}
#aw-digital .aw-research-head{grid-template-columns:1.2fr 1fr}
#aw-digital .aw-research-head h1{font-size:clamp(38px,4.9cqw,67px);line-height:1.05}
#aw-digital .officina-pipeline{padding:40px 0 50px;border-bottom:1px solid var(--aw-line)}
#aw-digital .officina-pipeline h2{font-size:30px;font-weight:400;letter-spacing:-.04em;line-height:1.2;margin:17px 0 13px}
#aw-digital .officina-pipeline>p:not(.aw-kicker){font-size:13px;color:var(--aw-soft)}
#aw-digital .innovation-process{display:grid;grid-template-columns:repeat(5,1fr);gap:24px;list-style:none;padding:0;margin:32px 0 0}
#aw-digital .innovation-process li{border-top:1px solid var(--aw-accent);padding-top:17px}
#aw-digital .innovation-process span{font:400 13px var(--od-mono);color:var(--aw-accent)}
#aw-digital .innovation-process h3{font-size:13px;font-weight:500;line-height:1.5;margin:15px 0 10px}
#aw-digital .innovation-process p{font-size:11px;color:var(--aw-muted)}
#aw-digital .officina-experiments{padding:42px 0}
#aw-digital .officina-experiments>h2{font-size:38px;font-weight:400;letter-spacing:-.045em;line-height:1.2;margin:12px 0 32px}
#aw-digital .research-card{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.5fr);gap:42px;padding:32px 0;border-top:1px solid var(--aw-line)}
#aw-digital .research-card>aside{display:flex;gap:20px;align-items:baseline;flex-wrap:wrap;align-content:start}
#aw-digital .research-card .od-research-art{width:100%;height:205px;margin:0}
#aw-digital .research-card h3{font-size:30px;font-weight:400;letter-spacing:-.05em;line-height:1.2;margin-bottom:12px}
#aw-digital .research-card .aw-desc{margin-top:17px}
#aw-digital .research-card ul{font-size:12px;color:var(--aw-soft);padding-left:17px;margin:20px 0}
#aw-digital .research-relation{font-size:12px;color:var(--aw-muted);padding-left:14px;border-left:1px solid var(--aw-accent)}
#aw-digital .contact-content{display:grid;grid-template-columns:1fr 1fr;gap:70px;padding:65px 0}
#aw-digital .contact-content h1{font-size:clamp(48px,6cqw,82px);font-weight:400;line-height:1.02;letter-spacing:-.065em;max-width:9ch;margin:24px 0 27px}
#aw-digital .contact-content p{font-size:14px;color:var(--aw-soft)}
#aw-digital .contact-method{display:block;margin-top:42px;padding-top:22px;border-top:1px solid var(--aw-line)}
#aw-digital .contact-method strong{font-weight:500;display:block;margin-bottom:10px}
#aw-digital .contact-method span{font-size:12px;color:var(--aw-muted)}
#aw-digital .contact-form{background:var(--aw-panel);border:1px solid var(--aw-line);padding:30px;border-radius:8px}
#aw-digital .form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
#aw-digital .form-group{display:block;font-size:11px;color:var(--aw-soft);margin-bottom:22px}
#aw-digital .form-group :is(input,select,textarea){display:block;width:100%;min-width:0;margin-top:9px;border:1px solid var(--aw-line);background:var(--aw-bg);color:var(--aw-ink);padding:12px;border-radius:4px;font-size:13px;min-height:46px}
#aw-digital .form-group textarea{resize:vertical;min-height:130px}
#aw-digital .form-group ::placeholder{color:var(--aw-muted);opacity:1}
#aw-digital .aw-form-result{font-size:12px!important;margin-top:20px!important;color:var(--aw-accent)!important}
#aw-digital[data-density=compact] .officina-hero-visual{max-height:490px}
#aw-digital[data-density=compact] .t-display{font-size:clamp(44px,5cqw,70px)}
@container(max-width:1050px){
  #aw-digital .nav-menu{gap:22px}
  #aw-digital .nav-brand img{width:40px}
  #aw-digital .tech-dashboard{padding-top:35px}
  #aw-digital .t-display{font-size:5.85cqw}
  #aw-digital .tech-hero-copy{padding-bottom:44px}
  #aw-digital .officina-sculpture{min-height:340px}
  #aw-digital .officina-hero-visual figcaption{padding-left:15px}
  #aw-digital .officina-stage-top{padding-left:15px}
  #aw-digital .console-row{padding:23px 20px}
  #aw-digital .console-row-meta{flex-wrap:wrap;gap:6px}
  #aw-digital .catalogo-card header{flex-wrap:wrap;gap:12px}
  #aw-digital .catalogo-card h3{font-size:30px}
  #aw-digital [data-prodotti="disponibili"] .catalogo-card{padding:30px;padding-right:30%}
  #aw-digital .od-catalog-logo{right:4%;width:18cqw}
  #aw-digital .tech-home-cta-panel{padding:32px;gap:40px}
  #aw-digital .contact-content{gap:35px}
  #aw-digital .form-row{grid-template-columns:1fr;gap:0}
  #aw-digital .aw-modules{align-items:baseline;gap:25px}
  #aw-digital .aw-modules ul{gap:9px 20px}
}
@container(max-width:780px){
  /* 07/09/2026 — il menu aperto era IN FLUSSO: il <button> e' l'ultimo figlio di
     .nav-inner, quindi le voci si infilavano FRA il logo e il pulsante, che finiva
     sotto di esse. Ora e' un pannello sovrapposto sotto la barra, come su .it, e il
     pulsante resta fermo in alto a destra. Via anche flex-wrap: senza il menu in
     flusso non c'e' piu' niente da mandare a capo. */
  #aw-digital .nav-inner{min-height:85px;gap:0;position:relative}
  #aw-digital .nav-toggle{display:flex}
  /* Ancorato a .nav-inner e non a .nav: cosi' le voci restano allineate al logo da
     sole, qualunque margine .nav-inner assuma alle varie larghezze — non c'e' nessun
     valore da tenere sincronizzato a mano. */
  #aw-digital .nav-menu{position:absolute;top:100%;left:0;right:0;z-index:20;display:flex;flex-direction:column;align-items:stretch;gap:0;padding:14px 0 20px;background:var(--aw-panel);border:1px solid var(--aw-line);border-top:0;border-radius:0 0 6px 6px;box-shadow:0 18px 40px rgba(0,0,0,.45)}
  #aw-digital .nav-menu:not(.active){display:none}
  #aw-digital .nav-menu a{padding:0 15px;border-bottom:1px solid var(--aw-line)}
  #aw-digital .nav-menu a:last-of-type{border-bottom:0}
  #aw-digital .nav-menu a.accent{margin-left:0}
  #aw-digital .tech-dashboard{grid-template-columns:1fr 1fr;column-gap:10px}
  #aw-digital .tech-dashboard>.aw-kicker{grid-column:1/-1;margin-bottom:27px}
  #aw-digital .officina-hero-visual{grid-row:2;margin-bottom:35px}
  #aw-digital .officina-stage-top{font-size:8px;padding:0}
  #aw-digital .officina-sculpture{min-height:260px}
  #aw-digital .officina-hero-visual figcaption{padding-left:0;font-size:10px}
  #aw-digital .t-display{font-size:6.05cqw}
  #aw-digital .aw-intro-copy>p{font-size:12px}
  #aw-digital .hero-cta{gap:18px}
  #aw-digital .btn{gap:18px;font-size:11px}
  #aw-digital .officina-products{gap:10px}
  #aw-digital .console-row{padding:18px 15px}
  #aw-digital .console-row-name{font-size:23px}
  #aw-digital .aw-domain{font-size:11px}
  #aw-digital .od-product-mark{margin-bottom:24px}
  #aw-digital .console-row h2 a::after{right:16px;top:23px;font-size:18px}
  #aw-digital .od-research-art{height:200px}
  #aw-digital .strip-card h3{font-size:25px}
  #aw-digital .research-strip-grid{gap:22px}
  #aw-digital .footer-grid{grid-template-columns:1.3fr 1fr;gap:32px}
  #aw-digital .tech-home-cta-panel{gap:25px;padding:27px}
  #aw-digital .aw-page-head{gap:30px;padding:42px 0}
  #aw-digital .aw-page-head>p{font-size:12px}
  #aw-digital .catalogo-grid{grid-template-columns:1fr}
  #aw-digital .innovation-process{grid-template-columns:repeat(3,1fr)}
  #aw-digital .research-card{gap:25px}
  #aw-digital .research-card h3{font-size:25px}
}
@container(max-width:580px){
  #aw-digital .container{padding:0 22px}
  #aw-digital .brand-name{font-size:23px}
  #aw-digital .nav-brand{gap:11px}
  #aw-digital .tech-dashboard{display:block;padding-top:32px}
  #aw-digital .tech-dashboard>.aw-kicker{font-size:9px;letter-spacing:.04em;gap:10px;margin-bottom:26px}
  #aw-digital .tech-dashboard>.aw-kicker::before{width:16px}
  #aw-digital .t-display,#aw-digital[data-density=compact] .t-display{font-size:clamp(41px,11.15cqw,61px);letter-spacing:-.07em;line-height:1.04}
  #aw-digital .tech-hero-copy{padding-bottom:20px}
  #aw-digital .aw-intro-copy{margin-top:24px}
  #aw-digital .aw-intro-copy>p{font-size:13px;max-width:42ch}
  #aw-digital .hero-cta{margin-top:24px;gap:24px}
  #aw-digital .btn{font-size:12px}
  #aw-digital .officina-hero-visual{margin-top:26px;margin-bottom:30px}
  #aw-digital .officina-stage-top{font-size:9px}
  #aw-digital .officina-sculpture{height:330px;min-height:0;flex:none}
  #aw-digital .officina-axis{left:0;bottom:20px}
  #aw-digital .officina-hero-visual figcaption{font-size:11px;gap:8px}
  #aw-digital .officina-controls button{min-height:44px;padding:9px 11px}
  #aw-digital .lab-console{padding-top:18px}
  #aw-digital .officina-products{grid-template-columns:1fr;gap:13px}
  #aw-digital .console-row{padding:24px}
  #aw-digital .console-row-name{font-size:30px;max-width:90%}
  #aw-digital .console-row .aw-domain{font-size:12px;max-width:32ch}
  #aw-digital .od-product-mark{margin-bottom:25px}
  #aw-digital .console-row h2 a::after{top:29px;right:26px;font-size:22px}
  #aw-digital .console-row-meta{margin-top:25px;flex-wrap:nowrap}
  #aw-digital .aw-modules{display:block;padding:25px 0 28px}
  #aw-digital .aw-modules ul{display:block;margin-top:12px}
  #aw-digital .aw-modules li{padding:4px 0}
  #aw-digital .tech-strip-inner{padding:34px 0 37px}
  #aw-digital .tech-strip-inner>.aw-kicker{font-size:30px;margin-bottom:25px}
  #aw-digital .research-strip-grid{grid-template-columns:1fr;gap:36px}
  #aw-digital .od-research-art{height:215px}
  #aw-digital .strip-card h3{font-size:27px}
  #aw-digital .tech-home-cta-panel{display:block;padding:27px 24px;margin-bottom:40px}
  #aw-digital .tech-home-cta-panel h2{font-size:35px;margin-bottom:24px}
  #aw-digital .tech-home-cta-panel .hero-cta{gap:20px}
  #aw-digital .lab-footer{padding-top:30px}
  #aw-digital .footer-grid{grid-template-columns:1fr 1fr;gap:27px 20px}
  #aw-digital .footer-brand{grid-column:1/-1}
  #aw-digital .footer-col:last-child{grid-column:1/-1}
  #aw-digital .footer-bottom{display:block;font-size:9px}
  #aw-digital .footer-bottom>.aw-online{display:block;margin-bottom:15px}
  #aw-digital .aw-page-head{display:block;padding:36px 0}
  #aw-digital .aw-page-head h1{font-size:64px;margin:15px 0 27px}
  #aw-digital .aw-page-head>p{font-size:13px}
  #aw-digital .aw-research-head h1{font-size:42px}
  #aw-digital .aw-group-head{display:block}
  #aw-digital .aw-group-head p{margin-top:10px}
  #aw-digital .catalogo-card,#aw-digital [data-prodotti="disponibili"] .catalogo-card{padding:25px}
  #aw-digital .od-catalog-logo{position:static;transform:none;width:54px;height:54px;order:-1;margin-bottom:22px}
  #aw-digital [data-prodotti="disponibili"] h3{font-size:43px}
  #aw-digital .catalogo-card header{gap:12px}
  #aw-digital .catalogo-card h3{font-size:32px}
  #aw-digital .catalogo-card-foot{align-items:flex-start;flex-direction:column}
  #aw-digital .catalogo-card-foot .hero-cta{gap:24px}
  #aw-digital .officina-pipeline h2{font-size:29px}
  #aw-digital .innovation-process{grid-template-columns:1fr;gap:20px}
  #aw-digital .innovation-process li{display:grid;grid-template-columns:28px 1fr;column-gap:12px}
  #aw-digital .innovation-process h3{margin:0 0 8px}
  #aw-digital .innovation-process p{grid-column:2}
  #aw-digital .officina-experiments>h2{font-size:34px}
  #aw-digital .research-card{grid-template-columns:1fr;gap:22px}
  #aw-digital .research-card .od-research-art{height:210px}
  #aw-digital .contact-content{grid-template-columns:1fr;gap:32px;padding:36px 0}
  #aw-digital .contact-content h1{font-size:60px}
  #aw-digital .contact-form{padding:22px}
  #aw-digital .form-group :is(input,select,textarea){font-size:16px}
}
@media(prefers-reduced-motion:reduce){#aw-digital *,#aw-digital *::before,#aw-digital *::after{transition:none!important;animation:none!important;scroll-behavior:auto!important}}

#aw-digital .strip-card[data-esperimento]::before,#aw-digital .research-card-head::after {content:none}

#aw-digital .strip-card[data-esperimento="design-generativo"]::before, #aw-digital [data-esperimento="design-generativo"] .research-card-head::after {content:"";display:block;width:100%;height:248px;border:1px solid var(--rule);border-radius:7px;background:#162126 url(../img/officina/design-generativo.svg) center/100% 100% no-repeat;margin-bottom:24px}

#aw-digital .strip-card[data-esperimento="visualizzazione-immersiva"]::before, #aw-digital [data-esperimento="visualizzazione-immersiva"] .research-card-head::after {content:"";display:block;width:100%;height:248px;border:1px solid var(--rule);border-radius:7px;background:#162126 url(../img/officina/visualizzazione-immersiva.svg) center/100% 100% no-repeat;margin-bottom:24px}

#aw-digital .research-card-head::after {height:205px!important;margin:0!important}

/* Le altre quattro linee di ricerca completano la serie Officina Digital.
   Illustrazioni concettuali generate, associate allo slug: nessun dato API duplicato. */
#aw-digital [data-esperimento="analisi-dati"] .research-card-head::after,
#aw-digital [data-esperimento="materiali-basso-impatto"] .research-card-head::after,
#aw-digital [data-esperimento="sensoristica-iot"] .research-card-head::after,
#aw-digital [data-esperimento="costruzione-additiva"] .research-card-head::after {
  content:""; display:block; width:100%; border:1px solid var(--rule); border-radius:7px;
  background-color:#162126; background-position:center; background-size:contain; background-repeat:no-repeat;
}
#aw-digital [data-esperimento="analisi-dati"] .research-card-head::after {background-image:url(../img/officina/analisi-dati.webp)}
#aw-digital [data-esperimento="materiali-basso-impatto"] .research-card-head::after {background-image:url(../img/officina/materiali-basso-impatto.webp)}
#aw-digital [data-esperimento="sensoristica-iot"] .research-card-head::after {background-image:url(../img/officina/sensoristica-iot.webp)}
#aw-digital [data-esperimento="costruzione-additiva"] .research-card-head::after {background-image:url(../img/officina/costruzione-additiva.webp)}

/* L'illustrazione SCELTA DAL PANNELLO, quando c'e'.
   Le regole per slug qui sopra restano, e sono il ripiego: valgono finche' la scheda non ha
   una propria `immagine` in banca dati. Il 10/09/2026 quel legame implicito si e' rotto da
   solo — bastava correggere il nome di un esperimento perche' lo slug cambiasse e
   l'illustrazione sparisse — e questa e' la sostituzione esplicita.
   ⚠️ Stesso pseudo-elemento e stesse misure delle regole per slug: l'aspetto della scheda
   non cambia, cambia solo DA DOVE arriva l'immagine. Il valore lo porta una proprieta'
   personalizzata scritta dalla pagina, perche' un foglio di stile non puo' leggere l'API. */
#aw-digital .research-card[data-illustrazione] .research-card-head::after {
  content:""; display:block; width:100%; border:1px solid var(--rule); border-radius:7px;
  background-color:#162126; background-position:center; background-size:contain; background-repeat:no-repeat;
  background-image:var(--illustrazione);
}
#aw-digital .officina-hero-visual {margin-top:0}
#aw-digital .footer-col-title,#aw-digital .page-kicker {font:400 10px/1.6 var(--od-mono);letter-spacing:.075em;color:var(--aw-muted)}
#aw-digital .footer-col-title {margin-bottom:10px}
/* Queste due righe annullano il pannello mobile di base.css, che scatta a 860px mentre
   .tech collassa a 780px: fra le due soglie il menu deve restare la barra orizzontale.
   ⚠️ Erano SENZA condizione e vincevano ovunque perche' vengono dopo nel foglio: sotto i
   780px rimettevano il menu in flusso e allargavano il pulsante, disfacendo il blocco
   mobile qui sopra. La riga sul toggle serviva al vecchio pulsante testuale «Menu»;
   l'hamburger ha una larghezza sua di 32px, quindi qui non va piu' toccata. */
/* 🔑 «not (max-width:780px)» e NON «min-width:781px»: fra i due c'e' un buco di UN PIXEL.
   La larghezza di un contenitore e' un numero REALE, non un intero — una barra di
   scorrimento, uno zoom del browser o un rapporto di pixel non intero danno 780,5 — e a
   780,5 non si applicherebbe nessuno dei due blocchi: niente pulsante (che il blocco
   mobile non ha acceso) e niente barra (che base.css ha gia' nascosto, essendo la vista
   sotto gli 860). Misurato: il menu finiva a y=800, fuori schermo, e non c'era modo di
   aprirlo. «not (max-width:780px)» e' l'esatto complemento del blocco mobile: fra i due
   non passa nessun valore. Trovato in revisione; presidiato da scripts/sonda-menu.js,
   che ora misura anche una larghezza frazionaria. */
@container not (max-width:780px){
  #aw-digital .nav-menu {position:static;width:auto;box-shadow:none;border:0;background:none;transform:none;opacity:1;visibility:visible}
}
#aw-digital .contact-content {max-width:1336px;padding-left:0;padding-right:0;width:calc(100% - 9vw)}
#aw-digital .contact-method-title {font-size:15px;font-weight:500;margin-bottom:10px;display:block}
#aw-digital .contact-method-desc {font-size:12px;color:var(--aw-muted)}
#aw-digital .contact-form .form-row {margin-bottom:0}
#aw-digital .catalogo-modules {grid-template-columns:1fr}
#aw-digital .research-outputs {display:block;list-style:disc;line-height:1.8}
#aw-digital .research-outputs li {display:list-item;font-size:12px}
#aw-digital .lab-footer {margin:0 auto;max-width:calc(1480px - 9vw);width:91%}
#aw-digital .lab-footer .container {padding-left:0;padding-right:0}
#aw-digital .tech-strip-inner {margin:0 auto;max-width:calc(1480px - 9vw);width:91%}
#aw-digital .tech-strip-inner.container {padding-left:0;padding-right:0}
#aw-digital .lab-console-head .t-mono {font-size:10px}
#aw-digital .officina-sculpture noscript img {width:100%;height:auto}
@container(max-width:780px) {
 #aw-digital .nav-inner {height:auto}
 /* Il padding del pannello sta ora in un posto solo, nel blocco mobile piu' sopra:
    la riga che stava qui vinceva per ordine e rendeva MORTO il valore dichiarato la',
    con l'effetto che modificarlo non cambiava niente. Rilevato in revisione. */
 #aw-digital .strip-card[data-esperimento]::before {height:200px}
}
@container(max-width:580px) {
 #aw-digital .contact-content,#aw-digital .lab-footer,#aw-digital .tech-strip-inner {width:calc(100% - 44px)}
 #aw-digital .strip-card[data-esperimento]::before {height:215px}
 #aw-digital .research-card-head::after {height:210px!important}
 #aw-digital .nav-inner {padding:0; margin:0 22px}
}

/* Raccordi con i componenti condivisi: annullano le sole regole legacy residue. */
#aw-digital .lab-console {padding:18px 0 0}
#aw-digital .aw-modules ul {flex-direction:row}
#aw-digital .aw-modules li {font:400 11px/1.65 var(--od-sans);padding:0}
#aw-digital .console-row-name {margin-bottom:15px;font-family:var(--od-sans)}
#aw-digital .console-row .status-pill {color:var(--aw-muted)}
#aw-digital .console-row:first-child .status-pill {color:#334d59}
#aw-digital .console-row-meta {margin-bottom:0}
#aw-digital .nav-inner {width:91%;max-width:calc(1480px - 9vw);padding:0}
#aw-digital .nav-link {font-weight:400}
#aw-digital .footer-brand-mode {display:block;font:400 10px/1.4 var(--od-mono);margin-top:4px;letter-spacing:.16em}
#aw-digital .footer-brand-name {font-weight:400}
#aw-digital .footer-status-dot {width:5px;height:5px;background:var(--accent);box-shadow:none;animation:none}
#aw-digital .officina-stage-top span:last-child {font-size:22px;line-height:1}
#aw-digital .footer-grid {column-gap:30px}
#aw-digital .tech-dashboard>.aw-kicker {font-weight:400}
@container(max-width:580px) {
 #aw-digital .nav-inner {width:calc(100% - 44px);margin:auto}
 #aw-digital .aw-modules li {padding:4px 0}
}

#aw-digital .console-row {gap:0}
#aw-digital .console-row:last-of-type {border-bottom:1px solid #304047}
#aw-digital .aw-modules li::before {position:static}
#aw-digital .catalogo-modules li,#aw-digital .research-outputs li {font-family:var(--od-sans)}
#aw-digital .strip-card-head .status-pill {font-family:var(--od-mono)}
#aw-digital .contact-method {border-width:1px 0 0;padding:22px 0 0}
#aw-digital .contact-info>.t-label {font:400 11px/1.6 var(--od-mono);letter-spacing:.075em;color:var(--aw-muted)}
#aw-digital .contact-content {align-items:start}
#aw-digital .footer-grid {padding-bottom:38px}
html[data-site="tech"] {background:#121a1e}
@container(max-width:580px) {
 #aw-digital .footer-status {display:block;margin-bottom:15px}
 #aw-digital .footer-copy {display:block;line-height:1.8}
}

/* === .tech AREA RISERVATA (spec 2026-09-23) ===
   tech/area.php e tech/condizioni.php. Riusano il modulo dei contatti (.contact-form, .form-row,
   .form-group, .esca) e aggiungono solo cio' che manca: i due pannelli affiancati, i messaggi, le
   schede dei software, il testo delle condizioni da leggere per intero. Colori solo dalle
   variabili di #aw-digital: nessuna tinta nuova. */
#aw-digital .area{padding:0 0 80px}
#aw-digital .area-pannelli{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:40px;align-items:start}
#aw-digital .area-pannello{margin-top:24px}
#aw-digital .area-pannello h2,#aw-digital .area-messaggio h2{margin-bottom:16px}
#aw-digital .area-messaggio{background:var(--aw-panel);border:1px solid var(--aw-line);border-radius:8px;padding:30px;max-width:720px;margin-top:40px}
#aw-digital .area-messaggio p{margin-bottom:18px;color:var(--aw-soft)}
#aw-digital .area-stato{margin-top:32px;color:var(--aw-muted)}
#aw-digital .area-stato--errore{color:var(--aw-accent)}
#aw-digital .area-casella{display:flex;gap:10px;align-items:flex-start;font-size:13px;color:var(--aw-soft);margin:0 0 16px}
/* La spunta NON e' un campo di testo: `[data-site="tech"] .contact-form input` le dava width:100% e la
   stirava in una barra larga meta' colonna (misurato: 257x13px) con il segno al centro. Qui torna alla
   sua misura; il margine la allinea alla prima riga del testo. Sotto #aw-digital per battere quella regola. */
#aw-digital .area-casella input{width:auto;flex:none;margin:4px 0 0;padding:0}
/* Le liste a discesa: stesso rettangolo dei campi di testo, ma la freccia non e' quella del sistema.
   ⚠️ Disegnata con DUE sfumature e non con un'immagine: la CSP dice img-src 'self', e un'immagine incorporata
   sparirebbe in produzione pur vedendosi in locale. Solo nell'area: la pagina Contatti non cambia. */
#aw-digital .area select{appearance:none;-webkit-appearance:none;padding-right:36px;background-image:linear-gradient(45deg,transparent 50%,var(--aw-muted) 50%),linear-gradient(135deg,var(--aw-muted) 50%,transparent 50%);background-position:calc(100% - 20px) 50%,calc(100% - 15px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat}
#aw-digital .area-informativa{font-size:12px;color:var(--aw-muted);margin-bottom:18px}
#aw-digital .area-informativa a,#aw-digital .area-piede a{text-decoration:underline;text-underline-offset:3px}
#aw-digital .area-sorgenti a{text-decoration:underline;text-underline-offset:3px}
#aw-digital .area-errore-modulo{font-size:12px;color:var(--aw-accent);margin-bottom:16px}
#aw-digital .area-software-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:24px;margin-top:40px}
#aw-digital .area-scheda{background:var(--aw-panel);border:1px solid var(--aw-line);border-radius:8px;padding:26px;display:flex;flex-direction:column;gap:10px}
#aw-digital .area-scheda--evidenza{border-color:var(--aw-accent)}
#aw-digital .area-versione{font-size:12px;color:var(--aw-accent)}
#aw-digital .area-forma{border-top:1px solid var(--aw-line);padding-top:12px;display:flex;flex-direction:column;gap:8px;align-items:flex-start}
#aw-digital .area-hash{font-size:11px;color:var(--aw-muted);overflow-wrap:anywhere}
#aw-digital .area-piede{font-size:12px;color:var(--aw-muted);margin-top:auto}
#aw-digital .area-condizioni-testo{max-height:420px;overflow:auto;border:1px solid var(--aw-line);border-radius:4px;padding:18px;background:var(--aw-bg);margin:14px 0 18px}
#aw-digital .area-condizioni-testo p,#aw-digital .area-condizioni-pagina p{margin:0 0 12px;color:var(--aw-soft)}
#aw-digital .area-condizioni-pagina{max-width:780px;margin-top:40px}
#aw-digital .area-azioni{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
#aw-digital .area-pericolo{color:var(--aw-accent)}
@container(max-width:760px){
  #aw-digital .area-pannelli{grid-template-columns:1fr}
}

/* ── Rassegna AI e BIM in evidenza (10/10/2026) ───────────────────────────────────────────────
   Tre pezzi, tutti solo su .tech e solo se esiste un'edizione (aw_rassegna() in partials/site.php):
   la riga sotto i pulsanti dell'hero, la scheda sotto l'hero con il segnale «Nuova», e il segnale stesso.
   Stessi colori del resto della home (--aw-*); nessun colore nuovo. */
#aw-digital .tech-rassegna-riga{display:inline-flex;align-items:center;gap:10px;margin-top:22px;padding:7px 14px;border:1px solid var(--aw-line);border-radius:999px;font-family:var(--od-mono);font-size:12px;letter-spacing:.02em;color:var(--aw-soft);text-decoration:none;transition:border-color .15s,color .15s}
#aw-digital .tech-rassegna-riga:hover,#aw-digital .tech-rassegna-riga:focus-visible{border-color:var(--aw-accent);color:var(--aw-ink)}
#aw-digital .tech-rassegna-punto{width:8px;height:8px;border-radius:50%;background:var(--aw-accent);box-shadow:0 0 0 4px rgba(168,197,208,.18);flex:none}
#aw-digital .tech-home-cta--rassegna .tech-home-cta-panel{border-color:rgba(168,197,208,.45);border-left:3px solid var(--aw-accent)}
#aw-digital .tech-rassegna-nuova{display:inline-block;margin-left:12px;padding:3px 9px;border-radius:4px;background:var(--aw-accent);color:var(--aw-bg);font-family:var(--od-mono);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;vertical-align:middle;letter-spacing:.08em}
