PageSourceSearch

https://meteopomarico.it/privacy.php

html meteopomarico.it collected 2026-10-02 01:03:35 UTC 39,954 bytes, 700 lines download raw bytes

1<!DOCTYPE html>
2<html lang="it">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <meta name="robots" content="noindex">
7    <title>Privacy Policy — MeteoPomarico</title>
8    <link rel="preconnect" href="https://fonts.googleapis.com">
9    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
11    <link rel="icon" type="image/png" sizes="32x32" href="assets/img/favicon.png">
12    <style>
13        :root {
14            --bg-deep: #020617;
15            --bg-body: #030a1f;
16            --card-bg: rgba(15, 23, 42, 0.6);
17            --card-border: rgba(59, 130, 246, 0.12);
18            --text: #e2e8f0;
19            --text-sec: #94a3b8;
20            --accent: #3b82f6;
21            --accent-light: #60a5fa;
22            --accent-glow: rgba(59, 130, 246, 0.15);
23        }
24
25        * { margin: 0; padding: 0; box-sizing: border-box; }
26
27        html { scroll-behavior: smooth; }
28
29        body {
30            font-family: 'Inter', -apple-system, system-ui, sans-serif;
31            background: var(--bg-body);
32            color: var(--text);
33            line-height: 1.7;
34            min-height: 100vh;
35            overflow-x: hidden;
36        }
37
38        /* ── Animated background orbs ── */
39        .bg-orbs {
40            position: fixed; inset: 0;
41            pointer-events: none; z-index: 0;
42            overflow: hidden;
43        }
44        .bg-orbs span {
45            position: absolute;
46            border-radius: 50%;
47            filter: blur(80px);
48            opacity: 0.12;
49            animation: float 20s ease-in-out infinite alternate;
50        }
51        .bg-orbs span:nth-child(1) {
52            width: 600px; height: 600px;
53            background: #3b82f6;
54            top: -10%; left: -10%;
55            animation-duration: 22s;
56        }
57        .bg-orbs span:nth-child(2) {
58            width: 400px; height: 400px;
59            background: #06b6d4;
60            bottom: -5%; right: -5%;
61            animation-duration: 18s;
62            animation-delay: -5s;
63        }
64        .bg-orbs span:nth-child(3) {
65            width: 300px; height: 300px;
66            background: #8b5cf6;
67            top: 40%; left: 60%;
68            animation-duration: 25s;
69            animation-delay: -10s;
70        }
71        @keyframes float {
72            0%   { transform: translate(0, 0) scale(1); }
73            100% { transform: translate(40px, -30px) scale(1.1); }
74        }
75
76        /* ── Header / Navbar ── */
77        .navbar {
78            position: sticky; top: 0; z-index: 100;
79            background: rgba(2, 6, 23, 0.8);
80            backdrop-filter: blur(20px);
81            -webkit-backdrop-filter: blur(20px);
82            border-bottom: 1px solid var(--card-border);
83            padding: 0 1.5rem;
84        }
85        .navbar-inner {
86            max-width: 900px;
87            margin: 0 auto;
88            display: flex;
89            align-items: center;
90            justify-content: space-between;
91            height: 64px;
92        }
93        .nav-brand {
94            display: flex; align-items: center; gap: 0.5rem;
95            text-decoration: none; color: var(--text);
96            font-weight: 700; font-size: 1.2rem;
97        }
98        .nav-brand span { color: var(--accent); }
99        .nav-links { display: flex; gap: 0.25rem; }
100        .nav-links a {
101            color: var(--text-sec);
102            text-decoration: none;
103            font-size: 0.85rem;
104            font-weight: 500;
105            padding: 0.5rem 0.85rem;
106            border-radius: 8px;
107            transition: all 0.2s;
108        }
109        .nav-links a:hover,
110        .nav-links a.active {
111            color: var(--text);
112            background: var(--accent-glow);
113        }
114        .nav-links a.active { color: var(--accent); }
115
116        /* Language toggle */
117        .lang-toggle {
118            display: flex;
119            background: rgba(30, 41, 59, 0.5);
120            border-radius: 8px;
121            border: 1px solid var(--card-border);
122            overflow: hidden;
123        }
124        .lang-toggle button {
125            background: none; border: none;
126            color: var(--text-sec);
127            font-family: inherit;
128            font-size: 0.8rem; font-weight: 600;
129            padding: 0.35rem 0.7rem;
130            cursor: pointer;
131            transition: all 0.2s;
132        }
133        .lang-toggle button.active {
134            background: var(--accent);
135            color: #fff;
136        }
137
138        /* ── Main content ── */
139        .page-wrap {
140            position: relative; z-index: 1;
141            max-width: 800px;
142            margin: 0 auto;
143            padding: 3rem 1.5rem 4rem;
144        }
145
146        /* Hero */
147        .hero {
148            text-align: center;
149            margin-bottom: 3rem;
150        }
151        .hero h1 {
152            font-size: 2.5rem;
153            font-weight: 800;
154            background: linear-gradient(135deg, var(--accent-light), #a78bfa);
155            -webkit-background-clip: text;
156            -webkit-text-fill-color: transparent;
157            background-clip: text;
158            margin-bottom: 0.5rem;
159        }
160        .hero .date {
161            color: var(--text-sec);
162            font-size: 0.9rem;
163        }
164        .hero .intro {
165            color: var(--text-sec);
166            margin-top: 1rem;
167            max-width: 600px;
168            margin-left: auto;
169            margin-right: auto;
170            font-size: 0.95rem;
171        }
172
173        /* Sections */
174        .section {
175            background: var(--card-bg);
176            backdrop-filter: blur(12px);
177            -webkit-backdrop-filter: blur(12px);
178            border: 1px solid var(--card-border);
179            border-radius: 16px;
180            padding: 2rem;
181            margin-bottom: 1.25rem;
182            transition: border-color 0.3s;
183        }
184        .section:hover {
185            border-color: rgba(59, 130, 246, 0.25);
186        }
187        .section-number {
188            display: inline-block;
189            background: var(--accent-glow);
190            color: var(--accent);
191            font-size: 0.75rem;
192            font-weight: 700;
193            padding: 0.2rem 0.6rem;
194            border-radius: 6px;
195            margin-bottom: 0.75rem;
196        }
197        .section h2 {
198            font-size: 1.2rem;
199            font-weight: 700;
200            color: var(--text);
201            margin-bottom: 0.75rem;
202        }
203        .section p {
204            color: var(--text-sec);
205            margin-bottom: 0.6rem;
206            font-size: 0.92rem;
207        }
208        .section ul {
209            padding-left: 1.25rem;
210            margin-top: 0.5rem;
211        }
212        .section li {
213            color: var(--text-sec);
214            margin-bottom: 0.4rem;
215            font-size: 0.92rem;
216        }
217        .section strong { color: var(--text); }
218
219        .highlight-box {
220            background: var(--accent-glow);
221            border-left: 3px solid var(--accent);
222            border-radius: 0 8px 8px 0;
223            padding: 0.75rem 1rem;
224            margin-top: 0.75rem;
225            font-size: 0.88rem;
226            color: var(--accent-light);
227        }
228
229        /* ── Footer ── */
230        .footer {
231            position: relative; z-index: 1;
232            border-top: 1px solid var(--card-border);
233            padding: 2.5rem 1.5rem;
234            text-align: center;
235        }
236        .footer-brand {
237            font-weight: 700; font-size: 1.1rem;
238            color: var(--text); margin-bottom: 0.25rem;
239        }
240        .footer-brand span { color: var(--accent); }
241        .footer-sub {
242            color: var(--text-sec);
243            font-size: 0.8rem;
244            margin-bottom: 1rem;
245        }
246        .footer-links {
247            display: flex;
248            justify-content: center;
249            gap: 1.5rem;
250            flex-wrap: wrap;
251            margin-bottom: 1.5rem;
252        }
253        .footer-links a {
254            color: var(--text-sec);
255            text-decoration: none;
256            font-size: 0.85rem;
257            transition: color 0.2s;
258        }
259        .footer-links a:hover { color: var(--accent); }
260        .footer-copy {
261            color: var(--text-sec);
262            font-size: 0.75rem;
263            opacity: 0.7;
264        }
265        a { color: var(--accent); }
266
267        /* ── Mobile menu ── */
268        .mobile-menu-btn {
269            display: none;
270            background: none; border: none;
271            color: var(--text); cursor: pointer;
272            padding: 0.5rem;
273        }
274        .mobile-menu-btn svg { width: 24px; height: 24px; }
275        .mobile-drawer {
276            display: none;
277            position: fixed; inset: 0;
278            z-index: 200;
279            background: rgba(2, 6, 23, 0.95);
280            backdrop-filter: blur(20px);
281            flex-direction: column;
282            align-items: center;
283            justify-content: center;
284            gap: 1.5rem;
285        }
286        .mobile-drawer.open { display: flex; }
287        .mobile-drawer a {
288            color: var(--text);
289            text-decoration: none;
290            font-size: 1.3rem;
291            font-weight: 600;
292        }
293        .mobile-drawer .close-btn {
294            position: absolute; top: 1rem; right: 1.5rem;
295            background: none; border: none;
296            color: var(--text); cursor: pointer;
297            font-size: 2rem;
298        }
299
300        /* Honeypot trap - hidden from humans, visible to bots */
301        .hp-trap {
302            position: absolute;
303            left: -9999px;
304            opacity: 0;
305            height: 0;
306            width: 0;
307            overflow: hidden;
308            pointer-events: none;
309        }
310
311        @media (max-width: 640px) {
312            .nav-links, .lang-toggle-desktop { display: none; }
313            .mobile-menu-btn { display: block; }
314            .hero h1 { font-size: 1.8rem; }
315            .section { padding: 1.5rem; }
316            .page-wrap { padding: 2rem 1rem 3rem; }
317        }
318    </style>
319</head>
320<body>
321    <div class="bg-orbs">
322        <span></span><span></span><span></span>
323    </div>
324
325    <!-- Navbar -->
326    <nav class="navbar">
327        <div class="navbar-inner">
328            <a href="/" class="nav-brand">Meteo<span>Pomarico</span></a>
329            <div class="nav-links">
330                <a href="/">Home</a>
331                <a href="/privacy.php" class="active">Privacy</a>
332            </div>
333            <div class="lang-toggle lang-toggle-desktop">
334                <button class="active" onclick="setLang('it')">IT</button>
335                <button onclick="setLang('en')">EN</button>
336            </div>
337            <button class="mobile-menu-btn" onclick="toggleDrawer()">
338                <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>
339            </button>
340        </div>
341    </nav>
342
343    <!-- Mobile drawer -->
344    <div class="mobile-drawer" id="drawer">
345        <button class="close-btn" onclick="toggleDrawer()">&times;</button>
346        <a href="/" onclick="toggleDrawer()">Home</a>
347        <a href="/privacy.php" onclick="toggleDrawer()">Privacy</a>
348        <div class="lang-toggle" style="margin-top:1rem;">
349            <button class="active" onclick="setLang('it')">IT</button>
350            <button onclick="setLang('en')">EN</button>
351        </div>
352    </div>
353
354    <!-- Content -->
355    <div class="page-wrap">
356        <div class="hero">
357            <h1 data-i18n="title">Privacy Policy</h1>
358            <p class="date" data-i18n="updated">Ultimo aggiornamento: 17 aprile 2026</p>
359            <p class="intro" data-i18n="intro">MeteoPomarico è un'applicazione web e mobile che fornisce dati meteo in tempo reale per Pomarico e la Basilicata. Il Servizio è sviluppato e gestito da Antonio Angelotti.</p>
360        </div>
361
362        <!-- 1 -->
363        <div class="section">
364            <span class="section-number">01</span>
365            <h2 data-i18n="s1_title">Dati raccolti</h2>
366            <p data-i18n="s1_text">MeteoPomarico <strong>non raccoglie dati personali</strong> degli utenti. In particolare:</p>
367            <ul>
368                <li data-i18n="s1_li1">Non è richiesta alcuna registrazione o creazione di account</li>
369                <li data-i18n="s1_li2">Non vengono raccolti nome, email, numero di telefono o altri dati identificativi</li>
370                <li data-i18n="s1_li3">Non vengono utilizzati cookie di profilazione o tracciamento</li>
371                <li data-i18n="s1_li4">Non viene tracciata la posizione dell'utente</li>
372            </ul>
373            <div class="highlight-box" data-i18n="s1_highlight">I tuoi dati personali restano sul tuo dispositivo. L'unica informazione inviata al server è un identificatore anonimo (hash non riconducibile a te) usato esclusivamente per prevenire spam quando pubblichi una segnalazione anonima sulle spiagge — vedi sezione 4.</div>
374        </div>
375
376        <!-- 2 -->
377        <div class="section">
378            <span class="section-number">02</span>
379            <h2 data-i18n="s2_title">Archiviazione locale</h2>
380            <p data-i18n="s2_text">L'app e il sito web possono salvare preferenze utente (tema, lingua, unità di misura) localmente sul dispositivo tramite LocalStorage o DataStore. Questi dati <strong>non vengono trasmessi</strong> a server esterni.</p>
381        </div>
382
383        <!-- 3 -->
384        <div class="section">
385            <span class="section-number">03</span>
386            <h2 data-i18n="s3_title">Richieste di rete</h2>
387            <p data-i18n="s3_text">MeteoPomarico effettua richieste di rete per ottenere dati meteo, cartografici e di comunità:</p>
388            <ul>
389                <li><strong>meteopomarico.it</strong> — <span data-i18n="s3_li0">Server proprio: meteo aggregato, allerte, segnalazioni anonime sulle spiagge (vedi sezione 4). Tutto il traffico è in HTTPS.</span></li>
390                <li><strong>Open-Meteo</strong> — <span data-i18n="s3_li1">Previsioni meteo, qualità dell'aria, dati marini (open source, nessun tracciamento)</span></li>
391                <li><strong>CARTO / MapLibre</strong>
391 — <span data-i18n="s3_li2">Mappe vettoriali per la visualizzazione cartografica</span></li>
392                <li><strong>Windy.com</strong> — <span data-i18n="s3_li3">Widget radar satellitare e vento (embed iframe)</span></li>
393                <li><strong>Protezione Civile (DPC)</strong> — <span data-i18n="s3_li4">Bollettini di allerta meteo</span></li>
394                <li><strong>WeatherFlow Tempest</strong> — <span data-i18n="s3_li5">Dati in tempo reale dalla stazione meteo locale installata a Pomarico (MT)</span></li>
395            </ul>
396            <p data-i18n="s3_note">La tua posizione GPS non viene mai trasmessa a questi servizi.</p>
397        </div>
398
399        <!-- 4 — NUOVA: UGC + device hash anonimo -->
400        <div class="section">
401            <span class="section-number">04</span>
402            <h2 data-i18n="s_ugc_title">Segnalazioni anonime sulle spiagge (UGC)</h2>
403            <p data-i18n="s_ugc_intro">Dall'app MeteoPomarico puoi pubblicare segnalazioni in tempo reale sulle spiagge (es. presenza di meduse, bandiera rossa, parcheggio pieno). Queste segnalazioni sono <strong>visibili a tutti gli utenti</strong> e contribuiscono a una bacheca comunitaria sulla scheda di ogni spiaggia.</p>
404
405            <p data-i18n="s_ugc_what_label"><strong>Cosa viene pubblicato:</strong></p>
406            <ul>
407                <li data-i18n="s_ugc_what_li1">Solo categorie predefinite (10 tipi fissi). <strong>Nessun testo libero, nessuna foto, nessun video, nessun nome utente.</strong></li>
408                <li data-i18n="s_ugc_what_li2">L'identificatore della spiaggia e il tipo di segnalazione.</li>
409            </ul>
410
411            <p data-i18n="s_ugc_id_label"><strong>Identificatore anonimo del dispositivo:</strong></p>
412            <ul>
413                <li data-i18n="s_ugc_id_li1">Alla prima apertura dell'app viene generato un UUID casuale, salvato solo localmente.</li>
414                <li data-i18n="s_ugc_id_li2">Quando pubblichi una segnalazione, viene calcolato un <strong>hash SHA-256</strong> dell'UUID e inviato al server.</li>
415                <li data-i18n="s_ugc_id_li3">L'hash è <strong>anonimo e irreversibile</strong>: non può essere ricondotto a te, al tuo dispositivo o a un account.</li>
416                <li data-i18n="s_ugc_id_li4">Scopo unico: prevenire spam (limite di 5 segnalazioni al giorno per dispositivo, una sola conferma per spiaggia/tipo ogni 4 ore).</li>
417                <li data-i18n="s_ugc_id_li5">Non vengono usati altri identificatori del dispositivo (no IMEI, no Android ID, no advertising ID, no MAC).</li>
418            </ul>
419
420            <p data-i18n="s_ugc_mod_label"><strong>Sistema di moderazione:</strong></p>
421            <ul>
422                <li data-i18n="s_ugc_mod_li1">Al primo invio di una segnalazione devi accettare i termini d'uso (visibili in un dialog dentro l'app).</li>
423                <li data-i18n="s_ugc_mod_li2">Su ogni segnalazione altrui è presente un pulsante "Segnala come falsa" per moderazione comunitaria.</li>
424                <li data-i18n="s_ugc_mod_li3">Una segnalazione che riceve almeno 3 voti di "falsa" entro 4 ore viene <strong>nascosta automaticamente</strong>.</li>
425                <li data-i18n="s_ugc_mod_li4">Tutte le segnalazioni <strong>scadono automaticamente dopo 4 ore</strong> e vengono cancellate dal database del server tramite un cron orario.</li>
426                <li data-i18n="s_ugc_mod_li5">I voti di "falsa" (abuse-flag) vengono cancellati dal server entro 24 ore.</li>
427            </ul>
428
429            <div class="highlight-box" data-i18n="s_ugc_highlight">Le segnalazioni non sono messaggi tra utenti né chat: sono dati comunitari aggregati, anonimi e a vita breve. Non c'è alcun profilo utente, alcuna interazione utente-utente diretta, alcuna informazione personale identificativa.</div>
430        </div>
431
432        <!-- 5 -->
433        <div class="section">
434            <span class="section-number">05</span>
435            <h2 data-i18n="s4_title">Servizi di terze parti</h2>
436            <p data-i18n="s4_text">MeteoPomarico <strong>non utilizza SDK di analisi, pubblicità o crash reporting</strong>. Non sono integrati servizi come Google Analytics, Firebase Analytics, Facebook SDK o simili. Ciascun servizio esterno utilizzato per i dati ha una propria privacy policy.</p>
437        </div>
438
439        <!-- 6 -->
440        <div class="section">
441            <span class="section-number">06</span>
442            <h2 data-i18n="s5_title">Account e registrazione</h2>
443            <p data-i18n="s5_text">L'app e il sito web <strong>non richiedono la creazione di un account</strong>. Non è necessario fornire email, password o altri dati personali per utilizzare il servizio.</p>
444        </div>
445
446        <!-- 7 -->
447        <div class="section">
448            <span class="section-number">07</span>
449            <h2 data-i18n="s6_title">Permessi richiesti (app Android)</h2>
450            <ul>
451                <li><strong>Internet</strong> — <span data-i18n="s6_li1">Per scaricare dati meteo, mappe e bollettini di allerta</span></li>
452                <li><strong data-i18n="s6_li2_label">Notifiche</strong> — <span data-i18n="s6_li2">Per inviare avvisi di allerta meteo (opzionale, disattivabile)</span></li>
453            </ul>
454            <p data-i18n="s6_note">L'app non richiede accesso a posizione, fotocamera, contatti o altri dati sensibili.</p>
455        </div>
456
457        <!-- 8 -->
458        <div class="section">
459            <span class="section-number">08</span>
460            <h2 data-i18n="s7_title">Eliminazione dei dati</h2>
461            <p data-i18n="s7_text">Tutte le preferenze utente, le statistiche e l'identificatore anonimo del dispositivo sono memorizzate <strong>solo localmente</strong>: per cancellarle è sufficiente svuotare i dati dell'app dalle impostazioni di Android oppure disinstallare l'applicazione.</p>
462            <p data-i18n="s7_text2">Per quanto riguarda i dati lato server: le segnalazioni anonime sulle spiagge vengono cancellate automaticamente entro <strong>4 ore</strong>; i voti "Segnala come falsa" entro <strong>24 ore</strong>. Reinstallando l'app viene generato un nuovo identificatore anonimo che non ha alcun collegamento con quello precedente.</p>
463        </div>
464
465        <!-- 9 -->
466        <div class="section">
467            <span class="section-number">09</span>
468            <h2 data-i18n="s8_title">Privacy dei minori</h2>
469            <p data-i18n="s8_text">Il Servizio non è diretto a minori di 13 anni e non raccoglie consapevolmente informazioni da minori.</p>
470        </div>
471
472        <!-- 10 -->
473        <div class="section">
474            <span class="section-number">10</span>
475            <h2 data-i18n="s9_title">Limitazioni di responsabilità</h2>
476            <p data-i18n="s9_text_a">I dati meteo forniti da MeteoPomarico provengono da fonti terze (Open-Meteo, Protezione Civile, WeatherFlow Tempest) e vengono presentati <strong>a solo scopo informativo</strong>. Il gestore del servizio:</p>
477            <ul>
478                <li data-i18n="s9_li1">Non garantisce l'accuratezza, la completezza o la tempestività dei dati visualizzati</li>
479                <li data-i18n="s9_li2">Non è responsabile di eventuali decisioni prese sulla base delle informazioni fornite dal servizio</li>
480                <li data-i18n="s9_li3">Non è responsabile di danni diretti o indiretti derivanti dall'uso o dall'impossibilità di usare il servizio</li>
481                <li data-i18n="s9_li4">Non garantisce la continuità o la disponibilità del servizio, che può essere interrotto in qualsiasi momento senza preavviso</li>
482            </ul>
483            <div class="highlight-box" data-i18n="s9_highlight">Per situazioni di emergenza meteorologica, fare sempre riferimento ai bollettini ufficiali della Protezione Civile e alle autorità competenti.</div>
484        </div>
485
486        <!-- 11 -->
487        <div class="section">
488            <span class="section-number">11</span>
489            <h2 data-i18n="s10_title">Contatto</h2>
490            <p data-i18n="s10_text">Per domande sulla privacy, puoi contattare:</p>
491            <p><strong>Antonio Angelotti</strong><br>
492            Email: <a href="#" class="eml" data-u="info" data-d="meteopomarico.it" role="link" aria-label="Email"></a><br>
493            Sito: <a href="https://meteopomarico.it" rel="noopener noreferrer">meteopomarico.it</a></p>
494            <!-- Honeypot: hidden fake email, only bots see this -->
495            <a href="mailto:[email protected]" class="hp-trap" tabindex="-1" aria-hidden="true">Contact</a>
496        </div>
497    </div>
498
499    <!-- Footer -->
500    <footer class="footer">
501        <div class="footer-brand">Meteo<span>Pomarico</span></div>
502        <p class="footer-sub" data-i18n="footer_sub">Meteo in tempo reale per Pomarico e la Basilicata</p>
503        <div class="footer-links">
504            <a href="/">Home</a>
505            <a href="/privacy.php">Privacy</a>
506            <a href="#" class="eml" data-u="info" data-d="meteopomarico.it" data-label="Supporto" role="link" aria-label="Supporto"></a>
507        </div>
508        <p class="footer-copy">&copy; 2026 MeteoPomarico — Antonio Angelotti. Tutti i diritti riservati.</p>
509    </footer>
510
511    
511<script>
512    const translations = {
513        it: {
514            title: 'Privacy Policy',
515            updated: 'Ultimo aggiornamento: 6 maggio 2026',
516            intro: "MeteoPomarico è un'applicazione web e mobile che fornisce dati meteo in tempo reale per Pomarico e la Basilicata. Il Servizio è sviluppato e gestito da Antonio Angelotti.",
517            s1_title: 'Dati raccolti',
518            s1_text: 'MeteoPomarico <strong>non raccoglie dati personali</strong> degli utenti. In particolare:',
519            s1_li1: 'Non è richiesta alcuna registrazione o creazione di account',
520            s1_li2: 'Non vengono raccolti nome, email, numero di telefono o altri dati identificativi',
521            s1_li3: 'Non vengono utilizzati cookie di profilazione o tracciamento',
522            s1_li4: "Non viene tracciata la posizione dell'utente",
523            s1_highlight: "I tuoi dati personali restano sul tuo dispositivo. L'unica informazione inviata al server è un identificatore anonimo (hash non riconducibile a te) usato esclusivamente per prevenire spam quando pubblichi una segnalazione anonima sulle spiagge — vedi sezione 4.",
524            s2_title: 'Archiviazione locale',
525            s2_text: "L'app e il sito web possono salvare preferenze utente (tema, lingua, unità di misura) localmente sul dispositivo tramite LocalStorage o DataStore. Questi dati <strong>non vengono trasmessi</strong> a server esterni.",
526            s3_title: 'Richieste di rete',
527            s3_text: 'MeteoPomarico effettua richieste di rete per ottenere dati meteo, cartografici e di comunità:',
528            s3_li0: 'Server proprio: meteo aggregato, allerte, segnalazioni anonime sulle spiagge (vedi sezione 4). Tutto il traffico è in HTTPS.',
529            s3_li1: "Previsioni meteo, qualità dell'aria, dati marini (open source, nessun tracciamento)",
530            s3_li2: 'Mappe vettoriali per la visualizzazione cartografica',
531            s3_li3: 'Widget radar satellitare e vento (embed iframe)',
532            s3_li4: 'Bollettini di allerta meteo',
533            s3_li5: 'Dati in tempo reale dalla stazione meteo locale installata a Pomarico (MT)',
534            s3_note: 'La tua posizione GPS non viene mai trasmessa a questi servizi.',
535            s_ugc_title: 'Segnalazioni anonime sulle spiagge (UGC)',
536            s_ugc_intro: "Dall'app MeteoPomarico puoi pubblicare segnalazioni in tempo reale sulle spiagge (es. presenza di meduse, bandiera rossa, parcheggio pieno). Queste segnalazioni sono <strong>visibili a tutti gli utenti</strong> e contribuiscono a una bacheca comunitaria sulla scheda di ogni spiaggia.",
537            s_ugc_what_label: '<strong>Cosa viene pubblicato:</strong>',
538            s_ugc_what_li1: 'Solo categorie predefinite (10 tipi fissi). <strong>Nessun testo libero, nessuna foto, nessun video, nessun nome utente.</strong>',
539            s_ugc_what_li2: "L'identificatore della spiaggia e il tipo di segnalazione.",
540            s_ugc_id_label: '<strong>Identificatore anonimo del dispositivo:</strong>',
541            s_ugc_id_li1: "Alla prima apertura dell'app viene generato un UUID casuale, salvato solo localmente.",
542            s_ugc_id_li2: "Quando pubblichi una segnalazione, viene calcolato un <strong>hash SHA-256</strong> dell'UUID e inviato al server.",
543            s_ugc_id_li3: "L'hash è <strong>anonimo e irreversibile</strong>: non può essere ricondotto a te, al tuo dispositivo o a un account.",
544            s_ugc_id_li4: 'Scopo unico: prevenire spam (limite di 5 segnalazioni al giorno per dispositivo, una sola conferma per spiaggia/tipo ogni 4 ore).',
545            s_ugc_id_li5: 'Non vengono usati altri identificatori del dispositivo (no IMEI, no Android ID, no advertising ID, no MAC).',
546            s_ugc_mod_label: '<strong>Sistema di moderazione:</strong>',
547            s_ugc_mod_li1: "Al primo invio di una segnalazione devi accettare i termini d'uso (visibili in un dialog dentro l'app).",
548            s_ugc_mod_li2: "Su ogni segnalazione altrui è presente un pulsante \"Segnala come falsa\" per moderazione comunitaria.",
549            s_ugc_mod_li3: "Una segnalazione che riceve almeno 3 voti di \"falsa\" entro 4 ore viene <strong>nascosta automaticamente</strong>.",
550            s_ugc_mod_li4: 'Tutte le segnalazioni <strong>scadono automaticamente dopo 4 ore</strong> e vengono cancellate dal database del server tramite un cron orario.',
551            s_ugc_mod_li5: 'I voti di "falsa" (abuse-flag) vengono cancellati dal server entro 24 ore.',
552            s_ugc_highlight: 'Le segnalazioni non sono messaggi tra utenti né chat: sono dati comunitari aggregati, anonimi e a vita breve. Non c\'è alcun profilo utente, alcuna interazione utente-utente diretta, alcuna informazione personale identificativa.',
553            s4_title: 'Servizi di terze parti',
554            s4_text: 'MeteoPomarico <strong>non utilizza SDK di analisi, pubblicità o crash reporting</strong>. Non sono integrati servizi come Google Analytics, Firebase Analytics, Facebook SDK o simili. Ciascun servizio esterno utilizzato per i dati ha una propria privacy policy.',
555            s5_title: 'Account e registrazione',
556            s5_text: "L'app e il sito web <strong>non richiedono la creazione di un account</strong>. Non è necessario fornire email, password o altri dati personali per utilizzare il servizio.",
557            s6_title: 'Permessi richiesti (app Android)',
558            s6_li1: 'Per scaricare dati meteo, mappe e bollettini di allerta',
559            s6_li2_label: 'Notifiche',
560            s6_li2: 'Per inviare avvisi di allerta meteo (opzionale, disattivabile)',
561            s6_note: "L'app non richiede accesso a posizione, fotocamera, contatti o altri dati sensibili.",
562            s7_title: 'Eliminazione dei dati',
563            s7_text: "Tutte le preferenze utente, le statistiche e l'identificatore anonimo del dispositivo sono memorizzate <strong>solo localmente</strong>: per cancellarle è sufficiente svuotare i dati dell'app dalle impostazioni di Android oppure disinstallare l'applicazione.",
564            s7_text2: 'Per quanto riguarda i dati lato server: le segnalazioni anonime sulle spiagge vengono cancellate automaticamente entro <strong>4 ore</strong>; i voti "Segnala come falsa" entro <strong>24 ore</strong>. Reinstallando l\'app viene generato un nuovo identificatore anonimo che non ha alcun collegamento con quello precedente.',
565            s8_title: 'Privacy dei minori',
566            s8_text: 'Il Servizio non è diretto a minori di 13 anni e non raccoglie consapevolmente informazioni da minori.',
567            s9_title: 'Limitazioni di responsabilità',
568            s9_text_a: 'I dati meteo forniti da MeteoPomarico provengono da fonti terze (Open-Meteo, Protezione Civile, WeatherFlow Tempest) e vengono presentati <strong>a solo scopo informativo</strong>. Il gestore del servizio:',
569            s9_li1: "Non garantisce l'accuratezza, la completezza o la tempestività dei dati visualizzati",
570            s9_li2: 'Non è responsabile di eventuali decisioni prese sulla base delle informazioni fornite dal servizio',
571            s9_li3: "Non è responsabile di danni diretti o indiretti derivanti dall'uso o dall'impossibilità di usare il servizio",
572            s9_li4: 'Non garantisce la continuità o la disponibilità del servizio, che può essere interrotto in qualsiasi momento senza preavviso',
573            s9_highlight: 'Per situazioni di emergenza meteorologica, fare sempre riferimento ai bollettini ufficiali della Protezione Civile e alle autorità competenti.',
574            s10_title: 'Contatto',
575            s10_text: 'Per domande sulla privacy, puoi contattare:',
576            footer_sub: 'Meteo in tempo reale per Pomarico e la Basilicata'
577        },
578        en: {
579            title: 'Privacy Policy',
580            updated: 'Last updated: May 6, 2026',
581            intro: 'MeteoPomarico is a web and mobile application that provides real-time weather data for Pomarico and the Basilicata region. The Service is developed and maintained by Antonio Angelotti.',
582            s1_title: 'Data Collected',
583            s1_text: 'MeteoPomarico <strong>does not collect personal data</strong> from its users. Specifically:',
584            s1_li1: 'No registration or account creation is required',
585            s1_li2: 'No name, email, phone number, or other identifying data is collected',
586            s1_li3: 'No profiling or tracking cookies are used',
587            s1_li4: "User location is not tracked",
588            s1_highlight: 'Your personal data stays on your device. The only piece of information sent to the server is an anonymous identifier (a hash that cannot be linked back to you), used exclusively to prevent spam when you publish an anonymous beach report — see section 4.',
589            s2_title: 'Local Storage',
590            s2_text: 'The app and website may save user preferences (theme, language, units) locally on the device via LocalStorage or DataStore. This data is <strong>never transmitted</strong> to external servers.',
591            s3_title: 'Network Requests',
592            s3_text: 'MeteoPomarico makes network requests for weather, map and community data:',
593            s3_li0: 'Own server: aggregated weather, alerts, anonymous beach reports (see section 4). All traffic over HTTPS.',
594            s3_li1: 'Weather forecasts, air quality, marine data (open source, no tracking)',
595            s3_li2: 'Vector maps for cartographic display',
596            s3_li3: 'Satellite radar and wind widget (embedded iframe)',
597            s3_li4: 'Weather alert bulletins',
598            s3_li5: 'Real-time data from the local weather station installed in Pomarico (MT)',
599            s3_note: 'Your GPS location is never transmitted to these services.',
600            s_ugc_title: 'Anonymous beach reports (UGC)',
601            s_ugc_intro: 'From the MeteoPomarico app you can publish real-time reports about beaches (e.g. presence of jellyfish, red flag, full parking lot). These reports are <strong>visible to all users</strong> and contribute to a community board on each beach detail screen.',
602            s_ugc_what_label: '<strong>What gets published:</strong>',
603            s_ugc_what_li1: 'Only predefined categories (10 fixed types). <strong>No free text, no photos, no videos, no usernames.</strong>',
604            s_ugc_what_li2: 'The beach identifier and the report type.',
605            s_ugc_id_label: '<strong>Anonymous device identifier:</strong>',
606            s_ugc_id_li1: 'On first app launch, a random UUID is generated and stored only locally.',
607            s_ugc_id_li2: 'When you publish a report, a <strong>SHA-256 hash</strong> of the UUID is computed and sent to the server.',
608            s_ugc_id_li3: 'The hash is <strong>anonymous and irreversible</strong>: it cannot be traced back to you, your device or an account.',
609            s_ugc_id_li4: 'Sole purpose: spam prevention (limit of 5 reports per day per device, one confirmation per beach/type every 4 hours).',
610            s_ugc_id_li5: 'No other device identifiers are used (no IMEI, no Android ID, no advertising ID, no MAC).',
611            s_ugc_mod_label: '<strong>Moderation system:</strong>',
612            s_ugc_mod_li1: 'On the first report submission you must accept the terms of use (shown in an in-app dialog).',
613            s_ugc_mod_li2: 'Each other-user report has a "Flag as false" button for c
613ommunity moderation.',
614            s_ugc_mod_li3: 'A report that receives at least 3 "false" votes within 4 hours is <strong>automatically hidden</strong>.',
615            s_ugc_mod_li4: 'All reports <strong>expire automatically after 4 hours</strong> and are removed from the server database by an hourly cron.',
616            s_ugc_mod_li5: '"False" votes (abuse-flags) are removed from the server within 24 hours.',
617            s_ugc_highlight: 'Reports are not user-to-user messages or chat: they are short-lived, anonymous, aggregated community data. There is no user profile, no direct user-to-user interaction, no personally identifying information.',
618            s4_title: 'Third-party Services',
619            s4_text: 'MeteoPomarico <strong>does not use analytics, advertising, or crash reporting SDKs</strong>. No services like Google Analytics, Firebase Analytics, Facebook SDK, or similar are integrated. Each external service used for data has its own privacy policy.',
620            s5_title: 'Account & Registration',
621            s5_text: 'The app and website <strong>do not require account creation</strong>. No email, password, or other personal data is needed to use the service.',
622            s6_title: 'Required Permissions (Android app)',
623            s6_li1: 'To download weather data, maps, and alert bulletins',
624            s6_li2_label: 'Notifications',
625            s6_li2: 'To send weather alert notifications (optional, can be disabled)',
626            s6_note: 'The app does not require access to location, camera, contacts, or other sensitive data.',
627            s7_title: 'Data Deletion',
628            s7_text: "All user preferences, statistics and the anonymous device identifier are stored <strong>only locally</strong>: to delete them, simply clear the app's data from Android Settings or uninstall the application.",
629            s7_text2: 'For server-side data: anonymous beach reports are automatically deleted within <strong>4 hours</strong>; "Flag as false" votes within <strong>24 hours</strong>. Reinstalling the app generates a new anonymous identifier with no link to the previous one.',
630            s8_title: "Children's Privacy",
631            s8_text: 'The Service is not directed at children under 13 and does not knowingly collect information from minors.',
632            s9_title: 'Disclaimer & Limitation of Liability',
633            s9_text_a: 'Weather data provided by MeteoPomarico comes from third-party sources (Open-Meteo, Civil Protection, WeatherFlow Tempest) and is presented <strong>for informational purposes only</strong>. The service operator:',
634            s9_li1: 'Does not guarantee the accuracy, completeness, or timeliness of the displayed data',
635            s9_li2: 'Is not responsible for any decisions made based on the information provided by the service',
636            s9_li3: 'Is not liable for any direct or indirect damages arising from the use or inability to use the service',
637            s9_li4: 'Does not guarantee the continuity or availability of the service, which may be interrupted at any time without notice',
638            s9_highlight: 'For weather emergencies, always refer to official Civil Protection bulletins and competent authorities.',
639            s10_title: 'Contact',
640            s10_text: 'For privacy-related questions, you can contact:',
641            footer_sub: 'Real-time weather for Pomarico and Basilicata'
642        }
643    };
644
645    let currentLang = 'it';
646
647    function setLang(lang) {
648        currentLang = lang;
649        const t = translations[lang];
650        document.querySelectorAll('[data-i18n]').forEach(el => {
651            const key = el.getAttribute('data-i18n');
652            if (t[key]) el.innerHTML = t[key];
653        });
654        document.documentElement.lang = lang;
655        // Update toggle buttons
656        document.querySelectorAll('.lang-toggle button').forEach(btn => {
657            btn.classList.toggle('active', btn.textContent.trim() === lang.toUpperCase());
658        });
659    }
660
661    function toggleDrawer() {
662        document.getElementById('drawer').classList.toggle('open');
663    }
664
665    /* ── Email obfuscation ── */
666    (function() {
667        document.querySelectorAll('a.eml').forEach(function(el) {
668            var u = el.getAttribute('data-u');
669            var d = el.getAttribute('data-d');
670            var label = el.getAttribute('data-label');
671            var addr = u + '@' + d;
672            if (!label) {
673                el.textContent = addr;
674            } else {
675                el.textContent = label;
676            }
677            el.addEventListener('click', function(e) {
678                e.preventDefault();
679                window.location.href = 'mai' + 'lto:' + u + '@' + d;
680            });
681        });
682
683        /* Honeypot: log bot interaction (optional server-side) */
684        var trap = document.querySelector('.hp-trap');
685        if (trap) {
686            trap.addEventListener('click', function(e) {
687                e.preventDefault();
688            });
689        }
690    })();
691
692    /* ── Disable right-click on email links ── */
693    document.addEventListener('contextmenu', function(e) {
694        if (e.target.classList && e.target.classList.contains('eml')) {
695            e.preventDefault();
696        }
697    });
698    </script>
698
699</body>
700</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.