From dee92567b12c38cc34f220b74149cb9217cedb62 Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sun, 15 Jun 2025 23:42:44 +0530 Subject: [PATCH 01/12] Create test --- submissions/Starlapse/test | 1 + 1 file changed, 1 insertion(+) create mode 100644 submissions/Starlapse/test diff --git a/submissions/Starlapse/test b/submissions/Starlapse/test new file mode 100644 index 00000000..83f9fcff --- /dev/null +++ b/submissions/Starlapse/test @@ -0,0 +1 @@ +txt From 9c0a2d9312cafb6898d4ee020e9c4e40eb27978c Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sun, 15 Jun 2025 23:43:48 +0530 Subject: [PATCH 02/12] Add files via upload --- submissions/Starlapse/background.js | 20 ++ submissions/Starlapse/content.js | 160 +++++++++++++++ submissions/Starlapse/manifest.json | 31 +++ submissions/Starlapse/popup.css | 305 ++++++++++++++++++++++++++++ submissions/Starlapse/popup.html | 56 +++++ submissions/Starlapse/popup.js | 99 +++++++++ 6 files changed, 671 insertions(+) create mode 100644 submissions/Starlapse/background.js create mode 100644 submissions/Starlapse/content.js create mode 100644 submissions/Starlapse/manifest.json create mode 100644 submissions/Starlapse/popup.css create mode 100644 submissions/Starlapse/popup.html create mode 100644 submissions/Starlapse/popup.js diff --git a/submissions/Starlapse/background.js b/submissions/Starlapse/background.js new file mode 100644 index 00000000..235489db --- /dev/null +++ b/submissions/Starlapse/background.js @@ -0,0 +1,20 @@ +chrome.runtime.onInstalled.addListener(() => { + console.log('Starlapse extension installed! 🌌'); +}); + +chrome.action.onClicked.addListener(async (tab) => { + console.log('Black hole portal opened!'); +}); + +chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { + if (changeInfo.status === 'complete' && tab.url) { + console.log('Tab updated, checking for lingering dark matter...'); + } +}); + +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + if (request.action === 'backgroundTask') { + console.log('Background task received:', request); + sendResponse({ success: true }); + } +}); \ No newline at end of file diff --git a/submissions/Starlapse/content.js b/submissions/Starlapse/content.js new file mode 100644 index 00000000..c7cf7890 --- /dev/null +++ b/submissions/Starlapse/content.js @@ -0,0 +1,160 @@ +class DarkModeTransformer { + constructor() { + this.isActive = false; + this.darkModeId = 'black-hole-dark-mode'; + this.originalStyles = new Map(); + + chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + if (request.action === 'activateDarkMode') { + this.activateDarkMode(); + sendResponse({ success: true }); + } else if (request.action === 'deactivateDarkMode') { + this.deactivateDarkMode(); + sendResponse({ success: true }); + } else if (request.action === 'checkState') { + sendResponse({ isActive: this.isActive }); + } + }); + } + + activateDarkMode() { + if (this.isActive) return; + + this.isActive = true; + this.createDarkModeStyles(); + this.addSuckingAnimation(); + } + + deactivateDarkMode() { + if (!this.isActive) return; + + this.isActive = false; + this.removeDarkModeStyles(); + this.removeAnimations(); + } + + createDarkModeStyles() { + const existing = document.getElementById(this.darkModeId); + if (existing) existing.remove(); + + const style = document.createElement('style'); + style.id = this.darkModeId; + style.textContent = ` + + html { + filter: invert(1) hue-rotate(180deg) !important; + transition: all 2s ease-in-out !important; + } + + img, video, iframe, svg, canvas, embed, object { + filter: invert(1) hue-rotate(180deg) !important; + } + + [style*="background-image"], + [style*="background: url"], + [style*="background:url"] { + filter: invert(1) hue-rotate(180deg) !important; + } + + body::before { + content: ''; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: + radial-gradient(circle at 20% 80%, rgba(138, 43, 226, 0.1) 0%, transparent 50%), + radial-gradient(circle at 80% 20%, rgba(58, 134, 255, 0.1) 0%, transparent 50%), + radial-gradient(circle at 40% 40%, rgba(255, 107, 53, 0.05) 0%, transparent 50%); + pointer-events: none; + z-index: 9999; + animation: cosmic-drift 10s ease-in-out infinite alternate; + } + + @keyframes cosmic-drift { + 0% { opacity: 0.3; transform: translateX(-10px) translateY(-5px); } + 100% { opacity: 0.1; transform: translateX(10px) translateY(5px); } + } + + h1, h2, h3, h4, h5, h6 { + text-shadow: 0 0 5px rgba(138, 43, 226, 0.3) !important; + } + + button, input, select, textarea, a { + box-shadow: 0 0 3px rgba(138, 43, 226, 0.2) !important; + transition: box-shadow 0.3s ease !important; + } + + button:hover, input:focus, select:focus, textarea:focus, a:hover { + box-shadow: 0 0 8px rgba(138, 43, 226, 0.4) !important; + } + `; + + document.head.appendChild(style); + } + + addSuckingAnimation() { + const suckEffect = document.createElement('div'); + suckEffect.id = 'black-hole-suck-effect'; + suckEffect.style.cssText = ` + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: radial-gradient(circle at center, transparent 0%, rgba(0,0,0,0.8) 100%); + z-index: 999999; + pointer-events: none; + animation: suck-in 3s ease-in-out forwards; + `; + + const keyframes = ` + @keyframes suck-in { + 0% { + transform: scale(10) rotate(0deg); + opacity: 0; + } + 50% { + transform: scale(1) rotate(180deg); + opacity: 0.8; + } + 100% { + transform: scale(0.1) rotate(360deg); + opacity: 0; + } + } + `; + + const styleSheet = document.createElement('style'); + styleSheet.textContent = keyframes; + document.head.appendChild(styleSheet); + + document.body.appendChild(suckEffect); + + setTimeout(() => { + if (suckEffect.parentNode) { + suckEffect.parentNode.removeChild(suckEffect); + } + if (styleSheet.parentNode) { + styleSheet.parentNode.removeChild(styleSheet); + } + }, 3000); + } + + removeDarkModeStyles() { + const style = document.getElementById(this.darkModeId); + if (style) { + style.remove(); + } + } + + removeAnimations() { + const suckEffect = document.getElementById('black-hole-suck-effect'); + if (suckEffect) { + suckEffect.remove(); + } + } +} + +new DarkModeTransformer(); \ No newline at end of file diff --git a/submissions/Starlapse/manifest.json b/submissions/Starlapse/manifest.json new file mode 100644 index 00000000..cf41b757 --- /dev/null +++ b/submissions/Starlapse/manifest.json @@ -0,0 +1,31 @@ +{ + "manifest_version": 3, + "name": "Starlapse", + "version": "1.0.0", + "description": "Watch a black hole suck in your webpage and invert it into light/dark mode!", + "author": "Raghav Karn", + + "permissions": [ + "activeTab", + "storage" + ], + "action": { + "default_popup": "popup.html", + "default_title": "Starlapse" + }, + "content_scripts": [ + { + "matches": [""], + "js": ["content.js"], + "run_at": "document_idle" + } + ], + "background": { + "service_worker": "background.js" + }, + "icons": { + "16": "icons/icon16.png", + "48": "icons/icon48.png", + "128": "icons/icon128.png" + } +} \ No newline at end of file diff --git a/submissions/Starlapse/popup.css b/submissions/Starlapse/popup.css new file mode 100644 index 00000000..a74a8305 --- /dev/null +++ b/submissions/Starlapse/popup.css @@ -0,0 +1,305 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + width: 320px; + height: 450px; + background: radial-gradient(circle at center, #0f0f23, #000000); + color: #ffffff; + font-family: 'Courier New', 'doto'; + overflow: hidden; + position: relative; +} + +body::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: url('data:image/svg+xml,'); + opacity: 0.3; + animation: starfield 20s linear infinite; +} + +small { + font-size: 14px; + font-family: 'major mono display'; + font-weight: 700; +} + +a { + text-decoration: none; + color: #ffffff; +} + +@keyframes starfield { + 0% { transform: translateY(0); } + 100% { transform: translateY(-20px); } +} + +.container { + padding: 20px; + text-align: center; + position: relative; + z-index: 1; +} + +.title { + font-size: 24px; + font-family: 'major mono display'; + font-weight: bold; + margin-bottom: 20px; + text-shadow: 0 0 10px #8a2be2; + animation: pulse 2s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.7; } +} + +.black-hole-container { + position: relative; + width: 200px; + height: 200px; + margin: 0 auto 30px; +} + +.black-hole { + position: relative; + width: 100%; + height: 100%; + border-radius: 50%; + background: radial-gradient(circle, transparent 30%, #1a1a2e 35%, #16213e 45%, #0f0f23 60%, #000000 100%); + animation: rotate 3s linear infinite; +} + +.event-horizon { + position: absolute; + top: 50%; + left: 50%; + width: 60px; + height: 60px; + background: #000000; + border-radius: 50%; + transform: translate(-50%, -50%); + box-shadow: + 0 0 20px #8a2be2, + inset 0 0 20px #4a0e4e; +} + +.accretion-disk { + position: absolute; + top: 50%; + left: 50%; + width: 140px; + height: 140px; + border: 3px solid transparent; + border-radius: 50%; + transform: translate(-50%, -50%); + background: conic-gradient( + from 0deg, + #ff6b35 0deg, + #f7931e 60deg, + #8a2be2 120deg, + #3a86ff 180deg, + #06ffa5 240deg, + #ff6b35 300deg, + #ff6b35 360deg + ); + animation: accretion-spin 2s linear infinite; + opacity: 0.8; +} + +@keyframes rotate { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +@keyframes accretion-spin { + 0% { transform: translate(-50%, -50%) rotate(0deg); } + 100% { transform: translate(-50%, -50%) rotate(-360deg); } +} + +.particles { + position: absolute; + width: 100%; + height: 100%; +} + +.particle { + position: absolute; + width: 4px; + height: 4px; + background: #ffffff; + border-radius: 50%; + opacity: 0.8; +} + +.particle:nth-child(1) { + top: 20%; + left: 80%; + animation: spiral-in 3s ease-in-out infinite; +} + +.particle:nth-child(2) { + top: 80%; + left: 20%; + animation: spiral-in 3s ease-in-out infinite 0.5s; +} + +.particle:nth-child(3) { + top: 50%; + left: 90%; + animation: spiral-in 3s ease-in-out infinite 1s; +} + +.particle:nth-child(4) { + top: 10%; + left: 40%; + animation: spiral-in 3s ease-in-out infinite 1.5s; +} + +.particle:nth-child(5) { + top: 90%; + left: 60%; + animation: spiral-in 3s ease-in-out infinite 2s; +} + +.particle:nth-child(6) { + top: 30%; + left: 10%; + animation: spiral-in 3s ease-in-out infinite 2.5s; +} + +.particle:nth-child(7) { + top: 70%; + left: 90%; + animation: spiral-in 3s ease-in-out infinite 0.8s; +} + +.particle:nth-child(8) { + top: 40%; + left: 85%; + animation: spiral-in 3s ease-in-out infinite 1.3s; +} + +@keyframes spiral-in { + 0% { + transform: rotate(0deg) translateX(60px) rotate(0deg); + opacity: 1; + } + 100% { + transform: rotate(360deg) translateX(0px) rotate(-360deg); + opacity: 0; + } +} + +.suction-effect { + position: absolute; + top: 50%; + left: 50%; + width: 180px; + height: 180px; + border: 2px solid rgba(138, 43, 226, 0.3); + border-radius: 50%; + transform: translate(-50%, -50%); + animation: suction-pulse 1.5s ease-in-out infinite; +} + +@keyframes suction-pulse { + 0%, 100% { + transform: translate(-50%, -50%) scale(1); + opacity: 0.3; + } + 50% { + transform: translate(-50%, -50%) scale(1.1); + opacity: 0.1; + } +} + +.controls { + margin: 20px 0; +} + +.cosmic-btn { + background: linear-gradient(45deg, #8a2be2, #4a0e4e); + border: 2px solid #8a2be2; + color: white; + padding: 12px 24px; + border-radius: 25px; + cursor: pointer; + font-family: inherit; + font-weight: bold; + transition: all 0.3s ease; + position: relative; + overflow: hidden; + text-transform: uppercase; + letter-spacing: 1px; +} + +.cosmic-btn::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); + transition: left 0.5s; +} + +.cosmic-btn:hover::before { + left: 100%; +} + +.cosmic-btn:hover { + transform: translateY(-2px); + box-shadow: 0 5px 15px rgba(138, 43, 226, 0.4); +} + +.cosmic-btn.deactivate { + background: linear-gradient(45deg, #ff4757, #c44569); + border-color: #ff4757; +} + +.cosmic-btn.active { + animation: button-pulse 1s ease-in-out infinite; +} + +@keyframes button-pulse { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.05); } +} + +.status { + font-size: 12px; + margin: 15px 0; + color: #8a2be2; + font-style: italic; +} + +.info { + margin-top: 15px; + font-size: 10px; + color: #666; +} + +.black-hole.active { + animation: rotate 0.5s linear infinite, grow 2s ease-in-out; +} + +.black-hole.active .suction-effect { + animation: suction-pulse 0.3s ease-in-out infinite; +} + +@keyframes grow { + 0% { transform: scale(1); } + 50% { transform: scale(1.2); } + 100% { transform: scale(1); } +} \ No newline at end of file diff --git a/submissions/Starlapse/popup.html b/submissions/Starlapse/popup.html new file mode 100644 index 00000000..436cd57e --- /dev/null +++ b/submissions/Starlapse/popup.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + +
+
STARLAPSE
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + +
+ +
+ Ready to consume light... +
+ + +
+ + + + \ No newline at end of file diff --git a/submissions/Starlapse/popup.js b/submissions/Starlapse/popup.js new file mode 100644 index 00000000..41356f88 --- /dev/null +++ b/submissions/Starlapse/popup.js @@ -0,0 +1,99 @@ +class BlackHoleController { + constructor() { + this.isActive = false; + this.activateBtn = document.getElementById('activate-btn'); + this.deactivateBtn = document.getElementById('deactivate-btn'); + this.status = document.getElementById('status'); + this.blackHole = document.querySelector('.black-hole'); + + this.init(); + } + + init() { + this.activateBtn.addEventListener('click', () => this.activateBlackHole()); + this.deactivateBtn.addEventListener('click', () => this.deactivateBlackHole()); + + this.checkCurrentState(); + } + + async checkCurrentState() { + try { + const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); + const result = await chrome.tabs.sendMessage(tab.id, { action: 'checkState' }); + + if (result && result.isActive) { + this.showActiveState(); + } + } catch (error) { + console.log('Could not check state:', error); + } + } + + async activateBlackHole() { + this.status.textContent = 'Initializing gravitational field...'; + this.blackHole.classList.add('active'); + this.activateBtn.classList.add('active'); + + await this.sleep(1000); + + this.status.textContent = 'Sucking in photons...'; + await this.sleep(1000); + + this.status.textContent = 'Applying dark matter transformation...'; + + try { + const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); + await chrome.tabs.sendMessage(tab.id, { action: 'activateDarkMode' }); + + await this.sleep(1500); + + this.showActiveState(); + this.status.textContent = 'Reality successfully consumed! 🌑'; + + } catch (error) { + this.status.textContent = 'Error: Black hole collapsed! Please reload the tab... 💥'; + this.blackHole.classList.remove('active'); + this.activateBtn.classList.remove('active'); + } + } + + async deactivateBlackHole() { + this.status.textContent = 'Reversing spacetime...'; + + try { + const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); + await chrome.tabs.sendMessage(tab.id, { action: 'deactivateDarkMode' }); + + await this.sleep(1000); + + this.showInactiveState(); + this.status.textContent = 'Reality restored! ✨'; + + } catch (error) { + this.status.textContent = 'Error restoring reality! 🌪️'; + } + } + + showActiveState() { + this.isActive = true; + this.activateBtn.style.display = 'none'; + this.deactivateBtn.style.display = 'inline-block'; + this.blackHole.classList.add('active'); + } + + showInactiveState() { + this.isActive = false; + this.activateBtn.style.display = 'inline-block'; + this.deactivateBtn.style.display = 'none'; + this.blackHole.classList.remove('active'); + this.activateBtn.classList.remove('active'); + } + + sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } +} + +document.addEventListener('DOMContentLoaded', () => { + new BlackHoleController(); +}); \ No newline at end of file From 935a3fec45651b35d163ad1f4e18667d0964bb71 Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sun, 15 Jun 2025 23:44:42 +0530 Subject: [PATCH 03/12] Delete submissions/Starlapse/test --- submissions/Starlapse/test | 1 - 1 file changed, 1 deletion(-) delete mode 100644 submissions/Starlapse/test diff --git a/submissions/Starlapse/test b/submissions/Starlapse/test deleted file mode 100644 index 83f9fcff..00000000 --- a/submissions/Starlapse/test +++ /dev/null @@ -1 +0,0 @@ -txt From 2c3544c2ff38a9b6d8d1e1656eaba067d3e34b47 Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sun, 15 Jun 2025 23:45:11 +0530 Subject: [PATCH 04/12] Create test --- submissions/Starlapse/icons/test | 1 + 1 file changed, 1 insertion(+) create mode 100644 submissions/Starlapse/icons/test diff --git a/submissions/Starlapse/icons/test b/submissions/Starlapse/icons/test new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/submissions/Starlapse/icons/test @@ -0,0 +1 @@ + From ffb1c282e875989f675a4c13f32890ab2e04e5da Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sun, 15 Jun 2025 23:45:47 +0530 Subject: [PATCH 05/12] Added icons --- submissions/Starlapse/icons/icon128.png | Bin 0 -> 19242 bytes submissions/Starlapse/icons/icon16.png | Bin 0 -> 847 bytes submissions/Starlapse/icons/icon48.png | Bin 0 -> 4072 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 submissions/Starlapse/icons/icon128.png create mode 100644 submissions/Starlapse/icons/icon16.png create mode 100644 submissions/Starlapse/icons/icon48.png diff --git a/submissions/Starlapse/icons/icon128.png b/submissions/Starlapse/icons/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..c630afbc37f226496935dda7271dfe6168b52444 GIT binary patch literal 19242 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

RLzwB@ClsK_lj8&y`cHo`#y zdXt`!G?EyUIgY{M%ft&boXJr^?(5`vz2K`>K*M9oA2Sl&QnkS~E9WE6PU3`&YoaWI z%DchAAQ5n&po9`gj4P46%whHzOA_4=0T*B`RLlviLdgXu+$s8P?+kj9ts7SZOf6hH z0_?3@xc3gD?l7Dk1TF$-wQG=vNNVlV&_b4KaOU9WpDu;IW1n3L9E=X-p^gE1tP=c^ zdU9PjNoZrUPP|I+et{u@Il+3f!}`q*`!{5>IrY&+`g;H3yKj(Ft0K*c{VevK?42G} zIX&*Ka@?KZT*styH@g$;dK%bi+eXB9-NIzYiYf0cnm7xL!l9CI0#h$Io`1l*gr4u0 zp_NFa$kR*>GDrRt(dagMZ!RTl%$JBN3ycZj8zn$kF+9a3U&X|U{!B*zeSq{_qxa9x zqfa)CQm~Nx>5L?W>|F!{Ju$@_nS%zD=plzZRni&xNrWhRk~=^Bi8KEKMi@3EmyJVW zFna(>VmH1y#%j$XcZ4I^Y>&#(_A9#GzTO?7Bf_gvb~iq#uivxrCeZ2eA~(-3a^nL< zPw(jwfBr`4#_tYbL~rkT-t-Dx4(8%PsjF594lVSOhpvX65|01y&&Ni@f@wRc_w*71@8_MmPLkjqq92k5M=facJZ~IkIUyZYj+0is7Xa z{tL0)B_Y4k7`i>;6Cf@C+zR@fM~n=R25OPpi4+(-HwMSC@=6d$=Ofx8<8De$TmqY{ z!5oAL0Fb2vR-fTB@Sc(_`UCtfO(!RD2Qr3Fn&`VU!L#E%;kQy|XBw|zczW=hfHRyU zh9wO&3Dil{P^?jaxd`SAy9?LKFZ-LMkTK>@k56Qp#Z~udwe(<%jKi+jrM1Bv= zJ|Y`Lt*FkyD3RdWVf4o3P@TTtgo1(=GQOb37xhE?=Pi=Z5$RhCvqz)~zW`D3Q^2oi z$dwR^8s-O3(E)&t#Ov=32Z%#6^tfMUpNR4n5v$RNNHmIl&3$Vn+qaKgoiB3mC_YqC z{*;(e6W0uWTqeLDr*jq_`+>v4V3`84Fo?S-7dEy4l{)^GC1Br7!(i`G^1G zWAab`>t7|iULkBwk9uyfa(3ae9USc;h2%AE1LdrWXxG3}*91HS%_$c&>>KEnu}DTF9H$Xs;_E5LXy@gNcS_ojR{+TZP0pBS6hKkv>^M&z6J*r25L3!?b+VY7 zxL}C6RR!B__@hlHgl%7zm(R=c>N)v;KL4V=eqPHze&D~*fB(xq*sFvisi$2p*l)F3 z2Wag@XoDmzTn9S`-(d_HvHU83n-06dDxNZ+&2gqN^J1{#jMHU+8?!Y&g3zHbB4eS<=dLrs9sCil z#n=f~B=s#Z!I0kp3>xf-tB%G3)jkbl!CVE5Ufzq1My|_g*=}z30`b(zdcD~do>$My z=1a#;NWba&Yw~T^e$k`jU;k$}9W{Kf8t``us3C>SB)$Xz!Sp-4!J>MchO^}o9JDM8(kT6$#HuXMw{wq-X)1aPN7!{(*D)>d{vA$Gz>`6`^XX(7K@2U{W?FLR*?GP<%Kd zf=JL>i0fV&F*We|`*cC91f#9Hs;pkE}5(dkt=bPa-<1;l2KL3b-ct(0I6R%hjIcuYsP`3DN)pW69DTyN2o!~3mjqJ~Fd}K&Z3qFZekQ!X|jUmGR6A40eu(R}GO{1 z@5{O4t(-ePQgecvo2BfIeCBdb3m7ic8XUp6ZYLT(g3QCeq2pN^Q#(+C+^8@S22bD! z$|&&JKSKv;U(ic#$r%cJw1bLHL`;U^(oI<7MoBQeOjs}jJ+&0 zx_2TKhBt%k-AE$4e(`!9FWvB#&oQ%;m2Cgl9YD{W?t3aYmHS`6p|6_^jMXo@+}y+* zVcWsxxJ$vWZ@O62Rl(EErvLS(kr!CK#I)WV#7DmuPF#G+E086{RG-v>k&r4}Z zE3ld;xOS-|`K2+U!|z&P4c?w(*c!&=*K`hitb|kG7O@b9Rya*nnHHm#vDR>`C}JVE z*Eo!eVK&reH7Kr_!rq+##$Wu_9>*C)9Qlw~m|l5Ug@^B(NDxP8M5PQ8AFXyJ4j+7?>&;BjSvl^Xj9z zAk$7xpgAC*N3s$_h$-S-eTgcAfEwx}31f?Nz_@K$1=N$?B5x;-Q}ic|N{;1RuzvJ> zTAo>z@idcY< z@!ots^0shM>ohu}8gJz~!LBfZ?Kf%$D}RAReM)$V-y;Hm_`p%&NM9JfVx89B*RA0M zd!z#Yn^lWQ0Tu(z#6O_G@o9I0)1BVviScwSa_ieOg8kxp8`ZLofO z)k{Atp&9T`1c3i6!|;5)cSQ9?bAT5YB}f#^=nK-e#Bh9}supo0Etw&V1*1mUSuzcv zRwap}p>=Qp8Xakd`U4hd!TJO?sDou*jQ`F_Dk~U(haYB)a`h_4kavs zFaXjd|E8OLE61JrAMf_%e7`cMyPfQA`pCHuE=u$wH+DU{u{OOmXoG@w{ob=fz^S#$h>FgUPUWDNfvrTh#%;bqNth>FMz-*~x9HS9Q+jEBsUGdp z>;Cfcz323c=a1$3J?G@*^XJN!&L8QQdl~qpUIn~%%yRIkNB+@PI~nW5g9vw~$8C1#f55?1PPG0`wCDN}+58xNzBt0(iX zA-HCS#dj_7ts$v|jEV)IUjE{L`CT8{5YDgly)F#H@{(!xr^}oMW=E)bzr{d<5(N!^ zAh0YI2mx}^!1zm$L5!X~Bzy`;TtRMP=qoNB2o^c%yjEbkPMa!^_BSV7g#NHLC|naR-$EmWr2& z;ZwWkV$%MturSDqEX`#&TwrQ6mIiEcHijL>XMw`t!XF-iOpBEm%AO_Hz%Nn&rU2E1 zJD^A2GP8!xt1|6T1Oe! z+6(Cbecu;jupUWYz4T! zPpyPh5UVj`uzdW|6IPy;n8@!OpcQh40Dc|JKR}TPAUI{4*I|*XN1d76$;PGi09>n_RFRa3h5YWPIe6L=yh1j=Bf7&+D5OY11xQKwf9NI6Hejf zsk3nh3XEu%;UtB60iA*?1d4}n4F`%}6~*rcg6(6M!YVc!U4VJER$zEyunJqX{zV;A z%V^N}RfRM7fJ1sU5g>@4Bo7EE$J7uCKU#Wu=cI7E=}yp*WY>+q?#Cyy{ql6DdX`{pt8ofoKZ3 z#EYf?1Bgm;=;^>(l#UD1g0hb2zC94&8!!LElVALiZ@<=E-~rYh)b%M2l`;Mgf{Y7C zA?8rQ8>JnjMOMrs(^WHTo zaXYh^F;KzGzHsCI|MglrfTKWNpXo612}ZYMo-Q(pJjnlE)&ZjhU`@Y^k}&FeJFQBQ zlSK>HVM%Xh9EKOOuf*703-u@`b<7%RaFJMf2}^r24b*7C29^c!o7@1NDx40vpuBVA zo6^5E!x;iB&BY!|3v1U2TC7OQiK&(fn7OjfD2oJ6kL7!9-R#A`4iZTJw6*%;B3xFvCI*XEYAv?B!qob!SGgPH<<53 zkqm!?@KcccxqLi1Lbw6P_8h(p)3sM^AQ`ySFF|o&oZ(}3`fSidIkwcBym9LG?tEY z5u{yz?f(Dm>Mag%{}V4<|Brv@o1g7({wQIa!vPwHfkllTm#n3vTewfay&HZ_;i|Am zLEuF+Yh0)@MSqkt;;S&^>n+lN)2tH4$Fw8ntKbD;{3!YS{|xyULl-2lFvU=*_W4H5 z=X>;YVAKAZsf5LpLUV?F|KLsk+uEd54`nCLM%IxKSBbjVFMVBr#yi324AZ#$zD0el zv5cKJoT{e?}HW=pGh6Q>yx zTU8(%CczbD8Nts50g28Fs$+*27mNg}#Z|19wnm-LK9DcVZGAo?Z!6XWsGvB`x43Mb zD`kzpT!Pv9K607fP}plI-UnzLfYO2NnX?z_V0-10zw+gNr2AsHxKFhnMKuTVauH{V z$)k9$MzgTxa9?WLg+*6HHTi1t0?Ceqi^C(Vx4q-OB6R#Ux@fxI~w*VxD2YkbCbH_Lh$DK|r$*svIm= zrzLDrLoo#aanW*?Sajs%#_@0Z<#Hzka1^NR)BVam8PJb4y5n+2dsd>gLP#y5qx0*p zjvsSkMXDYJ8o6GAe$n`$2b2~lULwbPkBfSMMlWC(KdOez^(CQxc7_ADAIK0?sjzHA zDi9Zj@OziN``2vYk8aeSysezx1P6c$?QNO1rXP2P=T{aQg?*eQ{YrD#+v*#{j2XA(tyGB+ED*EIa_5!pPf8@3mZTe zE8RlUfgBz`JhN~*Y{gHb*h{No6&zCyeSE)t5To0FXs=+I8mw}{FKH=tZ7zn|v8>?X z?79?Kr9 zI3e}d%n|oaObd_eJ&8?}udB7Gy}4CF!1k@F>x1TG&ABZufd=l&FTS(p=g425H}W$>(Ui;ERkSj4WJeaKeJSm#43m3UQgOB z3SvyY=?y1;j_I#D`Lpq42JM9qUjXqGqI}gkh($=Nu?CxG<7~Vl!m;L|?yua=*7ddy z@VzI`_fxo9LQX*59a?3ob& zbmac{3Ih$oA%F}bk;X_%^Nq@5WS0+9^lEdSkH;2$;^m=WMfV<+dmlkuJTfinJSx>A z+oRr*Vjuyd*pXw~(1vEEQ9OFNukUBw$$>B#@erwqDh&!I9y9VCtqe8T-)MSrWBakI zx3l#fe>bozSyy_U`Y5G@0C6y;#yxIcuDozCLz+gkBWSF~{*!udm2`0mVlMR9owe~_Zf)y^4! zq$QWS?f84T>f5JtJL_`y=wj zd4~N6-^ul(k9_t{cD^G5_=}5NUiWe}=$*!Ir;C!|7fz5A=87^!x^Qd@okE8pBTYun zfA9eso|*tHh{}P#q{7b~CwXhc597`iK@h*Q`)TlmtOh*)d+w(bR3GY%AHA`QyOI>z zILpQSy7_vMV5gpMJ^D3NTEvHU>?BtBh3DnU)rCWZB|LlurrOL058^#~fqcHWg6IWD z1KIK;`d^D47Y2~5a^Yk`OB9WjGmR za#sn?GC0<0wJYiM=Qp4DTK279YlrhsoSgLIU1p!1))9=v)nWL9 z(r$2rbOsHcK;9i4KrD`3cxRrDv;#!G2y(MUy^nlv!OS%Trlo=Lb4Xeq2Z(}Z z6!?NImfi52dY>X0zn@#w|A7pumtQ*nTd&F6bpYFrHtnf?>=Vhx4YhqNs!!$52dIqE zJCd9|s(>8w9BqZ1_t2R5G#mn{GSf;+>Nuc%v~t71WrF>I6o;kXTmq)Q6w=B-AueN$ zF#=@U$p-|pG3=tlAj-u@aPbQXnx_kveZF6iwSem&bSiKbZAlER#AGQKPNpDtUh4Vi zB}*v@`4oNP$HDr(FYW8Or{oQ6Z^!}46DQX@+4*RRN+coFu(_VF;b$6^8wIFJ7zi_$1xOt z&wl+aC-;Bsy4)=XuxT>zPE7#Guj}W=p;e3l&xc5vos=pVZ@Hg zfnpI#xq%8y0We&QKEeoo?2D4q*nvlSMt;D)<}Kk~^Ldp||FduWo~!Z(w>Rtnwry_g zuJrS`cJOna*`<$cN+{P+@@c4i{wi2KtAIdS2^|1kGFAdDEsGNvq)yJ%__O8p%&p|> zXX!#AXCe6u401z|kzjC!Xe?8Jc`JZ?uMRL&QaG5Tq)tHN+T)SiTe9?U3gZVrj+PJ~ z`T(7Y?`Z-13Iz4ZIcgvS5J(pyl_`ENeAD+nA#Y-PQw~rrpIq;t^Jq8I%O&Zpu&!mk zUkitJQSD;n(^aN2QZU9ZiJ|1W{;*e&zuOx0EDC7m`rGXrug~uZzEDag1Cf9sXh9fT zOi@Tu9wq`14XjV+h81^$kc}%#Mf@(LmOuoSjNl2b7z8n7N>D6|@2O`6@ndAu;1rUG zM$ruFlJG0r&E}H4$?Z)!fNkf0;9s2dtM!CT;*B0k!7>|_rYG8p$W-GOneu)cyka=k zl(S);l8+A|e=hG1k>YmIAMYh`RPIxf-7r7QX@K)uFr!T)>Lr#fz_2cI1T1e*CSylE z&lJ(Tn;0o$D2u@b_+D}1m#Sav>!qr3hZW1#ty zQ+R47gOWqHL?Vd1&CRAzjQ5kF4}{|gn?5oPO;*KB)oCDTF@sHoK4F#g5DA$)1NTZEye>?vS;K}yC!AO| zF8WXc2mIfL?9GDDB<94c2h{+!v*;oD{5WM;2bXLn zHT*KH2{Tb5N)9m+D3EbeDWf5WnCCUhfOxKc0)>;)w+%Yw(Hi4dc#HJ{xkj>Degfv(tV-7)K>= zrfQh_m*HTsLXMwbh(jzDOYj2z=qFM@8Wpd{k9KGN7aCJWB>)EzAc$mT;XkCikv39? z;I~$Q7S=q{Yp1Wi{xNwQ+uL%0a`}bpo6>$`zjrN#n!%%DXjo43%7$((oW%X6j-PKT z!)Tg^jno{jG^}@s66N6W*>q9Lt$acx2C2C!oNzxY95ilWB>>~gfk@=9tr59lG&iJr z+Hldxb2_RA>5Prf@Ji1w71Zpg8D1W`Yymox9UAp?=%WtUOzti@%9KbK!<$rOq z)T3S*$Vq8(&@9pjf3{o@qygW9@VWJ~Ogxk0XLvu%?UIV%EdI=qJsAJ3C$2j3zd`_* z5J2V>#P0yHB4)lrE@oPgc@T+)SX7|ep=4}rYAYj(v2P2dP~sNGmXMA)PQfb;u29lW zdRySq&;0Tqye4mRd)p3RTStPExy#l5kC-v&&c2ftXoG@2xjMt z%>5qinHJ)&lpzWU;aivvnuJ`;pA3{Fk5MX0l!`n?i@rkRQZolb(PW?oUhmHF!gh0f z=}+H9;+R%*UV^pl^J zcX)fp9l*Bo=}rzm{rLy`)qD!ZpC^*sLgLQ6d5ZeO=OoL(+YJi~=Lkm{?~&VlR^jZR zQl?5^@Bk?z@B7gU5nvXG4oF|2s#n_RDyCv6lZ-q{Jn94T)QvCehkyUC`Q$Zu7q)kl z1Ke)Y@A>c}UB~)N|LzwZ5e{>CoYNu9ALjmYn@T})e;jALb}LUf;25n|&)b&gE%)wv zKK5H%#AzWHusrUoe`23;-&O@J-~t85*;hXA%NOEU&If$eT3a`)_zzL9vA<;wn=;;o zw4IdSa`}JxV^`%}+};%gn78srzwo>)yAOBcUmj0R&^?XTnaQ{u%D90X!%+gb2L~8j z;!Y_jwh(q)#9Mj%%w3KEFA? z`RI55h97@d;Qn^o*VO@H)8F}RAL%!j`@M^DShn51y@!O%t< zgTKQv?}GaQ=QLC=`PK>Q_X~`>uQSA#DE*2XKhi~wk}pa@-{<+=Qm%Z@|M{n`%GY^& zPdGqqa0FYNLLQW}_4{nV!-zgxIz|f7J37I{DQxG}mUk&wm?4k=k&ZfjKi&5lKDYvr zAo937PCqIfDIy=!Bk4TP??tZsf4})NSLHpjy{8-?HvR7Z{!-7BT|m-D{E0b-pN;(6 z-Ip^xg0m=s{rs_pSW{@QWstdjkUCqdXLBg%n3EXP?}U*~$B0`vitTGZ`vk-P=8yfk ztMVS(-jfaxn{$L^?TAn=F+JR}i-?rl+{!JC|8_hu9DotOBV2Fw&(3t--`aR+q;Zf#U%BYe5ff}tY*H5cHt9AR?|LM2?g{$&D*xok| zFmFr|#upy$=6>iF#_v1bMiYqVr{|mlFtP#vto;irg66+I!`IyjDhZ&odb_>W^Zqm4 zL2LoW7ao1$nYT4U=iT1kmkuy*o+dWChox*Dk=D9Hs5!)ivBMpjL-BGzH}ZY_=+nse zfPX}Lsju`3;H2+&wG+D+Z^+Tr@A!ddPUL;Oz3(01cANf=Z+*CHtrt4|wqHTH=&GYT zh5am!JI4dLZ}Fc44k*8dg&XThH~L9Of$QrcCwp10$!2}w!OK@qL}yp2Zq}fp0XAhu^$m&h)r=Oa3Y&q1 z&M0zRR>%p0aS&A4RwlpP)51cgTe7-EsT{$4oua*gZIl!xE^BWYY)gI@7Gufa+!N`r zqso=1(>`kOL1PgLD$FI5Re-a%sBy2M%Mq%fqIw+Aj#>(32YntWssJQoBDlB>y`Y|p zjimU}G#;Pf&9x__p1udaZcgE!cP<#*P|Q3Kt4xxX+K`}4Cis^{?15zmfjtT7QELlE z&tYrv4gK=rUHI+ochUPHD63dO!Qv{ym_`6e4a)z{7_=#+10_4mR13Q2TxJExMGp5K zpK|>Kk2lxhVr>X9<{)iqM_zDLQWrXgud_(bT> z&wiFx9Wt0iqk%&rM)_>kGoH$E)#4lTir$aHk>+y{B<)VV<|(RFa=gXZALad%nX2`+23m|$9Q{eP?t&;ME-{P1UKe!PGG+v6Ag Z{|88kbK)b)b5Q^Q002ovPDHLkV1gQJf}a2Y literal 0 HcmV?d00001 diff --git a/submissions/Starlapse/icons/icon48.png b/submissions/Starlapse/icons/icon48.png new file mode 100644 index 0000000000000000000000000000000000000000..ee3dfdd94a3dc95faaf8cacb84ad03e6f39e1b67 GIT binary patch literal 4072 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 Date: Sun, 15 Jun 2025 23:47:12 +0530 Subject: [PATCH 06/12] Delete submissions/Starlapse/icons/test --- submissions/Starlapse/icons/test | 1 - 1 file changed, 1 deletion(-) delete mode 100644 submissions/Starlapse/icons/test diff --git a/submissions/Starlapse/icons/test b/submissions/Starlapse/icons/test deleted file mode 100644 index 8b137891..00000000 --- a/submissions/Starlapse/icons/test +++ /dev/null @@ -1 +0,0 @@ - From b580fdfb41f8127d72bacdd8f4bcde9d85f6d469 Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sat, 21 Jun 2025 02:25:27 +0530 Subject: [PATCH 07/12] Updated background.js for STARLAPSE V2 --- submissions/Starlapse/background.js | 39 ++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/submissions/Starlapse/background.js b/submissions/Starlapse/background.js index 235489db..9b246587 100644 --- a/submissions/Starlapse/background.js +++ b/submissions/Starlapse/background.js @@ -1,20 +1,47 @@ chrome.runtime.onInstalled.addListener(() => { - console.log('Starlapse extension installed! 🌌'); + console.log('🌌 Starlapse v2.0 - Interstellar Edition has been installed!'); + + chrome.storage.local.set({ + firstLaunch: true, + totalActivations: 0 + }); + + if (chrome.notifications) { + chrome.notifications.create({ + type: 'basic', + iconUrl: 'icons/icon48.png', + title: 'Starlapse Interstellar Edition! 🌌', + message: 'Experience reading like never before with cinematic galaxy themes!' + }); + } }); chrome.action.onClicked.addListener(async (tab) => { - console.log('Black hole portal opened!'); + console.log('🚀 Galactic portal accessed from:', tab.url); + + const data = await chrome.storage.local.get(['totalActivations']); + await chrome.storage.local.set({ totalActivations: (data.totalActivations || 0) + 1 }); }); chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { if (changeInfo.status === 'complete' && tab.url) { - console.log('Tab updated, checking for lingering dark matter...'); + console.log('🔍 Scanning for cosmic compatibility:', tab.url); } }); chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { - if (request.action === 'backgroundTask') { - console.log('Background task received:', request); + if (request.action === 'cosmicTelemetry') { + console.log('📊 Cosmic telemetry received:', request.data); sendResponse({ success: true }); } -}); \ No newline at end of file +}); + +chrome.runtime.onUpdateAvailable.addListener(() => { + console.log('🔄 Cosmic update available! Enhanced galactic features incoming!'); +}); + +chrome.runtime.onStartup.addListener(async () => { + const data = await chrome.storage.local.get(['totalLaunches']); + await chrome.storage.local.set({ totalLaunches: (data.totalLaunches || 0) + 1 }); + console.log('🌟 Cosmic journey continues! Launch #' + ((data.totalLaunches || 0) + 1)); +}); From 5185befe175bc1dc84b53dfed07c26bf6bcbc66c Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sat, 21 Jun 2025 02:26:22 +0530 Subject: [PATCH 08/12] Update content.js for STARLAPSE V2 its the biggest change! --- submissions/Starlapse/content.js | 2116 ++++++++++++++++++++++++++++-- 1 file changed, 2017 insertions(+), 99 deletions(-) diff --git a/submissions/Starlapse/content.js b/submissions/Starlapse/content.js index c7cf7890..d8aa0947 100644 --- a/submissions/Starlapse/content.js +++ b/submissions/Starlapse/content.js @@ -1,160 +1,2078 @@ -class DarkModeTransformer { +class GalacticReader { constructor() { this.isActive = false; - this.darkModeId = 'black-hole-dark-mode'; - this.originalStyles = new Map(); + this.readerModeId = 'galactic-reader-mode'; + this.readingStartTime = null; + this.currentGalaxy = 'andromeda'; + this.readingProgress = 0; + this.animationFrameId = null; + this.starField = []; + this.quantumParticles = []; + this.stopwatchInterval = null; + this.focusModeActive = false; chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { - if (request.action === 'activateDarkMode') { - this.activateDarkMode(); + if (request.action === 'activateGalacticMode') { + this.activateGalacticReader(); sendResponse({ success: true }); - } else if (request.action === 'deactivateDarkMode') { - this.deactivateDarkMode(); + } else if (request.action === 'deactivateGalacticMode') { + this.deactivateGalacticReader(); sendResponse({ success: true }); } else if (request.action === 'checkState') { sendResponse({ isActive: this.isActive }); + } else if (request.action === 'changeGalaxy') { + this.changeGalaxy(request.galaxy); + sendResponse({ success: true }); + } else if (request.action === 'triggerCosmicEvent') { + this.triggerCosmicEvent(request.event); + sendResponse({ success: true }); + } + }); + + this.checkPersistentMode(); + } + + async checkPersistentMode() { + try { + const hostname = window.location.hostname; + const data = await chrome.storage.local.get([`galactic_${hostname}`]); + if (data[`galactic_${hostname}`]) { + setTimeout(() => this.activateGalacticReader(), 1000); + } + } catch (error) { + console.log('Could not check persistent mode:', error); + } + } + + async activateGalacticReader() { + if (this.isActive) return; + + this.isActive = true; + this.readingStartTime = Date.now(); + + const hostname = window.location.hostname; + try { + await chrome.storage.local.set({ [`galactic_${hostname}`]: true }); + } catch (error) { + console.log('Could not save persistent state:', error); + } + + this.createInterstellarGalacticReader(); + this.initializeInterstellarBackground(); + this.startAnimationLoop(); + this.setupReadingProgress(); + this.initializeQuantumEffects(); + this.startStopwatch(); + } + + async deactivateGalacticReader() { + if (!this.isActive) return; + + this.isActive = false; + + const hostname = window.location.hostname; + try { + await chrome.storage.local.remove(`galactic_${hostname}`); + } catch (error) { + console.log('Could not remove persistent state:', error); + } + + this.removeGalacticReader(); + this.stopAnimationLoop(); + this.stopStopwatch(); + } + + createInterstellarGalacticReader() { + const existing = document.getElementById(this.readerModeId); + if (existing) existing.remove(); + + const content = this.extractMainContent(); + + const readerOverlay = document.createElement('div'); + readerOverlay.id = this.readerModeId; + readerOverlay.innerHTML = ` +

+ +
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+ + +
+ +
+
+ ${this.getGalaxyName()} +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ 0% +
+ +
+
+ + + + 00:00 +
+ + +
+
+ + +
+
+ ${content} +
+
+
+ + +
+
+
+ `; + + const style = document.createElement('style'); + style.textContent = ` + #${this.readerModeId} { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 999999; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; + animation: interstellar-entrance 2.5s cubic-bezier(0.25, 0.46, 0.45, 0.94); + overflow: hidden; + } + + @keyframes interstellar-entrance { + 0% { + opacity: 0; + transform: scale(0.8) perspective(1000px) rotateX(10deg); + filter: blur(20px); + } + 50% { + opacity: 0.7; + transform: scale(0.95) perspective(1000px) rotateX(5deg); + filter: blur(10px); + } + 100% { + opacity: 1; + transform: scale(1) perspective(1000px) rotateX(0deg); + filter: blur(0); + } + } + + .galactic-universe-interstellar { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); + } + + /* Enhanced Interstellar Background System */ + .interstellar-backdrop { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; + transition: opacity 0.6s ease; + } + + .deep-space-void { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: + radial-gradient(ellipse at 30% 20%, rgba(0, 0, 0, 1) 0%, rgba(5, 5, 15, 0.9) 40%, rgba(10, 10, 20, 0.8) 100%), + radial-gradient(ellipse at 70% 80%, rgba(0, 0, 0, 1) 0%, rgba(8, 5, 20, 0.9) 50%, rgba(15, 10, 25, 0.7) 100%); + animation: void-pulse 25s ease-in-out infinite alternate; + } + + @keyframes void-pulse { + 0% { transform: scale(1) rotate(0deg); opacity: 0.9; } + 100% { transform: scale(1.03) rotate(1deg); opacity: 1; } + } + + .galaxy-spiral-arms { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: + conic-gradient(from 0deg at 80% 20%, + transparent 0deg, + rgba(255, 140, 0, 0.08) 60deg, + rgba(255, 100, 0, 0.12) 120deg, + rgba(200, 80, 20, 0.06) 180deg, + transparent 240deg), + conic-gradient(from 180deg at 20% 80%, + transparent 0deg, + rgba(100, 50, 200, 0.06) 45deg, + rgba(138, 43, 226, 0.1) 90deg, + rgba(75, 25, 150, 0.04) 135deg, + transparent 180deg); + animation: spiral-rotation 60s linear infinite; + opacity: 0.7; + } + + @keyframes spiral-rotation { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + + .stellar-nursery { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: + radial-gradient(ellipse 800px 300px at 10% 30%, rgba(100, 50, 200, 0.15) 0%, transparent 70%), + radial-gradient(ellipse 600px 400px at 90% 70%, rgba(50, 150, 200, 0.12) 0%, transparent 60%), + radial-gradient(ellipse 400px 600px at 50% 90%, rgba(200, 100, 50, 0.08) 0%, transparent 50%), + radial-gradient(ellipse 500px 200px at 70% 20%, rgba(255, 100, 150, 0.06) 0%, transparent 40%); + animation: stellar-flow 35s ease-in-out infinite alternate; + } + + @keyframes stellar-flow { + 0% { + transform: translateX(-30px) translateY(-20px) rotate(-1deg); + opacity: 0.8; + } + 100% { + transform: translateX(30px) translateY(20px) rotate(1deg); + opacity: 1; + } + } + + .cosmic-radiation { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: + radial-gradient(1px 1px at 25px 35px, rgba(255,255,255,0.9) 100%, transparent 0), + radial-gradient(1px 1px at 85px 75px, rgba(255,255,255,0.7) 100%, transparent 0), + radial-gradient(1px 1px at 145px 45px, rgba(255,255,255,0.8) 100%, transparent 0), + radial-gradient(1px 1px at 195px 85px, rgba(255,255,255,0.6) 100%, transparent 0), + radial-gradient(0.5px 0.5px at 65px 125px, rgba(200,200,255,0.8) 100%, transparent 0), + radial-gradient(0.5px 0.5px at 165px 15px, rgba(255,200,200,0.7) 100%, transparent 0); + background-repeat: repeat; + background-size: 220px 140px; + animation: radiation-drift 60s linear infinite; + opacity: 0.5; + } + + @keyframes radiation-drift { + 0% { transform: translateX(0) translateY(0); } + 100% { transform: translateX(-220px) translateY(-140px); } + } + + .gravitational-waves { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: + radial-gradient(circle at 20% 30%, rgba(255, 255, 255, 0.03) 0%, transparent 40%), + radial-gradient(circle at 80% 70%, rgba(255, 255, 255, 0.025) 0%, transparent 50%), + radial-gradient(circle at 50% 50%, rgba(200, 150, 255, 0.02) 0%, transparent 60%); + animation: gravitational-ripple 20s ease-in-out infinite; + } + + @keyframes gravitational-ripple { + 0%, 100% { + transform: scale(1); + opacity: 0.4; + } + 50% { + transform: scale(1.05); + opacity: 0.7; + } + } + + .quantum-foam { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: + radial-gradient(1px 1px at 15% 25%, rgba(150, 255, 150, 0.3) 0%, transparent 50%), + radial-gradient(1px 1px at 85% 75%, rgba(255, 150, 255, 0.3) 0%, transparent 50%), + radial-gradient(1px 1px at 45% 85%, rgba(150, 150, 255, 0.3) 0%, transparent 50%); + animation: quantum-fluctuation 8s ease-in-out infinite; + opacity: 0.2; + } + + @keyframes quantum-fluctuation { + 0%, 100% { opacity: 0.2; transform: scale(1); } + 50% { opacity: 0.4; transform: scale(1.02); } + } + + .dark-matter-web { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: + linear-gradient(45deg, transparent 48%, rgba(80, 80, 120, 0.1) 49%, rgba(80, 80, 120, 0.1) 51%, transparent 52%), + linear-gradient(-45deg, transparent 48%, rgba(120, 80, 80, 0.1) 49%, rgba(120, 80, 80, 0.1) 51%, transparent 52%); + background-size: 200px 200px; + animation: web-drift 45s linear infinite; + opacity: 0.3; + } + + @keyframes web-drift { + 0% { transform: translateX(0) translateY(0); } + 100% { transform: translateX(-200px) translateY(-200px); } + } + + /* Enhanced Cinematic Black Hole System */ + .interstellar-black-hole { + position: absolute; + top: 15%; + right: 8%; + width: 250px; + height: 250px; + opacity: 0.4; + animation: black-hole-system-rotation 120s linear infinite; + } + + @keyframes black-hole-system-rotation { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + + .event-horizon-ring { + position: absolute; + top: 50%; + left: 50%; + width: 70px; + height: 70px; + transform: translate(-50%, -50%); + background: radial-gradient(circle, transparent 30%, rgba(0, 0, 0, 1) 35%, rgba(0, 0, 0, 0.8) 50%, transparent 55%); + border-radius: 50%; + box-shadow: + inset 0 0 40px rgba(0, 0, 0, 1), + 0 0 60px rgba(255, 140, 0, 0.3); + } + + .accretion-disk-main { + position: absolute; + top: 50%; + left: 50%; + width: 200px; + height: 200px; + transform: translate(-50%, -50%); + background: + conic-gradient(from 0deg, + transparent 0deg, + rgba(255, 140, 0, 0.4) 45deg, + rgba(255, 100, 0, 0.5) 90deg, + rgba(200, 80, 20, 0.3) 135deg, + rgba(150, 60, 0, 0.15) 180deg, + rgba(100, 40, 0, 0.08) 225deg, + rgba(80, 30, 0, 0.04) 270deg, + transparent 315deg); + border-radius: 50%; + animation: accretion-main-spin 15s linear infinite; + mask: radial-gradient(circle, transparent 35%, white 40%, white 80%, transparent 85%); + -webkit-mask: radial-gradient(circle, transparent 35%, white 40%, white 80%, transparent 85%); + } + + @keyframes accretion-main-spin { + 0% { transform: translate(-50%, -50%) rotate(0deg); } + 100% { transform: translate(-50%, -50%) rotate(360deg); } + } + + .photon-sphere { + position: absolute; + top: 50%; + left: 50%; + width: 140px; + height: 140px; + transform: translate(-50%, -50%); + border: 2px solid rgba(255, 255, 255, 0.15); + border-radius: 50%; + animation: photon-orbit 8s linear infinite; + } + + @keyframes photon-orbit { + 0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); } + 50% { transform: translate(-50%, -50%) rotate(180deg) scale(1.05); } + 100% { transform: translate(-50%, -50%) rotate(360deg) scale(1); } + } + + .relativistic-jets { + position: absolute; + top: 50%; + left: 50%; + width: 4px; + height: 300px; + transform: translate(-50%, -50%); + background: linear-gradient(0deg, + transparent 0%, + rgba(100, 150, 255, 0.3) 20%, + rgba(150, 200, 255, 0.5) 50%, + rgba(100, 150, 255, 0.3) 80%, + transparent 100%); + animation: jet-pulse 4s ease-in-out infinite; + } + + @keyframes jet-pulse { + 0%, 100% { opacity: 0.3; transform: translate(-50%, -50%) scaleY(1); } + 50% { opacity: 0.7; transform: translate(-50%, -50%) scaleY(1.2); } + } + + /* Enhanced Floating Celestial Bodies */ + .celestial-system { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + } + + .stellar-object { + position: absolute; + border-radius: 50%; + opacity: 0.7; + } + + .star-1 { + top: 20%; + left: 15%; + width: 10px; + height: 10px; + background: radial-gradient(circle, #ffffff 0%, rgba(255, 255, 255, 0.9) 40%, transparent 100%); + animation: stellar-twinkle 4s ease-in-out infinite, stellar-drift-1 30s ease-in-out infinite alternate; + box-shadow: 0 0 25px rgba(255, 255, 255, 0.5); + } + + .star-2 { + top: 70%; + left: 85%; + width: 8px; + height: 8px; + background: radial-gradient(circle, #ffeb3b 0%, rgba(255, 235, 59, 0.9) 40%, transparent 100%); + animation: stellar-twinkle 6s ease-in-out infinite, stellar-drift-2 25s ease-in-out infinite alternate; + box-shadow: 0 0 20px rgba(255, 235, 59, 0.5); + } + + .star-3 { + top: 40%; + left: 90%; + width: 6px; + height: 6px; + background: radial-gradient(circle, #ff6b6b 0%, rgba(255, 107, 107, 0.9) 40%, transparent 100%); + animation: stellar-twinkle 5s ease-in-out infinite, stellar-drift-3 35s ease-in-out infinite alternate; + box-shadow: 0 0 18px rgba(255, 107, 107, 0.5); + } + + .nebula-1 { + top: 40%; + left: 5%; + width: 50px; + height: 50px; + background: radial-gradient(ellipse, rgba(138, 43, 226, 0.4) 0%, rgba(138, 43, 226, 0.15) 60%, transparent 100%); + animation: nebula-pulse 12s ease-in-out infinite, nebula-drift 40s ease-in-out infinite alternate; + filter: blur(2px); + } + + .nebula-2 { + top: 80%; + left: 10%; + width: 60px; + height: 40px; + background: radial-gradient(ellipse, rgba(50, 150, 200, 0.3) 0%, rgba(50, 150, 200, 0.1) 60%, transparent 100%); + animation: nebula-pulse 15s ease-in-out infinite, nebula-drift-2 45s ease-in-out infinite alternate; + filter: blur(3px); + } + + .planet-1 { + top: 60%; + left: 20%; + width: 14px; + height: 14px; + background: linear-gradient(45deg, #4fc3f7, #29b6f6); + animation: planetary-orbit 45s linear infinite; + box-shadow: 0 0 12px rgba(79, 195, 247, 0.4); + } + + .planet-2 { + top: 80%; + left: 70%; + width: 12px; + height: 12px; + background: linear-gradient(45deg, #ff8a65, #ff7043); + animation: planetary-orbit 60s linear infinite reverse; + box-shadow: 0 0 10px rgba(255, 138, 101, 0.4); + } + + .comet-1 { + top: 30%; + left: 70%; + width: 6px; + height: 6px; + background: radial-gradient(circle, #ffffff, #e3f2fd); + animation: comet-trail 25s linear infinite; + box-shadow: 0 0 15px rgba(255, 255, 255, 0.6); + } + + .quasar-beam { + position: absolute; + top: 10%; + left: 80%; + width: 2px; + height: 100px; + background: linear-gradient(0deg, transparent, rgba(100, 255, 255, 0.6), transparent); + animation: quasar-pulse 8s ease-in-out infinite; + filter: blur(1px); + } + + @keyframes stellar-twinkle { + 0%, 100% { opacity: 0.7; transform: scale(1); } + 50% { opacity: 1; transform: scale(1.4); } + } + + @keyframes stellar-drift-1 { + 0% { transform: translateX(0) translateY(0); } + 100% { transform: translateX(25px) translateY(-15px); } + } + + @keyframes stellar-drift-2 { + 0% { transform: translateX(0) translateY(0); } + 100% { transform: translateX(-20px) translateY(20px); } + } + + @keyframes stellar-drift-3 { + 0% { transform: translateX(0) translateY(0); } + 100% { transform: translateX(-10px) translateY(-25px); } + } + + @keyframes nebula-pulse { + 0%, 100% { opacity: 0.7; transform: scale(1); } + 50% { opacity: 1; transform: scale(1.3); } + } + + @keyframes nebula-drift { + 0% { transform: translateX(0) translateY(0) rotate(0deg); } + 100% { transform: translateX(35px) translateY(-25px) rotate(15deg); } + } + + @keyframes nebula-drift-2 { + 0% { transform: translateX(0) translateY(0) rotate(0deg); } + 100% { transform: translateX(-25px) translateY(15px) rotate(-10deg); } + } + + @keyframes planetary-orbit { + 0% { transform: translateX(0) translateY(0) rotate(0deg); } + 25% { transform: translateX(35px) translateY(-20px) rotate(90deg); } + 50% { transform: translateX(0) translateY(-40px) rotate(180deg); } + 75% { transform: translateX(-35px) translateY(-20px) rotate(270deg); } + 100% { transform: translateX(0) translateY(0) rotate(360deg); } + } + + @keyframes comet-trail { + 0% { + transform: translateX(100px) translateY(-50px) rotate(45deg); + opacity: 0; + } + 10% { opacity: 1; } + 90% { opacity: 0.8; } + 100% { + transform: translateX(-400px) translateY(300px) rotate(45deg); + opacity: 0; + } + } + + @keyframes quasar-pulse { + 0%, 100% { opacity: 0.3; transform: scaleY(1); } + 50% { opacity: 0.8; transform: scaleY(1.5); } + } + + /* Professional Reading Interface */ + .reading-interface-interstellar { + position: relative; + width: 100%; + height: 100%; + z-index: 10; + } + + .reader-header-pro { + position: sticky; + top: 0; + left: 0; + right: 0; + height: 70px; + background: rgba(0, 0, 0, 0.9); + backdrop-filter: blur(30px); + border-bottom: 2px solid rgba(255, 255, 255, 0.1); + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 40px; + z-index: 20; + animation: header-slide-in 1s ease-out 0.5s both; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); + } + + @keyframes header-slide-in { + 0% { transform: translateY(-100%); opacity: 0; } + 100% { transform: translateY(0); opacity: 1; } + } + + .galaxy-selector-pro { + display: flex; + align-items: center; + gap: 20px; + } + + .galaxy-name-pro { + font-size: 16px; + font-weight: 700; + color: rgba(255, 255, 255, 0.95); + letter-spacing: 1px; + text-transform: uppercase; + text-shadow: 0 0 10px rgba(255, 255, 255, 0.3); + } + + .galaxy-dots-pro { + display: flex; + gap: 12px; + } + + .dot-pro { + width: 12px; + height: 12px; + border-radius: 50%; + background: rgba(255, 255, 255, 0.3); + cursor: pointer; + transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); + position: relative; + overflow: hidden; + } + + .dot-glow { + position: absolute; + top: -2px; + left: -2px; + right: -2px; + bottom: -2px; + background: inherit; + border-radius: 50%; + filter: blur(4px); + opacity: 0; + transition: opacity 0.4s ease; + } + + .dot-pro:hover { + background: rgba(255, 255, 255, 0.7); + transform: scale(1.4); + } + + .dot-pro:hover .dot-glow { + opacity: 0.8; + } + + .dot-pro.active { + transform: scale(1.3); + box-shadow: 0 0 20px rgba(255, 255, 255, 0.7); + } + + .dot-pro.active .dot-glow { + opacity: 1; + } + + .progress-system { + display: flex; + align-items: center; + gap: 18px; + flex: 1; + max-width: 300px; + margin: 0 40px; + } + + .progress-track-pro { + flex: 1; + height: 10px; + background: rgba(255, 255, 255, 0.1); + border-radius: 5px; + overflow: hidden; + position: relative; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4); + } + + .progress-fill-pro { + height: 100%; + width: 0%; + border-radius: 5px; + transition: width 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); + position: relative; + overflow: hidden; + } + + .progress-glow { + position: absolute; + top: 0; + right: 0; + width: 25px; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.5)); + animation: progress-shimmer 2s ease-in-out infinite; + } + + .progress-particles { + position: absolute; + top: 50%; + right: 0; + width: 6px; + height: 6px; + background: rgba(255, 255, 255, 0.8); + border-radius: 50%; + transform: translateY(-50%); + animation: particle-flow 1s ease-in-out infinite; + } + + @keyframes progress-shimmer { + 0%, 100% { opacity: 0; } + 50% { opacity: 1; } + } + + @keyframes particle-flow { + 0%, 100% { opacity: 0.5; transform: translateY(-50%) scale(1); } + 50% { opacity: 1; transform: translateY(-50%) scale(1.3); } + } + + .progress-text-pro { + font-size: 14px; + font-weight: 700; + color: rgba(255, 255, 255, 0.9); + min-width: 45px; + text-align: right; + text-shadow: 0 0 5px rgba(255, 255, 255, 0.3); + } + + .reader-controls-pro { + display: flex; + align-items: center; + gap: 18px; + } + + .stopwatch-display { + display: flex; + align-items: center; + padding: 8px 12px; + background: rgba(255, 255, 255, 0.08); + border: 2px solid rgba(255, 255, 255, 0.15); + border-radius: 12px; + color: rgba(255, 255, 255, 0.9); + font-size: 14px; + font-weight: 600; + font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace; + text-shadow: 0 0 5px rgba(255, 255, 255, 0.3); + backdrop-filter: blur(10px); + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); + } + + .control-btn-pro { + width: 44px; + height: 44px; + border: 2px solid rgba(255, 255, 255, 0.2); + background: rgba(255, 255, 255, 0.08); + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); + color: rgba(255, 255, 255, 0.8); + position: relative; + overflow: hidden; + } + + .control-btn-pro::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); + transition: left 0.6s; + } + + .control-btn-pro:hover::before { + left: 100%; + } + + .control-btn-pro:hover { + background: rgba(255, 255, 255, 0.15); + border-color: rgba(255, 255, 255, 0.4); + color: rgba(255, 255, 255, 1); + transform: translateY(-3px); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4); + } + + .control-btn-pro.active { + background: rgba(138, 43, 226, 0.4); + border-color: rgba(138, 43, 226, 0.8); + color: #ffffff; + box-shadow: 0 0 25px rgba(138, 43, 226, 0.5); + } + + .focus-btn.active { + background: rgba(0, 191, 255, 0.4); + border-color: rgba(0, 191, 255, 0.8); + box-shadow: 0 0 25px rgba(0, 191, 255, 0.5); + } + + .exit-btn:hover { + background: rgba(255, 59, 48, 0.3) !important; + border-color: rgba(255, 59, 48, 0.6) !important; + box-shadow: 0 0 20px rgba(255, 59, 48, 0.4) !important; + } + + /* Immersive Reading Content */ + .reader-scroll-interstellar { + height: calc(100vh - 70px); + overflow-y: auto; + scroll-behavior: smooth; + animation: content-fade-in 1.5s ease-out 1s both; + } + + @keyframes content-fade-in { + 0% { opacity: 0; transform: translateY(40px); } + 100% { opacity: 1; transform: translateY(0); } + } + + .reader-scroll-interstellar::-webkit-scrollbar { + width: 12px; + } + + .reader-scroll-interstellar::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.05); + border-radius: 6px; + } + + .reader-scroll-interstellar::-webkit-scrollbar-thumb { + border-radius: 6px; + transition: background 0.3s ease; + } + + .reader-scroll-interstellar::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.4); + } + + .reader-content-interstellar { + max-width: 900px; + margin: 0 auto; + padding: 90px 70px 180px; + color: #e8f4fd; + font-family: 'Georgia', 'Times New Roman', serif; + font-size: 20px; + line-height: 1.8; + font-weight: 400; + position: relative; + transition: filter 0.6s ease, text-shadow 0.6s ease; + } + + .reader-content-interstellar::selection { + background: rgba(138, 43, 226, 0.5); + color: #ffffff; + } + + .reader-content-interstellar h1 { + font-size: 3em; + font-weight: 800; + line-height: 1.2; + margin: 0 0 2.5em 0; + color: #ffffff; + text-align: center; + position: relative; + text-shadow: 0 0 20px rgba(255, 255, 255, 0.3); + } + + .reader-content-interstellar h1::after { + content: ''; + position: absolute; + bottom: -25px; + left: 50%; + transform: translateX(-50%); + width: 140px; + height: 4px; + border-radius: 2px; + } + + .reader-content-interstellar h2 { + font-size: 2.2em; + font-weight: 700; + line-height: 1.3; + margin: 3.5em 0 1.5em 0; + color: #b8d4f0; + position: relative; + padding-left: 30px; + } + + .reader-content-interstellar h2::before { + content: ''; + position: absolute; + left: 0; + top: 0.3em; + width: 6px; + height: 1.6em; + border-radius: 3px; + } + + .reader-content-interstellar h3 { + font-size: 1.8em; + font-weight: 600; + line-height: 1.4; + margin: 3em 0 1.2em 0; + color: #94a3b8; + } + + .reader-content-interstellar p { + margin: 2em 0; + color: #cbd5e1; + text-align: justify; + hyphens: auto; + } + + .reader-content-interstellar p:first-of-type { + font-size: 1.2em; + color: #e2e8f0; + font-weight: 500; + line-height: 1.7; + } + + .reader-content-interstellar a { + color: #60a5fa; + text-decoration: none; + border-bottom: 2px solid rgba(96, 165, 250, 0.4); + transition: all 0.3s ease; + } + + .reader-content-interstellar a:hover { + color: #93c5fd; + border-bottom-color: #93c5fd; + text-shadow: 0 0 10px rgba(147, 197, 253, 0.5); + } + + .reader-content-interstellar img { + max-width: 100%; + height: auto; + border-radius: 18px; + margin: 3.5em 0; + box-shadow: 0 30px 60px rgba(0, 0, 0, 0.5); + border: 3px solid rgba(255, 255, 255, 0.1); + } + + .reader-content-interstellar blockquote { + margin: 3.5em 0; + padding: 2.5em 3em; + background: rgba(30, 41, 59, 0.5); + border-left: 6px solid; + border-radius: 0 15px 15px 0; + font-style: italic; + color: #94a3b8; + position: relative; + backdrop-filter: blur(15px); + } + + .reader-content-interstellar blockquote::before { + content: '"'; + position: absolute; + top: -20px; + left: 25px; + font-size: 5em; + font-family: Georgia, serif; + opacity: 0.4; + } + + .reader-content-interstellar code { + background: rgba(15, 23, 42, 0.9); + color: #a78bfa; + padding: 0.4em 0.6em; + border-radius: 8px; + font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace; + font-size: 0.9em; + border: 1px solid rgba(167, 139, 250, 0.3); + } + + .reader-content-interstellar pre { + background: rgba(15, 23, 42, 0.95); + padding: 2.5em; + border-radius: 15px; + overflow-x: auto; + margin: 3.5em 0; + border: 2px solid rgba(255, 255, 255, 0.1); + backdrop-filter: blur(15px); + } + + .reader-content-interstellar pre code { + background: none; + border: none; + color: #e2e8f0; + padding: 0; + } + + /* Enhanced Galaxy Themes with Full Page Theming */ + .galaxy-andromeda { + background: + radial-gradient(ellipse at 30% 20%, rgba(138, 43, 226, 0.25) 0%, transparent 50%), + radial-gradient(ellipse at 70% 80%, rgba(255, 20, 147, 0.2) 0%, transparent 60%), + radial-gradient(ellipse at 50% 50%, rgba(186, 85, 211, 0.15) 0%, transparent 70%), + linear-gradient(135deg, #0a0a0f 0%, #1a0f2e 30%, #2a1540 50%, #1a0f2e 70%, #0a0a0f 100%); + } + + .galaxy-andromeda .progress-fill-pro { + background: linear-gradient(90deg, #8a2be2, #ff1493, #da70d6, #ba55d3); + box-shadow: 0 0 15px rgba(138, 43, 226, 0.5); + } + + .galaxy-andromeda .reader-content-interstellar h1::after { + background: linear-gradient(90deg, #8a2be2, #ff1493); + box-shadow: 0 0 20px rgba(138, 43, 226, 0.6); + } + + .galaxy-andromeda .reader-content-interstellar h2::before { + background: linear-gradient(180deg, #8a2be2, #ff1493); + } + + .galaxy-andromeda .reader-content-interstellar blockquote { + border-left-color: #8a2be2; + background: rgba(138, 43, 226, 0.1); + } + + .galaxy-andromeda .reader-content-interstellar blockquote::before { + color: rgba(138, 43, 226, 0.4); + } + + .galaxy-andromeda .reader-scroll-interstellar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, #8a2be2, #ff1493); + } + + .galaxy-andromeda .dot-pro.active { + background: linear-gradient(45deg, #8a2be2, #ff1493); + } + + .galaxy-milkyway { + background: + radial-gradient(ellipse at 25% 30%, rgba(255, 215, 0, 0.2) 0%, transparent 60%), + radial-gradient(ellipse at 75% 70%, rgba(255, 140, 0, 0.15) 0%, transparent 50%), + radial-gradient(ellipse at 50% 50%, rgba(255, 165, 0, 0.12) 0%, transparent 70%), + linear-gradient(135deg, #0a0a0f 0%, #2a1f0f 30%, #3a2f1f 50%, #2a1f0f 70%, #0a0a0f 100%); + } + + .galaxy-milkyway .progress-fill-pro { + background: linear-gradient(90deg, #ffd700, #ffb347, #ff8c00, #daa520); + box-shadow: 0 0 15px rgba(255, 215, 0, 0.5); + } + + .galaxy-milkyway .reader-content-interstellar h1::after { + background: linear-gradient(90deg, #ffd700, #ff8c00); + box-shadow: 0 0 20px rgba(255, 215, 0, 0.6); + } + + .galaxy-milkyway .reader-content-interstellar h2::before { + background: linear-gradient(180deg, #ffd700, #ff8c00); + } + + .galaxy-milkyway .reader-content-interstellar blockquote { + border-left-color: #ffd700; + background: rgba(255, 215, 0, 0.08); + } + + .galaxy-milkyway .reader-content-interstellar blockquote::before { + color: rgba(255, 215, 0, 0.4); + } + + .galaxy-milkyway .reader-scroll-interstellar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, #ffd700, #ff8c00); + } + + .galaxy-milkyway .dot-pro.active { + background: linear-gradient(45deg, #ffd700, #ff8c00); + } + + .galaxy-whirlpool { + background: + radial-gradient(ellipse at 20% 70%, rgba(0, 191, 255, 0.2) 0%, transparent 60%), + radial-gradient(ellipse at 80% 30%, rgba(64, 224, 208, 0.18) 0%, transparent 50%), + radial-gradient(ellipse at 50% 50%, rgba(0, 206, 209, 0.15) 0%, transparent 70%), + linear-gradient(135deg, #0a0a0f 0%, #0f1f2a 30%, #1f2f3a 50%, #0f1f2a 70%, #0a0a0f 100%); + } + + .galaxy-whirlpool .progress-fill-pro { + background: linear-gradient(90deg, #00bfff, #40e0d0, #00ced1, #5f9ea0); + box-shadow: 0 0 15px rgba(0, 191, 255, 0.5); + } + + .galaxy-whirlpool .reader-content-interstellar h1::after { + background: linear-gradient(90deg, #00bfff, #40e0d0); + box-shadow: 0 0 20px rgba(0, 191, 255, 0.6); + } + + .galaxy-whirlpool .reader-content-interstellar h2::before { + background: linear-gradient(180deg, #00bfff, #40e0d0); + } + + .galaxy-whirlpool .reader-content-interstellar blockquote { + border-left-color: #00bfff; + background: rgba(0, 191, 255, 0.08); + } + + .galaxy-whirlpool .reader-content-interstellar blockquote::before { + color: rgba(0, 191, 255, 0.4); + } + + .galaxy-whirlpool .reader-scroll-interstellar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, #00bfff, #40e0d0); + } + + .galaxy-whirlpool .dot-pro.active { + background: linear-gradient(45deg, #00bfff, #40e0d0); + } + + .galaxy-sombrero { + background: + radial-gradient(ellipse at 30% 40%, rgba(255, 107, 71, 0.2) 0%, transparent 60%), + radial-gradient(ellipse at 70% 60%, rgba(255, 142, 60, 0.18) 0%, transparent 50%), + radial-gradient(ellipse at 50% 50%, rgba(255, 165, 0, 0.15) 0%, transparent 70%), + linear-gradient(135deg, #0a0a0f 0%, #2a1510 30%, #3a2520 50%, #2a1510 70%, #0a0a0f 100%); } - }); - } - - activateDarkMode() { - if (this.isActive) return; - - this.isActive = true; - this.createDarkModeStyles(); - this.addSuckingAnimation(); - } - - deactivateDarkMode() { - if (!this.isActive) return; - - this.isActive = false; - this.removeDarkModeStyles(); - this.removeAnimations(); - } - - createDarkModeStyles() { - const existing = document.getElementById(this.darkModeId); - if (existing) existing.remove(); - - const style = document.createElement('style'); - style.id = this.darkModeId; - style.textContent = ` - html { - filter: invert(1) hue-rotate(180deg) !important; - transition: all 2s ease-in-out !important; + .galaxy-sombrero .progress-fill-pro { + background: linear-gradient(90deg, #ff6b47, #ff8e3c, #ffa500, #cd853f); + box-shadow: 0 0 15px rgba(255, 107, 71, 0.5); } - img, video, iframe, svg, canvas, embed, object { - filter: invert(1) hue-rotate(180deg) !important; + .galaxy-sombrero .reader-content-interstellar h1::after { + background: linear-gradient(90deg, #ff6b47, #ffa500); + box-shadow: 0 0 20px rgba(255, 107, 71, 0.6); } - [style*="background-image"], - [style*="background: url"], - [style*="background:url"] { - filter: invert(1) hue-rotate(180deg) !important; + .galaxy-sombrero .reader-content-interstellar h2::before { + background: linear-gradient(180deg, #ff6b47, #ffa500); } - body::before { - content: ''; + .galaxy-sombrero .reader-content-interstellar blockquote { + border-left-color: #ff6b47; + background: rgba(255, 107, 71, 0.08); + } + + .galaxy-sombrero .reader-content-interstellar blockquote::before { + color: rgba(255, 107, 71, 0.4); + } + + .galaxy-sombrero .reader-scroll-interstellar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, #ff6b47, #ffa500); + } + + .galaxy-sombrero .dot-pro.active { + background: linear-gradient(45deg, #ff6b47, #ffa500); + } + + .galaxy-pinwheel { + background: + radial-gradient(ellipse at 25% 25%, rgba(50, 205, 50, 0.2) 0%, transparent 60%), + radial-gradient(ellipse at 75% 75%, rgba(0, 255, 127, 0.18) 0%, transparent 50%), + radial-gradient(ellipse at 50% 50%, rgba(152, 251, 152, 0.15) 0%, transparent 70%), + linear-gradient(135deg, #0a0a0f 0%, #0f2a15 30%, #1f3a25 50%, #0f2a15 70%, #0a0a0f 100%); + } + + .galaxy-pinwheel .progress-fill-pro { + background: linear-gradient(90deg, #32cd32, #00ff7f, #98fb98, #90ee90); + box-shadow: 0 0 15px rgba(50, 205, 50, 0.5); + } + + .galaxy-pinwheel .reader-content-interstellar h1::after { + background: linear-gradient(90deg, #32cd32, #00ff7f); + box-shadow: 0 0 20px rgba(50, 205, 50, 0.6); + } + + .galaxy-pinwheel .reader-content-interstellar h2::before { + background: linear-gradient(180deg, #32cd32, #00ff7f); + } + + .galaxy-pinwheel .reader-content-interstellar blockquote { + border-left-color: #32cd32; + background: rgba(50, 205, 50, 0.08); + } + + .galaxy-pinwheel .reader-content-interstellar blockquote::before { + color: rgba(50, 205, 50, 0.4); + } + + .galaxy-pinwheel .reader-scroll-interstellar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, #32cd32, #00ff7f); + } + + .galaxy-pinwheel .dot-pro.active { + background: linear-gradient(45deg, #32cd32, #00ff7f); + } + + /* Focus Mode - Fixed to only affect backdrop opacity */ + .focus-mode-active .interstellar-backdrop { + opacity: 0.3; + } + + .focus-mode-active .reader-content-interstellar { + filter: contrast(1.15) brightness(1.05); + text-shadow: 0 0 6px rgba(255, 255, 255, 0.15); + } + + .focus-mode-active .celestial-system { + opacity: 0.4; + } + + .focus-mode-active .interstellar-black-hole { + opacity: 0.2; + } + + .quantum-particles-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; - background: - radial-gradient(circle at 20% 80%, rgba(138, 43, 226, 0.1) 0%, transparent 50%), - radial-gradient(circle at 80% 20%, rgba(58, 134, 255, 0.1) 0%, transparent 50%), - radial-gradient(circle at 40% 40%, rgba(255, 107, 53, 0.05) 0%, transparent 50%); pointer-events: none; - z-index: 9999; - animation: cosmic-drift 10s ease-in-out infinite alternate; + z-index: 5; } - @keyframes cosmic-drift { - 0% { opacity: 0.3; transform: translateX(-10px) translateY(-5px); } - 100% { opacity: 0.1; transform: translateX(10px) translateY(5px); } + .quantum-particle { + position: absolute; + width: 2px; + height: 2px; + background: rgba(100, 200, 255, 0.8); + border-radius: 50%; + animation: quantum-drift 10s linear infinite; } - h1, h2, h3, h4, h5, h6 { - text-shadow: 0 0 5px rgba(138, 43, 226, 0.3) !important; + @keyframes quantum-drift { + 0% { + transform: translateX(0) translateY(0) scale(1); + opacity: 0; + } + 10% { opacity: 1; } + 90% { opacity: 0.8; } + 100% { + transform: translateX(-100px) translateY(-200px) scale(0.5); + opacity: 0; + } } - button, input, select, textarea, a { - box-shadow: 0 0 3px rgba(138, 43, 226, 0.2) !important; - transition: box-shadow 0.3s ease !important; + /* Responsive Design */ + @media (max-width: 768px) { + .reader-header-pro { + padding: 0 25px; + height: 65px; + } + + .galaxy-name-pro { + font-size: 14px; + } + + .progress-system { + max-width: 200px; + margin: 0 20px; + } + + .stopwatch-display { + font-size: 12px; + padding: 6px 10px; + } + + .reader-content-interstellar { + padding: 70px 40px 140px; + font-size: 18px; + } + + .reader-content-interstellar h1 { + font-size: 2.4em; + } + + .reader-content-interstellar h2 { + font-size: 1.9em; + } + + .interstellar-black-hole { + width: 180px; + height: 180px; + opacity: 0.25; + } + + .control-btn-pro { + width: 40px; + height: 40px; + } + + .reader-controls-pro { + gap: 12px; + } } + `; + + document.head.appendChild(style); + document.body.appendChild(readerOverlay); + document.body.style.overflow = 'hidden'; + + this.setupInteractiveElements(); + } + + setupInteractiveElements() { + document.querySelectorAll('.dot-pro').forEach(dot => { + dot.addEventListener('click', (e) => { + document.querySelectorAll('.dot-pro').forEach(d => d.classList.remove('active')); + dot.classList.add('active'); + this.changeGalaxy(dot.dataset.galaxy); + this.triggerGalaxyTransition(); + }); + }); + + const focusBtn = document.getElementById('focusMode'); + if (focusBtn) { + focusBtn.addEventListener('click', () => { + this.toggleFocusMode(); + }); + } + + const exitBtn = document.getElementById('exitReader'); + if (exitBtn) { + exitBtn.addEventListener('click', () => { + this.deactivateGalacticReader(); + }); + } + } + + setupReadingProgress() { + const scrollContainer = document.querySelector('.reader-scroll-interstellar'); + const progressFill = document.querySelector('.progress-fill-pro'); + const progressText = document.querySelector('.progress-text-pro'); + + if (!scrollContainer || !progressFill || !progressText) return; + + const updateProgress = () => { + const scrollTop = scrollContainer.scrollTop; + const scrollHeight = scrollContainer.scrollHeight - scrollContainer.clientHeight; + const progress = Math.min((scrollTop / scrollHeight) * 100, 100); + + progressFill.style.width = `${progress}%`; + progressText.textContent = `${Math.round(progress)}%`; - button:hover, input:focus, select:focus, textarea:focus, a:hover { - box-shadow: 0 0 8px rgba(138, 43, 226, 0.4) !important; + this.readingProgress = progress; + + if (progress >= 25 && progress < 26) { + this.triggerMilestoneEffect(25); + } else if (progress >= 50 && progress < 51) { + this.triggerMilestoneEffect(50); + } else if (progress >= 75 && progress < 76) { + this.triggerMilestoneEffect(75); + } else if (progress >= 100) { + this.triggerMilestoneEffect(100); } + }; + + scrollContainer.addEventListener('scroll', updateProgress); + setTimeout(updateProgress, 100); + } + + triggerMilestoneEffect(milestone) { + const progressTrack = document.querySelector('.progress-track-pro'); + if (!progressTrack) return; + + const effect = document.createElement('div'); + effect.style.cssText = ` + position: absolute; + top: -5px; + left: ${milestone}%; + width: 20px; + height: 20px; + background: radial-gradient(circle, rgba(255, 255, 255, 0.8), transparent); + border-radius: 50%; + animation: milestone-burst 1s ease-out forwards; + pointer-events: none; + z-index: 10; `; + const style = document.createElement('style'); + style.textContent = ` + @keyframes milestone-burst { + 0% { transform: scale(0); opacity: 1; } + 50% { transform: scale(2); opacity: 0.8; } + 100% { transform: scale(4); opacity: 0; } + } + `; document.head.appendChild(style); + + progressTrack.appendChild(effect); + + setTimeout(() => { + effect.remove(); + style.remove(); + }, 1000); + + if (milestone === 100) { + this.triggerCosmicEvent('celebration'); + } + } + + changeGalaxy(galaxy) { + this.currentGalaxy = galaxy; + const universe = document.querySelector('.galactic-universe-interstellar'); + const galaxyName = document.querySelector('.galaxy-name-pro'); + + if (universe) { + universe.className = `galactic-universe-interstellar galaxy-${galaxy}`; + } + + if (galaxyName) { + galaxyName.textContent = this.getGalaxyName(galaxy); + } + } + + triggerGalaxyTransition() { + const universe = document.querySelector('.galactic-universe-interstellar'); + if (!universe) return; + + universe.style.transform = 'scale(1.05)'; + universe.style.filter = 'brightness(1.2)'; + + setTimeout(() => { + universe.style.transform = 'scale(1)'; + universe.style.filter = 'brightness(1)'; + }, 500); + } + + getGalaxyName(galaxy = this.currentGalaxy) { + const names = { + andromeda: 'Andromeda', + milkyway: 'Milky Way', + whirlpool: 'Whirlpool', + sombrero: 'Sombrero', + pinwheel: 'Pinwheel' + }; + return names[galaxy] || 'Andromeda'; + } + + toggleFocusMode() { + const btn = document.getElementById('focusMode'); + const universe = document.querySelector('.galactic-universe-interstellar'); + + this.focusModeActive = !this.focusModeActive; + + if (this.focusModeActive) { + btn.classList.add('active'); + universe.classList.add('focus-mode-active'); + this.createQuantumFocusField(); + } else { + btn.classList.remove('active'); + universe.classList.remove('focus-mode-active'); + } } - addSuckingAnimation() { - const suckEffect = document.createElement('div'); - suckEffect.id = 'black-hole-suck-effect'; - suckEffect.style.cssText = ` - position: fixed; + createQuantumFocusField() { + const content = document.querySelector('.reader-content-interstellar'); + if (!content) return; + + const field = document.createElement('div'); + field.style.cssText = ` + position: absolute; top: 0; left: 0; - width: 100%; - height: 100%; - background: radial-gradient(circle at center, transparent 0%, rgba(0,0,0,0.8) 100%); - z-index: 999999; + right: 0; + bottom: 0; + background: radial-gradient(circle at 50% 50%, transparent 60%, rgba(0, 191, 255, 0.05) 100%); + border-radius: 20px; + animation: focus-pulse 3s ease-in-out infinite; pointer-events: none; - animation: suck-in 3s ease-in-out forwards; + z-index: -1; `; - const keyframes = ` - @keyframes suck-in { - 0% { - transform: scale(10) rotate(0deg); - opacity: 0; + const style = document.createElement('style'); + style.textContent = ` + @keyframes focus-pulse { + 0%, 100% { opacity: 0.3; transform: scale(1); } + 50% { opacity: 0.6; transform: scale(1.02); } + } + `; + document.head.appendChild(style); + + content.appendChild(field); + + setTimeout(() => { + field.remove(); + style.remove(); + }, 6000); + } + + triggerCosmicEvent(eventType) { + const container = document.querySelector('.cosmic-events-interstellar'); + if (!container) return; + + switch(eventType) { + case 'supernova': + this.createCinematicSupernova(container); + break; + case 'meteor': + this.createCinematicMeteor(container); + break; + case 'aurora': + this.createCinematicAurora(container); + break; + case 'celebration': + this.createCelebrationFireworks(container); + break; + } + } + + createCinematicSupernova(container) { + const supernova = document.createElement('div'); + supernova.style.cssText = ` + position: absolute; + top: ${20 + Math.random() * 30}%; + right: ${20 + Math.random() * 30}%; + width: 6px; + height: 6px; + background: #ffffff; + border-radius: 50%; + animation: cinematic-supernova 4s ease-out forwards; + pointer-events: none; + `; + + const style = document.createElement('style'); + style.textContent = ` + @keyframes cinematic-supernova { + 0% { + transform: scale(1); + opacity: 1; + box-shadow: 0 0 15px #ffffff; } - 50% { - transform: scale(1) rotate(180deg); - opacity: 0.8; + 20% { + transform: scale(8); + opacity: 0.95; + box-shadow: 0 0 50px #ffffff, 0 0 100px rgba(255,255,255,0.7); } - 100% { - transform: scale(0.1) rotate(360deg); - opacity: 0; + 40% { + transform: scale(25); + opacity: 0.8; + box-shadow: 0 0 150px #ffffff, 0 0 300px rgba(255,255,255,0.5); + } + 100% { + transform: scale(60); + opacity: 0; + box-shadow: 0 0 400px rgba(255,255,255,0.2); + } + } + `; + document.head.appendChild(style); + + container.appendChild(supernova); + + setTimeout(() => { + supernova.remove(); + style.remove(); + }, 4000); + } + + createCinematicMeteor(container) { + for (let i = 0; i < 8; i++) { + setTimeout(() => { + const meteor = document.createElement('div'); + meteor.style.cssText = ` + position: absolute; + top: ${Math.random() * 40}%; + left: ${85 + Math.random() * 15}%; + width: 3px; + height: ${15 + Math.random() * 25}px; + background: linear-gradient(180deg, transparent 0%, #ffffff 30%, #ffeb3b 70%, #ff9800 100%); + animation: cinematic-meteor 3s linear forwards; + pointer-events: none; + border-radius: 50%; + `; + + container.appendChild(meteor); + + setTimeout(() => meteor.remove(), 3000); + }, i * 200); + } + + const style = document.createElement('style'); + style.textContent = ` + @keyframes cinematic-meteor { + 0% { + transform: translateX(0) translateY(0) rotate(45deg); + opacity: 0; + box-shadow: 0 0 10px rgba(255, 255, 255, 0.8); + } + 15% { opacity: 1; } + 85% { opacity: 0.9; } + 100% { + transform: translateX(-500px) translateY(500px) rotate(45deg); + opacity: 0; + box-shadow: 0 0 5px rgba(255, 255, 255, 0.3); } } `; + document.head.appendChild(style); + + setTimeout(() => style.remove(), 5000); + } + + createCinematicAurora(container) { + const aurora = document.createElement('div'); + aurora.style.cssText = ` + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 50%; + background: linear-gradient(180deg, + rgba(0, 255, 127, 0.2) 0%, + rgba(138, 43, 226, 0.12) 30%, + rgba(255, 20, 147, 0.08) 60%, + transparent 100%); + animation: cinematic-aurora 15s ease-in-out forwards; + pointer-events: none; + `; - const styleSheet = document.createElement('style'); - styleSheet.textContent = keyframes; - document.head.appendChild(styleSheet); + const style = document.createElement('style'); + style.textContent = ` + @keyframes cinematic-aurora { + 0%, 100% { + opacity: 0; + transform: translateY(-40px) skewX(-4deg); + } + 20% { + opacity: 0.7; + transform: translateY(-20px) skewX(2deg); + } + 40% { + opacity: 0.9; + transform: translateY(-10px) skewX(-1deg); + } + 60% { + opacity: 1; + transform: translateY(0) skewX(3deg); + } + 80% { + opacity: 0.8; + transform: translateY(-15px) skewX(-2deg); + } + } + `; + document.head.appendChild(style); - document.body.appendChild(suckEffect); + container.appendChild(aurora); setTimeout(() => { - if (suckEffect.parentNode) { - suckEffect.parentNode.removeChild(suckEffect); + aurora.remove(); + style.remove(); + }, 15000); + } + + createCelebrationFireworks(container) { + for (let i = 0; i < 12; i++) { + setTimeout(() => { + const firework = document.createElement('div'); + firework.style.cssText = ` + position: absolute; + top: ${60 + Math.random() * 30}%; + left: ${10 + Math.random() * 80}%; + width: 4px; + height: 4px; + background: ${['#ff1493', '#00bfff', '#32cd32', '#ffd700', '#ff6b47'][Math.floor(Math.random() * 5)]}; + border-radius: 50%; + animation: celebration-burst 2s ease-out forwards; + pointer-events: none; + `; + + container.appendChild(firework); + + setTimeout(() => firework.remove(), 2000); + }, i * 150); + } + + const style = document.createElement('style'); + style.textContent = ` + @keyframes celebration-burst { + 0% { + transform: scale(1); + opacity: 1; + box-shadow: 0 0 10px currentColor; + } + 50% { + transform: scale(15); + opacity: 0.8; + box-shadow: 0 0 50px currentColor; + } + 100% { + transform: scale(25); + opacity: 0; + box-shadow: 0 0 100px currentColor; + } + } + `; + document.head.appendChild(style); + + setTimeout(() => style.remove(), 4000); + } + + startStopwatch() { + const stopwatchTime = document.getElementById('stopwatchTime'); + if (!stopwatchTime) return; + + this.stopwatchInterval = setInterval(() => { + if (!this.isActive || !this.readingStartTime) return; + + const elapsed = Date.now() - this.readingStartTime; + const minutes = Math.floor(elapsed / 60000); + const seconds = Math.floor((elapsed % 60000) / 1000); + + stopwatchTime.textContent = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; + }, 1000); + } + + stopStopwatch() { + if (this.stopwatchInterval) { + clearInterval(this.stopwatchInterval); + this.stopwatchInterval = null; + } + } + + initializeInterstellarBackground() { + this.createInterstellarStars(); + this.startQuantumParticles(); + } + + initializeQuantumEffects() { + this.createQuantumParticles(); + } + + createQuantumParticles() { + const container = document.querySelector('.quantum-particles-container'); + if (!container) return; + + setInterval(() => { + if (!this.isActive) return; + + if (Math.random() < 0.3) { + const particle = document.createElement('div'); + particle.className = 'quantum-particle'; + particle.style.cssText = ` + top: ${Math.random() * 100}%; + left: ${90 + Math.random() * 10}%; + background: rgba(${100 + Math.random() * 155}, ${150 + Math.random() * 105}, 255, 0.8); + `; + + container.appendChild(particle); + + setTimeout(() => particle.remove(), 10000); + } + }, 2000); + } + + startQuantumParticles() { + this.createQuantumParticles(); + } + + createInterstellarStars() { + setInterval(() => { + if (!this.isActive) return; + + if (Math.random() < 0.15) { + const star = document.createElement('div'); + star.style.cssText = ` + position: fixed; + top: ${Math.random() * 50}%; + left: ${70 + Math.random() * 30}%; + width: 1px; + height: ${15 + Math.random() * 15}px; + background: linear-gradient(180deg, transparent 0%, rgba(255,255,255,0.9) 100%); + animation: interstellar-shooting-star 6s linear forwards; + pointer-events: none; + z-index: 5; + `; + + document.body.appendChild(star); + + setTimeout(() => star.remove(), 6000); } - if (styleSheet.parentNode) { - styleSheet.parentNode.removeChild(styleSheet); + }, 4000); + + const style = document.createElement('style'); + style.textContent = ` + @keyframes interstellar-shooting-star { + 0% { + transform: translateX(0) translateY(0) rotate(45deg); + opacity: 0; + } + 15% { opacity: 1; } + 85% { opacity: 0.9; } + 100% { + transform: translateX(-500px) translateY(500px) rotate(45deg); + opacity: 0; + } } - }, 3000); + `; + document.head.appendChild(style); } - removeDarkModeStyles() { - const style = document.getElementById(this.darkModeId); - if (style) { - style.remove(); + startAnimationLoop() { + const animate = () => { + if (!this.isActive) return; + + this.updateQuantumParticles(); + + this.animationFrameId = requestAnimationFrame(animate); + }; + + animate(); + } + + updateQuantumParticles() { + this.quantumParticles.forEach((particle, index) => { + if (particle.parentNode) { + const currentLeft = parseFloat(particle.style.left); + if (currentLeft < -5) { + particle.remove(); + this.quantumParticles.splice(index, 1); + } + } + }); + } + + stopAnimationLoop() { + if (this.animationFrameId) { + cancelAnimationFrame(this.animationFrameId); + this.animationFrameId = null; + } + } + + extractMainContent() { + const selectors = [ + 'article', + 'main', + '[role="main"]', + '.post-content', + '.entry-content', + '.article-content', + '.content-area', + '.main-content', + '.post-body', + '.story-body', + '.article-body', + '.entry-text', + '.content', + '.text' + ]; + + let contentElement = null; + + for (const selector of selectors) { + contentElement = document.querySelector(selector); + if (contentElement && contentElement.innerText.length > 300) { + break; + } + } + + if (!contentElement) { + const candidates = document.querySelectorAll('div, section, p'); + let maxText = 0; + + candidates.forEach(candidate => { + const textLength = candidate.innerText?.length || 0; + if (textLength > maxText && textLength > 500) { + maxText = textLength; + contentElement = candidate; + } + }); + } + + if (!contentElement || contentElement.innerText.length < 200) { + return ` +

🌌 Starlapse V2: Enhanced Galactic Reading Experience

+

Welcome to the most advanced cosmic reading mode ever created! Experience literature like never before with our enhanced interstellar environment.

+ +

🚀 V2 Features

+

Reading Stopwatch: Track your time spent in the cosmic reading environment with a beautiful stopwatch display.

+

Quantum Focus: Enhanced concentration mode that dims distractions while preserving galaxy themes.

+

Enhanced Galaxy Themes: More vibrant and immersive backgrounds for each galaxy with deeper color palettes.

+

Reading Milestones: Celebrate your progress with burst effects at 25%, 50%, 75%, and completion.

+

Quantum Particles: Floating cosmic particles that respond to your reading activity.

+ +

🌌 Galaxy Collection

+

Andromeda Galaxy: Rich purples and magentas with enhanced spiral arms and stellar nurseries.

+

Milky Way: Golden cosmic dust with warm stellar formations and enhanced accretion disks.

+

Whirlpool Galaxy: Cool blue-teal cosmic streams with dynamic spiral patterns.

+

Sombrero Galaxy: Warm orange-red cosmic fire with enhanced gravitational effects.

+

Pinwheel Galaxy: Fresh green cosmic energy with vibrant stellar formations.

+ +

⚡ Interactive Controls

+

Stopwatch: Monitor your reading time with a cosmic stopwatch that shows minutes and seconds.

+

Quantum Focus: Click the eye icon for enhanced concentration with reduced background opacity.

+

Galaxy Switching: Click any colored dot to instantly transport to a different galactic environment.

+ +

🎯 Advanced Features

+

Enhanced Black Hole: More realistic event horizon with relativistic jets and photon sphere.

+

Celestial Bodies: Additional stars, nebulae, planets, and comets with realistic orbital mechanics.

+

Dark Matter Web: Subtle cosmic web structure visible in the background.

+

Quantum Foam: Microscopic space-time fluctuations for ultimate realism.

+

Progress Particles: Your reading progress generates cosmic particle effects.

+ +

🌟 Usage Tips

+

Switch galaxy themes to match your mood or content type. Use Quantum Focus for deep reading sessions while maintaining the beauty of your selected galaxy theme.

+ +

This enhanced reader mode preserves the original website structure while adding an immersive cosmic layer that makes every reading session an interstellar journey!

+ `; } + + const clonedContent = contentElement.cloneNode(true); + + const unwantedSelectors = [ + 'script', 'style', 'nav', 'aside', 'header', 'footer', + '.ad', '.ads', '.advertisement', '.banner', '.popup', + '.sidebar', '.navigation', '.menu', '.social', '.share', + '.comments', '.related', '.recommended', '.widget', + '[class*="ad-"]', '[id*="ad-"]', '[class*="sidebar"]', + '.comment', '.reply', '.author-bio', '.tags', '.categories' + ]; + + unwantedSelectors.forEach(selector => { + const elements = clonedContent.querySelectorAll(selector); + elements.forEach(el => el.remove()); + }); + + const allElements = clonedContent.querySelectorAll('*'); + allElements.forEach(el => { + el.removeAttribute('onclick'); + el.removeAttribute('onload'); + el.removeAttribute('onerror'); + el.removeAttribute('style'); + + if (el.className && typeof el.className === 'string') { + el.className = ''; + } + }); + + return clonedContent.innerHTML; } - removeAnimations() { - const suckEffect = document.getElementById('black-hole-suck-effect'); - if (suckEffect) { - suckEffect.remove(); + removeGalacticReader() { + const readerMode = document.getElementById(this.readerModeId); + if (readerMode) { + readerMode.style.animation = 'interstellar-exit 2s ease-in forwards'; + + const exitStyle = document.createElement('style'); + exitStyle.textContent = ` + @keyframes interstellar-exit { + 0% { + opacity: 1; + transform: scale(1) perspective(1000px) rotateX(0deg); + filter: blur(0); + } + 30% { + opacity: 0.7; + transform: scale(1.03) perspective(1000px) rotateX(-3deg); + filter: blur(3px); + } + 70% { + opacity: 0.3; + transform: scale(1.1) perspective(1000px) rotateX(-10deg); + filter: blur(10px); + } + 100% { + opacity: 0; + transform: scale(1.3) perspective(1000px) rotateX(-20deg); + filter: blur(25px); + } + } + `; + document.head.appendChild(exitStyle); + + setTimeout(() => { + readerMode.remove(); + exitStyle.remove(); + }, 2000); } + + document.body.style.overflow = ''; } } -new DarkModeTransformer(); \ No newline at end of file +new GalacticReader(); From 06a22d676521ee1da1856dd7cd85d3dd964b95f6 Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sat, 21 Jun 2025 02:26:56 +0530 Subject: [PATCH 09/12] Update manifest.json for STARLAPSE V2 --- submissions/Starlapse/manifest.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/submissions/Starlapse/manifest.json b/submissions/Starlapse/manifest.json index cf41b757..3097d9d1 100644 --- a/submissions/Starlapse/manifest.json +++ b/submissions/Starlapse/manifest.json @@ -1,17 +1,18 @@ { "manifest_version": 3, "name": "Starlapse", - "version": "1.0.0", - "description": "Watch a black hole suck in your webpage and invert it into light/dark mode!", + "version": "2.0.0", + "description": "The ultimate galactic reading experience! Transform any webpage into an interactive galactic journey with multiple galaxies, cosmic events, planetary systems!", "author": "Raghav Karn", "permissions": [ "activeTab", - "storage" + "storage", + "scripting" ], "action": { "default_popup": "popup.html", - "default_title": "Starlapse" + "default_title": "Starlapse - Galactic Reader" }, "content_scripts": [ { @@ -28,4 +29,4 @@ "48": "icons/icon48.png", "128": "icons/icon128.png" } -} \ No newline at end of file +} From a197ca67086f48e2f6d4db24066d8cb3173b0648 Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sat, 21 Jun 2025 02:27:35 +0530 Subject: [PATCH 10/12] Update popup.css for STARLAPSE V2 --- submissions/Starlapse/popup.css | 453 +++++++++++++++++++++----------- 1 file changed, 294 insertions(+), 159 deletions(-) diff --git a/submissions/Starlapse/popup.css b/submissions/Starlapse/popup.css index a74a8305..84b2ec04 100644 --- a/submissions/Starlapse/popup.css +++ b/submissions/Starlapse/popup.css @@ -5,11 +5,13 @@ } body { - width: 320px; + width: 350px; height: 450px; - background: radial-gradient(circle at center, #0f0f23, #000000); + background: + radial-gradient(ellipse at center, #0a0a0a 0%, #000000 100%), + url('data:image/svg+xml,'); color: #ffffff; - font-family: 'Courier New', 'doto'; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; overflow: hidden; position: relative; } @@ -19,55 +21,81 @@ body::before { position: absolute; top: 0; left: 0; - right: 0; - bottom: 0; - background: url('data:image/svg+xml,'); - opacity: 0.3; - animation: starfield 20s linear infinite; + width: 100%; + height: 100%; + background: url('data:image/svg+xml,'); + opacity: 0.4; + animation: starfield 25s linear infinite; } small { - font-size: 14px; - font-family: 'major mono display'; - font-weight: 700; + font-size: 11px; + font-family: 'Courier New', monospace; + font-weight: 400; + opacity: 0.7; } a { text-decoration: none; color: #ffffff; + transition: color 0.3s ease; +} + +a:hover { + color: #ffa500; } @keyframes starfield { - 0% { transform: translateY(0); } - 100% { transform: translateY(-20px); } + 0% { transform: translateY(0) translateX(0); } + 100% { transform: translateY(-20px) translateX(-5px); } } .container { - padding: 20px; + padding: 25px; text-align: center; position: relative; z-index: 1; + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; } .title { - font-size: 24px; - font-family: 'major mono display'; + font-size: 28px; + font-family: 'Courier New', monospace; font-weight: bold; margin-bottom: 20px; - text-shadow: 0 0 10px #8a2be2; - animation: pulse 2s ease-in-out infinite; -} - -@keyframes pulse { - 0%, 100% { opacity: 1; } - 50% { opacity: 0.7; } + letter-spacing: 3px; + text-shadow: + 0 0 10px rgba(255, 165, 0, 0.8), + 0 0 20px rgba(255, 165, 0, 0.4), + 0 0 30px rgba(255, 165, 0, 0.2); + animation: title-glow 3s ease-in-out infinite alternate; +} + +@keyframes title-glow { + 0% { + opacity: 1; + text-shadow: + 0 0 10px rgba(255, 165, 0, 0.8), + 0 0 20px rgba(255, 165, 0, 0.4), + 0 0 30px rgba(255, 165, 0, 0.2); + } + 100% { + opacity: 0.9; + text-shadow: + 0 0 15px rgba(255, 165, 0, 1), + 0 0 25px rgba(255, 165, 0, 0.6), + 0 0 35px rgba(255, 165, 0, 0.3); + } } .black-hole-container { position: relative; - width: 200px; - height: 200px; - margin: 0 auto 30px; + width: 180px; + height: 180px; + margin: 0 auto 25px; } .black-hole { @@ -75,151 +103,176 @@ a { width: 100%; height: 100%; border-radius: 50%; - background: radial-gradient(circle, transparent 30%, #1a1a2e 35%, #16213e 45%, #0f0f23 60%, #000000 100%); - animation: rotate 3s linear infinite; + background: + radial-gradient(circle at center, + #000000 0%, + #000000 25%, + rgba(20, 20, 20, 0.8) 30%, + rgba(40, 25, 0, 0.6) 45%, + rgba(80, 50, 0, 0.4) 60%, + rgba(120, 80, 20, 0.3) 75%, + rgba(180, 120, 40, 0.2) 85%, + rgba(255, 165, 0, 0.1) 95%, + transparent 100%); + animation: black-hole-rotation 8s linear infinite; + filter: blur(0.5px); +} + +.black-hole.active { + animation: black-hole-active 4s linear infinite, black-hole-rotation 8s linear infinite; +} + +@keyframes black-hole-rotation { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +@keyframes black-hole-active { + 0% { + filter: blur(0.5px) brightness(1); + box-shadow: 0 0 30px rgba(255, 165, 0, 0.3); + } + 50% { + filter: blur(1px) brightness(1.2); + box-shadow: 0 0 50px rgba(255, 165, 0, 0.6); + } + 100% { + filter: blur(0.5px) brightness(1); + box-shadow: 0 0 30px rgba(255, 165, 0, 0.3); + } } .event-horizon { position: absolute; top: 50%; left: 50%; - width: 60px; - height: 60px; + width: 45px; + height: 45px; background: #000000; border-radius: 50%; transform: translate(-50%, -50%); box-shadow: - 0 0 20px #8a2be2, - inset 0 0 20px #4a0e4e; + 0 0 15px rgba(0, 0, 0, 1), + inset 0 0 10px rgba(0, 0, 0, 1); + border: 1px solid rgba(255, 165, 0, 0.1); } .accretion-disk { position: absolute; top: 50%; left: 50%; - width: 140px; - height: 140px; - border: 3px solid transparent; + width: 120px; + height: 120px; border-radius: 50%; transform: translate(-50%, -50%); background: conic-gradient( from 0deg, - #ff6b35 0deg, - #f7931e 60deg, - #8a2be2 120deg, - #3a86ff 180deg, - #06ffa5 240deg, - #ff6b35 300deg, - #ff6b35 360deg + rgba(255, 165, 0, 0.8) 0deg, + rgba(255, 140, 0, 0.6) 45deg, + rgba(255, 100, 0, 0.4) 90deg, + rgba(200, 80, 0, 0.3) 135deg, + rgba(150, 60, 0, 0.2) 180deg, + rgba(100, 40, 0, 0.1) 225deg, + rgba(80, 30, 0, 0.05) 270deg, + rgba(255, 165, 0, 0.8) 315deg, + rgba(255, 165, 0, 0.8) 360deg ); - animation: accretion-spin 2s linear infinite; - opacity: 0.8; -} - -@keyframes rotate { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } + animation: accretion-spin 3s linear infinite; + mask: radial-gradient(circle, transparent 37%, white 38%, white 85%, transparent 86%); + -webkit-mask: radial-gradient(circle, transparent 37%, white 38%, white 85%, transparent 86%); } @keyframes accretion-spin { 0% { transform: translate(-50%, -50%) rotate(0deg); } - 100% { transform: translate(-50%, -50%) rotate(-360deg); } + 100% { transform: translate(-50%, -50%) rotate(360deg); } +} + +.gravitational-lensing { + position: absolute; + top: 50%; + left: 50%; + width: 160px; + height: 160px; + border: 2px solid transparent; + border-radius: 50%; + transform: translate(-50%, -50%); + background: + radial-gradient(circle, transparent 70%, rgba(255, 165, 0, 0.1) 75%, transparent 80%), + radial-gradient(circle, transparent 80%, rgba(255, 165, 0, 0.05) 85%, transparent 90%); + animation: lensing-effect 6s ease-in-out infinite; +} + +@keyframes lensing-effect { + 0%, 100% { + transform: translate(-50%, -50%) scale(1); + opacity: 0.3; + } + 50% { + transform: translate(-50%, -50%) scale(1.1); + opacity: 0.6; + } } .particles { position: absolute; + top: 0; + left: 0; width: 100%; height: 100%; + pointer-events: none; } .particle { position: absolute; - width: 4px; - height: 4px; - background: #ffffff; + width: 2px; + height: 2px; + background: radial-gradient(circle, #ffffff 0%, transparent 70%); border-radius: 50%; - opacity: 0.8; -} - -.particle:nth-child(1) { - top: 20%; - left: 80%; - animation: spiral-in 3s ease-in-out infinite; + animation: particle-orbit 4s linear infinite; } -.particle:nth-child(2) { - top: 80%; - left: 20%; - animation: spiral-in 3s ease-in-out infinite 0.5s; +.particle:nth-child(1) { + top: 20%; left: 30%; + animation-delay: 0s; + animation-duration: 3s; } - -.particle:nth-child(3) { - top: 50%; - left: 90%; - animation: spiral-in 3s ease-in-out infinite 1s; +.particle:nth-child(2) { + top: 70%; left: 20%; + animation-delay: -0.5s; + animation-duration: 4s; } - -.particle:nth-child(4) { - top: 10%; - left: 40%; - animation: spiral-in 3s ease-in-out infinite 1.5s; +.particle:nth-child(3) { + top: 80%; left: 70%; + animation-delay: -1s; + animation-duration: 3.5s; } - -.particle:nth-child(5) { - top: 90%; - left: 60%; - animation: spiral-in 3s ease-in-out infinite 2s; +.particle:nth-child(4) { + top: 40%; left: 80%; + animation-delay: -1.5s; + animation-duration: 4.5s; } - -.particle:nth-child(6) { - top: 30%; - left: 10%; - animation: spiral-in 3s ease-in-out infinite 2.5s; +.particle:nth-child(5) { + top: 60%; left: 10%; + animation-delay: -2s; + animation-duration: 3.8s; } - -.particle:nth-child(7) { - top: 70%; - left: 90%; - animation: spiral-in 3s ease-in-out infinite 0.8s; +.particle:nth-child(6) { + top: 10%; left: 60%; + animation-delay: -2.5s; + animation-duration: 4.2s; } -.particle:nth-child(8) { - top: 40%; - left: 85%; - animation: spiral-in 3s ease-in-out infinite 1.3s; -} - -@keyframes spiral-in { - 0% { - transform: rotate(0deg) translateX(60px) rotate(0deg); - opacity: 1; - } - 100% { - transform: rotate(360deg) translateX(0px) rotate(-360deg); +@keyframes particle-orbit { + 0% { + transform: rotate(0deg) translateX(40px) rotate(0deg); opacity: 0; } -} - -.suction-effect { - position: absolute; - top: 50%; - left: 50%; - width: 180px; - height: 180px; - border: 2px solid rgba(138, 43, 226, 0.3); - border-radius: 50%; - transform: translate(-50%, -50%); - animation: suction-pulse 1.5s ease-in-out infinite; -} - -@keyframes suction-pulse { - 0%, 100% { - transform: translate(-50%, -50%) scale(1); - opacity: 0.3; + 10%, 90% { + opacity: 1; } - 50% { - transform: translate(-50%, -50%) scale(1.1); - opacity: 0.1; + 100% { + transform: rotate(360deg) translateX(40px) rotate(-360deg); + opacity: 0; } } @@ -228,19 +281,41 @@ a { } .cosmic-btn { - background: linear-gradient(45deg, #8a2be2, #4a0e4e); - border: 2px solid #8a2be2; - color: white; - padding: 12px 24px; + background: linear-gradient(135deg, + rgba(255, 165, 0, 0.1) 0%, + rgba(255, 140, 0, 0.2) 50%, + rgba(255, 100, 0, 0.1) 100%); + border: 2px solid rgba(255, 165, 0, 0.4); + color: #ffffff; + padding: 12px 20px; border-radius: 25px; cursor: pointer; - font-family: inherit; + font-size: 14px; font-weight: bold; + letter-spacing: 1px; transition: all 0.3s ease; + backdrop-filter: blur(10px); position: relative; overflow: hidden; - text-transform: uppercase; - letter-spacing: 1px; +} + +.cosmic-btn:hover { + background: linear-gradient(135deg, + rgba(255, 165, 0, 0.2) 0%, + rgba(255, 140, 0, 0.3) 50%, + rgba(255, 100, 0, 0.2) 100%); + border-color: rgba(255, 165, 0, 0.6); + box-shadow: 0 0 20px rgba(255, 165, 0, 0.3); + transform: translateY(-2px); +} + +.cosmic-btn.active { + background: linear-gradient(135deg, + rgba(255, 165, 0, 0.3) 0%, + rgba(255, 140, 0, 0.4) 50%, + rgba(255, 100, 0, 0.3) 100%); + border-color: rgba(255, 165, 0, 0.8); + box-shadow: 0 0 25px rgba(255, 165, 0, 0.5); } .cosmic-btn::before { @@ -250,7 +325,7 @@ a { left: -100%; width: 100%; height: 100%; - background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s; } @@ -258,48 +333,108 @@ a { left: 100%; } -.cosmic-btn:hover { - transform: translateY(-2px); - box-shadow: 0 5px 15px rgba(138, 43, 226, 0.4); +.status { + margin: 15px 0; + font-size: 12px; + font-family: 'Courier New', monospace; + color: rgba(255, 165, 0, 0.8); + min-height: 20px; + animation: status-pulse 2s ease-in-out infinite; } -.cosmic-btn.deactivate { - background: linear-gradient(45deg, #ff4757, #c44569); - border-color: #ff4757; +@keyframes status-pulse { + 0%, 100% { opacity: 0.8; } + 50% { opacity: 1; } } -.cosmic-btn.active { - animation: button-pulse 1s ease-in-out infinite; +.info { + margin-top: auto; + padding-top: 15px; + border-top: 1px solid rgba(255, 165, 0, 0.2); } -@keyframes button-pulse { +.reader-content-wrapper::-webkit-scrollbar { + width: 12px; + background: rgba(0, 0, 0, 0.8); +} + +.reader-content-wrapper::-webkit-scrollbar-thumb { + background: linear-gradient(45deg, #8a2be2, #ff1493); + border-radius: 6px; + box-shadow: 0 0 10px rgba(138, 43, 226, 0.8); +} + +.reader-content-wrapper::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.5); + border-radius: 6px; +} + +.reader-content ::selection { + background: rgba(138, 43, 226, 0.8); + color: #ffffff; + text-shadow: 0 0 10px rgba(138, 43, 226, 1); +} + +@keyframes cosmic-breathe { 0%, 100% { transform: scale(1); } - 50% { transform: scale(1.05); } + 50% { transform: scale(1.005); } } -.status { - font-size: 12px; - margin: 15px 0; - color: #8a2be2; - font-style: italic; +.reader-content.breathing { + animation: cosmic-breathe 8s ease-in-out infinite; } -.info { - margin-top: 15px; - font-size: 10px; - color: #666; +.galaxy-andromeda .nebula-clouds { + background: + radial-gradient(ellipse 800px 400px at 25% 30%, rgba(138, 43, 226, 0.15) 0%, transparent 60%), + radial-gradient(ellipse 600px 800px at 75% 70%, rgba(255, 20, 147, 0.12) 0%, transparent 50%); } -.black-hole.active { - animation: rotate 0.5s linear infinite, grow 2s ease-in-out; +.galaxy-milkyway .nebula-clouds { + background: + radial-gradient(ellipse 800px 400px at 25% 30%, rgba(255, 215, 0, 0.1) 0%, transparent 60%), + radial-gradient(ellipse 600px 800px at 75% 70%, rgba(255, 140, 0, 0.08) 0%, transparent 50%); } -.black-hole.active .suction-effect { - animation: suction-pulse 0.3s ease-in-out infinite; +.galaxy-whirlpool .nebula-clouds { + background: + radial-gradient(ellipse 800px 400px at 25% 30%, rgba(0, 191, 255, 0.12) 0%, transparent 60%), + radial-gradient(ellipse 600px 800px at 75% 70%, rgba(64, 224, 208, 0.1) 0%, transparent 50%); } -@keyframes grow { - 0% { transform: scale(1); } - 50% { transform: scale(1.2); } - 100% { transform: scale(1); } -} \ No newline at end of file +.cosmic-loading { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 100px; + height: 100px; + border: 3px solid rgba(138, 43, 226, 0.3); + border-top: 3px solid #8a2be2; + border-radius: 50%; + animation: cosmic-spin 2s linear infinite; + z-index: 10000; +} + +@keyframes cosmic-spin { + 0% { transform: translate(-50%, -50%) rotate(0deg); } + 100% { transform: translate(-50%, -50%) rotate(360deg); } +} + +.cosmic-tooltip { + position: absolute; + background: rgba(0, 0, 0, 0.9); + color: #ffffff; + padding: 8px 12px; + border-radius: 8px; + font-size: 12px; + border: 1px solid rgba(138, 43, 226, 0.5); + z-index: 10001; + pointer-events: none; + animation: tooltip-float 2s ease-in-out infinite alternate; +} + +@keyframes tooltip-float { + 0% { transform: translateY(0px); } + 100% { transform: translateY(-5px); } +} From 28e0d63870b3da9f6b2631a91c2b2d326249619c Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sat, 21 Jun 2025 02:28:08 +0530 Subject: [PATCH 11/12] Update popup.html for STARLAPSE V2 --- submissions/Starlapse/popup.html | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/submissions/Starlapse/popup.html b/submissions/Starlapse/popup.html index 436cd57e..b12230ee 100644 --- a/submissions/Starlapse/popup.html +++ b/submissions/Starlapse/popup.html @@ -3,12 +3,6 @@ - - - - - -
@@ -18,6 +12,7 @@
+
@@ -25,25 +20,22 @@
-
-
-
- Ready to consume light... + Ready to explore the cosmos...
@@ -53,4 +45,4 @@ - \ No newline at end of file + From 5fc401dff93eb22c931a45e163f3c4719de127f5 Mon Sep 17 00:00:00 2001 From: Raghav Karn Date: Sat, 21 Jun 2025 02:28:49 +0530 Subject: [PATCH 12/12] Update popup.js for STARLAPSE V2 --- submissions/Starlapse/popup.js | 184 ++++++++++++++++++--------------- 1 file changed, 99 insertions(+), 85 deletions(-) diff --git a/submissions/Starlapse/popup.js b/submissions/Starlapse/popup.js index 41356f88..15a3c160 100644 --- a/submissions/Starlapse/popup.js +++ b/submissions/Starlapse/popup.js @@ -1,99 +1,113 @@ -class BlackHoleController { - constructor() { - this.isActive = false; - this.activateBtn = document.getElementById('activate-btn'); - this.deactivateBtn = document.getElementById('deactivate-btn'); - this.status = document.getElementById('status'); - this.blackHole = document.querySelector('.black-hole'); - - this.init(); - } +document.addEventListener('DOMContentLoaded', function() { + const activateBtn = document.getElementById('activate-btn'); + const deactivateBtn = document.getElementById('deactivate-btn'); + const status = document.getElementById('status'); - init() { - this.activateBtn.addEventListener('click', () => this.activateBlackHole()); - this.deactivateBtn.addEventListener('click', () => this.deactivateBlackHole()); - - this.checkCurrentState(); + const statusMessages = { + ready: "Ready to explore the cosmos...", + activating: "Initializing galactic coordinates...", + active: "🌌 Galactic mode active", + deactivating: "Returning to Earth...", + error: "⚠️ Cosmic interference detected" + }; + + function updateStatus(message, type = 'normal') { + status.textContent = message; + status.className = `status ${type}`; } - async checkCurrentState() { - try { - const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); - const result = await chrome.tabs.sendMessage(tab.id, { action: 'checkState' }); - - if (result && result.isActive) { - this.showActiveState(); - } - } catch (error) { - console.log('Could not check state:', error); - } + function checkCurrentState() { + chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, {action: 'checkState'}, function(response) { + if (chrome.runtime.lastError) { + updateStatus(statusMessages.ready); + activateBtn.style.display = 'block'; + deactivateBtn.style.display = 'none'; + } else if (response && response.isActive) { + updateStatus(statusMessages.active, 'active'); + activateBtn.style.display = 'none'; + deactivateBtn.style.display = 'block'; + } else { + updateStatus(statusMessages.ready); + activateBtn.style.display = 'block'; + deactivateBtn.style.display = 'none'; + } + }); + }); } - async activateBlackHole() { - this.status.textContent = 'Initializing gravitational field...'; - this.blackHole.classList.add('active'); - this.activateBtn.classList.add('active'); + activateBtn.addEventListener('click', function() { + updateStatus(statusMessages.activating, 'loading'); - await this.sleep(1000); + chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, {action: 'activateGalacticMode'}, function(response) { + if (chrome.runtime.lastError) { + updateStatus(statusMessages.error, 'error'); + setTimeout(() => updateStatus(statusMessages.ready), 2000); + } else { + updateStatus(statusMessages.active, 'active'); + activateBtn.style.display = 'none'; + deactivateBtn.style.display = 'block'; + + triggerCosmicActivation(); + } + }); + }); + }); + + deactivateBtn.addEventListener('click', function() { + updateStatus(statusMessages.deactivating, 'loading'); - this.status.textContent = 'Sucking in photons...'; - await this.sleep(1000); + chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, {action: 'deactivateGalacticMode'}, function(response) { + updateStatus(statusMessages.ready); + activateBtn.style.display = 'block'; + deactivateBtn.style.display = 'none'; + }); + }); + }); + + function triggerCosmicActivation() { + const container = document.querySelector('.container'); + const effect = document.createElement('div'); + effect.style.cssText = ` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: radial-gradient(circle, rgba(138, 43, 226, 0.2) 0%, transparent 70%); + animation: cosmic-pulse 1.5s ease-out forwards; + pointer-events: none; + border-radius: 15px; + `; - this.status.textContent = 'Applying dark matter transformation...'; + const style = document.createElement('style'); + style.textContent = ` + @keyframes cosmic-pulse { + 0% { opacity: 0; transform: scale(0.8); } + 50% { opacity: 1; transform: scale(1.05); } + 100% { opacity: 0; transform: scale(1.2); } + } + `; + document.head.appendChild(style); - try { - const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); - await chrome.tabs.sendMessage(tab.id, { action: 'activateDarkMode' }); - - await this.sleep(1500); - - this.showActiveState(); - this.status.textContent = 'Reality successfully consumed! 🌑'; - - } catch (error) { - this.status.textContent = 'Error: Black hole collapsed! Please reload the tab... 💥'; - this.blackHole.classList.remove('active'); - this.activateBtn.classList.remove('active'); - } - } - - async deactivateBlackHole() { - this.status.textContent = 'Reversing spacetime...'; + container.appendChild(effect); - try { - const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); - await chrome.tabs.sendMessage(tab.id, { action: 'deactivateDarkMode' }); - - await this.sleep(1000); - - this.showInactiveState(); - this.status.textContent = 'Reality restored! ✨'; - - } catch (error) { - this.status.textContent = 'Error restoring reality! 🌪️'; - } + setTimeout(() => { + effect.remove(); + style.remove(); + }, 1500); } - showActiveState() { - this.isActive = true; - this.activateBtn.style.display = 'none'; - this.deactivateBtn.style.display = 'inline-block'; - this.blackHole.classList.add('active'); - } - - showInactiveState() { - this.isActive = false; - this.activateBtn.style.display = 'inline-block'; - this.deactivateBtn.style.display = 'none'; - this.blackHole.classList.remove('active'); - this.activateBtn.classList.remove('active'); - } + checkCurrentState(); - sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); + const blackHole = document.querySelector('.black-hole'); + if (blackHole) { + blackHole.addEventListener('click', function() { + chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, {action: 'triggerCosmicEvent', event: 'supernova'}); + }); + }); } -} - -document.addEventListener('DOMContentLoaded', () => { - new BlackHoleController(); -}); \ No newline at end of file +});