PageSourceSearch

https://sunkeeperz.ru/include/main.min.js?v=1790251094

js sunkeeperz.ru collected 2026-10-07 03:28:48 UTC 22,256 bytes, 1 lines download raw bytes

1let clickCount=0,clickTimer=null,currentLang="ru",siteData=null;const getBasePath=()=>{const e=window.location.pathname,t=e.lastIndexOf("/");return e.substring(0,t+1)},BASE_PATH=getBasePath(),translations={ru:{about_title:"Об Артисте",read_more:"Подробнее",show_less:"Свернуть",bio_short:"SuNKeePeRZ — это уникальный голос современной сцены, сочетающий в себе глубину лирики и мощь звучания. Музыка, которая проникает в душу.",bio_full_p1:"Начав свой путь в underground сцене, Sardor Akbarov быстро завоевал внимание слушателей своим неповторимым стилем. Каждый трек — это история, рассказанная через призму эмоций и ритма.",bio_full_p2:"В своих работах он экспериментирует с жанрами, создавая атмосферу, которая захватывает с первых секунд. SuNKeePeRZ не просто создает музыку, он создает миры, в которых каждый найдет что-то свое.",bio_full_p3:"Следите за обновлениями, новые релизы уже на подходе. Добро пожаловать в мир SuNKeePeRZ.",releases_title:"Будущие Релизы",latest_releases_title:"Последние Релизы",gallery_title:"Фотогалерея",scroll_hint:"Листайте влево/вправо",subscribe:"Подписаться на новости"},en:{about_title:"About Artist",read_more:"Read More",show_less:"Show Less",bio_short:"SuNKeePeRZ is a unique voice of the modern scene, combining lyrical depth with powerful sound. Music that penetrates the soul.",bio_full_p1:"Starting his journey in the underground scene, Sardor Akbarov quickly won the attention of listeners with his unique style. Every track is a story told through the prism of emotions and rhythm.",bio_full_p2:"In his works, he experiments with genres, creating an atmosphere that captivates from the first seconds. SuNKeePeRZ doesn't just create music, he creates worlds where everyone will find something of their own.",bio_full_p3:"Stay tuned for updates, new releases are on the way. Welcome to the world of SuNKeePeRZ.",releases_title:"Future Releases",latest_releases_title:"Latest Releases",gallery_title:"Photo Gallery",scroll_hint:"Scroll Left/Right",subscribe:"Subscribe to news"}};function updateCopyrightYear(){const e=document.getElementById("current-year");e&&(e.textContent=(new Date).getFullYear())}const defaultData={artistPhoto:"/img/artist/1775408585_69d295c92361b.jpg",logoPng:null,usePngLogo:!1,artistName:"Sardor Akbarov",artistNickname:"SuNKeePeRZ",releases:[{cover:"/img/artist/1775408585_69d295c92361b.jpg",artist:"SuNKeePeRZ",title:"Nightmare in Red",date:"25.10.23"},{cover:"/img/artist/1775408585_69d295c92361b.jpg",artist:"SuNKeePeRZ",title:"Dark Horizon",date:"12.11.23"},{cover:"/img/artist/1775408585_69d295c92361b.jpg",artist:"SuNKeePeRZ",title:"Silent Scream",date:"01.12.23"},{cover:"/img/artist/1775408585_69d295c92361b.jpg",artist:"SuNKeePeRZ",title:"Midnight Run",date:"15.12.23"},{cover:"/img/artist/1775408585_69d295c92361b.jpg",artist:"SuNKeePeRZ",title:"Neon Lights",date:"05.01.24"},{cover:"/img/artist/1775408585_69d295c92361b.jpg",artist:"SuNKeePeRZ",title:"Cyber Heart",date:"20.01.24"},{cover:"/img/artist/1775408585_69d295c92361b.jpg",artist:"SuNKeePeRZ",title:"Love Virus",date:"14.02.24"},{cover:"/img/artist/1775408585_69d295c92361b.jpg",artist:"SuNKeePeRZ",title:"Spring Bass",date:"01.03.24"},{cover:"/img/artist/1775408585_69d295c92361b.jpg",artist:"SuNKeePeRZ",title:"Echoes",date:"15.03.24"},{cover:"/img/artist/1775408585_69d295c92361b.jpg",artist:"SuNKeePeRZ",title:"Final Boss",date:"01.04.24"}],gallery:["/img/artist/1775408585_69d295c92361b.jpg","/img/artist/1775408585_69d295c92361b.jpg","/img/artist/1775408585_69d295c92361b.jpg","/img/artist/1775408585_69d295c92361b.jpg","/img/artist/1775408585_69d295c92361b.jpg","/img/artist/1775408585_69d295c92361b.jpg","/img/artist/1775408585_69d295c92361b.jpg","/img/artist/1775408585_69d295c92361b.jpg"],socials:{vk:"#",telegram:"#",instagram:"#",youtube:"#"},platforms:{spotify:"https://open.spotify.com/artist/53NPxfYfgXnHv8k1q65JCV",apple:"https://music.apple.com/ru/artist/dj-sunkeeperz/924390539",soundcloud:"#",yandex:"https://music.yandex.ru/artist/3729245",vkmusic:"https://vk.com/artist/djsunkeeperz",youtube:"https://www.youtube.com/@SuNKeePeRZ",youtubemusic:"https://music.youtube.com/channel/UCaTJP1kEVd75lvdLkSoYylQ"},bio:{short:"SuNKeePeRZ — это уникальный голос современной сцены, сочетающий в себе глубину лирики и мощь звучания. Музыка, которая проникает в душу.",full1:"Начав свой путь в underground сцене, Sardor Akbarov быстро завоевал внимание слушателей своим неповторимым стилем. Каждый трек — это история, рассказанная через призму эмоций и ритма.",full2:"В своих работах он экспериментирует с жанрами, создавая атмосферу, которая захватывает с первых секунд. SuNKeePeRZ не просто создает музыку, он создает миры, в которых каждый найдет что-то свое.",full3:"Следите за обновлениями, новые релизы уже на подходе. Добро пожаловать в мир SuNKeePeRZ."}};async function loadSiteData(){try{const e=await fetch(BASE_PATH+"data.json?t="+Date.now());if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);const t=await e.json();t&&Object.keys(t).length>0?(siteData=t,!localStorage.getItem("sunk-theme")&&t.defaultTheme&&("green"===t.defaultTheme?document.body.classList.add("theme-green"):document.body.classList.remove("theme-green")),updateSiteContent(t)):(siteData=defaultData,updateSiteContent(defaultData)),startParticlesWhenIdle()}catch(e){console.error("Ошибка загрузки данных:",e),siteData=defaultData,updateSiteContent(defaultData),startParticlesWhenIdle()}}function hexToDarkShade(e,t){e=e.replace("#","");return"#"+[Math.round(parseInt(e.substr(0,2),16)*t),Math.round(parseInt(e.substr(2,2),16)*t),Math.round(parseInt(e.substr(4,2),16)*t)].map(e=>Math.min(255,e).toString(16).padStart(2,"0")).join("")}function applyThemeColors(e){if(!e.themes)return;const t=document.documentElement;if(e.themes.primary){const n=e.themes.primary;t.style.setProperty("--accent",n.hex),t.style.setProperty("--accent-rgb",n.rgb),t.style.setProperty("--accent-dark",hexToDarkShade(n.hex,.8)),t.style.setProperty("--accent-darker",hexToDarkShade(n.hex,.6))}if(e.themes.secondary&&(t.dataset.theme2Hex=e.themes.secondary.hex,t.dataset.theme2Rgb=e.themes.secondary.rgb),document.body.classList.contains("theme-green")&&e.themes.secondary){const n=e.themes.secondary;t.style.setProperty("--accent",n.hex),t.style.setProperty("--accent-rgb",n.rgb),t.style.setProperty("--accent-dark",hexToDarkShade(n.hex,.8)),t.style.setProperty("--accent-darker",hexToDarkShade(n.hex,.6))}}function updateSiteContent(e){const t=translations[currentLang];applyThemeColors(e),!1!==e.glowEnabled?document.body.classList.add("site-glow-border"):document.body.classList.remove("site-glow-border");const n=e=>"string"==typeof e?e.replace(/^https?:\/\/sunkeeperz\.ru/,""):e,o=document.getElementById("artist-photo");if(o){const t=n(e.artistPhoto)||defaultData.artistPhoto;o.src.endsWith(t)||(o.src=t),o.onerror=function(){this.src=defaultData.artistPhoto}}const a=document.getElementById("logo-png-container"),i=document.getElementById("logo-text-container"),s=document.getElementById("logo-png-img"),r=n(document.body.classList.contains("theme-green")&&e.logoPngGreen?e.logoPngGreen:e.logoPng);e.usePngLogo&&"string"==typeof r&&""!==r?(a&&(a.classList.remove("hidden"),s&&(s.src.endsWith(r)||(s.src=r),s.onerror=function(){e.usePngLogo=!1,a&&a.classList.add("hidden"),i&&i.classList.remove("hidden")})),i&&i.classList.add("hidden")):(a&&a.classList.add("hidden"),i&&i.classList.remove("hidden"));const l=document.getElementById("artist-name-display"),c=document.getElementById("artist-nickname-display");l&&(l.textContent=e.artistName||"Sardor Akbarov"),c&&(c.textContent=e.artistNickname||"SuNKeePeRZ");const d=document.getElementById("social-vk-link"),u=document.getElementById("social-telegram-link"),m=document.getElementById("social-instagram-link"),h=document.getElementById("social-youtube-link");d&&(d.href=e.socials?.vk||"#"),u&&(u.href=e.socials?.telegram||"#"),m&&(m.href=e.socials?.instagram||"#"),h&&(h.href=e.socials?.youtube||"#");const g={"platform-spotify-link":e.platforms?.spotify,"platform-apple-link":e.platforms?.apple,"platform-soundcloud-link":e.platforms?.soundcloud,"platform-yandex-link":e.platforms?.yandex,"platform-vkmusic-link":e.platforms?.vkmusic,"platform-youtubemusic-link":e.platforms?.youtubemusic};for(const[e,t]of Object.entries(g)){const n=document.getElementById(e);n&&(n.href=t||"#")}const p=document.getElementById("bio-short-display"),f=document.getElementById("bio-full-1-display"),y=document.getElementById("bio-full-2-display"),b=document.getElementById("bio-full-3-display");"en"===currentLang?(p&&(p.textContent=e.bio?.short_en||t.bio_short),f&&(f.textContent=e.bio?.full1_en||t.bio_full_p1),y&&(y.textContent=e.bio?.full2_en||t.bio_full_p2),b&&(b.textContent=e.bio?.full3_en||t.bio_full_p3)):(p&&(p.textContent=e.bio?.short||t.bio_short),f&&(f.textContent=e.bio?.full1||t.bio_full_p1),y&&(y.textContent=e.bio?.full2||t.bio_full_p2),b&&(b.textContent=e.bio?.full3||t.bio_full_p3));const v=document.getElementById("releases-container");if(v&&Array.isArray(e.releases)){v.replaceChildren();const t=[{key:"yandex",fallback:"https://music.yandex.ru/artist/3729245",icon:"/img/icons/plat/yandex.svg",alt:"Yandex Music",title:"Яндекс Музыка"},{key:"vkmusic",fallback:"https://vk.com/artist/djsunkeeperz",icon:"/img/icons/plat/vkmusic.svg",alt:"VK Music",title:"VK Музыка"},{key:"spotify",fallback:"https://open.spotify.com/artist/53NPxfYfgXnHv8k1q65JCV",icon:"/img/icons/plat/spotify.svg",alt:"Spotify",title:"Spotify"},{key:"apple",fallback:"https://music.apple.com/ru/artist/dj-sunkeeperz/924390539",icon:"/img/icons/plat/apple.svg",alt:"Apple Music",title:"Ap
1ple Music"},{key:"youtube",fallback:"https://www.youtube.com/@SuNKeePeRZ",icon:"/img/icons/plat/youtube.png",alt:"YouTube",title:"YouTube"}],n=(e,t)=>{if("string"!=typeof e||!e)return t;try{const n=new URL(e,window.location.origin);return["http:","https:"].includes(n.protocol)?e:t}catch{return e.startsWith("/")?e:t}},o=document.createDocumentFragment();e.releases.forEach((a,i)=>{const s=document.createElement("div");s.className=`release-card delay-${100*(i%10+1)} group relative bg-sunk-gray/40 rounded-xl overflow-hidden border border-gray-800 hover:border-sunk-red/50`;const r=document.createElement("div");r.className="release-card-inner";const l=document.createElement("div");l.className="relative aspect-square overflow-hidden rounded-t-xl";const c=document.createElement("img");c.className="release-cover w-full h-full object-cover transition-transform duration-700",c.alt=a.title||"Cover",c.loading="lazy",c.decoding="async",c.width=720,c.height=720,c.src=n(a.cover,defaultData.releases[0].cover),c.addEventListener("error",()=>{c.src=defaultData.releases[0].cover},{once:!0});const d=document.createElement("div");d.className="absolute inset-0 bg-gradient-to-t from-black via-trans
1parent to-transparent opacity-80",l.append(c,d);const u=document.createElement("div");u.className="p-2 md:p-4 text-center bg-sunk-gray/40 rounded-b-xl";const m=document.createElement("div");m.className="release-artist font-bold text-sunk-red text-sm md:text-base";const h=a.artist||e.artistNickname||"";m.textContent=h,m.title=h;const g=document.createElement("div");g.className="release-title text-white font-medium text-xs md:text-sm truncate";const p=a.title||"";g.textContent=p,g.title=p;const f=document.createElement("div");f.className="release-date text-[#FFE6E6] text-xs mt-1",f.textContent=a.date||"";const y=document.createElement("div");y.className="release-platform-icons";for(const o of t){const t=document.createElement("a");t.href=n(e.platforms?.[o.key],o.fallback),t.target="_blank",t.rel="noopener noreferrer",t.className="release-platform-icon hover:scale-110 transition-transform",t.title=o.title;const a=document.createElement("img");a.src=o.icon,a.alt=o.alt,a.loading="lazy",a.decoding="async",a.width=24,a.height=24,t.appendChild(a),y.appendChild(t)}u.append(m,g,f,y),r.append(l,u),s.appendChild(r),o.appendChild(s)}),v.appendChild(o)}const k=document.getElementById("gallery-track");if(k&&e.gallery){k.innerHTML="";let t={};try{t=JSON.parse(k.dataset.sizes||"{}")}catch(e){}e.gallery.forEach((e,n)=>{const o=document.createElement("img");o.src=e,o.alt="SuNKeePeRZ",o.loading="lazy",o.decoding="async";const a=t[e];a&&(o.width=a[0],o.height=a[1]),o.className="h-64 md:h-96 w-auto object-cover rounded-lg glow-red flex-shrink-0 cursor-pointer select-none",o.onclick=function(e){window._galleryJustDragged?e.preventDefault():openLightbox(this.src)},o.onerror=function(){this.src=defaultData.gallery[n%defaultData.gallery.length]},k.appendChild(o)})}}function initLanguageSwitcher(){const e=document.getElementById("lang-toggle"),t=document.querySelector(".lang-globe");e&&t&&(e.checked=!1,t.className="lang-globe ru",e.addEventListener("change",e=>{const n=e.target.checked?"en":"ru";t.className=`lang-globe ${n}`,updateLanguage(n)}))}function updateLanguage(e){currentLang=e;const t=translations[e];document.documentElement.lang=e,document.dispatchEvent(new CustomEvent("sunk:lang",{detail:{lang:e}})),document.querySelectorAll("[data-i18n]").forEach(e=>{const n=e.getAttribute("data-i18n");if(t[n]){const o=e.querySelector("i");e.textContent=t[n],o&&e.appendChild(o)}}),siteData&&updateSiteContent(siteData);const n=document.getElementById("bio-toggle-btn"),o=document.getElementById("bio-full");n&&o&&o.classList.contains("expanded")?n.innerHTML=`${t.show_less} <i class="fas fa-chevron-up ml-2"></i>`:n&&(n.innerHTML=`${t.read_more} <i class="fas fa-chevron-down ml-2"></i>`)}function initBioExpand(){const e=document.getElementById("bio-toggle-btn"),t=document.getElementById("bio-full");if(!e||!t)return;let n=!1;e.addEventListener("click",()=>{n=!n;const o=translations[currentLang];n?(t.classList.add("expanded"),e.innerHTML=`${o.show_less} <i class="fas fa-chevron-up ml-2"></i>`,setTimeout(()=>{e.scrollIntoView({behavior:"smooth",block:"nearest"})},400)):(t.classList.remove("expanded"),e.innerHTML=`${o.read_more} <i class="fas fa-chevron-down ml-2"></i>`)})}function initGalleryDrag(){const e=document.getElementById("gallery-track");if(!e)return;let t,n,o,a=!1,i=!1,s=0,r=null;e.addEventListener("dragstart",e=>e.preventDefault());let l=!1;function c(){r&&(cancelAnimationFrame(r),r=null)}function d(){if(!l)return;c();let t=.4,n=1;r=requestAnimationFrame(function o(){l?(!a&&e.scrollWidth>e.clientWidth&&(e.scrollLeft<=0?(n=1,t=.4):e.scrollLeft>=e.scrollWidth-e.clientWidth-1?(n=-1,t=.4):t=Math.min(.7,t+.005),e.scrollLeft+=t*n),r=requestAnimationFrame(o)):r=null})}function u(r){a=!0,i=!1,o=Date.now(),s=0,t=r-e.offsetLeft,n=e.scrollLeft,e.style.cursor="grabbing",c()}function m(o){if(!a)return;const r=2.5*(o-e.offsetLeft-t);Math.abs(r)>3&&(i=!0,s=r),e.scrollLeft=n-r}function h(){a&&(a=!1,e.style.cursor="grab",i&&(window._galleryJustDragged=!0,setTimeout(()=>{window._galleryJustDragged=!1},100)))}new IntersectionObserver(e=>{e.forEach(e=>{l=e.isIntersecting,l?d():c()})},{threshold:.1}).observe(e),e.addEventListener("mousedown",e=>{u(e.pageX)}),e.addEventListener("mousemove",e=>{a&&(e.preventDefault(),m(e.pageX))}),e.addEventListener("mouseup",e=>{const t=i;h(),t&&(e.preventDefault(),e.stopPropagation())}),e.addEventListener("mouseenter",()=>{c()}),e.addEventListener("mouseleave",()=>{h(),d()}),e.addEventListener("wheel",t=>{t.preventDefault(),e.scrollLeft+=2*t.deltaY},{passive:!1}),e.addEventListener("touchstart",e=>{u(e.touches[0].pageX)},{passive:!0}),e.addEventListener("touchmove",e=>{a&&m(e.touches[0].pageX)},{passive:!0}),e.addEventListener("touchend",()=>{h(),d()},{passive:!0})}function initLightbox(){const e=document.getElementById("lightbox"),t=document.getElementById("lightbox-img");e&&t&&(window.openLightbox=function(n){t.src=n,e.classList.remove("hidden"),setTimeout(()=>{e.classList.remove("opacity-0")},10),document.body.style.overflow="hidden"},window.closeLightbox=function(){e.classList.add("opacity-0"),setTimeout(()=>{e.classList.add("hidden"),t.src=""},300),document.body.style.overflow="auto"},e.addEventListener("click",t=>{t.target===e&&closeLightbox()}))}function initAdminIcon(){const e=document.getElementById("admin-icon");e&&e.addEventListener("click",()=>{clickCount++,clickTimer&&clearTimeout(clickTimer),clickTimer=setTimeout(()=>{clickCount>=3&&(window.location.href=BASE_PATH+"adm.html"),clickCount=0},500)})}window._galleryJustDragged=!1;let _particleAnimId=null,_particlePaused=!1;function startParticlesWhenIdle(){const e=()=>initParticles();"function"==typeof requestIdleCallback?requestIdleCallback(e,{timeout:1500}):setTimeout(e,600)}function initParticles(){_particleAnimId&&(cancelAnimationFrame(_particleAnimId),_particleAnimId=null);const e=document.getElementById("particle-canvas");if(!e)return;const t=e.getContext("2d");e.width=window.innerWidth,e.height=window.innerHeight;const n=getComputedStyle(document.documentElement),o=n.getPropertyValue("--accent-rgb").trim()||"255, 0, 0",a=n.getPropertyValue("--accent").trim()||"#ff0000";let i=[],s=[],r={x:null,y:null,radius:150};window.addEventListener("mousemove",e=>{r.x=e.x,r.y=e.y});class l{constructor(){this.x=Math.random()*e.width,this.y=Math.random()*e.height,this.vx=.4*(Math.random()-.5),this.vy=.4*(Math.random()-.5),this.size=3*Math.random()+3}update(){this.x+=this.vx,this.y+=this.vy,(this.x<0||this.x>e.width)&&(this.vx*=-1),(this.y<0||this.y>e.height)&&(this.vy*=-1)}}function c(e,n,a){if(!(e.length<2)){t.beginPath(),t.strokeStyle=`rgba(${o}, ${.3*n})`,t.lineWidth=4*a,t.lineCap="round",t.lineJoin="round",t.moveTo(e[0].x,e[0].y);for(let n=1;n<e.length;n++)t.lineTo(e[n].x,e[n].y);t.stroke(),t.beginPath(),t.strokeStyle=`rgba(${o}, ${.9*n})`,t.lineWidth=a,t.moveTo(e[0].x,e[0].y);for(let n=1;n<e.length;n++)t.lineTo(e[n].x,e[n].y);t.stroke(),t.beginPath(),t.strokeStyle=`rgba(255, 255, 255, ${.5*n})`,t.lineWidth=.4*a,t.moveTo(e[0].x,e[0].y);for(let n=1;n<e.length;n++)t.lineTo(e[n].x,e[n].y);t.stroke()}}let d=performance.now()+1e3+2e3*Math.random(),u=0;const m=1e3/30;function h(n){_particlePaused||(_particleAnimId=requestAnimationFrame(h));const r=n-u;if(r<m)return;u=n-r%m;const l=performance.now();t.clearRect(0,0,e.width,e.height);for(let e=0;e<i.length;e++)i[e].update();!function(){t.strokeStyle=`rgba(${o}, 0.6)`,t.lineWidth=1.2,t.beginPath();for(let e=0;e<i.length;e++){const n=i[e];for(let o=e+1;o<i.length;o++){const e=i[o],a=n.x-e.x,s=n.y-e.y;a*a+s*s<22500&&(t.moveTo(n.x,n.y),t.lineTo(e.x,e.y))}}t.stroke(),t.fillStyle=a,t.beginPath();for(let e=0;e<i.length;e++){const n=i[e];t.moveTo(n.x+n.size,n.y),t.arc(n.x,n.y,n.size,0,2*Math.PI,!1)}t.fill()}(),l>=d&&(!function(){const t=Math.random()*e.width,n=Math.random()*e.height*.2,o=8+Math.floor(6*Math.random()),a=[{x:t,y:n}];for(let e=1;e<=o;e++){const t=a[e-1];a.push({x:t.x+180*(Math.random()-.5),y:t.y+40+80*Math.random()})}const i=[];for(let e=2;e<a.length-1;e++)if(Math.random()<.5){const t=[{x:a[e].x,y:a[e].y}],n=3+Math.floor(4*Math.random()),o=Math.random()<.5?-1:1;for(let e=1;e<=n;e++){const n=t[e-1];t.push({x:n.x+o*(30+60*Math.random()),y:n.y+20+40*Math.random()})}i.push(t)}s.push({points:a,branches:i,opacity:1,birth:performance.now(),lifetime:200+200*Math.random(),width:2+2*Math.random()})}(),d=l+2e3+2e3*Math.random()),function(e){for(let n=s.length-1;n>=0;n--){const a=s[n],i=e-a.birth;if(i>a.lifetime){s.splice(n,1);continue}const r=.5*a.lifetime;a.opacity=i<r?1:1-(i-r)/(a.lifetime-r),c(a.points,a.opacity,a.width);for(const e of a.branches)c(e,.6*a.opacity,.5*a.width);if(i<80){const e=.2*(1-i/80)*a.opacity;t.fillStyle=`rgba(${o}, ${e})`,t.beginPath(),t.arc(a.points[0].x,a.points[0].y,120+60*Math.random(),0,2*Math.PI),t.fill()}}}(l)}document.addEventListener("visibilitychange",()=>{document.hidden?_particlePaused=!0:(_particlePaused=!1,u=performance.now(),_particleAnimId=requestAnimationFrame(h))});let g=null,p=e.width,f=e.height;window.addEventListener("resize",()=>{clearTimeout(g),g=setTimeout(()=>{const t=window.innerWidth,n=window.innerHeight,o=t!==p,a=Math.abs(n-f);!o&&a<120||(e.width=t,e.height=n,p=t,f=n)},200)}),function(){i=[];let t=Math.floor(e.height*e.width/15e3);t=Math.min(t,90);for(let e=0;e<t;e++)i.push(new l)}(),_particlePaused=!1,_particleAnimId=requestAnimationFrame(h)}function initThemeToggle(){const e=document.getElementById("theme-toggle");if(!e)return;"green"===localStorage.getItem("sunk-theme")&&document.body.classList.add("theme-green"),e.addEventListener("click",()=>{document.body.classList.toggle("theme-green");const e=document.body.classList.contains("theme-green");localStorage.setItem("sunk-theme",e?"green":"red"),siteData&&(applyThemeColors(siteData),updateSiteContent(siteData)),initParticles()})}
1"serviceWorker"in navigator&&window.addEventListener("load",()=>{navigator.serviceWorker.register("/sw.js").then(e=>{console.log("ServiceWorker registered: ",e)}).catch(e=>{console.log("ServiceWorker registration failed: ",e)})}),document.addEventListener("DOMContentLoaded",()=>{"green"===localStorage.getItem("sunk-theme")&&document.body.classList.add("theme-green"),updateCopyrightYear(),loadSiteData(),initLanguageSwitcher(),initBioExpand(),initGalleryDrag(),initLightbox(),initAdminIcon(),initThemeToggle(),document.addEventListener("visibilitychange",()=>{document.hidden||loadSiteData()})});

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.