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.