/*
Theme Name: Lawyer Base Child
Theme URI: https://www.officinanotarile.it
Description: Child theme del tema Goodlayers "Lawyer Base". Permette di integrare o sovrascrivere funzioni, template e stili del tema padre senza modificarne i file originali. Vedi agents.md per la guida completa ai punti di estensione.
Author: Officina Notarile
Template: lawyerbase/lawyerbase
Version: 1.9.1
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: layb-child
*/

/*------------------------------------------------------------------
Il CSS del tema padre viene caricato separatamente in functions.php
(handle "lawyerbase-parent-style"), PRIMA di questo file: qui sotto
vanno solo le regole aggiuntive o di override.
-------------------------------------------------------------------*/

/*==================================================================
R1 — Sistema di pulsanti CTA riutilizzabili
====================================================================
Due FAMIGLIE di bottoni, tutte sulla stessa base .layb-cta (forma +
tipografia, look di MariaVittoria: font Lato, testo non maiuscolo a
peso normale, angoli 3px). Il blu #00387c e' quello ufficiale del
brand (dashboard, style-custom.css: logo, menu, form); #0642b1 e'
l'accent delle CTA.

COME SI USANO — nell'HTML degli item "Content"/snippet del page
builder (il builder Goodlayers non espone un campo "classe CSS",
ma dentro gli item Content l'HTML si scrive a mano):

  CTA della HERO (fondo blu; si invertono in hover, SENZA bordo):
    <a class="layb-cta layb-cta--white"  href="/contatti/">Contattaci</a>
    <a class="layb-cta layb-cta--accent" href="/servizi/">Scopri i servizi</a>

  BOTTONI GENERICI (pieni a riposo; in hover si "svuotano" prendendo il
  colore del fondo, con un bordo a contrasto che li tiene definiti).
  Si sceglie la variante in base allo sfondo:
    <a class="layb-cta layb-cta--on-light" href="...">Bottone</a>   (sfondo chiaro)
    <a class="layb-cta layb-cta--on-dark"  href="...">Bottone</a>   (sfondo scuro)

Aggiungi layb-cta--block per farla larga quanto il contenitore
(utile in sidebar e su mobile):

    <a class="layb-cta layb-cta--on-light layb-cta--block" href="...">...</a>

NOTA: Convenzione dei nomi (BEM): "layb-cta" e' il BLOCCO (lo stile
   base), "layb-cta--white" e' un MODIFICATORE (una variante). Si
   mettono SEMPRE insieme: class="layb-cta layb-cta--white".

NOTA: Nomi semantici e retro-compatibilita'. --primary e' alias di
   --on-light (primaria piena su chiaro); --secondary e' la secondaria
   BORDATA su chiaro (coppia con --primary, es. i doppi CTA di Servizi);
   --bluette (vecchio nome hero) e' alias di --accent. Gli snippet gia' in
   dashboard che usano questi nomi prendono quindi lo stile giusto da soli.
------------------------------------------------------------------*/

/* NOTA: :root = "variabili CSS" (design token). Cambiando qui un valore
   si aggiornano TUTTI i pulsanti in un colpo solo: es. metti
   --layb-cta-radius: 0 per tornare agli angoli vivi come il resto
   del sito, oppure cambia il blu per un futuro restyle del brand. */
:root {
	--layb-cta-primary:       #00387c; /* blu brand ufficiale (dashboard style-custom.css) */
	--layb-cta-primary-hover: #002a5e; /* stesso blu piu' scuro, per l'hover               */
	--layb-cta-on-primary:    #ffffff; /* testo sopra i pulsanti a fondo blu               */
	--layb-cta-accent:        #414141; /* blu accent delle CTA della hero                 */
	--layb-cta-radius:        3px;     /* angoli dei bottoni (e, coerenti, di card e input)*/
	--layb-cta-focus:         #1e73be; /* blu acceso per l'anello di focus                 */
}

/* Base condivisa da tutte le varianti: geometria, tipografia, reset.
   NOTA: Il font NON e' dichiarato di proposito: cosi' il pulsante EREDITA
   il Lato globale impostato in dashboard (body, input...). Una sola fonte
   di verita' per il font, invece di ri-scriverlo qui: era proprio questo
   il difetto di prima (c'era un "Open Sans" che scavalcava il Lato). */
.layb-cta {
	display: inline-block;
	padding: 14px 28px;
	font-size: 18px;
	font-weight: 400;              /* peso normale (scelta approvata), non bold */
	line-height: 1;
	text-align: center;
	text-decoration: none;         /* NOTA: azzera l'eventuale sottolineatura dei link <a> */
	border: 2px solid transparent; /* NOTA: bordo trasparente anche sulle varianti piene: cosi'
	                                     tutte le CTA hanno la STESSA dimensione e, affiancate,
	                                     restano allineate (niente "salto" di 2px). */
	border-radius: var(--layb-cta-radius);
	cursor: pointer;
	transition: background-color .25s ease, color .25s ease, border-color .25s ease;
	/* NOTA: senza questo, ".layb-cta--block" (width:100%) si somma al
	   padding orizzontale sopra (28px per lato, content-box di default) e
	   il bottone sfonda di 56px il bordo del contenitore che lo ospita —
	   stesso identico bug gia' risolto per "a.gdlr-button" piu' avanti in
	   questo file (vedi commento li'). Qui pero' lo mettiamo nella base
	   condivisa, non solo dentro un breakpoint: risolve ORA il biglietto
	   digitale (D13, contenitore stretto 420px) e previene lo stesso
	   sforamento in qualunque altro punto del sito dove ".layb-cta--block"
	   finisse dentro un box stretto. Sicuro anche per le varianti SENZA
	   width esplicito (il caso normale): box-sizing non cambia nulla per
	   un elemento che si dimensiona sul proprio contenuto. */
	box-sizing: border-box;
}

/* NOTA: Specificita' e "drop-in": scrivo i modificatori INSIEME alla base
   (.layb-cta.layb-cta--white) per alzare il "peso" della regola e battere
   gli stili generici dei link del tema (es. ".contenitore a").

   Sul solo COLORE del testo aggiungo pero' !important: MetaSlider (hero)
   stampa uno stile inline con selettore a livello di ID —
   "#metaslider-id-346851 .caption-wrap a { color:#1e73be }" (specificita'
   1,2,1) — e un ID batte qualsiasi numero di classi. Non essendo marcato
   !important, glielo contrapponiamo noi, ma SOLO su "color" (l'unica
   proprieta' che il tema ci sovrascrive): cosi' il bottone tiene i suoi
   colori in QUALSIASI contenitore (hero, footer, sidebar, form...). */

/* ====== CTA della hero — si invertono in hover, SENZA bordo ==========
   Il fondo blu della hero e l'accent #0642b1 sono tonalita' diverse: il
   bottone stacca da solo, non serve un bordo (il bordo resta del colore
   del fondo del bottone, quindi invisibile, solo per tenere la stessa
   dimensione delle altre varianti). */

/* --white — Contattaci: bianco -> hover accent. */
.layb-cta.layb-cta--white {
	background-color: #ffffff;
	color: var(--layb-cta-accent) !important;
}

.layb-cta.layb-cta--white:hover,
.layb-cta.layb-cta--white:focus-visible {
	background-color: #00387c;
	color: #ffffff !important;
	text-decoration: none;
}

/* --accent (alias --bluette) — Scopri i servizi: accent -> hover bianco. */
.layb-cta.layb-cta--accent,
.layb-cta.layb-cta--bluette {
	background-color: var(--layb-cta-accent);
	color: #ffffff !important;
}

.layb-cta.layb-cta--accent:hover,
.layb-cta.layb-cta--accent:focus-visible,
.layb-cta.layb-cta--bluette:hover,
.layb-cta.layb-cta--bluette:focus-visible {
	background-color: #00387c;
	color: #ffffff !important;
	text-decoration: none;
}

/* ====== Bottoni generici — pieni, si svuotano col bordo in hover ======
   A riposo sono PIENI (colore del brand). In hover prendono il colore del
   FONDO e da soli sparirebbero: e' proprio li' che compare il bordo a
   contrasto, per tenerli definiti. E' l'opposto di un classico bottone
   "outline" (vuoto a riposo, pieno in hover). */

/* --on-light (alias --primary) — primaria su sfondi CHIARI.
   Blu pieno -> hover bianco con bordo blu. */
.layb-cta.layb-cta--on-light,
.layb-cta.layb-cta--primary {
	background-color: var(--layb-cta-primary);
	color: var(--layb-cta-on-primary) !important;
	border-color: var(--layb-cta-primary);
}
.layb-cta.layb-cta--on-light:hover,
.layb-cta.layb-cta--on-light:focus-visible,
.layb-cta.layb-cta--primary:hover,
.layb-cta.layb-cta--primary:focus-visible {
	background-color: #ffffff;
	color: var(--layb-cta-primary) !important;
	border-color: var(--layb-cta-primary);
	text-decoration: none;
}

/* --secondary — secondaria su sfondi CHIARI: e' l'INVERSO di --on-light.
   A riposo bordata (trasparente, testo e bordo blu); in hover si riempie
   di blu con testo bianco. Fa coppia con --primary (piena) su una stessa
   pagina chiara — es. i doppi CTA della pagina Servizi. */
.layb-cta.layb-cta--secondary {
	background-color: transparent;
	color: var(--layb-cta-primary) !important;
	border-color: var(--layb-cta-primary);
}
.layb-cta.layb-cta--secondary:hover,
.layb-cta.layb-cta--secondary:focus-visible {
	background-color: var(--layb-cta-primary);
	color: var(--layb-cta-on-primary) !important;
	border-color: var(--layb-cta-primary);
	text-decoration: none;
}

/* --on-dark — per sfondi SCURI.
   Bianco pieno -> hover blu con bordo bianco. */
.layb-cta.layb-cta--on-dark {
	background-color: #ffffff;
	color: var(--layb-cta-primary) !important;
	border-color: #ffffff;
}
.layb-cta.layb-cta--on-dark:hover,
.layb-cta.layb-cta--on-dark:focus-visible {
	background-color: var(--layb-cta-primary);
	color: var(--layb-cta-on-primary) !important;
	border-color: #ffffff;
	text-decoration: none;
}

/* Modificatore larghezza piena: la CTA occupa tutta la riga.
   Utile nella sidebar del Blog e su mobile. */
.layb-cta--block {
	display: block;
	width: 100%;
}

/* NOTA: Accessibilita': :focus-visible e' lo stato di focus SOLO da
   tastiera (Tab), non da click. Aggiunge un anello ben visibile per
   chi naviga senza mouse, senza disturbare chi usa il mouse. */
.layb-cta:focus-visible {
	outline: 3px solid var(--layb-cta-focus);
	outline-offset: 2px;
}

/* Su telefono i bottoni si rimpiccioliscono un filo (come le slide mobile
   di MariaVittoria: 16px), per non "sfondare" su schermi stretti. */
@media (max-width: 600px) {
	.layb-cta {
		font-size: 16px;
		padding: 14px 22px;
	}
}

/*==================================================================
D1 — Home hero: doppia CTA nelle caption dello slider
====================================================================
Contesto: l'hero della Home NON e' un item del page builder, e' lo
slider MetaSlider (id 346851), che da solo riempie tutta la prima
schermata (~785px sotto un header di ~216px). Per avere le CTA
"immediatamente visibili" (mockup), vanno messe SOPRA l'immagine,
dentro la caption di ogni slide — non in una fascia sotto (che
partirebbe gia' oltre la piega).

Le 2 slide passano dallo stesso, singolo pulsante debole (verso
/team/ e /filosofia/) alla STESSA doppia CTA diretta. Il titolo e il
sottotitolo di ogni slide restano invariati: cambia solo l'AZIONE.
Ecco il blocco da incollare nella caption di ogni slide (in MetaSlider),
al posto del vecchio <div><a class="button">...</a></div>:

    <div class="layb-hero-cta">
      <a class="layb-cta layb-cta--white"
         href="/contatti/" data-cta-location="home-hero">Contattaci</a>
      <a class="layb-cta layb-cta--accent"
         href="/servizi/" data-cta-location="home-hero">Scopri i servizi</a>
    </div>

NOTA: data-cta-location="home-hero" viene letto dal tracking di R3
   (layb-tracking.js) per popolare il parametro cta_location
   dell'evento cta_click. Va messo su OGNI pulsante.
------------------------------------------------------------------*/

/* Contenitore delle due CTA nell'hero: le affianca con uno spazio,
   le centra e — grazie a flex-wrap — le manda una sotto l'altra
   quando lo schermo e' troppo stretto per tenerle in riga. */
.layb-hero-cta {
	display: flex;
	flex-wrap: wrap;          /* NOTA: su mobile i due pulsanti vanno a capo invece di stringersi fino a diventare illeggibili */
	justify-content: center;  /* centra il gruppo, coerente con il titolo/sottotitolo (text-align:center) */
	gap: 16px;                /* NOTA: spazio UNIFORME fra i pulsanti, anche quando vanno a capo (a differenza di margin) */
	margin-top: 24px;
}

/* NOTA: In passato la CTA secondaria dell'hero era una variante "on-media"
   bianca in outline. Ora la hero usa le varianti PIENE --white (Contattaci)
   e --bluette (Scopri i servizi) definite in R1: staccano meglio sul blu e
   non serve piu' un modificatore dedicato. Se un domani servisse una CTA
   sopra una FOTO chiara, si puo' reintrodurre qui una variante apposta. */

/* Su schermi molto stretti (telefoni) le due CTA occupano tutta la
   riga ciascuna: bersagli piu' comodi da toccare col dito. */
@media (max-width: 480px) {
	.layb-hero-cta .layb-cta {
		flex: 1 1 100%;   /* NOTA: flex-basis 100% = ogni pulsante prende tutta la larghezza → si impilano */
	}
}

/*==================================================================
D2 — Mappa sedi (Home): rifiniture per la posizione "above the fold"
====================================================================
Contesto: la sezione mappa e' un item "Content" del page builder con
due colonne Gutenberg — a sinistra lo SVG della cartina (snippet
Insert HTML Snippet, hotspot con popup), a destra la lista dei
pulsanti citta' (.et_pb_button, gia' blu brand: NON li ricoloriamo,
quello e' compito della regola globale di R5). Qui il CSS e'
volutamente MINIMO: colori e struttura restano invariati, si
sistemano solo scalatura, spaziatura e comportamento su mobile.

AGGANCIO: tutte le regole sono sotto #mappa-sedi, l'Element ID che
va assegnato all'item Content nel builder Goodlayers (in Goodlayers
gli item espongono un Element ID, non un campo classe). Lo stesso ID
e' l'aggancio dell'evento map_interaction in layb-tracking.js.

NOTA: Specificita': un ID (#mappa-sedi) vale 1,0,0 e batte comodamente
   le regole a livello di classe del tema/Gutenberg, senza !important.
------------------------------------------------------------------*/

/* La cartina e' un SVG inline (classe .layb-map). Le diamo un TETTO in px:
   le colonne mappa|lista vivono dentro uno snippet e WordPress NON carica il
   CSS core dei blocchi che le affianca (restano impilate) -> senza tetto la
   mappa riempirebbe tutta la larghezza della colonna e diventerebbe gigante
   sui monitor larghi. width:100% + max-width la fa scalare fino a un massimo;
   margin auto la centra. Uso .layb-map (non 'svg') per non colpire l'icona-
   lente del campo ricerca, che e' un altro <svg> dentro #mappa-sedi.
   AGGIORNAMENTO (D2.1, 2026-07-24): tetto alzato da 700 a 820px ("un po' piu'
   di spazio alla mappa", richiesta cliente), quando la sezione era stata
   resa fullwidth (riga "Full Size" in dashboard, poi persa in un rollback).
   AGGIORNAMENTO (D2.2, 2026-07-27): la richiesta e' cambiata — non piu'
   "bordo a bordo" ma "allineata a logo/lente", cioe' ferma dentro il
   .container standard del sito (1140px, vedi D2.2 piu' sotto). Il vero
   argine oggi e' quel container: gli 820px restano solo come rete di
   sicurezza in piu' (mai raggiunta nei fatti, la colonna mappa non supera
   ~700px nemmeno sui monitor piu' larghi). */
#mappa-sedi .layb-map {
	width: 100%;
	max-width: 820px;
	height: auto;       /* NOTA: height:auto insieme a max-width mantiene le proporzioni */
	display: block;
	margin: 0 auto;     /* centrata nella colonna */
}

/* Spaziatura uniforme fra i pulsanti citta' (scoped alla mappa: non
   tocca gli .et_pb_button altrove, es. sidebar Blog → quelli sono R5). */
#mappa-sedi .et_pb_button {
	margin-bottom: 8px;
}

/* Affiancamento colonne mappa|lista. Di norma lo farebbe il CSS core dei
   blocchi (.wp-block-columns -> display:flex), ma qui il blocco wp:columns
   vive dentro uno snippet (shortcode) e WordPress non ne carica gli stili:
   lo mettiamo noi, scoped a #mappa-sedi. Da 782px in su (stesso breakpoint
   di Gutenberg); sotto restano impilate ma in colonna flex (regola dopo).
   AGGIORNAMENTO (D2.1): colonne INVERTITE (richiesta cliente, poi estesa
   anche al mobile): la mappa (1a colonna nel DOM/snippet, NON tocchiamo lo
   snippet) passa VISIVAMENTE per seconda con `order`, la ricerca/lista per
   prima — SEMPRE, non solo da 782px in su. Il peso flex della mappa sale da
   1.6 a 1.8 ("un po' piu' di spazio"), ma solo in riga (desktop): impilate
   in colonna (mobile) flex-grow non ha un effetto visibile utile. */
@media (min-width: 782px) {
	#mappa-sedi .wp-block-columns {
		display: flex;
		gap: 40px;
		/* AGGIORNAMENTO (D2.3, 2026-07-27, richiesta utente, STORICO): provato
		   "center" per incollare la lista ricerca/comuni a meta' altezza della
		   mappa invece che in cima. Contrordine lo stesso giorno: si torna a
		   flex-start (ancorata in alto a sx, comportamento originale di prima
		   di D2.3) — la mappa resta comunque la colonna piu' alta, quindi sotto
		   la lista c'e' di nuovo dello spazio vuoto, ma e' la resa voluta. */
		align-items: flex-start;
	}
	#mappa-sedi .wp-block-column { min-width: 0; }   /* evita overflow flex */
	#mappa-sedi .wp-block-column:first-child { flex: 1.8; }  /* colonna mappa: piu' peso */
	#mappa-sedi .wp-block-column:last-child  { flex: 1; }    /* colonna ricerca/lista */
}

/* Ordine visivo invertito (mappa dopo, ricerca/lista prima): vale sia in
   riga (desktop) sia in colonna (mobile, regola sotto), quindi sta fuori
   da entrambe le media query. `order` funziona in flex a prescindere dalla
   `flex-direction` (row o column). */
#mappa-sedi .wp-block-column:first-child { order: 2; }  /* mappa */
#mappa-sedi .wp-block-column:last-child  { order: 1; }  /* ricerca/lista */

/* Sotto i 782px le colonne si impilano: le mettiamo in flex-column (invece
   del semplice display:block) cosi' l'`order` qui sopra ha effetto anche
   qui e la ricerca/lista compare per prima, la mappa sotto — coerente col
   desktop. Spaziatura: margin-top sulla mappa (visivamente seconda), non
   piu' margin-bottom (che seguirebbe l'ordine nel DOM, non quello visivo). */
@media (max-width: 781px) {
	#mappa-sedi .wp-block-columns {
		display: flex;
		flex-direction: column;
	}
	#mappa-sedi .wp-block-column:first-child {
		margin-top: 24px;
	}
}

/*------------------------------------------------------------------
D2.1 — AGGIORNAMENTO 2026-07-24 (richieste cliente, STORICO): sezione
fullwidth. Prima era un item "Content" boxed dentro .container (tetto
1140px). Il cambio a riga "Full Size" era lato DASHBOARD (stessa
impostazione gia' usata sulla riga del titolo sopra "LA PRESENZA DI OFFICINA
NOTARILE"): qui si aggiungeva solo il padding laterale che quel tipo di riga
NON mette (nel tema le righe full-size azzerano il margine laterale nativo
di .gdlr-item), per non far toccare mappa/lista ai bordi del browser.

NOTA STORICA (ID duplicato): nel markup l'Element ID "mappa-sedi" era
comparso duplicato (wrapper di riga + item di contenuto, uno annidato
nell'altro) — da qui la scelta di scopare il selettore su .gdlr-content-item
invece del semplice #mappa-sedi, per colpire solo l'item interno. Ancora
valido oggi (verificato 2026-07-27: un solo #mappa-sedi in pagina), ma
teniamo comunque lo scoping esplicito perche' piu' robusto.

D2.2 — AGGIORNAMENTO 2026-07-27: la riga "Full Size" del 24/07 e' andata
persa (un rollback WP ha riportato indietro anche le impostazioni di riga
del builder, non solo i contenuti) ed e' tornata boxed. Nel frattempo la
richiesta e' cambiata: non piu' "bordo a bordo senza limiti" ma "allineata
a sx col logo e a dx con la lente d'ingrandimento del menu" — cioe' ferma
dentro il .container standard (1140px), che verificato dal vivo e' ESATTAMENTE
la larghezza gia' occupata dall'item (bordi dell'item a 498px/1608px = bordi
di logo e icona-lente nell'header, stesso .container che il tema usa per
allineare l'intestazione). Quindi non serve piu' toccare la dashboard: il
padding compensativo di D2.1 (pensato solo per lo scenario Full Size) va
tolto, cosi' le due colonne riempiono tutto lo spazio dell'item invece di
restare rientrate di altri 60px per lato. */
#mappa-sedi.gdlr-content-item {
	padding-left: 0;
	padding-right: 0;
}

/*------------------------------------------------------------------
D2.4 — AGGIORNAMENTO 2026-07-27 (richiesta utente): la mappa cresce un
po' e ha il permesso di "sforare" a destra oltre il bordo del .container,
SENZA spostare la colonna ricerca/lista (che resta ancorata a sx, larghezza
invariata) — cosi' il resto del layout (D2.2) non cambia.

GATING a min-width:1440px: sotto quella soglia il margine tra il .container
e il bordo della finestra e' troppo stretto e l'eccedenza rischierebbe di
causare uno scroll orizzontale su TUTTA la pagina, non solo sulla mappa —
verificato: a 1440px il margine disponibile e' ~150px contro un'eccedenza
richiesta di 110px, con un margine di sicurezza; sopra i 1440px c'e' sempre
piu' spazio. Sotto i 1440px la mappa resta com'era (D2.2, riempie la sua
colonna e basta).

TECNICA: width:calc(100% + 110px) invece di alzare il max-width. Essendo
piu' largo della sua colonna, l'SVG (un blocco con margin:0 auto, vedi sopra)
NON si centra quando "trabocca": per la regola CSS standard sui margini auto
sovravincolati, un margine auto non puo' diventare negativo e resta a 0 — il
bordo SINISTRO quindi non si sposta, tutta l'eccedenza va a destra. Non
serve toccare max-width:820px sopra: 688px (colonna attuale) + 110px = 798px,
resta comunque sotto quel tetto.

GOTCHA: il wrapper di riga nativo del tema (.gdlr-color-wrapper) ha
"overflow-x:hidden" di default (probabile protezione anti-scroll-orizzontale
del tema) — senza toccarlo l'eccedenza verrebbe TAGLIATA invece che mostrata.
Lo riapriamo SOLO per la riga della mappa con :has(#mappa-sedi) (stesso
trucco gia' usato altrove nel file per selezionare un genitore senza campo
classe nel builder): non tocca le altre righe del sito, che restano protette
come prima. Il body-wrapper piu' in alto ha anch'esso overflow-x:hidden e
resta com'e': fa da rete di sicurezza finale contro lo scroll orizzontale
dell'intera pagina nel caso il calcolo qui sopra fosse mai troppo ottimista
su una finestra particolare. */
.gdlr-color-wrapper:has(#mappa-sedi) {
	overflow-x: visible;
}
@media (min-width: 1440px) {
	#mappa-sedi .layb-map {
		width: calc(100% + 110px);
	}
}

/*==================================================================
D3 — Home: blocco "servizi nel primo scroll" (2 card Privati/Aziende)
====================================================================
Contesto (mockup PR_004, slide Home): i servizi principali devono
essere visibili GIA' nel primo scroll. Subito dopo la mappa, due card
di SINTESI (Privati / Aziende) anticipano le aree e portano a /servizi/;
i due blocchi dettagliati (Stunning Text + Feature Media) restano piu'
in basso come approfondimento.

REALIZZAZIONE (dashboard): due item nativi "Box Icon" del page builder,
in una riga a 2 colonne 1/2, icona in alto (fa-user / fa-building,
colore #00387c). Lo sfondo grigio #f5f5f5 e' il DEFAULT nativo del tema
(.gdlr-box-with-icon-item), quindi non serve CSS per il colore.

STORIA: prima queste card erano HTML scritto a mano dentro un item
"Content" (classi .layb-service-card, con l'icona iniettata via CSS
perche' l'editor cancella gli <i> vuoti). Convertite in item nativi:
piu' robusti ed editabili dai campi del builder. Il vecchio CSS custom
e' stato RIMOSSO (era codice morto, nessun altro file lo usava).

AGGANCIO: gli item Goodlayers non hanno campo classe CSS, solo Element
ID → i due box hanno id="home-servizi-privati" / "home-servizi-aziende".
La CTA riusa .layb-cta (R1) dentro .layb-svc-cta, con
data-cta-location="home-servizi" → l'evento cta_click e' gia' tracciato
(R3), nessuna modifica al JS.

AGGIORNAMENTO 2026-07-27 (audit spaziatura Home + fix rottura CSS):
misurato in pixel lo spazio tra l'icona-divisore del titolo e il
contenuto sotto, in tutte le sezioni simili della Home. "Lo studio
associato" (titolo+team NELLA STESSA riga del builder) e' il riferimento,
60px; qui invece titolo "I Nostri Servizi" e card erano in DUE righe
separate del builder, i cui padding nativi si sommavano fino a 120px
(il doppio). Per allinearle, titolo e card sono stati uniti nella STESSA
riga del builder (rimosso il "Column Wrapper" che avvolgeva le due
card) — ma cosi' e' sparito anche il <div class="container"> su cui si
agganciava tutto il CSS sotto, rompendo il layout (griglia, altezza
uniforme, centratura: le card sono diventate a tutta larghezza e senza
stile).

RISCRITTURA: l'aggancio non e' piu' ".container" (non e' detto resti il
genitore diretto delle colonne) ma un generico "*" con :has() — regge
qualunque classe finisca per avere quel genitore, piu' robusto di prima
(era proprio la fragilita' sulla classe esatta ad aver rotto il CSS).
Il layout a due colonne non usa piu' CSS GRID sul genitore (che
includerebbe anche il blocco titolo, stringendolo alla stessa larghezza
delle card) ma FLEXBOX con flex-wrap: il titolo prende flex-basis:100%
(va sempre da solo sulla sua riga), le due card hanno una larghezza
fissa (stessa resa visiva di "900px centrati" di prima) e restano
affiancate sulla riga successiva, centrate con justify-content. Lo
spazio tra titolo e card e' fissato a 60px (margin-bottom sul blocco
titolo + gap del flex) per essere uguale a "Lo studio associato".
------------------------------------------------------------------*/

/* 1) La riga che contiene titolo + le due card diventa un FLEX container:
   il titolo va da solo sulla sua riga (flex-basis:100%), le due card
   restano affiancate sulla riga successiva e vengono centrate come
   gruppo. Aggancio via :has() sull'Element ID della prima card: in tutta
   la pagina e' l'unico genitore che la contiene come figlio diretto di
   .six.columns (non serve piu' sapere se e' un .container, un
   .gdlr-color-wrapper o un .gdlr-full-size-wrapper). */
*:has(> .six.columns #home-servizi-privati) {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	align-items: stretch;
	gap: 24px;
}
*:has(> .six.columns #home-servizi-privati) > .clear {
	display: none;           /* il div .clear del sistema float e' inutile in flex */
}
/* Blocco titolo "I Nostri Servizi": da solo sulla prima riga, con 36px di
   margine che sommato ai 24px di gap del flex da' i 60px di riferimento
   prima delle card (come "Lo studio associato"). */
*:has(> .six.columns #home-servizi-privati) > .gdlr-item.gdlr-content-item {
	flex: 1 1 100%;
	margin-bottom: 36px;
}
*:has(> .six.columns #home-servizi-privati) > .six.columns {
	float: none;              /* in flex il float non serve */
	width: auto;              /* annulla il width:50% fisso del tema (batte flex-basis sotto) */
	/* AGGIORNAMENTO 2026-07-24 (MariaVittoria): card piu' strette, "come
	   erano prima". 438px e' la larghezza della vecchia .layb-services__grid
	   (git 475db0ad^): stesso ingombro di "due card + gap" dentro un
	   .container di max-width:900px, ottenuto qui con una larghezza fissa
	   per card invece che con un max-width sul genitore (il genitore ora
	   contiene anche il titolo, che non deve restringersi). */
	flex: 0 1 438px;
	margin: 0;
	/* display+flex-direction stavano nella regola 2) qui sotto, ma
	   elencare ".six.columns" IN QUELLA regola faceva ripetere anche
	   "flex: 1 1 auto" per lui — stesso selettore, stessa specificita',
	   dichiarato DOPO: vinceva quello e annullava silenziosamente il
	   "flex: 0 1 438px" appena scritto sopra (bug latente, mai notato
	   perche' con la vecchia lista puntata le due card finivano comunque
	   ~metà a testa "per coincidenza"; scoperto il 2026-07-27 quando un
	   testo piu' lungo nelle card ha fatto scattare il wrap, mandandole
	   una sopra l'altra a piena larghezza). Spostati qui, cosi' la card
	   riceve ANCORA display:flex+flex-direction:column (serve alla
	   catena verticale sotto) ma la sua LARGHEZZA (flex-grow/shrink/
	   basis) la decide solo questa regola. */
	display: flex;
	flex-direction: column;
}

/* 2) Catena flex DENTRO ogni colonna: wrapper → card → caption si
   espandono in verticale, cosi' la card riempie tutta l'altezza della
   colonna (gia' fissata a 438px qui sopra) e la CTA (margin-top:auto
   piu' sotto) va a fondo. align-items resta il default "stretch": i
   figli restano a tutta larghezza e il loro testo si centra col
   text-align:center (rule 3), icona compresa. */
*:has(> .six.columns #home-servizi-privati) .gdlr-box-with-icon-ux,
*:has(> .six.columns #home-servizi-privati) .gdlr-box-with-icon-item,
*:has(> .six.columns #home-servizi-privati) .box-with-icon-caption {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
}

/* 3) Contenuto centrato. Il <br> che l'item stampa dopo l'icona non serve
   piu' (in flex-column lo stacking e' gestito dal flex): lo nascondiamo
   per non lasciare un gap. */
*:has(> .six.columns #home-servizi-privati) .gdlr-box-with-icon-item {
	text-align: center;
	/* AGGIORNAMENTO 2026-07-24 (MariaVittoria): box piu' ariosi e uniformi.
	   Override del padding nativo 40px 30px 20px (+ del type-circle.pos-top
	   che nel tema aggiunge 50px in alto).
	   AGGIORNAMENTO 2026-07-27: sopra/sotto portati a 24px, stesso valore
	   di TUTTI gli altri respiri verticali della card (icona-titolo,
	   titolo-paragrafo, paragrafo-pulsante: vedi le regole D3.1/5.1 più
	   sotto) — prima erano 5 misure diverse (40/22/20/40/35px), qui
	   unificate a un solo ritmo. Sinistra/destra restano 40px (larghezza
	   del testo, non tocca il ritmo verticale richiesto). */
	padding-top: 24px;
	padding-left: 40px;
	padding-right: 40px;
	padding-bottom: 24px;
}
*:has(> .six.columns #home-servizi-privati) .gdlr-box-with-icon-item > br {
	display: none;
}

/* 4) Lista voci dentro la caption: via i pallini e il rientro di default,
   centrata come il resto della card. */
*:has(> .six.columns #home-servizi-privati) .box-with-icon-caption ul {
	list-style: none;
	padding: 0;
	margin: 0 0 40px;
}
*:has(> .six.columns #home-servizi-privati) .box-with-icon-caption li {
	color: #333;
}

/* 5) RIMOSSA 2026-07-28: era "CTA singola: ancorata in fondo e centrata"
   su .layb-svc-cta, ma quella classe non esiste piu' in nessuna pagina del
   sito (verificato su tutto il database + tutti i file PHP del tema/
   plugin) da quando il pulsante e' passato a <a class="gdlr-button"> nudo
   (vedi 5.1 sotto, gia' scritta il giorno prima e mai ripulita): la
   regola non si agganciava piu' a nulla. Il posizionamento del pulsante
   oggi lo fa solo la regola 5.1. */

/* 5.1) AGGIORNAMENTO 2026-07-27: il contenuto della caption e' passato da
   lista puntata a paragrafo di testo libero (<p class="p1">) + pulsante
   [gdlr_button] — quest'ultimo non e' piu' dentro un .layb-svc-cta (la
   vecchia regola 5, rimossa) ne' dopo un <ul> (che a regola 4 aveva un
   margin-bottom:40px: era LUI a dare il respiro sopra il vecchio
   pulsante). Il tema forza
   ".gdlr-box-with-icon-item p{margin:0 !important}" (in fondo al file):
   testo e pulsante finiscono attaccati, qualunque sia il tag che li separa
   (in Privati un <p>, in Aziende un <div> — l'utente li ha scritti diversi).
   Invece di agganciarci al tag del "prima" (fragile, cambia da card a
   card), diamo il respiro al pulsante STESSO: funziona qualunque cosa lo
   preceda, lista o paragrafo che sia.
   AGGIORNAMENTO 2026-07-27 (bis): 40px -> 24px, per uniformare questo
   respiro a tutti gli altri della card (sopra icona, icona-titolo,
   titolo-paragrafo, sotto pulsante — vedi nota in "3").
   AGGIORNAMENTO 2026-07-27 (tris): azzerato anche il margin-bottom:15px
   che il tema padre da' di serie a OGNI .gdlr-button (style.css:399,
   pensato per quando piu' bottoni vanno a capo fra loro). Senza
   azzerarlo si sommava al padding-bottom:24px della card (regola "3"):
   39px sotto il pulsante contro i 24px di tutti gli altri respiri. Ora
   e' la card, da sola, a decidere lo spazio sotto. */
*:has(> .six.columns #home-servizi-privati) .box-with-icon-caption a.gdlr-button {
	margin-top: 24px;
	margin-bottom: 0;
}

/* 6) Tablet/telefono: una colonna sola, card impilate a tutta larghezza. */
@media (max-width: 768px) {
	*:has(> .six.columns #home-servizi-privati) > .six.columns {
		flex: 1 1 100%;
	}
}

/* 7) Se titolo e card restano in DUE righe separate del builder (invece
   che unite nella stessa, vedi nota in cima), la riga delle card ha un
   suo padding-top nativo (60px) che si somma al padding-bottom nativo
   della riga del titolo (40px): 100px+ invece dei 60px di riferimento.
   Annulliamo qui SOLO quel padding-top, cosi' il gap resta 60px (quanto
   basta il respiro nativo della riga del titolo) indipendentemente da
   quale delle due strutture (unita o separata) sia quella attiva in un
   dato momento — le regole 1)-6) sopra coprono il caso "unita", questa
   copre il caso "separata"; a runtime ne scatta una sola perche' :has()
   richiede ESATTAMENTE quella nidificazione. */
*:has(> .container > .six.columns #home-servizi-privati) {
	padding-top: 0;
}

/*------------------------------------------------------------------
D3.1 — AGGIORNAMENTO 2026-07-24 (richieste MariaVittoria)
Titoli blu/grandi, icona-cerchio resa tonda, hover pulsanti grigio.
L'icona-cerchio (type-circle + pos-top) e la sua posizione le ha
impostate MariaVittoria dall'editor (DB, non qui): sotto c'e' SOLO il
CSS che accompagna quella scelta. NB: l'aggancio :has(#home-servizi-
privati) porta un ID -> alta specificita', batte il tema senza !important.
------------------------------------------------------------------*/

/* Titolo (h4): blu brand e grande "come prima". Override del grigio
   nativo #585858 (parent stylesheet/style-custom.css:71).
   AGGIORNAMENTO 2026-07-27: margine 20px -> 24px, per il ritmo verticale
   unico della card (vedi nota in "3" qui sopra). */
*:has(> .six.columns #home-servizi-privati) .box-with-icon-title {
	color: #00387c;
	font-size: 32px;
	line-height: 1.3;
	margin-bottom: 24px;
	display: block;
}

/* Icona-cerchio TONDA. Perche' usciva ovale: il tema stampa un <br>
   DENTRO .box-with-circle-icon (una riga vuota extra -> box piu' alto che
   largo) e il cerchio nativo e' position:absolute con dimensione non fissa
   (parent style.css:475-481). Fix: lo riportiamo nel flusso, dimensione
   fissa 64x64, border-radius:50%, icona centrata con flex, e nascondiamo
   il <br>. Lo sfondo blu (#00387c inline, dal campo "Icon Background"
   impostato da MariaVittoria) resta: tocchiamo solo la forma. */
*:has(> .six.columns #home-servizi-privati) .box-with-circle-icon {
	position: static;   /* NOTA: annulla l'absolute nativo -> torna nel flusso, in cima alla card */
	width: 64px;
	height: 64px;
	padding: 0;
	border-radius: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
	align-self: center;   /* NOTA: la card e' flex-column; align-self centra il cerchio sull'asse orizzontale */
	margin: 0 0 24px;   /* AGGIORNAMENTO 2026-07-27: 22px -> 24px, ritmo verticale unico della card */
}
*:has(> .six.columns #home-servizi-privati) .box-with-circle-icon > i {
	margin: 0;
	line-height: 1;
}
*:has(> .six.columns #home-servizi-privati) .box-with-circle-icon > br {
	display: none;   /* NOTA: e' questo <br> annidato che rendeva il cerchio un ovale */
}

/* Pulsanti: hover grigio pieno, senza bordo. SOLO le CTA delle card Home
   (le altre .layb-cta del sito restano invariate). Bordo grigio uguale al
   fondo = "senza outline". L'anello di focus da tastiera
   (.layb-cta:focus-visible, R1 riga 205) resta, per accessibilita'. */
*:has(> .six.columns #home-servizi-privati) .layb-cta--primary:hover,
*:has(> .six.columns #home-servizi-privati) .layb-cta--primary:focus-visible {
	background-color: #414141;
	color: #ffffff !important;
	border-color: #414141;
}

/*==================================================================
D4.1 — Ancore scroll-target (STORICO — resta solo #mappa-sedi)
====================================================================
NOTA STORICA (2026-07-26): questa sezione conteneva in origine le
liste-link + doppia CTA per i blocchi Privati/Aziende della pagina
Servizi. Quei due blocchi sono stati RIDISEGNATI in dashboard con il
custom post type nativo "Practice" del tema padre (card fotografiche,
vedi [[servizi-page-status]] nelle memorie di progetto) — le regole
`.layb-svc-list` (e gli id `#privati`/`#aziende`) non sono piu' usate
da nessuna pagina: rimosse come codice morto (confermato con l'utente).

AGGIORNAMENTO 2026-07-28: rimosse anche le sezioni D4.2/D4.3 (CSS
"icona a sinistra + card a riquadro" per #servizi-online/
#servizi-aggiuntivi) e la classe `.layb-svc-cta` — verificato con una
ricerca su tutto il database WP che `.layb-svc-cta` non e' piu' usata
da NESSUNA pagina/snippet (la presunta riutilizzazione dalle card Home
D3/D3.1, annotata due giorni prima, non e' piu' vera: anche quelle
card sono state ricostruite nel frattempo). Gli Element ID
`#servizi-online`/`#servizi-aggiuntivi` invece ESISTONO ancora sulla
pagina Servizi pubblicata, ma con un aspetto gia' scelto e approvato
(icona centrata sopra il titolo, verificato dal vivo) diverso da
quello che questo CSS avrebbe imposto (icona a sinistra): l'utente ha
deciso di fidarsi dell'aspetto gia' live su WP invece di rimettere in
gioco il CSS del repo — quindi via anche queste regole, non solo
`.layb-svc-cta`.

Resta solo l'ancora scroll-target sotto, ora usata solo da #mappa-sedi
(Home, CTA "Dove siamo" del footer, blocco D7) — innocua da tenere
anche per gli altri due id nel caso servano ancora a un link con hash.
------------------------------------------------------------------*/

/* Ancora su cui puo' atterrare un link esterno con hash: senza
   scroll-margin l'header fisso la coprirebbe. */
#servizi-aggiuntivi, #servizi-online, #mappa-sedi {
	scroll-margin-top: 140px;
}

/*==================================================================
D5 — Form Contact Form 7: veste uniforme e coerente col brand
====================================================================
Contesto: il sito ha 30 moduli Contact Form 7 (i 3 generici — Contatti
346595, Copia atti 346608, Preventivi 346743 — piu' i 26 form di sede
nei popup e l'Ebook). Il markup e' scritto a mano nel pannello CF7: ogni
campo e' una <label> con testo + <br> + <span.wpcf7-form-control-wrap>
attorno all'input, e i campi sono separati da altri <br>. Il risultato
"grezzo" e' compatto e disallineato.

Qui NON tocchiamo i CAMPI (differenziarli e' lavoro lato dashboard, dentro
CF7): diamo solo una veste uniforme a TUTTI i form, agganciandoci alle
classi STANDARD che CF7 stampa sempre. Cosi' lo stile vale per i campi di
oggi E per quelli nuovi che aggiungeremo differenziando i moduli.

AGGANCIO: tutto e' scoped sotto .wpcf7-form (la classe del <form> che CF7
mette sempre): non tocca form non-CF7 (es. la ricerca del tema). Le regole
del child sono caricate DOPO 'style-custom' del tema (vedi functions.php),
quindi vincono a parita' di specificita' senza !important.

⚠️ Attenzione (motiva i selettori sotto): in CF7 la classe .wpcf7-form-control
   sta SIA sugli input di testo SIA sul pulsante di invio SIA sullo <span>
   della privacy. Per questo NON usiamo quel selettore generico (romperebbe
   privacy e submit) ma selettori per TIPO: input.wpcf7-text, textarea, ecc.
------------------------------------------------------------------*/

/* Neutralizziamo i <br> del markup CF7 e governiamo la spaziatura noi, via
   margini: layout prevedibile invece che dipendente dai ritorni a capo. */
.wpcf7-form p { margin: 0; }
.wpcf7-form br { display: none; }

/* Ogni campo (label figlia diretta del <p>) diventa un blocco con respiro
   sotto. NOTA: `p > label` (figlio DIRETTO) esclude di proposito la label della
   privacy, che e' annidata dentro la checkbox e non va resa in grassetto. */
.wpcf7-form p > label {
	display: block;
	margin-bottom: 18px;
	font-weight: 600;
	color: var(--layb-cta-primary);   /* NOTA: label del form nel blu brand (#00387c) */
}

/* Il contenitore dell'input va sotto il testo della label, a tutta riga. */
.wpcf7-form span.wpcf7-form-control-wrap {
	display: block;
	margin-top: 6px;
	padding-right: 0;   /* NOTA: il tema (lawyerbase/style.css:1432) impone
	                       `.wpcf7 span.wpcf7-form-control-wrap { padding-right:40px }` (0,2,1),
	                       che rendeva input/select/textarea 40px piu' stretti a destra
	                       (disallineati rispetto a nota PDF e bottone, a tutta larghezza).
	                       Lo azzeriamo: stessa specificita' del tema, ma il nostro CSS carica
	                       dopo, quindi vince. Aggiunto `span` per pareggiare la specificita'. */
}

/* Veste uniforme dei controlli di TESTO veri e propri. Elenchiamoli per tipo
   (input.wpcf7-text / -email / -tel / -number / -date, textarea, select):
   cosi' NON tocchiamo il submit ne' lo <span> della privacy, che pure portano
   la classe .wpcf7-form-control. La lista copre anche i tipi che potremmo
   introdurre differenziando i moduli (es. un <select> "Servizio").
   NOTA: box-sizing:border-box fa rientrare padding e bordo nella larghezza
      (width:100%), cosi' l'input non "sfora" il contenitore. */
.wpcf7-form input.wpcf7-text,
.wpcf7-form input.wpcf7-email,
.wpcf7-form input.wpcf7-tel,
.wpcf7-form input.wpcf7-number,
.wpcf7-form input.wpcf7-date,
.wpcf7-form textarea.wpcf7-textarea,
.wpcf7-form select.wpcf7-select {
	box-sizing: border-box;
	width: 100%;
	padding: 12px 14px;
	font-size: 15px;
	line-height: 1.4;
	color: #333;
	background-color: #fff;
	border: 1px solid #ccc;
	border-radius: var(--layb-cta-radius);   /* stesso raggio di CTA e card: coerenza */
	transition: border-color .2s ease, box-shadow .2s ease;
}
.wpcf7-form textarea.wpcf7-textarea {
	min-height: 120px;
	resize: vertical;   /* NOTA: allargabile solo in altezza: in larghezza sballerebbe il layout */
}

/* Focus visibile e coerente col blu del brand (accessibilita' tastiera+mouse).
   Escludiamo checkbox/radio/submit: l'alone morbido ha senso solo sui campi
   di testo. */
.wpcf7-form input:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):focus,
.wpcf7-form textarea:focus,
.wpcf7-form select:focus {
	outline: none;
	border-color: var(--layb-cta-primary);
	box-shadow: 0 0 0 3px rgba(0, 56, 124, .15);
}

/* --- Gruppi radio / checkbox (es. "Privato/Azienda") ----------------
   Diamo al gruppo lo stesso respiro sotto degli altri campi e affianchiamo
   le opzioni. NOTA: CF7 mette di default `margin-left:1em` su ogni .wpcf7-list-item:
   fa rientrare la PRIMA opzione rispetto alla label. Lo azzeriamo e usiamo un
   margine a DESTRA come distanza fra le opzioni, cosi' restano allineate a
   sinistra con le label. NB: la privacy e' esclusa perche' e' .wpcf7-acceptance,
   gestita nel blocco dedicato qui sotto. */
.wpcf7-form .wpcf7-radio,
.wpcf7-form .wpcf7-checkbox {
	display: block;
	margin: 6px 0 18px;
}
.wpcf7-form .wpcf7-radio .wpcf7-list-item,
.wpcf7-form .wpcf7-checkbox .wpcf7-list-item {
	display: inline-block;
	margin: 0 20px 0 0;
}

/* --- Checkbox privacy (acceptance) ---------------------------------
   Struttura CF7: <span.wpcf7-acceptance> > .wpcf7-list-item > <label> con
   dentro <input type=checkbox> + <span.wpcf7-list-item-label> col testo.
   La vogliamo su una riga, checkbox e testo allineati in alto. */
.wpcf7-form .wpcf7-acceptance {
	display: block;
	margin: 4px 0 20px;
}
.wpcf7-form .wpcf7-acceptance .wpcf7-list-item {
	display: block;
	margin: 0;   /* NOTA: azzera il margin-left di default di CF7 sulle list-item */
}
.wpcf7-form .wpcf7-acceptance label {
	display: flex;
	align-items: flex-start;   /* NOTA: se il testo va a capo, la checkbox resta allineata alla 1a riga */
	gap: 8px;
	line-height: 1.5;          /* NOTA: il tema eredita line-height ~1.9 (riga alta ~30px): la
	                              checkbox restava in cima mentre il testo galleggiava al centro di
	                              quella riga altissima. Riportandola a 1.5 possiamo centrare la
	                              checkbox sulla prima riga con un margin-top prevedibile. */
	font-weight: 400;          /* testo normale, non grassetto come le label dei campi */
}
.wpcf7-form .wpcf7-acceptance input[type="checkbox"] {
	width: 16px;
	height: 16px;
	margin: 0;          /* azzera i margini di default che il browser mette sulla checkbox */
	margin-top: 4px;    /* centra la checkbox (16px) sulla prima riga di testo (1.5 * 16px = 24px) */
	flex: 0 0 auto;     /* la checkbox non si stira */
}

/* --- Pulsante di invio: veste CTA del brand (R1) --------------------
   Storia: prima replicavamo QUI l'aspetto delle .layb-cta perche' si pensava
   che sul submit generato da CF7 non si potessero mettere classi. In realta'
   il tag [submit] accetta `class:...`, quindi sui 3 form generici usiamo le
   classi VERE (.layb-cta .layb-cta--on-light .layb-cta--block) e lasciamo che
   sia R1 a vestirli. Questa regola resta come FALLBACK per gli altri moduli CF7
   (15 popup di sede + Ebook), che NON hanno le classi: per questo e' scoped con
   :not(.layb-cta), cosi' NON fa doppione sui 3 form generici. */
.wpcf7-form .wpcf7-submit:not(.layb-cta) {
	display: block;
	width: 100%;
	padding: 14px 28px;
	font-size: 18px;
	font-weight: 400;   /* NOTA: stesso look dei bottoni .layb-cta: non maiuscolo, peso normale */
	line-height: 1;
	color: #fff;
	background-color: var(--layb-cta-primary);
	border: 2px solid var(--layb-cta-primary);
	border-radius: var(--layb-cta-radius);
	cursor: pointer;
	transition: background-color .25s ease, border-color .25s ease;
}
.wpcf7-form .wpcf7-submit:not(.layb-cta):hover,
.wpcf7-form .wpcf7-submit:not(.layb-cta):focus-visible {
	background-color: var(--layb-cta-primary-hover);
	border-color: var(--layb-cta-primary-hover);
}
.wpcf7-form .wpcf7-submit:not(.layb-cta):focus-visible {
	outline: 3px solid var(--layb-cta-focus);
	outline-offset: 2px;
}

/* FIX bordo del submit CTA. Il tema padre (lawyerbase/style.css) impone larghezze
   di bordo diverse per lato: `border-bottom-width:2px` solo in basso su
   `.wpcf7 input[type=submit]` (specificita' 0,2,1) e una larghezza sottile sugli
   altri 3 lati via `input[type=submit]` (0,1,1) — entrambe battono la nostra base
   `.layb-cta` (0,1,0). Cosi' in hover (quando il bordo blu si vede su fondo bianco)
   il lato inferiore era spesso e gli altri tre sottili. Forziamo 2px solid su TUTTI
   i lati con specificita' 0,3,1, che vince su entrambe le regole del tema. Il COLORE
   del bordo resta gestito da R1 (.layb-cta--on-light), qui tocchiamo solo width+style. */
.wpcf7-form input.wpcf7-submit.layb-cta {
	box-sizing: border-box;   /* larghezza = 100% del contenitore, padding incluso */
	width: 100%;              /* NOTA: allinea il bottone alla larghezza piena come gli altri campi */
	margin: 0;                /* NOTA: il tema lasciava un margin-right ~5px sul submit */
	border-width: 2px;
	border-style: solid;
}

/* --- Messaggi di validazione ed esito -------------------------------
   CF7 aggiunge da solo: .wpcf7-not-valid-tip (errore sotto il campo), la
   classe .wpcf7-not-valid sul controllo non valido, e cambia lo stato del
   <form> (.invalid / .sent) attorno a .wpcf7-response-output. */
.wpcf7-form .wpcf7-not-valid-tip {
	margin-top: 6px;
	font-size: 13px;
	color: #b00020;   /* rosso di errore, buon contrasto */
}
.wpcf7-form input.wpcf7-not-valid,
.wpcf7-form textarea.wpcf7-not-valid,
.wpcf7-form select.wpcf7-not-valid {
	border-color: #b00020;
}
.wpcf7-form .wpcf7-response-output {
	margin: 20px 0 0;
	padding: 12px 16px;
	border: 2px solid #ccc;
	border-radius: var(--layb-cta-radius);
	font-size: 14px;
}
/* NOTA: CF7 marca il <form> con .invalid (errori) o .sent (inviato ok):
   coloriamo il box di esito di conseguenza, senza JS. */
.wpcf7-form.invalid .wpcf7-response-output {
	border-color: #b00020;
	color: #b00020;
}
.wpcf7-form.sent .wpcf7-response-output {
	border-color: #2e7d32;
	color: #2e7d32;
}

/*------------------------------------------------------------------
D5.1 — Rifiniture ispirate alla reference (nota informativa, select e
       campo data piu' curati). Tutto CSS-only: NON serve reincollare i
       form gia' pubblicati. NOTA: .layb-req e' pronta ma per ora non e'
       applicata a nessun form; la teniamo per un eventuale asterisco
       rosso sugli obbligatori, da attivare su tutti e 3 i form insieme.
------------------------------------------------------------------*/

/* Nota informativa dentro il form (es. "copie inviate via email in PDF").
   La distinguiamo dai campi: testo piccolo, tono attenuato e filetto blu a
   sinistra come richiamo visivo, senza urlare. */
.wpcf7-form .layb-form-note {
	margin: 4px 0 20px;
	padding: 10px 14px;
	font-size: 14px;
	line-height: 1.45;
	color: #555;
	background-color: #f4f7fb;   /* azzurrino tenue, coerente col blu brand */
	border-left: 3px solid var(--layb-cta-primary);
	border-radius: var(--layb-cta-radius);
}

/* Asterisco rosso per i campi obbligatori. NOTA: CF7 con [text* ...] rende il
   campo obbligatorio ma NON stampa alcun asterisco, e il CSS non puo'
   selezionare la <label> in base all'input che contiene. Quindi l'asterisco va
   messo NEL markup della label come <span class="layb-req">*</span>: qui gli
   diamo solo il colore. Per ora non e' applicato a nessun form. */
.wpcf7-form .layb-req {
	color: #b00020;   /* stesso rosso dei messaggi di errore: coerenza */
	margin-left: 2px;
	font-weight: 700;
}

/* Select dei form CF7: freccia lasciata NATIVA (grigia di sistema). Non usiamo
   piu' appearance:none + immagine di sfondo per disegnarne una nostra: e' il
   browser a renderla da se'. NOTA: senza appearance:none la freccia torna
   quella di sistema, sempre presente e accessibile, ma con aspetto un po'
   diverso su ogni browser. Nessun asset icona da mantenere nel tema.
   Teniamo solo cursor:pointer per segnalare che il campo e' cliccabile. */
.wpcf7-form select.wpcf7-select {
	cursor: pointer;
}

/* Campo data: l'input nativo tende a essere piu' basso degli altri per via
   dell'icona del calendario. Uniformiamo l'altezza minima a quella degli altri
   input e rendiamo l'icona del calendario chiaramente cliccabile. */
.wpcf7-form input.wpcf7-date {
	min-height: 46px;
}
.wpcf7-form input.wpcf7-date::-webkit-calendar-picker-indicator {
	cursor: pointer;
}

/*------------------------------------------------------------------
D5.2 — Card grigia + descrizione introduttiva (richiesta restyling)
       "sulla falsa riga della reference": il form dentro una card, ma
       col grigio della Home (#f5f5f5) invece del blu della reference.
   SCOPE via [data-form-name]: la card avvolge SOLO i 3 form generici
   (contatti / copia-atti / preventivi) e NON i 15 popup di sede ne'
   l'Ebook, che hanno un data-form-name diverso. NOTA: `data-form-name`
   e' un attributo che CF7 stampa da solo sul <form>, ricavato dal titolo
   del modulo: e' il gancio piu' pulito per distinguere i moduli.
------------------------------------------------------------------*/
.wpcf7-form[data-form-name="contatti"],
.wpcf7-form[data-form-name="copia-atti"],
.wpcf7-form[data-form-name="preventivi"] {
	background-color: #f5f5f5;   /* stesso grigio delle sezioni della Home */
	padding: 32px;
	border: 1px solid #e6e6e6;   /* filo tenue: stacca la card su pagina bianca */
	border-radius: 8px;          /* NOTA: leggermente piu' morbida dei bottoni (3px),
	                                scelta estetica per la card. Per coerenza stretta
	                                col sistema, sostituisci con var(--layb-cta-radius). */
}

/* Titolo dentro la card, nello stile del titolo di sezione della Home
   ("Trova la sede piu' vicina a te"): Cardo, 36px, peso 400, blu brand,
   sentence-case (NON maiuscolo come il vecchio titolo-pagina in Divi).
   NOTA: Cardo e' il font dei titoli del tema; lo dichiariamo esplicito per
   garantire il match anche dentro al form. Va messo come primo elemento del
   Form CF7: <h2 class="layb-form-title">Richiedi copia atti</h2> */
.wpcf7-form .layb-form-title {
	margin: 0 0 8px;
	font-family: "Cardo", serif;
	font-size: 36px;
	font-weight: 400;
	line-height: 1.3;
	color: var(--layb-cta-primary);
	text-transform: none;
}

/* Descrizione breve sotto il titolo, in cima alla card. NOTA: la specificita'
   (0,2,0) batte il `.wpcf7-form p { margin:0 }` di D5 (0,1,1), cosi' il margine
   sotto viene rispettato. */
.wpcf7-form .layb-form-intro {
	margin: 0 0 24px;
	font-size: 16px;
	line-height: 1.5;
	color: #555;
}

/* Su schermi stretti (mobile / sidebar) la card respira un po' meno, per non
   mangiare larghezza ai campi. */
@media (max-width: 600px) {
	.wpcf7-form[data-form-name="contatti"],
	.wpcf7-form[data-form-name="copia-atti"],
	.wpcf7-form[data-form-name="preventivi"] {
		padding: 20px;
	}
	.wpcf7-form .layb-form-title { font-size: 28px; }   /* titolo un po' piu' piccolo su mobile */
}

/*------------------------------------------------------------------
D5.3 — Righe a due colonne (ottimizzazione dello spazio)
   Il markup del form raggruppa i campi cosi':
     <div class="layb-form-row">
       <div class="layb-form-col"> <label>…<br>[campo]</label> </div>
       <div class="layb-form-col"> <label>…<br>[campo]</label> </div>
     </div>
   Qui rendiamo la RIGA un contenitore flex: le due colonne stanno
   affiancate. Una riga con UNA sola colonna (es. Messaggio) resta a tutta
   larghezza da sola. NOTA: le label NON serve ristilizzarle: dentro la
   colonna restano `p > label`, quindi ereditano gia' lo stile di D5 (blu,
   grassetto, margine). Privacy e submit sono <p> fuori dalle righe → intatti.

   AGGIORNAMENTO 2026-07-27 (bug scoperto testando D10 su mobile — non
   causato da D10, preesistente in questo blocco): con "flex:1 1 0" le due
   colonne si dividevano lo spazio in parti uguali SEMPRE, restringendosi
   anche sotto lo spazio che il loro contenuto richiede — cosi' tra 600px
   (dove scattava lo stack) e ~750px le colonne diventavano cosi' strette
   che l'etichetta piu' lunga ("Nome e cognome / Ragione sociale", 246px
   da sola) andava a capo su due righe mentre le altre restavano su una:
   i campi sotto non partivano piu' alla stessa altezza (disallineati).
   Sostituito il breakpoint fisso (legato al testo ATTUALE delle label,
   quindi fragile) con "flex-wrap:wrap" + un flex-basis REALE (260px,
   sopra i 246px misurati dal vivo): la riga prova ad affiancare le due
   colonne SOLO se c'e' spazio per entrambe a quella larghezza minima,
   altrimenti la seconda va sotto a tutta larghezza da sola — nessuna
   via di mezzo "stretta". Si adatta da solo anche se le etichette
   cambieranno testo in futuro, senza dover piu' ritoccare un numero di
   breakpoint a mano.

   AGGIORNAMENTO 2026-07-27 (bis — segnalato dall'utente): con un "gap"
   unico, quando le due colonne vanno a capo lo stesso 20px diventava
   ANCHE lo spazio VERTICALE tra loro — che pero' si sommava al margine
   che ogni label si porta gia' dietro (18px, D5 riga ~910, "p > label
   {margin-bottom:18px}"), perche' un item flex NON lascia collassare il
   margine di un suo discendente verso l'esterno (e' un dettaglio poco
   noto di flexbox: ogni flex item crea un contesto di formattazione a
   se', quindi il margin-bottom della label resta "intrappolato" dentro
   la colonna invece di fondersi con lo spazio successivo). Risultato
   misurato dal vivo: 38px tra due campi che erano nella stessa riga
   (18 intrappolati + 20 di gap) contro 18px tra campi di righe diverse
   (dove il gap non c'entra, le righe sono blocchi normali senza margine
   proprio) — due ritmi diversi, visibili. Separiamo riga/colonna del
   gap: quello ORIZZONTALE (tra le colonne affiancate su desktop) resta
   20px; quello VERTICALE (tra le colonne quando vanno a capo) diventa 0,
   cosi' l'unica spaziatura verticale e' il margine della label — la
   STESSA fonte, STESSO valore, usata anche tra una riga e l'altra. */
.wpcf7-form .layb-form-row {
	display: flex;
	flex-wrap: wrap;
	row-gap: 0;
	column-gap: 20px;
}
.wpcf7-form .layb-form-col {
	flex: 1 1 260px;
}

/*==================================================================
D6 — Mappa sedi (Home): "Trova la sede piu' vicina a te"
      campo di ricerca + filtro live + evidenza del pin
====================================================================
Card Trello "Refresh layout visivo mappa" — Fase A. Scelte (utente):
si RIUSA la mappa esistente (SVG + hotspot + tracking di D2) e si
sostituisce la LISTA NUDA di pulsanti nella colonna destra con: un
titolo, un campo di ricerca e la stessa lista, ora FILTRABILE.
Digitando, le voci non pertinenti spariscono e il pin corrispondente
sulla cartina si evidenzia (classe .is-match aggiunta via JS —
modulo 6 di layb-tracking.js).

Perche' un data-sede sulle voci: il testo del pulsante non sempre
coincide con la classe del pin (es. "Darfo Boario Terme" -> pin
.darfo; Milano -> due pin, milano + milanocentro). L'aggancio
esplicito evita una normalizzazione fragile.

Tutto e' scoped sotto .layb-mappa-find* / #layb-sede-list e, per
l'evidenza pin, sotto #mappa-sedi: non tocca nient'altro nel sito.
------------------------------------------------------------------*/

/* Titolo della colonna destra. Sta SOTTO il titolo di sezione
   "LA PRESENZA DI OFFICINA NOTARILE" (fascia Stunning Text separata,
   sopra la mappa: vedi D2). */
.layb-mappa-find__title {
	color: var(--layb-cta-primary);   /* blu brand, coerente coi titoli */
	margin: 0 0 4px;
}

/* AGGIORNAMENTO (D6.2, 2026-07-22, richiesta cliente, STORICO): da 782px in
   su il titolo non andava piu' a capo (prima finiva su due righe): white-space
   lo bloccava su una riga sola, clamp() restringeva il font quanto bastava
   perche' ci stesse nella colonna invece di uscirne.

   AGGIORNAMENTO (D6.3, 2026-07-27, richiesta utente): font "un po' piu'
   grande". Misurato dal vivo: al tetto precedente (28px) il titolo riempiva
   ESATTAMENTE la larghezza della colonna (382px, zero margine) — il 28px non
   era arbitrario, era gia' il massimo che ci stava su una riga sola. Alzare
   il tetto senza altro sarebbe uscito dalla colonna. Soluzione: togliamo il
   vincolo "una riga sola" (nowrap) — ora che la colonna e' centrata
   verticalmente (D2.3) invece che ancorata in cima, un eventuale a-capo non
   e' piu' un problema estetico come lo era nel vecchio layout, c'e' spazio
   verticale per assorbirlo. Sotto i 782px, invariato: nessun vincolo. */
@media (min-width: 782px) {
	.layb-mappa-find__title {
		font-size: clamp(20px, 2.2vw, 32px);
	}
}

.layb-mappa-find__hint {
	margin: 0 0 14px;
	font-size: 15px;
	opacity: .75;                     /* testo di servizio, meno marcato */
}

/* Wrapper del campo: da' spaziatura sotto E fa da riferimento di posizione
   per l'icona "lente", che ora e' un <svg> scritto nel markup dello snippet
   (dashboard), non piu' un'immagine di sfondo applicata dal CSS.
   AGGIORNAMENTO (D6.2): e' anche l'ancora del dropdown dei risultati — il JS
   (modulo 6) sposta qui dentro #layb-sede-list a runtime, cosi' il pannello
   assoluto (vedi .layb-mappa-find__list piu' sotto) si posiziona subito
   sotto il campo senza bisogno di misurare altezze a mano. */
.layb-mappa-find__search {
	position: relative;   /* NOTA: ancora l'icona E il dropdown, entrambi assoluti dentro questo box */
	margin-bottom: 16px;
}

/* Icona "lente": l'SVG vive nell'HTML dello snippet; qui gli diamo solo
   posizione e misura. E' decorativa (aria-hidden nel markup), quindi
   pointer-events:none per non intercettare i clic destinati all'input. */
.layb-mappa-find__icon {
	position: absolute;
	left: 14px;                    /* stesso punto dove stava il vecchio sfondo */
	top: 50%;
	transform: translateY(-50%);   /* centratura verticale a prescindere dall'altezza */
	width: 18px;
	height: 18px;
	pointer-events: none;
}

/* Campo di ricerca. L'icona "lente" NON sta piu' qui: e' un <svg> inserito
   direttamente nel markup dello snippet (dashboard) e posizionato dalla regola
   .layb-mappa-find__icon qui sopra. All'input resta solo il padding-left, che
   lascia lo spazio in cui la lente compare. */
.layb-mappa-find__input {
	width: 100%;
	box-sizing: border-box;           /* il padding non fa sforare il 100% */
	padding: 12px 14px 12px 42px;     /* 42px a sinistra = spazio per la lente */
	font-size: 16px;                  /* 16px evita lo zoom automatico su iOS */
	border: 2px solid #cfd8e3;        /* grigio-azzurro neutro */
	border-radius: var(--layb-cta-radius);
	background-color: #fff;
}

.layb-mappa-find__input:focus {
	outline: 3px solid var(--layb-cta-focus);  /* stesso anello di focus delle CTA */
	outline-offset: 2px;
	border-color: var(--layb-cta-primary);
}

/* AGGIORNAMENTO (D6.2, richiesta cliente): la lista non e' piu' una fila di
   chip sempre visibile, ma un vero DROPDOWN a comparsa. Spostata dal JS
   (modulo 6) dentro .layb-mappa-find__search (gia' position:relative), qui
   diventa un pannello assoluto ancorato subito sotto il campo: nascosto
   finche' il JS non aggiunge .is-open (al focus sul campo, o digitando). */
.layb-mappa-find__list {
	display: none;              /* nascosta finche' il JS non apre il dropdown */
	list-style: none;
	margin: 6px 0 0;
	padding: 6px 0;
	position: absolute;
	top: 100%;
	left: 0;
	right: 0;
	flex-direction: column;     /* righe impilate, non piu' chip a capo */
	background-color: #fff;
	border: 1px solid #cfd8e3;
	border-radius: var(--layb-cta-radius);
	box-shadow: 0 8px 24px rgba(0, 0, 0, .12);
	max-height: 320px;
	overflow-y: auto;           /* 14 sedi possono superare max-height: si scorre dentro il pannello */
	z-index: 20;
}
.layb-mappa-find__list.is-open {
	display: flex;
}

/* Voce nascosta dal filtro: selezione per classe+attributo
   (specificita' 0,2,0) cosi' batte un'eventuale regola "li" del tema
   senza bisogno di !important. Il JS imposta la proprieta' .hidden. */
.layb-mappa-find__list .layb-sede-item[hidden] {
	display: none;
}

/* I comuni sono <a class="et_pb_button"> generati dallo snippet: non
   possiamo mettergli la classe .layb-cta, ma con una regola "ponte" li
   ridisegniamo.
   AGGIORNAMENTO (D6.2, richiesta cliente): non piu' "chip" pillola in fila,
   ma RIGHE di un vero menu a tendina — larghezza piena, testo a sinistra,
   hover con sfondo leggero (coerente con un dropdown, non con un pulsante).
   NOTA: selettore con #id (1,1,0) per battere gli stili et_pb_button del
      tema senza bisogno di !important. */
#layb-sede-list .et_pb_button {
	display: block;
	width: 100%;
	box-sizing: border-box;
	margin: 0;
	padding: 10px 16px;
	font-family: inherit;          /* Lato, come gli altri bottoni */
	font-size: 15px;
	text-transform: none;          /* niente maiuscolo */
	letter-spacing: 0;
	text-decoration: none;
	text-align: left;
	background-color: transparent;
	color: #333;
	border: none;
	border-radius: 0;
	transition: background-color .2s ease, color .2s ease;
}
/* Hover/focus: sfondo azzurro chiaro + testo blu brand — voce di menu
   evidenziata, non piu' un pulsante che si "svuota". */
#layb-sede-list .et_pb_button:hover,
#layb-sede-list .et_pb_button:focus-visible {
	background-color: #eef3f9;
	color: var(--layb-cta-primary);
}

/* Messaggio "nessun risultato": il JS lo mostra (togliendo [hidden])
   solo quando il filtro non trova comuni. */
.layb-mappa-find__empty {
	margin: 12px 0 0;
	font-style: italic;
	opacity: .75;
}

/* --- Cartina VETTORIALE (V2): stati default e filtrato -------------
   La cartina ora e' un SVG di province (snippet "Mappa-sedi"): ogni
   provincia e' un <path class="layb-prov" data-prov="XX"> e ogni sede
   un <g class="layb-sede-pin" data-sede data-prov> con dentro corpo +
   puntino + anello. L'SVG NON ha stili inline: i colori li mette QUI il
   CSS, cosi' li governiamo dal tema. Il filtro (JS modulo 6) applica:
   .is-filtering su #mappa-sedi, .is-active sulle province da accendere,
   .in-active sui pin da tenere gialli, .is-hero sulla sede cercata.
   ------------------------------------------------------------------*/

/* DEFAULT: Lombardia blu brand, confini bianchi, pin gialli. */
#mappa-sedi .layb-prov {
	fill: var(--layb-cta-primary);
	stroke: #ffffff;
	stroke-width: 1.2px;
	transition: fill .25s ease;    /* passaggio morbido blu<->grigio */
}
#mappa-sedi .layb-sede-pin {
	transition: opacity .25s ease;
}
/* Ingrandimento all'hover — perche' scaliamo un gruppo INTERNO e non il pin:
   NOTA: il <g> del pin ha gia' un `transform` inline (translate + scale)
   nell'SVG. Scalarlo direttamente non va: la proprieta' `transform` lo
   sovrascriverebbe, e con lo `scale` individuale il `transform-box:
   fill-box` NON viene applicato (il <g> ha un transform proprio) -> lo
   scale avviene attorno all'origine (0,0) del disegno e il pin SCHIZZA in
   basso-destra. In piu', scalando anche l'area di hover, questa sfuggiva
   al cursore -> tremolio. Soluzione: il JS avvolge SOLO corpo + puntino in
   un gruppo interno .layb-sede-pin__scale (che NON ha transform proprio,
   quindi fill-box qui funziona). L'anello e il cerchio __hit (area di
   hover) restano FUORI: l'area di hover non cambia mai -> niente tremolio,
   e `transform-origin: 50% 100%` (centro-basso = la punta) fa crescere il
   pin dalla punta, restando ancorato. */
#mappa-sedi .layb-sede-pin__scale {
	transform-box: fill-box;
	transform-origin: 50% 100%;
	transition: transform .15s ease;
}
/* AGGIORNAMENTO 2026-07-27 (richiesta utente): lo stesso ingrandimento
   dell'hover si applica anche alla sede "hero", cioe' quella con la
   mini-card aperta — sia che ci si arrivi cliccando il pin sulla mappa
   sia scegliendola dalla lista/ricerca. Non serve toccare il JS: in
   ENTRAMBI i casi selectSede() gia' aggiunge .is-hero al pin giusto
   (vedi layb-tracking.js, modulo 6) — qui basta aggiungere .is-hero
   come secondo "trigger" della stessa transform, cosi' il pin resta
   ingrandito finche' la card e' aperta, non solo per la durata
   dell'hover del mouse. */
#mappa-sedi .layb-sede-pin:hover .layb-sede-pin__scale,
#mappa-sedi .layb-sede-pin.is-hero .layb-sede-pin__scale {
	transform: scale(1.25);
}
#mappa-sedi .layb-sede-pin__body {
	fill: #f2c14e;                 /* giallo/oro dei pin */
	stroke: #8a6d1d;               /* bordo scuro: stacca sul blu e sul grigio */
	stroke-width: 1px;
}
#mappa-sedi .layb-sede-pin__dot {
	fill: #ffffff;                 /* puntino centrale bianco */
}
#mappa-sedi .layb-sede-pin__ring {
	display: none;                 /* anello nascosto finche' la sede non e' "hero" */
}

/* FILTRANDO: tutto arretra — province grigie, pin sbiaditi... */
#mappa-sedi.is-filtering .layb-prov {
	fill: #c9ced6;
}
#mappa-sedi.is-filtering .layb-sede-pin {
	opacity: .16;
}

/* ...tranne la/e provincia/e della/e sede/i trovata/e (torna blu) e le
   sedi di quella provincia (tornano gialle piene). */
#mappa-sedi.is-filtering .layb-prov.is-active {
	fill: var(--layb-cta-primary);
}
#mappa-sedi.is-filtering .layb-sede-pin.in-active {
	opacity: 1;
}

/* La sede ESATTAMENTE cercata: mostriamo l'anello, che pulsa come un
   "radar" per distinguerla dalle altre sedi della stessa provincia. */
#mappa-sedi .layb-sede-pin.is-hero .layb-sede-pin__ring {
	display: block;
	fill: none;
	stroke: var(--layb-cta-primary);
	stroke-width: 3px;
	/* NOTA: Animiamo il raggio `r` (proprieta' CSS su <circle>): cresce
	   attorno al centro fisso e sfuma. */
	animation: layb-pin-ping 1.5s ease-out infinite;
}
@keyframes layb-pin-ping {
	0%   { r: 12px; opacity: 1; }
	100% { r: 26px; opacity: 0; }
}

/* Chi ha ridotto le animazioni: niente onda, anello statico visibile. */
@media (prefers-reduced-motion: reduce) {
	#mappa-sedi .layb-sede-pin.is-hero .layb-sede-pin__ring {
		animation: none;
		opacity: .9;
	}
}

/*==================================================================
D6.1 — Mini-card della sede (clic sul pin o su una voce della lista)
====================================================================
Clic su un pin (o su una voce della lista) apre una scheda piccola e
NON invasiva, ancorata al pin, con indirizzo + telefono + "Ottieni
indicazioni" + un bottone alla pagina della sede. E' un elemento HTML
iniettato dal JS (modulo 6) dentro #mappa-sedi, che qui rendiamo
position:relative per posizionarla in assoluto sul pin. Niente Popup
Builder.
------------------------------------------------------------------*/

/* Il contenitore mappa fa da riferimento per la posizione della card. */
#mappa-sedi {
	position: relative;
}

/* I pin sono cliccabili; l'area-hit (cerchio trasparente iniettato dal
   JS) allarga il bersaglio senza vedersi. */
#mappa-sedi .layb-sede-pin {
	cursor: pointer;
}
#mappa-sedi .layb-sede-pin__hit {
	fill: transparent;   /* 'transparent' (non 'none') resta cliccabile */
}

/* La scheda. */
.layb-sede-card {
	position: absolute;
	z-index: 20;
	width: 260px;
	max-width: calc(100% - 16px);
	box-sizing: border-box;
	background: #fff;
	border-radius: var(--layb-cta-radius);
	box-shadow: 0 10px 30px rgba(0, 0, 0, .18);
	padding: 14px 16px 16px;
	font-size: 14px;
	line-height: 1.45;
	color: #333;
}
.layb-sede-card[hidden] { display: none; }

.layb-sede-card__close {
	position: absolute;
	top: 4px;
	right: 8px;
	border: 0;
	background: none;
	font-size: 22px;
	line-height: 1;
	color: #9aa3ad;
	cursor: pointer;
}
.layb-sede-card__close:hover { color: #555; }

.layb-sede-card__title {
	margin: 0 22px 10px 0;    /* 22px a destra: spazio per la X; 10px sotto = stesso ritmo verticale degli altri blocchi */
	color: var(--layb-cta-primary);
	font-size: 21px;
}
.layb-sede-card__addr {
	margin: 0 0 10px;
	font-size: 14px;    /* esplicito: e' il riferimento per notaio/i e "Ottieni indicazioni" sotto */
}

/* Notaio/i della sede: sta TRA indirizzo e telefono. Dati ripresi dai
   popup del vecchio sito. La riga principale (nome del notaio titolare)
   e', dove esiste, seguita da una riga "secondaria" con gli altri notai
   (es. Lecco, Milano) - stessa dimensione e colore della principale
   (nero, come tutto il testo informativo della card): a distinguerla
   resta solo l'ordine (viene dopo). Solo il NOME del notaio (non tutta
   la dicitura "Sede del Notaio...") e' in grassetto: e' lo <strong
   class="layb-sede-card__notaio-name"> che il JS inietta attorno al
   nome dentro la frase (vedi SEDE_INFO/boldName in layb-tracking.js). */
.layb-sede-card__notaio { margin: 0 0 10px; }
.layb-sede-card__notaio[hidden] { display: none; }
.layb-sede-card__notaio-main {
	display: block;
	font-size: 14px;
	color: #333;
}
.layb-sede-card__notaio-sec {
	display: block;
	margin-top: 2px;
	font-size: 14px;
	color: #333;
}
.layb-sede-card__notaio-name {
	font-weight: 600;
}

.layb-sede-card__tel {
	display: inline-block;
	margin-bottom: 10px;
	color: #333;    /* nero come indirizzo/notaio, non piu' blu: qui non deve leggersi come link */
	font-weight: 600;
	text-decoration: none;
}
.layb-sede-card__tel:hover { text-decoration: underline; }

.layb-sede-card__actions {
	display: flex;
	flex-direction: column;
	gap: 10px;    /* stesso ritmo verticale degli altri blocchi della card */
}

/* "Ottieni indicazioni": non piu' un bottone, ma un LINK testuale
   (scelta utente). Cosi' resta chiara la gerarchia nel popup: un solo
   bottone vero ("Scopri lo studio") + un link di servizio.
   NOTA: align-self flex-start perche' il contenitore .layb-sede-card__actions
      e' un flex-column: senza, il link si stirerebbe a tutta larghezza. */
.layb-sede-card__dir {
	align-self: flex-start;
	color: var(--layb-cta-primary);
	font-size: 14px;    /* allineato all'indirizzo: stessa dimensione, stesso peso normale */
	text-decoration: underline;
	text-underline-offset: 2px;
}
.layb-sede-card__dir:hover {
	color: var(--layb-cta-primary-hover);
}

/* "Scopri lo studio" riusa .layb-cta--primary; qui lo rendiamo a blocco
   e centrato dentro la card. */
.layb-sede-card__go {
	display: block;
	text-align: center;
}

/* Freccia che punta al pin (sotto la card di default). La posizione
   orizzontale la imposta il JS in base a dove cade il pin. */
.layb-sede-card__arrow {
	position: absolute;
	bottom: -7px;
	width: 14px;
	height: 14px;
	background: #fff;
	transform: translateX(-50%) rotate(45deg);
	box-shadow: 3px 3px 6px rgba(0, 0, 0, .05);
}
/* Quando la card sta SOTTO il pin, la freccia va in cima. */
.layb-sede-card--below .layb-sede-card__arrow {
	bottom: auto;
	top: -7px;
	box-shadow: -3px -3px 6px rgba(0, 0, 0, .05);
}

/*==================================================================
D7 — Footer: 3 CTA (Contattaci / Scopri i servizi / Dove siamo)
====================================================================
I bottoni vivono in un widget "HTML personalizzato" del footer
(Aspetto -> Widget). Riusano .layb-cta di R1; qui aggiungiamo solo
il contenitore e l'allineamento icona+testo. La variante colore
si sceglie nell'HTML del widget in base al fondo del footer: quello
di Officina Notarile e' CHIARO, quindi --primary (blu pieno).

Icone: Font Awesome 4.2.0 (caricato globalmente dal tema padre,
quindi disponibile anche nel footer). Sintassi FA4: `fa fa-nome`.
Nel widget HTML l'markup e' grezzo (niente TinyMCE), percio' i tag
<i class="fa ..."> sopravvivono — a differenza delle card D3.

HTML di riferimento del widget:
  <div class="layb-footer-cta">
    <a class="layb-cta layb-cta--primary layb-cta--loc-footer" href="/contatti/"    data-cta-location="footer"><i class="fa fa-envelope"></i> Contattaci</a>
    <a class="layb-cta layb-cta--primary layb-cta--loc-footer" href="/servizi/"     data-cta-location="footer"><i class="fa fa-briefcase"></i> Scopri i servizi</a>
    <a class="layb-cta layb-cta--primary layb-cta--loc-footer" href="/#mappa-sedi"  data-cta-location="footer"><i class="fa fa-map-marker"></i> Dove siamo</a>
  </div>
------------------------------------------------------------------*/

/* Contenitore: flex con wrap. In un footer largo i 3 bottoni stanno
   in fila; in una colonna widget stretta vanno a capo (si impilano)
   da soli. gap = spazio TRA i bottoni. */
.layb-footer-cta {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
}

/* Ogni CTA del footer diventa inline-flex SOLO qui dentro (scope
   .layb-footer-cta): cosi' icona e testo restano allineati in
   verticale e il gap crea lo spazio icona<->testo, senza toccare
   le altre .layb-cta del sito. */
.layb-footer-cta .layb-cta {
	display: inline-flex;
	align-items: center;
	gap: 8px;
}

/*==================================================================
D8 — Header di pagina (page title): piu' respiro verticale
====================================================================
Il tema padre (lawyerbase/style.css) da' al box del titolo di pagina
padding: 75px 0px. Lo portiamo a 125px 0px SOLO qui nel child, sulla
CLASSE generale .gdlr-page-title-wrapper: cosi' OGNI header di pagina
(attuali e futuri, ovunque venga aggiunto) eredita da solo il nuovo
respiro, senza ritocchi elemento per elemento.

NOTA: niente !important. Il child si carica DOPO il padre; a parita' di
   specificita' vince l'ultima regola, cioe' questa.
------------------------------------------------------------------*/
.gdlr-page-title-wrapper { padding: 125px 0px; }

/* Su mobile/tablet 125px sopra+sotto sarebbero troppi: riduciamo il respiro.
   768px = stesso breakpoint gia' usato altrove nel child (es. D4.1). */
@media (max-width: 768px) {
	.gdlr-page-title-wrapper { padding: 80px 0px; }
}

/*==================================================================
D9 — Home: blocco Blog (articolo in evidenza + lista news)
====================================================================
Le due colonne sono il grid nativo del tema padre (.six.columns,
width:50% + float:left, style.css:111/126 del padre): nessun gap fra
loro di default. La riga non ha un Element ID (item builder nativi
senza campo classe/ID propri), quindi agganciamo il CSS con :has() al
contenuto che distingue le due colonne — stesso approccio gia' usato
altrove nel child per elementi senza classe propria (vedi D3/D3.1):
sinistra = l'articolo (.gdlr-blog-full), destra = la lista (contiene
.blog-widget-right-text-link, il link "Leggi tutte le news").
------------------------------------------------------------------*/

/* Spaziatura fra le colonne: margin-right sulla sinistra + margin-left
   sulla destra (30px ciascuno = 60px totali, lo stesso ritmo gia' in
   uso per gli altri blocchi Home, vedi D3/D3.1). Sottraiamo lo stesso
   valore dalla LARGHEZZA di ognuna: i due ".six" sono floated al 50%
   ciascuno, quindi un margine aggiuntivo senza toccare la larghezza
   farebbe sforare il container e la colonna destra "andrebbe a capo"
   sotto la sinistra (i float non si comprimono, si spostano quando non
   c'e' piu' posto in riga). Solo da tablet in su: sotto i 768px il
   tema le impila gia' a piena larghezza (style-responsive.css:36 del
   padre) e non serve alcun gutter. */
@media (min-width: 768px) {
	.six.columns:has(.gdlr-blog-full) {
		width: calc(50% - 30px);
		margin-right: 30px;
	}
	.six.columns:has(.blog-widget-right-text-link) {
		width: calc(50% - 30px);
		margin-left: 30px;
	}
}

/* "Leggi tutte le news": e' un link generato dal tema (item nativo
   "Blog Widget"), non un campo Content dove potremmo scrivere noi
   l'HTML — quindi non possiamo dargli la classe .layb-cta. Regola
   "ponte" (stesso approccio di #layb-sede-list .et_pb_button, D6.2):
   lo ridisegniamo come i pulsanti CTA generici (R1, variante
   --primary: blu pieno), ma con l'hover GRIGIO pieno delle card
   Servizi Home invece del classico "si svuota col bordo" — stessa
   scelta grafica di D3.1. Azzeriamo prima lo stile nativo (corsivo,
   margini stretti — parent style.css:954).
   NOTA sul !important sul solo colore: la sezione Blog vive dentro un
   wrapper ".gdlr-skin-light-grey" che nel CSS del tema (style-custom.css,
   generato dal Customizer) impone "color:#00387c" a TUTTI i link con
   selettore ".gdlr-skin-light-grey a" — specificita' (0,1,1), piu' alta
   della nostra singola classe (0,1,0): senza !important il testo del
   bottone resterebbe blu su sfondo blu, cioe' invisibile (bug verificato
   dal vivo). Stessa tecnica gia' usata in R1 per un problema analogo
   (l'ID di MetaSlider sull'hero). */
.blog-widget-right-text-link {
	display: inline-block;
	margin: 24px 0 0;
	padding: 14px 28px;
	font-size: 18px;
	font-style: normal;
	font-weight: 400;
	line-height: 1;
	text-decoration: none;
	border: 2px solid var(--layb-cta-primary);
	border-radius: var(--layb-cta-radius);
	background-color: var(--layb-cta-primary);
	color: var(--layb-cta-on-primary) !important;
	transition: background-color .25s ease, color .25s ease, border-color .25s ease;
}
.blog-widget-right-text-link:hover,
.blog-widget-right-text-link:focus-visible {
	background-color: var(--layb-cta-accent);
	border-color: var(--layb-cta-accent);
	color: #ffffff !important;
	text-decoration: none;
}
/* Stesso discorso per la freccetta dentro il bottone: ".gdlr-skin-light-grey i"
   (parent, style-custom.css) le impone anche a lei il blu brand — la
   forziamo bianca perche' stia sul fondo blu/grigio del bottone. */
.blog-widget-right-text-link i {
	color: #ffffff !important;
}

/* Su telefono si rimpicciolisce un filo, come gli altri .layb-cta
   (R1, stesso breakpoint 600px). */
@media (max-width: 600px) {
	.blog-widget-right-text-link {
		font-size: 16px;
		padding: 14px 22px;
	}
}

/*==================================================================
D10 — Riga di 3 card CTA (Contattaci / Copia Atti / Preventivo)
====================================================================
Blocco riusato TALE E QUALE su piu' pagine (oggi Contatti, in arrivo
anche le pagine dei form Preventivo e Copia atti): 3 item nativi "Box
Icon" in una riga a 3 colonne (".four.columns", 33.33% ciascuna, grid
del tema padre). Come le card Home (D3), non hanno un Element ID —
ma qui, a differenza di D3, NON possiamo nemmeno appoggiarci a un ID
"di pagina" (lo stesso identico blocco vivra' su 3 pagine diverse: un
domani, se lo si copia-incolla cosi' com'e', deve funzionare SUBITO
anche li' senza dover ritoccare questo CSS). Aggancio quindi sulla
FORMA del blocco — ".container" che ha tra i figli diretti ".four.
columns" con dentro un "box-with-icon-item" — non su un ID di pagina:
cosi' la regola scatta automaticamente ovunque questo stesso schema
(3 colonne + Box Icon) venga rimesso, comprese le altre 2 pagine.

Il problema che risolve: le 3 card hanno contenuti di lunghezza
diversa (oggi "Contattaci" ha solo un paragrafo di testo, "Copia Atti"
e "Preventivo" hanno un paragrafo piu' corto + pulsante) e senza
altezza forzata risultano scalate (misurato dal vivo: 272px contro
242px). Sulle altre pagine sara' probabilmente una card diversa (quella
"attiva") ad avere il paragrafo lungo senza pulsante — la regola non fa
ipotesi su QUALE delle tre sia piu' lunga, pareggia sempre e comunque
tramite flexbox + stretch, qualunque sia la combinazione di contenuti. */
.container:has(> .four.columns .gdlr-box-with-icon-item) {
	display: flex;
	flex-wrap: wrap;
	align-items: stretch;
}
.container:has(> .four.columns .gdlr-box-with-icon-item) > .clear {
	display: none;           /* il div .clear del sistema float e' inutile in flex */
}
/* Le 3 colonne diventano flex-item a larghezza UGUALE (flex-basis:0 =
   ignora il contenuto, si dividono lo spazio in 3 parti identiche,
   come il 33.333% nativo) e a loro volta flex-column, cosi' il loro
   contenuto (la card) puo' allungarsi fino a riempirle. */
.container:has(> .four.columns .gdlr-box-with-icon-item) > .four.columns {
	float: none;
	width: auto;
	flex: 1 1 0;
	display: flex;
	flex-direction: column;
}
/* Catena flex fino alla card: ".gdlr-box-with-icon-ux" (wrapper) e la
   card vera e propria si allungano a riempire la colonna (gia' resa
   alta quanto la piu' alta dal "stretch" della riga sopra). */
.container:has(> .four.columns .gdlr-box-with-icon-item) .gdlr-box-with-icon-ux,
.container:has(> .four.columns .gdlr-box-with-icon-item) .gdlr-box-with-icon-item {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
}
/* Se la card ha un pulsante, e' dentro un <p> (wpautop lo avvolge): lo
   ancoriamo in fondo con margin-top:auto, cosi' resta alla stessa
   altezza su tutte e 3 le colonne anche quando il testo sopra ha
   lunghezze diverse — invece di trovarsi "appiccicato" al paragrafo su
   una card e staccato in fondo su un'altra. Le card SENZA pulsante
   (es. "Contattaci" oggi) non hanno nulla da ancorare: nessun effetto. */
.container:has(> .four.columns .gdlr-box-with-icon-item) .box-with-icon-caption {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
}
.container:has(> .four.columns .gdlr-box-with-icon-item) .box-with-icon-caption p:has(a) {
	margin-top: auto;
}

/* Tablet/telefono: una colonna sola, card impilate a tutta larghezza
   (stesso breakpoint 768px di D3/D4.3). Serve esplicitamente perche' la
   regola sopra (flex:1 1 0) ha una specificita' piu' alta della regola
   nativa ".four{width:100%}" del breakpoint del tema (style-responsive.
   css:36) e la batterebbe, lasciando le 3 card strette anche su mobile. */
@media (max-width: 768px) {
	.container:has(> .four.columns .gdlr-box-with-icon-item) > .four.columns {
		flex: 1 1 100%;
	}
}

/*==================================================================
D11 — Immagine di sfondo nei blocchi "Half Background" (Wikijus, e-book...)
====================================================================
Componente nativo Goodlayers "gdlr-service-half-background-item": due
colonne affiancate, quella di destra (.gdlr-half-right) mostra
un'immagine impostata dall'editor come sfondo CSS. Il builder la stampa
con uno stile INLINE tipo style="background: url('...') center 0px;" —
la shorthand "background", quando non specifica repeat/size, li
resetta ai valori di default (repeat: l'immagine si ripete a
mattonelle; size: dimensione naturale, non riempie il riquadro).

NOTA: uno stile inline vince SEMPRE su una regola scritta qui,
qualunque sia la specificita' del selettore — l'unico modo per
sovrascriverlo e' !important. Caso legittimo di uso: non possiamo
toccare l'HTML generato dal builder.

AGGIORNAMENTO: non basta repeat/size. Le immagini di questo blocco
(es. banner_wikijus.png, img_ebook.jpg, entrambe 800x440) hanno il
logo/testo centrato VERTICALMENTE a meta' immagine, ma lo style
inline fissa "center 0px" = ancorato in ALTO. Con "cover" e la
posizione lasciata in alto, il crop mostra solo la parte superiore
dell'immagine e taglia via il logo (verificato dal vivo: si vedeva
solo uno sfondo scuro senza testo). Serve quindi sovrascrivere ANCHE
background-position, non solo repeat/size.

AGGIORNAMENTO 2: nemmeno "center center" bastava. Causa reale (parent
style.css:424/432): il tema pareggia l'altezza delle due colonne con
un trucco vecchio stile — padding-bottom:999px + margin-bottom:-999px
su .gdlr-half-left/.gdlr-half-right. Il margin negativo annulla lo
spazio nel LAYOUT della pagina, ma l'elemento resta alto quei 999px
DAVVERO nel DOM (verificato dal vivo: 1259px reali contro ~350px
visibili). "background-size/position" si calcolano sull'altezza REALE,
non su quella visibile: "center" cade a meta' dei 1259px, un punto ben
sotto cio' che si vede — nella fetta visibile finisce solo la parte
altissima dell'immagine, mai il logo a meta' altezza.
Fix: sul desktop sostituiamo il trucco padding/margin con un
pareggio-altezza via FLEX (stesso principio gia' usato in D4.3 per un
problema identico con le colonne float): l'altezza reale della colonna
destra torna a coincidere con quella visibile (il testo a sinistra), e
cover/center diventano prevedibili. Scoping a min-width:768px perche'
sotto quella soglia il tema nativo (style-responsive.css:96-97) GIA'
disattiva il trucco per conto suo (float:none) — non tocchiamo il
mobile, gia' sistemato altrove (parent style-custom.css:355).
------------------------------------------------------------------*/
@media (min-width: 768px) {
	.gdlr-service-half-background-item {
		display: flex;
		align-items: stretch;
	}
	.gdlr-service-half-background-item > .clear {
		display: none;           /* il div .clear del sistema float e' inutile in flex */
	}
	.gdlr-service-half-background-item .gdlr-half-left,
	.gdlr-service-half-background-item .gdlr-half-right {
		float: none;
		width: 50%;
		padding: 40px 0;
		margin-bottom: 0;
	}
}
.gdlr-service-half-background-item .gdlr-half-right {
	background-position: center center !important;
	background-repeat: no-repeat !important;
	background-size: cover !important;
}

/* MAVI /*
/* Modifica i padding del blocco specifico */
#fascia-servizi .gdlr-item-margin {
    padding-right: 20px !important;
}

/* Colori standard del pulsante */
.btn-ricevi-ebook {
    background-color: #ffffff !important;
    color: #00387c !important;
}

/* Colori del pulsante al passaggio del mouse (hover) */
.btn-ricevi-ebook:hover {
    background-color: #e8e8e8 !important; /* Grigietto chiaro */
    color: #00387c !important; /* Mantiene il testo blu aziendale */
}

.gdlr-tab-item.horizontal > .tab-title-wrapper .tab-title {
    font-size: 22px !important;
}

/* Distanzia l'intero blocco dei bottoni dal testo che c'è sopra */
.bottoni-notarili-custom {
    margin-top: 30px;
}

/* Stile base dei bottoni: bordi, transizione e spazio tra di loro */
.bottoni-notarili-custom .gdlr-button {
    border-radius: 3px !important;
    margin-left: 15px !important;
    margin-right: 15px !important;
    transition: background-color 300ms ease;
}

/* Cambia colore al passaggio del mouse */
.bottoni-notarili-custom .gdlr-button:hover {
    background-color: #414141 !important;
}

/* MAVI: aggiunto direttamente in WP, portato nel repo (check pre-sync) */
/* Sezione competenze in homepage */
.link-semplice {
    color: #00387C;
    text-decoration: none;
    font-weight: bold;
    transition: all 0.3s ease;
}

.link-semplice:hover {
    color: #414141;
    text-decoration: underline;
}

/* NOTA: i block widget WordPress nella sidebar (Articoli Recenti, Ricerca)
   non hanno un override dedicato ed ereditano da <body> un line-height di
   1.9 (parent theme lawyerbase, style.css:98): in una colonna stretta il
   testo risulta troppo "arioso". Riportiamo tutta la sidebar a un valore
   normale; le regole più specifiche qui sotto (es. .wp-block-search__label)
   restano più specifiche e continuano a vincere sulla cascata. */
.gdlr-sidebar {
	line-height: 1.5;
}

/* NOTA: ogni widget nella sidebar (parent theme, style.css:279,
   .widget.gdlr-widget) ha margin-bottom:50px, pensato per contenuti larghi.
   Qui i "widget" sono spesso DUE blocchi separati per sezione (es. il titolo
   H5 "Formulario" e il testo sotto sono due widget WordPress distinti): due
   margini da 50px si sommano tra una sezione e la successiva, con salti di
   spazio enormi. Riportato a un valore in linea con gli altri margini del
   tema (paragrafi, .gdlr-item usano gia' 20px). Scoped alla sidebar per non
   toccare .widget.gdlr-widget altrove nel sito (es. footer, che usa 60px). */
.gdlr-sidebar .widget.gdlr-widget {
	margin-bottom: 20px;
}

/* MAVI:
/* 1. Rimuove il maiuscolo SOLO dal testo del riassunto */
.gdlr-sidebar .wp-block-latest-posts__post-excerpt {
    text-transform: none !important;
}

/* 2. Protegge il tasto Leggi tutto costringendolo a restare maiuscolo */
.gdlr-sidebar a.excerpt-read-more {
    text-transform: uppercase !important;
}

/* 3. Effetto sottolineatura al tasto Leggi tutto al passaggio del mouse */
.gdlr-sidebar a.excerpt-read-more:hover {
    text-decoration: underline !important;
    text-underline-offset: 4px;
}

/* 4. Cambia l'icona con la catena SOLO per la lista degli articoli recenti */
.gdlr-sidebar .wp-block-latest-posts li:before {
    content: "\f0c1" !important;
    font-family: "FontAwesome" !important;
    border: none !important;
    color: #bdbdbd;
    margin-right: 8px;
}

/* Rimuove il margine inferiore dal titolo Articoli Recenti e dagli heading nella sidebar */
.gdlr-sidebar h5.wp-block-heading {
    margin-bottom: 0 !important;
}

/* Trasforma la label di ricerca in un H4 */
.gdlr-sidebar .wp-block-search__label {
    display: block !important;
    font-size: 21px !important; /* Dimensione standard di un H4 */
	font-family: "Cardo" !important;
    color: #383838 !important; /* Riprende il colore scuro dei tuoi widget */
    margin-bottom: 12px !important; /* Distanza dal campo di ricerca sottostante */
    line-height: 1.2 !important;
}

/* MAVI: aggiunto direttamente in WP (2026-07-25/26), portato nel repo (check pre-sync) */
.gdlr-pagination {
    text-align: center !important;
    display: block !important;
    width: 100% !important;
}

/* Aggiunge lo sfondo grigio al passaggio del mouse sui pulsanti */
a.wp-block-button__link.wp-element-button:hover {
    background-color: #414141 !important; /* Puoi cambiare #808080 con la sfumatura di grigio che preferisci */
    color: #ffffff !important; /* Mantiene il testo bianco per garantire la leggibilità */
    transition: background-color 0.3s ease; /* Aggiunge un effetto di transizione morbido */
	outline: none !important;
    box-shadow: none !important;
}

a.gdlr-button:hover {
    background-color: #414141 !important;
    color: #ffffff !important;
    transition: background-color 0.3s ease;
	outline: none !important;
    box-shadow: none !important;
}

/* Distanza tra i pulsanti su schermi grandi (Desktop e Tablet) */
a.gdlr-button + a.gdlr-button {
    margin-left: 20px !important;
}

/* Disposizione in colonna su schermi piccoli (Mobile) */
@media only screen and (max-width: 767px) {
    a.gdlr-button {
        display: block !important;
        width: 100% !important;
        /* NOTA: senza questo, "width:100%" si somma al padding nativo del
           bottone (10px 25px, box-sizing:content-box di default) e il
           bottone sfonda di 50px il bordo del contenitore che lo ospita
           (verificato dal vivo: card CTA di D10, ma vale per QUALSIASI
           .gdlr-button dentro un box stretto su mobile). */
        box-sizing: border-box !important;
        margin-left: 0 !important; /* Azzera il margine sinistro */
        margin-bottom: 15px !important; /* Aggiunge spazio sotto ogni pulsante */
        text-align: center !important;
    }
}

.gdlr-box-with-icon-item h1,
.gdlr-box-with-icon-item h2,
.gdlr-box-with-icon-item h3,
.gdlr-box-with-icon-item h4,
.gdlr-box-with-icon-item h5,
.gdlr-box-with-icon-item h6,
.gdlr-box-with-icon-item [class*="title"] {
    font-size: 26px !important; /* Ingrandisce il testo */
    display: block !important;
}

.gdlr-box-with-icon-item p {
margin: 0px !important;
text-align: center;
}

/* NOTA STORICA (2026-07-27): MariaVittoria aveva aggiunto direttamente in WP
   un blocco ".home .gdlr-box-with-icon-item" (altezza fissa 480px, larghezza
   48%) per le stesse card Privati/Aziende gia' gestite da D3/D3.1. Portato
   qui per non perderlo, ma verificato dal vivo (Claude-in-Chrome): vinceva
   sulle regole D3/D3.1 (i suoi !important su width/height battevano il
   flex:1 1 auto di D3), rompendo il layout gia' verificato — card strette
   (48% invece di ~438px) e lista voci spalancata con vuoti innaturali
   (justify-content:space-between su un'altezza fissa). RIMOSSO su richiesta
   esplicita dell'utente per ripristinare D3/D3.1: se in futuro serve una
   card piu' alta/larga, va fatto DENTRO D3/D3.1 (stesso aggancio :has()),
   non con una regola parallela su ".home .gdlr-box-with-icon-item". */

/*==================================================================
D12 — Chi Siamo: tab "sedi" a riga singola scorrevole (#tabs-sedi)
====================================================================
Elemento nativo Goodlayers "Tab" (gdlr-tab-item horizontal), 14 sedi.
Di default il tema mette i titoli in float (style.css del padre) e,
quando non entrano su una riga, vanno "a capo" invece di scorrere:
su desktop diventano 2 righe, su mobile fino a 6 — il blocco si
gonfia verticalmente prima ancora di mostrare il contenuto di una
sede (segnalato come "la tab diventa gigante").

Soluzione: passiamo da float a un contenitore FLEX a riga singola
che scorre in orizzontale invece di andare a capo. Scoping su
#tabs-sedi (Element ID assegnato all'item nel builder) e non sulla
classe generica .gdlr-tab-item, per non toccare eventuali altri Tab
presenti altrove nel sito.
------------------------------------------------------------------*/
#tabs-sedi > .tab-title-wrapper {
	display: flex;
	flex-wrap: nowrap;
	overflow-x: auto;
	overflow-y: hidden;

	/* NOTA: nasconde la scrollbar nativa del browser (resta scrollabile
	   col dito/trackpad/mouse, solo non si vede la barra grigia sotto).
	   Servono piu' proprieta' diverse perche' ogni motore browser ha la
	   sua: scrollbar-width per Firefox, -ms-overflow-style per il vecchio
	   Edge, ::-webkit-scrollbar per Chrome/Safari/Edge nuovo (sotto). */
	scrollbar-width: none;
	-ms-overflow-style: none;

	/* NOTA: mask-image "ritaglia" i bordi sinistro/destro rendendoli via
	   via trasparenti (un gradiente sulla trasparenza, non sul colore):
	   e' l'indizio visivo "c'e' altro, scorri" al posto di frecce o
	   scrollbar visibile. */
	-webkit-mask-image: linear-gradient(to right, transparent 0, black 24px, black calc(100% - 24px), transparent 100%);
	mask-image: linear-gradient(to right, transparent 0, black 24px, black calc(100% - 24px), transparent 100%);

	/* AGGIORNAMENTO (segnalato dall'utente): con la scrollbar nascosta, un
	   mouse normale non ha modo di scorrere la riga (niente touch/trackpad).
	   cursor:grab segnala che si puo' trascinare col mouse (JS Modulo 8,
	   pattern "drag-to-scroll"); durante il trascinamento il JS aggiunge la
	   classe is-dragging, che cambia il cursore in grabbing e disattiva la
	   selezione del testo (altrimenti trascinare selezionerebbe le parole). */
	cursor: grab;
}
#tabs-sedi > .tab-title-wrapper::-webkit-scrollbar {
	display: none;
}
#tabs-sedi > .tab-title-wrapper.is-dragging {
	cursor: grabbing;
	user-select: none;
}
#tabs-sedi > .tab-title-wrapper .tab-title {
	/* NOTA: il tema padre le mette in float:left (regola generica
	   .gdlr-tab-item.horizontal ... .tab-title): dentro un contenitore
	   flex il float viene ignorato, ma senza flex-shrink:0 flexbox
	   proverebbe comunque a "schiacciare" i 14 titoli per farceli stare
	   tutti in una riga invece di farli scorrere. white-space:nowrap
	   impedisce anche che un nome sede lungo (es. "Darfo Boario Terme")
	   vada a capo su se stesso dentro il proprio titolo. */
	flex: 0 0 auto;
	white-space: nowrap;
}

/* AGGIORNAMENTO (richiesta utente): altezza FISSA (non calcolata via JS)
   invece del min-height iniziale. Misurato dal vivo il testo reale di
   ogni sede: da 355px (Uboldo) a 1913px (Milano), la maggior parte tra
   400 e 850px. 450px tiene il blocco compatto fin da subito; le sedi con
   piu' testo (Erba, Lecco, Milano) scorrono internamente in verticale
   invece di allungare tutto il blocco. Con height FISSA (non max-height)
   il blocco resta della STESSA altezza per ogni sede, comprese quelle
   piu' corte: niente piu' "salto" passando da una sede all'altra.
   box-sizing:border-box fa si' che i 450px includano gia' il padding
   nativo del wrapper (20px 20px 0), invece di sommarlo sopra.

   Qui, a differenza della riga dei titoli, la scrollbar resta VISIBILE
   (sottile): il contenuto e' testo da leggere, quindi conviene segnalare
   chiaramente "c'e' altro sotto" invece di nasconderlo. scrollbar-width/
   scrollbar-color sono lo standard per Firefox; le regole
   ::-webkit-scrollbar sono l'equivalente per Chrome/Safari/Edge (due
   sintassi diverse per lo stesso risultato: nessun browser le legge
   entrambe, ma insieme coprono tutti i motori). */
#tabs-sedi > .tab-content-wrapper {
	box-sizing: border-box;
	height: 450px;
	overflow-y: auto;
	scrollbar-width: thin;
	scrollbar-color: #00387c #eee;
}
#tabs-sedi > .tab-content-wrapper::-webkit-scrollbar {
	width: 6px;
}
#tabs-sedi > .tab-content-wrapper::-webkit-scrollbar-track {
	background: #eee;
}
#tabs-sedi > .tab-content-wrapper::-webkit-scrollbar-thumb {
	background-color: #00387c;
	border-radius: 3px;
}

/*==================================================================
D13 — Biglietto digitale del notaio (bio-link mobile-first)
====================================================================
Pilota: Chiara Forino (/card-notaio-chiara-forino/). Il markup arriva da
5 shortcode piccoli in functions.php (layb_child_shortcode_biglietto_*),
uno per blocco — qui vestiamo solo l'aspetto, la composizione della
pagina resta negli item nativi del Page Builder (riordinabili in
dashboard, vedi nota in functions.php sul perche' NON e' un unico
shortcode: MariaVittoria deve poter continuare a lavorarci come su
qualunque altra pagina).

I due pulsanti (Contatta il notaio / Aggiungi alla rubrica) riusano
--layb-cta-primary e --layb-cta-secondary di R1: nessun colore nuovo,
coerenza automatica col resto del sito. Qui sotto solo elementi che R1
non copre (foto, sedi, servizi, social).
-------------------------------------------------------------------*/

/* Ogni blocco e' un item separato nel builder (vedi sopra): li limitiamo
   tutti alla stessa larghezza di lettura e li centriamo, cosi' la card
   resta coerente anche se in futuro la colonna del Page Builder si
   allarga oltre i 420px (es. su schermi molto larghi). */
.layb-biglietto__foto,
.layb-biglietto__sedi,
.layb-biglietto__cta,
.layb-biglietto__servizi,
.layb-biglietto__social-row {
	max-width: 420px;
	margin-left: auto;
	margin-right: auto;
}

/* --- Foto e nome ------------------------------------------------- */
.layb-biglietto__foto {
	text-align: center;
}
.layb-biglietto__avatar {
	width: 128px;
	height: 128px;
	border-radius: 50%;
	object-fit: cover;   /* NOTA: la foto sorgente non e' quadrata — cover la ritaglia senza deformarla */
	box-shadow: 0 0 0 4px #ffffff, 0 0 0 5px #e6e6e6;
	margin-bottom: 16px;
}
.layb-biglietto__role {
	margin: 0 0 2px;
	font-size: 13px;
	font-weight: 700;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: #8a93a0;
}
.layb-biglietto__nome {
	margin: 0;
	font-family: "Cardo", serif;   /* NOTA: stesso font dei titoli del tema, vedi D5.x */
	font-weight: 400;
	font-size: 32px;
	color: var(--layb-cta-primary);
}

/* --- Sedi ---------------------------------------------------------
   Stesso raggio (8px) e bordo (#e6e6e6) della card "Trova la sede piu'
   vicina a te" (D6 Home, vedi sopra nel file): coerenza visiva tra le
   due card di sede del sito, senza inventare un nuovo stile. */
.layb-sede-row {
	display: flex;
	align-items: flex-start;   /* NOTA: senza questo, il default e' "stretch": il
	                              pin si allungava per l'altezza di TUTTA la
	                              riga (citta'+indirizzo+telefono) invece di
	                              restare ancorato solo alla riga citta'. */
	gap: 12px;
	padding: 16px 18px;   /* NOTA: stesso padding di .layb-biglietto__servizi-link
	                         qui sotto — stessa "famiglia" di card (bordo e
	                         raggio identici), prima avevano padding diverso
	                         (14px vs 16px 18px) e si notava. */
	border: 1px solid #e6e6e6;
	border-radius: 8px;
	margin-bottom: 10px;
}
.layb-sede-row:last-child {
	margin-bottom: 0;
}
.layb-sede-row__icon {
	flex: none;
	width: 20px;
	height: 20px;   /* NOTA: stessa altezza della riga citta' (misurata: 20px,
	                    dettata dal tag "sede principale/secondaria" li' accanto)
	                    — cosi' il pin, centrato dentro questa "cella" fissa,
	                    coincide con la riga citta' invece che con tutto il blocco. */
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--layb-cta-primary);
	font-size: 16px;
}
.layb-sede-row__info {
	min-width: 0;   /* NOTA: senza questo, il testo lungo dell'indirizzo puo' far traboccare la riga flex */
	/* NOTA: prima lo spazio tra citta'/indirizzo/telefono era un margin-bottom
	   su ciascuna riga. Risultato incongruente (misurato: 3px vs 9px reali,
	   anche uniformando i margin a 6px restava 6px vs 9px): il margin-bottom
	   si somma allo spazio "fantasma" (leading) sopra/sotto ogni riga di
	   testo, che varia con font-size e line-height di CIASCUNA riga — quindi
	   lo stesso margin dichiarato produce gap visivi diversi. Il gap di
	   flexbox invece misura la distanza tra i BOX (bordo a bordo), ignorando
	   il leading: stesso principio gia' usato per .layb-biglietto__cta qui
	   sotto e per .layb-sede-card__actions della mappa. Piu' robusto che
	   rincorrere un line-height per riga. */
	display: flex;
	flex-direction: column;
	gap: 6px;
}
.layb-sede-row__city {
	margin: 0;   /* NOTA: lo spazio lo da' il gap del genitore, vedi sopra */
	font-weight: 700;
	font-size: 15px;
	line-height: 1.3;   /* NOTA: solo per la leggibilita' del testo (rapporto
	                        piu' compatto di quello globale del tema, 1.9x,
	                        pensato per paragrafi lunghi) — non serve piu' per
	                        il gap tra le righe, quello lo fa il genitore. */
	color: #222222;
	display: flex;
	align-items: center;   /* NOTA: "baseline" (prima) allineava il testo alla
	                          base del tag — ma un tag/pillola con solo padding
	                          non ha una vera baseline di testo, quindi appariva
	                          leggermente sollevato rispetto al nome citta'.
	                          "center" li allinea sulla stessa linea centrale. */
	gap: 8px;
	flex-wrap: wrap;
}
.layb-tag {
	font-size: 10px;
	font-weight: 600;
	letter-spacing: .02em;
	text-transform: uppercase;
	padding: 2px 7px;
	border-radius: 20px;
	position: relative;
	top: 2px;   /* NOTA: aggiustamento OTTICO, non geometrico. Il centro dei box
	               (misurato) coincide gia' col testo, ma a occhio il tag
	               "SEDE PRINCIPALE" restava percepito piu' in alto del nome
	               citta' — il centro di un box non e' sempre il centro
	               percepito quando i font/pesi sono molto diversi tra loro.
	               Verificato dal vivo dopo la modifica, non calcolato a tavolino. */
}
.layb-tag--main {
	background-color: #eef3f9;
	color: var(--layb-cta-primary);
}
.layb-tag--shared {
	background-color: #f5f5f5;
	color: #666666;
}
.layb-sede-row__addr {
	margin: 0;   /* NOTA: lo spazio lo da' il gap del genitore, vedi sopra */
	font-size: 14px;
	color: #555555;
	line-height: 1.45;   /* piu' ampio di .layb-sede-row__city: l'indirizzo puo' andare a capo */
}
.layb-sede-row__tel {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: 14px;
	line-height: 1.3;   /* NOTA: stesso motivo di .layb-sede-row__city sopra */
	font-weight: 600;
	color: var(--layb-cta-primary);
	text-decoration: none;
}
.layb-sede-row__tel:hover,
.layb-sede-row__tel:focus-visible {
	text-decoration: underline;
}

/* --- CTA ------------------------------------------------------------
   I bottoni sono gia' .layb-cta--block (pieno width, R1): qui aggiungiamo
   solo lo spazio TRA i due, con flex invece di un margin-bottom che
   servirebbe solo a uno dei due. */
.layb-biglietto__cta {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

/* --- Servizi -------------------------------------------------------- */
.layb-biglietto__servizi-link {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 16px 18px;
	border: 1px solid #e6e6e6;
	border-radius: 8px;
	text-decoration: none;
	color: #222222;
	font-weight: 700;
	font-size: 15px;
	transition: border-color .15s ease, background-color .15s ease;
}
.layb-biglietto__servizi-link:hover,
.layb-biglietto__servizi-link:focus-visible {
	border-color: var(--layb-cta-primary);
	background-color: #f7f9fc;
	text-decoration: none;
}
.layb-biglietto__servizi-link i {
	color: var(--layb-cta-primary);
}

/* --- Social ----------------------------------------------------------
   Icone tonde tutte uguali, quante che siano (Instagram/Facebook/
   LinkedIn/WhatsApp): lo shortcode biglietto_social (functions.php)
   stampa solo quelle compilate, quindi qui non serve gestire "vuoto". */
.layb-biglietto__social-row {
	display: flex;
	justify-content: center;
	gap: 14px;
}
.layb-biglietto__social-icon {
	width: 44px;
	height: 44px;
	border-radius: 50%;
	border: 1.5px solid #e6e6e6;
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--layb-cta-primary);
	font-size: 18px;
	transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}
.layb-biglietto__social-icon:hover,
.layb-biglietto__social-icon:focus-visible {
	background-color: var(--layb-cta-primary);
	border-color: var(--layb-cta-primary);
	color: #ffffff;
}
.layb-biglietto__social-icon i {
	/* NOTA: le icone .fa ereditano di default un margin-right (pensato per
	   il caso "icona + testo affiancati", es. il telefono in .layb-sede-row).
	   Qui l'icona e' sola dentro un cerchio centrato: quel margine asimmetrico
	   sposta il glifo di ~2.5px a sinistra del vero centro. Azzerato SOLO
	   in questo contesto, non tocca le altre icone del sito. */
	margin: 0;
}

/* MAVI: aggiunto direttamente in WP, portato nel repo il 2026-07-28 (check pre-sync) */
/* ==========================================================================
   Personalizzazioni Footer
   ========================================================================== */

/* AGGIORNAMENTO 2026-07-29 (ottimizzazione spazi, richiesta utente):
   allineamento orizzontale a logo/lente dell'header, stesso obiettivo gia'
   raggiunto per #mappa-sedi (vedi D2.2 sopra). Misurato dal vivo: il
   .footer-container eredita gia' lo stesso .container del tema (1140px,
   stessi bordi sx/dx dell'header), ma logo e lente hanno un margine nativo
   di 15px rispetto al bordo del container (il tema padre imposta
   .gdlr-logo{ margin-left:15px; margin-right:15px } e lo stesso vale per il
   blocco ricerca) che il footer non replicava. Il padding qui compensa
   quei 15px per lato. */
.footer-container.container {
    /* box-sizing:border-box necessario: il tema non lo imposta di default,
       quindi senza questa riga il padding si sommerebbe FUORI dal
       max-width:1140px ereditato da .container, allargando il box invece
       di restringere lo spazio utile interno (verificato dal vivo: senza
       questa riga le colonne restavano esattamente dov'erano prima). */
    box-sizing: border-box;
    padding-left: 15px;
    padding-right: 15px;
}

/* Le colonne native del tema (.three, width:25% fisso, vedi style.css del
   tema padre) danno a ogni colonna la stessa larghezza indipendentemente
   dal contenuto: la colonna "Dove Siamo" (un solo link breve) finiva cosi'
   ben prima del bordo destro reale (vicino alla lente), mentre "Contatti"
   (3 link) restava piu' equilibrata. Da 768px in su (sopra la soglia alla
   quale il tema impila le colonne per il mobile, vedi style-responsive.css
   riga 36: .three{width:100%} sotto i 767px) passiamo a un layout
   flessibile dove ogni colonna occupa solo lo spazio del suo contenuto; lo
   spazio vuoto viene ridistribuito in modo uniforme tra le colonne
   (justify-content:space-between), cosi' la prima resta ancorata a sx e
   l'ultima si allinea al bordo dx. max-width la tiene comunque entro la
   larghezza originale (1140px / 4 colonne = 285px), per sicurezza nel caso
   di testo piu' lungo in futuro. Sotto i 768px non tocchiamo nulla: resta
   il comportamento nativo del tema (colonne impilate a piena larghezza). */
@media (min-width: 768px) {
    .footer-container {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
    }
    .footer-container .footer-column {
        width: auto;
        max-width: 285px;
        float: none;
    }
    /* Il markup del tema (footer.php) mette un <div class="clear"> dopo le
       colonne, per il clearfix del vecchio layout a float — con flex
       diventerebbe un quinto flex-item "fantasma" che space-between
       piazzerebbe al bordo destro, spingendo la vera ultima colonna
       (Dove Siamo) indietro esattamente come le altre erano spinte prima
       (verificato dal vivo: senza questa riga tutte le colonne avevano lo
       stesso gap, compresa l'ultima rispetto al bordo). Con flex il
       clearfix non serve piu': lo nascondiamo solo qui. */
    .footer-container.container > .clear {
        display: none;
    }
}

/* 1. Spaziatura interna inferiore per l'intero footer (ridotta da 60px:
   troppo vuoto prima della barra di copyright, richiesta utente 2026-07-29) */
.footer-container {
    padding-bottom: 30px !important;
}

/* 2. Margin-bottom di 20px SOLO per la figura/immagine del logo nel footer */
.footer-column .wp-block-image,
.footer-wrapper .wp-block-image {
    margin-bottom: 20px !important;
}

/* 3. Riduci il margine inferiore dei blocchi widget nel footer */
.footer-wrapper .widget.gdlr-widget {
    margin-bottom: 20px !important;
}

/* 4. Imposta l'interlinea per le colonne del footer */
.footer-wrapper .footer-column,
.footer-column {
    line-height: 1.5;
}

/* 5. Riduci il margin-bottom degli h4 e ripristina il font-weight bold SOLO
   nel footer (il commento originale diceva "rimuovi" ma il valore era
   20px: incongruenza corretta il 2026-07-29, vedi spiegazione a fine
   sezione) */
.footer-wrapper h4.wp-block-heading,
.footer-column h4.wp-block-heading {
    margin-bottom: 12px !important;
    font-weight: bold !important;
}

/* 6. Riduci il margin-bottom dei paragrafi (i singoli link di ogni
   colonna, es. "Richiedi Preventivo") SOLO nel footer (stessa incongruenza
   di sopra: il commento diceva "rimuovi" ma il valore era 20px, causando
   troppo spazio tra un link e l'altro; corretto il 2026-07-29) */
.footer-wrapper p.wp-block-paragraph,
.footer-column p.wp-block-paragraph {
    margin-bottom: 8px !important;
}

.titolo-normale-sedi {
    font-weight: normal !important;
    font-size: 39px !important; /* MAVI: aggiunto direttamente in WP, portato nel repo il 2026-07-28 (check pre-sync) */
}

