{"id":179,"date":"2025-08-05T19:45:33","date_gmt":"2025-08-05T17:45:33","guid":{"rendered":"https:\/\/aviglianabasket.it\/?page_id=179"},"modified":"2026-07-31T09:10:22","modified_gmt":"2026-07-31T07:10:22","slug":"squadre-2","status":"publish","type":"page","link":"https:\/\/www.aviglianabasket.it\/?page_id=179","title":{"rendered":"Squadre"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"179\" class=\"elementor elementor-179\">\n\t\t\t\t<div class=\"elementor-element elementor-element-29f8e03 e-con-full e-flex e-con e-parent\" data-id=\"29f8e03\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4782176 elementor-widget elementor-widget-html\" data-id=\"4782176\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@700&display=swap');\r\n  \r\n  \/* Classe specifica ad alta priorit\u00e0 *\/\r\n  .wp-avigliana-basket-title {\r\n    font-family: 'Oswald', sans-serif !important;\r\n    font-weight: 800 !important;\r\n    font-style: italic !important;\r\n    text-transform: uppercase !important;\r\n    display: inline-flex !important;\r\n    align-items: baseline !important;\r\n    gap: 0.25em !important;\r\n    white-space: nowrap !important;\r\n    line-height: 0.92 !important;\r\n    \r\n    \/* Regola qui la grandezza del testo *\/\r\n    font-size: 64px !important; \r\n  }\r\n\r\n  .wp-avigliana-basket-title .txt-verde {\r\n    color: #1FAF5A !important;\r\n    font-family: 'Oswald', sans-serif !important;\r\n    font-weight: 800 !important;\r\n    font-style: italic !important;\r\n    letter-spacing: -0.03em !important;\r\n    display: inline !important;\r\n  }\r\n\r\n  .wp-avigliana-basket-title .txt-bianco {\r\n    color: #ffffff !important;\r\n    font-family: 'Oswald', sans-serif !important;\r\n    font-weight: 800 !important;\r\n    font-style: italic !important;\r\n    letter-spacing: -0.03em !important;\r\n    display: inline !important;\r\n  }\r\n<\/style>\r\n\r\n<div class=\"wp-avigliana-basket-title\">\r\n  <span class=\"txt-verde\">Avigliana<\/span>\r\n  <span class=\"txt-bianco\">Basket<\/span>\r\n<\/div>\r\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-493eed4 elementor-widget elementor-widget-html\" data-id=\"493eed4\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"it\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Squadre - Avigliana Basket<\/title>\n    <!-- Google Fonts -->\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Outfit:wght@300;400;700;800&family=Inter:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n    <!-- FontAwesome -->\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\">\n    \n    <style>\n        :root {\n            --primary: #009e60;\n            --primary-dark: #007a4b;\n            --bg-dark: #121212;\n            --bg-card: #1e1e1e;\n            --text-main: #f5f5f5;\n            --text-muted: #a0a0a0;\n            --glass-bg: rgba(30, 30, 30, 0.6);\n            --glass-border: rgba(255, 255, 255, 0.05);\n            --transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n        }\n\n        * {\n            box-sizing: border-box;\n            margin: 0;\n            padding: 0;\n        }\n\n        body {\n            font-family: 'Inter', sans-serif;\n            background-color: var(--bg-dark);\n            color: var(--text-main);\n            min-height: 100vh;\n            overflow-x: hidden;\n            background-image: \n                radial-gradient(circle at 15% 50%, rgba(0, 158, 96, 0.05) 0%, transparent 40%),\n                radial-gradient(circle at 85% 20%, rgba(0, 158, 96, 0.03) 0%, transparent 40%);\n        }\n\n        \/* Header *\/\n        .gallery-header {\n            text-align: center;\n            padding: 4rem 2rem 3rem;\n            position: relative;\n        }\n\n        .gallery-title {\n            font-family: 'Outfit', sans-serif;\n            font-size: 3.5rem;\n            font-weight: 800;\n            letter-spacing: -1px;\n            background: linear-gradient(135deg, #fff 0%, #a0a0a0 100%);\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n            margin-bottom: 1rem;\n            position: relative;\n            display: inline-block;\n        }\n\n        .gallery-title::after {\n            content: '';\n            position: absolute;\n            bottom: -10px;\n            left: 50%;\n            transform: translateX(-50%);\n            width: 60px;\n            height: 4px;\n            background: var(--primary);\n            border-radius: 2px;\n        }\n\n        .gallery-subtitle {\n            font-size: 1.1rem;\n            color: var(--text-muted);\n            max-width: 600px;\n            margin: 0 auto;\n            line-height: 1.6;\n        }\n\n        \/* Loader *\/\n        .loader-container {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            min-height: 40vh;\n        }\n\n        .loader {\n            width: 50px;\n            height: 50px;\n            border: 3px solid rgba(0, 158, 96, 0.3);\n            border-radius: 50%;\n            border-top-color: var(--primary);\n            animation: spin 1s ease-in-out infinite;\n        }\n\n        @keyframes spin {\n            to { transform: rotate(360deg); }\n        }\n\n        \/* Grid *\/\n        .gallery-container {\n            max-width: 1400px;\n            margin: 0 auto;\n            padding: 0 2rem 4rem;\n            opacity: 0;\n            transform: translateY(20px);\n            animation: fadeUp 0.8s ease forwards;\n        }\n\n        @keyframes fadeUp {\n            to { opacity: 1; transform: translateY(0); }\n        }\n\n        .gallery-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n            gap: 3rem 2rem;\n        }\n\n        \/* Photo Card *\/\n        .photo-card {\n            display: flex;\n            flex-direction: column;\n            gap: 1rem;\n        }\n\n        \/* Card Header (Sopra la foto) *\/\n        .photo-header {\n            text-align: center;\n            padding: 0 1rem;\n        }\n\n        .photo-team-name {\n            font-family: 'Outfit', sans-serif;\n            font-size: 1.7rem;\n            font-weight: 800;\n            color: #fff;\n            text-transform: uppercase;\n            letter-spacing: 1px;\n            margin-bottom: 0.2rem;\n        }\n\n        .photo-club-name {\n            font-family: 'Inter', sans-serif;\n            font-size: 0.95rem;\n            font-weight: 500;\n            color: var(--primary);\n            text-transform: uppercase;\n            letter-spacing: 2px;\n        }\n\n        \/* Image Wrapper *\/\n        .photo-img-wrapper {\n            background: var(--glass-bg);\n            border: 1px solid var(--glass-border);\n            border-radius: 16px;\n            overflow: hidden;\n            position: relative;\n            cursor: pointer;\n            box-shadow: 0 10px 30px rgba(0,0,0,0.3);\n            transition: var(--transition);\n            aspect-ratio: 4\/3;\n        }\n\n        .photo-img-wrapper:hover {\n            transform: translateY(-5px);\n            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4),\n                        0 0 20px rgba(0, 158, 96, 0.15);\n            border-color: rgba(0, 158, 96, 0.4);\n        }\n\n        .photo-img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            transition: transform 0.7s ease;\n        }\n\n        .photo-img-wrapper:hover .photo-img {\n            transform: scale(1.05);\n        }\n\n        .photo-overlay {\n            position: absolute;\n            inset: 0;\n            background: rgba(0,0,0,0.3);\n            opacity: 0;\n            transition: opacity 0.4s ease;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .photo-img-wrapper:hover .photo-overlay {\n            opacity: 1;\n        }\n\n        .photo-icon {\n            color: #fff;\n            font-size: 3rem;\n            opacity: 0;\n            transform: scale(0.5);\n            transition: var(--transition);\n            filter: drop-shadow(0 4px 6px rgba(0,0,0,0.5));\n        }\n\n        .photo-img-wrapper:hover .photo-icon {\n            opacity: 1;\n            transform: scale(1);\n        }\n\n        \/* Lightbox *\/\n        .lightbox {\n            position: fixed;\n            inset: 0;\n            background: rgba(0, 0, 0, 0.95);\n            backdrop-filter: blur(10px);\n            -webkit-backdrop-filter: blur(10px);\n            z-index: 9999;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            align-items: center;\n            opacity: 0;\n            visibility: hidden;\n            transition: opacity 0.4s ease, visibility 0.4s ease;\n        }\n\n        .lightbox.active {\n            opacity: 1;\n            visibility: visible;\n        }\n\n        .lightbox-close {\n            position: absolute;\n            top: 2rem;\n            right: 2rem;\n            color: #fff;\n            font-size: 2.5rem;\n            cursor: pointer;\n            transition: color 0.3s ease, transform 0.3s ease;\n            z-index: 10000;\n        }\n\n        .lightbox-close:hover {\n            color: var(--primary);\n            transform: rotate(90deg);\n        }\n\n        .lightbox-content {\n            position: relative;\n            max-width: 90vw;\n            max-height: 85vh;\n            transform: scale(0.9);\n            transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n            display: flex;\n            justify-content: center;\n        }\n\n        .lightbox.active .lightbox-content {\n            transform: scale(1);\n        }\n\n        .lightbox-img {\n            max-width: 100%;\n            max-height: 85vh;\n            border-radius: 8px;\n            box-shadow: 0 0 50px rgba(0, 158, 96, 0.2);\n            object-fit: contain;\n        }\n\n        .lightbox-caption {\n            margin-top: 1.5rem;\n            text-align: center;\n        }\n\n        .lightbox-caption .cap-team {\n            font-family: 'Outfit', sans-serif;\n            font-size: 1.8rem;\n            font-weight: 800;\n            color: #fff;\n            text-transform: uppercase;\n        }\n        \n        .lightbox-caption .cap-club {\n            font-family: 'Inter', sans-serif;\n            font-size: 1rem;\n            color: var(--primary);\n            letter-spacing: 2px;\n            text-transform: uppercase;\n        }\n\n        \/* Empty State *\/\n        .empty-state {\n            text-align: center;\n            padding: 5rem 2rem;\n            grid-column: 1 \/ -1;\n        }\n        \n        .empty-state i {\n            font-size: 4rem;\n            color: var(--text-muted);\n            margin-bottom: 1.5rem;\n            opacity: 0.5;\n        }\n    <\/style>\n<\/head>\n<body>\n\n    <header class=\"gallery-header\">\n        <h1 class=\"gallery-title\">Le Nostre Squadre<\/h1>\n        <p class=\"gallery-subtitle\"><\/p>\n    <\/header>\n\n    <div id=\"loader\" class=\"loader-container\">\n        <div class=\"loader\"><\/div>\n    <\/div>\n\n    <main id=\"gallery-container\" class=\"gallery-container\" style=\"display: none;\">\n        <div id=\"gallery-grid\" class=\"gallery-grid\">\n            <!-- Photos injected here -->\n        <\/div>\n    <\/main>\n\n    <!-- Lightbox -->\n    <div id=\"lightbox\" class=\"lightbox\" onclick=\"closeLightbox()\">\n        <i class=\"fa-solid fa-xmark lightbox-close\"><\/i>\n        <div class=\"lightbox-content\" onclick=\"event.stopPropagation()\">\n            <img decoding=\"async\" crossorigin=\"anonymous\" id=\"lightbox-img\" class=\"lightbox-img\" src=\"\" alt=\"Galleria Foto\" referrerpolicy=\"no-referrer\" title=\"\">\n        <\/div>\n        <div id=\"lightbox-caption\" class=\"lightbox-caption\" onclick=\"event.stopPropagation()\"><\/div>\n    <\/div>\n\n    <script>\n        \/\/ Modificato URL per richiedere esplicitamente solo le foto marcate con \"FOTO\"\n        const API_URL = \"https:\/\/www.aviglianabasket.cloud\/apiF.php?action=photos&pubblicare=FOTO\";\n        const UPLOADS_BASE = \"https:\/\/www.aviglianabasket.cloud\/uploads\/\";\n\n        \/\/ Ordine delle foto basato sul campo PUNTEGGIO inserito nel gestionale (es. 01, 02)\n        document.addEventListener('DOMContentLoaded', fetchPhotos);\n\n        async function fetchPhotos() {\n            try {\n                const response = await fetch(API_URL);\n                const data = await response.json();\n                \n                if (data.status === 'success' && data.data) {\n                    \/\/ Filter only photos meant for the gallery\n                    let galleryPhotos = data.data.filter(p => p.pubblicare === 'FOTO');\n                    \n                    \/\/ Ordina le foto in base al campo PUNTEGGIO (es. \"01\", \"02\")\n                    galleryPhotos.sort((a, b) => {\n                        \/\/ Estrai i numeri, se non ci sono o non sono validi usa 999 come fallback per metterle in fondo\n                        const pA = parseInt((a.punteggio || '').replace(\/\\D\/g, '') || '999', 10);\n                        const pB = parseInt((b.punteggio || '').replace(\/\\D\/g, '') || '999', 10);\n                        \n                        if (pA !== pB) return pA - pB;\n                        \n                        \/\/ Fallback: se i numeri sono uguali o mancanti, ordina alfabeticamente\n                        return (a.nome_squadra || '').localeCompare(b.nome_squadra || '');\n                    });\n\n                    renderGallery(galleryPhotos);\n                } else {\n                    showEmptyState(\"Impossibile caricare le foto in questo momento.\");\n                }\n            } catch (error) {\n                console.error(\"Errore nel caricamento delle foto:\", error);\n                showEmptyState(\"Errore di connessione al server.\");\n            }\n        }\n\n        function renderGallery(photos) {\n            const loader = document.getElementById('loader');\n            const container = document.getElementById('gallery-container');\n            const grid = document.getElementById('gallery-grid');\n\n            loader.style.display = 'none';\n            container.style.display = 'block';\n\n            if (photos.length === 0) {\n                showEmptyState(\"Non ci sono ancora foto delle squadre disponibili.\");\n                return;\n            }\n\n            grid.innerHTML = '';\n\n            photos.forEach((photo, index) => {\n                const isMatchata = (photo.pubblicare_versione === 'matchata' && photo.filename_match);\n                const filename = isMatchata ? photo.filename_match : photo.filename;\n                const fullUrl = UPLOADS_BASE + filename + \"?t=\" + Date.now();\n                const teamName = photo.nome_squadra || 'Avigliana Basket';\n\n                const card = document.createElement('div');\n                card.className = 'photo-card';\n                card.style.animationDelay = `${(index % 10) * 0.1}s`;\n\n                const imgTag = '<im' + 'g src=\"' + fullUrl + '\" alt=\"' + teamName + '\" class=\"photo-img\" referrerpolicy=\"no-referrer\">';\n                \n                card.innerHTML = `\n                    <div class=\"photo-header\">\n                        <div class=\"photo-team-name\">${teamName}<\/div>\n                        <div class=\"photo-club-name\">Avigliana Basket<\/div>\n                    <\/div>\n                    <div class=\"photo-img-wrapper\" onclick=\"openLightbox('${fullUrl}', '${teamName}')\">\n                        ${imgTag}\n                        <div class=\"photo-overlay\">\n                            <i class=\"fa-solid fa-expand photo-icon\"><\/i>\n                        <\/div>\n                    <\/div>\n                `;\n\n                grid.appendChild(card);\n            });\n        }\n\n        function showEmptyState(message) {\n            const loader = document.getElementById('loader');\n            const container = document.getElementById('gallery-container');\n            const grid = document.getElementById('gallery-grid');\n            \n            loader.style.display = 'none';\n            container.style.display = 'block';\n            \n            grid.innerHTML = `\n                <div class=\"empty-state\">\n                    <i class=\"fa-regular fa-image\"><\/i>\n                    <h3>Nessuna foto trovata<\/h3>\n                    <p style=\"color: var(--text-muted); margin-top: 10px;\">${message}<\/p>\n                <\/div>\n            `;\n        }\n\n        function openLightbox(url, teamName) {\n            const lightbox = document.getElementById('lightbox');\n            const img = document.getElementById('lightbox-img');\n            const cap = document.getElementById('lightbox-caption');\n\n            img.removeAttribute('crossorigin'); \/\/ Override WordPress injection\n            img.crossOrigin = null;\n            img.src = url + (url.includes('?') ? '&' : '?') + \"cb=\" + Date.now();\n            cap.innerHTML = `\n                <div class=\"cap-team\">${teamName}<\/div>\n                <div class=\"cap-club\">Avigliana Basket<\/div>\n            `;\n            \n            lightbox.classList.add('active');\n            document.body.style.overflow = 'hidden'; \/\/ Prevent scrolling\n        }\n\n        function closeLightbox() {\n            const lightbox = document.getElementById('lightbox');\n            lightbox.classList.remove('active');\n            document.body.style.overflow = '';\n            \n            setTimeout(() => {\n                document.getElementById('lightbox-img').src = '';\n            }, 400); \/\/ Wait for transition\n        }\n\n        \/\/ Close on escape key\n        document.addEventListener('keydown', (e) => {\n            if (e.key === 'Escape') closeLightbox();\n        });\n    <\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Avigliana Basket Squadre &#8211; Avigliana Basket Le Nostre Squadre<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"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":"","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":""},"class_list":["post-179","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.aviglianabasket.it\/index.php?rest_route=\/wp\/v2\/pages\/179","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aviglianabasket.it\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.aviglianabasket.it\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.aviglianabasket.it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aviglianabasket.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=179"}],"version-history":[{"count":109,"href":"https:\/\/www.aviglianabasket.it\/index.php?rest_route=\/wp\/v2\/pages\/179\/revisions"}],"predecessor-version":[{"id":6604,"href":"https:\/\/www.aviglianabasket.it\/index.php?rest_route=\/wp\/v2\/pages\/179\/revisions\/6604"}],"wp:attachment":[{"href":"https:\/\/www.aviglianabasket.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}