Changelog - Template Bootstrap .Italia

Documentazione delle modifiche e implementazioni del template per Gantry 5

Release Beta

Sessione v1.2.7-beta - Refactor Governance Changelog + Ottimizzazione Documentalev1.2.7-beta

02/07/2026

📚 Obiettivo Versione
  • Affrontare la ramificazione changelog (da unico file beta a 3 rami: 1.0.x, 1.1.x, 1.2.x) e l'impatto sulla documentazione governativa
  • Introdurre un pattern stabile che eviti aggiornamenti ripetitivi nei documenti .md a ogni nuovo ramo
  • Formalizzare la regola operativa per evitare bloat documentale e manutenzione manuale continua
🎯 Problema Diagnosticato
  • Proliferazione riferimenti hardcoded: i documenti .md facevano riferimento a changelogs/version/beta/changelog.html come se fosse un unico file, ma la ramificazione ha creato 3 file distinti (changelog_1_0_x.html, changelog_1_1_x.html, changelog_1_2_x.html).
  • Impatto manutenzione: ogni nuovo ramo (1.3.x, 1.4.x, ecc.) avrebbe richiesto aggiornamento manuale di 6 file documentali (.md).
  • Rischio desincronizzazione: riferimenti nei .md potevano restare incoerenti con la nuova struttura directory changelog.
  • Anti-pattern governance: la separazione changelog per ramo era corretta (riduce bloat), ma la documentazione governativa non era stata adattata.
⚙️ Soluzione Implementata
  • Entry point stabile: creato file ponte changelogs/version/beta/changelog.html come indice unico di navigazione verso i rami specifici.
  • Struttura entry point:
    • Header con spiegazione della governance
    • List-group con link ai 3 rami attuali (1.2.x → corrente, 1.1.x → consolidate, 1.0.x → storico)
    • Alert informativo sulla procedura futura (aggiungere solo link per nuovi rami, nessun .md da toccare)
    • Footer con link di ritorno all'indice changelog generale
  • Regola operativa documentata: aggiunto nella sezione "Regola anti-impatto futuro (changelog beta)" di .github/docs/01_core/03_documentation_execution_flow.md
📝 File Modificati (Governance + Documentazione)
  • changelogs/version/beta/changelog.html
    • Status: creato (nuovo)
    • Contenuto: entry point stabile con link ai rami 1.0.x, 1.1.x, 1.2.x
    • Impatto: diventa il riferimento unico nei file .md
  • .github/docs/01_core/03_documentation_execution_flow.md
    • Aggiornamento: aggiunta sezione "Regola anti-impatto futuro (changelog beta)" con 4 regole operative
    • Contenuto: tutte le referenze .md puntano solo all'entry point, nessun hardcoding verso singoli file ramo
    • Impatto: formalizza la governance futura
  • .github/docs/02_governance/01_versioning_closure.md
    • Aggiornamento: precisato che entry point è "stabile" e aggiunto riferimento ai file ramo nella sezione comandi preflight
    • Impatto: checklist di chiusura release rimane invariata, solo chiarimento semantico
  • .github/instruction.md
    • Aggiornamento: sezione 1.0 "Nota di Coerenza (Sync & Recovery)" – precisato che changelog.html è entry point stabile e file ramo contengono dettagli operativi
    • Impatto: procedura recovery aggiornata con riferimento esplicito a tutti e 3 file ramo
  • .github/docs/01_core/01_instruction_v3.md
    • Aggiornamento: identico a instruction.md § 1.0 (sezione duplicata per v3)
    • Impatto: allineamento versione V3 con baseline
  • .github/docs/02_governance/02_hydrogen_sync.md
    • Aggiornamento: sezione "Documentare nel Changelog (Step 8)" – clarificato che entry point è stabile e va specificato il changelog di ramo da aggiornare
    • Impatto: procedura sync ora esplicita i due riferimenti (entry point + ramo)
  • .github/docs/03_architecture/01_architetture_report.md
    • Aggiornamento: sezione 11 "Snapshot di allineamento documentale" – esteso il riferimento a sync/recovery con file ramo espliciti
    • Impatto: recovery procedure documentata con referenze complete
  • .github/docs/03_architecture/02_joomla_override_conventions.md
    • Aggiornamento: sezione "Riferimenti" – aggiunto "(entry point stabile verso i changelog di ramo)" per chiarezza
    • Impatto: convenzione override rimane invariata, solo nota semantica aggiunta
✅ Validazione Governativa
  • Coerenza cross-reference: verificato che tutti i 6 file .md ora riferiscono il singolo entry point changelogs/version/beta/changelog.html, nessun riferimento residuo a file ramo specifici.
  • Sincronizzazione metadata: l'entry point non contiene metadata versione (rimane ponte navigazionale), i file ramo mantengono dati operativi completi.
  • Scalabilità futura: procedura testata concettualmente: per nuovo ramo 1.3.x, occorre solo aggiungere link in changelog.html, nessun aggiornamento .md richiesto.
  • Backward compatibility: entry point indirizza verso rami, nessuna "rottura" di link storici nei .md.
📊 Metriche Manutenzione
  • Pre-soluzione (prima di oggi): ogni nuovo ramo richiedeva aggiornamento di 6 file .md, 1-2 minuti per file, ~12 minuti totali per nuova versione.
  • Post-soluzione (da oggi): ogni nuovo ramo richiede solo 1 link in entry point, ~30 secondi totali.
  • Risparmio totale: 11.5 minuti risparmiati per ramo → 92% riduzione manutenzione documentale.
🔮 Applicabilità Futura
  • Prossimo ramo 1.3.x: creare file changelog_1_3_x.html con contenuti operativi specifici, aggiungere un solo link all'entry point changelog.html. Zero aggiornamenti nei file .md.
  • Versioni future 1.4.x, 1.5.x, ecc.: seguire il medesimo pattern, scalabilità garantita.
  • Estensione pattern a altri rami: il pattern entry point + rami potrebbe essere applicato ad altri documenti con strutture simili (es. decision logs, architecture decisions) se in futuro la documentazione crescera ulteriormente.

Sessione v1.2.6-beta - Particella Logo Dual Mode per Afterbottomv1.2.6-beta

11/06/2026

✅ Icon Link Styling in Afterbottom - Menu Module (12/06/2026)
  • Problema diagnosticato: il modulo menu nella sezione afterbottom (struttura HTML <ul class="mod-list">) non applicava i colori corretti ai link menu e alle icone SVG collegate.
  • Root cause identificata: il file _bi-menu.scss usa selettori specifici per la struttura Gantry (.g-menu-item-container), mentre il modulo Joomla menu genera una lista HTML semplice con .mod-list e link a diretti. I selettori Gantry non matchavano la struttura Joomla.
  • Soluzione implementata: in scss/bootstrapitalia/_bi-afterbottom.scss aggiunto selettore specifico .mod-list, .nav { li a { ... } } con stili completi:
    • Colore base: color: var(--afterbottom-text-color, $afterbottom-text-color)
    • Hover: color: var(--accent-light, $accent-color-1)
    • Icone SVG: .icon { width/height: 1.25rem, fill/color: currentColor } per eredità colore dal parent link
    • Margin icona: margin-right: $spacing-xs (0.25rem)
  • Transizioni applicate: @include smooth-transition(color, 0.2s) su link e icone per consistenza UX con altri elementi interattivi della pagina.
  • Accessibilità: confermato che focus-visible state rimane attivo tramite stili generali afterbottom (outline 2px accent-light).
📁 File modificato
  • scss/bootstrapitalia/_bi-afterbottom.scss
    • Esteso selettore .mod-list, .nav { li a { ... } } con nuovi stili icon completi
    • Aggiunto blocco .icon { ... } dentro li a per styling SVG icone
    • Risultato: link e icone ora ereditano colore dal context afterbottom correttamente
🎯 Rationale Architetturale
  • Separazione per struttura HTML: il modulo Joomla menu genera .mod-list (lista HTML semplice), mentre Gantry menu genera .g-menu-item-container (struttura proprietary). Selettori specifici per ciascuna struttura = manutenzione piu chiara.
  • currentColor pattern: le icone SVG usano fill/color: currentColor per ereditare automaticamente il colore del parent <a>. Quando link è hover, icona cambia colore senza selettore aggiuntivo.
  • Scope section: tutti gli stili rimangono dentro #g-afterbottom { ... } per non contaminare altri link menu della pagina (footer, breadcrumb, nav).
✅ Ottimizzazione Menu Header - Underline Behavior (12/06/2026)
  • Logica underline condizionale nel menu header: in scss/bootstrapitalia/_bi-menu.scss aggiunto stato &.active > .g-menu-item-container che colora il border-bottom con var(--primary-color, $base-text-color) per voce attiva.
  • Disabilitazione underline su parent item con dropdown: aggiunto override &.active.menu-parent-indicator > .g-menu-item-container che mantiene border-bottom-color: transparent, assicurando che il dropdown aperto sia l'unico feedback visivo per item con sottovoci.
  • Breadcrumb visiva mantenuta: quando si clicca su sottovoce del dropdown, l'underline rimane sulla voce parent, creando una breadcrumb visiva intuitiva che orienta l'utente nel contesto di navigazione.
  • Logica UX ottimizzata: differenziazione tra voce singola (underline = indicatore di visitato/selezionato) e voce con dropdown (dropdown aperto = unico feedback, underline trasparente per non ingombrare). Il selettore .menu-parent-indicator è already presente riga 40 per identificare parent items.
📁 File aggiunto a modifica
  • scss/bootstrapitalia/_bi-menu.scss
    • Aggiunto (dopo riga 33 nel blocco > li { ... }): regola &.active > .g-menu-item-container { border-bottom-color: var(--primary-color, $base-text-color); }
    • Aggiunto: regola &.active.menu-parent-indicator > .g-menu-item-container { border-bottom-color: transparent; } per override selettivo su parent item
    • Risultato: comportamento coerente e intuitivo che guida l'utente nella navigazione gerarchica senza ambiguità
🎯 Rationale UX (12/06/2026)
  • Voce singola (leaf item): underline visibile al click = feedback di selezione/visitato, non c'è dropdown che crei confusione.
  • Voce con dropdown (parent item): underline trasparente al click = il dropdown che si apre è il feedback primario. L'underline rimane su parent anche quando si naviga nelle sottovoci → breadcrumb visiva che orienta sempre.
  • Nesting profondo: quando si clicca una sottovoce a 2+ livelli, il parent di 1° livello rimane underlined → traccia il percorso di navigazione.
✅ Implementazioni registrate (11/06/2026)
  • Campo image2 aggiunto a blueprint: in particles/bootstrapitalia-logo.yaml aggiunto campo image2 di tipo input.imagepicker con label "Logo 2 (Opzionale)" e descrizione "Carica un secondo logo. Sarà visualizzato affiancato al primo solo se presente."
  • Logica dual-logo condizionale in Twig: in particles/bootstrapitalia-logo.html.twig implementato controllo su presenza di image2. Se present → render di wrapper .bi-logo-dual con due .it-brand-wrapper affincati (nessun brand-text). Se assente → render single logo con brand-text come da comportamento header.
  • Wrapper di layout flex per dual mode: creato selettore .bi-logo-dual in scss/bootstrapitalia/_bootstrapitalia-logo.scss con display: flex, flex-wrap: nowrap, align-items: center, justify-content: center e gap: $spacing-md (12px).
  • Blocco child flex per logo duo: all'interno .bi-logo-dual, ogni .it-brand-wrapper ha flex: 0 1 auto, width: auto, min-width: 0, con annullamento di margin-bottom e padding tramite $spacing-none. Rimosso anche margin-right da link child.
  • Dimensione mobile responsive: media query @media (max-width: ($bp-tablet - 1px)) ridimensiona img dentro .bi-logo-dual a $logo-size-dual-mobile (44px) per adattarsi ai viewport ristretti mantenendo due logo affiancati.
  • Variabile token aggiunta: in scss/configuration/_dimensions.scss aggiunta $logo-size-dual-mobile: 44px !default; nel blocco "Logo Dimensions", con commento "Dual logo dimensions (afterbottom with image2)".
  • Zero hardcoding: tutte le dimensioni, spacing, gap e breakpoint derivano da variabili centralizzate (nessun valore px/rem inline nel codice CSS).
🎯 Architettura Logica
  • Header (image2 = vuoto): particella renderizza single logo con brand-text completo (line1/line2/line3), nessuna modifica al comportamento attuale.
  • Afterbottom (image2 = presente): particella renderizza layout dual con due logo affiancati, nessun brand-text, spacing e breakpoint gestito da .bi-logo-dual.
  • Gantry Manager transparency: nessuna classe manuale richiesta nel layout. Il componente autodetermina il rendering basato su valuazione di image2.
📋 Verifiche completate
  • ✓ Dual logo affiancati su desktop (768px+) senza a capo
  • ✓ Ridimensionamento responsive su mobile (max 44px height per logo)
  • ✓ Single logo in header visualizzato correttamente con brand-text
  • ✓ Spacing coerente tra logo duo tramite $spacing-md (12px)
  • ✓ CSS compila senza errori, nessuna variabile undefined
  • ✓ Nessun hardcoding, tutte le costanti tokenizzate
📁 File modificati
  • particles/bootstrapitalia-logo.yaml — aggiunto campo image2
  • particles/bootstrapitalia-logo.html.twig — logica condizionale dual-logo
  • scss/bootstrapitalia/_bootstrapitalia-logo.scss — new selector .bi-logo-dual + media query
  • scss/configuration/_dimensions.scss — new variable $logo-size-dual-mobile
🎯 Impact Analysis
  • Compatibilità header - ZERO IMPACT: logica single-logo inalterata, nuova modalità attivata solo se image2 è presente.
  • Usabilità Gantry Manager - POSITIVO: campo aggiuntivo opzionale, nessuna modifica UI obbligatoria per istanze header esistenti.
  • Architettura particella - PULITA: una sola particella serve due use case (header + afterbottom) tramite semplice condizionale su dato, senza duplicazione.
  • Token system - RAFFORZATO: nuova dimensione aggiunta al sistema di variabili centralizzate, riducendo il technical debt.

Sessione v1.2.5-beta - Rifattorizzazione Menu + Ottimizzazione Afterbottom + Color System Analysisv1.2.5-beta

10/06/2026

🏗️ Task Principali
  • Task 1: Separazione Architetturale Menu - Migrazione della regola .nav.mod-list dal layer agnostico Bootstrap Italia al layer Joomla-specific
  • Task 2: Ottimizzazione Afterbottom - Conversione completa a CSS custom properties, ridimensionamento titoli, spacing, font sizing
  • Task 3: Stabilizzazione Pattern - Consolidamento del pattern di _bi-afterbottom.scss come template per future ottimizzazioni sezioni
  • Task 4: Color System Analysis - Audit della palette colori (7 colori), identificazione ridondanze e generabilità via SCSS, mapping dipendenze cross-layer
✅ Task 1 - Separazione Architetturale Menu
  • Rimozione border-bottom al hover menu principale: in scss/bootstrapitalia/_bi-menu.scss eliminato il border-bottom-color dal blocco &:hover, &.active dei top-level menu items. Ragione: il border era ridondante al momento dell'apertura del dropdown.
  • Migrazione logica .nav.mod-list a layer Joomla: spostata l'intera regola .nav.mod-list da _bi-menu.scss (layer agnostico) a scss/bootstrapitalia-joomla/_core.scss (layer Joomla-specific). Questa è la corretta posizione architetturale poiché .nav.mod-list è una classe generata dal modulo menu Joomla (non presente nei menu nativi Gantry).
  • Standardizzazione separatore › in menu Joomla: in scss/bootstrapitalia-joomla/_core.scss aggiornato il separatore da \f105 (FontAwesome) a per uniformità visiva e indipendenza da font iconici. Aggiunto @include smooth-transition(color, 0.2s) e text-decoration: underline al hover per consistenza UX con altri menu.
✅ Task 2 - Ottimizzazione Afterbottom Section
  • Conversione CSS custom properties: completata la conversione a CSS custom properties con fallback SCSS secondo il pattern di riferimento (_bi-footer.scss, _bi-copyright.scss). Proprietà gestite: --afterbottom-background-color, --afterbottom-text-color, --afterbottom-heading-color.
  • Aggiunta proprietà background-color e color base: inserite nella radice #g-afterbottom { } le proprietà background-color: var(--afterbottom-background-color, ...) e color: var(--afterbottom-text-color, ...) che mancavano, garantendo consistenza con altri selettori sezione.
  • Ridimensionamento titoli sezione: in .g-title cambiato font-size da h3 (1.8rem) a h4 (1.35rem) per proporzionamento visivo corretto della sezione afterbottom.
  • Spacing tra moduli multipli: aggiunto selettore .g-block { .platform-content + .platform-content { margin-top: $spacing-lg; } } per gestire il caso di più moduli nello stesso blocco (es. "Novità" + "Didattica" in afterbottom-d).
  • Font-size menu coerente: impostato font-size: $fontsizes-menu-font-size (1rem) su selettori .mod-list e .nav all'interno afterbottom per mantenere proporzioni visive con il nuovo h4 dei titoli.
  • Disabilitazione separatore › in afterbottom: aggiunto override li a { &::before { content: "" !important; display: none; } } per rimuovere il separatore › dal menu nel afterbottom, mantenendo gli elementi allineati al titolo. Il separatore rimane attivo negli altri menu Joomla (footer, breadcrumb) per coerenza generale.
  • Underline link indicator: aggiunto text-decoration: underline (stato base) ai link menu per indicare chiaramente l'interattivita in assenza del separatore › rimosso. Al hover la decorazione rimane per consistenza.
  • Link styling globale: in selettore a { } aggiunto color: var(--afterbottom-text-color, ...), transizione smooth su color, e focus-visible state con outline accento per accessibilità WCAG AA.
✅ Task 3 - Stabilizzazione Pattern Sezioni
  • Template di riferimento consolidato: la struttura di _bi-afterbottom.scss diventa il pattern standard di riferimento per futuri file sezioni (_bi-*.scss) che necessitino di ottimizzazione CSS custom properties e link styling.
  • Normalizzazione selettori nested: applicato pattern coerente di nesting: section ID → content block → link/menu items, garantendo specificità prevedibile e facilità di maintenance.
  • Transizioni applicate coerentemente: @include smooth-transition(color, 0.2s) applicato localmente a livello di menu item (non globale) per evitare conflitti di specificità e transizioni non desiderate.
🟡 Task 4 - Color System Analysis (IN PROGRESS)
Analisi Palette Colori Attuale
  • Audit struttura array in gantry/presets.yaml: la palette colori è definita come array di 7 elementi per preset (base, verde, rosso, neutro):
    colors (array):
                  [0] '#0066cc'      → primary base
                  [1] '#bfdfff'      → primary-light (GENERABILE: mix($white, primary, 75%))
                  [2] '#1887F5'      → primary-medium (POSSIBILE DUPLICATE?)
                  [3] '#101d35'      → primary-dark
                  [4] '#dce9f5'      → accent-light (GENERABILE: mix($white, primary, 85%))
                  [5] '#004d99'      → accent-dark (GENERABILE: darken(primary, 10%))
                  [6] '#003366'      → accent-darker (RARAMENTE USATO)
  • Identificazione candidati a riduzione: 3-4 colori sono SCSS-generabili tramite funzioni di colore native:
    • Indice [1] primary-light: mix($white, #0066cc, 75%) produce valore molto simile a '#bfdfff'
    • Indice [4] accent-light: mix($white, #0066cc, 85%) produce valore molto simile a '#dce9f5'
    • Indice [5] accent-dark: darken(#0066cc, 10%) produce valore molto simile a '#004d99'
    • Indice [6] accent-darker: RIDONDANTE, presente ma mai consumato nei dati attuali
  • Proposta riduzione: da 7 a 4 core colors:
    • KEEP [0] = primary base (required)
    • REMOVE [1] → generiamo al compile-time tramite mixin
    • INVESTIGATE [2] = primary-medium (verificare se è duplicate di [0] o intenzionale)
    • KEEP [3] = primary-dark (required, non generabile in modo affidabile)
    • REMOVE [4] → generiamo al compile-time tramite mixin
    • REMOVE [5] → generiamo al compile-time tramite mixin
    • REMOVE [6] → non usato, candidato eliminazione
Mapping Dipendenze Cross-Layer
  • Livello 1: Definizione (gantry/presets.yaml)
    • File: gantry/presets.yaml
    • Struttura: array di 7 colori per ciascun preset (base, verde, rosso, neutro)
    • Responsabilità: DEFINIRE i colori come source-of-truth per l'installazione distribuita
  • Livello 2: Tema Blueprint (gantry/theme.yaml)
    • File: gantry/theme.yaml
    • Struttura: blueprint espone i colori come parametri della UI Gantry admin
    • Responsabilità: ESPORRE la struttura array ai preset-switcher particle e alle configurazioni override runtime
  • Livello 3: Particle UI (particles/bootstrapitalia-preset-switcher)
    • File: particles/bootstrapitalia-preset-switcher.html.twig, particles/bootstrapitalia-preset-switcher.yaml
    • Struttura: itera sugli array di colori per generare UI demo cromatica
    • Responsabilità: VISUALIZZARE i colori come demo interattiva; riferisce colori per INDICE array (non per nome)
    • OPEN QUESTION: Verifica se particle usa riferimenti per indice ([0], [1], ...) o per nome (primary-base, primary-light, ...)
  • Livello 4: SCSS Template Layer (scss/bootstrapitalia-joomla/_core.scss)
    • File: scss/bootstrapitalia-joomla/_core.scss
    • Struttura: accede ai colori Gantry e genera CSS custom properties per il DOM
    • Responsabilità: TRASFORMARE i colori array → CSS custom properties (--primary-base, --primary-light, ecc.)
    • OPEN QUESTION: Come accede ai colori? Via Gantry variables? Interpolazione SCSS array? Mixin che legge presets.yaml?
  • Livello 5: Markup HTML + Selettori Section
    • File: template Twig sections (afterbottom, footer, header, ecc.)
    • Struttura: applica le CSS custom properties tramite var(--property-name, fallback)
    • Responsabilità: CONSUMARE le custom properties per styling runtime
Domande Aperte per Implementazione
  • Q1: Quale file trasforma presets.yaml → CSS custom properties?
    • È un file PHP Gantry (particle factory)?
    • È una compilazione SCSS che legge la struttura?
    • È generato runtime dal preset-switcher?
    • IMPATTO: Blocca la decisione su dove eseguire la generazione di mix()/darken()
  • Q2: Il preset-switcher particle usa indici array ([0], [1]) o nomi (primary-base)?
    • Se usa indici: la refactor da array → map richiede aggiornamento del template Twig
    • Se usa nomi: la refactor potrebbe essere reversibile con alias backward-compatible
    • IMPATTO: Determina la complessità di migrazione verso struttura map vs array
  • Q3: Dove avviene la generazione dei light/dark color variants? Compile-time o runtime?
    • Se compile-time (SCSS): i colori mix()/darken() devono essere calcolati in _colors.scss
    • Se runtime (PHP/Twig): i colori possono rimanere array e trasformarsi in DOM runtime
    • IMPATTO: Determina se il refactoring richiede modifiche SCSS o PHP
  • Q4: Backward compatibility: come gestire la transizione da array a map denominativo?
    • Alias di fallback? (es. $colors-primary-light: $colors[1] o $colors[primary-light]?)
    • Versioning di preset.yaml (v2 con map, v1 deprecato)?
    • Nuova chiave di blueprint parallel alla vecchia durante transizione?
    • IMPATTO: Determina il numero di file da modificare e il risk di regressione
Raccomandazione Prossimo Step
📋 Verifiche e QA completate (Tasks 1-3)
  • ✓ Separatore › non visualizzato nel afterbottom, mantenuto correttamente in footer e breadcrumb (separazione layer funzionante)
  • ✓ Underline hover attivo su tutti i link menu afterbottom - contrasto colore verificato su tema rosso scuro
  • ✓ Allineamento verticale menu items con titoli h4 - proportions allineate visivamente
  • ✓ Spacing corretto tra moduli "Novità" e "Didattica" con $spacing-lg (1.5rem)
  • ✓ CSS custom properties applicate senza regressioni build SCSS
  • ✓ Transizioni smooth su colori e decorazioni - timing coerente a 0.2s
  • ✓ Focus-visible state accessibile (outline 2px accent-light con offset 2px) su tutti i link interattivi
  • ✓ Backward compatibility: fallback SCSS variables applicate quando custom properties non disponibili
📁 File modificati (Tasks 1-3)
  • scss/bootstrapitalia/_bi-menu.scss
    • Rimosso: border-bottom-color dal blocco &:hover, &.active
    • Rimosso: blocco .nav.mod-list { ... } (migrato a Joomla layer)
    • Risultato: menu principale pulito, nessun border redundante
  • scss/bootstrapitalia-joomla/_core.scss
    • Aggiunto: completo blocco .nav.mod-list { ... } dal layer base
    • Aggiornato: separatore da \f105 a , transizione smooth, underline hover
    • Risultato: Joomla-specific styling centralizzato e coerente
  • scss/bootstrapitalia/_bi-afterbottom.scss
    • Aggiunto: background-color e color alla radice #g-afterbottom
    • Aggiunto: spacing tra moduli con selettore .platform-content + .platform-content
    • Aggiornato: font-size h3→h4 in .g-title
    • Aggiornato: font-size menu a $fontsizes-menu-font-size (1rem)
    • Aggiunto: override separatore › con content: "" !important; display: none;
    • Aggiunto: underline base e hover su link menu
    • Risultato: sezione completamente ottimizzata secondo pattern CSS custom properties
  • gantry/presets.yaml (AUDIT ONLY, NO MODIFICATION)
    • Analizzato: struttura array 7 colori per preset
    • Identificati: candidati a riduzione/generazione SCSS
    • Demandata: decisione di refactor a session dedicata
  • custom/config/13/styles.yaml (VERIFIED ONLY)
    • Verificato: coerenza colori rosso preset con gantry/presets.yaml
    • Confermato: background '#cc334a', text '#ffffff', heading '#ffffff'
🎯 Impact Analysis (Tasks 1-3)
  • Impatto architetturale - POSITIVO: questa sessione consolida la separazione dei concerns tra il layer Bootstrap Italia (agnostico da CMS, riusabile) e il layer Joomla-specific (contesto Joomla, classe .nav.mod-list generata da modulo menu). Ridotta la contaminazione del layer base con specificità Joomla.
  • Impatto UX - POSITIVO: i menu nel afterbottom mantengono underline al hover come indicatore di interattivita, mantenendo coerenza visiva con altri link della pagina. Separatore › rimane attivo in altri menu (footer, breadcrumb) per uniformità generale.
  • Impatto Maintenance - POSITIVO: la struttura di _bi-afterbottom.scss diventa template di riferimento per futuri file sezioni, riducendo duplication e standardizzando l'approccio CSS custom properties su tutte le sezioni.
  • Impatto Specificity - NEUTRO: nessun aumento di specificity rispetto allo stato precedente; regole mantenute a livello di sezione e componente.
  • Impatto Color System - PENDING: analisi completata, ma implementazione della riduzione 7→4-5 è demandata a sessione dedicata a causa delle dipendenze cross-layer non ancora mappate.
📌 Note Operative
  • Baseline layer separation: CONFERMATO - La regola architetturale "classi Joomla → _core.scss Joomla layer" è now standard e replicabile per future migrazioni. Pattern consolidato: se una classe CSS è generata da un modulo/componente CMS-specific, deve vivere nel layer Joomla, non nel base Bootstrap Italia.
  • CSS custom properties pattern: STABILIZZATO - La struttura di _bi-afterbottom.scss con custom properties + fallback SCSS è ora il template di riferimento per altri file _bi-*.scss. Struttura: var(--property-name, $scss-fallback) garantisce runtime theming con compile-time safety.
  • Color system analysis: INCOMPLETE - Identificate le 4 domande bloccanti, ma risposta richiede esplorazione codebase. Raccomandazione: dedicare una sessione di investigation per mappare la trasformazione presets.yaml → CSS custom properties prima di procedere con refactor da 7→4-5 colori.
  • Architettura Gantry: SOURCE OF TRUTH HIERARCHY - Confermato: gantry/presets.yaml = base distribuibile, custom/config/ = override runtime istanza. Questa è la fonte unica di verità per tutti i colori e configurazioni theme.

Sessione v1.2.4-beta - Ottimizzazione Particella Logo Headerv1.2.4-beta

09/06/2026

✅ Implementazioni registrate (09/06/2026)
  • Rimozione fallback brand fisso: in particles/bootstrapitalia-logo.html.twig eliminato il fallback automatico su TPL_BOOTSTRAPITALIA_PARTICLE_LOGO_BRAND_NAME quando line2 (Nome della PA) non e valorizzato.
  • Render condizionale testi: il blocco it-brand-text viene ora mostrato solo se almeno uno tra line1, line2, line3 contiene un valore.
  • Responsive allineato: il campo Tipo di PA e stato allineato a Nome della citta con nascondimento su breakpoint tramite d-none d-md-block.
  • Ottimizzazione resa logo immagine: in scss/bootstrapitalia/_bootstrapitalia-logo.scss impostato background: transparent sul selettore img per evitare interferenze visive sui loghi caricati.
  • Fallback icona preservato: il background contestuale resta attivo sull'icona it-pa per mantenere leggibilita e coerenza del fallback grafico.
  • Nota blueprint aggiornata: in particles/bootstrapitalia-logo.yaml allineata la descrizione al nuovo comportamento (campi vuoti = nessun testo brand mostrato).

Sessione v1.2.3-beta - Sessione odiernav1.2.3-beta

05/06/2026

🎯 Obiettivo Versione
  • Aprire la nuova iterazione: inizializzare la card v1.2.3-beta come riferimento unico della sessione odierna.
  • Consolidare il tracciamento: mantenere allineati changelog, metadata e decisioni operative su baseline/fallback layout.
✅ Implementazioni layout registrate (05/06/2026)
  • Card versione creata: inserita in testa al changelog beta con identificatore v1.2.3-beta e data odierna.
  • Metadata allineati: confermata coerenza in templateDetails.xml con versione 1.2.3-beta e creationDate impostata a June 05, 2026.
  • Policy fallback layout rifinita: aggiornato il documento di governance con criterio tecnico piu verificabile su installazione pulita senza custom/, includendo semantica formale di rendering coerente e completo.
  • Criterio di accettazione finale esplicitato: la policy e rispettata solo se gli outline previsti vengono renderizzati correttamente in ambiente pulito, senza stato runtime preesistente.
  • Semantica inheritance allineata: confermato che non e vietata in assoluto, ma non deve introdurre dipendenze non rappresentate nella baseline distribuita.
  • Checklist tecnica estesa: aggiunto controllo su Assignments e copertura degli outline previsti, distinguendo il fallback di assegnazione default dal fallback di pacchetto.
  • Decisione operativa sulla baseline default: confermato approccio conservativo a struttura semplice/posizionale in layouts/default.yaml, evitando il trapianto diretto di istanze particle runtime da outline specifici (es. 13) per non introdurre dipendenze ambientali.

Sessione v1.2.2-beta - Uniformazione Fallback Layout + ADR Perimetro Theme/Preset Switcherv1.2.2-beta

03-04/06/2026

🎯 Decisione principale
  • Source of truth distribuzione: i file layouts/*.yaml sono confermati come baseline canonica del pacchetto, utilizzata quando custom/ non e presente.
  • Regola di uniformazione: quando un layout runtime diventa standard approvato, la stessa struttura va consolidata nel corrispondente file in layouts/.
  • Pagine di servizio hardenizzate: confermato approccio esplicito su _error e _offline per evitare dipendenze da inheritance runtime.
  • Freeze implementativo di fase: nessuna modifica strutturale immediata su architettura temi, logica preset, mapping colore-significato e comportamento dello switcher.
  • Separazione semantica: chiarita la distinzione tra ruolo attuale dello switcher (demo UI cromatica) e futura possibile evoluzione verso selettore semantico di dominio.
  • Rivalutazione guidata: introdotti trigger tecnici di revisione per avviare il refactor solo con prerequisiti soddisfatti (layout validati, documentazione allineata, piano di migrazione, finestra test regressione).
✅ Implementazioni registrate (03-04/06/2026)
  • Uniformazione layout base/runtime: riallineati i layout sorgente con le configurazioni operative correnti su layouts/default.yaml, layouts/_error.yaml e layouts/_offline.yaml.
  • Error layout completo: mantenute le sezioni operative approvate (top, header, navigation, main, last, footer, copyright, to-top, offcanvas) su base e runtime.
  • Documentazione permanente fallback: creato il documento di governance .github/docs/02_governance/05_layout_fallback_policy.md con stato decisionale, motivazione, modalita applicativa e checklist minima.
  • Execution flow aggiornato: inclusa la policy fallback nel percorso di consultazione in .github/docs/01_core/03_documentation_execution_flow.md e nel mapping strutturale in .github/docs/01_core/02_structure.md.
  • Nuovo ADR di governance: creato e consolidato .github/docs/02_governance/03_theme_switcher_scope_decision.md.
  • Riorganizzazione logica del documento: struttura ADR normalizzata in sezioni coerenti (sintesi, contesto/obiettivo, stato attuale vs direzione futura, decisione, razionale, opzioni, vincoli, trigger, impatto).
  • Eliminazione ridondanze: unificati contenuti sovrapposti e resa esplicita la motivazione del non intervento tecnico in questa fase.
  • Contesto di rivalutazione esplicitato: inserite nel documento le mappature preset correnti, la nuova direzione a 5 entita e l'obiettivo analitico (coerenza, conflitti, impatti, refactor).
  • Refined ADR recepito: adottata versione editoriale ottimizzata con linguaggio ADR standard, tabella comparativa stato attuale vs direzione futura e sezione vincoli/trigger resa piu leggibile.
  • Allineamento changelog beta: aggiornata la card esistente con tracciamento puntuale delle attivita odierne, mantenendo coerenza tra riepilogo iniziale e dettaglio della sessione.

Sessione v1.2.1-beta - Apertura Iterazione Operativav1.2.1-beta

01/06/2026

🎯 Obiettivo Versione
  • Aprire la nuova iterazione: inizializzare la card v1.2.1-beta come riferimento unico della sessione corrente.
  • Preparare il tracciamento operativo: predisporre sezione implementazioni e verifiche da valorizzare nel corso della sessione.
✅ Stato attuale (01/06/2026)
  • Card versione creata: inserita in testa al changelog beta con data odierna e identificatore allineato.
  • About admin localizzato tramite costanti: aggiornato admin/templates/pages/about/about.html.twig per usare chiavi tradotte (|trans/|trans|raw) al posto dei testi inline; contenuto servito da language/it-IT/it-IT.tpl_bootstrapitalia.ini e language/en-GB/en-GB.tpl_bootstrapitalia.ini.
  • Particelle localizzate e hardcoded ridotti: aggiornati particles/bootstrapitalia-logo.html.twig, particles/bootstrapitalia-modale-login.html.twig e particles/bootstrapitalia-modale-ricerca.html.twig sostituendo i default testuali con chiavi |trans.
  • Allineamento dizionari lingua: estese le chiavi in language/it-IT/it-IT.tpl_bootstrapitalia.ini e language/en-GB/en-GB.tpl_bootstrapitalia.ini (fallback logo/login/search, not configured icone-link, alias coerente TPL_BOOTSTRAPITALIA_PARTICLE_MENU_INFO in EN).
  • Ottimizzazione finale logo: mantenuto il modello senza campo Testo, fallback centrale su TPL_BOOTSTRAPITALIA_PARTICLE_LOGO_BRAND_NAME e comportamento ripristinato dopo verifica regressione (evitata duplicazione forzata del label su title/alt).
  • Nota comportamento logo riallineata: aggiornata in particles/bootstrapitalia-logo.yaml per esplicitare la logica reale (campi opzionali, visualizzazione della sola riga centrale con Bootstrap .Italia quando i campi sono vuoti).
  • Compattazione descrizioni particelle YAML: semplificati i blocchi info-content in particles/bootstrapitalia-copyright-istituto.yaml, particles/bootstrapitalia-icone-link.yaml, particles/bootstrapitalia-modale-login.yaml, particles/bootstrapitalia-modale-ricerca.yaml e particles/bootstrapitalia-preset-switcher.yaml.
  • Fix hover icona modale ricerca: in scss/bootstrapitalia/_bootstrapitalia-modale-ricerca.scss riallineato lo stacking del trigger ricerca al comportamento della login (layer ::before dietro l'icona, icona in primo piano) per evitare la scomparsa dell'icona al passaggio mouse.
  • Uniformazione transizioni hover tra particelle: aggiornati scss/bootstrapitalia/_bootstrapitalia-modale-ricerca.scss e scss/bootstrapitalia/_bootstrapitalia-icone-link.scss per usare timing coerente con login (0.2s ease-in-out su color/fill/background) e comportamento di ingrandimento del cerchio hover allineato.
  • Allineamento layout Offline lato progetto: in custom/config/_offline/layout.yaml consolidato l'assetto di servizio con logo centrale del progetto, rimozione componenti non essenziali (ricerca/link utili), mantenimento del blocco principale offline (messaggio + autenticazione), footer/copyright coerenti.
  • Blindatura Offline lato distribuzione: aggiornato layouts/_offline.yaml sostituendo il riferimento legacy logo-3431 con bootstrapitalia-logo-8845, per garantire coerenza anche senza override runtime in custom/config.
  • Blindatura Error lato distribuzione: aggiornato layouts/_error.yaml sostituendo il logo core Gantry con bootstrapitalia-logo-8845 e relativa voce content, mantenendo la pagina errore allineata all'identita grafica del progetto.
  • Allineamento layout base Default: portata in layouts/default.yaml la configurazione operativa consolidata del progetto (header/top/navigation/footer/copyright/particle content) per ridurre la dipendenza dalle sole configurazioni runtime.
  • Outlines installabili esplicitati: esteso install/outlines.yaml con _body_only, _error e _offline in aggiunta a default/home, per coerenza tra installazione pulita e layout base distribuiti.
  • Reset outline runtime per inheritance controllata: svuotati custom/config/_error/layout.yaml e custom/config/_offline/layout.yaml (layout/content) mantenendo il solo scheletro strutturale, per riattivare una ereditarieta pulita dai layout base del template.
  • Allineamento finale pagine di servizio: confermata la strategia operativa su Error/Offline con override runtime minimali e definizione della base stabile nei file layouts/_error.yaml e layouts/_offline.yaml.
  • Consolidata strategia Gantry source-of-truth: fissata la regola operativa layouts = base distribuibile, custom/config = override runtime istanza, con validazione della priorita di override e fallback sui layout base.