From c6f8488ffed07f54d4cb35e469789a4a17febd19 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 10 Mar 2026 22:02:15 +0000 Subject: [PATCH] Transform site into retro 90s terminal with CRT effects Complete redesign featuring: - Terminal window UI with titlebar, ASCII separators, command prompt - 4 color themes: Green Phosphor, Amber Monitor, Hacker (Matrix rain), 90s Web - CRT effects: scanlines, vignette, flicker, chromatic aberration, glow - Boot sequence animation on first visit (skipped on reload) - Matrix rain canvas for hacker theme - Typewriter effect, blinking cursor, random glitch effect - Retro elements: visitor counter, under construction bar, marquee text - Easter eggs: Konami code, clickable nut ASCII art - Full mobile responsiveness (full-bleed terminal on small screens) - Accessibility: prefers-reduced-motion support, ARIA labels, keyboard nav - Bilingual PL/EN preserved with terminal-styled translations - Mastodon feed with terminal quote styling https://claude.ai/code/session_01EER32WuQoBiDvQCKqaw2XT --- index.html | 1726 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 1151 insertions(+), 575 deletions(-) diff --git a/index.html b/index.html index 7a8c156..6a4ff01 100644 --- a/index.html +++ b/index.html @@ -1,7 +1,5 @@ - - - + @@ -18,645 +16,1223 @@ - - - - + - + -
-
-
+ +
+
+
-
- - - -
+ + -
- - -
+ +
-
- -

- Paulina i PaweΕ‚ Orzech -

-

+ +
+ +
-
-

- © 2025 Paulina i PaweΕ‚ Orzech. Wszelkie prawa zastrzeΕΌone. - - GitHub - 🌰 -

-
+ +
+ > +

Paulina i PaweΕ‚ Orzech

+ +
- + glitchTimer = setTimeout(doGlitch, 5000); +} + +/* --- Easter Eggs --- */ + +// Konami code +const konamiSequence = ['ArrowUp','ArrowUp','ArrowDown','ArrowDown','ArrowLeft','ArrowRight','ArrowLeft','ArrowRight','KeyB','KeyA']; +let konamiIndex = 0; + +function initKonamiCode() { + document.addEventListener('keydown', (e) => { + if (e.code === konamiSequence[konamiIndex]) { + konamiIndex++; + if (konamiIndex === konamiSequence.length) { + konamiIndex = 0; + triggerKonamiEasterEgg(); + } + } else { + konamiIndex = 0; + } + }); +} + +function triggerKonamiEasterEgg() { + const flash = document.createElement('div'); + flash.style.cssText = 'position:fixed;inset:0;z-index:10003;pointer-events:none;animation:konami-flash 1.5s ease forwards;'; + document.body.appendChild(flash); + setTimeout(() => flash.remove(), 1500); + + // Show a secret message + const msg = document.createElement('div'); + msg.style.cssText = `position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10004; + font-family:'Press Start 2P',monospace;font-size:1.2rem;color:#ff00ff;text-align:center; + text-shadow:0 0 20px #ff00ff,0 0 40px #ff00ff;pointer-events:none;`; + msg.innerHTML = 'β˜… KONAMI CODE ACTIVATED β˜…

YOU FOUND THE SECRET!

🌰🌰🌰'; + document.body.appendChild(msg); + setTimeout(() => msg.remove(), 3000); +} + +// Nut easter egg +function initNutEasterEgg() { + const nutBtn = document.getElementById('nut-btn'); + const nutOverlay = document.getElementById('nut-overlay'); + const nutClose = document.getElementById('nut-close'); + + nutBtn.addEventListener('click', () => nutOverlay.classList.remove('hidden')); + nutBtn.addEventListener('keydown', (e) => { + if (e.key === 'Enter' || e.key === ' ') nutOverlay.classList.remove('hidden'); + }); + + nutClose.addEventListener('click', () => nutOverlay.classList.add('hidden')); + nutOverlay.addEventListener('click', (e) => { + if (e.target === nutOverlay) nutOverlay.classList.add('hidden'); + }); + document.addEventListener('keydown', (e) => { + if (e.key === 'Escape') nutOverlay.classList.add('hidden'); + }); +} + +/* --- Resize handler for matrix rain --- */ +function handleResize() { + const canvas = document.getElementById('matrix-canvas'); + if (!canvas.classList.contains('hidden')) { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + } +} + +/* --- Initialize Everything --- */ +window.addEventListener('load', async () => { + // Run boot sequence (handles skip logic internally) + await runBootSequence(); + + // Init theme + const savedTheme = localStorage.getItem('theme') || 'green'; + document.documentElement.setAttribute('data-theme', savedTheme); + document.querySelectorAll('.theme-btn').forEach(btn => { + btn.classList.toggle('active', btn.dataset.theme === savedTheme); + }); + if (savedTheme === 'hacker') { + document.getElementById('matrix-canvas').classList.remove('hidden'); + startMatrixRain(); + } + + // Init language + const savedLang = localStorage.getItem('language') || 'pl'; + setLanguage(savedLang); + + // Init clock + updateTimeDisplay(); + setInterval(updateTimeDisplay, 1000); + + // Init visitor counter + initVisitorCounter(); + + // Fetch Mastodon feed + fetchMastodonFeed(); + + // Theme buttons + document.querySelectorAll('.theme-btn').forEach(btn => { + btn.addEventListener('click', () => setTheme(btn.dataset.theme)); + }); + + // Language buttons + document.querySelectorAll('.lang-btn').forEach(btn => { + btn.addEventListener('click', () => setLanguage(btn.dataset.lang)); + }); + + // Easter eggs + initKonamiCode(); + initNutEasterEgg(); + + // Glitch effect + startGlitchEffect(); + + // Resize + window.addEventListener('resize', handleResize); +}); + - \ No newline at end of file +