/* Classi di formato assegnabili dalla tendina di textarea-custom (vedi
   assets/textarea-custom/). Fonte unica: caricato sia in wp-admin (dentro
   .tiptap, per il WYSIWYG in editing) sia in frontend (sul markup
   salvato) — stesso file, stesso risultato visivo in entrambi i posti,
   nessuna classe duplicata altrove. Solo selettori di classe, niente
   elementi nudi sciolti (body/h1/a/...): sicuro da caricare anche in
   wp-admin. Eccezioni sotto, MAI un elemento nudo da solo - sempre scoped
   dentro .tiptap/.txc-richtext o in coppia con una classe: il reset h1-h4,
   il reset color su <mark> (evidenziazione) e il reset font-weight su
   "strong .testo-*"/"strong .titolo-*"/"strong .label" (grassetto dentro
   un formato, vedi piu' sotto per entrambi). */

@import url("tokens.css");

:root {
	/* Rientro comune a elenco puntato e numerato, sia in editor (.tiptap)
	   che in frontend (.txc-richtext): un solo valore, unica fonte perche'
	   questo file (a differenza di textarea-custom.css) e' caricato in
	   entrambi i posti - editor e sito pubblico restano sempre allineati.
	   Non tocca l'elenco iconato, il cui rientro deriva da --txc-icon-size
	   qui sotto e va per forza di pari passo con la dimensione icona scelta,
	   non con questo valore. */
	--txc-list-indent: 0px;
}

/* La select "Heading" del toolbar (H1-H4, vedi addHeadingSelect() in
   editor.js) cambia solo il TAG semantico del blocco (p -> h1..h4), non deve
   ereditare lo stile grosso/bold di h1/h2 definito in base.css (quello e'
   per i titoli VERI di pagina - index.php - che non passano da qui;
   slider-block__title era anche lui un'eccezione ma non piu': il campo
   "Titolo" del blocco Slider e' diventato un TextareaCustom a tutti gli
   effetti, vedi .slider-block__title in assets/css/slider.css). Risultato
   visivo resta comandato solo dalle classi qui
   sopra (titolo-big/medium/small). Scope: .tiptap = dentro l'editor
   wp-admin, .txc-richtext = sui 4 contenitori in frontend dove il markup
   TipTap viene stampato (vedi apply_filters('the_content', ...) in
   includes/blocks.php e includes/assets.php).
   Specificita' ".txc-wrap .tiptap" (due classi) e non solo ".tiptap": wp-admin
   ha di suo una regola sul titolo di pagina (".wrap h1", stessa specificita'
   0-1-1 di ".tiptap h1") che altrimenti vince o perde a seconda dell'ordine
   di caricamento - qui deve vincere sempre noi.
   Azzerato tutto (padding/line-height/colore) invece di replicare i valori
   che wp-admin inietta di suo sui tag <p> (.nma-repeater__item p in
   blocks-admin.css: padding 0 10px: regola "p" di wp-admin/css/common.css:
   line-height 1.5) - h1-h4 non li ereditano restando a 0/normal, da qui lo
   scarto passando da paragrafo a titolo. Invece di rincorrere quei valori
   "magici" qui, li neutralizziamo anche sul paragrafo stesso (vedi
   .txc-wrap .tiptap p in textarea-custom.css): risultato indipendente dal
   CSS di wp-admin invece che agganciato a un suo dettaglio implementativo.
   !important necessario: wp-admin stila h2 (e in parte h1) dentro le sue
   metabox con selettori a ID ("#poststuff h2", "#poststuff .stuffbox > h3",
   specificita' 1-0-1) che nessuna combinazione di classi puo' battere -
   senza !important su h2 restava un padding 8px 12px + line-height 1.4
   "regalati" dallo stile della postbox di WordPress, invisibili su h1/h3/h4
   che quella regola non tocca (da qui il bug visibile solo su H2). */
.txc-wrap .tiptap h1,
.txc-wrap .tiptap h2,
.txc-wrap .tiptap h3,
.txc-wrap .tiptap h4 {
	font: inherit !important;
	color: inherit !important;
	line-height: 1.5 !important;
	margin: 0 0 12px !important; /* stesso ritmo di .txc-wrap .tiptap p (textarea-custom.css) */
	padding: 0 !important;
}

.txc-richtext h1,
.txc-richtext h2,
.txc-richtext h3,
.txc-richtext h4 {
	font: inherit;
	margin: 0 0 1em; /* margine di default del browser per <p>, non sovrascritto in frontend */
}

/* <mark> (evidenziazione di TextareaCustom, vedi createHighlightExtension()
   in assets/textarea-custom/src/editor.js): bug verificato con devtools,
   non un problema di dati/JS - il colore testo (mark "textStyle", classe
   .txc-color-* o style inline su uno <span> ANTENATO del <mark>) risultava
   sempre "colore predefinito" nonostante fosse salvato correttamente nel
   markup, sia in editor che sul sito pubblico. Causa: lo user-agent
   stylesheet del browser da' a <mark> un "color" TUTTO SUO (Chrome/Safari:
   "mark { background-color: yellow; color: black; }", nessun !important) -
   l'ereditarietà del color dallo <span> antenato non e' una "regola" che
   compete per specificita' con quella dello UA, e' solo il fallback usato
   quando NESSUNA regola tocca la proprieta' sull'elemento stesso: dato che
   lo UA stylesheet la tocca (color:black), quello vince sempre sul <mark>,
   a prescindere da quanto sia "forte" il colore scelto sull'antenato.
   "color: inherit" qui sotto e' una regola d'AUTORE (basta un normal
   qualsiasi, anche a specificita' minima come "mark" nudo: l'origine
   "author" batte sempre "user agent" indipendentemente dalla specificita')
   che fa scomparire il color:black dello UA, lasciando il <mark> ereditare
   davvero dall'antenato come ci si aspetterebbe. Non tocca
   background-color: quello lo controllano le classi .txc-highlight-* (piu'
   specifiche di un mark nudo, vincono comunque). */
.txc-wrap .tiptap mark,
.txc-richtext mark {
	color: inherit;
}

/* Mark "link" del rich text (TextareaCustom, bottone "Link" della toolbar -
   vedi RichLink in assets/textarea-custom/src/editor.js): ":not(.btn)"
   esclude i bottoni CTA, un <a class="btn ..."> del tutto diverso con gia'
   il proprio stile in assets/css/cta-buttons.css, mai questo qui. */
.txc-richtext a:not(.btn) {
	color: var(--color-primario, #2271b1);
	text-decoration: underline;
}

/* Parola dentro il link con un colore proprio (classe .txc-color-{slug} o
   style="color:..." inline, colore libero - vedi createNamedColorExtension()
   in editor.js): senza questa regola la sottolineatura resta comunque del
   colore dell'<a> (sopra), qualunque colore si dia alla parola - verificato
   con devtools su sito pubblico (naimadigital.it/4yl2/assicurazioni/):
   testo nero, riga gialla (colore dell'<a>). Causa: la riga sottolineata
   ereditata da un antenato con text-decoration e' un unico tratto disegnato
   DALL'ANTENATO stesso - ridichiarare solo text-decoration-color su un
   discendente non basta (il tratto resta quello ereditato, il browser non
   lo "ridisegna" a pezzi per colore); serve ridichiarare anche
   text-decoration-line li', cosi' il discendente apre un proprio tratto
   indipendente, colorato con il SUO currentColor (il color appena
   impostato sopra da .txc-color-* o dallo style inline) invece di quello
   ereditato dall'<a>. Stesso principio del bug <mark> commentato sopra
   (color: inherit li'), un passo in piu' per la riga rispetto al colore. */
.txc-richtext a:not(.btn) [style*="color"],
.txc-richtext a:not(.btn) [class*="txc-color-"] {
	text-decoration-line: underline;
	text-decoration-color: currentColor;
}

/* Riga vuota (Invio ripetuto nell'editor) salvata come <p></p> davvero vuoto,
   senza nemmeno un <br> dentro: in editing SI vede perche' ProseMirror inietta
   li' un <br> invisibile solo per poterci mettere il cursore (mai salvato in
   getHTML()), qui in frontend invece un <p> del tutto vuoto (0 righe di testo,
   niente border/padding) va in "self-collapsing" per spec CSS - i suoi stessi
   margin top/bottom collassano fra loro E con quelli dei paragrafi vicini,
   quindi PIU' righe vuote di fila spariscono tutte insieme in un unico spazio
   invece di sommarsi. min-height le esclude dal self-collapsing (basta un
   valore diverso da zero/auto) e le rende visibili quanto una riga di testo. */
.txc-richtext p:empty {
	min-height: 1em;
}

/* Rientro puntato/numerato in frontend: allinea il padding-left allo stesso
   --txc-list-indent dell'editor. L'iconato NON serve qui: stesso
   --txc-list-indent, ma gia' coperto dalla regola .txc-icon-list qui sopra
   (nessun ":not()", altrimenti l'iconato restava di nuovo sul default
   browser) - il suo marker e' un ::before dentro al <p> (hanging indent
   manuale), non il ::marker nativo qui sotto, quindi non ha bisogno dello
   spazio estra riservato dalla regola successiva. */
.txc-richtext ul,
.txc-richtext ol {
	padding-left: var(--txc-list-indent);
}

/* list-style ESPLICITO (invece di lasciare il default browser, comunque
   "disc"/"decimal" per <ul>/<ol>) + spazio EXTRA riservato oltre
   --txc-list-indent: bug verificato con devtools sul sito pubblico, non
   una semplice questione di colore. --txc-list-indent di default e' 0px
   (vedi :root sopra) - con "list-style-position: outside" (default) il
   ::marker nativo si disegna FUORI dal border-box del <li>, in uno spazio
   riservato a sinistra del padding-left. A 0px quello spazio non esiste:
   il marker resta comunque generato (visibile in wp-admin, dove il
   contenitore dell'editor non taglia nulla) ma sul sito pubblico il primo
   ANCESTOR con "overflow:hidden" (es. .strip__block, necessario per gli
   angoli arrotondati dello sfondo - vedi assets/css/strip.css) lo ritaglia
   via essendo fuori dal proprio bounding box: il pallino/numero sparisce
   del tutto, qualunque colore gli si dia (bug segnalato: testo colorato
   bianco correttamente, marker "bianco" mai visibile perche' in realta'
   MAI renderizzato a schermo, non per un problema di colore). Il "+1.2em"
   qui sotto riserva sempre spazio sufficiente al marker nativo, sopra al
   rientro configurabile scelto dall'utente (che puo' restare 0 per un
   layout a filo, senza per questo tagliare via il marker) - stesso
   principio dei due livelli di spaziatura gia' usati dall'iconato
   (--txc-list-indent per il blocco + spazio proprio per marker/testo,
   vedi .txc-icon-list sopra). Specificita' ":not(.txc-icon-list)" (0-2-1)
   sopra ".txc-richtext ul" semplice (0-1-1, regola precedente): vince
   sempre lei per il plain bullet, l'iconato resta sul solo
   --txc-list-indent della regola precedente, mai su questo spazio extra
   che non gli serve. Stessa dichiarazione (list-style, non lo spazio
   extra qui - li' basta perche' non clippato) gia' presente in wp-admin
   (.txc-wrap .tiptap ul/ol in textarea-custom.css), qui replicata per il
   sito pubblico cosi' editor e frontend restano visivamente allineati. */
.txc-richtext ul:not(.txc-icon-list) {
	list-style: disc;
	padding-left: calc(var(--txc-list-indent) + 1.2em);
}

.txc-richtext ol {
	list-style: decimal;
	padding-left: calc(var(--txc-list-indent) + 1.2em);
}

.label {
	font-size: 12px;
	font-weight: 600;
	line-height: 1.2;
	text-transform: uppercase;
	letter-spacing: 0.05em;
}

.titolo-big {
	font-size: 3rem;
	font-weight: 900;
	line-height: 1.2;

}

.titolo-medium {
	font-size: 1.8rem;
	font-weight: 700;
	line-height: 1.2;
}

.titolo-small {
	font-size:  1rem;
	font-weight: 700;
	line-height: 1.2;
}

.testo-big {
	font-size: 1.5rem;
	font-weight: 400;
	line-height: 1.4;
}

.testo-medium {
	font-size: 1.2rem;
	font-weight: 400;
	line-height: 1.4;
}

.testo-small {
	font-size: 1rem;
	font-weight: 400;
	line-height: 1.4;
}

.testo-super-small {
	font-size: 0.8rem;
	font-weight: 400;
	line-height: 1.4;
}

/* Grassetto (mark "bold" di TipTap StarterKit) dentro un formato con un suo
   font-weight esplicito (le classi testo-.../titolo-.../label qui sopra):
   stesso identico bug/causa del reset color su <mark> qui sotto, non un
   problema diverso -
   segnalato per "testo-medium" (font-weight:400) ma vale per QUALUNQUE
   formato qui sopra. Il mark "formatClass" (classe .testo-medium ecc, vedi
   FormatClass in editor.js) e il mark "bold" sono due mark INDIPENDENTI
   sulla stessa selezione: TipTap li nidifica nel DOM in un ordine fisso
   deciso dal "rank" di ognuno nello schema (l'ordine in cui le estensioni
   sono registrate in editor.js, MAI dall'ordine in cui l'utente li applica
   in editor) - "bold" viene da StarterKit, registrato PRIMA di FormatClass,
   quindi ha rank piu' basso e finisce SEMPRE come elemento piu' esterno:
   <strong><span class="testo-medium">testo</span></strong>, mai il
   contrario. Il font-weight:400 di ".testo-medium" e' dichiarato
   DIRETTAMENTE sullo <span> (non ereditato) - una dichiarazione diretta
   batte SEMPRE l'ereditarietà dall'antenato <strong>, quale che sia la sua
   specificita' o quella di ".testo-medium": l'ereditarietà non e' una
   regola che compete, e' solo il fallback quando nessuna regola tocca la
   proprieta' sull'elemento stesso. Risultato: il grassetto risultava
   sempre invisibile su testo con un formato assegnato (bug segnalato).
   Fix: un selettore "strong .formato" (specificita' 0-1-1, piu' alta del
   solo ".formato" a 0-1-0) per ognuno dei formati sopra, che riafferma
   font-weight:bold quando quel formato e' nidificato dentro un <strong> -
   vince sempre sul font-weight della classe, qualunque browser/ordine di
   caricamento CSS, senza bisogno di !important. */
strong .label,
strong .titolo-big,
strong .titolo-medium,
strong .titolo-small,
strong .testo-big,
strong .testo-medium,
strong .testo-small,
strong .testo-super-small {
	font-weight: bold;
}

/* Colori "con nome" selezionabili dal pannello "Colore testo" di
   TextareaCustom (swatch con "slug", vedi window.NMA_TEXT_COLORS in
   text-formats.js e createNamedColorExtension() in editor.js - componente
   generico, non hardcoded li'): scegliendo uno di questi swatch il mark
   ottiene la classe ".txc-color-{slug}" invece di uno style inline, cosi'
   il colore resta agganciato alla sua variabile CSS e segue da solo un
   cambio fatto in "Impostazioni Tema".
   Le regole ".txc-color-*" NON sono piu' qui (erano statiche, una per
   colore, da riscrivere a mano ad ogni colore aggiunto/tolto): sono
   generate a runtime da nma_theme_settings_named_color_classes_css() in
   includes/theme-settings.php, sorgente unica DB (nma_theme_settings_all_colors()),
   iniettate su questo stesso handle 'nma-text-formats' sia in frontend che
   in wp-admin (nma_theme_settings_frontend_overrides()/_admin_text_override()) -
   un colore aggiunto in Impostazioni Tema ottiene la sua classe senza
   toccare questo file. */

/* Tabelle create da TextareaCustom (vedi assets/textarea-custom/): bordo e
   spaziatura di base sulle celle. Colore/spessore bordo e riempimento
   scelti per singola cella restano style inline sul markup salvato, non
   servono qui — solo l'aspetto "di default" prima di ogni personalizzazione.

   border-collapse: separate (non collapse) e' obbligatorio, non estetico:
   con "collapse" i bordi di celle adiacenti si fondono in un'unica linea e
   il browser sceglie lui quale bordo "vince" — border-radius sulle celle
   smette di funzionare bene in quel caso (l'angolo arrotondato si sovrappone
   al bordo dritto della cella vicina, il bug segnalato). Con "separate" ogni
   cella disegna il proprio bordo in modo indipendente, coerente con la
   scelta lati (tutti/esterno/interno/singolo lato, vedi
   applyBorderSides() in editor.js) e con l'arrotondamento.

   table-layout: fixed e' necessario perche' le larghezze di colonna
   impostate da "Distribuisci colonne" / trascinando il bordo (attributo
   colwidth, vedi editor.js) vengano rispettate: senza, il browser
   ridimensiona le colonne in base al contenuto e ignora le larghezze
   esplicite quando il testo e' piu' largo della colonna. */
.txc-table {
	border-collapse: separate;
	border-spacing: 0;
	table-layout: fixed;
	width: 100%;
	margin: 0 0 24px;
	/* Colonne in px (vedi sopra): su schermi stretti la tabella puo' superare
	   il contenitore. Scroll orizzontale solo sulla tabella stessa (era su
	   .strip__block-text in strip.css - spostato qui perche' quel contenitore
	   avvolge anche testo senza tabelle, dove l'overflow-x non serviva e
	   causava una barra verticale spuria su alcuni browser/OS). */
	overflow-x: auto;
}

.txc-table td,
.txc-table th {
	border: 1px solid #cccccc;
	padding: 6px 8px;
	min-width: 40px;
	vertical-align: top;
}

/* Elenco iconato (nodo bulletList esteso "IconBulletList" in
   assets/textarea-custom/src/editor.js): marker puro CSS, non un nodo per
   riga. --fa/--txc-icon-color/--txc-icon-size sono custom property su
   <ul> risolte una volta sola al momento della scelta (vedi
   resolveFaChar() in editor.js) ed EREDITATE da ogni <li> - :root non le
   ridefinisce, quindi bastano sull'<ul> anche se righe vengono
   aggiunte/rimosse dopo.

   --fa e' lo stesso meccanismo di Font Awesome 7 (assets/vendor/
   fontawesome/): ogni icona imposta quella custom property col proprio
   glifo, la regola generica di FA la consuma via content:var(--fa)/"" -
   qui rifacciamo lo stesso ::before ma posizionato/colorato/dimensionato
   dal nostro <ul> invece che dalla classe icona originale (che qui non e'
   piu' sull'elemento, solo salvata in data-icon per poter riaprire il
   pannello di scelta).

   Il marker va sul primo <p> di ogni <li> (non su <li> stesso): ogni voce
   e' <li><p>testo</p></li> (schema ListItem di TipTap), e un ::before
   generato su <li> finirebbe in un proprio "blocco" prima del <p>,
   staccato dalla sua prima riga - niente centratura verticale possibile
   con quella riga, serve invece che marker e testo condividano la STESSA
   riga. Tecnica "hanging indent": text-indent negativo su tutto il <p>
   (tira indietro la prima riga), ::before inline-block riempie esattamente
   quello spazio con text-indent:0 e vertical-align:middle - cosi' resta
   sempre allineato al centro della prima riga qualunque sia la sua altezza
   (dimensione icona diversa dal testo, formato titolo vs testo normale,
   ecc.), e le righe successive (testo che va a capo) restano un rientro
   pulito sotto, mai sovrapposte al marker. */
.txc-icon-list {
	list-style: none;
	/* Rientro del BLOCCO lista (stesso --txc-list-indent di ul/ol normali,
	   vedi sopra) - non c'entra col rientro icona/testo dentro ogni riga,
	   quello resta calc(--txc-icon-size + 8px) sul <p> qui sotto, mai
	   toccato da questa variabile. Prima non c'era nessuna regola qui:
	   il <ul> teneva il padding-left di default del browser (~40px), mai
	   legato a --txc-list-indent nonostante il nome sembrasse coprire anche
	   l'iconato. */
	padding-left: var(--txc-list-indent);
}

/* Larghezza del rientro: DEVE essere lo stesso identico valore sia qui
   (padding-left/text-indent, sul <p>) sia sotto (width, sul ::before) -
   prima era "1.5em" in entrambi i posti, ma "em" si calcola sul font-size
   dell'elemento su cui e' scritto: 1.5em sul <p> usava il font-size del
   testo (es. testo-small), mentre 1.5em sul ::before usava il font-size
   dell'icona (--txc-icon-size, spesso piu' piccolo) - due valori DIVERSI
   nonostante la stessa unita' "1.5em", quindi le righe dopo la prima
   (allineate al padding-left del <p>) risultavano piu' rientrate della
   prima riga (allineata alla vera larghezza del ::before). Con calc() su
   --txc-icon-size (custom property, non relativa a nessun font-size) i due
   punti derivano lo stesso valore assoluto, sempre identico. */
.txc-icon-list > li > p:first-child {
	padding-left: calc(var(--txc-icon-size, 12px) + 8px);
	text-indent: calc(-1 * (var(--txc-icon-size, 12px) + 8px));
}

.txc-icon-list > li > p:first-child::before {
	content: var(--fa);
	display: inline-block;
	width: calc(var(--txc-icon-size, 12px) + 8px);
	text-indent: 0;
	vertical-align: middle;
	color: var(--txc-icon-color, currentColor);
	font-size: var(--txc-icon-size, 12px);
	line-height: 1;
}

.txc-icon-list.txc-icon-style-fas > li > p:first-child::before {
	font-family: "Font Awesome 7 Free";
	font-weight: 900;
}

.txc-icon-list.txc-icon-style-far > li > p:first-child::before {
	font-family: "Font Awesome 7 Free";
	font-weight: 400;
}

.txc-icon-list.txc-icon-style-fab > li > p:first-child::before {
	font-family: "Font Awesome 7 Brands";
	font-weight: 400;
}

/* Icona inline nel flusso di testo (nodo "icon" del richtext, es. <i
   class="fas fa-shield-halved"> davanti a un titolo) - NON e' l'icona ::before
   della lista puntata sopra, quella e' gia' a larghezza esplicita.
   FontAwesome 7 imposta di default width:1.25em (var --fa-width) su TUTTE le
   .fa/.fas/ecc, non solo con la classe .fa-fw come in FA5/6: il glifo reale e'
   quasi sempre piu' stretto di 1.25em e text-align:center lo centra dentro
   quel box, lasciando spazio vuoto ai lati - il "contenitore piu' grande del
   disegno" che disallinea l'icona dal testo accanto. --fa-width:auto toglie
   la larghezza fissa (il box torna a combaciare col glifo), vertical-align la
   riallinea verticalmente al testo circostante invece della baseline di
   default. */
.txc-richtext i.fa,
.txc-richtext i.fas,
.txc-richtext i.far,
.txc-richtext i.fab,
.txc-richtext i.fal,
.txc-richtext i.fad {
	--fa-width: auto;
	vertical-align: middle;
}
