PageSourceSearch

https://polskieradio.cc/lumina-terms-modal.js?v=4.1.1_20260909

js polskieradio.cc collected 2026-10-02 01:19:49 UTC 12,851 bytes, 287 lines download raw bytes

1/**
2 * ══════════════════════════════════════════════════════════════════════════
3 * LUMINA LEGAL & COMMUNITY STANDARDS MODAL (lumina-terms-modal.js)
4 * Regulamin Społeczności, Polityka Prywatności (RODO) i Kodeks Wartości LUMINA
5 * Ekosystem: Christian Culture
6 * ══════════════════════════════════════════════════════════════════════════
7 */
8
9(function() {
10    'use strict';
11
12    function injectTermsStyles() {
13        if (document.getElementById('luminaTermsModalStyles')) return;
14        const style = document.createElement('style');
15        style.id = 'luminaTermsModalStyles';
16        style.textContent = `
17            .lumina-legal-overlay {
18                position: fixed;
19                top: 0;
20                left: 0;
21                width: 100vw;
22                height: 100vh;
23                background: rgba(3, 7, 18, 0.85);
24                backdrop-filter: blur(12px);
25                -webkit-backdrop-filter: blur(12px);
26                z-index: 99999;
27                display: flex;
28                align-items: center;
29                justify-content: center;
30                opacity: 0;
31                pointer-events: none;
32                transition: opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1);
33                padding: 16px;
34                box-sizing: border-box;
35            }
36
37            .lumina-legal-overlay.active {
38                opacity: 1;
39                pointer-events: auto;
40            }
41
42            .lumina-legal-modal {
43                width: 100%;
44                max-width: 680px;
45                max-height: 88vh;
46                background: #0b1329;
47                border: 1.5px solid rgba(250, 204, 21, 0.35);
48                border-radius: 24px;
49                box-shadow: 0 25px 60px rgba(0, 0, 0, 0.9), 0 0 35px rgba(234, 179, 8, 0.15);
50                display: flex;
51                flex-direction: column;
52                overflow: hidden;
53                transform: scale(0.95);
54                transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
55                color: #f8fafc;
56                font-family: 'Plus Jakarta Sans', sans-serif;
57            }
58
59            .lumina-legal-overlay.active .lumina-legal-modal {
60                transform: scale(1);
61            }
62
63            .lumina-legal-header {
64                display: flex;
65                align-items: center;
66                justify-content: space-between;
67                padding: 18px 24px;
68                background: rgba(15, 23, 42, 0.9);
69                border-bottom: 1px solid rgba(255, 255, 255, 0.1);
70            }
71
72            .lumina-legal-tabs {
73                display: flex;
74                gap: 8px;
75                padding: 12px 24px 0;
76                background: rgba(11, 19, 41, 0.95);
77                border-bottom: 1px solid rgba(255, 255, 255, 0.08);
78            }
79
80            .lumina-legal-tab-btn {
81                background: none;
82                border: none;
83                color: #94a3b8;
84                font-size: 0.88rem;
85                font-weight: 700;
86                padding: 8px 14px 12px;
87                cursor: pointer;
88                border-bottom: 2px solid transparent;
89                transition: all 0.2s;
90                font-family: inherit;
91            }
92
93            .lumina-legal-tab-btn.active {
94                color: #facc15;
95                border-bottom-color: #facc15;
96            }
97
98            .lumina-legal-body {
99                padding: 24px;
100                overflow-y: auto;
101                font-size: 0.90rem;
102                line-height: 1.75;
103                color: #cbd5e1;
104            }
105
106            .lumina-legal-body h3 {
107                color: #f8fafc;
108                font-size: 1.1rem;
109                font-family: 'Outfit', sans-serif;
110                margin: 18px 0 8px 0;
111            }
112
113            .lumina-legal-body h3:first-child {
114                margin-top: 0;
115            }
116
117            .lumina-legal-body p {
118                margin-bottom: 12px;
119            }
120
121            .lumina-legal-body ul {
122                margin-bottom: 16px;
123                padding-left: 20px;
124            }
125
126            .lumina-legal-body li {
127                margin-bottom: 6px;
128            }
129
130            .lumina-legal-footer {
131                padding: 16px 24px;
132                background: rgba(15, 23, 42, 0.95);
133                border-top: 1px solid rgba(255, 255, 255, 0.08);
134                display: flex;
135                justify-content: flex-end;
136            }
137
138            .lumina-legal-close-btn {
139                background: linear-gradient(135deg, #f59e0b, #d97706);
140                border: none;
141                color: #000;
142                font-weight: 800;
143                padding: 10px 24px;
144                border-radius: 50px;
145                cursor: pointer;
146                font-size: 0.88rem;
147                font-family: inherit;
148                transition: transform 0.2s, box-shadow 0.2s;
149            }
150
151            .lumina-legal-close-btn:hover {
152                transform: translateY(-1px);
153                box-shadow: 0 4px 15px rgba(245, 158, 11, 0.4);
154            }
155        `;
156        document.head.appendChild(style);
157    }
158
159    function createModalHTML() {
160        if (document.getElementById('luminaLegalModalOverlay')) return;
161        const div = document.createElement('div');
162        div.id = 'luminaLegalModalOverlay';
163        div.className = 'lumina-legal-overlay';
164        div.onclick = function(e) {
165            if (e.target === div) closeLuminaLegalModal();
166        };
167
168        div.innerHTML = `
169            <div class="lumina-legal-modal" onclick="event.stopPropagation()">
170                <div class="lumina-legal-header">
171                    <div style="display: flex; align-items: center; gap: 10px;">
172                        <img src="lumina_icon.jpg" onerror="this.src='icon.png'" alt="LUMINA" style="width: 28px; height: 28px; border-radius: 50%;">
173                        <span style="font-family: 'Outfit', sans-serif; font-weight: 800; font-size: 1.1rem; color: #facc15;">LUMINA • Zasady & Bezpieczeństwo</span>
174                    </div>
175                    <button type="button" onclick="window.closeLuminaLegalModal()" style="background: none; border: none; color: #94a3b8; font-size: 1.2rem; cursor: pointer; padding: 4px;" title="Zamknij"><i class="fa-solid fa-xmark"></i></button>
176                </div>
177
178                <div class="lumina-legal-tabs">
179                    <button type="button" class="lumina-legal-tab-btn active" id="tabBtnTerms" onclick="window.switchLegalTab('terms')">📖 Regulamin & Wartości</button>
180                    <button type="button" class="lumina-legal-tab-btn" id="tabBtnPrivacy" onclick="window.switchLegalTab('privacy')">🔒 Prywatność & RODO</button>
181                    <button type="button" class="lumina-legal-tab-btn" id="tabBtnAi" onclick="window.switchLegalTab('ai')">🛡️ Bezpieczeństwo Społeczności</button>
182                </div>
183
184                <div class="lumina-legal-body" id="legalModalBody">
185                    <!-- Dynamic content filled by switchLegalTab -->
186                </div>
187
188                <div class="lumina-legal-footer">
189                    <button type="button" class="lumina-legal-close-btn" onclick="window.closeLuminaLegalModal()">Rozumiem i Akceptuję ✨</button>
190                </div>
191            </div>
192        `;
193        document.body.appendChild(div);
194    }
195
196    const TAB_CONTENTS = {
197        terms: `
198            <h3>1. Cel Portalu LUMINA</h3>
199            <p>LUMINA to bezpieczna, chrześcijańska przestrzeń relacji, wzajemnego wsparcia modlitewnego i budowania wartościowych więzi zakorzenionych w Chrystusie.</p>
200
201            <h3>2. Kodeks Wartości i Szacunku</h3>
202            <ul>
203                <li><b>Kultura i Życzliwość:</b> Każdy użytkownik zobowiązuje się do odnoszenia się do innych z szacunkiem i miłością bliźniego.</li>
204                <li><b>Prawdziwość Danych:</b> Tworząc profil, zobowiązujesz się do podawania autentycznych informacji o sobie.</li>
205                <li><b>
205Zakaz Treści Niezgodnych z Prawem i Wiarą:</b> Surowo zabronione jest publikowanie materiałów wulgarnych, erotycznych, promujących nienawiść, oszustwo, spam oraz treści komercyjnych bez zgody administracji.</li>
206            </ul>
207
208            <h3>3. Pokoje i Zgłoszenia</h3>
209            <p>Administracja portalu (Master Admin) zastrzega sobie prawo do weryfikacji, ukrywania wpisów oraz natychmiastowego blokowania profili naruszających zasady społeczności.</p>
210        `,
211        privacy: `
212            <h3>1. Administrator Danych Osobowych</h3>
213            <p>Administratorem Twoich danych w portalu LUMINA jest Christian Culture Media. Dbamy o najwyższe standardy ochrony prywatności zgodnie z wymogami RODO (GDPR).</p>
214
215            <h3>2. Przetwarzanie i Bezpieczeństwo Danych</h3>
216            <ul>
217                <li>Twoje dane profilowe (imię, miasto, bio, preferencje) są wykorzystywane wyłącznie w celu umożliwienia nawiązywania relacji i wyświetlania postów w społeczności.</li>
218                <li><b>Nigdy nie sprzedajemy</b> ani nie udostępniamy Twoich danych osobowych zewnętrznym agencjom marketingowym.</li>
219                <li>Komunikacja i baza danych są szyfrowane za pośrednictwem certyfikatu SSL oraz bezpiecznej infrastruktury Google Cloud Firestore.</li>
220            </ul>
221
222            <h3>3. Twoje Prawa</h3>
223            <p>W każdej chwili masz prawo do wglądu, edycji swoich informacji, wyłączenia widoczności profilu lub jego trwałego usunięcia z poziomu zakładki <i>Mój Profil</i>.</p>
224        `,
225        ai: `
226            <h3>1. Tarcza Bezpieczeństwa Społeczności</h3>
227            <p>Portal LUMINA wykorzystuje inteligentne filtry treści, które chronią społeczność przed niepożądanym spamem, botami i próbami wyłudzeń.</p>
228
229            <h3>2. System Zgłaszania (Raportowanie)</h3>
230            <p>Jeśli zauważysz post lub profil, który narusza zasady chrześcijańskiej kultury, użyj opcji <b>Zgłoś Naruszenie</b> (menu z trzema kropkami przy każdym poście). Zgłoszenie natychmiast trafia do kolejki moderacji administratora.</p>
231
232            <h3>3. Ochrona w Czasie Rzeczywistym</h3>
233            <p>Wszystkie publiczne wpisy i modlitwy live są na bieżąco monitorowane, aby zapewnić pokój, Bożą atmosferę i bezpieczeństwo każdemu członkowi społeczności.</p>
234        `
235    };
236
237    function switchLegalTab(tab) {
238        const body = document.getElementById('legalModalBody');
239        const btnTerms = document.getElementById('tabBtnTerms');
240        const btnPrivacy = document.getElementById('tabBtnPrivacy');
241        const btnAi = document.getElementById('tabBtnAi');
242
243        if (!body) return;
244
245        [btnTerms, btnPrivacy, btnAi].forEach(b => b?.classList.remove('active'));
246
247        if (tab === 'privacy') {
248            btnPrivacy?.classList.add('active');
249            body.innerHTML = TAB_CONTENTS.privacy;
250        } else if (tab === 'ai') {
251            btnAi?.classList.add('active');
252            body.innerHTML = TAB_CONTENTS.ai;
253        } else {
254            btnTerms?.classList.add('active');
255            body.innerHTML = TAB_CONTENTS.terms;
256        }
257    }
258
259    function openLuminaLegalModal(initialTab = 'terms') {
260        injectTermsStyles();
261        createModalHTML();
262        switchLegalTab(initialTab);
263        const overlay = document.getElementById('luminaLegalModalOverlay');
264        if (overlay) overlay.classList.add('active');
265    }
266
267    function closeLuminaLegalModal() {
268        const overlay = document.getElementById('luminaLegalModalOverlay');
269        if (overlay) overlay.classList.remove('active');
270    }
271
272    window.openLuminaTermsModal = () => openLuminaLegalModal('terms');
273    window.openLuminaPrivacyModal = () => openLuminaLegalModal('privacy');
274    window.openLuminaLegalModal = openLuminaLegalModal;
275    window.closeLuminaLegalModal = closeLuminaLegalModal;
276    window.switchLegalTab = switchLegalTab;
277
278    if (document.readyState === 'loading') {
279        document.addEventListener('DOMContentLoaded', () => {
280            injectTermsStyles();
281            createModalHTML();
282        });
283    } else {
284        injectTermsStyles();
285        createModalHTML();
286    }
287})();

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.