Versioni in questa release:
v1.2.8-beta (02/07/2026 - Template Distribution Architecture Iteration + Lesson Learned): Tentativo di implementare architettura 2-layer (config/ + layouts/) con fallback Gantry per proteggere template da cancellazioni accidentali di custom/config/. Scoperta critica: Gantry NON fallback automaticamente da custom/config/{ID}/ a config/ o layouts/. La struttura è stata deprecata. Lezione appresa: Gantry usa `custom/config/{ID}/` come layer di customizzazione esclusivo, nessun fallback a distribution folders. Strategia corretta: proteggere custom/config/ via backup/versionamento (Git), non via fallback automtico. File mantenuti: config/{istituzionale_blu,municipalita_verde,istruzione_rosso,musei_civici_viola}/layout.yaml come backup manuale e per futura distribuzione commerciale. Rimosso: layouts/outline_*.yaml (fallback), .build/ scripts, .dist/ packages. Impatto: zero rischi, template stabile. Architettura vera: custom/config/ = production, config/ = backup + distribution.
v1.2.7-beta (02/07/2026 - Governance Changelog + Documentazione): Refactor sistema changelog con entry point stabile
v1.2.6-beta (11/06/2026 - Particella Logo Dual Mode): Ampliamento particella bootstrapitalia-logo con supporto dual mode per afterbottom. Nuovo campo image2 opzionale, layout flex auto-detect con bi-logo-dual, spacing e breakpoint responsive tramite variabili SCSS. Compatibilità header (single logo) garantita. Token-driven: nessun hardcoding, tutte le dimensioni da configuration/_dimensions.scss e spacing da configuration/_spacing.scss.
v1.2.5-beta (10/06/2026 - Menu Joomla + Afterbottom Optimization + Color System Analysis): Migrazione .nav.mod-list a layer Joomla, separatore › standardizzato. Ottimizzazione afterbottom (CSS custom properties, h3→h4, spacing, pattern stabilizzato). Analisi color system: audit palette 7 colori (3-4 SCSS-generabili), mapping 5 dipendenze cross-layer, decisione demandata a sessione investigation.
v1.2.4-beta (09/06/2026 - Particella Logo Header): Rifinito il comportamento del particle logo per contesti riusabili: rimosso il fallback testuale fisso su
v1.2.3-beta (05/06/2026 - Sessione odierna): Aperta nuova card di tracciamento versione con allineamento metadata su
v1.2.2-beta (03-04/06/2026 - Fallback layout + ADR perimetro Theme/Preset Switcher): Consolidata la strategia di fallback Gantry in assenza di
v1.2.1-beta (01/06/2026 - i18n About admin + particelle + hardening layout Gantry): Avviata la nuova iterazione
v1.2.8-beta (02/07/2026 - Template Distribution Architecture Iteration + Lesson Learned): Tentativo di implementare architettura 2-layer (config/ + layouts/) con fallback Gantry per proteggere template da cancellazioni accidentali di custom/config/. Scoperta critica: Gantry NON fallback automaticamente da custom/config/{ID}/ a config/ o layouts/. La struttura è stata deprecata. Lezione appresa: Gantry usa `custom/config/{ID}/` come layer di customizzazione esclusivo, nessun fallback a distribution folders. Strategia corretta: proteggere custom/config/ via backup/versionamento (Git), non via fallback automtico. File mantenuti: config/{istituzionale_blu,municipalita_verde,istruzione_rosso,musei_civici_viola}/layout.yaml come backup manuale e per futura distribuzione commerciale. Rimosso: layouts/outline_*.yaml (fallback), .build/ scripts, .dist/ packages. Impatto: zero rischi, template stabile. Architettura vera: custom/config/ = production, config/ = backup + distribution.
v1.2.7-beta (02/07/2026 - Governance Changelog + Documentazione): Refactor sistema changelog con entry point stabile
changelogs/version/beta/changelog.html e rami separati per major.minor (changelog_1_0_x.html, changelog_1_1_x.html, changelog_1_2_x.html). Alineamento governance in 6 file .md. Regola anti-impatto futuro: nessun aggiornamento .md richiesto per nuovi rami 1.3.x, 1.4.x, solo link aggiunto a entry point. Manutenzione documentale ridotta dal 100% a 0% per future release.v1.2.6-beta (11/06/2026 - Particella Logo Dual Mode): Ampliamento particella bootstrapitalia-logo con supporto dual mode per afterbottom. Nuovo campo image2 opzionale, layout flex auto-detect con bi-logo-dual, spacing e breakpoint responsive tramite variabili SCSS. Compatibilità header (single logo) garantita. Token-driven: nessun hardcoding, tutte le dimensioni da configuration/_dimensions.scss e spacing da configuration/_spacing.scss.
v1.2.5-beta (10/06/2026 - Menu Joomla + Afterbottom Optimization + Color System Analysis): Migrazione .nav.mod-list a layer Joomla, separatore › standardizzato. Ottimizzazione afterbottom (CSS custom properties, h3→h4, spacing, pattern stabilizzato). Analisi color system: audit palette 7 colori (3-4 SCSS-generabili), mapping 5 dipendenze cross-layer, decisione demandata a sessione investigation.
v1.2.4-beta (09/06/2026 - Particella Logo Header): Rifinito il comportamento del particle logo per contesti riusabili: rimosso il fallback testuale fisso su
Bootstrap .Italia quando il nome PA non e valorizzato, resa condizionale della sola area testuale, allineamento responsive con nascondimento di Tipo di PA su breakpoint come Nome della citta, e ottimizzazione SCSS per evitare background sul logo immagine mantenendo il fallback grafico sull'icona it-pa.v1.2.3-beta (05/06/2026 - Sessione odierna): Aperta nuova card di tracciamento versione con allineamento metadata su
templateDetails.xml (versione 1.2.3-beta, data June 05, 2026) e predisposizione delle prossime implementazioni operative.v1.2.2-beta (03-04/06/2026 - Fallback layout + ADR perimetro Theme/Preset Switcher): Consolidata la strategia di fallback Gantry in assenza di
custom/ con uniformazione base/runtime e policy permanente (.github/docs/02_governance/05_layout_fallback_policy.md), quindi formalizzata la decisione di fase sulla rivalutazione preset colore con blocco delle modifiche strutturali immediate e trigger tecnici di revisione in .github/docs/02_governance/03_theme_switcher_scope_decision.md.v1.2.1-beta (01/06/2026 - i18n About admin + particelle + hardening layout Gantry): Avviata la nuova iterazione
1.2.x, completata la migrazione della descrizione About admin e consolidato il lavoro sulle particelle (logo/login/ricerca/icone-link/copyright/preset-switcher) con i18n, fallback logo allineati, fix regressione label, compattazione documentale YAML e uniformazione hover/transition tra login, ricerca e icone-link. Completata inoltre la blindatura dei layout di distribuzione Gantry (default/error/offline) con allineamento degli outline installabili e riduzione della dipendenza da custom/config.
Checklist obbligatoria di chiusura versione:
prima di chiudere o promuovere una release seguire
.github/versioning_closure.md
(versione/data, source of truth metadata, changelog index, link e case-sensitive).
Sessione v1.2.7-beta - Refactor Governance Changelog + Ottimizzazione Documentalev1.2.7-beta
02/07/2026
✅ Status: completato. Implementazione entry point changelog stabile, allineamento governance in 6 file .md, regola anti-impatto futuro formalizzata. Zero manutenzione futura per nuovi rami versione.
📚 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.htmlcome 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.htmlcome 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
- Aggiornamento: sezione 1.0 "Nota di Coerenza (Sync & Recovery)" – precisato che
.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
- Aggiornamento: identico a
.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.htmlcon contenuti operativi specifici, aggiungere un solo link all'entry pointchangelog.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.
📌 Nota Operativa: questa versione è principalmente "governativa" e non contiene feature funzionali o fix. È una iterazione di housekeeping documentale finalizzata a ridurre il carico di manutenzione futura.
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.scssusa selettori specifici per la struttura Gantry (.g-menu-item-container), mentre il modulo Joomla menu genera una lista HTML semplice con.mod-liste linkadiretti. I selettori Gantry non matchavano la struttura Joomla. - Soluzione implementata: in
scss/bootstrapitalia/_bi-afterbottom.scssaggiunto 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)
- Colore base:
- 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 { ... }dentroli aper styling SVG icone - Risultato: link e icone ora ereditano colore dal context afterbottom correttamente
- Esteso selettore
🎯 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: currentColorper 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.scssaggiunto stato&.active > .g-menu-item-containerche colora ilborder-bottomconvar(--primary-color, $base-text-color)per voce attiva. - Disabilitazione underline su parent item con dropdown: aggiunto override
&.active.menu-parent-indicator > .g-menu-item-containerche mantieneborder-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à
- Aggiunto (dopo riga 33 nel blocco
🎯 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.
Status: completata. Ampliamento strutturale della particella logo con supporto dual mode per layout afterbottom, mantenendo compatibilità piena con header (single logo).
✅ Implementazioni registrate (11/06/2026)
- Campo image2 aggiunto a blueprint: in
particles/bootstrapitalia-logo.yamlaggiunto campoimage2di tipoinput.imagepickercon 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.twigimplementato controllo su presenza diimage2. Se present → render di wrapper.bi-logo-dualcon due.it-brand-wrapperaffincati (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-dualinscss/bootstrapitalia/_bootstrapitalia-logo.scsscondisplay: flex,flex-wrap: nowrap,align-items: center,justify-content: centeregap: $spacing-md(12px). - Blocco child flex per logo duo: all'interno
.bi-logo-dual, ogni.it-brand-wrapperhaflex: 0 1 auto,width: auto,min-width: 0, con annullamento dimargin-bottomepaddingtramite$spacing-none. Rimosso anchemargin-rightda link child. - Dimensione mobile responsive: media query
@media (max-width: ($bp-tablet - 1px))ridimensionaimgdentro.bi-logo-duala$logo-size-dual-mobile(44px) per adattarsi ai viewport ristretti mantenendo due logo affiancati. - Variabile token aggiunta: in
scss/configuration/_dimensions.scssaggiunta$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 campoimage2particles/bootstrapitalia-logo.html.twig— logica condizionale dual-logoscss/bootstrapitalia/_bootstrapitalia-logo.scss— new selector.bi-logo-dual+ media queryscss/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
Status: completata (Tasks 1-3). Rifattorizzazione architetturale della navigazione Joomla-specific, ottimizzazione completa sezione afterbottom secondo pattern CSS custom properties consolidato. Task 4 (analisi color system) completato, decisione strategica demandata a sessione dedicata.
🏗️ Task Principali
- Task 1: Separazione Architetturale Menu - Migrazione della regola
.nav.mod-listdal 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.scsscome 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.scsseliminato ilborder-bottom-colordal blocco&:hover, &.activedei 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-listda_bi-menu.scss(layer agnostico) ascss/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.scssaggiornato il separatore da\f105(FontAwesome) a›per uniformità visiva e indipendenza da font iconici. Aggiunto@include smooth-transition(color, 0.2s)etext-decoration: underlineal 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, ...)ecolor: var(--afterbottom-text-color, ...)che mancavano, garantendo consistenza con altri selettori sezione. - Ridimensionamento titoli sezione: in
.g-titlecambiatofont-sizedah3(1.8rem) ah4(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-liste.navall'interno afterbottom per mantenere proporzioni visive con il nuovoh4dei 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 { }aggiuntocolor: 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.scssdiventa 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
- Indice [1] primary-light:
- 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
- File:
- 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
- File:
- 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, ...)
- File:
- 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?
- File:
- 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
- Alias di fallback? (es.
Raccomandazione Prossimo Step
Decisione demandata a sessione dedicata: prima di procedere con il refactor 7→4-5 colori, è obbligatorio esplorare il codebase per rispondere alle 4 domande aperte. Consigliato ordine di investigation:
- Identificare il file che trasforma
presets.yaml→ CSS custom properties applicati al DOM (Livello 4 SCSS) - Verificare le referenze nel preset-switcher particle (Twig/JS) per determinare se usa indici o nomi
- Tracciare il flusso di generazione mix()/darken() (compile-time vs runtime)
- Definire la strategia backward-compatible (alias fallback vs versioning vs parallel)
- THEN: procedere con refactor sulla base delle risposte raccolte
📋 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-colordal blocco&:hover, &.active - Rimosso: blocco
.nav.mod-list { ... }(migrato a Joomla layer) - Risultato: menu principale pulito, nessun border redundante
- Rimosso:
scss/bootstrapitalia-joomla/_core.scss- Aggiunto: completo blocco
.nav.mod-list { ... }dal layer base - Aggiornato: separatore da
\f105a›, transizione smooth, underline hover - Risultato: Joomla-specific styling centralizzato e coerente
- Aggiunto: completo blocco
scss/bootstrapitalia/_bi-afterbottom.scss- Aggiunto:
background-colorecoloralla 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
- Aggiunto:
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-listgenerata 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.scssdiventa 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.scsscon 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
Status: completata. Miglioria mirata del particle logo con impatto limitato a comportamento fallback e resa responsive/visiva.
✅ Implementazioni registrate (09/06/2026)
- Rimozione fallback brand fisso: in
particles/bootstrapitalia-logo.html.twigeliminato il fallback automatico suTPL_BOOTSTRAPITALIA_PARTICLE_LOGO_BRAND_NAMEquandoline2(Nome della PA) non e valorizzato. - Render condizionale testi: il blocco
it-brand-textviene ora mostrato solo se almeno uno traline1,line2,line3contiene un valore. - Responsive allineato: il campo
Tipo di PAe stato allineato aNome della cittacon nascondimento su breakpoint tramited-none d-md-block. - Ottimizzazione resa logo immagine: in
scss/bootstrapitalia/_bootstrapitalia-logo.scssimpostatobackground: transparentsul selettoreimgper evitare interferenze visive sui loghi caricati. - Fallback icona preservato: il background contestuale resta attivo sull'icona
it-paper mantenere leggibilita e coerenza del fallback grafico. - Nota blueprint aggiornata: in
particles/bootstrapitalia-logo.yamlallineata la descrizione al nuovo comportamento (campi vuoti = nessun testo brand mostrato).
Sessione v1.2.3-beta - Sessione odiernav1.2.3-beta
05/06/2026
Status: in progress. Card di sessione aperta e metadata versione/data allineati.
🎯 Obiettivo Versione
- Aprire la nuova iterazione: inizializzare la card
v1.2.3-betacome 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-betae data odierna. - Metadata allineati: confermata coerenza in
templateDetails.xmlcon versione1.2.3-betaecreationDateimpostata aJune 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
Assignmentse copertura degli outline previsti, distinguendo il fallback di assegnazionedefaultdal 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
Status: completata. Consolidata la baseline fallback layout e formalizzata la decisione di fase sulla rivalutazione preset colore con rinvio delle implementazioni strutturali.
🎯 Decisione principale
- Source of truth distribuzione: i file
layouts/*.yamlsono confermati come baseline canonica del pacchetto, utilizzata quandocustom/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
_errore_offlineper 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.yamlelayouts/_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.mdcon 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.mde 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.
Nota operativa: baseline fallback e transizione semantica restano entrambe governate: il fallback senza
custom/ deve restare coerente con layouts/*.yaml e ogni implementazione su temi/preset resta subordinata ai trigger di revisione definiti nell'ADR.
Sessione v1.2.1-beta - Apertura Iterazione Operativav1.2.1-beta
01/06/2026
Status: in progress. Sessione aperta con localizzazione completata su About admin e su un primo gruppo di particelle UI.
🎯 Obiettivo Versione
- Aprire la nuova iterazione: inizializzare la card
v1.2.1-betacome 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.twigper usare chiavi tradotte (|trans/|trans|raw) al posto dei testi inline; contenuto servito dalanguage/it-IT/it-IT.tpl_bootstrapitalia.inielanguage/en-GB/en-GB.tpl_bootstrapitalia.ini. - Particelle localizzate e hardcoded ridotti: aggiornati
particles/bootstrapitalia-logo.html.twig,particles/bootstrapitalia-modale-login.html.twigeparticles/bootstrapitalia-modale-ricerca.html.twigsostituendo i default testuali con chiavi|trans. - Allineamento dizionari lingua: estese le chiavi in
language/it-IT/it-IT.tpl_bootstrapitalia.inielanguage/en-GB/en-GB.tpl_bootstrapitalia.ini(fallback logo/login/search, not configured icone-link, alias coerenteTPL_BOOTSTRAPITALIA_PARTICLE_MENU_INFOin EN). - Ottimizzazione finale logo: mantenuto il modello senza campo
Testo, fallback centrale suTPL_BOOTSTRAPITALIA_PARTICLE_LOGO_BRAND_NAMEe comportamento ripristinato dopo verifica regressione (evitata duplicazione forzata del label su title/alt). - Nota comportamento logo riallineata: aggiornata in
particles/bootstrapitalia-logo.yamlper esplicitare la logica reale (campi opzionali, visualizzazione della sola riga centrale conBootstrap .Italiaquando i campi sono vuoti). - Compattazione descrizioni particelle YAML: semplificati i blocchi
info-contentinparticles/bootstrapitalia-copyright-istituto.yaml,particles/bootstrapitalia-icone-link.yaml,particles/bootstrapitalia-modale-login.yaml,particles/bootstrapitalia-modale-ricerca.yamleparticles/bootstrapitalia-preset-switcher.yaml. - Fix hover icona modale ricerca: in
scss/bootstrapitalia/_bootstrapitalia-modale-ricerca.scssriallineato lo stacking del trigger ricerca al comportamento della login (layer::beforedietro 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.scssescss/bootstrapitalia/_bootstrapitalia-icone-link.scssper usare timing coerente con login (0.2s ease-in-outsu color/fill/background) e comportamento di ingrandimento del cerchio hover allineato. - Allineamento layout Offline lato progetto: in
custom/config/_offline/layout.yamlconsolidato 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.yamlsostituendo il riferimento legacylogo-3431conbootstrapitalia-logo-8845, per garantire coerenza anche senza override runtime incustom/config. - Blindatura Error lato distribuzione: aggiornato
layouts/_error.yamlsostituendo il logo core Gantry conbootstrapitalia-logo-8845e relativa vocecontent, mantenendo la pagina errore allineata all'identita grafica del progetto. - Allineamento layout base Default: portata in
layouts/default.yamlla 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.yamlcon_body_only,_errore_offlinein aggiunta adefault/home, per coerenza tra installazione pulita e layout base distribuiti. - Reset outline runtime per inheritance controllata: svuotati
custom/config/_error/layout.yamlecustom/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.yamlelayouts/_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.