/* AHole Loader Styles - Adapted from CodePen */ .a-hole-loader { width: 100%; height: 100%; background: #141414; } a-hole { position: absolute; top: 0; left: 0; margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; } a-hole::before { position: absolute; top: 50%; left: 50%; z-index: 2; display: block; width: 150%; height: 140%; background: radial-gradient(ellipse at 50% 55%, transparent 10%, black 50%); transform: translate3d(-50%, -50%, 0); content: ""; } a-hole::after { position: absolute; top: 50%; left: 50%; z-index: 5; display: block; width: 100%; height: 100%; background: radial-gradient(ellipse at 50% 75%, #a900ff 20%, transparent 75%); mix-blend-mode: overlay; transform: translate3d(-50%, -50%, 0); content: ""; } @keyframes aura-glow { 0% { background-position: 0 100%; } 100% { background-position: 0 300%; } } a-hole .aura { position: absolute; top: -71.5%; left: 50%; z-index: 3; width: 30%; height: 140%; background: linear-gradient(20deg, #00f8f1, #ffbd1e20 16.5%, #fe848f 33%, #fe848f20 49.5%, #00f8f1 66%, #00f8f160 85.5%, #ffbd1e 100%) 0 100% / 100% 200%; border-radius: 0 0 100% 100%; filter: blur(50px); mix-blend-mode: plus-lighter; opacity: 0.75; transform: translate3d(-50%, 0, 0); animation: aura-glow 5s infinite linear; } a-hole .overlay { position: absolute; top: 0; left: 0; z-index: 10; width: 100%; height: 100%; background: repeating-linear-gradient(transparent, transparent 1px, white 1px, white 2px); mix-blend-mode: overlay; opacity: 0.5; } a-hole canvas { display: block; width: 100%; height: 100%; } /* Loading Screen Integration */ .loading-screen { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: #141414; z-index: 9999; display: flex; flex-direction: column; align-items: center; justify-content: center; } .loading-content { position: relative; z-index: 10; text-align: center; color: white; margin-bottom: 40px; } .loading-title { font-size: 2.5rem; font-weight: 700; margin-bottom: 16px; background: linear-gradient(45deg, #00f8f1, #a900ff, #fe848f); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; animation: gradient-shift 3s ease-in-out infinite; } .loading-subtitle { font-size: 1rem; color: rgba(255, 255, 255, 0.7); font-weight: 400; } .a-hole-container { width: 100vw; height: 100vh; position: absolute; top: 0; left: 0; } @keyframes gradient-shift { 0%, 100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } } /* Pixelated Loading Indicator - Bottom Left */ .pixelated-loading { position: absolute; bottom: 40px; left: 40px; z-index: 15; display: flex; align-items: center; gap: 12px; font-family: 'Courier New', monospace; } .loading-dots { display: flex; gap: 4px; } .dot { width: 8px; height: 8px; background: #00f8f1; border-radius: 0; /* Pixelated - no rounded corners */ animation: pixel-pulse 1.2s ease-in-out infinite; box-shadow: 0 0 4px #00f8f1; transition: background 0.3s ease, box-shadow 0.3s ease; } .dot:nth-child(1) { animation-delay: 0s; } .dot:nth-child(2) { animation-delay: 0.3s; } .dot:nth-child(3) { animation-delay: 0.6s; } .dot:nth-child(4) { animation-delay: 0.9s; } .loading-text { color: #00f8f1; font-size: 12px; font-weight: bold; letter-spacing: 2px; text-shadow: 0 0 8px #00f8f1; animation: text-flicker 2s ease-in-out infinite; transition: color 0.3s ease, text-shadow 0.3s ease; } @keyframes pixel-pulse { 0%, 100% { opacity: 0.3; transform: scale(1); } 50% { opacity: 1; transform: scale(1.2); } } @keyframes text-flicker { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } } /* Responsive adjustments */ @media (max-width: 768px) { .loading-title { font-size: 2rem; } .loading-subtitle { font-size: 0.9rem; } .pixelated-loading { bottom: 20px; left: 20px; } .dot { width: 6px; height: 6px; } .loading-text { font-size: 10px; } }