body { font-family: sans-serif; margin: 0; padding: 0; background: #fafafa; } header { padding: 10px 15px; background: #333; color: white; } .gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; padding: 10px; } .thumb { cursor: pointer; overflow: hidden; border-radius: 4px; border: 1px solid #ddd; background: white; position: relative; aspect-ratio: 1 / 1; } .thumb img { width: 100%; height: 100%; object-fit: cover; display: block; } /* Icona play per i video */ .video-thumb { position: relative; } .play-icon { position: absolute; bottom: 8px; right: 8px; background: rgba(0,0,0,0.6); color: white; padding: 4px 6px; border-radius: 4px; font-size: 14px; } /* Modal */ .modal { position: fixed; inset: 0; background: rgba(0,0,0,0.8); display: none; align-items: center; justify-content: center; z-index: 1000; } .modal.open { display: flex; } /* 🔥 FIX IMPORTANTE: il modal ha dimensione fissa */ .modal-content { width: 90vw; height: 90vh; position: relative; display: flex; justify-content: center; align-items: center; } /* 🔥 FIX: contenitore media sempre a dimensione piena */ #modalMediaContainer { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } /* 🔥 FIX: preview e full-res occupano lo stesso spazio */ #modalMediaContainer img, #modalMediaContainer video { width: 100%; height: 100%; object-fit: contain; display: block; } .modal-close { position: absolute; top: -10px; right: -10px; background: #fff; border-radius: 50%; width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; cursor: pointer; font-weight: bold; border: 1px solid #ccc; } /* Info Button */ .modal-info-btn { position: absolute; bottom: -10px; right: 40px; background: #fff; border-radius: 50%; width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; cursor: pointer; border: 1px solid #ccc; font-size: 16px; z-index: 1500; } /* Info Panel */ .info-panel { position: fixed; top: 0; right: 0; width: 320px; height: 100%; background: #fff; padding: 16px; box-shadow: -2px 0 6px rgba(0,0,0,0.25); overflow-y: auto; z-index: 2000; /* 🔥 Nasconde completamente il pannello */ transform: translateX(100%); transition: transform 0.3s ease; } .info-panel.open { /* 🔥 Mostra il pannello */ transform: translateX(0); } .info-panel h3 { margin-top: 0; } .info-row { margin-bottom: 10px; } .info-row b { display: inline-block; width: 110px; } .info-map { width: 100%; height: 250px; margin-top: 15px; border-radius: 6px; overflow: hidden; border: 1px solid #ccc; } /* Leaflet */ .leaflet-container { background: #ddd; outline: none; } .map-btn { margin-left: 10px; padding: 6px 12px; background: #fff; border: 1px solid #ccc; border-radius: 4px; cursor: pointer; } .global-map { display: none; width: 100%; height: calc(100vh - 60px); z-index: 900; } .global-map.open { display: block; } .gallery.hidden { display: none; } .global-map { display: none; width: 100%; height: calc(100vh - 60px); } .global-map.open { display: block; } /* =============================== MARKER FOTO (singolo) =============================== */ .photo-marker { width: 48px; height: 48px; border-radius: 10px; overflow: hidden; position: relative; box-shadow: 0 2px 6px rgba(0,0,0,0.25); background: #fff; } .photo-marker img { width: 100%; height: 100%; object-fit: cover; } /* =============================== CLUSTER FOTO (sovrapposizione) =============================== */ .photo-cluster { width: 56px; height: 56px; position: relative; border-radius: 12px; overflow: visible; /* serve per far uscire la miniatura dietro */ } /* Miniatura dietro (sfocata + opacità) */ .cluster-back { position: absolute; top: 6px; left: 6px; width: 48px; height: 48px; border-radius: 10px; object-fit: cover; opacity: 0.5; filter: blur(1px); transform: scale(0.95); } /* Miniatura davanti (principale) */ .cluster-front { position: absolute; top: 0; left: 0; width: 48px; height: 48px; border-radius: 10px; object-fit: cover; box-shadow: 0 2px 6px rgba(0,0,0,0.35); }