1(function () { 2 "use strict"; 3 4 if (document.getElementById("rapidact-ai-disclosure")) return; 5 6 var script = document.currentScript; 7 var pathLanguage = window.location.pathname.split("/")[1].toLowerCase(); 8 var supportedLanguages = ["en", "es", "de", "fr", "it"]; 9 var language = String( 10 (script && script.dataset.language) || 11 (supportedLanguages.indexOf(pathLanguage) >= 0 && pathLanguage) || 12 document.documentElement.lang || 13 navigator.language || 14 "en" 15 ) 16 .toLowerCase() 17 .slice(0, 2); 18 if (supportedLanguages.indexOf(language) < 0) language = "en"; 19 20 var words = { 21 en: { 22 title: "AI use disclosed", 23 message: 24 "This site uses an AI assistant. You are interacting with an AI system, not a person.", 25 eyebrow: "Clear AI-use notice", 26 open: "How AI is used", 27 close: "Close notice", 28 system: "System", 29 provider: "Responsible", 30 details: "Read the Article 50 guide", 31 install: "Add this notice", 32 }, 33 es: { 34 title: "Uso de IA declarado", 35 message: 36 "Este sitio utiliza un asistente de IA. Estás interactuando con un sistema de IA, no con una persona.", 37 eyebrow: "Aviso claro sobre el uso de IA", 38 open: "Cómo se utiliza la IA", 39 close: "Cerrar aviso", 40 system: "Sistema", 41 provider: "Responsable", 42 details: "Leer la guÃa del artÃculo 50", 43 install: "Añadir este aviso", 44 }, 45 de: { 46 title: "KI-Einsatz offengelegt", 47 message: 48 "Diese Website nutzt einen KI-Assistenten. Sie interagieren mit einem KI-System, nicht mit einer Person.", 49 eyebrow: "Klarer Hinweis zum KI-Einsatz", 50 open: "So wird KI eingesetzt", 51 close: "Hinweis schlieÃen", 52 system: "System", 53 provider: "Verantwortlich", 54 details: "Artikel-50-Leitfaden lesen", 55 install: "Diesen Hinweis hinzufügen", 56 }, 57 fr: { 58 title: "Usage de lâIA signalé", 59 message: 60 "Ce site utilise un assistant IA. Vous interagissez avec un système dâIA, et non avec une personne.", 61 eyebrow: "Information claire sur lâusage de lâIA", 62 open: "Comment lâIA est utilisée", 63 close: "Fermer lâavis", 64 system: "Système", 65 provider: "Responsable", 66 details: "Lire le guide de lâarticle 50", 67 install: "Ajouter cet avis", 68 }, 69 it: { 70 title: "Uso dellâIA dichiarato", 71 message: 72 "Questo sito usa un assistente IA. Stai interagendo con un sistema di IA, non con una persona.", 73 eyebrow: "Avviso chiaro sullâuso dellâIA", 74 open: "Come viene usata lâIA", 75 close: "Chiudi avviso", 76 system: "Sistema", 77 provider: "Responsabile", 78 details: "Leggi la guida allâarticolo 50", 79 install: "Aggiungi questo avviso", 80 }, 81 }; 82 var copybook = words[language]; 83 var languageSuffix = language.charAt(0).toUpperCase() + language.slice(1); 84 var localizedTitle = script && script.dataset["title" + languageSuffix]; 85 var localizedMessage = script && script.dataset["message" + languageSuffix]; 86 var title = 87 localizedTitle || (script && script.dataset.title) || copybook.title; 88 var message = 89 localizedMessage || (script && script.dataset.message) || copybook.message; 90 var system = (script && script.dataset.system) || ""; 91 var provider = (script && script.dataset.provider) || ""; 92 var detailsUrl = (script && script.dataset.detailsUrl) || ""; 93 var badgeId = (script && script.dataset.badgeId) || ""; 94 var requestedDisplay = (script && script.dataset.display) || "bubble"; 95 var supportedDisplays = ["bubble", "standard", "popup"]; 96 var display = 97 supportedDisplays.indexOf(requestedDisplay) >= 0 98 ? requestedDisplay 99 : "bubble"; 100 var targetSelector = (script && script.dataset.target) || ""; 101 var showCredit = 102 !script || typeof script.dataset.showCredit === "undefined" 103 ? true 104 : script.dataset.showCredit === "true"; 105 var position = 106 script && script.dataset.position === "left" ? "left" : "right"; 107 var requestedAccent = (script && script.dataset.color) || ""; 108 var accent = /^#[0-9a-f]{3,8}$/i.test(requestedAccent) 109 ? requestedAccent 110 : "#1f3a5f"; 111 var escapeHtml = function (value) { 112 return String(value) 113 .replace(/&/g, "&") 114 .replace(/</g, "<") 115 .replace(/>/g, ">") 116 .replace(/"/g, """) 117 .replace(/'/g, "'"); 118 }; 119 var safeTitle = escapeHtml(title); 120 var defaultBrandUrl = 121 "https://rapidact.eu/brand/rapidact-exact-symbol-128.webp"; 122 try { 123 if (script && script.src) { 124 defaultBrandUrl = new URL( 125 "brand/rapidact-exact-symbol-128.webp", 126 script.src 127 ).href; 128 } 129 } catch (_error) { 130 // The absolute production URL above remains the reliable fallback. 131 } 132 var brandUrl = (script && script.dataset.brandSrc) || defaultBrandUrl; 133 var safeBrandUrl = escapeHtml(brandUrl); 134 135 var host = document.createElement("div"); 136 host.id = "rapidact-ai-disclosure"; 137 if (badgeId) host.setAttribute("data-badge-id", badgeId); 138 host.setAttribute("data-display", display); 139 if (display === "standard") { 140 host.style.position = "relative"; 141 host.style.display = "block"; 142 host.style.width = "100%"; 143 } else { 144 host.style.position = "fixed"; 145 host.style[position] = "max(16px, env(safe-area-inset-" + position + "))"; 146 host.style.bottom = "max(16px, env(safe-area-inset-bottom))"; 147 } 148 host.style.zIndex = "2147483000"; 149 host.style.fontFamily = 150 '"Manrope", "Avenir Next", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif'; 151 152 var root = host.attachShadow ? host.attachShadow({ mode: "open" }) : host; 153 root.innerHTML = 154 "<style>" + 155 ":host{all:initial}" + 156 "*,*::before,*::after{box-sizing:border-box}" + 157 ".ra-wrap{display:flex;flex-direction:column;align-items:" + 158 (position === "left" ? "flex-start" : "flex-end") + 159 ";gap:13px}" + 160 ".ra-backdrop{display:none}" + 161 ".ra-panel{position:relative;display:none;width:min(390px,calc(100vw - 32px));overflow:hidden;border:1px solid #174a9b;border-radius:18px;background:#fff;color:#08152f;box-shadow:0 24px 70px rgba(1,17,58,.25),0 0 0 3px rgba(34,197,255,.08)}" + 162 ".ra-panel[data-open=true]{display:block}" + 163 ".ra-panel-brand{display:flex;min-height:78px;align-items:center;justify-content:space-between;gap:14px;border-bottom:1px solid rgba(67,206,255,.35);background:#03123d;padding:11px 15px}" + 164 ".ra-brand-lockup{display:flex;min-width:0;align-items:center;gap:10px}" + 165 ".ra-brand-actions{display:flex;align-items:center;gap:8px}" + 166 ".ra-brand-image{display:block;width:auto;height:54px;flex:none}" + 167 ".ra-brand-name{font-family:'Sora','Avenir Next',ui-sans-serif,system-ui,sans-serif;font-size:18px;line-height:1;font-weight:700;letter-spacing:-.045em;color:#fff;white-space:nowrap}" + 168 ".ra-brand-name-accent{color:#53ddff}" + 169 ".ra-brand-status{display:inline-flex;align-items:center;gap:6px;border:1px solid rgba(109,221,255,.5);border-radius:999px;background:rgba(11,76,169,.48);color:#e9f9ff;padding:6px 9px;font-size:9px;line-height:1;font-weight:800;letter-spacing:.09em;text-transform:uppercase;white-space:nowrap}" + 170 ".ra-brand-status::before{width:6px;height:6px;border-radius:50%;background:#53ddff;box-shadow:0 0 9px #53ddff;content:''}" + 171 ".ra-close{display:grid;width:44px;height:44px;place-items:center;border:1px solid rgba(109,221,255,.42);border-radius:999px;background:rgba(11,76,169,.3);color:#fff;cursor:pointer;font:700 22px/1 ui-sans-serif,system-ui,sans-serif}" + 172 ".ra-close:hover{background:rgba(34,116,221,.48)}" + 173 ".ra-close:focus-visible{outline:3px solid #53ddff;outline-offset:2px}" + 174 ".ra-panel-body{padding:19px 20px 20px}" + 175 ".ra-eyebrow{margin:0 0 7px;font-size:10px;line-height:1.2;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#4c6286}" + 176 ".ra-title{margin:0;font-family:'Sora','Avenir Next',ui-sans-serif,system-ui,sans-serif;font-size:18px;line-height:1.3;font-weight:700;letter-spacing:-.025em}" + 177 ".ra-copy{margin:9px 0 0;font-size:14px;line-height:1.62;color:#43516a}" + 178 ".ra-meta{margin:14px 0 0;padding-top:12px;border-top:1px solid #dbe5f2;font-size:12px;line-height:1.5;color:#5d6c84}" + 179 ".ra-meta:empty{display:none}" + 180 ".ra-links{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:14px}" + 181 ".ra-link{color:" + 182 accent + 183 ";font-size:12px;line-height:1.4;font-weight:700;text-underline-offset:3px}" + 184 ".ra-button{position:relative;display:block;min-width:214px;min-height:62px;overflow:hidden;border:1px solid #4ba8ff;border-radius:999px;background:linear-gradient(115deg,#020b27 0%,#06235e 58%,#0b4ba9 100%);padding:7px 17px 7px 12px;cursor:pointer;font:inherit;box-shadow:0 14px 30px rgba(1,17,58,.3),inset 0 0 0 2px #061a48,inset 0 0 0 3px rgba(105,210,255,.78);
184transition:box-shadow .18s ease,transform .18s ease}" + 185 ".ra-button::before{position:absolute;inset:3px;border:1px solid rgba(255,255,255,.16);border-radius:999px;pointer-events:none;content:''}" + 186 ".ra-button::after{position:absolute;top:5px;right:18px;left:48px;height:1px;background:linear-gradient(90deg,transparent,rgba(143,226,255,.75),transparent);pointer-events:none;content:''}" + 187 ".ra-button:hover{box-shadow:0 17px 34px rgba(1,17,58,.38),inset 0 0 0 2px #061a48,inset 0 0 0 3px rgba(105,210,255,.95);transform:translateY(-2px)}" + 188 ".ra-button:focus-visible{outline:3px solid " + 189 accent + 190 "66;outline-offset:5px;border-radius:999px}" + 191 ".ra-button-lockup{position:relative;z-index:1;display:flex;align-items:center;gap:10px;text-align:left}" + 192 ".ra-button-image{display:block;width:auto;height:46px;flex:none;filter:drop-shadow(0 2px 5px rgba(0,0,0,.28))}" + 193 ".ra-button-copy{display:block;min-width:0}" + 194 ".ra-button-name{display:block;font-family:'Sora','Avenir Next',ui-sans-serif,system-ui,sans-serif;font-size:17px;line-height:1.05;font-weight:750;letter-spacing:-.045em;color:#fff;white-space:nowrap;text-shadow:0 1px 2px rgba(0,0,0,.3)}" + 195 ".ra-button-name-accent{color:#53ddff}" + 196 ".ra-button-status{display:block;margin-top:5px;max-width:145px;overflow:hidden;color:#dff8ff;font-size:8px;line-height:1;font-weight:800;letter-spacing:.085em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}" + 197 ".ra-sr-only{position:absolute!important;width:1px!important;height:1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important}" + 198 "@media (max-width:520px){.ra-panel-brand{align-items:flex-start;flex-direction:column;gap:9px}.ra-links{align-items:flex-start;flex-direction:column;gap:9px}.ra-button{min-width:54px;min-height:54px;padding:6px}.ra-button-image{height:38px}.ra-button-copy{display:none}}" + 199 (display === "standard" 200 ? ".ra-wrap{display:block}.ra-panel{display:block;width:100%;max-width:760px;border-radius:14px;box-shadow:0 14px 42px rgba(1,17,58,.12)}.ra-button,.ra-close{display:none}" 201 : "") + 202 (display === "popup" 203 ? ".ra-backdrop[data-open=true]{position:fixed;z-index:0;inset:-100vh -100vw;display:block;background:rgba(3,18,61,.56);backdrop-filter:blur(4px)}.ra-panel{position:fixed;z-index:1;top:50%;left:50%;width:min(520px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow-y:auto;transform:translate(-50%,-50%)}" 204 : "") + 205 "@media (prefers-reduced-motion:no-preference){.ra-panel[data-open=true]{animation:ra-in .16s ease-out}@keyframes ra-in{from{opacity:0}to{opacity:1}}}" + 206 "</style>" + 207 '<div class="ra-wrap">' + 208 '<div class="ra-backdrop" data-open="false" aria-hidden="true"></div>' + 209 '<section class="ra-panel" role="' + 210 (display === "standard" ? "region" : "dialog") + 211 '" aria-label="' + 212 safeTitle + 213 '" aria-modal="' + 214 (display === "popup" ? "true" : "false") + 215 '" tabindex="-1" data-open="' + 216 (display === "standard" ? "true" : "false") + 217 '">' + 218 '<div class="ra-panel-brand">' + 219 '<div class="ra-brand-lockup">' + 220 '<img class="ra-brand-image" src="' + 221 safeBrandUrl + 222 '" alt="" aria-hidden="true" width="128" height="128">' + 223 '<span class="ra-brand-name">Rapid<span class="ra-brand-name-accent">Act</span></span>' + 224 "</div>" + 225 '<span class="ra-brand-actions">' + 226 '<span class="ra-brand-status">' + 227 safeTitle + 228 "</span>" + 229 '<button class="ra-close" type="button" aria-label="' + 230 copybook.close + 231 '">×</button>' + 232 "</span>" + 233 "</div>" + 234 '<div class="ra-panel-body">' + 235 '<p class="ra-eyebrow">' + 236 copybook.eyebrow + 237 "</p>" + 238 '<h2 class="ra-title">' + 239 safeTitle + 240 "</h2>" + 241 '<p class="ra-copy"></p>' + 242 '<p class="ra-meta"></p>' + 243 '<div class="ra-links">' + 244 '<a class="ra-link ra-details" target="_blank" rel="noopener"></a>' + 245 (showCredit 246 ? '<a class="ra-link" href="https://rapidact.eu/article-50#install" target="_blank" rel="noopener">' + 247 copybook.install + 248 "</a>" 249 : "") + 250 "</div>" + 251 "</div>" + 252 "</section>" + 253 '<button class="ra-button" type="button" aria-expanded="false">' + 254 '<span class="ra-button-lockup" aria-hidden="true">' + 255 '<img class="ra-button-image" src="' + 256 safeBrandUrl + 257 '" alt="" aria-hidden="true" width="128" height="128">' + 258 '<span class="ra-button-copy">' + 259 '<span class="ra-button-name">Rapid<span class="ra-button-name-accent">Act</span></span>' + 260 '<span class="ra-button-status">' + 261 safeTitle + 262 "</span>" + 263 "</span>" + 264 "</span>" + 265 '<span class="ra-sr-only ra-button-title">' + 266 safeTitle + 267 "</span>" + 268 '<span class="ra-sr-only ra-button-sub">' + 269 copybook.open + 270 "</span>" + 271 "</button>" + 272 "</div>"; 273 274 var panel = root.querySelector(".ra-panel"); 275 var button = root.querySelector(".ra-button"); 276 var closeButton = root.querySelector(".ra-close"); 277 var backdrop = root.querySelector(".ra-backdrop"); 278 var copy = root.querySelector(".ra-copy"); 279 var meta = root.querySelector(".ra-meta");
280 var details = root.querySelector(".ra-details"); 281 282 copy.textContent = message; 283 meta.textContent = [ 284 system && copybook.system + ": " + system, 285 provider && copybook.provider + ": " + provider, 286 ] 287 .filter(Boolean) 288 .join(" · "); 289 290 if (detailsUrl) { 291 details.href = detailsUrl; 292 details.textContent = copybook.details; 293 } else { 294 details.remove(); 295 } 296 297 var setOpen = function (open, focusPanel) { 298 panel.setAttribute("data-open", String(open)); 299 backdrop.setAttribute("data-open", String(open && display === "popup")); 300 button.setAttribute("aria-expanded", String(open)); 301 button.querySelector(".ra-button-sub").textContent = open 302 ? copybook.close 303 : copybook.open; 304 if (open && focusPanel) closeButton.focus(); 305 }; 306 307 button.addEventListener("click", function () { 308 var open = panel.getAttribute("data-open") !== "true"; 309 setOpen(open, open && display === "popup"); 310 }); 311 312 closeButton.addEventListener("click", function () { 313 setOpen(false, false); 314 button.focus(); 315 }); 316 317 backdrop.addEventListener("click", function () { 318 setOpen(false, false); 319 button.focus(); 320 }); 321 322 document.addEventListener("keydown", function (event) { 323 if (event.key !== "Escape") return; 324 if (panel.getAttribute("data-open") !== "true" || display === "standard") 325 return; 326 setOpen(false, false); 327 button.focus(); 328 }); 329 330 var mount = document.body; 331 if (display === "standard" && targetSelector) { 332 try { 333 mount = document.querySelector(targetSelector) || document.body; 334 } catch (_selectorError) { 335 mount = document.body; 336 } 337 } 338 mount.appendChild(host); 339})();
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.