{"id":343,"date":"2026-09-14T19:10:12","date_gmt":"2026-09-14T19:10:12","guid":{"rendered":"https:\/\/coloridicalabria.it\/Prova\/?page_id=343"},"modified":"2026-10-25T20:27:49","modified_gmt":"2026-10-25T20:27:49","slug":"colori-di-calabria","status":"publish","type":"page","link":"https:\/\/coloridicalabria.it\/?page_id=343","title":{"rendered":"10 Colori di Calabria"},"content":{"rendered":"\n<div class=\"wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow\" style=\"padding-top:0;padding-bottom:0\">    <div id=\"cdc-galleria-1\" class=\"cdc-galleria-filtrabile\"\n         data-ajax-url=\"https:\/\/coloridicalabria.it\/wp-admin\/admin-ajax.php\"\n         data-nonce=\"66d0ac375b\"\n         data-folder-term-id=\"63\"\n         data-folder=\"10-colori-di-calabria\"\n         data-layout=\"masonry\"\n         data-columns=\"5\"\n         data-grid-columns=\"4\"\n         data-card-height=\"270\"\n         data-per-page=\"50\"\n         data-limit=\"0\"\n         data-tile=\"auto\"\n         data-row-height=\"250\"\n         data-masonry-fit=\"cover\"\n         data-masonry-columns=\"3\"\n         data-hover=\"title,description\"\n         data-lightbox=\"title,description,comune,provincia,periodo,tipologia\">\n\n        <div class=\"cdc-toolbar\">\n                        <input type=\"hidden\" class=\"cdc-filtro-provincia\" value=\"\">\n            <input type=\"hidden\" class=\"cdc-filtro-comune\" value=\"\">\n            \n            <div class=\"cdc-toolbar-main\">\n                <div class=\"cdc-view-switcher\" role=\"group\" aria-label=\"Visualizzazione galleria\">\n                    <button type=\"button\" data-view=\"masonry\" title=\"Masonry orizzontale\">\u25a5 <span>Masonry<\/span><\/button>\n                    <button type=\"button\" data-view=\"grid\" title=\"Griglia\">\u25a6 <span>Griglia<\/span><\/button>\n                <\/div>\n                <form class=\"cdc-filtri cdc-search-form\">\n                    <div class=\"cdc-search-wrap\">\n                        <input type=\"search\" class=\"cdc-filtro-ricerca\" placeholder=\"Cerca nell\u2019archivio...\" aria-label=\"Cerca nell'archivio\" \/>\n                        <button type=\"button\" class=\"cdc-btn-reset\" aria-label=\"Azzera ricerca\" title=\"Azzera ricerca\">\u00d7<\/button>\n                    <\/div>\n                    <button type=\"submit\" class=\"cdc-btn-search\">Cerca<\/button>\n                <\/form>\n            <\/div>\n        <\/div>\n\n        <nav class=\"cdc-pagination cdc-pagination-top\" aria-label=\"Paginazione superiore\" style=\"display:none;\"><\/nav>\n        <div class=\"cdc-risultati\" data-page=\"1\">\n            <p class=\"cdc-loading\">Caricamento immagini...<\/p>\n        <\/div>\n\n        <nav class=\"cdc-pagination\" aria-label=\"Paginazione galleria\" style=\"display:none;\">\n            <div class=\"cdc-page-size-zone\"><label class=\"cdc-page-size-wrap\">Immagini per pagina\n                <select class=\"cdc-page-size\" aria-label=\"Immagini per pagina\">\n                    <option value=\"20\">20<\/option><option value=\"40\">40<\/option><option value=\"60\">60<\/option>\n                <\/select><\/label><\/div>\n            <div class=\"cdc-page-navigation-zone\">\n                <button type=\"button\" class=\"cdc-page-prev\"><span class=\"cdc-label-full\">\u2039 Precedente<\/span><span class=\"cdc-label-short\" aria-hidden=\"true\">\u2039 Prec.<\/span><\/button>\n                <span class=\"cdc-page-numbers\"><\/span>\n                <button type=\"button\" class=\"cdc-page-next\"><span class=\"cdc-label-full\">Successiva \u203a<\/span><span class=\"cdc-label-short\" aria-hidden=\"true\">Succ. \u203a<\/span><\/button>\n            <\/div>\n            <div class=\"cdc-page-jump-zone\">\n                <button type=\"button\" class=\"cdc-page-go\">Vai a pag.<\/button>\n                <input class=\"cdc-page-jump\" type=\"number\" min=\"1\" aria-label=\"Numero pagina di destinazione\">\n            <\/div>\n        <\/nav>\n    <\/div>\n\n    <style>\n    #cdc-galleria-1 { --cdc-gap:14px; --cdc-columns:4; --cdc-card-height:270px; --cdc-masonry-columns:3; margin:20px 0; }\n    #cdc-galleria-1 .cdc-toolbar { margin-bottom:18px; }\n    #cdc-galleria-1 .cdc-toolbar-main { display:flex; align-items:center; justify-content:space-between; gap:16px; }\n    #cdc-galleria-1 .cdc-tax-filters { display:flex; gap:10px; margin-bottom:10px; }\n    #cdc-galleria-1 .cdc-filtri { display:flex; gap:8px; align-items:center; margin:0; }\n    #cdc-galleria-1 .cdc-filtri select,\n    #cdc-galleria-1 .cdc-filtri input[type=\"search\"] { padding:8px 12px; border:1px solid #ccc; border-radius:5px; min-height:42px; }\n    #cdc-galleria-1 .cdc-filtri select { min-width:210px; }\n    #cdc-galleria-1 .cdc-filtri input[type=\"search\"] { width:100%; min-width:240px; padding-right:38px; }\n    #cdc-galleria-1 .cdc-search-form { margin-left:auto; flex:1; justify-content:flex-end; max-width:720px; }\n    #cdc-galleria-1 .cdc-search-wrap { position:relative; flex:1; min-width:260px; }\n    #cdc-galleria-1 .cdc-search-wrap .cdc-btn-reset { display:none; position:absolute; right:4px; top:4px; width:34px; min-height:34px; height:34px; padding:0; border:0; background:transparent; font-size:24px; line-height:30px; color:#666; }\n    #cdc-galleria-1 .cdc-search-wrap.has-text .cdc-btn-reset { display:block; }\n    #cdc-galleria-1 button { padding:7px 11px; border:1px solid #ccc; border-radius:5px; background:#f7f7f7; cursor:pointer; min-height:36px; }\n    #cdc-galleria-1 .cdc-btn-search { min-width:72px; font-weight:600; }\n    #cdc-galleria-1 .cdc-view-switcher { display:flex; gap:5px; justify-content:flex-start; flex:0 0 auto; }\n    #cdc-galleria-1 .cdc-view-switcher button { padding:5px 9px; min-height:34px; font-size:14px; line-height:1.1; }\n    #cdc-galleria-1 .cdc-view-switcher button.is-active { background:#222; color:#fff; border-color:#222; }\n\n    #cdc-galleria-1 figure.cdc-item { margin:0; min-width:0; position:relative; overflow:visible; border-radius:4px; }\n    #cdc-galleria-1 .cdc-image-link { display:block; position:relative; overflow:hidden; text-decoration:none; border-radius:4px; }\n    #cdc-galleria-1 .cdc-image-link img { width:100%; display:block; }\n\n    \/* GRID *\/\n    #cdc-galleria-1[data-layout=\"grid\"] .cdc-risultati { display:grid; grid-template-columns:repeat(var(--cdc-columns),minmax(0,1fr)); gap:var(--cdc-gap); }\n    #cdc-galleria-1[data-layout=\"grid\"] .cdc-image-link { aspect-ratio:1 \/ 1; }\n    #cdc-galleria-1[data-layout=\"grid\"] .cdc-image-link img { width:100%; height:100%; object-fit:cover; }\n\n    \/* MASONRY ORIZZONTALE: righe a altezza uniforme, larghezza proporzionale *\/\n    #cdc-galleria-1[data-layout=\"masonry\"] .cdc-risultati { display:flex; flex-wrap:wrap; gap:5px; align-items:flex-start; }\n    #cdc-galleria-1[data-layout=\"masonry\"] .cdc-risultati::after { content:\"\"; flex-grow:999999; }\n    #cdc-galleria-1[data-layout=\"masonry\"] figure.cdc-item { flex-grow:var(--cdc-grow,1); flex-basis:calc(var(--cdc-ratio,1.5) * var(--cdc-row-height)); }\n    #cdc-galleria-1[data-layout=\"masonry\"][data-masonry-fit=\"cover\"] .cdc-image-link img { height:var(--cdc-row-height); object-fit:cover; }\n    \/* MASONRY DOCUMENTALE: ordine per righe, immagini complete, nessun crop *\/\n    #cdc-galleria-1[data-layout=\"masonry\"][data-masonry-fit=\"contain\"] .cdc-risultati {\n        display:flex; flex-wrap:wrap; gap:5px; align-items:flex-start;\n    }\n    #cdc-galleria-1[data-layout=\"masonry\"][data-masonry-fit=\"contain\"] .cdc-risultati::after { display:none; }\n    #cdc-galleria-1[data-layout=\"masonry\"][data-masonry-fit=\"contain\"] figure.cdc-item { width:auto; }\n    #cdc-galleria-1[data-layout=\"masonry\"][data-masonry-fit=\"contain\"] .cdc-image-link { display:block; width:100%; background:transparent; }\n    #cdc-galleria-1[data-layout=\"masonry\"][data-masonry-fit=\"contain\"] .cdc-image-link img {\n        display:block; width:100%; height:auto; object-fit:contain; background:transparent;\n    }\n\n    \/* SCHEDE \u2014 stile archivio: immagine pulita, gerarchia testuale, metadati a badge *\/\n    #cdc-galleria-1[data-layout=\"cards\"] .cdc-risultati { display:grid; grid-template-columns:1fr; gap:14px; }\n    #cdc-galleria-1[data-layout=\"cards\"] figure.cdc-item { display:grid; grid-template-columns:minmax(210px,28%) 1fr; gap:22px; align-items:stretch; border:1px solid #e1e4e8; border-radius:7px; padding:9px; overflow:visible; min-height:var(--cdc-card-height); background:#fff; box-shadow:0 1px 2px rgba(0,0,0,.035); }\n    #cdc-galleria-1[data-layout=\"cards\"] .cdc-image-link { height:var(--cdc-card-height); background:#fafafa; border-radius:5px; overflow:hidden; }\n    #cdc-galleria-1[data-layout=\"cards\"] .cdc-image-link img { width:100%; height:100%; object-fit:contain; background:#fafafa; }\n    #cdc-galleria-1[data-layout=\"cards\"] .cdc-card-info { display:flex; flex-direction:column; min-width:0; width:92%; height:var(--cdc-card-height); overflow:hidden; padding:7px 12px 7px 0; }\n\n    \/* Tooltip esterno: il JS lo posiziona sotto l'immagine oppure sopra se manca spazio nel viewport. *\/\n    #cdc-galleria-1 .cdc-overlay { position:fixed; left:0; top:0; width:max-content; max-width:min(380px,calc(100vw - 24px)); padding:9px 11px; background:rgba(20,20,20,.95); color:#fff; border-radius:6px; box-shadow:0 5px 18px rgba(0,0,0,.24); opacity:0; transform:translateY(-3px); transition:opacity .12s ease,transform .12s ease; pointer-events:none; z-index:100050; visibility:hidden; }\n    #cdc-galleria-1 .cdc-overlay.is-open { opacity:1; transform:translateY(0); visibility:visible; }\n    #cdc-galleria-1 .cdc-image-link:hover { z-index:40; }\n    #cdc-galleria-1 figure.cdc-item:hover { z-index:60; }\n    #cdc-galleria-1 .cdc-overlay-title { display:block; font-weight:600; line-height:1.25; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n    #cdc-galleria-1 .cdc-overlay-meta { display:block; font-size:.84em; margin-top:3px; opacity:.85; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n    #cdc-galleria-1 .cdc-card-info { display:none; }\n    #cdc-galleria-1 .cdc-card-title { font-weight:650; font-size:1.08em; line-height:1.28; margin:0 0 9px; color:#45698d; }\n    #cdc-galleria-1 .cdc-card-caption { margin:0 0 9px; font-size:.96em; line-height:1.42; font-style:italic; color:#665c53; }\n    #cdc-galleria-1 .cdc-card-description { margin:8px 0 0; padding-right:10px; font-size:.93em; line-height:1.48; color:#444; overflow:auto; min-height:0; scrollbar-width:thin; scrollbar-color:#6f8fb0 #edf2f6; }\n    #cdc-galleria-1 .cdc-card-description::-webkit-scrollbar { width:8px; }\n    #cdc-galleria-1 .cdc-card-description::-webkit-scrollbar-track { background:#edf2f6; border-radius:8px; }\n    #cdc-galleria-1 .cdc-card-description::-webkit-scrollbar-thumb { background:#6f8fb0; border-radius:8px; border:2px solid #edf2f6; }\n    #cdc-galleria-1 .cdc-card-description::-webkit-scrollbar-thumb:hover { background:#557795; }\n    #cdc-galleria-1 .cdc-card-meta { display:flex; flex-wrap:wrap; align-items:center; gap:6px; margin:1px 0 2px; padding:2px 0 5px; font-size:.80em; line-height:1.25; flex:0 0 auto; }\n    #cdc-galleria-1 .cdc-card-badge { display:inline-block; padding:5px 8px; border:1px solid #dde3e9; border-radius:999px; color:#536170; white-space:nowrap; }\n    #cdc-galleria-1 .cdc-card-badge strong { font-weight:650; color:#394959; }\n    #cdc-galleria-1 .cdc-badge-provincia { background:#eef5fb; border-color:#d6e6f3; }\n    #cdc-galleria-1 .cdc-badge-comune { background:#f1f7f1; border-color:#dcebdc; }\n    #cdc-galleria-1 .cdc-badge-tipologia { background:#fbf6ea; border-color:#eee2c7; }\n    #cdc-galleria-1 details.cdc-comuni-many { display:inline-block; position:relative; }\n    #cdc-galleria-1 details.cdc-comuni-many > summary { cursor:pointer; list-style:none; }\n    #cdc-galleria-1 details.cdc-comuni-many > summary::-webkit-details-marker { display:none; }\n    #cdc-galleria-1 .cdc-comuni-list { margin-top:5px; padding:7px 9px; max-width:100%; border:1px solid #dcebdc; border-radius:6px; background:#f8fbf8; color:#4e5d4e; line-height:1.4; }\n    #cdc-galleria-1 .cdc-mobile-info { display:none; padding:6px 2px 2px; }\n    #cdc-galleria-1 .cdc-mobile-title { font-weight:600; }\n    #cdc-galleria-1 .cdc-mobile-meta { font-size:.86em; color:#666; }\n\n    #cdc-galleria-1 .cdc-nessun-risultato,\n    #cdc-galleria-1 .cdc-loading { width:100%; grid-column:1\/-1; text-align:center; padding:30px 0; color:#777; }\n    #cdc-galleria-1 .cdc-page-size-wrap { display:flex; align-items:center; gap:6px; white-space:nowrap; font-size:13px; }\n    #cdc-galleria-1 .cdc-page-size { min-height:36px; padding:4px 6px; border:1px solid #ccd4dc; border-radius:5px; }\n    #cdc-galleria-1 .cdc-search-form { max-width:440px; }\n    #cdc-galleria-1 .cdc-pagination-top { margin:4px 0 14px; }\n    #cdc-galleria-1 .cdc-page-numbers { display:inline-flex; align-items:center; gap:5px; flex-wrap:wrap; }\n    #cdc-galleria-1 .cdc-page-num { min-width:32px; padding:6px 8px; }\n    #cdc-galleria-1 .cdc-page-num.is-current { font-weight:700; background:#dcecf8; }\n    #cdc-galleria-1 .cdc-page-jump-label { font-size:13px; white-space:nowrap; }\n    #cdc-galleria-1 .cdc-page-jump { width:60px; min-height:34px; padding:4px; }\n    @media (max-width:700px) {\n      #cdc-galleria-1 .cdc-toolbar-main { flex-wrap:wrap; }\n      #cdc-galleria-1 .cdc-search-form { flex-basis:100%; max-width:none; }\n      #cdc-galleria-1 .cdc-pagination { gap:6px; }\n      #cdc-galleria-1 .cdc-page-numbers { display:none; }\n    }\n    #cdc-galleria-1 .cdc-pagination { display:flex; justify-content:center; align-items:center; gap:10px; margin:20px 0 4px; flex-wrap:wrap; }\n    #cdc-galleria-1 .cdc-pagination .cdc-page-info { min-width:120px; text-align:center; font-size:14px; color:#444; }\n    #cdc-galleria-1 .cdc-pagination button:disabled { opacity:.45; cursor:default; }\n    #cdc-galleria-1 .cdc-pagination { justify-content:flex-start; gap:8px; }\n    #cdc-galleria-1 .cdc-pagination .cdc-page-size-wrap { margin-right:18px; }\n    #cdc-galleria-1 .cdc-pagination .cdc-page-jump-label { margin-left:auto; }\n    #cdc-galleria-1 .cdc-pagination .cdc-page-prev,\n    #cdc-galleria-1 .cdc-pagination .cdc-page-next,\n    #cdc-galleria-1 .cdc-pagination .cdc-page-go,\n    #cdc-galleria-1 .cdc-pagination .cdc-page-num { font-size:14px; padding:6px 9px; line-height:1.3; }\n    @media (max-width:900px) {\n      #cdc-galleria-1 .cdc-pagination .cdc-page-jump-label { margin-left:8px; }\n    }\n\n\n    @media (max-width:1024px) {\n        #cdc-galleria-1 { --cdc-columns:min(3, 4); }\n        #cdc-galleria-1[data-layout=\"masonry\"][data-masonry-fit=\"contain\"] { --cdc-masonry-columns:2; }\n        #cdc-galleria-1 .cdc-toolbar-main { align-items:flex-start; }\n    }\n    @media (max-width:600px) {\n        #cdc-galleria-1 { --cdc-columns:1; --cdc-masonry-columns:1; }\n        #cdc-galleria-1 .cdc-toolbar-main { flex-direction:column; gap:10px; }\n        #cdc-galleria-1 .cdc-view-switcher { width:100%; }\n        #cdc-galleria-1 .cdc-search-form { width:100%; max-width:none; margin-left:0; }\n        #cdc-galleria-1 .cdc-search-wrap { min-width:0; }\n        #cdc-galleria-1 .cdc-filtri input[type=\"search\"] { width:100%; min-width:0; }\n        #cdc-galleria-1 .cdc-btn-search { flex:0 0 auto; }\n        #cdc-galleria-1 .cdc-view-switcher button span { display:none; }\n        #cdc-galleria-1[data-layout=\"masonry\"] .cdc-risultati { display:block; }\n        #cdc-galleria-1[data-layout=\"masonry\"] figure.cdc-item { margin-bottom:14px; }\n        #cdc-galleria-1[data-layout=\"masonry\"] .cdc-image-link img { height:auto !important; object-fit:contain; }\n        #cdc-galleria-1[data-layout=\"cards\"] figure.cdc-item { grid-template-columns:1fr; }\n        #cdc-galleria-1[data-layout=\"cards\"] .cdc-image-link { height:auto; }\n        #cdc-galleria-1[data-layout=\"cards\"] .cdc-image-link img { height:auto; max-height:none; }\n        #cdc-galleria-1[data-layout=\"cards\"] .cdc-card-info { width:100%; max-height:none; overflow:visible; }\n        #cdc-galleria-1 .cdc-overlay { display:none; }\n        #cdc-galleria-1 .cdc-mobile-info { display:block; }\n    }\n    \/* CDC 4.11.3 - navigazione interna media collegato (RIA\/FRC) dentro PhotoSwipe 5 *\/\n    body.cdc-pswp-active .cdc-linked-pswp-action {\n        position:fixed; left:50%; bottom:178px; transform:translateX(-50%); z-index:100000;\n        border:1px solid rgba(255,255,255,.35); border-radius:7px; padding:8px 14px;\n        background:rgba(20,20,20,.88); color:#fff; font-size:13px; font-weight:700;\n        line-height:1.2; cursor:pointer; box-shadow:0 4px 14px rgba(0,0,0,.28);\n    }\n    body.cdc-pswp-active .cdc-linked-pswp-action:hover,\n    body.cdc-pswp-active .cdc-linked-pswp-action:focus { background:#fff; color:#222; outline:none; }\n    body.cdc-pswp-linked-mode .pswp__button--arrow--prev,\n    body.cdc-pswp-linked-mode .pswp__button--arrow--next,\n    body.cdc-pswp-linked-mode .pswp__button--arrow--left,\n    body.cdc-pswp-linked-mode .pswp__button--arrow--right { display:none !important; }\n    .cdc-linked-source { display:none !important; }\n    \/* CDC 4.12.9 \u2014 Zoom separato dai controlli nativi, leggermente piu in basso *\/\n    body.cdc-pswp-active .cdc-pswp-zoom-help {\n        position:fixed; z-index:100020; top:58px; right:22px;\n        color:#168BC1; font-size:14px; line-height:1.2; font-weight:700;\n        padding:7px 10px; border-radius:4px;\n        background:rgba(0,0,0,.58); border:1px solid rgba(255,255,255,.16);\n        box-shadow:0 2px 8px rgba(0,0,0,.18);\n        pointer-events:none; white-space:nowrap;\n    }\n    body:not(.cdc-pswp-active) .cdc-pswp-zoom-help { display:none !important; }\n    .cdc-pswp-zoom-touch { display:none; }\n    @media (pointer:coarse) {\n        .cdc-pswp-zoom-mouse { display:none; }\n        .cdc-pswp-zoom-touch { display:inline; }\n    }\n\n    @media (max-width:900px) {\n        body.cdc-pswp-active .cdc-linked-pswp-action { bottom:150px; max-width:calc(100% - 32px); }\n    }\n\n    \/* PhotoSwipe: caption nativa trasformata in pannello compatto in basso.\n       Restiamo dentro il meccanismo nativo: la caption continua a sparire durante lo zoom. *\/\n    body.cdc-pswp-active .pswp__caption {\n        top:auto !important;\n        left:0 !important;\n        right:0 !important;\n        bottom:22px !important;\n        width:min(1000px, calc(100% - 80px)) !important;\n        max-width:1000px !important;\n        height:auto !important;\n        margin-left:auto !important;\n        margin-right:auto !important;\n        transform:none !important;\n        background:transparent !important;\n        pointer-events:auto !important;\n        text-align:center !important;\n    }\n    body.cdc-pswp-active .pswp__caption__center {\n        display:block !important;\n        width:100% !important;\n        max-width:none !important;\n        height:auto !important;\n        box-sizing:border-box !important;\n        margin:0 auto !important;\n        padding:0 !important;\n        color:#f4f4f4 !important;\n        text-align:center !important;\n    }\n    body.cdc-pswp-active .cdc-lb-card {\n        box-sizing:border-box; overflow:hidden;\n        padding:10px 14px; border:1px solid rgba(255,255,255,.18); border-radius:9px;\n        background:rgba(10,10,10,.76); color:#f1f1f1; box-shadow:none;\n        backdrop-filter:none;\n        font-size:13px; line-height:1.35; text-align:center;\n    }\n    body.cdc-pswp-active .cdc-lb-title {\n        font-size:13.5px; font-weight:700; color:#fff; line-height:1.3; margin-bottom:4px;\n        white-space:nowrap; overflow:hidden; text-overflow:ellipsis; text-align:center;\n    }\n    body.cdc-pswp-active .cdc-lb-text {\n        max-height:5.4em; overflow:auto; line-height:1.35; padding:0 6px; color:#e5e5e5; scrollbar-width:thin; text-align:center;\n    }\n    body.cdc-pswp-active .cdc-lb-meta {\n        margin-top:5px; padding-top:5px; border-top:1px solid rgba(255,255,255,.14);\n        font-size:12.5px; line-height:1.35; color:#d0d0d0; text-align:center;\n    }\n    body.cdc-pswp-active .cdc-lb-meta br { display:none; }\n    body.cdc-pswp-active .cdc-lb-meta br + strong::before { content:' \u00b7 '; font-weight:400; }\n    body.cdc-pswp-active .cdc-lb-help {\n        margin-top:4px; font-size:11.5px; line-height:1.25; opacity:.68; text-align:center;\n    }\n    \/* CDC 4.12.7 \u2014 aiuto Zoom tra i comandi del Lightbox *\/\n    body.cdc-pswp-active .cdc-pswp-zoom-help {\n        position:fixed; z-index:100020; top:12px; right:132px;\n        color:#168BC1; font-size:14px; line-height:1.2; font-weight:700;\n        padding:6px 9px; border-radius:4px;\n        background:rgba(0,0,0,.58); border:1px solid rgba(255,255,255,.16);\n        pointer-events:none; white-space:nowrap;\n    }\n    body:not(.cdc-pswp-active) .cdc-pswp-zoom-help { display:none !important; }\n    .cdc-pswp-zoom-touch { display:none; }\n    @media (pointer:coarse) {\n        .cdc-pswp-zoom-mouse { display:none; }\n        .cdc-pswp-zoom-touch { display:inline; }\n    }\n\n    @media (max-width:900px) {\n        body.cdc-pswp-active .pswp__caption {\n            left:10px !important; right:10px !important; bottom:10px !important;\n            width:auto !important; max-width:none !important;\n            margin:0 !important; transform:none !important;\n        }\n        body.cdc-pswp-active .cdc-lb-card { padding:8px 10px; font-size:12.5px; }\n        body.cdc-pswp-active .cdc-lb-title { font-size:13px; }\n        body.cdc-pswp-active .cdc-lb-text { max-height:4.05em; }\n        body.cdc-pswp-active .cdc-lb-meta { font-size:12px; }\n        body.cdc-pswp-active .cdc-lb-help { font-size:11px; }\n    }\n\n\n    \/* CDC 4.12.1 \u2014 rifiniture estetiche layout museale *\/\n    #cdc-galleria-1 {\n        --cdc-blue:#123A70; --cdc-link:#168BC1; --cdc-ochre:#C68A24;\n        --cdc-text:#252525; --cdc-muted:#666666; --cdc-soft:#F5F7FA;\n    }\n    #cdc-galleria-1 .cdc-view-switcher button { background:#fff; color:var(--cdc-text); border-color:#cfd6df; font-weight:600; }\n    #cdc-galleria-1 .cdc-view-switcher button.is-active { background:var(--cdc-blue); color:#fff; border-color:var(--cdc-blue); }\n    #cdc-galleria-1 .cdc-btn-search { background:var(--cdc-link); color:#fff; border-color:var(--cdc-link); }\n    #cdc-galleria-1 .cdc-image-link { border-radius:2px; }\n\n    \/* Legenda sempre visibile, essenziale *\/\n    #cdc-galleria-1 .cdc-legend { display:block; padding:6px 2px 7px; line-height:1.28; min-height:34px; }\n    #cdc-galleria-1 .cdc-legend-title { display:block; color:var(--cdc-text); font-size:15px; font-weight:650; line-height:1.25; }\n    #cdc-galleria-1 .cdc-legend-meta { display:block; margin-top:2px; color:#747474; font-size:13.5px; font-weight:400; line-height:1.25; }\n\n    \/* Hover desktop: gradiente interno, titolo + estratto descrizione *\/\n    @media (hover:hover) and (pointer:fine) {\n        #cdc-galleria-1 .cdc-overlay {\n            display:flex !important; flex-direction:column; justify-content:flex-end;\n            position:absolute !important; inset:auto 0 0 0 !important;\n            width:auto !important; max-width:none !important; min-height:42%;\n            padding:54px 15px 12px !important; border-radius:0 !important;\n            background:linear-gradient(to top, rgba(10,15,20,.82) 0%, rgba(10,15,20,.58) 42%, rgba(10,15,20,.22) 72%, rgba(10,15,20,0) 100%) !important;\n            box-shadow:none !important; color:#fff; opacity:0; visibility:hidden;\n            transform:none !important; transition:opacity .18s ease !important; pointer-events:none;\n            z-index:3 !important;\n        }\n        #cdc-galleria-1 .cdc-image-link:hover .cdc-overlay,\n        #cdc-galleria-1 .cdc-image-link:focus-visible .cdc-overlay { opacity:1; visibility:visible; }\n        #cdc-galleria-1 .cdc-overlay-title { font-size:18px; font-weight:650; line-height:1.22; white-space:normal; overflow:visible; text-overflow:clip; }\n        #cdc-galleria-1 .cdc-overlay-description { display:block; margin-top:6px; font-size:14px; line-height:1.35; font-weight:400; }\n    }\n    @media (hover:none), (pointer:coarse) { #cdc-galleria-1 .cdc-overlay { display:none !important; } }\n\n    \/* In Masonry la legenda appartiene alla stessa tessera e segue la larghezza dell'immagine. *\/\n    #cdc-galleria-1[data-layout=\"masonry\"] figure.cdc-item { align-self:flex-start; }\n    #cdc-galleria-1[data-layout=\"grid\"] figure.cdc-item { display:flex; flex-direction:column; }\n\n    @media (max-width:1024px) {\n        #cdc-galleria-1 .cdc-legend-title { font-size:14px; }\n        #cdc-galleria-1 .cdc-legend-meta { font-size:13px; }\n    }\n    @media (max-width:600px) {\n        #cdc-galleria-1 .cdc-view-switcher button span { display:inline; }\n        #cdc-galleria-1 .cdc-view-switcher { width:auto; }\n        #cdc-galleria-1 .cdc-legend { padding:6px 1px 12px; }\n        #cdc-galleria-1 .cdc-legend-title { font-size:15px; }\n        #cdc-galleria-1 .cdc-legend-meta { font-size:13px; }\n    }\n\n\n    \/* Nessuna ombra\/fascia aggiuntiva tra immagine e pannello informativo *\/\n    body.cdc-pswp-active .pswp__caption::before,\n    body.cdc-pswp-active .pswp__caption::after,\n    body.cdc-pswp-active .pswp__caption__center::before,\n    body.cdc-pswp-active .pswp__caption__center::after,\n    body.cdc-pswp-active .cdc-lb-card::before,\n    body.cdc-pswp-active .cdc-lb-card::after { content:none !important; display:none !important; background:none !important; box-shadow:none !important; }\n\n    \/* Lightbox informativo adattivo *\/\n    body.cdc-pswp-active .cdc-pswp-info-toggle {\n        position:fixed; right:74px; top:12px; z-index:100005; border:0; border-radius:999px;\n        padding:8px 12px; background:rgba(20,20,20,.72); color:#fff; font-size:13px; font-weight:650; cursor:pointer;\n    }\n    body.cdc-pswp-active.cdc-pswp-info-hidden .pswp__caption { display:none !important; }\n    body.cdc-pswp-active.cdc-pswp-info-hidden .cdc-linked-pswp-action { bottom:28px; }\n    body.cdc-pswp-active .pswp__caption { transition:opacity .18s ease; }\n    body.cdc-pswp-active.cdc-lb-side .pswp__caption {\n        top:72px !important; right:18px !important; bottom:72px !important; left:auto !important;\n        width:min(340px, 29vw) !important; max-width:340px !important; margin:0 !important;\n        display:flex !important; align-items:center !important;\n    }\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-card { text-align:left; padding:14px 15px; }\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-title,\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-text,\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-meta,\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-help { text-align:left; }\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-title { white-space:normal; font-size:17px; }\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-text { max-height:38vh; font-size:13.5px; }\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-meta br { display:block; }\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-meta br + strong::before { content:none; }\n    body.cdc-pswp-active.cdc-lb-bottom .pswp__caption { bottom:10px !important; width:min(1180px, calc(100% - 80px)) !important; max-width:1180px !important; }\n    body.cdc-pswp-active.cdc-lb-bottom .cdc-lb-card { text-align:left; padding:10px 15px; }\n    body.cdc-pswp-active.cdc-lb-bottom .cdc-lb-title,\n    body.cdc-pswp-active.cdc-lb-bottom .cdc-lb-text,\n    body.cdc-pswp-active.cdc-lb-bottom .cdc-lb-meta { text-align:left; }\n    body.cdc-pswp-active.cdc-lb-bottom .cdc-lb-title { font-size:16px; }\n    body.cdc-pswp-active.cdc-lb-bottom .cdc-lb-text { max-height:4.1em; }\n\n    \/* CDC 4.12.3 \u2014 pannelli informativi pi\u00f9 leggeri *\/\n    body.cdc-pswp-active.cdc-lb-bottom .cdc-lb-card {\n        background:rgba(10,10,10,.40) !important;\n        border-color:rgba(255,255,255,.16) !important;\n        box-shadow:none !important;\n        backdrop-filter:none !important;\n    }\n    body.cdc-pswp-active.cdc-lb-side .pswp__caption {\n        width:min(300px, 25vw) !important;\n        max-width:300px !important;\n    }\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-card {\n        background:rgba(10,10,10,.48) !important;\n        border-color:rgba(255,255,255,.15) !important;\n        padding:12px 13px !important;\n        box-shadow:none !important;\n        backdrop-filter:none !important;\n    }\n    \/* Nessuna fascia o sfumatura esterna sopra il pannello: l'immagine arriva integra al box. *\/\n    body.cdc-pswp-active.cdc-lb-bottom .pswp__caption,\n    body.cdc-pswp-active.cdc-lb-bottom .pswp__caption__center,\n    body.cdc-pswp-active.cdc-lb-side .pswp__caption,\n    body.cdc-pswp-active.cdc-lb-side .pswp__caption__center {\n        background:transparent !important; box-shadow:none !important; filter:none !important;\n    }\n    \/* CDC 4.12.3 \u2014 geometria pannelli: regole esplicite, niente banda fantasma *\/\n    body.cdc-pswp-active.cdc-lb-bottom .pswp__caption {\n        left:6% !important; right:auto !important; bottom:12px !important;\n        width:68vw !important; max-width:1120px !important; margin:0 !important;\n        background:none !important; background-image:none !important; box-shadow:none !important; filter:none !important;\n    }\n    body.cdc-pswp-active.cdc-lb-bottom .cdc-lb-card {\n        width:100% !important; background:rgba(10,10,10,.40) !important;\n    }\n    body.cdc-pswp-active.cdc-lb-side .pswp__caption {\n        left:18px !important; right:auto !important; top:auto !important; bottom:18px !important;\n        width:300px !important; max-width:300px !important; height:auto !important; margin:0 !important;\n        display:block !important; background:none !important; background-image:none !important;\n        box-shadow:none !important; filter:none !important;\n    }\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-card { width:100% !important; background:rgba(10,10,10,.42) !important; }\n    \/* Neutralizza eventuali sfondi\/gradienti introdotti dal lightbox esterno. *\/\n    body.cdc-pswp-active .pswp__caption,\n    body.cdc-pswp-active .pswp__caption__center { background-image:none !important; text-shadow:none !important; }\n\n    \/* CDC 4.12.4 \u2014 la banda scura non appartiene alla nostra scheda.\n       Lightbox with PhotoSwipe 5 usa Dynamic Caption e, in modalita overlay,\n       applica lo sfondo al contenitore esterno. Lo rendiamo completamente\n       trasparente: l\u2019unico fondo ammesso resta .cdc-lb-card. *\/\n    body.cdc-pswp-active .pswp__dynamic-caption,\n    body.cdc-pswp-active .pswp__dynamic-caption--overlay,\n    body.cdc-pswp-active .pswp__dynamic-caption--below,\n    body.cdc-pswp-active .pswp__dynamic-caption--mobile,\n    body.cdc-pswp-active [class*=\"pswp__dynamic-caption\"] {\n        background:transparent !important;\n        background-color:transparent !important;\n        background-image:none !important;\n        box-shadow:none !important;\n        filter:none !important;\n        backdrop-filter:none !important;\n        text-shadow:none !important;\n    }\n    body.cdc-pswp-active .pswp__dynamic-caption::before,\n    body.cdc-pswp-active .pswp__dynamic-caption::after,\n    body.cdc-pswp-active .pswp__dynamic-caption--overlay::before,\n    body.cdc-pswp-active .pswp__dynamic-caption--overlay::after,\n    body.cdc-pswp-active [class*=\"pswp__dynamic-caption\"]::before,\n    body.cdc-pswp-active [class*=\"pswp__dynamic-caption\"]::after {\n        content:none !important; display:none !important;\n        background:none !important; box-shadow:none !important;\n    }\n\n    \/* CDC 4.12.7 \u2014 rifinitura Lightbox: geometria, zoom e tastiera *\/\n    body.cdc-pswp-active .cdc-lb-help {\n        margin:0 0 5px 0 !important; padding:0 !important;\n        color:#168BC1 !important; opacity:1 !important;\n        font-size:11.5px !important; line-height:1.25 !important;\n        font-weight:600 !important; text-align:left !important;\n    }\n    body.cdc-pswp-active.cdc-lb-bottom .pswp__caption {\n        position:fixed !important;\n        left:50vw !important; right:auto !important; transform:translateX(-50%) !important;\n        width:68vw !important; max-width:1120px !important;\n    }\n    body.cdc-pswp-active.cdc-lb-bottom .cdc-lb-card { background:rgba(10,10,10,.68) !important; }\n    body.cdc-pswp-active.cdc-lb-side .pswp__caption { position:fixed !important; left:18px !important; right:auto !important; bottom:18px !important; width:420px !important; max-width:min(420px, calc(100vw - 36px)) !important; transform:none !important; }\n    body.cdc-pswp-active.cdc-lb-side .cdc-lb-card { background:rgba(10,10,10,.68) !important; }\n\n    \/* CDC 4.12.7 \u2014 aiuto Zoom tra i comandi del Lightbox *\/\n    body.cdc-pswp-active .cdc-pswp-zoom-help {\n        position:fixed; z-index:100020; top:12px; right:132px;\n        color:#168BC1; font-size:14px; line-height:1.2; font-weight:700;\n        padding:6px 9px; border-radius:4px;\n        background:rgba(0,0,0,.58); border:1px solid rgba(255,255,255,.16);\n        pointer-events:none; white-space:nowrap;\n    }\n    body:not(.cdc-pswp-active) .cdc-pswp-zoom-help { display:none !important; }\n    .cdc-pswp-zoom-touch { display:none; }\n    @media (pointer:coarse) {\n        .cdc-pswp-zoom-mouse { display:none; }\n        .cdc-pswp-zoom-touch { display:inline; }\n    }\n\n    @media (max-width:900px) {\n        body.cdc-pswp-active .cdc-pswp-info-toggle { right:62px; top:9px; padding:7px 10px; }\n        body.cdc-pswp-active .cdc-pswp-zoom-help { top:54px; right:10px; font-size:13px; padding:6px 8px; }\n        body.cdc-pswp-active.cdc-lb-side .pswp__caption,\n        body.cdc-pswp-active.cdc-lb-bottom .pswp__caption { left:8px !important; right:8px !important; bottom:8px !important; top:auto !important; width:auto !important; max-width:none !important; display:block !important; transform:none !important; }\n        body.cdc-pswp-active .cdc-lb-text { max-height:4.05em !important; }\n    }\n\n    \/* CDC 4.12.9 \u2014 posizione definitiva aiuto Zoom.\n       Questa regola e' volutamente l'ultima per prevalere sulle versioni precedenti. *\/\n    body.cdc-pswp-active .cdc-pswp-zoom-help {\n        top:64px !important; right:22px !important;\n        box-shadow:0 2px 8px rgba(0,0,0,.18) !important;\n    }\n    @media (max-width:900px) {\n        body.cdc-pswp-active .cdc-pswp-zoom-help { top:58px !important; right:10px !important; }\n    }\n\n\n    \/* CDC 4.12.10 \u2014 rifiniture finali controlli Lightbox.\n       Info viene disposto accanto all'aiuto Zoom, sotto i controlli nativi,\n       senza sovrapporsi a fullscreen\/chiusura. *\/\n    body.cdc-pswp-active .cdc-pswp-info-toggle {\n        top:64px !important; right:190px !important;\n        padding:6px 10px !important; min-height:30px;\n        box-shadow:0 2px 8px rgba(0,0,0,.18) !important;\n    }\n    body.cdc-pswp-active .cdc-linked-pswp-action {\n        bottom:auto; \/* la posizione finale viene calcolata rispetto alla scheda *\/\n    }\n    @media (max-width:900px) {\n        body.cdc-pswp-active .cdc-pswp-info-toggle {\n            top:58px !important; right:150px !important;\n            padding:6px 9px !important;\n        }\n    }\n\n\n\n    \/* CDC 4.12.13 \u2014 smartphone: solo titolo; + Info espande la scheda.\n       Include anche smartphone in orizzontale (viewport largo ma basso).\n       PC e tablet restano invariati. *\/\n    @media (max-width:600px), (max-height:500px) and (pointer:coarse) {\n        body.cdc-pswp-active .cdc-pswp-zoom-help {\n            top:58px !important; right:10px !important;\n        }\n        body.cdc-pswp-active .cdc-pswp-info-toggle {\n            top:100px !important; right:10px !important;\n            color:#168BC1 !important;\n            background:rgba(0,0,0,.58) !important;\n            border:1px solid rgba(255,255,255,.16) !important;\n            border-radius:4px !important;\n            font-weight:700 !important;\n            min-height:30px !important;\n            box-shadow:0 2px 8px rgba(0,0,0,.18) !important;\n        }\n        body.cdc-pswp-active.cdc-lb-side .pswp__caption,\n        body.cdc-pswp-active.cdc-lb-bottom .pswp__caption {\n            left:10px !important; right:10px !important; bottom:4px !important;\n            top:auto !important; width:auto !important; max-width:none !important;\n            transform:none !important; margin:0 !important;\n        }\n        body.cdc-pswp-active .cdc-lb-card {\n            padding:9px 11px !important;\n            background:rgba(10,10,10,.66) !important;\n        }\n        body.cdc-pswp-active:not(.cdc-sp-info-expanded) .cdc-lb-title {\n            display:block !important; overflow:hidden !important;\n            white-space:nowrap !important; text-overflow:ellipsis !important;\n            max-height:none !important; font-size:16px !important; line-height:1.25 !important;\n        }\n        body.cdc-pswp-active:not(.cdc-sp-info-expanded) .cdc-lb-text,\n        body.cdc-pswp-active:not(.cdc-sp-info-expanded) .cdc-lb-meta {\n            display:none !important;\n        }\n        body.cdc-pswp-active.cdc-sp-info-expanded .cdc-lb-title,\n        body.cdc-pswp-active.cdc-sp-info-expanded .cdc-lb-text,\n        body.cdc-pswp-active.cdc-sp-info-expanded .cdc-lb-meta {\n            white-space:normal !important; overflow:visible !important; text-overflow:clip !important;\n        }\n        body.cdc-pswp-active.cdc-sp-info-expanded .cdc-lb-text {\n            max-height:38vh !important; overflow:auto !important;\n        }\n        \/* Quando + Info apre la scheda, la caption resta realmente visibile\n           anche se PhotoSwipe aveva appena nascosto la propria UI. *\/\n        body.cdc-pswp-active.cdc-sp-info-expanded .pswp__caption {\n            display:block !important; visibility:visible !important; opacity:1 !important;\n        }\n    }\n\n\n    #cdc-galleria-1 .cdc-pagination .cdc-label-short { display:none; }\n\n    \/* V4.12.20: inversione delle zone laterali, paginazione centrata *\/\n    #cdc-galleria-1 .cdc-pagination {\n        display:grid; grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);\n        align-items:center; column-gap:12px; row-gap:10px;\n    }\n    #cdc-galleria-1 .cdc-page-size-zone { grid-column:3; grid-row:1; justify-self:end; min-width:0; }\n    #cdc-galleria-1 .cdc-page-navigation-zone { grid-column:2; grid-row:1; display:flex; align-items:center; justify-content:center; flex-wrap:wrap; gap:6px; }\n    #cdc-galleria-1 .cdc-page-jump-zone { grid-column:1; grid-row:1; justify-self:start; display:flex; align-items:center; justify-content:flex-start; gap:7px; min-width:0; }\n    #cdc-galleria-1 .cdc-pagination .cdc-page-size-wrap { margin-right:0; }\n    #cdc-galleria-1 .cdc-page-jump { width:58px; }\n    @media (max-width:1050px) {\n      #cdc-galleria-1 .cdc-pagination { grid-template-columns:1fr 1fr; }\n      #cdc-galleria-1 .cdc-page-navigation-zone { grid-column:1 \/ -1; grid-row:2; }\n      #cdc-galleria-1 .cdc-page-jump-zone { grid-column:1; grid-row:1; }\n      #cdc-galleria-1 .cdc-page-size-zone { grid-column:2; grid-row:1; }\n    }\n    @media (max-width:600px) {\n      #cdc-galleria-1 .cdc-pagination { grid-template-columns:1fr; }\n      #cdc-galleria-1 .cdc-page-size-zone { grid-column:1; grid-row:3; justify-self:center; }\n      #cdc-galleria-1 .cdc-page-navigation-zone { grid-column:1; grid-row:2; }\n      #cdc-galleria-1 .cdc-page-jump-zone { grid-column:1; grid-row:1; justify-content:center; justify-self:center; }\n    }\n    \/* V4.12.18: solo smartphone verticale, due righe e tre pagine visibili. *\/\n    @media (max-width:600px) and (orientation:portrait) {\n      #cdc-galleria-1 .cdc-pagination {\n        grid-template-columns:minmax(0,1fr) auto;\n        column-gap:6px; row-gap:8px;\n        margin-top:12px; margin-bottom:8px;\n      }\n      #cdc-galleria-1 .cdc-page-size-zone {\n        grid-column:2; grid-row:1; justify-self:end;\n      }\n      #cdc-galleria-1 .cdc-page-jump-zone {\n        grid-column:1; grid-row:1; justify-self:start; justify-content:flex-start;\n      }\n      #cdc-galleria-1 .cdc-page-navigation-zone {\n        grid-column:1 \/ -1; grid-row:2; justify-self:center;\n        flex-wrap:nowrap; gap:4px;\n      }\n      #cdc-galleria-1 .cdc-page-size-wrap { font-size:0; gap:5px; }\n      #cdc-galleria-1 .cdc-page-size-wrap::before { content:'Img\/pag'; font-size:13px; font-weight:600; }\n      #cdc-galleria-1 .cdc-page-size { min-height:34px; font-size:13px; }\n      #cdc-galleria-1 .cdc-page-go { font-size:12px; padding:6px; white-space:nowrap; }\n      #cdc-galleria-1 .cdc-page-jump { width:43px; min-height:34px; font-size:13px; }\n      #cdc-galleria-1 .cdc-page-prev,\n      #cdc-galleria-1 .cdc-page-next { font-size:12px; padding:7px 6px; white-space:nowrap; }\n      #cdc-galleria-1 .cdc-page-prev .cdc-label-full,\n      #cdc-galleria-1 .cdc-page-next .cdc-label-full { display:none; }\n      #cdc-galleria-1 .cdc-page-prev .cdc-label-short,\n      #cdc-galleria-1 .cdc-page-next .cdc-label-short { display:inline; }\n      #cdc-galleria-1 .cdc-page-numbers { display:inline-flex; flex-wrap:nowrap; gap:3px; }\n      #cdc-galleria-1 .cdc-page-numbers > * { display:none; }\n      #cdc-galleria-1 .cdc-page-numbers > .cdc-page-mobile { display:inline-flex; }\n      #cdc-galleria-1 .cdc-page-num { min-width:27px; font-size:12px; padding:6px 4px; justify-content:center; }\n    }\n    <\/style>\n\n    <script>\n    (function(){\n        const root = document.getElementById(\"cdc-galleria-1\");\n        if (!root) return;\n\n        const ajaxUrl   = root.dataset.ajaxUrl;\n        const nonce     = root.dataset.nonce;\n        const folderId  = root.dataset.folderTermId || '';\n        const folderName = root.dataset.folder || '';\n        const results   = root.querySelector('.cdc-risultati');\n        const provincia = root.querySelector('.cdc-filtro-provincia');\n        const comune    = root.querySelector('.cdc-filtro-comune');\n        const ricerca   = root.querySelector('.cdc-filtro-ricerca');\n        const resetBtn  = root.querySelector('.cdc-btn-reset');\n        const pager     = root.querySelector('.cdc-pagination:not(.cdc-pagination-top)');\n        const topPager  = root.querySelector('.cdc-pagination-top');\n        const pageSizes = Array.from(root.querySelectorAll('.cdc-page-size'));\n        const prevBtn   = root.querySelector('.cdc-page-prev');\n        const nextBtn   = root.querySelector('.cdc-page-next');\n\n        const viewBtns  = root.querySelectorAll('.cdc-view-switcher button[data-view]');\n        const columns   = parseInt(root.dataset.gridColumns || root.dataset.columns || '5', 10) || 5;\n        const rowHeight = parseInt(root.dataset.rowHeight || '260',10) || 260;\n        const searchWrap = root.querySelector('.cdc-search-wrap');\n\n        function placeOverlay(link) {\n            const tip = link ? link.querySelector('.cdc-overlay') : null;\n            if (!tip || window.matchMedia('(max-width:600px), (max-height:500px) and (pointer:coarse)').matches) return;\n            document.querySelectorAll('#' + root.id + ' .cdc-overlay.is-open').forEach(el => { if (el !== tip) el.classList.remove('is-open'); });\n            tip.classList.add('is-open');\n            tip.style.left = '12px'; tip.style.top = '12px';\n            const r = link.getBoundingClientRect();\n            const t = tip.getBoundingClientRect();\n            const pad = 10, gap = 8;\n            let left = Math.min(Math.max(r.left, pad), Math.max(pad, window.innerWidth - t.width - pad));\n            let top;\n            if (r.bottom + gap + t.height <= window.innerHeight - pad) top = r.bottom + gap;\n            else if (r.top - gap - t.height >= pad) top = r.top - gap - t.height;\n            else top = Math.min(Math.max(pad, window.innerHeight - t.height - pad), r.top + gap);\n            tip.style.left = Math.round(left) + 'px';\n            tip.style.top = Math.round(top) + 'px';\n        }\n\n        function hideOverlay(link) {\n            const tip = link ? link.querySelector('.cdc-overlay') : null;\n            if (tip) tip.classList.remove('is-open');\n        }\n\n        function effectiveColumns(){\n            if (window.matchMedia('(max-width:600px), (max-height:500px) and (pointer:coarse)').matches) return 1;\n            if (window.matchMedia('(max-width:1024px)').matches) return Math.min(3, columns);\n            return columns;\n        }\n\n        function updateTileHeight(){\n            root.style.setProperty('--cdc-columns', String(effectiveColumns()));\n            root.style.setProperty('--cdc-row-height', rowHeight + 'px');\n        }\n\n        function setView(view){\n            if (!['grid','masonry'].includes(view)) view = 'masonry';\n            root.dataset.layout = view;\n            viewBtns.forEach(btn => btn.classList.toggle('is-active', btn.dataset.view === view));\n            updateTileHeight();\n        }\n\n        function applicaLayoutDocumentale() {\n            if (root.dataset.layout !== 'masonry' || root.dataset.masonryFit !== 'contain') return;\n            const items = Array.from(results.querySelectorAll(':scope > figure.cdc-item'));\n            if (!items.length) return;\n            const n = Math.max(1, parseInt(root.dataset.masonryColumns || '3', 10) || 3);\n            const gap = 5;\n            items.forEach(item => { item.style.flex = ''; });\n\n            if (window.matchMedia('(max-width:1024px)').matches) {\n                const cols = window.matchMedia('(max-width:600px), (max-height:500px) and (pointer:coarse)').matches ? 1 : 2;\n                const gapShare = (gap * (cols - 1)) \/ cols;\n                items.forEach(item => {\n                    item.style.flex = '0 0 calc(' + (100\/cols).toFixed(5) + '% - ' + gapShare.toFixed(3) + 'px)';\n                });\n                return;\n            }\n\n            \/* 1-2-3, 4-5-6...: nessun riordino.\n               Larghezze proporzionali al formato originale = stessa altezza nella riga,\n               immagini intere e niente grandi vuoti. *\/\n            for (let i = 0; i < items.length; i += n) {\n                const row = items.slice(i, i + n);\n                const ratios = row.map(item => {\n                    const r = parseFloat(item.style.getPropertyValue('--cdc-ratio')) || 1;\n                    return Math.max(.20, Math.min(5, r));\n                });\n                const sum = ratios.reduce((a,b) => a+b, 0);\n                const gapShare = (gap * (row.length - 1)) \/ row.length;\n                row.forEach((item, j) => {\n                    const pct = (ratios[j] \/ sum) * 100;\n                    item.style.flex = '0 0 calc(' + pct.toFixed(5) + '% - ' + gapShare.toFixed(3) + 'px)';\n                });\n            }\n        }\n\n        let lastTotalPages = 0;\n        function aggiornaPaginazione(pagina, totalPages) {\n            pagina = Math.max(1, parseInt(pagina || '1', 10) || 1);\n            totalPages = Math.max(0, parseInt(totalPages || '0', 10) || 0);\n            lastTotalPages = totalPages;\n            [pager, topPager].forEach(nav => {\n                if (!nav) return;\n                if (totalPages === 0) { nav.style.display = 'none'; return; }\n                nav.style.display = 'grid';\n                nav.dataset.page = String(pagina);\n                nav.dataset.totalPages = String(totalPages);\n                const visible = new Set([1, totalPages]);\n                for (let i = Math.max(1,pagina-2); i <= Math.min(totalPages,pagina+2); i++) visible.add(i);\n                let html = '', previous = 0;\n                \/\/ Tre numeri contigui anche all'inizio e alla fine della galleria.\n                const mobileStart = totalPages <= 3 ? 1 : Math.min(Math.max(1, pagina-1), totalPages-2);\n                [...visible].sort((x,y)=>x-y).forEach(n => {\n                    if (previous && n > previous+1) html += '<span aria-hidden=\"true\">\u2026<\/span>';\n                    html += '<button type=\"button\" class=\"cdc-page-num'+(n===pagina?' is-current':'')+(n>=mobileStart && n<mobileStart+3?' cdc-page-mobile':'')+'\" data-page=\"'+n+'\" '+(n===pagina?'aria-current=\"page\"':'')+'>'+n+'<\/button>';\n                    previous=n;\n                });\n                if (nav === topPager) {\n                    nav.innerHTML = `<div class=\"cdc-page-size-zone\"><label class=\"cdc-page-size-wrap\">Immagini per pagina <select class=\"cdc-page-size\" aria-label=\"Immagini per pagina\"><option value=\"20\">20<\/option><option value=\"40\">40<\/option><option value=\"60\">60<\/option><\/select><\/label><\/div><div class=\"cdc-page-navigation-zone\"><button type=\"button\" class=\"cdc-page-prev\"><span class=\"cdc-label-full\">\u2039 Precedente<\/span><span class=\"cdc-label-short\" aria-hidden=\"true\">\u2039 Prec.<\/span><\/button><span class=\"cdc-page-numbers\">${html}<\/span><button type=\"button\" class=\"cdc-page-next\"><span class=\"cdc-label-full\">Successiva \u203a<\/span><span class=\"cdc-label-short\" aria-hidden=\"true\">Succ. \u203a<\/span><\/button><\/div><div class=\"cdc-page-jump-zone\"><button type=\"button\" class=\"cdc-page-go\">Vai a pag.<\/button><input class=\"cdc-page-jump\" type=\"number\" min=\"1\" max=\"${totalPages}\" aria-label=\"Numero pagina di destinazione\"><\/div>`\n                    setupPageSize(nav.querySelector('.cdc-page-size'));\n                } else {\n                    nav.querySelector('.cdc-page-numbers').innerHTML=html;\n                }\n                nav.querySelector('.cdc-page-prev').disabled = pagina <= 1;\n                nav.querySelector('.cdc-page-next').disabled = pagina >= totalPages;\n                const jump=nav.querySelector('.cdc-page-jump');\n                if (jump) { jump.max=String(totalPages); jump.value=String(pagina); }\n            });\n        }\n        function setupPageSize(select) {\n            if (!select) return;\n            const n = parseInt(root.dataset.perPage || '24',10);\n            if (![20,40,60].includes(n)) {\n                const opt = document.createElement('option');\n                opt.value = String(n); opt.textContent = String(n);\n                select.prepend(opt);\n            }\n            select.value = String(n);\n        }\n        function updatePageSize(value) {\n            if (!value || root.dataset.perPage === value) return;\n            root.dataset.perPage = value;\n            root.querySelectorAll('.cdc-page-size').forEach(select => {\n                setupPageSize(select);\n            });\n            carica(1,false);\n        }\n        pageSizes.forEach(setupPageSize);\n        root.addEventListener('change', e => {\n            if (e.target.matches('.cdc-page-size')) updatePageSize(e.target.value);\n        });\n        [pager,topPager].forEach(nav => {\n            if (!nav) return;\n            nav.addEventListener('click', e => {\n                const button=e.target.closest('button');\n                if (!button || button.disabled) return;\n                const current=parseInt(results.dataset.page || '1',10)||1;\n                let target=null;\n                if (button.classList.contains('cdc-page-prev')) target=current-1;\n                else if (button.classList.contains('cdc-page-next')) target=current+1;\n                else if (button.classList.contains('cdc-page-num')) target=parseInt(button.dataset.page,10);\n                else if (button.classList.contains('cdc-page-go')) target=parseInt(nav.querySelector('.cdc-page-jump').value,10);\n                if (Number.isInteger(target) && target>=1 && target<=lastTotalPages) carica(target,true);\n            });\n            nav.addEventListener('keydown', e => {\n                if (e.key==='Enter' && e.target.classList.contains('cdc-page-jump')) {\n                    e.preventDefault();\n                    nav.querySelector('.cdc-page-go').click();\n                }\n            });\n        });\n\n        async function carica(pagina, scrollTop = false) {\n            pagina = Math.max(1, parseInt(pagina || '1', 10) || 1);\n            results.innerHTML = '<p class=\"cdc-loading\">Caricamento immagini...<\/p>';\n            [pager,topPager].forEach(nav=>{if(nav)nav.style.display='none';});\n\n            const body = new URLSearchParams();\n            body.set('action', 'cdc_filtra_galleria');\n            body.set('nonce', nonce);\n            body.set('provincia', provincia ? (provincia.value || '') : '');\n            body.set('comune', comune ? (comune.value || '') : '');\n            body.set('ricerca', ricerca.value || '');\n            body.set('pagina', String(pagina));\n            body.set('folder_term_id', folderId);\n            body.set('folder', folderName);\n            body.set('per_page', root.dataset.perPage || '24');\n            body.set('limit', root.dataset.limit || '0');\n            body.set('hover', root.dataset.hover || '');\n            body.set('lightbox', root.dataset.lightbox || '');\n\n            try {\n                const response = await fetch(ajaxUrl, {\n                    method:'POST', credentials:'same-origin',\n                    headers:{'Content-Type':'application\/x-www-form-urlencoded; charset=UTF-8'},\n                    body:body.toString()\n                });\n                if (!response.ok) throw new Error('HTTP ' + response.status);\n                const data = await response.json();\n                if (!data || !data.success) throw new Error('Risposta AJAX non valida');\n\n                results.innerHTML = data.data.html || '<p class=\"cdc-nessun-risultato\">Nessuna immagine trovata.<\/p>';\n                results.dataset.page = String(data.data.page || pagina);\n                aggiornaPaginazione(data.data.page || pagina, data.data.total_pages || 0);\n                updateTileHeight();\n                applicaLayoutDocumentale();\n\n                if (scrollTop) {\n                    const top = root.getBoundingClientRect().top + window.scrollY - 12;\n                    window.scrollTo({top:Math.max(0, top), behavior:'smooth'});\n                }\n            } catch (err) {\n                console.error('CDC Galleria:', err);\n                results.innerHTML = '<p class=\"cdc-nessun-risultato\">Errore nel caricamento dei risultati.<\/p>';\n                [pager,topPager].forEach(nav=>{if(nav)nav.style.display='none';});\n            }\n        }\n\n        root.addEventListener('mouseover', (e) => {\n            const link = e.target.closest && e.target.closest('a.cdc-image-link');\n            if (link && root.contains(link)) placeOverlay(link);\n        });\n        root.addEventListener('mouseout', (e) => {\n            const link = e.target.closest && e.target.closest('a.cdc-image-link');\n            if (link && root.contains(link) && !link.contains(e.relatedTarget)) hideOverlay(link);\n        });\n        root.addEventListener('focusin', (e) => { const link=e.target.closest && e.target.closest('a.cdc-image-link'); if(link) placeOverlay(link); });\n        root.addEventListener('focusout', (e) => { const link=e.target.closest && e.target.closest('a.cdc-image-link'); if(link) hideOverlay(link); });\n        let cdcLinkedState = null;\n\n        function removeLinkedPswpAction() {\n            document.querySelectorAll('.cdc-linked-pswp-action').forEach(el => el.remove());\n        }\n\n        function getPswpInstance() {\n            const controller = window.lbwpsPhotoSwipe;\n            if (!controller || !controller.pswp) return null;\n\n            \/* Lightbox with PhotoSwipe 5.13 espone il core attivo qui.\n               Lo riconosciamo da currSlide + refreshSlideContent. *\/\n            const pswp = controller.pswp;\n            if (pswp.currSlide && typeof pswp.refreshSlideContent === 'function') return pswp;\n            return null;\n        }\n\n        function linkedSlideDataFromCurrent(pswp, linked) {\n            const current = pswp && pswp.currSlide ? pswp.currSlide.data : null;\n            const width  = parseInt(linked.getAttribute('data-lbwps-width') || '0', 10);\n            const height = parseInt(linked.getAttribute('data-lbwps-height') || '0', 10);\n            const src    = linked.getAttribute('href') || '';\n            if (!current || !src || !width || !height) return null;\n\n            const data = Object.assign({}, current);\n            data.src = src;\n            data.w = width;\n            data.h = height;\n            data.width = width;\n            data.height = height;\n            data.msrc = linked.getAttribute('data-lbwps-srcsmall') || src;\n            data.alt = '';\n            data.element = linked;\n            data.linkEl = linked;\n            return data;\n        }\n\n        function restoreOriginalInPswp() {\n            if (!cdcLinkedState) return;\n            const st = cdcLinkedState;\n            const pswp = st.pswp || getPswpInstance();\n            if (!pswp || typeof pswp.refreshSlideContent !== 'function') return;\n\n            \/* 4.11.7: il media collegato usa temporaneamente un dataSource\n               composto da UNA SOLA slide. Qui rimettiamo l'intera galleria\n               e torniamo esattamente all'indice dell'originale. *\/\n            if (st.mode === 'dom' && st.dataSource) {\n                st.dataSource.items = st.originalItems;\n            } else if (st.mode === 'array' && Array.isArray(st.dataSource)) {\n                st.dataSource.splice(0, st.dataSource.length, ...st.originalItems);\n            } else {\n                return;\n            }\n\n            cdcLinkedState = null;\n            document.body.classList.remove('cdc-pswp-linked-mode');\n            removeLinkedPswpAction();\n\n            if (typeof pswp.goTo === 'function') pswp.goTo(st.originalIndex);\n            window.setTimeout(() => {\n                pswp.refreshSlideContent(st.originalIndex);\n                if (document.body.classList.contains('cdc-pswp-active')) {\n                    showLinkedPswpAction(st.mainLink);\n                }\n            }, 40);\n        }\n\n        function openLinkedInsidePswp(mainLink, linked) {\n            const pswp = getPswpInstance();\n            if (!pswp || !pswp.currSlide || typeof pswp.refreshSlideContent !== 'function') return false;\n\n            const originalIndex = pswp.currSlide.index;\n            const dataSource = pswp.options ? pswp.options.dataSource : null;\n            let mode = '';\n            let originalItems = null;\n\n            \/* 4.11.7: il collegato NON appartiene alla sequenza della galleria.\n               Per questo, mentre e' aperto, PhotoSwipe riceve un dataSource di\n               una sola slide. Non esistendo precedente\/successiva, lo swipe\n               orizzontale non puo' cambiare fotografia neppure su tablet. *\/\n            if (dataSource && !Array.isArray(dataSource) && Array.isArray(dataSource.items)) {\n                originalItems = dataSource.items.slice();\n                dataSource.items = [linked];\n                mode = 'dom';\n            } else if (Array.isArray(dataSource)) {\n                const linkedData = linkedSlideDataFromCurrent(pswp, linked);\n                if (!linkedData) return false;\n                originalItems = dataSource.slice();\n                dataSource.splice(0, dataSource.length, linkedData);\n                mode = 'array';\n            } else {\n                return false;\n            }\n\n            cdcLinkedState = {\n                pswp: pswp,\n                originalIndex: originalIndex,\n                dataSource: dataSource,\n                mode: mode,\n                originalItems: originalItems,\n                mainLink: mainLink\n            };\n\n            document.body.classList.add('cdc-pswp-linked-mode');\n            removeLinkedPswpAction();\n\n            if (typeof pswp.goTo === 'function') pswp.goTo(0);\n            window.setTimeout(() => pswp.refreshSlideContent(0), 20);\n\n            \/* Chiusura diretta dal collegato: prima della prossima apertura\n               rimettiamo comunque il dataSource completo. *\/\n            if (!pswp.__cdcLinkedCloseHook && typeof pswp.on === 'function') {\n                pswp.__cdcLinkedCloseHook = true;\n                pswp.on('close', () => {\n                    if (cdcLinkedState && cdcLinkedState.pswp === pswp) {\n                        const st = cdcLinkedState;\n                        if (st.mode === 'dom' && st.dataSource) {\n                            st.dataSource.items = st.originalItems;\n                        } else if (st.mode === 'array' && Array.isArray(st.dataSource)) {\n                            st.dataSource.splice(0, st.dataSource.length, ...st.originalItems);\n                        }\n                    }\n                    cdcLinkedState = null;\n                    document.body.classList.remove('cdc-pswp-linked-mode');\n                    document.body.classList.remove('cdc-pswp-active');\n                    removeLinkedPswpAction();\n                });\n            }\n\n            window.setTimeout(() => {\n                if (!document.body.classList.contains('cdc-pswp-active')) return;\n                const back = document.createElement('button');\n                back.type = 'button';\n                back.className = 'cdc-linked-pswp-action';\n                back.textContent = '\\u2190 Torna all\\u2019originale';\n                back.addEventListener('click', restoreOriginalInPswp);\n                document.body.appendChild(back);\n            }, 80);\n\n            return true;\n        }\n\n        function showLinkedPswpAction(mainLink) {\n            removeLinkedPswpAction();\n            const targetId = mainLink ? mainLink.dataset.cdcLinkedTarget : '';\n            if (!targetId) return;\n            const linked = document.getElementById(targetId);\n            if (!linked) return;\n\n            window.setTimeout(() => {\n                if (!document.body.classList.contains('cdc-pswp-active')) return;\n                const btn = document.createElement('button');\n                btn.type = 'button';\n                btn.className = 'cdc-linked-pswp-action';\n                btn.textContent = linked.dataset.cdcLinkedLabel || 'Vedi media collegato';\n                btn.addEventListener('click', () => {\n                    \/*\n                     * 4.11.3: prima scelta = sostituzione della slide corrente\n                     * nell'istanza globale di Lightbox with PhotoSwipe.\n                     * In questo modo la lightbox non viene chiusa e la galleria\n                     * non compare per un istante fra originale e collegato.\n                     *\/\n                    if (openLinkedInsidePswp(mainLink, linked)) return;\n\n                    \/* Fallback prudente per installazioni che non espongono\n                       l'istanza globale: mantiene il comportamento 4.11.1. *\/\n                    const closeBtn = document.querySelector('.pswp__button--close');\n                    if (closeBtn) closeBtn.click();\n                    removeLinkedPswpAction();\n\n                    window.setTimeout(() => {\n                        const attrs = ['href','data-lbwps-width','data-lbwps-height','data-lbwps-srcsmall','data-lbwps-caption','data-cdc-panel','data-cdc-linked-target'];\n                        const saved = {};\n                        attrs.forEach(name => saved[name] = mainLink.getAttribute(name));\n\n                        mainLink.setAttribute('href', linked.getAttribute('href') || '');\n                        ['data-lbwps-width','data-lbwps-height','data-lbwps-srcsmall','data-lbwps-caption'].forEach(name => {\n                            const value = linked.getAttribute(name);\n                            if (value !== null) mainLink.setAttribute(name, value);\n                            else mainLink.removeAttribute(name);\n                        });\n                        const linkedCaption = linked.getAttribute('data-lbwps-caption');\n                        if (linkedCaption !== null) mainLink.setAttribute('data-cdc-panel', linkedCaption);\n                        else mainLink.removeAttribute('data-cdc-panel');\n                        mainLink.removeAttribute('data-cdc-linked-target');\n\n                        mainLink.click();\n\n                        window.setTimeout(() => {\n                            attrs.forEach(name => {\n                                if (saved[name] === null) mainLink.removeAttribute(name);\n                                else mainLink.setAttribute(name, saved[name]);\n                            });\n                        }, 0);\n                    }, 320);\n                });\n                document.body.appendChild(btn);\n                positionLinkedAction();\n                window.setTimeout(positionLinkedAction, 80);\n            }, 180);\n        }\n\n        function ensureInfoToggle() {\n            let btn = document.querySelector('.cdc-pswp-info-toggle');\n            if (btn) return btn;\n            btn = document.createElement('button');\n            btn.type = 'button';\n            btn.className = 'cdc-pswp-info-toggle';\n            const isPhone = () => window.matchMedia('(max-width:600px), (max-height:500px) and (pointer:coarse)').matches;\n            btn.textContent = isPhone() ? '+ Info' : '\u24d8 Info';\n            btn.setAttribute('aria-label','Mostra o nascondi informazioni');\n            \/* Il controllo Info deve essere autonomo dal tap PhotoSwipe.\n               Fermiamo gli eventi sul pulsante, poi su smartphone sincronizziamo\n               in un solo punto: label + stato compatto\/esteso + visibilita caption. *\/\n            ['pointerdown','touchstart','mousedown'].forEach(evName => {\n                btn.addEventListener(evName, (e) => { e.stopPropagation(); }, {passive:true});\n            });\n            btn.addEventListener('click', (e) => {\n                e.preventDefault();\n                e.stopPropagation();\n                if (isPhone()) {\n                    const expanded = !document.body.classList.contains('cdc-sp-info-expanded');\n                    document.body.classList.toggle('cdc-sp-info-expanded', expanded);\n                    document.body.classList.remove('cdc-pswp-info-hidden');\n                    btn.textContent = expanded ? '\u2212 Info' : '+ Info';\n\n                    \/* Risveglia la UI nativa senza affidare a PhotoSwipe il toggle\n                       della nostra scheda. In apertura mostra descrizione+metadati;\n                       in chiusura resta visibile la sola riga del titolo. *\/\n                    const pswp = getPswpInstance();\n                    const target = pswp && pswp.element instanceof Element ? pswp.element : document;\n                    try {\n                        target.dispatchEvent(new MouseEvent('mousemove', { bubbles:true, cancelable:false, view:window }));\n                    } catch (_) {\n                        document.dispatchEvent(new Event('mousemove', { bubbles:true }));\n                    }\n                    \/* Non richiamiamo updateLightboxLayout qui: al cambio slide\n                       quella funzione azzera correttamente lo stato espanso. *\/\n                    restartCdcUiReadTimer();\n                } else {\n                    document.body.classList.toggle('cdc-pswp-info-hidden');\n                    btn.textContent = '\u24d8 Info';\n                }\n                window.setTimeout(() => { positionLinkedAction(); positionCdcTopControls(); }, 0);\n            });\n            document.body.appendChild(btn);\n            return btn;\n        }\n\n        function ensureZoomHelp() {\n            let help = document.querySelector('.cdc-pswp-zoom-help');\n            if (help) return help;\n            help = document.createElement('div');\n            help.className = 'cdc-pswp-zoom-help';\n            help.setAttribute('aria-hidden','true');\n            help.innerHTML = '<span class=\"cdc-pswp-zoom-mouse\">Zoom: Ctrl + rotellina<\/span><span class=\"cdc-pswp-zoom-touch\">&nbsp;<\/span>';\n            document.body.appendChild(help);\n            return help;\n        }\n\n        function positionCdcTopControls() {\n            const info = document.querySelector('.cdc-pswp-info-toggle');\n            const zoom = document.querySelector('.cdc-pswp-zoom-help');\n            if (!info || !zoom) return;\n            const zr = zoom.getBoundingClientRect();\n            if (window.matchMedia('(max-width:600px), (max-height:500px) and (pointer:coarse)').matches) {\n                \/* Smartphone: Info sotto Zoom, per evitare sovrapposizioni. *\/\n                info.style.setProperty('right','10px','important');\n                info.style.setProperty('top',(zr.bottom + 7) + 'px','important');\n                info.textContent = document.body.classList.contains('cdc-sp-info-expanded') ? '\u2212 Info' : '+ Info';\n            } else {\n                \/* PC\/tablet: Info immediatamente a sinistra dello Zoom. *\/\n                const gap = 8;\n                const right = Math.max(8, window.innerWidth - zr.left + gap);\n                info.style.setProperty('right', right + 'px', 'important');\n                info.style.setProperty('top', zr.top + 'px', 'important');\n            }\n        }\n\n        function positionLinkedAction() {\n            const btn = document.querySelector('.cdc-linked-pswp-action');\n            if (!btn) return;\n            const cap = document.querySelector('.pswp__caption');\n            if (!cap || document.body.classList.contains('cdc-pswp-info-hidden')) {\n                btn.style.removeProperty('bottom');\n                btn.style.setProperty('bottom','84px','important');\n                return;\n            }\n            const r = cap.getBoundingClientRect();\n            \/* Il collegamento resta separato dalla scheda: 12 px sopra il suo bordo. *\/\n            const bottom = Math.max(72, window.innerHeight - r.top + 12);\n            btn.style.setProperty('bottom', bottom + 'px', 'important');\n        }\n\n        function updateLightboxLayout(pswp) {\n            document.body.classList.remove('cdc-lb-side','cdc-lb-bottom');\n            document.body.classList.remove('cdc-sp-info-expanded');\n            if (!pswp || !pswp.currSlide) return;\n            ensureInfoToggle();\n            ensureZoomHelp();\n            positionCdcTopControls();\n            window.setTimeout(positionCdcTopControls, 60);\n            const d = pswp.currSlide.data || {};\n            const w = Number(d.width || d.w || 0), h = Number(d.height || d.h || 0);\n            const vw = window.innerWidth || 0, vh = window.innerHeight || 0;\n            const ratio = (w > 0 && h > 0) ? w \/ h : 1.4;\n            \/* Immagine verticale\/quadrata su schermo largo: sfruttiamo lo spazio laterale.\n               Negli altri casi il pannello resta in basso, lasciando prevalere l'immagine. *\/\n            const side = vw >= 1050 && ratio < 1.08 && (vw \/ Math.max(vh,1)) > 1.18;\n            document.body.classList.add(side ? 'cdc-lb-side' : 'cdc-lb-bottom');\n\n            \/* Applichiamo anche la geometria direttamente al nodo PhotoSwipe.\n               Serve a prevalere su eventuali regole del plugin Lightbox with PhotoSwipe. *\/\n            const applyPanelGeometry = () => {\n                const cap = document.querySelector('.pswp__caption');\n                const center = cap ? cap.querySelector('.pswp__caption__center') : null;\n                const card = cap ? cap.querySelector('.cdc-lb-card') : null;\n                if (!cap) return;\n                cap.style.setProperty('position','fixed','important');\n                cap.style.setProperty('background','none','important');\n                cap.style.setProperty('background-image','none','important');\n                cap.style.setProperty('box-shadow','none','important');\n                cap.style.setProperty('filter','none','important');\n                if (center) {\n                    center.style.setProperty('background','none','important');\n                    center.style.setProperty('background-image','none','important');\n                    center.style.setProperty('box-shadow','none','important');\n                }\n                const phone = window.matchMedia('(max-width:600px), (max-height:500px) and (pointer:coarse)').matches;\n                if (phone) {\n                    cap.style.setProperty('left','10px','important');\n                    cap.style.setProperty('right','10px','important');\n                    cap.style.setProperty('top','auto','important');\n                    cap.style.setProperty('bottom','4px','important');\n                    cap.style.setProperty('width','auto','important');\n                    cap.style.setProperty('max-width','none','important');\n                    cap.style.setProperty('transform','none','important');\n                    cap.style.setProperty('margin','0','important');\n                    if (card) card.style.setProperty('background','rgba(10,10,10,.66)','important');\n                } else if (side) {\n                    cap.style.setProperty('left','18px','important');\n                    cap.style.setProperty('right','auto','important');\n                    cap.style.setProperty('top','auto','important');\n                    cap.style.setProperty('bottom','18px','important');\n                    cap.style.setProperty('width','420px','important');\n                    cap.style.setProperty('max-width','min(420px, calc(100vw - 36px))','important');\n                    cap.style.setProperty('transform','none','important');\n                    cap.style.setProperty('margin','0','important');\n                    if (card) card.style.setProperty('background','rgba(10,10,10,.68)','important');\n                } else {\n                    cap.style.setProperty('left','50vw','important');\n                    cap.style.setProperty('right','auto','important');\n                    cap.style.setProperty('top','auto','important');\n                    cap.style.setProperty('bottom','12px','important');\n                    cap.style.setProperty('width','68vw','important');\n                    cap.style.setProperty('max-width','min(1120px, calc(100vw - 36px))','important');\n                    cap.style.setProperty('margin','0','important');\n                    cap.style.setProperty('transform','translateX(-50%)','important');\n                    if (card) card.style.setProperty('background','rgba(10,10,10,.68)','important');\n                }\n            };\n            applyPanelGeometry();\n            positionLinkedAction();\n            window.setTimeout(() => { applyPanelGeometry(); positionLinkedAction(); positionCdcTopControls(); }, 60);\n            window.setTimeout(() => { applyPanelGeometry(); positionLinkedAction(); positionCdcTopControls(); }, 180);\n        }\n\n        function removeInfoToggle() {\n            const btn = document.querySelector('.cdc-pswp-info-toggle');\n            if (btn) btn.remove();\n            const zoomHelp = document.querySelector('.cdc-pswp-zoom-help');\n            if (zoomHelp) zoomHelp.remove();\n            document.body.classList.remove('cdc-pswp-info-hidden','cdc-sp-info-expanded','cdc-lb-side','cdc-lb-bottom');\n        }\n\n        function currentMainLinkFromPswp(pswp) {\n            if (!pswp || !pswp.currSlide) return null;\n\n            \/* PhotoSwipe 5 conserva normalmente l'anchor di origine in\n               currSlide.data.element. Se non c'e', ricaviamolo dal dataSource. *\/\n            let el = pswp.currSlide.data ? pswp.currSlide.data.element : null;\n            if (!(el instanceof Element)) {\n                const index = pswp.currSlide.index;\n                const ds = pswp.options ? pswp.options.dataSource : null;\n                if (ds && !Array.isArray(ds) && Array.isArray(ds.items)) el = ds.items[index];\n                else if (Array.isArray(ds)) {\n                    const item = ds[index];\n                    el = item && item.element ? item.element : item;\n                }\n            }\n            if (el instanceof Element) {\n                if (el.matches && el.matches('a.cdc-image-link')) return el;\n                const closest = el.closest ? el.closest('a.cdc-image-link') : null;\n                if (closest) return closest;\n            }\n\n            \/* 4.11.5: dopo una navigazione prev\/next Lightbox with PhotoSwipe\n               non conserva sempre il nostro anchor .cdc-image-link dentro\n               currSlide.data.element. In quel caso identifichiamo la slide\n               corrente tramite il suo URL e la ricolleghiamo all'anchor CDC\n               presente nella galleria. Cosi' il pulsante ricompare anche\n               tornando sulla foto da sinistra o da destra. *\/\n            const currentData = pswp.currSlide.data || {};\n            const currentSrc = currentData.src || currentData.srcset || '';\n            if (currentSrc) {\n                let wanted = '';\n                try { wanted = new URL(String(currentSrc).split(' ')[0], window.location.href).href; } catch (_) {}\n                if (wanted) {\n                    const links = root.querySelectorAll('a.cdc-image-link');\n                    for (const link of links) {\n                        const href = link.getAttribute('href') || '';\n                        if (!href) continue;\n                        try {\n                            if (new URL(href, window.location.href).href === wanted) return link;\n                        } catch (_) {}\n                    }\n                }\n            }\n\n            \/* Ultimo fallback: l'indice PhotoSwipe coincide con l'ordine degli\n               anchor della galleria corrente. *\/\n            const links = root.querySelectorAll('a.cdc-image-link');\n            const index = pswp.currSlide.index;\n            return (Number.isInteger(index) && links[index]) ? links[index] : null;\n        }\n\n        function syncLinkedActionWithCurrentSlide(pswp) {\n            \/* Durante la visualizzazione del media accessorio il solo comando\n               ammesso e' \"Torna all'originale\". *\/\n            if (cdcLinkedState || document.body.classList.contains('cdc-pswp-linked-mode')) return;\n            removeLinkedPswpAction();\n            const mainLink = currentMainLinkFromPswp(pswp);\n            if (mainLink) showLinkedPswpAction(mainLink);\n        }\n\n        function hookPswpSlideChanges(attempt) {\n            attempt = attempt || 0;\n            const pswp = getPswpInstance();\n            if (!pswp) {\n                if (attempt < 20) window.setTimeout(() => hookPswpSlideChanges(attempt + 1), 50);\n                return;\n            }\n\n            if (!pswp.__cdcSlideChangeHook && typeof pswp.on === 'function') {\n                pswp.__cdcSlideChangeHook = true;\n                pswp.on('change', () => {\n                    syncLinkedActionWithCurrentSlide(pswp);\n                    updateLightboxLayout(pswp);\n                    restartCdcUiReadTimer();\n                });\n                pswp.on('close', () => {\n                    removeLinkedPswpAction();\n                    document.body.classList.remove('cdc-pswp-active');\n                    document.body.classList.remove('cdc-pswp-linked-mode');\n                    removeInfoToggle();\n                    clearCdcUiKeepAlive();\n                });\n            }\n            syncLinkedActionWithCurrentSlide(pswp);\n            updateLightboxLayout(pswp);\n        }\n\n        \/* 4.12.9 \u2014 lettura scheda: manteniamo viva la UI per circa 15 secondi.\n           PhotoSwipe tende a nasconderla prima; piccoli eventi sintetici, ignorati\n           dal nostro listener tramite isTrusted, ne rinviano l'auto-hide. *\/\n        let cdcUiKeepAliveTimers = [];\n        function clearCdcUiKeepAlive() {\n            cdcUiKeepAliveTimers.forEach(id => window.clearTimeout(id));\n            cdcUiKeepAliveTimers = [];\n        }\n        function pulseCdcUi() {\n            const pswp = getPswpInstance();\n            if (!pswp || !document.body.classList.contains('cdc-pswp-active')) return;\n            const target = (pswp.element instanceof Element) ? pswp.element : document;\n            try {\n                target.dispatchEvent(new MouseEvent('mousemove', { bubbles:true, cancelable:false, view:window }));\n            } catch (_) {\n                document.dispatchEvent(new Event('mousemove', { bubbles:true }));\n            }\n        }\n        function restartCdcUiReadTimer() {\n            clearCdcUiKeepAlive();\n            pulseCdcUi();\n            \/* Ultimo impulso a 11 s: con l'auto-hide nativo (~4 s) la UI\n               scompare intorno ai 15 s senza alterare PhotoSwipe. *\/\n            [3000, 6000, 9000, 11000].forEach(ms => {\n                cdcUiKeepAliveTimers.push(window.setTimeout(pulseCdcUi, ms));\n            });\n        }\n        document.addEventListener('mousemove', (e) => {\n            if (e.isTrusted && document.body.classList.contains('cdc-pswp-active')) restartCdcUiReadTimer();\n        }, {passive:true});\n        document.addEventListener('touchstart', (e) => {\n            if (e.isTrusted && document.body.classList.contains('cdc-pswp-active')) restartCdcUiReadTimer();\n        }, {passive:true});\n\n        \/* 4.12.9: sinistra\/destra navigano sempre; su\/giu risvegliano la UI\n           senza cambiare immagine. Il mouse\/touch continua a comportarsi come prima. *\/\n        document.addEventListener('keydown', (e) => {\n            if (!document.body.classList.contains('cdc-pswp-active')) return;\n            if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) return;\n            const tag = e.target && e.target.tagName ? e.target.tagName.toLowerCase() : '';\n            if (tag === 'input' || tag === 'textarea' || tag === 'select' || (e.target && e.target.isContentEditable)) return;\n            if (!['ArrowLeft','ArrowRight','ArrowUp','ArrowDown'].includes(e.key)) return;\n            const pswp = getPswpInstance();\n            if (!pswp) return;\n            e.preventDefault();\n            e.stopPropagation();\n            if (e.key === 'ArrowLeft' && typeof pswp.prev === 'function') pswp.prev();\n            if (e.key === 'ArrowRight' && typeof pswp.next === 'function') pswp.next();\n            if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n                document.body.classList.remove('cdc-pswp-info-hidden');\n                const target = (pswp.element instanceof Element) ? pswp.element : document;\n                try {\n                    target.dispatchEvent(new MouseEvent('mousemove', { bubbles:true, cancelable:false, view:window }));\n                } catch (_) {\n                    document.dispatchEvent(new Event('mousemove', { bubbles:true }));\n                }\n                updateLightboxLayout(pswp);\n                restartCdcUiReadTimer();\n            }\n        }, true);\n\n        root.addEventListener('click', (e) => {\n            const link = e.target.closest && e.target.closest('a.cdc-image-link, a.cdc-linked-source');\n            if (!link) return;\n            document.body.classList.add('cdc-pswp-active');\n            document.body.classList.remove('cdc-pswp-info-hidden');\n            if (link.classList.contains('cdc-image-link')) showLinkedPswpAction(link);\n            else removeLinkedPswpAction();\n\n            \/* 4.11.4: appena PhotoSwipe 5 e' disponibile, agganciamo change.\n               Il pulsante viene cosi' ricalcolato per OGNI slide corrente. *\/\n            hookPswpSlideChanges(0);\n            window.setTimeout(restartCdcUiReadTimer, 120);\n        });\n\n        \/* PhotoSwipe 4 aggiorna l'hash con gid\/pid: quando la lightbox si chiude\n           rimuoviamo la classe senza osservare continuamente il DOM. *\/\n        window.addEventListener('hashchange', () => {\n            const h = window.location.hash || '';\n            if (!\/\\bgid=\\d+\/.test(h) && !\/\\bpid=\\d+\/.test(h)) {\n                document.body.classList.remove('cdc-pswp-active');\n                document.body.classList.remove('cdc-pswp-linked-mode');\n                cdcLinkedState = null;\n                removeLinkedPswpAction();\n            }\n        });\n\n        if (provincia && provincia.tagName === 'SELECT') provincia.addEventListener('change', () => carica(1,false));\n        if (comune && comune.tagName === 'SELECT') comune.addEventListener('change', () => carica(1,false));\n        ricerca.addEventListener('input', () => { searchWrap.classList.toggle('has-text', ricerca.value.length > 0); });\n        const searchForm = root.querySelector('.cdc-search-form');\n        if (searchForm) searchForm.addEventListener('submit', (e) => { e.preventDefault(); carica(1,false); });\n        resetBtn.addEventListener('click', () => { if (provincia) provincia.value=''; if (comune) comune.value=''; ricerca.value=''; searchWrap.classList.remove('has-text'); ricerca.focus(); carica(1,false); });\n        viewBtns.forEach(btn => btn.addEventListener('click', () => setView(btn.dataset.view)));\n        window.addEventListener('resize', () => { clearTimeout(window.cdcResizeTimer); window.cdcResizeTimer=setTimeout(() => { updateTileHeight(); applicaLayoutDocumentale(); const p=getPswpInstance(); if(p) updateLightboxLayout(p); },100); });\n\n\n        setView(root.dataset.layout || 'masonry');\n        carica(1,false);\n        window.addEventListener('resize', () => {\n            if (!document.body.classList.contains('cdc-pswp-active')) return;\n            positionCdcTopControls();\n            positionLinkedAction();\n        });\n\n    })();\n    <\/script>\n    \n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"folder":[],"class_list":["post-343","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"admin","author_link":"https:\/\/coloridicalabria.it\/?author=1"},"uagb_comment_info":0,"uagb_excerpt":null,"_links":{"self":[{"href":"https:\/\/coloridicalabria.it\/index.php?rest_route=\/wp\/v2\/pages\/343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coloridicalabria.it\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/coloridicalabria.it\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/coloridicalabria.it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/coloridicalabria.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=343"}],"version-history":[{"count":13,"href":"https:\/\/coloridicalabria.it\/index.php?rest_route=\/wp\/v2\/pages\/343\/revisions"}],"predecessor-version":[{"id":2541,"href":"https:\/\/coloridicalabria.it\/index.php?rest_route=\/wp\/v2\/pages\/343\/revisions\/2541"}],"wp:attachment":[{"href":"https:\/\/coloridicalabria.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=343"}],"wp:term":[{"taxonomy":"folder","embeddable":true,"href":"https:\/\/coloridicalabria.it\/index.php?rest_route=%2Fwp%2Fv2%2Ffolder&post=343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}