diff --git a/apply_cyberpunk.py b/apply_cyberpunk.py new file mode 100644 index 0000000..477bf5b --- /dev/null +++ b/apply_cyberpunk.py @@ -0,0 +1,66 @@ +import re +import os + +# 1. Update style.css +with open('style.css', 'a') as f: + f.write(''' +/* === CRT / CYBERPUNK OVERLAY === */ +.crt-overlay { + position: fixed; + inset: 0; + z-index: 9999; + pointer-events: none; + background: + linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.15) 50%), + linear-gradient(90deg, rgba(255, 0, 0, 0.04), rgba(0, 255, 0, 0.02), rgba(0, 0, 255, 0.04)); + background-size: 100% 4px, 4px 100%; + animation: flicker 0.15s infinite; + box-shadow: inset 0 0 100px rgba(0,0,0,0.9); +} + +@keyframes flicker { + 0% { opacity: 0.95; } + 50% { opacity: 1; } + 100% { opacity: 0.98; } +} + +.crt-overlay::after { + content: " "; + display: block; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: rgba(18, 16, 16, 0.1); + opacity: 0; + z-index: 999; + pointer-events: none; + animation: crt-pulse 4s linear infinite; +} + +@keyframes crt-pulse { + 0% { opacity: 0.05; } + 50% { opacity: 0.15; } + 100% { opacity: 0.05; } +} +''') + +# 2. Update index.html +if os.path.exists('index.html'): + with open('index.html', 'r') as f: + html = f.read() + if '
' not in html: + html = html.replace('', '
\n') + with open('index.html', 'w') as f: + f.write(html) + +# 3. Update app.js UnrealBloomPass +if os.path.exists('app.js'): + with open('app.js', 'r') as f: + js = f.read() + new_js = re.sub(r'UnrealBloomPass\([^,]+,\s*0\.6\s*,', r'UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight), 1.5,', js) + with open('app.js', 'w') as f: + f.write(new_js) + +print("Applied Cyberpunk Overhaul!") diff --git a/index.html b/index.html index 795f24e..e5f82b4 100644 --- a/index.html +++ b/index.html @@ -52,5 +52,6 @@
+
diff --git a/style.css b/style.css index 7dae8ca..8ccbc2d 100644 --- a/style.css +++ b/style.css @@ -183,3 +183,44 @@ body.photo-mode #overview-indicator { 40% { opacity: 1; transform: translate(-50%, -50%) scale(1); } 100% { opacity: 0; transform: translate(-50%, -50%) scale(1); } } + +/* === CRT / CYBERPUNK OVERLAY === */ +.crt-overlay { + position: fixed; + inset: 0; + z-index: 9999; + pointer-events: none; + background: + linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.15) 50%), + linear-gradient(90deg, rgba(255, 0, 0, 0.04), rgba(0, 255, 0, 0.02), rgba(0, 0, 255, 0.04)); + background-size: 100% 4px, 4px 100%; + animation: flicker 0.15s infinite; + box-shadow: inset 0 0 100px rgba(0,0,0,0.9); +} + +@keyframes flicker { + 0% { opacity: 0.95; } + 50% { opacity: 1; } + 100% { opacity: 0.98; } +} + +.crt-overlay::after { + content: " "; + display: block; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: rgba(18, 16, 16, 0.1); + opacity: 0; + z-index: 999; + pointer-events: none; + animation: crt-pulse 4s linear infinite; +} + +@keyframes crt-pulse { + 0% { opacity: 0.05; } + 50% { opacity: 0.15; } + 100% { opacity: 0.05; } +}