diff --git a/IDEAS.md b/archive/IDEAS.md similarity index 100% rename from IDEAS.md rename to archive/IDEAS.md diff --git a/index.html b/index.html index 122bee5..f34c892 100644 --- a/index.html +++ b/index.html @@ -167,6 +167,7 @@ linear-gradient(60deg, transparent 0%, transparent 68%, rgba(255,255,255,0.03) 68.5%, transparent 69%), repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0,0,0,0.6) 2px, rgba(0,0,0,0.6) 3px); pointer-events: none; + z-index: 2; } /* Flickering scanlines */ @@ -180,6 +181,7 @@ background: repeating-linear-gradient(0deg, transparent, transparent 1px, rgba(0,0,0,0.5) 1px, rgba(0,0,0,0.5) 2px); pointer-events: none; animation: flicker 4s infinite; + z-index: 3; } @keyframes flicker { @@ -189,6 +191,228 @@ 52% { opacity: 0.7; } } + /* ======================================== + DISPLAY GLITCH EFFECTS - START + Random visual glitches for dystopian aesthetic + ======================================== */ + + /* RGB Chromatic Aberration Glitch */ + .display.glitch-rgb .display-text-inner, + .display.glitch-rgb .time-display { + animation: rgbGlitch 0.08s steps(2) infinite; + } + + @keyframes rgbGlitch { + 0% { + text-shadow: + -2px 0 #ff0000, + 2px 0 #00ffff, + 0 0 10px #00ff00, + 0 0 20px #00ff00; + transform: translateX(-1px); + } + 50% { + text-shadow: + 2px 0 #ff0000, + -2px 0 #00ffff, + 0 0 10px #00ff00, + 0 0 20px #00ff00; + transform: translateX(1px); + } + 100% { + text-shadow: + -1px 0 #ff0000, + 1px 0 #00ffff, + 0 0 10px #00ff00, + 0 0 20px #00ff00; + transform: translateX(0); + } + } + + /* Intermittent Display Failure (Blackout) */ + .display.blackout { + filter: brightness(0); + } + + .display.blackout .display-text, + .display.blackout .display-text-inner, + .display.blackout .time-display { + opacity: 0 !important; + text-shadow: none !important; + } + + /* VHS Tracking Lines Overlay */ + .vhs-tracking { + position: absolute; + top: 0; + left: 0; + pointer-events: none; + opacity: 0; + z-index: 15; + } + + /* Vertical tracking (default) - lines scroll up */ + .vhs-tracking.vertical { + right: 0; + bottom: auto; + width: 100%; + height: 200%; + background: repeating-linear-gradient( + 0deg, + transparent 0px, + transparent 8px, + rgba(255, 255, 255, 0.06) 8px, + rgba(255, 255, 255, 0.06) 12px, + transparent 12px, + transparent 25px, + rgba(0, 255, 0, 0.03) 25px, + rgba(0, 255, 0, 0.03) 28px + ); + } + + /* Horizontal tracking - lines scroll left */ + .vhs-tracking.horizontal { + bottom: 0; + right: auto; + width: 200%; + height: 100%; + background: repeating-linear-gradient( + 90deg, + transparent 0px, + transparent 8px, + rgba(255, 255, 255, 0.06) 8px, + rgba(255, 255, 255, 0.06) 12px, + transparent 12px, + transparent 25px, + rgba(0, 255, 0, 0.03) 25px, + rgba(0, 255, 0, 0.03) 28px + ); + } + + .vhs-tracking.active.vertical { + opacity: 1; + animation: vhsScrollVertical 0.4s linear; + } + + .vhs-tracking.active.horizontal { + opacity: 1; + animation: vhsScrollHorizontal 0.4s linear; + } + + @keyframes vhsScrollVertical { + from { transform: translateY(-50%); } + to { transform: translateY(0); } + } + + @keyframes vhsScrollHorizontal { + from { transform: translateX(-50%); } + to { transform: translateX(0); } + } + + /* Dim Spots - worn/aged phosphor effect on CRT */ + .dim-spots-container { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + pointer-events: none; + z-index: 20; + overflow: hidden; + } + + .dim-spot { + position: absolute; + pointer-events: none; + will-change: transform; + } + + /* Individual spot styles and animations */ + .dim-spot-1 { + top: 10%; + left: 0%; + width: 50%; + height: 60%; + background: radial-gradient(ellipse 70% 75% at center, rgba(0, 0, 0, 0.55) 0%, transparent 70%); + animation: dimSpotDrift1 45s ease-in-out infinite; + } + + .dim-spot-2 { + top: 5%; + right: 0%; + width: 40%; + height: 50%; + background: radial-gradient(ellipse 75% 80% at center, rgba(0, 0, 0, 0.4) 0%, transparent 65%); + animation: dimSpotDrift2 55s ease-in-out infinite; + } + + .dim-spot-3 { + bottom: 5%; + left: 10%; + width: 35%; + height: 45%; + background: radial-gradient(ellipse 70% 75% at center, rgba(0, 0, 0, 0.45) 0%, transparent 60%); + animation: dimSpotDrift3 50s ease-in-out infinite; + } + + .dim-spot-4 { + bottom: 0%; + right: 0%; + width: 45%; + height: 55%; + background: radial-gradient(ellipse 80% 90% at center, rgba(0, 0, 0, 0.5) 0%, transparent 65%); + animation: dimSpotDrift4 60s ease-in-out infinite; + } + + .dim-spot-5 { + top: 35%; + left: 55%; + width: 30%; + height: 35%; + background: radial-gradient(circle at center, rgba(0, 0, 0, 0.35) 0%, transparent 60%); + animation: dimSpotDrift5 40s ease-in-out infinite; + } + + /* Slow drifting animations - each spot moves in a different pattern */ + @keyframes dimSpotDrift1 { + 0%, 100% { transform: translate(0%, 0%); } + 25% { transform: translate(8%, 5%); } + 50% { transform: translate(5%, -8%); } + 75% { transform: translate(-5%, 3%); } + } + + @keyframes dimSpotDrift2 { + 0%, 100% { transform: translate(0%, 0%); } + 25% { transform: translate(-10%, 6%); } + 50% { transform: translate(-5%, 10%); } + 75% { transform: translate(5%, -5%); } + } + + @keyframes dimSpotDrift3 { + 0%, 100% { transform: translate(0%, 0%); } + 25% { transform: translate(6%, -8%); } + 50% { transform: translate(12%, -3%); } + 75% { transform: translate(-4%, -10%); } + } + + @keyframes dimSpotDrift4 { + 0%, 100% { transform: translate(0%, 0%); } + 25% { transform: translate(-8%, -6%); } + 50% { transform: translate(-12%, 4%); } + 75% { transform: translate(4%, -8%); } + } + + @keyframes dimSpotDrift5 { + 0%, 100% { transform: translate(0%, 0%); } + 25% { transform: translate(-15%, 10%); } + 50% { transform: translate(10%, 15%); } + 75% { transform: translate(15%, -10%); } + } + + /* ======================================== + DISPLAY GLITCH EFFECTS - END + ======================================== */ + /* Track name text - scrolls when playing (JS controlled) */ .display-text { color: #00ff00; @@ -1066,7 +1290,17 @@ -