/*
 * site-redesign.css
 * Override globali per applicare il design system dark + sans a TUTTI i blocchi
 * Divi 5 del sito principale (homepage, pagine, post, header, footer).
 *
 * Strategia: l'override è progressivo. Cambia palette, font, spaziature.
 * Non modifica il MARKUP delle pagine (i layout Divi 5 restano dove sono).
 * Tutti i contenuti H1/H2/H3 e i testi originali di Andrea restano intatti.
 *
 * Quando i template saranno rifatti uno a uno col Visual Builder, alcune di
 * queste regole diventeranno ridondanti e si potranno alleggerire.
 */

/* ============================================
 * 1. BODY GLOBALE DARK
 * ============================================ */
body, html {
    background: var(--color-bg) !important;
    color: var(--color-fg);
}

/* Wrap principale di WordPress */
#page-container,
#main-content,
.et_pb_module {
    background: transparent;
}

/* ============================================
 * 2. SEZIONI DIVI: trasparenti, lasciano vedere il body nero
 * Forziamo solo dove serve, sezioni con background custom restano
 * ============================================ */
.et_pb_section {
    background-color: var(--color-bg);
}

/* Spaziature più ariose tra sezioni */
.et_pb_section.et_pb_with_background,
.et_section_regular {
    border-bottom: 1px solid var(--color-border-strong);
}

/* Sezioni "soft" (sfondi quasi-nero per dare ritmo) */
.et_pb_section.swg-section-soft {
    background: var(--color-bg-soft) !important;
}

/* ============================================
 * 3. TIPOGRAFIA: forza Inter ovunque sui contenuti
 * ============================================ */
.et_pb_text,
.et_pb_text_inner,
.et_pb_blurb_description,
.et_pb_module *:not(.fa):not(.icon):not(.et-pb-icon) {
    font-family: var(--font-sans) !important;
}

.et_pb_module h1,
.et_pb_module h2,
.et_pb_module h3,
.et_pb_module h4,
.et_pb_module h5,
.et_pb_module h6,
.et_pb_text h1,
.et_pb_text h2,
.et_pb_text h3,
.et_pb_text h4,
.et_pb_text h5,
.et_pb_text h6 {
    font-family: var(--font-sans) !important;
    color: var(--color-fg) !important;
    font-weight: var(--fw-medium);
    letter-spacing: -0.025em;
    line-height: 1.1;
}

.et_pb_module h1, .et_pb_text h1 { font-size: clamp(2.25rem, 5vw, 4.5rem); }
.et_pb_module h2, .et_pb_text h2 { font-size: clamp(1.75rem, 3.5vw, 3rem); }
.et_pb_module h3, .et_pb_text h3 { font-size: clamp(1.375rem, 2.5vw, 2rem); }
.et_pb_module h4, .et_pb_text h4 { font-size: clamp(1.125rem, 1.5vw, 1.5rem); }

/* Body testo: bianco con leggero contrasto, line-height arioso */
.et_pb_text,
.et_pb_text_inner,
.et_pb_text p,
.et_pb_blurb_description {
    color: var(--color-fg) !important;
    font-size: 1.0625rem;
    line-height: 1.65;
}

.et_pb_text p {
    color: var(--color-fg);
    margin-bottom: var(--space-5);
}

/* ============================================
 * 4. LINK
 * ============================================ */
#main-content a,
.et_pb_text a,
.et_pb_module a {
    color: var(--color-fg) !important;
    text-decoration: underline;
    text-decoration-color: var(--color-border-strong);
    text-underline-offset: 4px;
    transition: text-decoration-color var(--transition-base);
}

#main-content a:hover,
.et_pb_text a:hover,
.et_pb_module a:hover {
    text-decoration-color: var(--color-fg);
}

/* ============================================
 * 5. HEADER DIVI: dark mode + logo grande
 * ============================================ */
#main-header,
#top-header,
#top-menu-nav {
    background: rgba(10, 10, 10, 0.85) !important;
    backdrop-filter: blur(20px) saturate(1.5);
    -webkit-backdrop-filter: blur(20px) saturate(1.5);
    border-bottom: 1px solid var(--color-border) !important;
    box-shadow: none !important;
}

/* Logo Divi: dimensione importante */
#logo {
    max-height: 56px !important;
    height: auto;
}

#main-header.et-fixed-header #logo {
    max-height: 48px !important;
}

/* Menu items: bianchi su nero */
#top-menu li a,
.et_mobile_menu li a,
#et-top-navigation .menu li a {
    color: var(--color-fg-secondary) !important;
    font-family: var(--font-sans) !important;
    font-size: 0.9375rem;
    font-weight: var(--fw-regular) !important;
    letter-spacing: 0;
    transition: color var(--transition-base);
}

#top-menu li a:hover,
.et_mobile_menu li a:hover,
#top-menu li.current-menu-item > a {
    color: var(--color-fg) !important;
    opacity: 1;
}

/* Mega-menu / sub-menu Divi: pannello dark */
#top-menu .sub-menu,
#top-menu li ul.sub-menu,
.et_mobile_menu {
    background: var(--color-bg) !important;
    border: 1px solid var(--color-border) !important;
}

#top-menu .sub-menu li a {
    background: transparent !important;
    color: var(--color-fg-secondary) !important;
}

#top-menu .sub-menu li a:hover {
    color: var(--color-fg) !important;
    background: var(--color-bg-soft) !important;
}

/* Hamburger mobile: bianco */
.mobile_menu_bar:before {
    color: var(--color-fg) !important;
}

/* ============================================
 * 6. BUTTONS DIVI: stile minimal coerente
 * ============================================ */
.et_pb_button,
.et_pb_button:visited,
a.et_pb_button {
    background: transparent !important;
    border: 1px solid var(--color-fg) !important;
    color: var(--color-fg) !important;
    font-family: var(--font-sans) !important;
    font-weight: var(--fw-medium) !important;
    font-size: 0.9375rem !important;
    padding: 0.875rem 1.5rem !important;
    letter-spacing: 0;
    text-decoration: none !important;
    transition: background var(--transition-base), color var(--transition-base);
}

.et_pb_button:hover,
.et_pb_button:hover:after {
    background: var(--color-fg) !important;
    color: var(--color-bg) !important;
    padding-left: 1.5rem !important;
    padding-right: 1.5rem !important;
}

.et_pb_button:after {
    display: none !important;
}

/* ============================================
 * 7. FOOTER DIVI: minimal dark
 * ============================================ */
#main-footer,
#footer-bottom,
#footer-widgets {
    background: var(--color-bg) !important;
    color: var(--color-fg-secondary) !important;
    border-top: 1px solid var(--color-border-strong) !important;
}

#footer-info,
#footer-widgets .footer-widget,
#footer-bottom * {
    color: var(--color-fg-secondary) !important;
    font-family: var(--font-sans) !important;
}

#footer-widgets h4 {
    color: var(--color-fg) !important;
    font-family: var(--font-mono) !important;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    font-size: 11px !important;
}

/* ============================================
 * 8. IMMAGINI: nessuna invasività, restano come sono
 * Nota: lasciamo le immagini degli articoli intatte, come da richiesta Andrea.
 * ============================================ */
img {
    filter: none;
}

/* ============================================
 * 9. CACHE DI DIVI (et-cache): forza dark anche su CSS cachato
 * ============================================ */
.et-db .et_pb_section,
.et_pb_section_regular {
    background: var(--color-bg);
}

/* ============================================
 * 10. ADMIN BAR: lasciamo a WP che la gestisca,
 *      ma assicuriamo padding top corretto sul body
 * ============================================ */
body.admin-bar {
    padding-top: 0 !important;
}

@media screen and (min-width: 783px) {
    body.admin-bar #main-header { top: 32px; }
}
@media screen and (max-width: 782px) {
    body.admin-bar #main-header { top: 46px; }
}

/* ============================================
 * 11. OVERRIDE AGGRESSIVO della cache Divi
 *      (la et-cache contiene background:#fff hard-coded che vince
 *      sugli override normali. Forziamo con maggior specificity).
 * ============================================ */
body .et_pb_section,
body .et-db .et_pb_section,
body .et_builder_inner_content .et_pb_section,
body .et_pb_section[class*="preset"],
body .et_pb_section[class*="default"] {
    background-color: var(--color-bg) !important;
}

body .et_pb_row,
body .et_pb_row_inner,
body .et_pb_column {
    background-color: transparent !important;
}

/* Force dark su qualunque modulo con background bianco residuo */
body .et_pb_text[style*="background-color: #fff"],
body .et_pb_text[style*="background-color:#fff"],
body .et_pb_text[style*="background: rgb(255, 255, 255)"] {
    background-color: transparent !important;
}

/* ============================================
 * 12. BLOG / CENTRO STUDI: griglia post in stile editoriale
 * ============================================ */
.et_pb_blog_grid,
.et_pb_blog_grid .column,
.et_pb_post {
    background: transparent !important;
    box-shadow: none !important;
}

.et_pb_post {
    border-bottom: 1px solid var(--color-border) !important;
    padding-bottom: var(--space-7) !important;
    margin-bottom: var(--space-7) !important;
}

.et_pb_post h2,
.et_pb_post h2 a,
.et_pb_post .entry-title,
.et_pb_post .entry-title a {
    color: var(--color-fg) !important;
    font-family: var(--font-sans) !important;
    font-weight: var(--fw-medium) !important;
    letter-spacing: -0.02em;
    line-height: 1.2;
}

.et_pb_post .post-meta,
.et_pb_post .post-meta a {
    color: var(--color-fg-secondary) !important;
    font-family: var(--font-mono) !important;
    font-size: 11px !important;
    text-transform: uppercase;
    letter-spacing: 0.1em;
}

.et_pb_post .post-content,
.et_pb_post .post-content p {
    color: var(--color-fg-secondary) !important;
}

.et_pb_post .more-link,
.et_pb_post a.more-link {
    color: var(--color-fg) !important;
    border-bottom: 1px solid var(--color-fg) !important;
    text-decoration: none !important;
    padding-bottom: 2px;
    background: none !important;
}

/* ============================================
 * 13. SINGLE POST (articolo singolo)
 * ============================================ */
.single-post #main-content,
.single-post .container,
.single-post #left-area,
.single-post #content-area,
.single-post .entry-content {
    background: var(--color-bg) !important;
    color: var(--color-fg);
}

.single-post .et_post_meta_wrapper {
    background: var(--color-bg);
    border-bottom: 1px solid var(--color-border);
    padding-bottom: var(--space-7) !important;
}

.single-post h1.entry-title,
.single-post .entry-title {
    color: var(--color-fg) !important;
    font-family: var(--font-sans) !important;
    font-weight: 500 !important;
    font-size: clamp(2.25rem, 5vw, 4.5rem) !important;
    line-height: 0.95 !important;
    letter-spacing: -0.035em !important;
    margin-bottom: 1.5rem !important;
    max-width: 22ch;
}

.single-post .post-meta,
.single-post .post-meta a {
    color: var(--color-fg-secondary) !important;
    font-family: var(--font-mono) !important;
    font-size: 11px !important;
    text-transform: uppercase;
    letter-spacing: 0.1em;
}

.single-post .entry-content p,
.single-post .entry-content li {
    color: var(--color-fg) !important;
    font-size: 1.0625rem;
    line-height: 1.75;
}

.single-post .entry-content h2 {
    color: var(--color-fg) !important;
    margin-top: var(--space-8) !important;
}

.single-post .entry-content blockquote {
    border-left: 3px solid var(--color-fg) !important;
    color: var(--color-fg-secondary) !important;
    padding-left: var(--space-5) !important;
    margin: var(--space-7) 0 !important;
}

/* ============================================
 * 14. ARCHIVI (categoria, tag, autore, data, search)
 * ============================================ */
.archive #main-content,
.search-results #main-content,
.archive .container,
.archive #left-area,
.search-results #left-area {
    background: var(--color-bg) !important;
}

.archive h1.page-title,
.search-results h1.page-title {
    color: var(--color-fg) !important;
    font-family: var(--font-sans) !important;
    font-weight: var(--fw-medium) !important;
}

/* ============================================
 * 15. SIDEBAR (se presente)
 * ============================================ */
#sidebar,
#sidebar .widget,
#sidebar .widget_text,
#sidebar h4.widgettitle {
    background: var(--color-bg) !important;
    color: var(--color-fg) !important;
}

#sidebar h4.widgettitle {
    font-family: var(--font-mono) !important;
    font-size: 11px !important;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--color-fg) !important;
    border-bottom: 1px solid var(--color-border-strong) !important;
    padding-bottom: var(--space-3) !important;
    margin-bottom: var(--space-4) !important;
}

#sidebar a {
    color: var(--color-fg-secondary) !important;
}
#sidebar a:hover {
    color: var(--color-fg) !important;
}

/* ============================================
 * 16. PAGINAZIONE
 * ============================================ */
.wp-pagenavi,
.et_pb_pagebuilder_layout .pagination,
.pagination {
    background: transparent !important;
    border-top: 1px solid var(--color-border);
    padding-top: var(--space-6);
    margin-top: var(--space-8);
}

.wp-pagenavi a,
.wp-pagenavi span,
.pagination a,
.pagination span {
    color: var(--color-fg-secondary) !important;
    border: 1px solid var(--color-border) !important;
    background: transparent !important;
    padding: var(--space-2) var(--space-4) !important;
    font-family: var(--font-mono) !important;
    font-size: 12px;
}

.wp-pagenavi a:hover,
.pagination a:hover,
.wp-pagenavi .current,
.pagination .current {
    color: var(--color-fg) !important;
    border-color: var(--color-fg) !important;
}

/* ============================================
 * 17. COMMENTI (se presenti)
 * ============================================ */
#comments,
.comment-form,
.comment-list,
.comment-body {
    background: var(--color-bg) !important;
    color: var(--color-fg) !important;
}

#commentform input[type="text"],
#commentform input[type="email"],
#commentform input[type="url"],
#commentform textarea {
    background: var(--color-bg-soft) !important;
    color: var(--color-fg) !important;
    border: 1px solid var(--color-border) !important;
    padding: var(--space-3) !important;
}

#commentform input:focus,
#commentform textarea:focus {
    border-color: var(--color-fg) !important;
    outline: none !important;
}

/* ============================================
 * 18. CONTACT FORM 7 / Divi Contact Form
 * ============================================ */
.et_pb_contact_form_container,
.et_pb_contact,
.wpcf7-form {
    background: transparent !important;
}

.et_pb_contact input[type="text"],
.et_pb_contact input[type="email"],
.et_pb_contact input[type="tel"],
.et_pb_contact textarea,
.et_pb_contact select,
.wpcf7-form input[type="text"],
.wpcf7-form input[type="email"],
.wpcf7-form textarea {
    background: var(--color-bg-soft) !important;
    color: var(--color-fg) !important;
    border: 1px solid var(--color-border) !important;
    padding: var(--space-3) !important;
    font-family: var(--font-sans) !important;
}

.et_pb_contact input:focus,
.et_pb_contact textarea:focus,
.wpcf7-form input:focus,
.wpcf7-form textarea:focus {
    border-color: var(--color-fg) !important;
    outline: none !important;
}

/* P6 v2 (Andrea 2026-06-14 sera): il form contatti (page-id 2235) sforava a
 * SINISTRA rispetto ai testi sopra. I testi sono in .swg-container (max-width
 * --container-max-width centrato + 80px di padding). Replico quel box sul
 * contenitore del form usando le STESSE variabili, cosi' il suo bordo sinistro
 * coincide esattamente con quello dei testi; il form resta a larghezza di
 * lettura 720 ancorato a sinistra. La specificita' section>row>column>container
 * serve a battere la regola Divi che teneva il contenitore a tutta larghezza.
 * Allineamento esatto sui desktop; sotto ~1280px resta un minimo scarto per i
 * width responsive che Divi impone alla riga in media query. */
html body.page-id-2235 .et_pb_section .et_pb_row .et_pb_column .et_pb_contact_form_container {
    max-width: var(--container-max-width) !important;
    width: 100% !important;
    margin-left: auto !important;
    margin-right: auto !important;
    padding-left: var(--container-padding-desktop) !important;
    padding-right: var(--container-padding-desktop) !important;
    box-sizing: border-box !important;
    float: none !important;
}
html body.page-id-2235 .et_pb_contact {
    max-width: 720px !important;
    margin-left: 0 !important;
    margin-right: auto !important;
}

.et_pb_contact label,
.wpcf7-form label {
    color: var(--color-fg) !important;
    font-family: var(--font-sans) !important;
}

/* ============================================
 * 19. WIDGET (footer e sidebar)
 * ============================================ */
.et_pb_widget,
.et_pb_widget ul,
.et_pb_widget li {
    color: var(--color-fg-secondary) !important;
    background: transparent !important;
}

.et_pb_widget a {
    color: var(--color-fg-secondary) !important;
}

.et_pb_widget a:hover {
    color: var(--color-fg) !important;
}

/* ============================================
 * 20. IMMAGINI FEATURED: leggermente desaturate per coerenza dark
 * (commented out per default: troppa interferenza con foto reali)
 * ============================================ */
/*
.et_pb_post img,
.single-post .post-thumbnail img {
    filter: brightness(0.92) contrast(1.05);
}
*/

/* ============================================
 * 21. DIVI 5 THEME BUILDER OVERRIDE
 *      I template Header e Footer custom del Theme Builder hanno CSS
 *      hard-coded con !important. Battere con specificity ancora maggiore.
 *      Selettori chiave: .et-l--header, .et-l--footer, .et_pb_section_0_tb_header.
 * ============================================ */

/* HEADER Theme Builder */
.et-l--header,
.et-l--header > .et_builder_inner_content {
    background: var(--color-bg) !important;
}

.et-l--header .et_pb_section,
.et-l--header > .et_builder_inner_content .et_pb_section,
.et-l--header > .et_builder_inner_content .et_pb_section.et_pb_section_0_tb_header,
[class*="et_pb_section"][class*="_tb_header"] {
    background-color: var(--color-bg) !important;
    border-bottom-color: var(--color-border-strong) !important;
    /* hairline vicino al menu ma con aria sotto il logo */
    padding-top: 18px !important;
    padding-bottom: 18px !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}
/* anche la row interna non deve aggiungere altezza */
.et-l--header .et_pb_row,
[class*="et_pb_row"][class*="_tb_header"] {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}
/* il modulo menu stesso non deve avere margin che lo spinge giù */
.et-l--header .et_pb_menu,
[class*="et_pb_menu"][class*="_tb_header"] {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}

.et-l--header .et_pb_row,
[class*="et_pb_row"][class*="_tb_header"] {
    background-color: transparent !important;
    border-bottom: 0 !important;
    border-bottom-width: 0 !important;
}

/* Menu nell'header */
.et-l--header .et_pb_menu,
[class*="et_pb_menu"][class*="_tb_header"],
[class*="et_pb_menu"][class*="_tb_header"].et_pb_menu {
    background-color: transparent !important;
}

.et-l--header .et_pb_menu ul li a,
[class*="et_pb_menu"][class*="_tb_header"] ul li a,
[class*="et_pb_menu"][class*="_tb_header"].et_pb_menu ul li a {
    color: var(--color-fg) !important;
    font-family: var(--font-sans) !important;
    font-weight: var(--fw-regular) !important;
    font-size: 0.9375rem !important;
}

.et-l--header .et_pb_menu ul li a:hover,
[class*="et_pb_menu"][class*="_tb_header"] ul li a:hover {
    color: var(--color-fg-secondary) !important;
}

/* Sub-menu (mega-menu) */
.et-l--header .et_pb_menu .nav li ul,
.et-l--header .et_pb_menu .et_mobile_menu,
[class*="et_pb_menu"][class*="_tb_header"] .nav li ul,
[class*="et_pb_menu"][class*="_tb_header"] .et_mobile_menu,
[class*="et_pb_menu"][class*="_tb_header"] .et_mobile_menu ul {
    background-color: var(--color-bg) !important;
    border-color: var(--color-border) !important;
}

.et-l--header .et_pb_menu .nav li ul a,
[class*="et_pb_menu"][class*="_tb_header"] .sub-menu a {
    color: var(--color-fg-secondary) !important;
}

.et-l--header .et_pb_menu .nav li ul a:hover {
    color: var(--color-fg) !important;
    background: var(--color-bg-soft) !important;
}

/* Logo del Theme Builder header: se serve forzare dimensioni */
.et-l--header .et_pb_menu .et_pb_menu__logo,
.et-l--header .et_pb_menu .et_pb_menu__logo img,
[class*="et_pb_menu"][class*="_tb_header"] .et_pb_menu__logo img {
    max-height: 64px !important;
    height: auto !important;
    width: auto !important;
}

/* Per quei template che mettono il logo dentro un image module separato */
.et-l--header .et_pb_image img,
.et-l--header img[src*="logo"],
.et-l--header img[src*="Swing"] {
    max-height: 80px !important;
    height: auto !important;
    width: auto !important;
}

/* ============================================
 * 22. FOOTER Theme Builder
 * ============================================ */

.et-l--footer,
.et-l--footer > .et_builder_inner_content {
    background: var(--color-bg) !important;
}

.et-l--footer .et_pb_section,
.et-l--footer > .et_builder_inner_content .et_pb_section,
[class*="et_pb_section"][class*="_tb_footer"] {
    background-color: var(--color-bg) !important;
    background-image: none !important;
    border-top: 1px solid var(--color-border-strong) !important;
}

.et-l--footer .et_pb_row,
[class*="et_pb_row"][class*="_tb_footer"] {
    background-color: transparent !important;
}

/* Testi nel footer Theme Builder */
.et-l--footer .et_pb_text,
.et-l--footer .et_pb_text *,
.et-l--footer .et_pb_text_inner,
.et-l--footer .et_pb_text_inner p,
[class*="et_pb_text"][class*="_tb_footer"],
[class*="et_pb_text"][class*="_tb_footer"] p,
[class*="et_pb_text"][class*="_tb_footer"] * {
    color: var(--color-fg) !important;
    font-family: var(--font-sans) !important;
}

.et-l--footer h1,
.et-l--footer h2,
.et-l--footer h3,
.et-l--footer h4,
.et-l--footer h5,
.et-l--footer h6 {
    color: var(--color-fg) !important;
    font-family: var(--font-sans) !important;
}

/* Link nel footer Theme Builder */
.et-l--footer a,
.et-l--footer .et_pb_text a,
.et-l--footer .et_pb_menu ul li a,
[class*="et_pb_menu"][class*="_tb_footer"] ul li a {
    color: var(--color-fg-secondary) !important;
    font-family: var(--font-sans) !important;
    text-decoration: none !important;
}

.et-l--footer a:hover,
.et-l--footer .et_pb_text a:hover,
.et-l--footer .et_pb_menu ul li a:hover {
    color: var(--color-fg) !important;
}

/* Menu footer */
.et-l--footer .et_pb_menu,
[class*="et_pb_menu"][class*="_tb_footer"] {
    background-color: transparent !important;
}

/* Logo del footer (se è una image module con il logo grande SWING) */
.et-l--footer .et_pb_image,
.et-l--footer .et_pb_image_wrap {
    background: transparent !important;
}

/* Icone social del footer */
.et-l--footer .et_pb_social_media_follow a,
.et-l--footer .et_pb_social_media_follow li a.icon,
[class*="et_pb_social_media_follow"][class*="_tb_footer"] li a.icon {
    background: transparent !important;
    color: var(--color-fg-secondary) !important;
}

.et-l--footer .et_pb_social_media_follow a:hover {
    color: var(--color-fg) !important;
}

.et-l--footer .et_pb_social_media_follow a:before {
    color: inherit !important;
}

/* Pulsanti Divi nel footer */
.et-l--footer .et_pb_button {
    color: var(--color-fg) !important;
    border-color: var(--color-fg) !important;
    background: transparent !important;
}

.et-l--footer .et_pb_button:hover {
    background: var(--color-fg) !important;
    color: var(--color-bg) !important;
}

/* ============================================
 * 23. BODY del Theme Builder (le pagine usano et-l--body)
 * ============================================ */

.et-l--body,
.et-l--body > .et_builder_inner_content {
    background: var(--color-bg);
}

.et-l--body .et_pb_section,
.et-l--body > .et_builder_inner_content .et_pb_section {
    background-color: var(--color-bg) !important;
}

/* Fix specifico: forma di contatto Divi sul fondo della pagina contatti */
.et-l--body .et_pb_contact_form,
.et-l--body .et_pb_contact_form_container {
    background: transparent !important;
}

/* ============================================
 * 24. ADMIN BAR offset corretto per Theme Builder header
 * ============================================ */
body.admin-bar .et-l--header {
    position: relative;
}

@media screen and (min-width: 783px) {
    body.admin-bar #et-boc { padding-top: 0; }
}

/* ============================================
 * 25. FIX CRITICO: et_pb_bg_layout_light
 *
 * I moduli Divi disegnati con sfondo chiaro (vecchio Divi 4) hanno la classe
 * .et_pb_bg_layout_light che FORZA color:#333 sui testi e color:#000 sui titoli.
 * Va sovrascritto SU TUTTE LE PAGINE perché senza, in dark mode i titoli sono
 * neri su sfondo nero (illeggibili).
 *
 * Vedi screenshot Andrea 2026-06-06: titolo "Contatti per avviare un dialogo"
 * appariva in nero quasi invisibile su sfondo nero.
 * ============================================ */
body .et_pb_bg_layout_light,
body .et_pb_bg_layout_light *,
body .et_pb_bg_layout_light h1,
body .et_pb_bg_layout_light h2,
body .et_pb_bg_layout_light h3,
body .et_pb_bg_layout_light h4,
body .et_pb_bg_layout_light h5,
body .et_pb_bg_layout_light h6,
body .et_pb_bg_layout_light p,
body .et_pb_bg_layout_light li,
body .et_pb_bg_layout_light strong,
body .et_pb_bg_layout_light em,
body .et_pb_bg_layout_light blockquote,
body .et_pb_bg_layout_light span,
body .et_pb_bg_layout_light .et_pb_text_inner,
body .et_pb_bg_layout_light .et_pb_text_inner *,
body .et_pb_bg_layout_light .et_pb_blurb_description,
body .et_pb_bg_layout_light .et_pb_blurb_description * {
    color: var(--color-fg) !important;
}

/* Link in moduli bg_layout_light */
body .et_pb_bg_layout_light a,
body .et_pb_bg_layout_light a:visited,
body .et_pb_bg_layout_light .et_pb_text_inner a {
    color: var(--color-fg) !important;
    text-decoration-color: var(--color-border-strong) !important;
}

body .et_pb_bg_layout_light a:hover {
    color: var(--color-fg) !important;
    text-decoration-color: var(--color-fg) !important;
}

/* ============================================
 * 26. FIX CRITICO: testi e heading del Theme Builder BODY
 *      (selettori dinamici .et_pb_text_X_tb_body, et_pb_text_X_tb_footer)
 *      che hanno color hard-coded nel CSS cached.
 * ============================================ */
.et-l--body [class*="_tb_body"] .et_pb_text_inner,
.et-l--body [class*="_tb_body"] .et_pb_text_inner *,
.et-l--body [class*="_tb_body"] h1,
.et-l--body [class*="_tb_body"] h2,
.et-l--body [class*="_tb_body"] h3,
.et-l--body [class*="_tb_body"] h4,
.et-l--body [class*="_tb_body"] h5,
.et-l--body [class*="_tb_body"] h6,
.et-l--body [class*="_tb_body"] p {
    color: var(--color-fg) !important;
}

.et-l--footer [class*="_tb_footer"] .et_pb_text_inner,
.et-l--footer [class*="_tb_footer"] .et_pb_text_inner *,
.et-l--footer [class*="_tb_footer"] h1,
.et-l--footer [class*="_tb_footer"] h2,
.et-l--footer [class*="_tb_footer"] h3,
.et-l--footer [class*="_tb_footer"] h4,
.et-l--footer [class*="_tb_footer"] h5,
.et-l--footer [class*="_tb_footer"] h6,
.et-l--footer [class*="_tb_footer"] p {
    color: var(--color-fg) !important;
}

/* Override mobile-specifico (le regole media @max-width hard-coded
   nel CSS cached) */
@media (max-width: 980px) {
    .et-l--footer [class*="_tb_footer"] .et_pb_text_inner {
        color: var(--color-fg) !important;
    }
}
@media (max-width: 767px) {
    .et-l--footer [class*="_tb_footer"] .et_pb_text_inner {
        color: var(--color-fg) !important;
    }
}

/* ============================================
 * 27. GRADIENT bianco→scuro del footer Theme Builder
 *      Era: background-image: linear-gradient(180deg,#ffffff 3%,#23170d 62%,...);
 *      Sostituiamo con solid dark.
 * ============================================ */
.et-l--footer .et_pb_section,
.et-l--footer > .et_builder_inner_content .et_pb_section,
[class*="et_pb_section"][class*="_tb_footer"] {
    background-image: none !important;
    background: var(--color-bg) !important;
}

/* ============================================
 * 28. POST TITLE (template di pagina/articolo)
 * ============================================ */
.et_pb_post_title h1,
.et_pb_post_title h2,
.entry-title,
.post-title,
h1.entry-title,
.et_pb_title_container h1,
.et_pb_title_meta_container .et_pb_title_container h1 {
    color: var(--color-fg) !important;
}

/* ============================================
 * 29. ROOT CAUSE FIX: .et_pb_text_inner
 *
 * Divi 5 ha una regola hard-coded nel CSS cached:
 *    .et_pb_text_inner { color: #000000 !important }
 * Questa è il wrapper di OGNI modulo text di Divi e contiene gli H1/H2/H3
 * e i paragrafi. Anche se le impostazioni globali Divi dicono "h1 bianco",
 * il color #000 !important del wrapper vince per ereditarietà.
 *
 * Fix: forziamo .et_pb_text_inner a colore var(--color-fg) bianco con specificity
 * altissima (body ... !important) e questo CSS è caricato per ultimo
 * (wp_head priority 999), quindi vince nella cascade.
 * ============================================ */
body .et_pb_text_inner,
html body .et_pb_text_inner,
body .et_pb_text .et_pb_text_inner {
    color: var(--color-fg) !important;
}

body .et_pb_text_inner h1,
body .et_pb_text_inner h2,
body .et_pb_text_inner h3,
body .et_pb_text_inner h4,
body .et_pb_text_inner h5,
body .et_pb_text_inner h6,
body .et_pb_text_inner p,
body .et_pb_text_inner li,
body .et_pb_text_inner span,
body .et_pb_text_inner strong,
body .et_pb_text_inner em {
    color: inherit !important;
}

/* Link DENTRO i text module: bianco con underline sottile */
body .et_pb_text_inner a,
body .et_pb_text_inner a:visited {
    color: var(--color-fg) !important;
    text-decoration-color: var(--color-border-strong) !important;
}

body .et_pb_text_inner a:hover {
    color: var(--color-fg) !important;
    text-decoration-color: var(--color-fg) !important;
}

/* Override anche per i text del Theme Builder body */
body .et-l--body .et_pb_text_inner,
body .et-l--body [class*="_tb_body"] .et_pb_text_inner {
    color: var(--color-fg) !important;
}

/* Override per Theme Builder footer (regola cached con color:#000!important) */
body .et-l--footer .et_pb_text_inner,
body .et-l--footer [class*="_tb_footer"] .et_pb_text_inner,
html body .et-l--footer .et_pb_text_inner {
    color: var(--color-fg) !important;
}

/* ============================================
 * 30. "PSEUDO-EDITORIALE" per pagine non-home
 *
 * Applica visual del design demo (hairlines tra sezioni, padding ariosi,
 * numerazione 01/N, max-width contenuto editoriale) via CSS puro.
 * SOLO su pagine non-home per non rompere il layout della homepage che
 * Andrea ha già confermato essere ok.
 * ============================================ */

/* Padding ariosi sulle sezioni delle pagine interne */
body.page:not(.home) .et-l--body .et_pb_section,
body.single-post .et-l--body .et_pb_section {
    padding-top: 5rem !important;
    padding-bottom: 5rem !important;
    border-bottom: 1px solid var(--color-border-strong);
    position: relative;
    counter-increment: swg-section;
}
body.page:not(.home) .et-l--body .et_pb_section:first-of-type,
body.single-post .et-l--body .et_pb_section:first-of-type {
    counter-reset: swg-section;
}

@media (min-width: 768px) {
    body.page:not(.home) .et-l--body .et_pb_section,
    body.single-post .et-l--body .et_pb_section {
        padding-top: 7rem !important;
        padding-bottom: 7rem !important;
    }
}

/* Numerazione automatica sezione (alto a destra) "01"
 * Solo sulle pagine non-home. Stile mono uppercase. */
body.page:not(.home) .et-l--body .et_pb_section::before,
body.single-post .et-l--body .et_pb_section::before {
    content: counter(swg-section, decimal-leading-zero);
    position: absolute;
    top: 2rem;
    right: var(--container-padding-mobile);
    font-family: var(--font-mono);
    font-size: 11px;
    color: var(--color-fg-secondary);
    letter-spacing: 0.12em;
    text-transform: uppercase;
    z-index: 5;
    pointer-events: none;
}
@media (min-width: 768px) {
    body.page:not(.home) .et-l--body .et_pb_section::before,
    body.single-post .et-l--body .et_pb_section::before {
        top: 3rem;
        right: var(--container-padding-desktop);
    }
}

/* Titoli editoriali ariosi: max-width + letter-spacing serrato */
body.page:not(.home) .et-l--body .et_pb_text h1,
body.page:not(.home) .et-l--body .et_pb_text h2,
body.single-post .et-l--body .et_pb_text h1,
body.single-post .et-l--body .et_pb_text h2 {
    max-width: 1100px;
    letter-spacing: -0.035em !important;
    line-height: 1.05 !important;
    font-weight: 500 !important;
}

/* Body text con max-width 720 per leggibilità editoriale */
body.page:not(.home) .et-l--body .et_pb_text p,
body.single-post .et-l--body .et_pb_text p {
    max-width: 720px;
    line-height: 1.65 !important;
}

/* Riga sottile dopo i titoli H1 (vibe editoriale) */
body.page:not(.home) .et-l--body .et_pb_text:first-child h1::after,
body.single-post .et-l--body .et_pb_text:first-child h1::after {
    content: "";
    display: block;
    width: 100%;
    max-width: 1100px;
    height: 1px;
    background: var(--color-border-strong);
    margin-top: 3rem;
}

/* Le immagini decorative (fiori, ecc.) restano ma con leggera opacità */
body.page:not(.home) .et-l--body .et_pb_image img,
body.single-post .et-l--body .et_pb_image img {
    opacity: 0.95;
}

/* ============================================
 * 31. FIX NUCLEARE H1/H2/H3 illeggibili
 *
 * Anche se i miei override sono caricati per ultimi, c'è ancora qualche
 * regola che rende grigio scuro i titoli (visto in screenshot Chrome headless
 * 2026-06-07: titoli "Consulenza strategica..." e "Contatti per avviare..."
 * appaiono grigio scuro su sfondo nero).
 *
 * Selettori massimamente specifici per VINCERE tutto.
 * ============================================ */

html body h1,
html body h2,
html body h3,
html body h4,
html body h5,
html body h6 {
    color: #FAFAFA !important;
}

html body .et_pb_text h1,
html body .et_pb_text h2,
html body .et_pb_text h3,
html body .et_pb_text_inner h1,
html body .et_pb_text_inner h2,
html body .et_pb_text_inner h3,
html body .et_pb_bg_layout_light h1,
html body .et_pb_bg_layout_light h2,
html body .et_pb_bg_layout_light h3,
html body .et_pb_bg_layout_light .et_pb_text_inner h1,
html body .et_pb_bg_layout_light .et_pb_text_inner h2,
html body .et_pb_bg_layout_light .et_pb_text_inner h3,
html body [class*="et_pb_text"][class*="et_pb_bg_layout_light"] h1,
html body [class*="et_pb_text"][class*="et_pb_bg_layout_light"] h2,
html body [class*="et_pb_text"][class*="et_pb_bg_layout_light"] h3,
html body [class*="et_pb_text"][class*="et_pb_bg_layout_light"] h4 {
    color: #FAFAFA !important;
    text-shadow: none !important;
    opacity: 1 !important;
}

/* Anche i paragrafi nei moduli bg_layout_light */
html body .et_pb_bg_layout_light .et_pb_text_inner p,
html body [class*="et_pb_text"][class*="et_pb_bg_layout_light"] p {
    color: #FAFAFA !important;
    opacity: 1 !important;
}

/* ============================================
 * 32. DISATTIVATO 2026-06-07.
 *      Andrea ha chiarito: vuole il layout della home (sobrio, senza
 *      numerazione 01/N né eyebrow). Non aggiungiamo decorazioni.
 *      editorial.js NON viene più enquequato (vedi functions.php).
 * ============================================ */

/* ============================================
 * 33. FOOTER MINIMAL: nascondo i moduli vecchi del Theme Builder footer
 *      tranne il bottom bar, e ridisegno lo spazio.
 * ============================================ */

/* Il footer Theme Builder ha 3 row: row 0 (logo + claim), row 1 (menu),
   row 2 (bottom). Mantengo solo l'essenziale. */

.et-l--footer .et_pb_section_0_tb_footer {
    padding-top: 4rem !important;
    padding-bottom: 2rem !important;
    border-top: 1px solid var(--color-border-strong) !important;
    background: var(--color-bg) !important;
    background-image: none !important;
}

/* Nascondi le immagini grandi e i social del footer per look minimal */
.et-l--footer .et_pb_image_0_tb_footer,
.et-l--footer ul.et_pb_social_media_follow_0_tb_footer {
    display: none !important;
}

/* Il claim "30 anni alter ego" e simili: ridotti a font-size piccolo mono */
.et-l--footer .et_pb_text_0_tb_footer .et_pb_text_inner,
.et-l--footer .et_pb_text_1_tb_footer .et_pb_text_inner,
.et-l--footer .et_pb_text_2_tb_footer .et_pb_text_inner {
    font-family: var(--font-sans) !important;
    font-size: 0.875rem !important;
    line-height: 1.6 !important;
    color: var(--color-fg-secondary) !important;
    font-weight: 400 !important;
}

/* Footer menu: stile sobrio */
.et-l--footer .et_pb_menu_0_tb_footer ul li a {
    font-family: var(--font-sans) !important;
    font-size: 0.875rem !important;
    color: var(--color-fg-secondary) !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
}

.et-l--footer .et_pb_menu_0_tb_footer ul li a:hover {
    color: var(--color-fg) !important;
}

/* Hairline tra rows del footer */
.et-l--footer .et_pb_row + .et_pb_row {
    border-top: 1px solid var(--color-border) !important;
    padding-top: 1.5rem !important;
    margin-top: 1.5rem !important;
}

/* ============================================
 * 34. DISATTIVATO 2026-06-07.
 *      Le colonne restano come le ha disegnate Andrea nel Visual Builder.
 * ============================================ */

/* ============================================
 * 35. MENU HEADER VISIBILE (Andrea: "il menu non esiste")
 *      Negli screenshot Chrome headless il menu apparirà appena visibile
 *      perché era in color rgba(255,255,255,0.6). Forziamo bianco netto.
 * ============================================ */
.et-l--header .et_pb_menu_inner_container,
[class*="et_pb_menu"][class*="_tb_header"] {
    background: transparent !important;
}

.et-l--header .et_pb_menu ul li a,
[class*="et_pb_menu"][class*="_tb_header"] ul li a,
[class*="et_pb_menu"][class*="_tb_header"].et_pb_menu ul li a,
.et-l--header .et_pb_menu .nav li a,
[class*="et_pb_menu"][class*="_tb_header"] .nav li a {
    color: #FAFAFA !important;
    opacity: 1 !important;
    font-family: var(--font-sans) !important;
    font-weight: 400 !important;
    font-size: 0.9375rem !important;
    text-transform: none !important;
    letter-spacing: -0.005em !important;
}

.et-l--header .et_pb_menu ul li a:hover,
[class*="et_pb_menu"][class*="_tb_header"] ul li a:hover {
    color: #FAFAFA !important;
    opacity: 0.7 !important;
}

/* Logo nel header reale (Theme Builder) */
.et-l--header img,
.et-l--header .et_pb_image img {
    filter: none !important;
    max-height: 64px !important;
    height: auto !important;
    width: auto !important;
}

/* Dropdown sub-menu del header con sfondo dark netto */
.et-l--header .et_pb_menu .sub-menu,
[class*="et_pb_menu"][class*="_tb_header"] .sub-menu,
.et-l--header .et_pb_menu .et_mobile_menu {
    background: var(--color-bg) !important;
    border: 1px solid var(--color-border) !important;
}

.et-l--header .et_pb_menu .sub-menu a,
[class*="et_pb_menu"][class*="_tb_header"] .sub-menu a {
    color: #FAFAFA !important;
    opacity: 0.7 !important;
}

.et-l--header .et_pb_menu .sub-menu a:hover {
    opacity: 1 !important;
    background: rgba(255,255,255,0.05) !important;
}

/* P5 (Andrea 2026-06-14): il mega-menu "Focus settoriali" (3 colonne, voce
 * piu' a destra con dropdown) sforava il bordo destro della finestra.
 * Lo ancoro al bordo destro della voce, cosi' cresce verso sinistra e resta
 * sempre dentro la viewport. Cap di larghezza come ulteriore guardia. */
.et-l--header .et_pb_menu .menu-item-15846 > .sub-menu,
[class*="et_pb_menu"][class*="_tb_header"] .menu-item-15846 > .sub-menu {
    left: auto !important;
    right: 0 !important;
    max-width: calc(100vw - 64px) !important;
}

/* ============================================
 * 36. MENU su UNA SOLA RIGA + LOGO senza box bianco
 *      Andrea (2026-06-07): "il menu non è corretto" (andava su 2 righe)
 * ============================================ */

/* Logo: rimuovo qualunque background ereditato dal Theme Builder */
.et-l--header img,
.et-l--header .et_pb_image_wrap,
.et-l--header .et_pb_image,
.et-l--header .et_pb_menu__logo,
.et-l--header .et_pb_menu__logo-wrap,
.et-l--header .et_pb_menu__logo-slot {
    background: transparent !important;
    background-color: transparent !important;
    border-radius: 0 !important;
    padding: 0 !important;
}
.et-l--header img {
    background: transparent !important;
    box-shadow: none !important;
}

/* Logo dimensione adeguata */
.et-l--header .et_pb_image img,
.et-l--header .et_pb_menu__logo img,
[class*="et_pb_image"][class*="_tb_header"] img {
    max-height: 56px !important;
    width: auto !important;
    height: auto !important;
}

/* Menu navbar: forzato su UNA riga, riduco font-size e gap se necessario */
.et-l--header .et_pb_menu .et_pb_menu__menu,
.et-l--header .et_pb_menu nav,
.et-l--header .et_pb_menu nav > ul,
[class*="et_pb_menu"][class*="_tb_header"] nav > ul,
[class*="et_pb_menu"][class*="_tb_header"] .et-menu-nav > ul {
    display: flex !important;
    flex-wrap: nowrap !important;
    white-space: nowrap !important;
    gap: 1.5rem !important;
    justify-content: flex-end !important;
}

.et-l--header .et_pb_menu nav > ul > li,
[class*="et_pb_menu"][class*="_tb_header"] nav > ul > li {
    float: none !important;
    flex-shrink: 0 !important;
}

/* Font menu compatto per stare su una riga */
.et-l--header .et_pb_menu ul li a,
[class*="et_pb_menu"][class*="_tb_header"] ul li a {
    font-size: 0.875rem !important;
    padding: 0 0.25rem !important;
    white-space: nowrap !important;
}

/* ============================================
 * 37. FOOTER MINIMAL definitivo
 *      Nascondi tutta la struttura Theme Builder vecchia e
 *      sostituisci con uno pseudoelement editoriale.
 * ============================================ */
.et-l--footer .et_pb_section_0_tb_footer {
    padding: 3rem 0 !important;
    background: var(--color-bg) !important;
    border-top: 1px solid var(--color-border-strong) !important;
    position: relative;
}

/* Nascondi tutti i moduli vecchi del footer */
.et-l--footer .et_pb_image_0_tb_footer,
.et-l--footer .et_pb_text_0_tb_footer,
.et-l--footer .et_pb_text_1_tb_footer,
.et-l--footer .et_pb_text_2_tb_footer,
.et-l--footer .et_pb_text_3_tb_footer,
.et-l--footer .et_pb_text_4_tb_footer,
.et-l--footer .et_pb_menu_0_tb_footer,
.et-l--footer ul.et_pb_social_media_follow_0_tb_footer,
.et-l--footer .et_pb_row_0_tb_footer,
.et-l--footer .et_pb_row_1_tb_footer,
.et-l--footer .et_pb_row_2_tb_footer {
    display: none !important;
}

/* Footer minimal sintetico: testo "© Swing Strategic Intelligence" */
.et-l--footer .et_pb_section_0_tb_footer::after {
    content: "© 2026 Swing srl · Swing Strategic Intelligence · IT04757790276";
    display: block;
    text-align: center;
    font-family: var(--font-mono);
    font-size: 11px;
    color: var(--color-fg-secondary);
    letter-spacing: 0.12em;
    text-transform: uppercase;
}

/* ============================================
 * 38. FOOTER marrone #23170d → nero
 *      Andrea (2026-06-07 v3): footer ancora marrone perché Divi cached ha
 *      `.et-l--footer>.et_builder_inner_content .et_pb_section.et_pb_section_0_tb_footer
 *      { background-color:#23170d!important; background-image:gradient(...) !important }`
 *      specificity (0,0,4,2). Battiamo con html body + match attributi.
 * ============================================ */
html body .et-l--footer,
html body .et-l--footer > .et_builder_inner_content,
html body .et-l--footer > .et_builder_inner_content .et_pb_section,
html body .et-l--footer > .et_builder_inner_content .et_pb_section.et_pb_section_0_tb_footer,
html body[class] .et-l--footer .et_pb_section_0_tb_footer.et_pb_section,
html body[class] .et-l--footer [class*="et_pb_section_0_tb_footer"] {
    background: var(--color-bg) !important;
    background-color: var(--color-bg) !important;
    background-image: none !important;
    background-repeat: no-repeat !important;
}

/* ============================================
 * 39. LOGO senza box bianco
 *      Specificity massima per battere qualunque background
 * ============================================ */
html body .et-l--header .et_pb_menu__logo,
html body .et-l--header .et_pb_menu__logo-wrap,
html body .et-l--header .et_pb_menu__logo-slot,
html body .et-l--header [class*="_tb_header"] .et_pb_menu__logo,
html body .et-l--header [class*="_tb_header"] .et_pb_menu__logo-wrap,
html body .et-l--header [class*="_tb_header"] img,
html body .et-l--header .et_pb_image,
html body .et-l--header .et_pb_image_wrap,
html body .et-l--header .et_pb_image img,
html body .et-l--header [class*="et_pb_image"][class*="_tb_header"],
html body .et-l--header [class*="et_pb_image"][class*="_tb_header"] img {
    background: transparent !important;
    background-color: transparent !important;
    box-shadow: none !important;
    border-radius: 0 !important;
    border: 0 !important;
    padding: 0 !important;
}

/* Specifico per Divi 5: la classe et_pb_bg_layout_light non deve dare bg al logo */
html body .et-l--header .et_pb_bg_layout_light,
html body .et-l--header .et_pb_bg_layout_light .et_pb_menu__logo,
html body .et-l--header .et_pb_bg_layout_light img,
html body .et-l--header [class*="_tb_header"].et_pb_bg_layout_light,
html body .et-l--header [class*="_tb_header"].et_pb_bg_layout_light img {
    background: transparent !important;
    background-color: transparent !important;
}

/* La sezione che contiene il menu/logo del header non deve avere bg bianco */
html body .et-l--header .et_pb_section_0_tb_header,
html body .et-l--header > .et_builder_inner_content > .et_pb_section,
html body .et-l--header [class*="et_pb_section_0_tb_header"] {
    background: var(--color-bg) !important;
    background-color: var(--color-bg) !important;
    background-image: none !important;
}

/* ============================================
 * 42. FOOTER editoriale 4-colonne enterprise
 *      Il post 5003 del Theme Builder contiene wp:html con
 *      <footer class="ed-footer"> e struttura:
 *        .ed-footer__top   = claim sx + .ed-footer__cols (4 col)
 *        .ed-footer__bottom = legale sx + privacy/cookie dx
 *      Larghezza: 90vw allineata alla row Divi dell'header (5002).
 * ============================================ */
/* Il wrapper Divi del footer non deve avere bg gradient marrone */
html body .et-l--footer,
html body .et-l--footer > .et_builder_inner_content,
html body .et-l--footer .et_pb_section,
html body [class*="et_pb_section"][class*="_tb_footer"],
html body .divi-site-footer-section {
    background: var(--color-bg) !important;
    background-color: var(--color-bg) !important;
    background-image: none !important;
    border: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
}

.ed-footer {
    background: var(--color-bg) !important;
    padding: 80px 0 32px !important;
    border-top: 1px solid var(--color-border-strong, #595959) !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 14px !important;
    color: var(--color-fg-secondary, #A3A3A3) !important;
    line-height: 1.6 !important;
}
/* Container 1:1 con header row (vedi SEZ 63: width 95vw, max 1600px) */
.ed-footer .swg-container {
    width: 95vw !important;
    max-width: 1600px !important;
    margin: 0 auto !important;
    padding: 0 !important;
    box-sizing: border-box !important;
}

/* --- TOP: claim sx (4/12) + 4 colonne dx (8/12) --- */
.ed-footer__top {
    display: grid;
    grid-template-columns: 1fr;
    gap: 56px;
    padding-bottom: 56px;
}
@media (min-width: 900px) {
    .ed-footer__top {
        grid-template-columns: minmax(240px, 1fr) minmax(0, 2.5fr);
        gap: 80px;
        align-items: start;
    }
}

/* Claim a sinistra */
.ed-footer__claim {
    display: flex;
    flex-direction: column;
    gap: 20px;
    max-width: 360px;
}
.ed-footer__logo {
    height: auto !important;
    width: auto !important;
    max-height: 52px;
    max-width: 200px;
    object-fit: contain;
    background: transparent !important;
    display: block;
    flex-shrink: 0;
}
.ed-footer__tagline {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 14px !important;
    font-weight: 400 !important;
    color: var(--color-fg-secondary, #A3A3A3) !important;
    line-height: 1.55 !important;
    margin: 0 !important;
    letter-spacing: 0 !important;
    text-transform: none !important;
}

/* 4 colonne navigazione */
.ed-footer__cols {
    display: grid;
    grid-template-columns: 1fr;
    gap: 40px 32px;
}
@media (min-width: 600px) {
    .ed-footer__cols {
        grid-template-columns: repeat(2, 1fr);
    }
}
@media (min-width: 1100px) {
    .ed-footer__cols {
        grid-template-columns: repeat(4, 1fr);
    }
}
.ed-footer__col {
    min-width: 0;
}
.ed-footer__col-title {
    font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
    font-size: 11px !important;
    font-weight: 500 !important;
    text-transform: uppercase !important;
    letter-spacing: 0.14em !important;
    color: var(--color-fg, #FAFAFA) !important;
    margin: 0 0 18px 0 !important;
    padding: 0 0 14px 0 !important;
    border-bottom: 1px solid var(--color-border, #404040) !important;
    line-height: 1.2 !important;
}
.ed-footer__col ul {
    list-style: none !important;
    margin: 0 !important;
    padding: 0 !important;
}
.ed-footer__col li {
    margin: 0 !important;
    padding: 6px 0 !important;
    list-style: none !important;
    line-height: 1.45 !important;
}
.ed-footer__col li::before { content: none !important; }

/* Link generali footer (specificità rafforzata vs accent Divi globale) */
html body .et-l--footer .ed-footer a,
html body .et-l--footer .ed-footer a:visited,
html body .ed-footer a,
html body .ed-footer a:visited,
html body .ed-footer__col a,
html body .ed-footer__col a:visited,
html body .ed-footer__legal-links a,
html body .ed-footer__bottom a {
    color: var(--color-fg-secondary, #A3A3A3) !important;
    text-decoration: none !important;
    background: none !important;
    border: 0 !important;
    transition: color 0.2s ease !important;
}
html body .et-l--footer .ed-footer a:hover,
html body .et-l--footer .ed-footer a:focus-visible,
html body .ed-footer a:hover,
html body .ed-footer a:focus-visible,
html body .ed-footer__col a:hover,
html body .ed-footer__col a:focus-visible {
    color: var(--color-fg, #FAFAFA) !important;
    text-decoration: none !important;
}

/* Social icons */
.ed-footer__social {
    display: flex;
    gap: 14px;
    margin-top: 18px;
    align-items: center;
}
.ed-footer__social-link {
    display: inline-flex !important;
    width: 36px !important;
    height: 36px !important;
    align-items: center !important;
    justify-content: center !important;
    border: 1px solid var(--color-border, #404040) !important;
    border-radius: 50% !important;
    color: var(--color-fg-secondary, #A3A3A3) !important;
    transition: color 0.2s ease, border-color 0.2s ease !important;
}
.ed-footer__social-link:hover,
.ed-footer__social-link:focus-visible {
    color: var(--color-fg, #FAFAFA) !important;
    border-color: var(--color-fg, #FAFAFA) !important;
}
.ed-footer__social-link svg {
    width: 16px;
    height: 16px;
    display: block;
}

/* --- BOTTOM: hairline + legale --- */
.ed-footer__bottom {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
    padding-top: 28px;
    border-top: 1px solid var(--color-border, #404040);
    font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
    font-size: 11px !important;
    text-transform: uppercase !important;
    letter-spacing: 0.12em !important;
    color: var(--color-fg-muted, #737373) !important;
}
.ed-footer__legal {
    color: var(--color-fg-muted, #737373) !important;
}
.ed-footer__legal-links {
    display: inline-flex;
    gap: 24px;
    flex-wrap: wrap;
}
.ed-footer__legal-links a {
    color: var(--color-fg-muted, #737373) !important;
}

/* Compat retro: vecchio markup .ed-footer__grid / __brand / __nav
   (nel caso un template cached lo serva ancora) */
.ed-footer__grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 32px;
    align-items: center;
}
@media (min-width: 768px) {
    .ed-footer__grid {
        grid-template-columns: 1fr auto;
    }
}
.ed-footer__brand {
    display: flex;
    align-items: center;
    gap: 20px;
    flex-wrap: wrap;
}
.ed-footer__brand img {
    height: 48px !important;
    width: auto !important;
    max-width: 200px;
    background: transparent !important;
}
.ed-footer__nav {
    line-height: 2;
}

/* ============================================
 * 43. PULIZIA LEGACY: nascondi PNG decorativi "SWING-fiori-web"
 *      Sono embedded in 34 pagine su 37 dal vecchio Divi 4.
 *      Non li cancelliamo dal DB (reversibili), solo li nascondiamo.
 * ============================================ */
html body img[src*="SWING-fiori-web"],
html body img[src*="swing-fiori-web"],
html body img[src*="ideaswing-fiori"] {
    display: none !important;
}

/* ============================================
 * 44. H1 GIGANTE per i titoli pagina (stile demo hero)
 *      Le 36 pagine non-home hanno H1 in et_pb_post_title o entry-title
 *      con dimensioni Divi default (~36px). Le portiamo a stile hero.
 * ============================================ */
/* H1 hero — stessa scala della home (.ed-hero h1) per coerenza assoluta.
 * ESCLUSA pagina 15668 (Centro studi) che ha H1 in colonna 2/3:
 * lì il clamp 8vw produce testo enorme che rompe le parole a metà.
 * La pagina 15668 riceve la propria regola più sotto in SEZ 51.
 *
 * NOTA CRITICA (2026-06-09): prefisso "html body" obbligatorio.
 * WordPress mette classe ".page" sia sul <body> che su <article>.
 * Senza "html body", il selettore ".page:not(.page-id-15668)" matchava
 * l'<article class="page post-15668"> (che NON ha page-id-15668),
 * applicando erroneamente clamp(8vw) anche sulla pagina 15668.
 * Con "html body.page:not(...)" il selettore si applica SOLO al <body>. */
html body.page:not(.home):not(.page-id-15668) .entry-title,
html body.page:not(.home):not(.page-id-15668) .et_pb_post_title h1,
html body.page:not(.home):not(.page-id-15668) .et_pb_title_container h1,
html body.page:not(.home):not(.page-id-15668) article .entry-content > h1:first-of-type,
html body.page:not(.home):not(.page-id-15668) .et_pb_text h1:first-of-type,
html body.page:not(.home):not(.page-id-15668) .et_pb_section:first-of-type h1,
html body.single article .entry-content > h1:first-of-type,
html body.single .entry-title {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(2.25rem, 5vw, 4.5rem) !important;
    line-height: 0.95 !important;
    font-weight: 500 !important;
    letter-spacing: -0.035em !important;
    color: var(--color-fg, #FAFAFA) !important;
    margin: 0 0 2rem 0 !important;
    max-width: 22ch;
}

/* H2 — stessa scala della home (.ed-section__title) */
html body.page:not(.home) .et_pb_section h2,
html body.page:not(.home) article .entry-content h2,
html body.single article .entry-content h2 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(2.25rem, 5vw, 4.5rem) !important;
    line-height: 1.05 !important;
    font-weight: 500 !important;
    letter-spacing: -0.025em !important;
    color: var(--color-fg, #FAFAFA) !important;
    margin: 0 0 2rem 0 !important;
}

/* H3 — sub-titolo, scala intermedia */
html body.page:not(.home) .et_pb_section h3,
html body.page:not(.home) article .entry-content h3,
html body.single article .entry-content h3 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(1.375rem, 2.5vw, 2rem) !important;
    line-height: 1.15 !important;
    font-weight: 500 !important;
    letter-spacing: -0.015em !important;
    color: var(--color-fg, #FAFAFA) !important;
    margin: 1.5rem 0 0.75rem 0 !important;
}

/* Paragrafi lead — stessa scala della home (.ed-hero__lead) */
html body.page:not(.home) .et_pb_text p,
html body.page:not(.home) article .entry-content p,
html body.single article .entry-content p {
    font-size: clamp(1rem, 1.15vw, 1.1875rem) !important;
    line-height: 1.6 !important;
    color: var(--color-fg-secondary, #A3A3A3) !important;
}

/* ============================================
 * 45. UBER-OVERRIDE bg header dark — battere QUALSIASI critical-inline
 *      Hex hard-coded (no var), 5+ classi di specificity, html body in testa.
 *      Necessario perche' su alcune pagine (es. domande-frequenti) il fix
 *      della sez 21 non vince per cascade.
 * ============================================ */
html body header.et-l.et-l--header,
html body header.et-l.et-l--header > .et_builder_inner_content,
html body header.et-l.et-l--header .et_pb_section.et_pb_section_0_tb_header,
html body header.et-l.et-l--header > .et_builder_inner_content > .et_pb_section,
html body header.et-l.et-l--header > .et_builder_inner_content .et_pb_section_0_tb_header.et_pb_section {
    background: #0A0A0A !important;
    background-color: #0A0A0A !important;
    background-image: none !important;
}

/* ============================================
 * 46. BLOG ROLL (centro studi + qualsiasi listing articoli)
 *      Forziamo grid 3 colonne sulle card. Selettori molto specifici per
 *      battere Divi inline (che imposta display block/inline o JS-driven).
 * ============================================ */
html body .et_pb_blog.et_pb_module .et_pb_ajax_pagination_container > .et_pb_blog_posts,
html body div.et_pb_blog div.et_pb_blog_posts.et_block_module {
    display: grid !important;
    grid-template-columns: 1fr !important;
    gap: 56px 32px !important;
    margin: 0 !important;
    padding: 0 !important;
    float: none !important;
}
@media (min-width: 768px) {
    html body .et_pb_blog.et_pb_module .et_pb_ajax_pagination_container > .et_pb_blog_posts,
    html body div.et_pb_blog div.et_pb_blog_posts.et_block_module {
        grid-template-columns: repeat(2, 1fr) !important;
    }
}
@media (min-width: 1100px) {
    html body .et_pb_blog.et_pb_module .et_pb_ajax_pagination_container > .et_pb_blog_posts,
    html body div.et_pb_blog div.et_pb_blog_posts.et_block_module {
        grid-template-columns: repeat(4, 1fr) !important;
        gap: 48px 24px !important;
    }
}

/* Card singola articolo: layout interno verticale, NO border, NO bg */
html body article.et_pb_post,
html body div.et_pb_blog article.et_pb_post {
    background: transparent !important;
    border: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
    float: none !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 14px !important;
}

/* Featured image: ratio 4:3 grande come vecchio centro studi */
html body article.et_pb_post .entry-featured-image-url {
    display: block !important;
    overflow: hidden !important;
    aspect-ratio: 4 / 3 !important;
    background: var(--color-bg-soft, #141414) !important;
    margin: 0 0 8px 0 !important;
    line-height: 0;
}
html body article.et_pb_post .et_pb_post_main_image {
    width: 100% !important;
    height: 100% !important;
    object-fit: cover !important;
    display: block !important;
    transition: transform .3s ease !important;
}
html body article.et_pb_post .entry-featured-image-url:hover .et_pb_post_main_image {
    transform: scale(1.03) !important;
}

/* Titolo card: come vecchio centro studi — peso medium 500, sottolineato viola */
html body article.et_pb_post h6.entry-title,
html body article.et_pb_post .entry-title {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 1.0625rem !important;
    line-height: 1.3 !important;
    font-weight: 500 !important;
    letter-spacing: -0.01em !important;
    text-transform: none !important;
    margin: 0 !important;
    padding: 0 !important;
}
html body article.et_pb_post h6.entry-title a,
html body article.et_pb_post .entry-title a {
    color: var(--color-fg, #FAFAFA) !important;
    text-decoration: underline !important;
    text-decoration-color: #9478e8 !important;
    text-decoration-thickness: 2px !important;
    text-underline-offset: 4px !important;
    background: none !important;
}
html body article.et_pb_post h6.entry-title a:hover,
html body article.et_pb_post .entry-title a:hover {
    color: #9478e8 !important;
}

/* Post-meta nascosta (era vuota anyway) */
html body article.et_pb_post p.post-meta {
    display: none !important;
}

/* Excerpt grigio chiaro */
html body article.et_pb_post .post-content,
html body article.et_pb_post .post-content-inner {
    background: transparent !important;
    margin: 0 !important;
    padding: 0 !important;
}
html body article.et_pb_post .post-content-inner p {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 0.875rem !important;
    line-height: 1.5 !important;
    color: var(--color-fg-secondary, #A3A3A3) !important;
    font-weight: 400 !important;
    margin: 0 0 4px 0 !important;
}

/* "Leggi tutto" link viola sottolineato come stile vecchio */
html body article.et_pb_post a.more-link {
    display: inline-block !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 0.875rem !important;
    font-weight: 400 !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    color: #9478e8 !important;
    text-decoration: underline !important;
    text-decoration-color: #9478e8 !important;
    text-decoration-thickness: 1px !important;
    text-underline-offset: 3px !important;
    background: none !important;
    margin: 0 !important;
    padding: 0 !important;
}
html body article.et_pb_post a.more-link:hover {
    color: var(--color-fg, #FAFAFA) !important;
    text-decoration-color: var(--color-fg, #FAFAFA) !important;
}

/* Pulisci wrapper Divi del blog (rimuove bg light residuo) */
html body .et_pb_blog,
html body .et_pb_blog.et_pb_bg_layout_light {
    background: transparent !important;
    padding: 0 !important;
}
html body .et_pb_ajax_pagination_container {
    padding: 0 !important;
}

/* ============================================
 * 47. SINGOLO ARTICOLO (.single) — layout editoriale
 *      H1 gia' definito in sez 44. Qui: featured image full-width,
 *      body in colonna 720px leggibile, meta mono uppercase.
 * ============================================ */
html body.single .entry-title,
html body.single h1.entry-title {
    max-width: 22ch !important;
    margin: 0 0 1.5rem 0 !important;
}

/* Container articolo: stessa larghezza della home (95vw/1600px).
 * Andrea 2026-06-10: il layout degli articoli deve rispecchiare la home, non
 * una colonna centrale stretta. I singoli ed-hero/ed-asym/ed-stage interni
 * gestiscono la propria width per leggibilità (ed-prose max 720px, ecc.).
 *
 * NB: per i POST (single-post) il contenuto NON è in .entry-content ma in
 * .et_pb_post_content del Theme Builder body template. Divi 5 usa due CSS vars
 * sul .et_pb_row (--content-width: 80%, --content-max-width: 1080px) che
 * limitano la row a 1080px centrata. Override le vars dentro et-l--body. */
html body.single-post .et-l--body,
html body.single-post .et-l--post .et-l--body {
    --content-width: 95vw !important;
    --content-max-width: 1600px !important;
}
html body.single-post .et-l--body .et_pb_section > .et_pb_row,
html body.single-post .et-l--body [class*="et_pb_section"] > .et_pb_row,
html body.single-post .et-l--body .et_pb_row.et_pb_row {
    width: 95vw !important;
    max-width: 1600px !important;
    margin-left: auto !important;
    margin-right: auto !important;
}
html body.single-post .et-l--body .et_pb_post_content,
html body.single-post .et-l--body .et_pb_post_content_1_tb_body,
html body.single-post .et-l--body [class*="et_pb_post_content"] {
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
    padding: 0 !important;
}
/* Anche .ed-hero__inner del post non deve restare 1100px ma occupare tutto.
 * margin-left:0 forza l'aderenza al bordo sx della row (come la home). */
html body.single-post .et-l--body .ed-hero__inner,
html body.single-post .et-l--body .ed-section__inner {
    max-width: none !important;
    margin-left: 0 !important;
    margin-right: auto !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
}
/* Anche .ed-hero, .ed-section, .ed-asym, .ed-stage non devono auto-centrarsi */
html body.single-post .et-l--body .ed-hero,
html body.single-post .et-l--body .ed-section,
html body.single-post .et-l--body .ed-asym,
html body.single-post .et-l--body .ed-stage {
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    text-align: left !important;
}
/* H1 del post hero: stesso pattern home (sx, font hero) */
html body.single-post .et-l--body .ed-hero h1,
html body.single-post .et-l--body .ed-hero__meta,
html body.single-post .et-l--body .ed-hero__lead {
    margin-left: 0 !important;
    text-align: left !important;
}
/* Paragrafi a livello root del post content (NON dentro ed-asym/ed-stage):
 * limita a 720px max per leggibilità tipografica. Allineati a sinistra. */
html body.single-post .et_pb_post_content > p,
html body.single-post .et_pb_post_content > ul,
html body.single-post .et_pb_post_content > ol,
html body.single-post .et_pb_post_content > blockquote {
    max-width: 720px !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
}

/* Featured image inline: full-width hero, esce dalla colonna */
html body.single .entry-content > p > img,
html body.single .entry-content > figure,
html body.single .entry-content > p:has(> img.wp-image-) {
    display: block !important;
    width: 100% !important;
    max-width: none !important;
    height: auto !important;
    margin: 2.5rem -120px !important;
}
@media (max-width: 1000px) {
    html body.single .entry-content > p > img {
        margin: 2rem 0 !important;
    }
}
html body.single .entry-content > p > img {
    aspect-ratio: 16 / 9 !important;
    object-fit: cover !important;
    background: var(--color-bg-soft, #141414) !important;
}

/* Meta articolo (data autore) */
html body.single .et_post_meta_wrapper,
html body.single .post-meta {
    font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
    font-size: 11px !important;
    text-transform: uppercase !important;
    letter-spacing: 0.1em !important;
    color: var(--color-fg-muted, #737373) !important;
    margin: 0 auto 2rem auto !important;
    max-width: 760px !important;
    padding: 0 24px !important;
}
html body.single .et_post_meta_wrapper a,
html body.single .post-meta a {
    color: var(--color-fg-secondary, #A3A3A3) !important;
}

/* Titolo articolo: anche lui centrato e largo come hero */
html body.single .entry-title,
html body.single h1.entry-title {
    max-width: 1100px !important;
    margin: 0 auto 1.5rem auto !important;
    padding: 0 24px !important;
}

/* H2/H3 dentro articolo: in linea col body */
html body.single article .entry-content h2,
html body.single article .entry-content h3 {
    max-width: 760px !important;
    margin-left: auto !important;
    margin-right: auto !important;
}

/* ============================================
 * 48. UBER-OVERRIDE titolo articolo singolo
 *      Divi preset module-divi-post-title impone font-size:20px,
 *      e .single .et_post_meta_wrapper h1 mette 10px. Battiamo con
 *      specificity altissima.
 * ============================================ */
html body.single-post.et_pb_pagebuilder_layout h1.entry-title,
html body.single-post.et_pb_pagebuilder_layout .et_pb_title_container h1.entry-title,
html body.single-post.et_pb_pagebuilder_layout .et_post_meta_wrapper h1,
html body.single-post.et_pb_pagebuilder_layout .et_post_meta_wrapper h1.entry-title,
html body.single-post .et_pb_post_title_1_tb_body .et_pb_title_container h1.entry-title,
html body.single-post [class*="et_pb_post_title"][class*="_tb_body"] .et_pb_title_container h1 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(2.25rem, 5vw, 4.5rem) !important;
    font-weight: 500 !important;
    line-height: 0.95 !important;
    letter-spacing: -0.035em !important;
    color: var(--color-fg, #FAFAFA) !important;
    text-transform: none !important;
}

/* Link inline nel body articolo */
html body.single article .entry-content a {
    color: var(--color-fg, #FAFAFA) !important;
    text-decoration: underline !important;
    text-decoration-color: var(--color-border-strong, #595959) !important;
    text-underline-offset: 3px !important;
}
html body.single article .entry-content a:hover {
    text-decoration-color: var(--color-fg, #FAFAFA) !important;
}

/* ============================================
 * 40. LOGO header: dimensioni come demo (grande, non croppato)
 *      Il blocco Divi mette maxWidth 6% sul container, troppo stretto.
 *      Forziamo larghezza adeguata per mostrare scritta SWING + fiore.
 * ============================================ */
html body .et-l--header .et_pb_menu__logo-wrap,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] .et_pb_menu__logo-wrap {
    max-width: 240px !important;
    width: auto !important;
    flex: 0 0 auto !important;
}
html body .et-l--header .et_pb_menu__logo,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] .et_pb_menu__logo {
    max-width: 240px !important;
    width: auto !important;
    overflow: visible !important;
}
html body .et-l--header .et_pb_menu__logo img,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] .et_pb_menu__logo img {
    max-width: 240px !important;
    max-height: 60px !important;
    width: auto !important;
    height: auto !important;
    object-fit: contain !important;
}

/* ============================================
 * 41. MENU header: voci grandi e spaziate come demo
 *      Font Inter, dimensione 0.95rem, colore bianco accent.
 *      Menu allineato a DESTRA (logo a sinistra come demo).
 * ============================================ */
html body .et-l--header .et_pb_menu ul.nav li a,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] ul.nav li a {
    color: var(--color-fg) !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-weight: 500 !important;
    font-size: 0.9375rem !important;
    text-transform: none !important;
    letter-spacing: 0.01em !important;
    text-decoration: none !important;
    padding: 0 !important;
}
html body .et-l--header .et_pb_menu ul.nav li a:hover,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] ul.nav li a:hover {
    color: var(--color-fg-secondary, #A3A3A3) !important;
    opacity: 1 !important;
}
/* Menu wrap a destra (logo gia' a sinistra), gruppo voci compatto come demo */
html body .et-l--header .et_pb_menu__wrap,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] .et_pb_menu__wrap {
    justify-content: flex-end !important;
    flex: 1 1 auto !important;
}
html body .et-l--header .et_pb_menu__menu,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] .et_pb_menu__menu {
    flex: 0 0 auto !important;
}
html body .et-l--header .et_pb_menu__menu > nav > ul,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] .et_pb_menu__menu > nav > ul {
    justify-content: flex-end !important;
    gap: 2.25rem !important;
    flex-wrap: nowrap !important;
}
html body .et-l--header .et_pb_menu .et-menu,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] .et-menu {
    margin: 0 !important;
}
html body .et-l--header .et_pb_menu .et-menu > li,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] .et-menu > li {
    padding: 0 !important;
    margin: 0 !important;
}
/* Logo non deve avere border o bg residui */
html body .et-l--header .et_pb_with_border.et_pb_menu .et_pb_menu__logo img,
html body .et-l--header .et_pb_menu .et_pb_menu__logo img {
    border: 0 !important;
    background: transparent !important;
    background-color: transparent !important;
}

/* ============================================
 * 49. NUKE FINALE — reset Divi preset + uniformazione globale
 *      Battery TUTTE le regole vecchie Divi preset, theme builder body,
 *      e applica peso 500 (fw-medium) ovunque come la home demo.
 * ============================================ */

/* Reset preset Divi 4/5 che imponevano font-size 20px / 30px su h1-h6 */
html body [class*="preset--module--divi-"] h1,
html body [class*="preset--module--divi-"] h2,
html body [class*="preset--module--divi-"] h3,
html body [class*="preset--module--divi-"] h4,
html body [class*="preset--module--divi-"] h5,
html body [class*="preset--module--divi-"] h6,
html body [class*="preset--module--divi-"] .et_pb_text_inner h1,
html body [class*="preset--module--divi-"] .et_pb_text_inner h2,
html body [class*="preset--module--divi-"] .et_pb_text_inner h3,
html body [class*="preset--module--divi-"] .et_pb_text_inner h4,
html body [class*="preset--module--divi-"] .et_pb_text_inner h5,
html body [class*="preset--module--divi-"] .et_pb_text_inner h6 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-weight: 500 !important;
    color: var(--color-fg, #FAFAFA) !important;
    text-transform: none !important;
}

/* Peso globale 500 su tutti gli h1-h6 ovunque (eccetto homepage che ha demo) */
html body:not(.home) h1,
html body:not(.home) h2,
html body:not(.home) h3,
html body:not(.home) h4,
html body:not(.home) h5,
html body:not(.home) h6,
html body:not(.home) .entry-title,
html body:not(.home) .et_pb_text_inner h1,
html body:not(.home) .et_pb_text_inner h2,
html body:not(.home) .et_pb_text_inner h3,
html body:not(.home) .et_pb_text_inner h4 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-weight: 500 !important;
    color: var(--color-fg, #FAFAFA) !important;
    text-transform: none !important;
    font-style: normal !important;
}

/* Reset Divi inline che mette font-weight 400 nelle media query mobile */
@media only screen and (max-width: 980px) {
    html body h1, html body h2, html body h3, html body h4, html body h5, html body h6 {
        font-weight: 500 !important;
    }
}

/* Reset font-size piccoli Divi inline (h1 20px, h2 8px etc) */
html body.single-post .et_post_meta_wrapper h1,
html body.single .et_post_meta_wrapper h1 {
    font-size: clamp(2.25rem, 5vw, 4.5rem) !important;
    line-height: 0.95 !important;
}

/* Reset preset divi-post-title con Oswald font 20px */
html body [class*="preset--module--divi-post-title"] .et_pb_title_container h1,
html body [class*="preset--module--divi-post-title"] .et_pb_title_container h2,
html body [class*="preset--module--divi-post-title"] .et_pb_title_container h3 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(2.25rem, 5vw, 4.5rem) !important;
    font-weight: 500 !important;
    color: var(--color-fg, #FAFAFA) !important;
}

/* Reset preset divi-post-content che setta font-weight 700 e size piccolo */
html body [class*="preset--module--divi-post-content"] h1,
html body [class*="preset--module--divi-post-content"] h2 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(2.25rem, 5vw, 4.5rem) !important;
    font-weight: 500 !important;
    color: var(--color-fg, #FAFAFA) !important;
}
/* H3 dentro il preset Post Content: ERA clamp(1.375rem,2.5vw,2rem) che su
 * mobile cadeva a ~22px (causa "H3 piccoli su mobile", Andrea 17/6).
 * Allineato al sistema unico: 36px FISSI, sia mobile che desktop. */
html body [class*="preset--module--divi-post-content"] h3 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 1.875rem !important;  /* 30px — sotto l'H2 (40), sopra il corpo (17) */
    font-weight: 600 !important;
    line-height: 1.25 !important;
    color: var(--color-fg, #FAFAFA) !important;
}
html body [class*="preset--module--divi-post-content"] h4,
html body [class*="preset--module--divi-post-content"] h5,
html body [class*="preset--module--divi-post-content"] h6 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(1.25rem, 2vw, 1.5rem) !important;
    font-weight: 500 !important;
    color: var(--color-fg, #FAFAFA) !important;
}

/* Bg dark forced ovunque escluso form input */
html body,
html body #page-container,
html body #main-content,
html body .et_pb_section:not([class*="_tb_header"]):not([class*="_tb_footer"]) {
    background-color: var(--color-bg, #0A0A0A) !important;
}

/* Form input: bg dark + bordo, NO white */
html body input:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="button"]),
html body textarea,
html body select {
    background-color: var(--color-bg-soft, #141414) !important;
    color: var(--color-fg, #FAFAFA) !important;
    border: 1px solid var(--color-border, #404040) !important;
}

/* ============================================
 * 50. RESPONSIVE — comportamenti specifici a viewport
 *      I clamp() gestiscono gia' fluido; qui solo edge case.
 * ============================================ */
@media (max-width: 1024px) {
    /* Header: menu hamburger su tablet/mobile */
    html body .et-l--header .et_pb_menu__menu {
        /* Lascia Divi gestire mobile menu */
    }
    /* Padding container ridotti */
    html body .et_pb_row {
        width: 92% !important;
        padding: 0 !important;
    }
}

@media (max-width: 768px) {
    /* Margin negativi su immagini articolo: solo desktop */
    html body.single .entry-content > p > img {
        margin: 1.5rem 0 !important;
    }
    /* Hero H1: scala ridotta su mobile gestita da clamp() */
}

/* ============================================
 * 51. CENTRO STUDI page layout fix (pagina ID 15668, ancora in Divi 5 JSON)
 *      H1 in font gigante (clamp 8vw) che rompe le parole a metà.
 *      Fix: font-size ridimensionato + word-break normale + max-width rimosso.
 * ============================================ */
html body.page-id-15668 .et_pb_text_inner h1,
html body.page-id-15668 .et_pb_section h1,
html body.page-id-15668 .et_pb_section h2 {
    max-width: none !important;
    word-break: normal !important;
    overflow-wrap: break-word !important;
    hyphens: none !important;
}
/* AGGIORNATA 20/06/2026: la pagina 15668 è stata RICOSTRUITA in moduli Divi
 * nativi (Testo) con struttura .ed-hero/.ed-section standard. L'H1 deve avere la
 * dimensione hero standard (72px desktop), non più il fix ridotto del vecchio
 * layout Divi-JSON (che dava ~50px e faceva andare a capo su 2 righe). */
html body.page-id-15668 .et_pb_text_inner h1,
html body.page-id-15668 .et_pb_section h1 {
    font-size: clamp(2.5rem, 5vw, 4.5rem) !important;
    line-height: 1.05 !important;
    letter-spacing: -0.03em !important;
    font-weight: 500 !important;
}

/* Sezione blog del centro studi: row full width per dare spazio alle 4 col */
html body.page-id-15668 .et_pb_section_3.et_pb_section .et_pb_row,
html body.page-id-15668 .et_pb_blog .et_pb_row {
    width: 92% !important;
    max-width: 1600px !important;
}

/* ============================================
 * 52. FIX COLORE TITOLI — H1 deve essere bianco solido, non grigio
 *      Battiamo gcid-heading-color e opacity residue dai preset Divi.
 * ============================================ */
html body h1,
html body h2,
html body h3,
html body h4,
html body h5,
html body h6,
html body .entry-title,
html body [class*="et_pb_post_title"] h1,
html body [class*="et_pb_post_title"] .entry-title,
html body [class*="preset--module--divi-post-title"] h1,
html body.single h1.entry-title,
html body.single-post h1.entry-title,
html body.single-post .et_post_meta_wrapper h1 {
    color: #FAFAFA !important;
    opacity: 1 !important;
}

/* Specifico per et_pb_text_inner che setta gcid-color */
html body .et_pb_text_inner h1,
html body .et_pb_text_inner h2,
html body .et_pb_text_inner h3,
html body .et_pb_text_inner h4 {
    color: #FAFAFA !important;
    opacity: 1 !important;
}

/* ============================================
 * 53. FIX FINALE colore titolo articolo (preset Divi nero su nero)
 *      Specificity 0,0,4,3 per battere il preset 0,0,4,1.
 * ============================================ */
html body [class*="preset--module--divi-post-title"] .et_pb_title_container h1.entry-title,
html body [class*="preset--module--divi-post-title"] .et_pb_title_container h2.entry-title,
html body [class*="preset--module--divi-post-title"] .et_pb_title_container h3.entry-title,
html body .et_pb_post_title_1_tb_body .et_pb_title_container h1.entry-title,
html body [class*="et_pb_post_title"] .et_pb_title_container h1.entry-title {
    color: #FAFAFA !important;
    opacity: 1 !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-weight: 500 !important;
}
/* Stesso per il meta sotto il titolo */
html body [class*="preset--module--divi-post-title"] .et_pb_title_container .et_pb_title_meta_container,
html body [class*="preset--module--divi-post-title"] .et_pb_title_container .et_pb_title_meta_container a,
html body [class*="et_pb_post_title"] .et_pb_title_meta_container,
html body [class*="et_pb_post_title"] .et_pb_title_meta_container a {
    color: var(--color-fg-muted, #737373) !important;
}

/* ============================================
 * 54. ULTRA NUKE — titolo articolo bianco solido + sez body dark
 *      Includendo attribute selector per spec massima.
 * ============================================ */
html[lang] body.single-post .et_pb_post_title_1_tb_body .et_pb_title_container h1.entry-title,
html[lang] body.single-post .et_pb_post_title_1_tb_body .et_pb_title_container h2.entry-title,
html[lang] body.single-post [class*="et_pb_post_title"][class*="_tb_body"] .et_pb_title_container h1,
html[lang] body.single-post [class*="et_pb_post_title"][class*="_tb_body"] .et_pb_title_container h1.entry-title {
    color: #FAFAFA !important;
    opacity: 1 !important;
    filter: none !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-weight: 500 !important;
}

/* Sez body 2_tb_body deve essere dark anche lei */
html body .et-l--body > .et_builder_inner_content .et_pb_section.et_pb_section_2_tb_body,
html body [class*="et_pb_section"][class*="_tb_body"] {
    background-color: #0A0A0A !important;
    background-image: none !important;
}

/* Nascondi immagine fiori-web dell'et_pb_image_0 (è la decorazione fiori legacy) */
html body .et_pb_image_0,
html body .et_pb_image_0 img,
html body div[class*="et_pb_image_0"] {
    display: none !important;
}

/* ============================================
 * 55. FORM CONTATTO articolo: dark + Inter + claim Swing
 *      Il form è in tutti gli articoli via Theme Builder Body.
 *      Lo manteniamo (claim Swing) ma stilato dark editoriale.
 * ============================================ */
html body .et_pb_contact_form_container,
html body .et_pb_contact,
html body [class*="et_pb_contact_form"][class*="_tb_body"] {
    background: transparent !important;
}
/* Titolo form (claim Swing) */
html body .et_pb_contact_main_title,
html body h1.et_pb_contact_main_title,
html body h2.et_pb_contact_main_title {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(1.5rem, 2.5vw, 2.25rem) !important;
    font-weight: 500 !important;
    color: var(--color-fg, #FAFAFA) !important;
    letter-spacing: -0.015em !important;
    margin: 0 0 1rem 0 !important;
    padding: 0 !important;
}
/* Input dark */
html body .et_pb_contact .et_pb_contact_field input[type="text"],
html body .et_pb_contact .et_pb_contact_field input[type="email"],
html body .et_pb_contact .et_pb_contact_field textarea,
html body .et_pb_contact_select,
html body .et_pb_contact_field .input {
    background-color: #141414 !important;
    color: #FAFAFA !important;
    border: 1px solid var(--color-border, #404040) !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 0.9375rem !important;
    padding: 14px 16px !important;
    border-radius: 0 !important;
}
html body .et_pb_contact .et_pb_contact_field input::placeholder,
html body .et_pb_contact .et_pb_contact_field textarea::placeholder {
    color: var(--color-fg-muted, #737373) !important;
    opacity: 1 !important;
}
html body .et_pb_contact .et_pb_contact_field input:focus,
html body .et_pb_contact .et_pb_contact_field textarea:focus {
    outline: none !important;
    border-color: var(--color-fg, #FAFAFA) !important;
}
/* Checkbox label */
html body .et_pb_contact .et_pb_contact_field input[type="checkbox"] + label,
html body .et_pb_contact_field_options_list label,
html body .et_pb_contact_field_options_list label a {
    color: var(--color-fg-secondary, #A3A3A3) !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 0.875rem !important;
}
html body .et_pb_contact .et_pb_contact_field input[type="checkbox"] + label i {
    background-color: #141414 !important;
    border: 1px solid var(--color-border, #404040) !important;
}
/* Captcha */
html body .et_pb_contact_right .et_pb_contact_captcha_question {
    color: var(--color-fg-secondary, #A3A3A3) !important;
}
html body .et_pb_contact_right input.et_pb_contact_captcha {
    background-color: #141414 !important;
    color: #FAFAFA !important;
    border: 1px solid var(--color-border, #404040) !important;
}
/* Submit button */
html body button.et_pb_contact_submit,
html body .et_pb_button.et_pb_contact_submit {
    background-color: #9478e8 !important;
    color: #FAFAFA !important;
    border: 0 !important;
    border-radius: 0 !important;
    padding: 14px 28px !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 0.9375rem !important;
    font-weight: 500 !important;
    letter-spacing: 0.01em !important;
    cursor: pointer !important;
    transition: background-color .2s ease !important;
}
html body button.et_pb_contact_submit:hover,
html body .et_pb_button.et_pb_contact_submit:hover {
    background-color: #FAFAFA !important;
    color: #0A0A0A !important;
}

/* ============================================
 * 56. NORMALIZZA gerarchia H SEO: H4/H5/H6 in body content gestiti
 *      come H3 visualmente (la struttura HTML viene modificata via SQL).
 * ============================================ */
html body article .entry-content h4,
html body article .entry-content h5,
html body article .entry-content h6,
html body.single .entry-content h4,
html body.single .entry-content h5,
html body.single .entry-content h6 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(1.375rem, 2.5vw, 2rem) !important;
    font-weight: 500 !important;
    line-height: 1.15 !important;
    letter-spacing: -0.015em !important;
    color: var(--color-fg, #FAFAFA) !important;
    margin: 1.5rem 0 0.75rem 0 !important;
}

/* ============================================
 * 57. PULSANTI Divi articoli — visibili viola con testo bianco
 *      Il button "Contatto diretto" e simili devono essere coerenti
 *      col submit del form. Niente button vuoti/invisibili.
 * ============================================ */
html body a.et_pb_button,
html body .et_pb_button:not(.et_pb_contact_submit),
html body [class*="et_pb_button"]:not(.et_pb_contact_submit) {
    background-color: #9478e8 !important;
    color: #FAFAFA !important;
    border: 0 !important;
    border-radius: 0 !important;
    padding: 14px 28px !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 0.9375rem !important;
    font-weight: 500 !important;
    letter-spacing: 0.01em !important;
    text-decoration: none !important;
    display: inline-block !important;
    transition: background-color .2s ease !important;
}
html body a.et_pb_button:hover,
html body .et_pb_button:not(.et_pb_contact_submit):hover {
    background-color: #FAFAFA !important;
    color: #0A0A0A !important;
}
/* Reset arrow icon Divi */
html body a.et_pb_button::after,
html body .et_pb_button::after {
    content: none !important;
    display: none !important;
}

/* ============================================
 * 58. PAGINA 404 — dark editoriale come tutto il sito
 * ============================================ */
html body.error404 {
    background-color: var(--color-bg, #0A0A0A) !important;
}
html body.error404 #main-content,
html body.error404 #content,
html body.error404 .et_pb_section,
html body.error404 .et_pb_404 {
    background-color: var(--color-bg, #0A0A0A) !important;
    color: var(--color-fg, #FAFAFA) !important;
    padding: 4rem 0 !important;
}
html body.error404 h1,
html body.error404 .et_pb_404 h1 {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(4rem, 12vw, 10rem) !important;
    font-weight: 500 !important;
    color: var(--color-fg, #FAFAFA) !important;
    text-align: center !important;
    margin: 0 0 2rem 0 !important;
}
html body.error404 p {
    text-align: center !important;
    color: var(--color-fg-secondary, #A3A3A3) !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 1.0625rem !important;
}
html body.error404 a {
    color: #9478e8 !important;
}
/* Nascondi alt text "ideaSwing Fiori Web" e img rotte 404 */
html body.error404 img[alt*="ideaSwing"],
html body.error404 img[alt*="Fiori"],
html body.error404 .et_pb_image_0 {
    display: none !important;
}

/* ============================================
 * 59. GLOBAL — bg dark di sicurezza ovunque
 *      Catch-all per qualsiasi section residua con bg bianco/light.
 * ============================================ */
html body .et_pb_section[style*="background"]:not([style*="0A0A0A"]):not([class*="_tb_footer"]) {
    /* lascia gli inline style esistenti, ma se sono bianchi force dark */
}
html body .et_pb_section:not([style]):not([class*="_tb_footer"]):not([class*="_tb_header"]) {
    background-color: var(--color-bg, #0A0A0A) !important;
}

/* Forza qualsiasi modulo con bg layout light a dark */
html body .et_pb_bg_layout_light,
html body [class*="bg_layout_light"] {
    background-color: transparent !important;
    color: var(--color-fg, #FAFAFA) !important;
}

/* Form di newsletter (se presenti) anche dark */
html body .et_pb_newsletter,
html body .et_pb_newsletter_form,
html body .et_pb_newsletter input,
html body .et_pb_newsletter_form input {
    background-color: var(--color-bg-soft, #141414) !important;
    color: var(--color-fg, #FAFAFA) !important;
    border: 1px solid var(--color-border, #404040) !important;
}

/* Comments area (se attiva) */
html body #comments,
html body .comment-content,
html body #respond,
html body #commentform {
    background: transparent !important;
    color: var(--color-fg-secondary, #A3A3A3) !important;
}
html body #commentform input,
html body #commentform textarea {
    background-color: var(--color-bg-soft, #141414) !important;
    color: var(--color-fg, #FAFAFA) !important;
    border: 1px solid var(--color-border, #404040) !important;
}

/* ============================================================
   SEZ 43 — COLORE TESTO GLOBALE: bianco su sfondo dark
   Fonte: richiesta esplicita Andrea 2026-06-09
   ============================================================ */
html body,
html body p,
html body h1, html body h2, html body h3,
html body h4, html body h5, html body h6,
html body li, html body span:not(.ed-eyebrow):not(.ed-stage__num):not(.ed-pillar__num):not(.sec-num),
html body .et_pb_text, html body .et_pb_text p,
html body .et_pb_text li, html body .et_pb_text span,
html body .et_pb_blurb_description,
html body .et_pb_blurb_title,
html body .et_pb_module_header,
html body .et_pb_post_title h1,
html body .entry-title,
html body .post-title,
html body .et_pb_post_meta,
html body .et_pb_meta_author a,
html body .et_pb_post_meta a,
html body .et-pb-post-excerpt-word-wrap,
html body .et_pb_excerpt_content p,
html body .et_pb_text_inner,
html body .et_pb_text_inner p,
html body .widget-title,
html body .widgettitle,
html body .et_pb_widget,
html body .et_pb_widget p,
html body td, html body th,
html body label,
html body .et_pb_contact_field_label {
    color: #ffffff !important;
}

/* Link: bianco pieno come richiesto da Andrea */
html body a:not(.ed-footer__social-link):not(.ed-footer__logo) {
    color: #ffffff !important;
}

/* ============================================================
   SEZ 44 — HOVER LINK: accent viola Swing #9478e8
   Fonte: richiesta esplicita Andrea 2026-06-09
   ============================================================ */
html body a:hover,
html body a:focus,
html body .et_pb_menu .et_pb_menu__menu ul li a:hover,
html body .et_pb_menu .et_pb_menu__menu > ul > li > a:hover,
html body .nav-item a:hover,
html body nav a:hover {
    color: #9478e8 !important;
    text-decoration: none;
}

/* Selezione testo con il cursore */
::selection {
    background-color: #9478e8;
    color: #ffffff;
}
::-moz-selection {
    background-color: #9478e8;
    color: #ffffff;
}

/* ============================================================
   SEZ 45 — ARTICOLI SINGOLI: layout editoriale tipografico
   Fonte: richiesta esplicita Andrea 2026-06-09
   ============================================================ */

/* Hero articolo: titolo grande come le pagine editoriali */
html body.single .et_pb_post_title {
    padding: 6rem 0 3rem !important;
}
html body.single .et_pb_post_title .entry-title {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: clamp(2rem, 4vw, 3.5rem) !important;
    font-weight: 700 !important;
    line-height: 1.1 !important;
    letter-spacing: -0.02em !important;
    color: #ffffff !important;
    max-width: 820px;
}
html body.single .et_pb_post_title .et_pb_post_meta_wrapper {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 13px !important;
    color: #a3a3a3 !important;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

/* RIMOSSO 2026-06-10: la regola "colonna di lettura centrata" (max-width 780px
 * su section/row/column di body.single) strizzava ANCHE header e footer degli
 * articoli (sono et_pb_section pure loro) → menu tagliato, layout diverso
 * dalla home. Oggi gli articoli usano il layout editoriale ed-* a piena
 * larghezza (95vw/1600px, vedi regole single-post più sotto), la leggibilità
 * è gestita dai max-width interni di ed-prose/ed-stage. */
/* GUARDIA 2026-06-11: queste regole legacy valgono SOLO per contenuto
 * Divi 4 dentro moduli testo. Il contenuto editoriale (classi ed-* o
 * dentro .ed-template-wrapper) NON va toccato: se un articolo finisce
 * per errore dentro un modulo et_pb_text (caso articolo marketplace
 * salvato col builder), gli H2 .ed-h2 devono restare grandi come gli H1. */
html body.single .et_pb_text p:not([class*="ed-"]):not(.ed-template-wrapper p),
html body.single .et_pb_text li:not([class*="ed-"]):not(.ed-template-wrapper li) {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 17px !important;
    line-height: 1.8 !important;
    font-weight: 400 !important;
    color: #ffffff !important;
}
/* SEZ 45 (parte H2/H3) — RIMOSSA 2026-06-17 (consolidamento Divi legacy).
   Dimensionava H2/H3 dentro moduli et_pb_text non-editoriali. Crawl 17/6:
   0 H2/H3 in et_pb_text site-wide (tutti i titoli sono ed-h2 o heading nativi).
   Regola morta. La gerarchia titoli vive nel sistema tipografico unico. */

/* Nascondi immagini decorative Swing che erano nel vecchio layout Divi */
html body.single .et_pb_image .et_pb_image_container img[src*="Swing-Business-Growth"],
html body.single .et_pb_image .et_pb_image_container img[src*="swing-business-development"],
html body.single .et_pb_image .et_pb_image_container img[src*="Swing-trasparente"] {
    display: none !important;
}
html body.single .et_pb_image:has(img[src*="Swing-Business-Growth"]),
html body.single .et_pb_image:has(img[src*="swing-business-development"]),
html body.single .et_pb_image:has(img[src*="Swing-trasparente"]) {
    display: none !important;
}

/* ============================================================
   SEZ 46 — LINK ANCHOR: sottolineatura viola nei contenuti
   Migrato da: area Custom CSS WordPress (post 5814)
   Fonte: richiesta esplicita Andrea + CSS precedente Divi 4
   Copre: pagine editoriali + articoli (nuova struttura wp:html)
   ============================================================ */

/* Pagine e articoli: selettori Divi classici */
.page .et_pb_text a:not(#et-footer-nav a):not(.et_pb_footer a),
.page .et_pb_post_content a,
.page article .entry-content a,
.single .et_pb_text a,
.single .et_pb_post_content a,
.single article .entry-content a,
/* Nuova struttura wp:html editoriale */
.ed-template-wrapper a:not(.ed-footer a),
.ed-article-container a,
.ed-prose a,
.ed-stage__body a {
    text-decoration: underline;
    text-decoration-thickness: 2px;
    text-underline-offset: 4px;
    text-decoration-color: #9478e8 !important;
    color: #ffffff !important;
}

/* Esclusione footer e navigazione */
#footer-bottom a,
#et-footer-nav a,
.et_pb_footer a,
footer a,
.ed-footer a,
nav a,
.et_pb_menu a,
.et-menu a {
    text-decoration: none !important;
    text-decoration-color: unset !important;
}

/* ============================================================
   SEZ 47 — MENU FRECCIA DROPDOWN: indicatore visibile via Unicode
   Fonte: richiesta esplicita Andrea 2026-06-09
   Approccio: carattere Unicode ▾ (U+25BE) via position:absolute
   Divi usa ETmodules "3" via ::after — sostituiamo con Unicode affidabile.
   ============================================================ */

/* Freccia dropdown: flex child inline — l'<a> è display:flex su Divi,
   quindi ::after si allinea automaticamente con align-items:center.
   Nessun position:absolute, niente conflitti di top/transform. */
html body .et_pb_menu .et-menu > li.menu-item-has-children > a::after {
    content: "▾" !important;
    font-family: 'Inter', Arial, sans-serif !important;
    font-size: 11px !important;
    line-height: 1 !important;
    display: block !important;
    position: static !important;
    align-self: center !important;
    color: rgba(255, 255, 255, 0.65) !important;
    margin-left: 5px !important;
    margin-top: 1px !important;
    width: auto !important;
    height: auto !important;
    border: none !important;
    top: auto !important;
    right: auto !important;
    transform: none !important;
    transition: color 0.2s ease, transform 0.2s ease !important;
}
html body .et_pb_menu .et-menu > li.menu-item-has-children:hover > a::after {
    color: #9478e8 !important;
    transform: rotate(180deg) !important;
}

/* ============================================================
   SEZ 48 — MEGA MENU: dropdown editoriale dark panel
   Design: pannello full-width scuro, grid per voci numerose
   CSS-only, zero JS, zero impatto performance
   Fonte: richiesta esplicita Andrea 2026-06-09
   ============================================================ */

/* Pannello dropdown base */
html body .et_pb_menu .et-menu li.menu-item-has-children .sub-menu {
    background: #111111 !important;
    border: none !important;
    border-top: 2px solid #9478e8 !important;
    box-shadow: 0 16px 48px rgba(0,0,0,0.85) !important;
    padding: 1.25rem 0 !important;
    min-width: 220px;
    border-radius: 0 !important;
}

/* Voci dropdown */
html body .et_pb_menu .et-menu li.menu-item-has-children .sub-menu li {
    display: block !important;
    border-bottom: none !important;
}
html body .et_pb_menu .et-menu li.menu-item-has-children .sub-menu li a {
    display: block !important;
    padding: 0.45rem 1.5rem !important;
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 14px !important;
    font-weight: 400 !important;
    color: #a3a3a3 !important;
    letter-spacing: 0.01em !important;
    line-height: 1.5 !important;
    text-decoration: none !important;
    transition: color 0.12s, padding-left 0.15s;
    border-left: 2px solid transparent;
}
html body .et_pb_menu .et-menu li.menu-item-has-children .sub-menu li a:hover {
    color: #ffffff !important;
    padding-left: 1.85rem !important;
    border-left-color: #9478e8 !important;
}

/* MEGA MENU per Focus settoriali (13 voci) — grid 3 colonne */
html body .et_pb_menu .et-menu li.menu-item-15846 .sub-menu {
    display: grid !important;
    grid-template-columns: repeat(3, 1fr) !important;
    min-width: 640px !important;
    padding: 1.25rem 0.5rem !important;
    gap: 0 !important;
}
html body .et_pb_menu .et-menu li.menu-item-15846 .sub-menu li {
    grid-column: auto !important;
}

/* MEGA MENU per Strategia (5 voci) — 2 colonne */
html body .et_pb_menu .et-menu li.menu-item-15137 .sub-menu {
    min-width: 420px !important;
    display: grid !important;
    grid-template-columns: repeat(2, 1fr) !important;
    padding: 1.25rem 0.5rem !important;
}

/* Titolo eyebrow sopra il dropdown */
html body .et_pb_menu .et-menu > li.menu-item-has-children > a {
    position: relative;
}

/* ============================================================
   SEZ 49 — MOBILE MENU: da Custom CSS area (post 5814)
   Migrato per centralizzare tutto il CSS globale
   ============================================================ */
.et_mobile_menu {
    height: 450px;
    overflow: scroll;
}

@media all and (min-width: 480px) and (max-width: 800px) {
    .cu-menu .et_pb_menu__logo-wrap {
        max-width: 15% !important;
    }
}

/* ============================================================
   SEZ 50 — ARTICOLI: nascondi modulo titolo Divi (duplicato in hero editoriale)
   Il nostro hero wp:html include già H1 + meta + lead
   ============================================================ */
html body.single-post div[class*="et_pb_post_title"],
html body.single div[class*="et_pb_post_title"][class*="_tb_body"],
html body.single div.et_pb_post_title {
    display: none !important;
}
/* Rimuovi padding extra della prima sezione body template */
html body.single-post .et_pb_row_2_tb_body,
html body.single .et_pb_section:has(.et_pb_post_title) {
    padding-top: 0 !important;
}

/* ============================================================
   SEZ 51 — ARTICOLI: override hardcoded colori/font Template Builder
   Bypassa le variabili gcid-* Divi che si perdono con reset cache.
   Impone dark background, testo bianco, Inter, LARGHEZZA PIENA su tutti i single post.
   ============================================================ */
html body.single-post .et_pb_section[class*="_tb_body"],
html body.single-post .et_pb_row[class*="_tb_body"],
html body.single-post .et_pb_column[class*="_tb_body"],
html body.single-post .et_pb_post_content[class*="_tb_body"] {
    background-color: #0A0A0A !important;
    background: #0A0A0A !important;
    max-width: 100% !important;
    width: 100% !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
}
html body.single-post .et_pb_post_content[class*="_tb_body"] {
    color: #ffffff !important;
    font-family: 'Inter', sans-serif !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
}
html body.single-post .et_pb_post_content[class*="_tb_body"] h1,
html body.single-post .et_pb_post_content[class*="_tb_body"] h2,
html body.single-post .et_pb_post_content[class*="_tb_body"] h3,
html body.single-post .et_pb_post_content[class*="_tb_body"] h4,
html body.single-post .et_pb_post_content[class*="_tb_body"] h5,
html body.single-post .et_pb_post_content[class*="_tb_body"] h6 {
    color: #ffffff !important;
    font-family: 'Inter', sans-serif !important;
}
html body.single-post .et_pb_post_content[class*="_tb_body"] p,
html body.single-post .et_pb_post_content[class*="_tb_body"] li,
html body.single-post .et_pb_post_content[class*="_tb_body"] span {
    color: #ffffff !important;
}
/* Rimuovi minHeight fissa e padding Divi sulle sezioni articolo */
html body.single-post .et_pb_section[class*="_tb_body"] {
    min-height: auto !important;
    padding: 0 !important;
}
html body.single-post .et_pb_row[class*="_tb_body"] {
    padding: 0 !important;
}

/* ============================================================
   SEZ 53 — ARTICOLI: sezione finale "Per approfondire + form"
   ----------------------------------------------------------------
   2026-06-10 sera: RIATTIVATA (era display:none per unicode corrotti,
   ora riparati direttamente nel JSON del body template 16127).
   Richiesta Andrea: tutti gli articoli finiscono col form di contatto
   come in Divi 4 (testo invito + QR Telegram + form, receiver
   info@ideaswing.it, redirect /grazie-per-averci-contattato/).
   Qui solo lo styling dark coerente col resto del sito.
   ============================================================ */
html body.single-post .et_pb_section_3_tb_body {
    background-color: var(--color-bg, #0A0A0A) !important;
    padding-top: 4rem !important;
    padding-bottom: 6rem !important;
}
html body.single-post .et_pb_section_3_tb_body h6 {
    font-size: clamp(1.5rem, 2.5vw, 2.25rem) !important;
    line-height: 1.15 !important;
    letter-spacing: -0.02em !important;
    font-weight: 500 !important;
    color: var(--color-fg, #FFFFFF) !important;
    margin: 0 0 1.5rem 0 !important;
    text-transform: none !important;
}
html body.single-post .et_pb_section_3_tb_body p {
    color: var(--color-fg, #FFFFFF) !important;
    font-size: 1.0625rem !important;
    line-height: 1.7 !important;
    max-width: 720px;
}
/* QR Telegram nativo del template: dimensione contenuta, margini sani
 * (gli inline Divi usano vh che esplodono; qui valori fissi). */
html body.single-post .et_pb_section_3_tb_body .et_pb_image,
html body.single-post .et_pb_section_3_tb_body [class*="et_pb_image"] {
    margin: 1.5rem 0 0 0 !important;
    width: auto !important;
    max-width: 200px !important;
    display: block !important;
}
html body.single-post .et_pb_section_3_tb_body .et_pb_image img {
    width: 180px !important;
    height: auto !important;
    border: 1px solid var(--color-border, #404040);
    display: block !important;
}
html body.single-post .et_pb_section_3_tb_body .et_pb_button_module_wrapper,
html body.single-post .et_pb_section_3_tb_body .et_pb_button {
    margin: 1.5rem 0 0 0 !important;
}
/* due colonne affiancate su desktop: testo+QR sx, form dx */
html body.single-post .et_pb_section_3_tb_body .et_pb_row {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 3rem !important;
    align-items: flex-start !important;
}
html body.single-post .et_pb_section_3_tb_body .et_pb_row > .et_pb_column {
    flex: 1 1 420px !important;
    width: auto !important;
    margin: 0 !important;
}
/* form dark: input su fondo scuro con hairline */
html body.single-post .et_pb_section_3_tb_body .et_pb_contact_form_container {
    max-width: 720px !important;
    margin-left: 0 !important;
}
html body.single-post .et_pb_section_3_tb_body .et_pb_contact_field .input {
    background-color: var(--color-bg-soft, #141414) !important;
    color: var(--color-fg, #FFFFFF) !important;
    border: 1px solid var(--color-border, #404040) !important;
}
html body.single-post .et_pb_section_3_tb_body .et_pb_contact_field .input::placeholder {
    color: var(--color-fg-muted, #737373) !important;
}
html body.single-post .et_pb_section_3_tb_body .et_pb_button {
    background-color: #9478e8 !important;
    color: #FFFFFF !important;
    border: 0 !important;
}

/* Freccia dropdown: regola unificata in SEZ 47 */

/* SEZ 60 — RIMOSSA 2026-06-17 (consolidamento Divi legacy).
   Riduceva gli H1 finiti in colonne Divi strette. Crawl site-wide 17/6:
   0 pagine hanno più H1 in colonna Divi (tutte usano .ed-hero h1 del
   sistema unico). Regola morta. */

/* ============================================================
   SEZ 61 — NIENTE WORD-BREAK MAI (globale)
   ----------------------------------------------------------------
   Evita che browser spezzi una parola a metà (es. "Contatt|i").
   Vale per tutti gli H1-H6 ovunque, anche nelle colonne strette.
   ============================================================ */
html body h1,
html body h2,
html body h3,
html body h4,
html body h5,
html body h6 {
    word-break: normal !important;
    overflow-wrap: break-word !important;
    hyphens: none !important;
}

/* SEZ 62 — RIMOSSA 2026-06-17 (consolidamento Divi legacy).
   Stesso motivo della SEZ 60: nessun H1/H2 in colonna Divi stretta
   site-wide. Regola morta. */

/* ============================================================
   SEZ 63 — FIX FONT MENU HEADER (override Divi inline)
   ----------------------------------------------------------------
   Bug 2026-06-10: il Theme Builder ha salvato nel modulo menu un
   inline style "font-family: 'Roboto Condensed'; font-size: 1.2rem"
   che batte il nostro CSS esterno per specificità (preset module).
   Roboto Condensed non è caricato → fallback su sans-serif system
   con caratteri MOLTO LARGHI → menu eccede il container → "spinge"
   le prime voci sotto il logo.
   FIX: forzo font Inter + font-size 0.9375rem con max specificity.
   Selettore con .et_pb_menu_0_tb_header (= ID del modulo Divi).
   ============================================================ */
html body .et_pb_menu_0_tb_header.et_pb_menu ul li a,
html body .et-l--header .et_pb_menu_0_tb_header ul li a,
html body .et-l--header [class*="_tb_header"].et_pb_menu ul li a {
    font-family: var(--font-sans, 'Inter', sans-serif) !important;
    font-size: 0.9375rem !important;
    font-weight: 400 !important;
    letter-spacing: 0 !important;
}
/* Riduce ulteriormente il gap menu (era 2.25rem, ora 1.25rem) per
 * compattezza visiva e margine di sicurezza sul logo.
 * Specificità alzata con :not(.fake) per vincere su SEZ 36 (0,4,3). */
html body:not(.fake) .et-l--header .et_pb_menu__menu > nav > ul,
html body:not(.fake) .et-l--header [class*="_tb_header"] .et_pb_menu__menu > nav > ul {
    gap: 0.875rem !important;
}
/* Logo ridotto a 40px max-height per liberare spazio per il menu */
html body:not(.fake) .et-l--header .et_pb_menu__logo img,
html body:not(.fake) .et-l--header [class*="et_pb_image"][class*="_tb_header"] img {
    max-height: 44px !important;
    width: auto !important;
}
/* Forza flex-wrap nowrap + justify-content flex-end sul menu wrap */
html body:not(.fake) .et-l--header .et_pb_menu__wrap {
    flex: 1 1 auto !important;
    justify-content: flex-end !important;
    min-width: 0 !important;
}
html body:not(.fake) .et-l--header .et_pb_menu_inner_container {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    justify-content: flex-start !important;
    width: 100% !important;
}
/* Logo: NO float, NO position absolute, ben definito a sinistra */
html body:not(.fake) .et-l--header .et_pb_menu__logo-wrap {
    float: none !important;
    position: relative !important;
    flex: 0 0 auto !important;
    margin-right: 2rem !important;
    z-index: 5 !important;
}
/* Menu wrap deve essere dopo il logo, mai sotto. Width effettiva = container - logo - margin */
html body:not(.fake) .et-l--header .et_pb_menu__wrap {
    flex: 1 1 auto !important;
    min-width: 0 !important;
    position: relative !important;
    flex-wrap: nowrap !important;
    justify-content: flex-end !important;
    align-items: center !important;
}
/* (Debug outline rimossi 2026-06-10 dopo risoluzione bug column 4_4) */
/* Forza il modulo menu module a prendere tutta la larghezza della column */
html body:not(.fake) .et-l--header .et_pb_menu_0_tb_header,
html body:not(.fake) .et-l--header [class*="et_pb_menu"][class*="_tb_header"] {
    width: 100% !important;
    max-width: 100% !important;
}
/* CRUCIALE: la column 4_4 del header NON ha width:100% perché il row
 * ha gutters1 invece di gutters3. Forzo column al 100% e row a full width. */
html body:not(.fake) .et-l--header .et_pb_row_0_tb_header.et_pb_row {
    width: 95vw !important;
    max-width: 1600px !important;
    margin-left: auto !important;
    margin-right: auto !important;
}
html body:not(.fake) .et-l--header .et_pb_column_0_tb_header,
html body:not(.fake) .et-l--header .et_pb_row > .et_pb_column_4_4 {
    width: 100% !important;
    max-width: 100% !important;
}
/* Forza ANCHE nav e ul a flex per essere sicuri che le voci siano una accanto all'altra */
html body:not(.fake) .et-l--header .et-menu-nav,
html body:not(.fake) .et-l--header .et_pb_menu__menu > nav {
    display: flex !important;
    flex: 0 0 auto !important;
    width: auto !important;
}
html body:not(.fake) .et-l--header ul.et-menu.nav,
html body:not(.fake) .et-l--header .et_pb_menu .nav {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    width: auto !important;
    margin: 0 !important;
    padding: 0 !important;
    list-style: none !important;
}
html body:not(.fake) .et-l--header ul.et-menu > li,
html body:not(.fake) .et-l--header .et_pb_menu .nav > li {
    display: inline-flex !important;
    flex-shrink: 0 !important;
    float: none !important;
}
@media (max-width: 1200px) {
    html body .et-l--header .et_pb_menu__menu > nav > ul {
        gap: 1rem !important;
    }
    html body .et_pb_menu_0_tb_header.et_pb_menu ul li a {
        font-size: 0.875rem !important;
    }
}
/* Il logo non deve mai stare sotto il menu (flex-shrink:0) */
html body .et-l--header .et_pb_menu__logo-wrap,
html body .et-l--header .et_pb_menu__logo-slot {
    flex-shrink: 0 !important;
}

/* ============================================================
   SEZ 64 — Pagine Divi-blocks: gerarchia heading + allineamento
   ----------------------------------------------------------------
   Problema (Andrea 2026-06-10): le 9 pagine ancora in Divi 5 blocks
   (Contatti, Centro studi, Agenzia comunicazione, Settori arredamento/
   retail/manifatturiera/utility, Comunicazione politica/PA) mostrano:
   - H1 di pagina in colonna 2_3 ridotto da SEZ 60 a clamp(3.2vw, 3.5rem)
   - H2 successivi in colonna 4_4 governati da SEZ 44 a clamp(4.5vw, 4rem)
   → a 1440px viewport: H1=46px, H2=64px → gerarchia visiva INVERTITA.
   Inoltre il primo H1 spesso appare centrato per default Divi 5.
   ----------------------------------------------------------------
   FIX: per .et_pb_text in body.page:not(.home):
   - text-align: left forzato su tutto il blocco
   - H1: invariato (SEZ 60 lo gestisce)
   - H2: ridotto a max 2.75rem (44px) — sempre < H1
   - H3: invariato (già equilibrato)
   - p:  invariato (già governati da SEZ 44)
   Le pagine editorial (.ed-section h2) NON sono toccate: usano altri selettori.
   ============================================================ */
html body.page:not(.home) .et_pb_text,
html body.page:not(.home) .et_pb_text_inner {
    text-align: left !important;
}
html body.page:not(.home) .et_pb_text h1,
html body.page:not(.home) .et_pb_text h2,
html body.page:not(.home) .et_pb_text h3,
html body.page:not(.home) .et_pb_text h4,
html body.page:not(.home) .et_pb_text h5,
html body.page:not(.home) .et_pb_text h6,
html body.page:not(.home) .et_pb_text p {
    text-align: left !important;
}

/* H2 in Divi text block: cap basso per restare SEMPRE sotto H1 (max 56px).
 * Specificità (0,4,2) per battere SEZ 44 H2 (0,3,2). */
html body.page:not(.home) .et_pb_section .et_pb_text h2,
html body.page:not(.home) .et_pb_section .et_pb_text_inner h2 {
    font-size: clamp(2.25rem, 5vw, 4.5rem) !important;
    line-height: 1.15 !important;
    letter-spacing: -0.02em !important;
    font-weight: 500 !important;
    margin: 2rem 0 1rem 0 !important;
    color: var(--color-fg, #FFFFFF) !important;
}

/* H3 in Divi text block: leggermente sotto H2. */
html body.page:not(.home) .et_pb_section .et_pb_text h3,
html body.page:not(.home) .et_pb_section .et_pb_text_inner h3 {
    font-size: clamp(1.1875rem, 1.8vw, 1.625rem) !important;
    line-height: 1.25 !important;
    font-weight: 500 !important;
    margin: 1.5rem 0 0.75rem 0 !important;
    color: var(--color-fg, #FFFFFF) !important;
}

/* H1 in Divi text block: rimuovi il max-width: 22ch della SEZ 44 e
 * forza margin-left: 0 → il titolo riempie la colonna a sinistra. */
html body.page:not(.home) .et_pb_section .et_pb_text h1,
html body.page:not(.home) .et_pb_section .et_pb_text_inner h1 {
    max-width: none !important;
    margin-left: 0 !important;
    margin-right: auto !important;
    text-align: left !important;
}

/* Row Divi nelle pagine non-home: stessa larghezza di header e footer
 * (95vw max 1600px). Era ~80% boxed → contenuto stretto al centro.
 * NB: il wrapper Divi per le pagine è .et-l--post (NON .et-l--body, che è il body template). */
html body.page:not(.home) .et-l--post .et_pb_section > .et_pb_row,
html body.page:not(.home) .et-l--post .et_pb_section .et_pb_row.et_pb_row {
    width: 95vw !important;
    max-width: 1600px !important;
    margin-left: auto !important;
    margin-right: auto !important;
}

/* ============================================================
   SEZ 65 — Griglia blog Centro studi (pagina 15668)
   ----------------------------------------------------------------
   Problema (Andrea 2026-06-10): le card del blog appaiono "ammassate
   a sinistra" e non occupano tutta la larghezza disponibile.
   Nel vecchio sito Divi 4 era stato sistemato con CSS custom.
   ----------------------------------------------------------------
   FIX: griglia CSS esplicita a 4 colonne uguali, gap regolare,
   container full-width. Su tablet 2 colonne, mobile 1 colonna.
   ============================================================ */
html body.page-id-15668 .et_pb_blog,
html body.page-id-15668 .et_pb_blog_grid,
html body.page-id-15668 .et-blog-css-grid {
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
}
/* Problema: Divi 5 mette display:grid su .et-blog-css-grid > div (cioè
 * .et_pb_ajax_pagination_container) con auto-fill minmax(300px, 1fr).
 * Questo crea grid NIDIFICATO che restringe il .et_pb_blog_posts interno.
 * Disattivo il grid esterno → il grid SEZ 46 su .et_pb_blog_posts funziona pulito. */
html body.page-id-15668 .et-blog-css-grid,
html body.page-id-15668 .et-blog-css-grid > .et_pb_ajax_pagination_container,
html body.page-id-15668 .et_pb_blog_1 > .et_pb_ajax_pagination_container {
    display: block !important;
    width: 100% !important;
    max-width: none !important;
}
/* Riapplico esplicitamente grid 4 colonne sul .et_pb_blog_posts del centro studi,
 * con specificity superiore alla SEZ 46 e a qualsiasi regola Divi nativa. */
html body.page-id-15668 .et_pb_blog .et_pb_blog_posts,
html body.page-id-15668 .et-blog-css-grid .et_pb_blog_posts {
    display: grid !important;
    grid-template-columns: repeat(4, 1fr) !important;
    gap: 2rem 1.5rem !important;
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
    padding: 0 !important;
    list-style: none !important;
}
/* Garantisce che la row blog del centro studi sia full-width (95vw/1600px)
 * battendo la SEZ 51 che usa 92%. Forza anche column 4_4 e blog wrapper a 100%
 * per evitare che la griglia 4col si comprima a metà schermo. */
html body.page-id-15668 .et_pb_section_3.et_pb_section .et_pb_row,
html body.page-id-15668 .et_pb_blog .et_pb_row,
html body.page-id-15668 .et_pb_row_5 {
    width: 95vw !important;
    max-width: 1600px !important;
    margin-left: auto !important;
    margin-right: auto !important;
}
html body.page-id-15668 .et_pb_row_5 .et_pb_column,
html body.page-id-15668 .et_pb_row_5 .et_pb_column_9,
html body.page-id-15668 .et_pb_row_5 .et_pb_column_4_4 {
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
    float: none !important;
}
html body.page-id-15668 .et_pb_row_5 .et_pb_blog_1 {
    width: 100% !important;
    max-width: 100% !important;
}
html body.page-id-15668 .et_pb_blog .et_pb_post {
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
    padding: 0 0 1.5rem 0 !important;
    float: none !important;
    border-bottom: 1px solid var(--color-border) !important;
}
html body.page-id-15668 .et_pb_blog .et_pb_post .entry-featured-image-url,
html body.page-id-15668 .et_pb_blog .et_pb_post .et_pb_image_container {
    margin: 0 0 1rem 0 !important;
    width: 100% !important;
}
html body.page-id-15668 .et_pb_blog .et_pb_post .entry-featured-image-url img {
    width: 100% !important;
    height: auto !important;
    aspect-ratio: 1080 / 608 !important; /* P3: box = immagine 1080x608, niente banda nera sotto */
    object-fit: cover !important;
    display: block !important;
}
html body.page-id-15668 .et_pb_blog .et_pb_post h2 {
    font-size: clamp(1rem, 1.2vw, 1.25rem) !important;
    line-height: 1.25 !important;
    margin: 0 0 0.5rem 0 !important;
    max-width: none !important;
}
@media (max-width: 1024px) {
    html body.page-id-15668 .et_pb_blog .et_pb_blog_posts,
    html body.page-id-15668 .et-blog-css-grid .et_pb_blog_posts {
        grid-template-columns: repeat(2, 1fr) !important;
    }
}
@media (max-width: 600px) {
    html body.page-id-15668 .et_pb_blog .et_pb_blog_posts,
    html body.page-id-15668 .et-blog-css-grid .et_pb_blog_posts {
        grid-template-columns: 1fr !important;
    }
}

/* ============================================================
   SEZ 66 — "Altre analisi" widget a fine post singolo
   ----------------------------------------------------------------
   Aggiunto 2026-06-10 (Andrea): in fondo a ogni articolo, una sezione
   con 3 altri post correlati che si apre in nuova tab. Stile coerente
   con il design dark editoriale Swing (hairline + mono eyebrow).
   Iniettato da swg_append_other_articles() in functions.php.
   Visibile SOLO su post_type=post (il filtro lo limita), mai su pagine.
   ============================================================ */
.swg-other-articles {
    margin: var(--space-9, 5rem) 0 var(--space-7, 3rem) 0;
    padding: var(--space-7, 3rem) 0 0 0;
    border-top: 1px solid var(--color-border-strong, #595959);
    color: var(--color-fg, #FFFFFF);
    display: block;
}
.swg-other-articles__head {
    margin: 0 0 var(--space-6, 2.5rem) 0;
    max-width: 720px;
}
.swg-other-articles__eyebrow {
    font-family: var(--font-mono, 'JetBrains Mono', monospace);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    color: var(--color-fg-secondary, #FFFFFF);
    margin: 0 0 var(--space-3, 0.75rem) 0;
}
.swg-other-articles__title {
    font-size: clamp(1.5rem, 2.5vw, 2.25rem) !important;
    line-height: 1.15 !important;
    letter-spacing: -0.02em !important;
    font-weight: 500 !important;
    color: var(--color-fg, #FFFFFF) !important;
    margin: 0 !important;
    max-width: none !important;
}
.swg-other-articles__grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 2rem 1.5rem;
}
@media (min-width: 768px) {
    .swg-other-articles__grid {
        grid-template-columns: repeat(3, 1fr);
    }
}
.swg-other-card {
    display: flex;
    flex-direction: column;
    text-decoration: none !important;
    color: inherit !important;
    border-top: 1px solid var(--color-border, #404040);
    padding: 1.25rem 0 0 0;
    transition: opacity 200ms ease, transform 200ms ease;
}
.swg-other-card:hover,
.swg-other-card:focus-visible {
    opacity: 1;
    color: inherit !important;
}
.swg-other-card__image {
    overflow: hidden;
    margin: 0 0 1rem 0;
    aspect-ratio: 16/10;
    background: var(--color-bg-soft, #141414);
}
.swg-other-card__image img {
    width: 100% !important;
    height: 100% !important;
    object-fit: cover !important;
    display: block !important;
    transition: transform 400ms ease;
}
.swg-other-card:hover .swg-other-card__image img {
    transform: scale(1.04);
}
.swg-other-card__body {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}
.swg-other-card__meta {
    font-family: var(--font-mono, 'JetBrains Mono', monospace);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--color-fg-secondary, #FFFFFF);
    margin: 0;
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
}
.swg-other-card__dot { opacity: 0.6; }
.swg-other-card__title {
    font-size: clamp(1rem, 1.2vw, 1.1875rem) !important;
    line-height: 1.3 !important;
    font-weight: 500 !important;
    color: var(--color-fg, #FFFFFF) !important;
    margin: 0.25rem 0 0 0 !important;
    letter-spacing: -0.01em !important;
    background-image: linear-gradient(currentColor, currentColor);
    background-size: 0 1px;
    background-position: 0 100%;
    background-repeat: no-repeat;
    transition: background-size 250ms ease;
    display: inline;
}
.swg-other-card:hover .swg-other-card__title,
.swg-other-card:focus-visible .swg-other-card__title {
    background-size: 100% 1px;
}

/* ============================================================
   SEZ 67 — Link 13 verticali in home (Andrea 2026-06-10)
   ----------------------------------------------------------------
   Ogni <li> di .ed-sectors e' avvolto in <a class="sec-link"
   target=_blank> verso la pagina di approfondimento del settore.
   display:contents fa "sparire" l'anchor dal layout: la griglia
   3 colonne del li resta identica. Hover: nome settore sottolineato
   viola come i link del contenuto editoriale.
   ============================================================ */
.ed-sectors li a.sec-link {
    display: contents !important;
    color: inherit !important;
    text-decoration: none !important;
}
.ed-sectors li:hover .sec-name {
    text-decoration: underline;
    text-decoration-color: #9478e8;
    text-decoration-thickness: 2px;
    text-underline-offset: 6px;
}
.ed-sectors li { cursor: pointer; }

/* ============================================================
   SEZ 68 — ARTICOLI IDENTICI ALLA HOME (Andrea 2026-06-10 sera)
   ----------------------------------------------------------------
   Diagnosi CDP: il modulo titolo Divi (entry-title 115px) era di nuovo
   visibile e duplicava l'H1 dell'ed-hero del contenuto (fermo a 64px).
   Il wrapper et_pb_section del body template aggiungeva padding 7rem,
   border-bottom e numerazione ::before, creando linee doppie e
   spaziature diverse dalla home.
   ============================================================ */

/* 1. Modulo titolo Divi nascosto: l'articolo ha gia' il suo ed-hero */
html body.single-post .et-l--body .et_pb_post_title,
html body.single-post .et-l--body [class*="et_pb_post_title"] {
    display: none !important;
}

/* 2. Hero articolo v2 (Andrea 2026-06-10 sera): struttura magazine.
 *    Ordine: H1 PICCOLO → meta (categoria · data) → immagine hero →
 *    primo H2 GRANDE come l'H1 delle pagine. Solo articoli.
 *    L'H1 resta il titolo SEO, ma visivamente e' un kicker compatto. */
html body.single-post .et-l--body .ed-hero {
    min-height: 0 !important;
    padding: 7rem 0 2.5rem 0 !important;
    border-bottom: 0 !important;
}
html body.single-post .et-l--body .ed-hero__inner {
    display: flex !important;
    flex-direction: column !important;
}
/* H1 mini come in Divi 4 (Andrea 10/6 sera: "molto piu' piccolo").
 * Resta il titolo SEO; visivamente e' una riga di servizio. */
html body.single-post .et-l--body .ed-hero h1 {
    order: 1;
    font-size: 1rem !important;
    line-height: 1.4 !important;
    letter-spacing: 0 !important;
    font-weight: 500 !important;
    margin: 0 0 0.5rem 0 !important;
    max-width: none !important;
}
/* Meta statico del contenuto (categoria + data baked il 9/6): nascosto.
 * Lo sostituisce la byline dinamica swg-post-byline (functions.php). */
html body.single-post .et-l--body .ed-hero .ed-hero__meta {
    display: none !important;
}
/* Byline "da Andrea Di Bert · Aggiornamento d/m/Y" (iniettata via PHP) */
html body.single-post .swg-post-byline {
    order: 2;
    display: flex !important;
    gap: 0.625rem;
    align-items: center;
    font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
    font-size: 11px !important;
    text-transform: none;
    letter-spacing: 0.12em;
    color: var(--color-fg-secondary, #FFFFFF) !important;
    margin: 0 !important;
}
html body.single-post .swg-post-byline .dot {
    display: inline-block;
    width: 4px; height: 4px;
    border-radius: 50%;
    background: var(--color-fg, #FFFFFF);
}
html body.single-post .et-l--body .ed-hero .ed-hero__lead {
    order: 3;
    margin: 1.25rem 0 0 0 !important;
}

/* Immagine hero (iniettata da swg_inject_post_hero_image).
 * Bordo hairline (Andrea punto 1): molte immagini hanno fondo nero e si
 * confondono con la pagina; la cornice 1px definisce il perimetro,
 * coerente col linguaggio hairline del design. */
html body.single-post .swg-post-hero-image {
    margin: 0 !important;
    padding: 0 0 1rem 0 !important;
}
html body.single-post .swg-post-hero-image img {
    width: 100% !important;
    height: auto !important;
    aspect-ratio: 1080 / 608 !important;
    object-fit: cover !important;
    display: block !important;
    max-width: none !important;
    border: 1px solid var(--color-border, #404040) !important;
    box-sizing: border-box !important;
}

/* Primo H2 dopo l'immagine hero: scala dell'H1 delle pagine (8vw).
 * Terzo selettore: caso con executive summary tra immagine e prima sezione. */
html body.single-post .swg-post-hero-image + .ed-section .ed-h2,
html body.single-post .ed-hero + .ed-section .ed-h2,
html body.single-post .swg-exec-summary + .ed-section .ed-h2 {
    font-size: clamp(2.25rem, 5vw, 4.5rem) !important;
    line-height: 0.98 !important;
    letter-spacing: -0.045em !important;
    font-weight: 500 !important;
    max-width: none !important;
}

/* 3. Eyebrow dell'hero articolo senza sottolineatura (come il meta della home) */
html body.single-post .ed-hero .ed-eyebrow {
    border-bottom: 0 !important;
    padding-bottom: 0 !important;
}

/* 4. Il wrapper Divi del post non deve aggiungere NULLA:
 *    niente bordo, niente numerazione 01, niente padding extra.
 *    Le ed-section interne gestiscono spaziature e hairline come in home. */
html body.single-post .et-l--body .et_pb_section {
    border-bottom: 0 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
}
html body.single-post .et-l--body .et_pb_section::before {
    content: none !important;
}

/* ============================================================
   SEZ 69 — NIENTE LINEA CORPO→FOOTER, OVUNQUE (Andrea punto 7)
   ----------------------------------------------------------------
   L'ultima sezione del contenuto non disegna l'hairline di chiusura:
   resta solo spazio nero prima del footer. Vale per home, pagine,
   articoli e per le pagine miste con section Divi in coda.
   ============================================================ */
html body .ed-template-wrapper > .ed-section:last-child,
html body .ed-template-wrapper > .ed-section:last-of-type,
html body .et_pb_post_content .ed-template-wrapper > .ed-section:last-of-type {
    border-bottom: 0 !important;
}
html body .et-l--footer,
html body footer.et-l--footer,
html body .et-l--footer .et_pb_section,
html body .et-l--footer .et_pb_row {
    border-top: 0 !important;
}
/* sezioni Divi in coda alle pagine miste (form Contatti, blog Centro studi) */
html body.page .et-l--post .et_pb_section:last-of-type,
html body.page .et-l--post .et_pb_section:last-child {
    border-bottom: 0 !important;
}
/* respiro nero prima del footer al posto della linea */
html body .ed-template-wrapper > .ed-section:last-of-type {
    padding-bottom: 7rem !important;
}

/* ============================================================
   SEZ 70 — Widget "Altre analisi" v2 (Andrea punti 4-5-6)
   ----------------------------------------------------------------
   - blocco ridotto: max 1080px, niente linea top (punto 3: le due
     linee finali eliminate)
   - immagini in proporzione ESATTA 1080x608 originale, nessun taglio
   - lineetta hover sul titolo card: viola Swing #9478e8
   - il titolo del blocco non e' piu' un heading (vedi functions.php)
   ============================================================ */
/* v3 (Andrea): il blocco resta ALLINEATO alla griglia del layout generale
 * (piena larghezza row come tutto il resto). Le card si riducono passando
 * a 4 colonne (stessa griglia della pagina Centro studi): 3 card + 1 vuota.
 * Dimensioni titoli INVARIATE rispetto a SEZ 66. */
.swg-other-articles {
    border-top: 0 !important;
    width: 100%;
    max-width: none;
    margin-top: 4rem !important;
}
/* v4 (Andrea 10/6 sera): 3 card DISTRIBUITE su tutta la riga
 * (prima: 4 colonne con la quarta vuota = blocco ammassato a sinistra). */
@media (min-width: 768px) {
    .swg-other-articles__grid {
        grid-template-columns: repeat(3, minmax(0, 400px)) !important;
        justify-content: space-between !important;
    }
}
.swg-other-card__image,
.swg-other-card__image img {
    aspect-ratio: 1080 / 608 !important;
}
.swg-other-card__image img {
    object-fit: cover !important;
}
.swg-other-card__title {
    background-image: linear-gradient(#9478e8, #9478e8) !important;
}
.swg-other-articles__title {
    /* stessa resa di un h2 ma su un paragrafo (niente heading per SEO) */
    display: block;
}

/* ============================================================
   SEZ 71 — Form Contatti GIUSTIFICATO (v3 10/6 sera, Andrea)
   A piena larghezza della riga, come i blocchi di testo del
   layout generale: margine sinistro = margine destro.
   ============================================================ */
html body.page .et_pb_contact_form_container,
html body.page .et_pb_contact_form_container.et_pb_module {
    width: 100% !important;
    max-width: none !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
}
html body.page .et_pb_column:has(> .et_pb_contact_form_container) {
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
    float: none !important;
}

/* ============================================================
   SEZ 72 — Respiro uniforme prima dei blocchi ed-stage
   ----------------------------------------------------------------
   (Andrea punto 2, 10/6 sera): nelle pagine il paragrafo che precede
   un gruppo ed-stage ha margin-bottom:4rem inline; negli articoli
   convertiti il 9/6 quel margine manca, quindi il testo finisce a
   ridosso della prima linea 2px dello stage. Uniformo via CSS:
   ogni gruppo di stage preceduto da prose prende 4rem di aria.
   ============================================================ */
html body .ed-section .ed-prose + div:has(> .ed-stage) {
    margin-top: 4rem !important;
}
/* fallback per browser senza :has() */
html body .ed-section .ed-prose + div > .ed-stage:first-child {
    margin-top: 4rem;
}
html body .ed-section .ed-prose + div:has(> .ed-stage) > .ed-stage:first-child {
    margin-top: 0;
}

/* ============================================================
   SEZ 73 — Executive summary articoli (recuperato dal Divi 4)
   ----------------------------------------------------------------
   12 articoli avevano "Executive summary." + paragrafi in corsivo;
   persi nella conversione del 9/6 (testo troncato nel lead hero).
   Reinseriti come prima sezione sotto l'immagine hero.
   ============================================================ */
html body.single-post .swg-exec-summary .ed-prose {
    font-style: italic;
    font-size: clamp(1.0625rem, 1.3vw, 1.25rem) !important;
    max-width: 880px;
}
html body.single-post .swg-exec-summary .ed-prose em { font-style: italic; }

/* ============================================================
   SEZ 74 — ARTICOLI: stile unico per i blocchi di testo
   ----------------------------------------------------------------
   (Andrea punti 5+7, 10/6 sera): i blocchi degli articoli erano
   disposti in modi vari (ed-stage a 2 colonne, ed-asym, prose).
   Stile unico LINEARE solo negli articoli: eyebrow → titolo →
   sottotitolo → testo, tutto in colonna, stessa misura 720px.
   Le pagine mantengono la loro varieta' (asym/stage) come la home.
   ============================================================ */
html body.single-post .ed-stage {
    display: block !important;
    border: 0 !important;
    padding: 0 !important;
    margin: 2.75rem 0 0 0 !important;
}
html body.single-post .ed-stage__num {
    display: block;
    margin: 0 0 0.375rem 0;
}
html body.single-post .ed-stage__label {
    /* font-size/line-height RIMOSSI 2026-06-17: la dimensione H3 (28/34px)
       è ora unica nel sistema tipografico di template-demo.css, identica a
       pagine e articoli. Qui resta solo la spaziatura specifica articolo. */
    margin: 0 0 0.75rem 0 !important;
    max-width: 720px;
}
html body.single-post .ed-stage__body {
    max-width: 720px !important;
    margin: 0 !important;
}
html body.single-post .ed-asym {
    display: block !important;
}
html body.single-post .ed-asym > div + div {
    margin-top: 1.5rem;
}
/* senza i bordi degli stage il respiro extra pre-gruppo non serve piu' */
html body.single-post .ed-section .ed-prose + div:has(> .ed-stage) {
    margin-top: 2rem !important;
}

/* ============================================================
   SEZ 75 — Reveal allo scroll (Andrea punto 8)
   ----------------------------------------------------------------
   Effetto leggero e gratuito in performance: le sezioni entrano
   con fade+translate quando raggiungono il viewport.
   - la classe swg-reveal viene aggiunta SOLO via JS: senza JS la
     pagina resta perfettamente visibile (progressive enhancement)
   - rispetta prefers-reduced-motion
   ============================================================ */
/* v2 (Andrea 10/6 notte): reveal SCAGLIONATO sui figli, stile Framer.
 * Ogni elemento della sezione entra in sequenza con easing morbido. */
.swg-reveal > * {
    opacity: 0;
    transform: translateY(34px);
    transition: opacity 0.85s cubic-bezier(0.22, 1, 0.36, 1),
                transform 0.85s cubic-bezier(0.22, 1, 0.36, 1);
    will-change: opacity, transform;
}
.swg-reveal.is-visible > * { opacity: 1; transform: none; }
.swg-reveal.is-visible > *:nth-child(2) { transition-delay: 0.09s; }
.swg-reveal.is-visible > *:nth-child(3) { transition-delay: 0.18s; }
.swg-reveal.is-visible > *:nth-child(4) { transition-delay: 0.26s; }
.swg-reveal.is-visible > *:nth-child(n+5) { transition-delay: 0.33s; }

/* zoom lieve sull'immagine hero articolo quando entra */
.swg-post-hero-image.swg-reveal img { transform: scale(1.045); transition: transform 1.4s cubic-bezier(0.22, 1, 0.36, 1); }
.swg-post-hero-image.swg-reveal.is-visible img { transform: scale(1); }

/* entrata hero al caricamento (CSS puro: contenuto sempre nel DOM) */
@keyframes swgRise {
    from { opacity: 0; transform: translateY(38px); }
    to   { opacity: 1; transform: none; }
}
.ed-hero__inner > * { animation: swgRise 0.9s cubic-bezier(0.22, 1, 0.36, 1) both; }
.ed-hero__inner > *:nth-child(2) { animation-delay: 0.12s; }
.ed-hero__inner > *:nth-child(3) { animation-delay: 0.24s; }

/* la riga viola del mark si "disegna" dopo il load (solo con JS attivo:
 * senza JS resta il border statico, crawler e no-JS vedono tutto) */
body.swg-anim h1 mark {
    border-bottom-color: transparent;
    background-image: linear-gradient(#9478e8, #9478e8);
    background-repeat: no-repeat;
    background-position: 0 100%;
    background-size: 0% 4px;
    transition: background-size 0.9s cubic-bezier(0.22, 1, 0.36, 1) 0.55s;
}
body.swg-anim.swg-anim-go h1 mark { background-size: 100% 4px; }

/* ancore fluide native, zero JS */
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
    .swg-reveal, .swg-reveal > *, .ed-hero__inner > *,
    .swg-post-hero-image.swg-reveal img, body.swg-anim h1 mark {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
        animation: none !important;
        background-size: 100% 4px !important;
    }
    html { scroll-behavior: auto; }
}

/* ============================================================
   SEZ 76 — Widget "Altre analisi" v5: solo titolo + freccia
   (Andrea 10/6 sera: via le card di preview; freccia cliccabile
   verso il Centro studi, nuova scheda)
   ============================================================ */
.swg-other-articles__arrow {
    display: inline-block !important;
    margin-top: 1.75rem;
    color: var(--color-fg, #FFFFFF) !important;
    line-height: 0;
    transition: transform 250ms ease, color 250ms ease !important;
    background: none !important;
    border: 0 !important;
    text-decoration: none !important;
}
.swg-other-articles__arrow:hover,
.swg-other-articles__arrow:focus-visible {
    color: #9478e8 !important;
    transform: translateX(10px);
}

/* ============================================================
   SEZ 77 — ARTICOLI SU CARTA AVORIATA (Andrea 2026-06-10 sera)
   ----------------------------------------------------------------
   Solo i post singoli (body.single-post) passano a fondo "carta
   da libro" avoriata con tutto in nero caldo: header, footer,
   titoli, body. Le pagine e la home restano dark.
   Razionale: distinguere la modalita' LETTURA (articolo = giornale)
   dalla modalita' NAVIGAZIONE (pagine = manifesto dark).
   Tecnica: ribalto le variabili del design system sul body.single-post
   (le regole che usano var() si adeguano da sole) + override espliciti
   per le regole dark hardcoded (#0A0A0A / #FAFAFA con !important).
   ============================================================ */
html body.single-post {
    --color-bg:        #F7EFDC;   /* carta avoriata calda */
    --color-bg-soft:   #EFE5CC;
    --color-fg:           #161310;   /* nero caldo, non #000 puro */
    --color-fg-secondary: #3E382E;
    --color-fg-muted:     #6E6657;
    --color-border:        #D9D1BE;
    --color-border-strong: #C2B89F;
    --color-border-soft:   #E7E1D1;
}

/* Superfici: body, sezioni, header, footer */
html body.single-post,
html body.single-post #page-container,
html body.single-post #main-content,
html body.single-post .et_pb_section,
html body.single-post [class*="et_pb_section"],
html body.single-post [class*="et_pb_section"][class*="_tb_body"],
html body.single-post .et-l--header,
html body.single-post .et-l--header > .et_builder_inner_content,
html body.single-post header.et-l.et-l--header .et_pb_section.et_pb_section_0_tb_header,
html body.single-post header.et-l.et-l--header > .et_builder_inner_content .et_pb_section_0_tb_header.et_pb_section,
html body.single-post .et-l--footer,
html body.single-post .et-l--footer .et_pb_section {
    background-color: #F7EFDC !important;
    background-image: none !important;
}

/* Hero articolo: gradiente carta */
html body.single-post .ed-hero::before {
    background: #F7EFDC !important; /* piatto: niente banda di tono diverso */
}

/* Testi: tutto nero caldo */
html body.single-post h1,
html body.single-post h2,
html body.single-post h3,
html body.single-post h4,
html body.single-post h5,
html body.single-post h6,
html body.single-post p,
html body.single-post li,
html body.single-post .ed-prose,
html body.single-post .ed-h2,
html body.single-post .ed-hero__lead,
html body.single-post .ed-stage__label,
html body.single-post .ed-stage__body,
html body.single-post .et_pb_text_inner,
html body.single-post .et_pb_text_inner p,
html body.single-post .swg-other-articles__title,
html body.single-post .swg-exec-summary .ed-prose {
    color: #161310 !important;
}

/* Meta, eyebrow, byline: grigio caldo scuro */
html body.single-post .ed-eyebrow,
html body.single-post .ed-hero__meta,
html body.single-post .swg-post-byline,
html body.single-post .ed-stage__num,
html body.single-post .ed-section__num,
html body.single-post .swg-other-articles__eyebrow {
    color: #5C5446 !important;
}
html body.single-post .swg-post-byline .dot,
html body.single-post .ed-hero__meta .dot {
    background: #161310 !important;
}

/* Link nel contenuto: neri, underline viola invariata, hover viola scuro */
html body.single-post a:not(.ed-footer__social-link):not(.ed-footer__logo) {
    color: #161310 !important;
}
html body.single-post a:hover,
html body.single-post a:focus {
    color: #6A4FD0 !important;
}
/* Sottolineatura link nel corpo articolo: viola SCURO #6A4FD0 (coerente con
 * l'hover), spessore 2px. Il #9478e8 della SEZ 46 è viola chiaro e su carta
 * avoriata ha contrasto troppo basso: la riga non si vede (Andrea 12/6). */
html body.single-post .ed-template-wrapper a:not(.ed-footer a):not(.swg-other-articles__arrow),
html body.single-post .ed-prose a,
html body.single-post .ed-stage__body a,
html body.single-post .et_pb_post_content a:not(.ed-footer a):not(.swg-other-articles__arrow) {
    text-decoration: underline !important;
    text-decoration-color: #6A4FD0 !important;
    text-decoration-thickness: 2px !important;
    text-underline-offset: 3px !important;
}

/* Mark parola portante: testo nero, riga viola invariata */
html body.single-post h1 mark {
    color: #161310 !important;
}

/* Header: menu nero su carta */
html body.single-post .et-l--header .et_pb_menu ul li a,
html body.single-post .et_pb_menu_0_tb_header.et_pb_menu ul li a {
    color: #161310 !important;
}
html body.single-post .et-l--header .et_pb_row_0_tb_header {
    border-bottom-color: #C2B89F !important;
}
/* dropdown del menu su carta */
html body.single-post .et-l--header .et_pb_menu .sub-menu,
html body.single-post .et-l--header ul.et-menu li li {
    background-color: #F0E8D2 !important;
}

/* Footer: testi neri su carta */
html body.single-post .ed-footer,
html body.single-post .ed-footer__tagline,
html body.single-post .ed-footer__col a,
html body.single-post .ed-footer__col-title,
html body.single-post .ed-footer__bottom,
html body.single-post .ed-footer__bottom a,
html body.single-post .ed-footer__legal-links a {
    color: #3E382E !important;
}
html body.single-post .ed-footer__col a:hover,
html body.single-post .ed-footer__bottom a:hover {
    color: #161310 !important;
}
html body.single-post .ed-footer__col-title,
html body.single-post .ed-footer__bottom {
    border-color: #D9D1BE !important;
}
html body.single-post .ed-footer__social-link {
    border-color: #5C5446 !important;
    color: #3E382E !important;
}

/* Immagine hero: cornice carta-scura */
html body.single-post .swg-post-hero-image img {
    border-color: #C2B89F !important;
}

/* Freccia Altre analisi: nera, hover viola scuro */
html body.single-post .swg-other-articles__arrow {
    color: #161310 !important;
}
html body.single-post .swg-other-articles__arrow:hover,
html body.single-post .swg-other-articles__arrow:focus-visible {
    color: #6A4FD0 !important;
}

/* Selezione testo su carta */
html body.single-post ::selection {
    background-color: #9478e8;
    color: #FFFFFF;
}

/* SEZ 77-bis: il wrapper del body template ha una regola dark con
 * specificita' (0,4,3) (SEZ 54): pareggio e vittoria per ordine. */
html body.single-post .et-l--body > .et_builder_inner_content .et_pb_section,
html body.single-post .et-l--body .et_pb_section.et_pb_section,
html body.single-post [class*="et_pb_section"][class*="_tb_body"].et_pb_section,
html body.single-post .et-l--header .et_pb_section.et_pb_section,
html body.single-post .et-l--footer .et_pb_section.et_pb_section {
    background-color: #F7EFDC !important;
    background-image: none !important;
}

/* SEZ 77-ter: specchia ESATTAMENTE i selettori dark della SEZ 51
 * (stessa specificita', vince per ordine) con i valori carta. */
html body.single-post .et_pb_section[class*="_tb_body"],
html body.single-post .et_pb_row[class*="_tb_body"],
html body.single-post .et_pb_column[class*="_tb_body"],
html body.single-post .et_pb_post_content[class*="_tb_body"] {
    background-color: #F7EFDC !important;
    background: #F7EFDC !important;
}
html body.single-post .et_pb_post_content[class*="_tb_body"],
html body.single-post .et_pb_post_content[class*="_tb_body"] h1,
html body.single-post .et_pb_post_content[class*="_tb_body"] h2,
html body.single-post .et_pb_post_content[class*="_tb_body"] h3,
html body.single-post .et_pb_post_content[class*="_tb_body"] h4,
html body.single-post .et_pb_post_content[class*="_tb_body"] h5,
html body.single-post .et_pb_post_content[class*="_tb_body"] h6,
html body.single-post .et_pb_post_content[class*="_tb_body"] p,
html body.single-post .et_pb_post_content[class*="_tb_body"] li,
html body.single-post .et_pb_post_content[class*="_tb_body"] span {
    color: #161310 !important;
}
/* meta/eyebrow restano grigio caldo (battono la regola span qui sopra) */
html body.single-post .et_pb_post_content[class*="_tb_body"] .ed-eyebrow,
html body.single-post .et_pb_post_content[class*="_tb_body"] .ed-hero__meta span,
html body.single-post .et_pb_post_content[class*="_tb_body"] .swg-post-byline span,
html body.single-post .et_pb_post_content[class*="_tb_body"] .ed-stage__num {
    color: #5C5446 !important;
}
/* link nel contenuto: neri con underline viola (la SEZ 46 li voleva bianchi) */
html body.single-post .ed-template-wrapper a:not(.swg-other-articles__arrow),
html body.single-post .ed-prose a,
html body.single-post .ed-stage__body a,
html body.single-post .swg-exec-summary a {
    color: #161310 !important;
}

/* SEZ 77-quater: bianchi residui su carta (Andrea 10/6 notte)
 * strong/em nel testo + riga legale footer + qualunque inline residuo */
html body.single-post .et_pb_post_content[class*="_tb_body"] strong,
html body.single-post .et_pb_post_content[class*="_tb_body"] em,
html body.single-post .et_pb_post_content[class*="_tb_body"] b,
html body.single-post .et_pb_post_content[class*="_tb_body"] i,
html body.single-post .et_pb_post_content[class*="_tb_body"] blockquote,
html body.single-post .ed-template-wrapper strong,
html body.single-post .ed-template-wrapper em {
    color: #161310 !important;
}
html body.single-post .ed-footer__legal,
html body.single-post .ed-footer__bottom span,
html body.single-post .ed-footer__tagline,
html body.single-post footer .ed-footer * :not(a):not(svg):not(path) {
    color: #3E382E !important;
}
html body.single-post .ed-footer__legal {
    color: #5C5446 !important;
}

/* ============================================================
   SEZ 78 — Logo footer bandierato a sinistra, dimensione header
   (Andrea punto 5): l'img era "stretchata" dal flex-column del
   claim (align stretch) e l'object-fit contain la centrava.
   ============================================================ */
html body .ed-footer__claim {
    align-items: flex-start !important;
}
html body .ed-footer__logo {
    align-self: flex-start !important;
    margin: 0 !important;
    max-height: 44px !important;   /* = logo header (SEZ 63) */
    max-width: 180px !important;
    width: auto !important;
}

/* SEZ 76-bis: freccia vicina al titolo, stessa distanza eyebrow→titolo */
.swg-other-articles__head {
    margin-bottom: 0 !important;
}
.swg-other-articles__arrow {
    margin-top: 0.75rem !important;
}

/* ============================================================
   SEZ 79 — MOBILE: ripristino hamburger sotto i 980px
   ----------------------------------------------------------------
   (Andrea punto 6, 10/6 notte): le regole SEZ 63 forzano il menu
   orizzontale con !important e impedivano a Divi di passare
   all'hamburger su mobile → voci tagliate. Sotto i 980px:
   menu desktop nascosto, hamburger visibile.
   ============================================================ */
@media (max-width: 980px) {
    html body:not(.fake) .et-l--header .et_pb_menu__menu,
    html body:not(.fake) .et-l--header .et_pb_menu__menu > nav,
    html body:not(.fake) .et-l--header ul.et-menu.nav,
    html body:not(.fake) .et-l--header .et_pb_menu .nav,
    html body:not(.fake) .et-l--header .et-menu-nav > ul {
        display: none !important;
    }
    html body:not(.fake) .et-l--header .et_mobile_nav_menu {
        display: block !important;
    }
    html body:not(.fake) .et-l--header .et_pb_menu__wrap {
        justify-content: flex-end !important;
    }
    /* menu mobile aperto: pannello coerente (dark su pagine, carta su articoli) */
    html body .et-l--header .et_mobile_menu {
        background-color: var(--color-bg, #0A0A0A) !important;
        border-top: 1px solid var(--color-border-strong, #595959) !important;
    }
    html body .et-l--header .et_mobile_menu li a {
        color: var(--color-fg, #FFFFFF) !important;
        border-color: var(--color-border-soft, #262626) !important;
    }
}

/* ============================================================
   SEZ 80 — Fix finali 10/6 notte (8 punti Andrea)
   ============================================================ */

/* 1) Riga legale e span footer su carta: la SEZ 43 ha una regola
 * span:not()x4 a specificita' (0,4,3) che vinceva. Specchio con
 * specificita' superiore, scoped al footer e al contenuto articolo. */
html body.single-post .ed-footer span:not(.ed-eyebrow):not(.ed-stage__num):not(.ed-pillar__num):not(.sec-num) {
    color: #3E382E !important;
}
html body.single-post .ed-footer .ed-footer__legal,
html body.single-post .ed-footer span.ed-footer__legal:not(.fake1):not(.fake2):not(.fake3) {
    color: #5C5446 !important;
}
html body.single-post .et_pb_post_content[class*="_tb_body"] span:not(.ed-eyebrow):not(.ed-stage__num):not(.ed-pillar__num):not(.sec-num) {
    color: #161310 !important;
}
/* byline resta grigio caldo (specificita' ancora maggiore) */
html body.single-post .et_pb_post_content[class*="_tb_body"] .swg-post-byline span:not(.fake1):not(.fake2):not(.fake3):not(.fake4) {
    color: #5C5446 !important;
}

/* 2) Logo footer piu' grande */
html body .ed-footer__logo {
    max-height: 64px !important;
    max-width: 240px !important;
}

/* 4) Dropdown menu su articoli (carta): pannello uniforme color carta,
 * voci scure come i titoli. Specchia i selettori della SEZ 48 dark. */
html body.single-post .et-l--header ul.et-menu li ul.sub-menu,
html body.single-post .et-l--header .et_pb_menu .sub-menu,
html body.single-post .et-l--header ul.et-menu li li,
html body.single-post .et-l--header .et_pb_menu ul li ul li,
html body.single-post .et-l--header .et-menu-nav li.menu-item-has-children ul {
    background-color: #F7EFDC !important;
    background: #F7EFDC !important;
    border-color: #C2B89F !important;
}
html body.single-post .et-l--header ul.et-menu li ul.sub-menu a,
html body.single-post .et-l--header .et_pb_menu .sub-menu li a,
html body.single-post .et-l--header .et_pb_menu .sub-menu a span {
    color: #161310 !important;
}
html body.single-post .et-l--header ul.et-menu li ul.sub-menu a:hover,
html body.single-post .et-l--header .et_pb_menu .sub-menu li a:hover {
    color: #6A4FD0 !important;
    background: #F0E8D2 !important;
}

/* 5) LINEE DI SEZIONE STANDARD: lunghe come la riga del layout
 * (95vw, max 1600px, centrate), MAI a tutta finestra. Stessa geometria
 * di header e footer. Vale per pagine, home e articoli. */
html body .ed-section {
    border-bottom: 0 !important;
    position: relative;
}
html body .ed-section::after {
    content: "";
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 0;
    width: 95vw;
    max-width: 1600px;
    height: 1px;
    background: var(--color-border-strong, #595959);
    pointer-events: none;
}
/* l'ultima sezione resta senza linea (spazio nero/carta prima del footer) */
html body .ed-template-wrapper > .ed-section:last-of-type::after,
html body .ed-template-wrapper > .ed-section:last-child::after {
    display: none;
}
/* hero home/pagine: stessa geometria */
html body .ed-hero {
    border-bottom: 0 !important;
}
html body:not(.single-post) .ed-hero::after {
    content: "";
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 0;
    width: 95vw;
    max-width: 1600px;
    height: 1px;
    background: var(--color-border-strong, #595959);
    pointer-events: none;
}

/* 6) Voci footer: hover con sottolineatura viola Swing come l'header */
html body .ed-footer__col a:hover,
html body .ed-footer__col a:focus-visible,
html body .ed-footer__bottom a:hover,
html body .ed-footer__legal-links a:hover {
    text-decoration: underline !important;
    text-decoration-color: #9478e8 !important;
    text-decoration-thickness: 2px !important;
    text-underline-offset: 4px !important;
}

/* ============================================================
   SEZ 81 — Linee header/footer a larghezza riga + hover footer
   (Andrea 10/6 notte, punti 1-2)
   ----------------------------------------------------------------
   La linea sotto l'header era il border della SECTION (full width),
   quella sopra il footer un border-top residuo su .ed-footer.
   Entrambe diventano ::after a larghezza riga (95vw max 1600).
   ============================================================ */
html body .et-l--header .et_pb_section,
html body header.et-l--header .et_pb_section.et_pb_section,
html body header.et-l.et-l--header > .et_builder_inner_content .et_pb_section_0_tb_header.et_pb_section {
    border-bottom: 0 !important;
    position: relative !important;
}
html body .et-l--header .et_pb_section::after {
    content: "";
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 0;
    width: 95vw;
    max-width: 1600px;
    height: 1px;
    background: var(--color-border-strong, #595959);
    pointer-events: none;
}
html body .ed-footer {
    border-top: 0 !important;
    position: relative;
}
/* Linea in testa al footer RIMOSSA (Andrea 14/6: sembrava eccessiva).
 * Sostituita dal reveal discreto del footer, vedi SEZ 86. */

/* Hover footer: la vecchia regola (0,3,2) imponeva text-decoration none.
 * Specchio gli stessi selettori con la sottolineatura viola. */
html body .et-l--footer .ed-footer a:hover,
html body .et-l--footer .ed-footer a:focus-visible,
html body .et-l--footer .ed-footer__col a:hover,
html body .et-l--footer .ed-footer__bottom a:hover,
html body .et-l--footer .ed-footer__legal-links a:hover {
    text-decoration: underline !important;
    text-decoration-color: #9478e8 !important;
    text-decoration-thickness: 2px !important;
    text-underline-offset: 4px !important;
}

/* ============================================================
   SEZ 82 — Fiore nell'header + logotipo footer come Divi 4
   (Andrea 11/6: "il favicon nell'header rende meglio, anche su
   mobile; footer col logotipo proporzionalmente piu' grande")
   ----------------------------------------------------------------
   - Header: simbolo fiore (estratto dal favicon, PNG trasparente
     bianco) al posto del logotipo esteso. Quadrato, 46px.
   - Sugli articoli su carta il fiore diventa NERO via filter invert
     (asset monocromatico: inversione perfetta).
   - Footer: logotipo esteso a ~143x77 come sul Divi 4 live.
   ============================================================ */
html body .et-l--header .et_pb_menu__logo img,
html body .et-l--header [class*="et_pb_menu"][class*="_tb_header"] .et_pb_menu__logo img,
html body:not(.fake) .et-l--header .et_pb_menu__logo img {
    max-height: 46px !important;
    max-width: 46px !important;
    width: auto !important;
    height: 46px !important;
}
html body .et-l--header .et_pb_menu__logo,
html body .et-l--header .et_pb_menu__logo-wrap {
    max-width: 60px !important;
}
/* articoli su carta: fiore nero */
html body.single-post .et-l--header .et_pb_menu__logo img {
    filter: invert(1) !important;
}
/* footer: logotipo grande come il Divi 4 (143x77 misurato sul live) */
html body .ed-footer__logo {
    max-height: 78px !important;
    max-width: 150px !important;
}

/* ============================================================
   SEZ 83 — Form: bottone pulito + errori visibili (Andrea 11/6)
   ----------------------------------------------------------------
   Problemi verificati con test reale via CDP:
   1. bottone enorme rispetto al testo + RIQUADRO BIANCO in hover
      (hover background bianco negli attributi inline Divi del modulo)
   2. il messaggio di validazione compare in CIMA al form, fuori
      viewport quando si clicca Invia in fondo → sembra che l'invio
      non faccia nulla (in realta' le regole obbligatorie FUNZIONANO,
      verificato: submit vuoto bloccato, submit valido reindirizza
      a /grazie-per-averci-contattato/).
   Fix: bottone compatto viola con hover viola scuro senza overlay;
   box errori evidente; scroll automatico al messaggio (animations.js).
   ============================================================ */
html body .et_pb_button,
html body .et_pb_contact_submit,
html body .et_pb_contact_form_container .et_pb_button,
html body button.et_pb_contact_submit.et_pb_button {
    background: #9478e8 !important;
    background-color: #9478e8 !important;
    background-image: none !important;
    color: #FFFFFF !important;
    font-size: 0.9375rem !important;
    font-weight: 500 !important;
    line-height: 1 !important;
    padding: 0.9em 2.2em !important;
    border: 0 !important;
    border-radius: 0 !important;
    letter-spacing: 0.02em !important;
    transition: background-color 200ms ease !important;
}
html body .et_pb_button:hover,
html body .et_pb_button:focus-visible,
html body .et_pb_contact_submit:hover,
html body button.et_pb_contact_submit.et_pb_button:hover {
    background: #6A4FD0 !important;
    background-color: #6A4FD0 !important;
    background-image: none !important;
    color: #FFFFFF !important;
    padding: 0.9em 2.2em !important;
    border: 0 !important;
}
/* niente icona/freccia Divi che sposta il testo */
html body .et_pb_button:after,
html body .et_pb_button:hover:after,
html body .et_pb_contact_submit:after {
    display: none !important;
    content: none !important;
}
/* eventuali span interni del bottone: trasparenti, mai bianchi */
html body .et_pb_button > *,
html body .et_pb_contact_submit > * {
    background: transparent !important;
    color: inherit !important;
}

/* v2 (Andrea 11/6): NIENTE riquadro con l'elenco errori. Parlano i
 * campi: bordo rosso su quelli non compilati (classe et_contact_error
 * che Divi aggiunge da solo) + scroll al primo campo rosso (JS). */
html body .et-pb-contact-message {
    display: none !important;
}
html body .et_pb_contact_field .input.et_contact_error,
html body input.et_contact_error,
html body textarea.et_contact_error,
html body .et_pb_contact_captcha.et_contact_error {
    border: 2px solid #F87171 !important;
    outline: none !important;
}
/* checkbox non spuntate: testo della label in rosso */
html body input[type="checkbox"].et_contact_error + label,
html body .et_pb_contact_field input[type="checkbox"].et_contact_error ~ label,
html body .et_pb_contact_field_checkbox .et_contact_error + label {
    color: #F87171 !important;
}

/* SEZ 83-bis: il wrapper del bottone (et_pb_button_wrapper, 175x70)
 * portava un suo sfondo viola dagli attributi inline → doppio
 * rettangolo. Wrapper trasparente e senza padding: resta solo
 * il bottone vero (101x42). */
html body .et_pb_button_wrapper,
html body .et_contact_bottom_container .et_pb_button_wrapper {
    background: transparent !important;
    background-color: transparent !important;
    padding: 0 !important;
    margin: 0 !important;
}

/* SEZ 83-ter: la regola "input dark" (riga ~2382, specificita' 0,3,3)
 * batteva il bordo rosso (0,3,2). Specchiati i suoi selettori esatti
 * + .et_contact_error: ora il rosso vince su tutti i campi. */
html body .et_pb_contact .et_pb_contact_field input[type="text"].et_contact_error,
html body .et_pb_contact .et_pb_contact_field input[type="email"].et_contact_error,
html body .et_pb_contact .et_pb_contact_field input[type="tel"].et_contact_error,
html body .et_pb_contact .et_pb_contact_field textarea.et_contact_error,
html body .et_pb_contact .et_pb_contact_field .input.et_contact_error,
html body .et_pb_contact_right input.et_pb_contact_captcha.et_contact_error {
    border: 2px solid #F87171 !important;
}
html body .et_pb_contact .et_pb_contact_field input[type="checkbox"].et_contact_error + label i {
    border: 2px solid #F87171 !important;
}

/* ======================================================================
   SEZ 84 — P2: fasi (ed-stage) annidate per errore di conversione Gutenberg
   ----------------------------------------------------------------------
   In alcune pagine (es. growth-hacking) le fasi .ed-stage sono finite
   annidate una dentro l'altra invece di essere fratelli. Ogni .ed-stage
   e' una grid "240px 1fr"; quello nidificato viene auto-collocato nella
   prima colonna (240px) del genitore e il corpo del testo si comprime a
   cascata, diventando filiforme (2-3 parole per riga).
   Forzando le fasi nidificate a occupare tutte le colonne del genitore
   tornano a piena larghezza editoriale, identiche a come apparirebbero
   se fossero fratelli. Tocca SOLO gli ed-stage annidati: le pagine con
   struttura corretta restano invariate.
   ====================================================================== */
html body .ed-stage .ed-stage {
    grid-column: 1 / -1;
}

/* SEZ 85 — RIMOSSA 2026-06-17 (consolidamento tipografia).
   .ed-stage__body e .ed-prose ora condividono la stessa scala fissa
   (17px mobile / 18px desktop) nel SISTEMA TIPOGRAFICO UNICO di
   template-demo.css: prose e stage combaciano per definizione,
   non serve più allinearli con un override !important. */

/* ======================================================================
   SEZ 86 — Footer: parallasse discreto legato allo scroll
   ----------------------------------------------------------------------
   Tolta la linea in testa, il footer prende vita con un parallasse sobrio:
   il blocco contenuti (logo, colonne) trasla in verticale piu' lento della
   pagina mentre scorri verso il fondo, "salendo" al suo posto. La variabile
   --footer-parallax (in px) e' aggiornata sullo scroll da animations.js.
   Solo via JS: senza JS o con prefers-reduced-motion il footer resta statico.
   ====================================================================== */
@media (prefers-reduced-motion: no-preference) {
    body.swg-footer-parallax .ed-footer__top {
        transform: translate3d(0, var(--footer-parallax, 0px), 0);
        will-change: transform;
    }
}

/* ======================================================================
   SEZ 87 — Mobile: le "fasi" (.ed-stage) si impilano a piena larghezza
   ----------------------------------------------------------------------
   Sotto 768px il layout a 2 colonne "auto 1fr" lasciava la label lunga a
   sinistra e schiacciava il corpo del testo a poche parole per riga (stesso
   problema editoriale risolto su desktop in SEZ 84, ma su mobile). Impilo:
   label sopra, corpo sotto, entrambi a piena larghezza. Vale per ogni pagina
   col componente ed-stage (coerenza cross-viewport).
   ====================================================================== */
@media (max-width: 767px) {
    html body .ed-stage {
        grid-template-columns: 1fr !important;
        gap: 0.5rem !important;
    }
}

/* SEZ 88 — RIMOSSA 2026-06-17 (consolidamento spaziatura).
   Padding hero/sezioni (mobile compatto, desktop scenografico) ora nella
   SPAZIATURA UNICA di template-demo.css, senza !important. */

/* ======================================================================
   SEZ 89 — #2/#3: menu mobile pulito e con voci spaziate
   ----------------------------------------------------------------------
   Il dropdown aveva un riquadro (bordo) e bordi per-voce che confondevano,
   e le voci erano attaccate (tap target piccoli). Pannello pulito, niente
   riquadri interni, padding ampio (target >=48px), sub-voci indentate.
   ====================================================================== */
html body .et_mobile_menu,
html body .et-l--header .et_pb_menu .et_mobile_menu,
html body [class*="et_pb_menu"][class*="_tb_header"] .et_mobile_menu {
    border: 0 !important;
    background: var(--color-bg) !important;
    box-shadow: 0 28px 56px rgba(0, 0, 0, 0.55) !important;
    padding: 0.5rem 0 !important;
}
html body .et_mobile_menu li,
html body .et_mobile_menu li.et_pb_menu_page_id {
    border: 0 !important;
}
html body .et_mobile_menu li a {
    padding: 15px 28px !important;     /* target ~50px */
    border: 0 !important;
    border-bottom: 0 !important;
    font-size: 1.0625rem !important;
    line-height: 1.3 !important;
}
html body .et_mobile_menu .sub-menu,
html body .et_mobile_menu ul.sub-menu {
    background: transparent !important;
    border: 0 !important;
    padding: 0 !important;
}
html body .et_mobile_menu .sub-menu li a {
    padding-left: 44px !important;
    opacity: 0.82;
    font-size: 1rem !important;
}

/* SEZ 89-bis: rinforzo specificita' padding voci menu mobile (TB header).
 * Le regole Divi del menu del Theme Builder battevano SEZ 89: aggiungo gli
 * antenati .et_mobile_nav_menu / .et-l--header per vincere il pareggio. */
html body .et_mobile_nav_menu .et_mobile_menu li a,
html body .et-l--header .et_mobile_nav_menu .et_mobile_menu li a,
html body [class*="et_pb_menu"][class*="_tb_header"] .et_mobile_nav_menu .et_mobile_menu li a,
html body [class*="et_pb_menu"][class*="_tb_header"] .et_mobile_menu li a {
    padding: 15px 28px !important;
    border-bottom: 0 !important;
    font-size: 1.0625rem !important;
    line-height: 1.3 !important;
}
html body .et_mobile_nav_menu .et_mobile_menu .sub-menu li a,
html body [class*="et_pb_menu"][class*="_tb_header"] .et_mobile_menu .sub-menu li a {
    padding: 12px 28px 12px 44px !important;
}

/* ======================================================================
   SEZ 90 — #7: icona dell'indice (Easy TOC) senza sfondo, come Divi 4
   ----------------------------------------------------------------------
   Il toggle usava le classi bottone di ez-toc (ez-toc-btn-default) con uno
   sfondo grigio. Lo rendo trasparente: resta solo l'icona, come in Divi 4.
   ====================================================================== */
.ez-toc-title-toggle a.ez-toc-pull-right,
.ez-toc-btn,
.ez-toc-btn-default,
.ez-toc-toggle {
    background: transparent !important;
    background-color: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    padding: 0 !important;
    min-width: 0 !important;
}
.ez-toc-btn svg,
.ez-toc-toggle svg { vertical-align: middle; }

/* ======================================================================
   SEZ 91 — Mobile: header nero pieno, menu senza bordi, form responsive,
            testi piu' grandi (leggibilita'). Andrea 14/6.
   ====================================================================== */

/* #1 — header mobile: sfondo NERO pieno anche nello stato sticky/fixed.
   In statico era gia' #0A0A0A, ma nello scroll appariva trasparente. */
@media (max-width: 980px) {
    html body .et-l--header,
    html body .et-l--header > .et_builder_inner_content,
    html body .et-l--header .et_pb_section,
    html body [class*="et_pb_section"][class*="_tb_header"],
    html body #main-header,
    html body #main-header.et-fixed-header,
    html body .et-fixed-header.et-l--header {
        background-color: #0A0A0A !important;
        background-image: none !important;
    }
}

/* #2 — menu mobile + mega/sotto-menu: nessun bordo, niente riquadri */
html body .et_mobile_menu,
html body .et_mobile_menu *,
html body .et_mobile_nav_menu .et_mobile_menu,
html body [class*="et_pb_menu"][class*="_tb_header"] .et_mobile_menu,
html body [class*="et_pb_menu"][class*="_tb_header"] .et_mobile_menu *,
html body #top-menu .sub-menu,
html body #top-menu li ul.sub-menu {
    border: 0 !important;
    border-top: 0 !important;
    border-bottom: 0 !important;
    box-shadow: none !important;
}
html body .et_mobile_menu {
    box-shadow: 0 28px 56px rgba(0, 0, 0, 0.55) !important;
}

/* #3 — form contatti responsive su mobile: piena larghezza, padding mobile */
@media (max-width: 767px) {
    html body.page-id-2235 .et_pb_section .et_pb_row .et_pb_column .et_pb_contact_form_container {
        max-width: none !important;
        padding-left: var(--container-padding-mobile) !important;
        padding-right: var(--container-padding-mobile) !important;
    }
    html body.page-id-2235 .et_pb_contact {
        max-width: none !important;
    }
}

/* #5 — mobile: testi corpo + footer piu' grandi (leggibilita' mezza eta') */
@media (max-width: 767px) {
    html body .ed-prose,
    html body .ed-stage__body,
    html body.single-post .ed-prose,
    html body.single-post .ed-stage__body,
    html body.single-post .et_pb_post_content p,
    html body.single-post .et_pb_post_content li {
        font-size: 1.0625rem !important;   /* 17px (era 16) */
        line-height: 1.62 !important;
    }
    html body .ed-footer__col a,
    html body .ed-footer__tagline {
        font-size: 1rem !important;        /* 16px (era 14) */
    }
}

/* SEZ 91-bis: il bump testo mobile (#5) sulle PAGINE perdeva contro la regola
 * "lead paragraph" (riga ~1750, specificita' 0,3,3 !important). Rialzo con
 * selettori di pari specificita' posti DOPO nel file, cosi' vincono il pareggio. */
@media (max-width: 767px) {
    html body.page:not(.home) .et_pb_text p,
    html body.page:not(.home) article .entry-content p,
    html body.single article .entry-content p {
        font-size: 1.0625rem !important;
        line-height: 1.62 !important;
    }
}

/* SEZ 91-ter: #1 (vero) — il MODULO MENU del header (.et_pb_menu_0_tb_header)
 * aveva background RGBA(255,255,255,0) (trasparente): nello stato sticky il
 * burger restava su sfondo trasparente sopra i testi. Lo rendo nero su mobile,
 * insieme agli stati sticky di sezione e menu. */
@media (max-width: 980px) {
    html body .et_pb_menu_0_tb_header.et_pb_menu,
    html body .et-l--header .et_pb_menu,
    html body [class*="et_pb_menu"][class*="_tb_header"].et_pb_menu,
    html body .et_pb_section_0_tb_header.et_pb_sticky,
    html body .et_pb_section_0_tb_header.et_pb_sticky--active,
    html body .et_pb_menu_0_tb_header.et_pb_sticky,
    html body .et_pb_menu_0_tb_header.et_pb_sticky--active {
        background-color: #0A0A0A !important;
    }
}

/* SEZ 92 — Mobile: qualche px di fondo nero attorno a burger + fiore (Andrea).
 * Il modulo menu aveva padding 0: le icone erano a filo. Aggiungo respiro
 * (piu' sotto) mantenendo il fondo nero. */
@media (max-width: 980px) {
    html body .et_pb_menu_0_tb_header.et_pb_menu,
    html body .et-l--header .et_pb_menu {
        padding-top: 6px !important;
        padding-bottom: 12px !important;
    }
}

/* ======================================================================
   SEZ 93 — Indice ez-toc integrato con la carta avorio dell'articolo
   ----------------------------------------------------------------------
   Il container aveva la classe ez-toc-black (box scuro): su carta avorio
   stonava. Sfondo trasparente, testo scuro, niente box, come in Divi 4.
   ====================================================================== */
html body.single-post #ez-toc-container,
html body.single-post .ez-toc-container,
html body.single-post #ez-toc-container.ez-toc-black {
    background: transparent !important;
    background-color: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
}
html body.single-post #ez-toc-container .ez-toc-title,
html body.single-post #ez-toc-container a,
html body.single-post #ez-toc-container li,
html body.single-post #ez-toc-container .ez-toc-list a {
    color: #161310 !important;
}
html body.single-post #ez-toc-container svg {
    fill: #161310 !important;
    color: #161310 !important;
}

/* ======================================================================
   SEZ 94 — #4: via il "tassello" dei mega/sotto-menu
   ----------------------------------------------------------------------
   Il pannello dei sub-menu (incl. mega-menu "Focus settoriali") aveva
   sfondo #111 (piu' chiaro della pagina #0A0A0A) + bordo 2px: si leggeva
   come una piastrella, con spazio vuoto a destra. Sfondo uguale alla
   pagina + niente bordo + ombra sottile per la profondita': non si legge
   piu' come un tassello. Vale per TUTTI i sub-menu dell'header (desktop).
   Su mobile i sub-menu sono gia' gestiti (SEZ 91): bg pagina, niente bordi.
   ====================================================================== */
html body .et_pb_menu .sub-menu,
html body [class*="et_pb_menu"][class*="_tb_header"] .sub-menu,
html body #top-menu .sub-menu,
html body .et-menu .sub-menu {
    background-color: #0A0A0A !important;
    border: 0 !important;
    box-shadow: 0 24px 48px rgba(0, 0, 0, 0.55) !important;
}

/* SEZ 95 — RIMOSSA 2026-06-17 (consolidamento tipografia).
   Il peso 500 del sotto-titolo hero (.ed-hero__lead) è ora nel
   SISTEMA TIPOGRAFICO UNICO di template-demo.css. */

/* ======================================================================
   SEZ 96 — #4 (vero fix): mega-menu senza "pettine" ne' fondo mancante
   ----------------------------------------------------------------------
   Causa reale: il pannello era largo 640px ma la griglia 240+240+240=720px,
   quindi la 3a colonna sforava di 80px OLTRE lo sfondo -> testo senza fondo
   a destra + bordo frastagliato (pettine). Il SEZ 94 non vinceva (Divi
   imponeva #111 con specificita' maggiore). Qui: larghezza = contenuto, cosi'
   lo sfondo copre TUTTE le colonne; sfondo solido pulito; niente bordo.
   Alta specificita' per battere Divi. Vale per tutti i sub-menu dell'header.
   ====================================================================== */
html body .et_pb_menu .et-menu li > ul.sub-menu,
html body [class*="et_pb_menu"][class*="_tb_header"] .et-menu li > ul.sub-menu,
html body [class*="et_pb_menu"][class*="_tb_header"] li > ul.sub-menu,
html body li[class*="et_pb_menu_page_id"] > ul.sub-menu {
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    background-color: #121212 !important;
    border: 0 !important;
    box-shadow: 0 24px 48px rgba(0, 0, 0, 0.5) !important;
}

/* SEZ 97 — Mobile: meta/eyebrow dell'hero (sito + sezione col pallino) era in
   flex nowrap → su mobile le due etichette si schiacciavano e la seconda andava
   a capo storta (vedi growth-hacking). Su mobile: impilate in colonna a
   sinistra, pallino nascosto. */
@media (max-width: 767px) {
    html body .ed-hero__meta {
        flex-direction: column !important;
        align-items: flex-start !important;
        gap: 0.35rem !important;
        flex-wrap: wrap !important;
    }
    html body .ed-hero__meta .dot {
        display: none !important;
    }
}

/* SEZ 98 — RIMOSSA 2026-06-17 (consolidamento tipografia).
   Dimensione mobile del sotto-titolo (.ed-stage__label) ora fissa a
   24px nel SISTEMA TIPOGRAFICO UNICO di template-demo.css. */

/* ======================================================================
   SEZ 99 — #5 (Andrea 17/6): byline ingrandita e spezzata su mobile
   ----------------------------------------------------------------------
   La regola mobile generica .et_pb_post_content p (1.0625rem) sovrascriveva
   il font 11px della byline, gonfiandola a 17px: "Autore: Andrea Di Bert"
   andava a capo su piu' righe e metteva il nome in evidenza individuale
   (contro le regole identitarie). La riporto a 11px come desktop, con il
   wrap pulito su una/due righe ordinate.
   ====================================================================== */
@media (max-width: 767px) {
    html body.single-post .et_pb_post_content .swg-post-byline,
    html body.single-post .swg-post-byline {
        font-size: 11px !important;
        flex-wrap: wrap !important;
        row-gap: 0.25rem !important;
    }
    html body.single-post .et_pb_post_content .swg-post-byline span,
    html body.single-post .swg-post-byline span {
        font-size: 11px !important;
    }
}

/* SEZ 100 — RIMOSSA 2026-06-17 (consolidamento spaziatura).
   Spaziatura sezioni articoli (4rem, prima 2rem, ultima 7rem) ora nella
   SPAZIATURA UNICA di template-demo.css, senza !important. L'intento di
   Andrea del 17/6 (sezioni articolo compatte) è preservato. */

/* ======================================================================
   SEZ 101 — #3/#7 (Andrea 17/6 URGENTE): testa articolo mobile
   ----------------------------------------------------------------------
   (a) MENU' INVISIBILE: l'header degli articoli e' progettato "su carta"
       (avorio) con logo nero invertito e voci scure, ma lo sfondo
       renderizzava scuro e l'hamburger restava bianco -> tutto invisibile
       (nero su nero). Forzo lo sfondo avorio reale dell'header e
       l'hamburger scuro, cosi' logo + menu + hamburger si vedono.
   (b) SPAZIO ENORME sopra il titolo: l'hero su mobile aveva padding-top
       4.5rem. Lo riduco a 2rem (la testa non deve "cadere in basso").
   Tutto scoped a .single-post: le pagine dark non sono toccate.
   ====================================================================== */
html body.single-post .et-l--header,
html body.single-post .et-l--header .et_pb_section,
html body.single-post .et-l--header .et_pb_row,
html body.single-post .et-l--header .et_pb_row_0_tb_header,
html body.single-post .et-l--header .et_pb_menu {
    background-color: #F7EFDC !important;
}
/* Il pannello del dropdown mobile (.et_mobile_menu) e' figlio di .et_pb_menu:
   la regola avorio qui sopra lo coloriva (regressione "fondo cambiato" 17/6).
   Lo riporto al suo scuro originale; questa regola, piu' in basso e a pari
   specificita', vince. La barra resta avorio, il dropdown torna scuro. */
html body.single-post .et-l--header .et_mobile_menu {
    background-color: var(--color-bg, #0A0A0A) !important;
}
html body.single-post .mobile_menu_bar:before,
html body.single-post .et-l--header .mobile_menu_bar:before {
    color: #161310 !important;
}
@media (max-width: 767px) {
    html body.single-post .et-l--body .ed-hero {
        padding-top: 2rem !important;
    }
}

/* SEZ 102 — RIMOSSA 2026-06-17 (consolidamento tipografia).
   Il sotto-titolo (.ed-stage__label) è ora nel SISTEMA TIPOGRAFICO
   UNICO di template-demo.css: 24px mobile / 28px desktop, semibold,
   nettamente distinto dal body (17/18px) e sotto l'H2. L'intento di
   Andrea del 17/6 (sotto-titoli grandi e semibold, distinti dal corpo)
   è preservato senza !important. */

/* ======================================================================
   SEZ 103 — FAQ a scomparsa: blocco NATIVO WP "Dettagli" (.wp-block-details)
   ----------------------------------------------------------------------
   Blocchi <details> nativi = EDITABILI nell'editor a blocchi (Andrea corregge
   domanda/risposta come testo normale) + a scomparsa nativi (chiusi di
   default). Testo sempre nel DOM (motori/AI). Schema FAQPage generato da
   functions.php (swg_faq_schema). Design su carta avorio dell'articolo.
   ====================================================================== */
.swg-faq { margin: 2.5rem 0 0 0; }
/* Vale per OGNI FAQ a scomparsa del sito: articolo (in .swg-faq) e pagina FAQ
 * (blocchi nativi standalone). Su questo sito wp:details = solo FAQ. */
.wp-block-details {
    border-bottom: 1px solid var(--color-border, #404040);
    margin: 0;
}
.wp-block-details:first-of-type { border-top: 1px solid var(--color-border, #404040); }
.wp-block-details > summary {
    list-style: none;
    cursor: pointer;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1.5rem;
    padding: 1.5rem 0;
    font-size: 1.875rem;          /* 30px, come gli H3 */
    font-weight: 600;
    line-height: 1.25;
    letter-spacing: -0.01em;
    color: var(--color-fg, #FFFFFF);   /* bianco su pagina dark */
    transition: opacity 0.2s ease;
}
.wp-block-details > summary::-webkit-details-marker { display: none; }
.wp-block-details > summary:hover { opacity: 0.6; }
/* indicatore a chevron che ruota all'apertura */
.wp-block-details > summary::after {
    content: "";
    flex: 0 0 auto;
    width: 12px; height: 12px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(45deg);
    transition: transform 0.25s ease;
    margin-top: 0.7rem;
}
.wp-block-details[open] > summary::after { transform: rotate(-135deg); }
/* corpo risposta */
.wp-block-details > :not(summary) {
    padding: 0 0 1.75rem 0;
    margin: 0;
    max-width: 720px;
    font-size: 1.0625rem;
    line-height: 1.7;
}
.wp-block-details[open] > :not(summary) { animation: swgFaqIn 0.25s ease; }
/* ARTICOLO su carta avorio (single-post): testo e bordi scuri */
html body.single-post .wp-block-details > summary { color: #161310 !important; }
html body.single-post .wp-block-details,
html body.single-post .wp-block-details:first-of-type { border-color: rgba(22, 19, 16, 0.16); }
/* La pagina FAQ tiene i blocchi Dettagli dentro wrapper .ed-stage (griglia
 * 240px+1fr): le domande finivano nella colonnina stretta. Quando un .ed-stage
 * contiene FAQ a scomparsa lo rendo a blocco pieno. */
.ed-stage:has(> .wp-block-details),
.ed-stage:has(.wp-block-details) {
    display: block;
    grid-template-columns: none;
    padding: 0;
    border: 0;
}
@keyframes swgFaqIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }

/* ======================================================================
   SEZ 104 — #4 (Andrea 17/6): più aria ai lati su MOBILE
   ----------------------------------------------------------------------
   Footer (ed-footer ha padding orizzontale 0) e burger del menu erano a
   filo del bordo schermo: footer difficile da leggere, burger difficile da
   toccare. Aggiungo respiro laterale solo sotto 767px.
   ====================================================================== */
@media (max-width: 767px) {
    html body .ed-footer {
        padding-left: var(--space-5) !important;   /* 24px */
        padding-right: var(--space-5) !important;
    }
    /* burger distanziato dal bordo destro (il logo a sinistra è già ok) */
    html body .et-l--header .et_pb_menu_0_tb_header,
    html body .et-l--header [class*="_tb_header"].et_pb_menu {
        padding-right: var(--space-5) !important;  /* 24px */
        padding-left: var(--space-4) !important;
    }
}

/* ======================================================================
   SEZ 105 — #1 (Andrea 17/6): meno vuoto attorno a "Altre analisi" su MOBILE
   ----------------------------------------------------------------------
   Sopra il widget si sommavano: padding-bottom 7rem dell'ultima sezione
   (SEZ 100) + margin-top 4rem + padding-top 3rem del widget = ~220px di vuoto.
   Compatto su mobile, mantenendo un respiro pulito.
   ====================================================================== */
@media (max-width: 767px) {
    html body.single-post .ed-template-wrapper > .ed-section:last-of-type {
        padding-bottom: 3rem !important;
    }
    html body .swg-other-articles {
        margin-top: 0 !important;
        padding-top: 2rem !important;
        padding-left: var(--space-5) !important;   /* 24px: aria dal bordo (come footer) */
        padding-right: var(--space-5) !important;
        margin-bottom: 3rem !important;
    }
}

/* ======================================================================
   SEZ 106 — #scroll (Andrea 18/6): header articolo FISSO su mobile pulito
   ----------------------------------------------------------------------
   Scorrendo, l'header fisso passava sopra l'immagine hero scura con un edge
   brusco / trasparenze (il "casino"). Lo rendo pienamente OPACO avorio (niente
   backdrop-filter, niente bleed) con un'ombra sottile, così copre l'immagine
   in modo pulito durante lo scroll. Solo articoli, solo mobile.
   ====================================================================== */
@media (max-width: 980px) {
    html body.single-post .et-l--header,
    html body.single-post .et-l--header .et_pb_section,
    html body.single-post .et_pb_section_0_tb_header.et_pb_sticky,
    html body.single-post .et_pb_section_0_tb_header.et_pb_sticky--active,
    html body.single-post .et_pb_menu_0_tb_header.et_pb_menu,
    html body.single-post .et_pb_menu_0_tb_header.et_pb_sticky,
    html body.single-post .et_pb_menu_0_tb_header.et_pb_sticky--active {
        background-color: #F7EFDC !important;
        backdrop-filter: none !important;
        -webkit-backdrop-filter: none !important;
    }
    html body.single-post .et-l--header.et-fixed-header,
    html body.single-post .et_pb_section_0_tb_header.et_pb_sticky--active {
        box-shadow: 0 2px 14px rgba(22, 19, 16, 0.12) !important;
    }
}

/* ======================================================================
   SEZ 107 — Blog grid: placeholder di caricamento (skeleton + fiore Swing)
   + dissolvenza immagini (Andrea 20/6)
   ----------------------------------------------------------------------
   Le card del modulo Blog usano lazy-load (SiteGround / lazysizes): finche'
   l'immagine non entra in viewport mostra un placeholder. Prima era un box
   NERO = sembrava una card vuota / un errore. Ora il placeholder e' un
   riquadro ardesia con il fiore Swing tenue al centro + un leggero shimmer
   = segnale chiaro "contenuto Swing in arrivo". Quando lazysizes carica la
   foto (toglie la classe .lazyload), lo skeleton svanisce e l'immagine
   compare in dissolvenza (crossfade, niente flash nero).
   Robustezza: lo skeleton sta DIETRO l'immagine (z-index 0 vs 1). Se un
   browser non supporta :has(), l'immagine si vede comunque (resta solo una
   sottile fascia ardesia sotto la foto). Mai immagini nascoste.
   Ambito: solo griglie blog (.et-blog-css-grid). Logo via path
   root-relative => valido identico su staging e su produzione.
   ====================================================================== */
.et-blog-css-grid .et_pb_post .entry-featured-image-url {
    background-color: #20232b !important; /* batte la regola #141414 !important preesistente */
    position: relative;
    isolation: isolate; /* crea uno stacking context: i pseudo a z-index -1 stanno
                            SOPRA lo sfondo grigio (fiore visibile) ma SOTTO l'immagine */
}
.et-blog-css-grid .entry-featured-image-url::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1; /* DIETRO l'immagine: l'immagine nel flusso normale resta sempre sopra */
    pointer-events: none;
    background: linear-gradient(100deg, transparent 30%, rgba(255,255,255,.06) 50%, transparent 70%);
    background-size: 220% 100%;
    background-repeat: no-repeat;
    animation: swgSkel 1.7s ease-in-out infinite;
    transition: opacity .6s ease;
}
.et-blog-css-grid .entry-featured-image-url::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1; /* DIETRO l'immagine */
    pointer-events: none;
    background: url(/wp-content/uploads/2026/06/swing-fiore-bianco.png) center center / 54px no-repeat;
    opacity: .22;
    transition: opacity .6s ease;
}
.et-blog-css-grid .entry-featured-image-url img.et_pb_post_main_image {
    opacity: 0;
    transition: opacity .6s ease;
}
.et-blog-css-grid .entry-featured-image-url img.et_pb_post_main_image:not(.lazyload) {
    opacity: 1;
}
/* NB: lo skeleton (bg + pseudo) NON viene nascosto al load: resta DIETRO
   l'immagine (z-index -1) e viene coperto dalla foto opaca quando questa e'
   davvero disegnata. Cosi' sulle immagini pesanti non c'e' il flash nero tra
   "lazysizes la marca caricata" e "il browser la disegna". L'immagine riempie
   la card (object-fit cover), quindi lo skeleton resta invisibile sotto. */
@keyframes swgSkel {
    0%   { background-position: 170% 0; }
    100% { background-position: -170% 0; }
}

/* =============================================================
 * SEZ 108. FONT DEL CORPO = Inter ovunque (2026-06-21)
 *   Divi imposta "Open Sans" come font di default su body e moduli
 *   testo. Il design v2 vuole Inter unico (vedi --font-sans). Avendo
 *   rimosso il caricamento di Open Sans (flag Divi "Use Google Fonts"
 *   + preload SiteGround), senza questa regola il corpo ripiegherebbe
 *   su Arial di sistema. Qui forziamo Inter sul testo. NON tocchiamo:
 *   - i titoli (gia' Inter via i loro selettori),
 *   - i mono/eyebrow (.ed-*__label ecc.): hanno classe dedicata con
 *     var(--font-mono) a specificita' >= di questa regola,
 *   - le icone Divi (font ETmodules su ::before, non selezionato qui).
 * ============================================================= */
body,
.et_pb_text, .et_pb_text_inner,
.et_pb_blurb_description, .et_pb_toggle_content,
.et_pb_tab_content, .et_pb_accordion .et_pb_toggle_content,
.et_pb_post_content, .et_pb_post_content p, .et_pb_post_content li,
p, li, dd, dt, blockquote, figcaption,
table, td, th,
input, textarea, select, button {
    font-family: var(--font-sans) !important;
}
/* Protezione mono: ripristina JetBrains Mono su eyebrow, numeri e meta
   (la regola sopra, con !important su elementi, li sovrascriverebbe). */
.ed-eyebrow, .ed-hero__meta,
.ed-pillar__num, .ed-section__num, .ed-stage__num,
.ed-sectors .sec-num, .ed-studies .st-date,
.ed-stage__label, [class*="eyebrow"], [class*="__label"], [class*="__num"],
.demo-banner,
#footer-widgets h4, #sidebar h4.widgettitle,
.et_pb_post .post-meta a, .single-post .post-meta a, .pagination span,
.text-mono, code, kbd, samp, pre {
    font-family: var(--font-mono) !important;
}
