body { margin: 0; padding: 0; background-color: #000000; color: #5a5a8c; /* Muted purple/lavender */ font-family: Arial, Helvetica, sans-serif; /* Modern sans-serif */ display: flex; justify-content: center; align-items: center; height: 100vh; overflow: hidden; text-align: center; } .content { z-index: 10; font-size: 5vw; /* Responsive font size */ max-font-size: 70px; /* Max size */ font-weight: 500; /* Less bold */ text-shadow: 1px 1px 2px rgba(0,0,0,0.2); /* Softer shadow */ letter-spacing: 0.05em; opacity: 1; /* Initial opacity */ transition: opacity 0.7s ease-in-out; /* Smooth fade transition */ } .noise-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; pointer-events: none; /* Allows clicks to pass through if needed, though not relevant here */ } /* Scanlines Effect */ body::before { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: repeating-linear-gradient( #181818, /* Dark grey scanline color */ #181818 1px, /* Line color and thickness */ transparent 1px, transparent 4px /* Space between lines */ ); background-size: 100% 4px; opacity: 0.15; /* More visible */ z-index: 2; /* Above noise, below glyphs */ animation: scanlines 20s linear infinite; pointer-events: none; } @keyframes scanlines { 0% { background-position: 0 0; } 100% { background-position: 0 100px; } /* Adjust 100px for speed */ } /* Pulsating Glyphs */ .glyph-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 3; /* Above noise and scanlines, below content */ } .mysterious-glyph { position: absolute; font-size: 22px; /* Slightly larger */ color: rgba(90, 90, 140, 0.35); /* More visible base color */ opacity: 0; animation: pulseGlyph 8s infinite ease-in-out; /* Slightly faster pulse */ } .mysterious-glyph:nth-child(1) { top: 15%; left: 20%; animation-delay: 0s; } .mysterious-glyph:nth-child(2) { top: 70%; left: 80%; animation-delay: 2s; font-size: 25px; } .mysterious-glyph:nth-child(3) { top: 40%; left: 50%; animation-delay: 4s; } .mysterious-glyph:nth-child(4) { top: 85%; left: 10%; animation-delay: 6s; font-size: 18px; } .mysterious-glyph:nth-child(5) { top: 25%; left: 75%; animation-delay: 8s; } @keyframes pulseGlyph { 0%, 100% { opacity: 0; transform: scale(0.8); } 50% { opacity: 1; transform: scale(1); } } /* Vignette Effect */ body::after { /* Using ::after as ::before is for scanlines */ content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(ellipse at center, rgba(0,0,0,0.1) 40%, rgba(0,0,0,0.9) 100%); /* Stronger vignette */ z-index: 4; /* Above noise, scanlines, glyphs, but below bar and content */ pointer-events: none; } /* Text Glitch Effect */ .text-glitch-active { animation: textGlitch 0.2s linear; /* Slightly longer duration */ } @keyframes textGlitch { 0%, 100% { transform: skewX(0deg); text-shadow: 1px 1px 2px rgba(0,0,0,0.2); opacity: 1; } 25% { transform: skewX(-3deg); /* More skew */ text-shadow: 1px 1px 2px rgba(0,0,0,0.2), 2px -1px 0px rgba(255,0,255,0.5); /* More visible magenta */ opacity: 0.75; } 50% { transform: skewX(3deg); /* More skew */ text-shadow: 1px 1px 2px rgba(0,0,0,0.2), -2px 1px 0px rgba(0,255,255,0.5); /* More visible cyan */ opacity: 0.85; } 75% { transform: skewX(-1.5deg); /* More skew */ text-shadow: 1px 1px 2px rgba(0,0,0,0.2); opacity: 0.95; } } /* Shooting Stars Effect */ .shooting-stars-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; overflow: hidden; /* Important to hide stars before/after animation */ z-index: 3; /* Above noise & scanlines, same as glyphs or slightly above */ } .star { position: absolute; width: 2px; height: 2px; background-color: rgba(200, 200, 220, 0.6); /* Faint white/light grey */ border-radius: 50%; opacity: 0; animation: shootAcross linear infinite; } /* Define multiple stars with different delays, durations, and vertical positions */ .star:nth-child(1) { top: 20%; animation-duration: 5s; animation-delay: 0s; } .star:nth-child(2) { top: 40%; animation-duration: 7s; animation-delay: 1.5s; width: 3px; height: 3px;} .star:nth-child(3) { top: 60%; animation-duration: 4s; animation-delay: 3s; } .star:nth-child(4) { top: 80%; animation-duration: 6s; animation-delay: 4s; width: 1px; height: 1px;} .star:nth-child(5) { top: 30%; animation-duration: 8s; animation-delay: 5.5s; } .star:nth-child(6) { top: 50%; animation-duration: 5.5s; animation-delay: 2.5s; } .star:nth-child(7) { top: 10%; animation-duration: 6.5s; animation-delay: 0.5s; width: 1px; height: 1px; } .star:nth-child(8) { top: 90%; animation-duration: 4.5s; animation-delay: 3.8s; } .star:nth-child(9) { top: 5%; animation-duration: 7.5s; animation-delay: 6s; } .star:nth-child(10) { top: 65%; animation-duration: 5s; animation-delay: 1s; width: 3px; height: 3px; } .star:nth-child(11) { top: 75%; animation-duration: 9s; animation-delay: 4.2s; } .star:nth-child(12) { top: 25%; animation-duration: 6s; animation-delay: 7s; } @keyframes shootAcross { 0% { transform: translateX(-20px) translateY(calc(var(--random-y-offset, 0) * 1px)); /* Start off-screen left, with slight random Y variation */ opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { transform: translateX(calc(100vw + 20px)) translateY(calc(var(--random-y-offset, 0) * 1px)); /* End off-screen right */ opacity: 0; } } /* Meteor Effect */ .meteor { position: absolute; width: 3px; /* Head of the meteor - slightly thinner */ height: 3px; background-color: rgba(230, 230, 255, 0.95); /* Bright, slightly bluish white */ border-radius: 50%; box-shadow: 0 0 8px 2px rgba(220, 220, 255, 0.6); /* Glow */ opacity: 0; /* The animation will handle the rotation and translation */ animation: meteorFall 7s linear infinite; animation-delay: 1.5s; } .meteor::after { /* Tail of the meteor */ content: ''; position: absolute; top: 50%; /* Center vertically on the head */ left: 50%; /* Center horizontally on the head */ width: 80px; /* Tail length */ height: 1px; /* Tail thickness */ background: linear-gradient(to left, rgba(200, 200, 255, 0.5), transparent); /* Gradient from right (visible) to left (transparent) */ border-radius: 1px; transform-origin: 100% 50%; /* Rotate around the end point of the tail (connection to head) */ transform: translate(-100%, -50%); /* Position it so its right end is at the head's center, extending left */ /* No separate rotation here; it inherits rotation from .meteor's animation */ } @keyframes meteorFall { 0% { /* Start off-screen top-right, angled towards bottom-left */ transform: translateX(110vw) translateY(-30vh) rotate(135deg); /* 135deg makes it point bottom-left */ opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { /* End off-screen bottom-left */ transform: translateX(-30vw) translateY(110vh) rotate(135deg); opacity: 0; } } .animated-bar { position: fixed; bottom: 0; left: 0; width: 100%; height: 5px; /* Thin bar */ background-color: #1a1a1a; /* Dark base color for the bar */ overflow: hidden; /* To contain the shimmer */ z-index: 5; /* Above background effects, below main content */ } .animated-bar::after { content: ''; position: absolute; top: 0; left: -100%; /* Start off-screen to the left */ width: 50%; /* Width of the shimmer element */ height: 100%; background: linear-gradient(90deg, transparent, rgba(90, 90, 140, 0.5), transparent); /* Muted purple shimmer */ animation: shimmer 3s infinite linear; } @keyframes shimmer { 0% { left: -50%; /* Start position of the shimmer (width of shimmer element) */ } 100% { left: 100%; /* End position of the shimmer */ } } /* API Status Bar Styles */ .status-bar-container { position: fixed; top: 20px; /* Position from the top */ left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; /* Stack items vertically for smaller screens, or row for wider */ gap: 8px; /* Space between status items */ padding: 10px 15px; background-color: rgba(10, 10, 20, 0.85); /* Dark, slightly transparent background */ border: 1px solid rgba(90, 90, 140, 0.5); /* Muted purple border, matching glyphs */ border-radius: 6px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.5); z-index: 100; /* Ensure it's above other elements */ font-size: 12px; /* Smaller font for status bar */ color: #c0c0e0; /* Light lavender text */ min-width: 250px; /* Minimum width */ max-width: 90%; } .status-item { display: flex; justify-content: space-between; align-items: center; gap: 10px; } .status-label { font-weight: 500; color: #a0a0c0; /* Slightly darker label color */ text-transform: uppercase; letter-spacing: 0.5px; } .status-indicator { padding: 3px 8px; border-radius: 4px; font-weight: bold; text-align: center; min-width: 80px; /* Ensure indicators have a consistent width */ transition: background-color 0.3s ease, color 0.3s ease; } .status-indicator.operational { background-color: rgba(0, 128, 0, 0.3); /* Greenish background */ color: #32cd32; /* Lime Green */ border: 1px solid #32cd32; } .status-indicator.offline { background-color: rgba(139, 0, 0, 0.3); /* Dark Reddish background */ color: #dc143c; /* Crimson */ border: 1px solid #dc143c; } .status-indicator.error { background-color: rgba(255, 165, 0, 0.3); /* Orangeish background */ color: #ffa500; /* Orange */ border: 1px solid #ffa500; } .status-indicator.checking { background-color: rgba(70, 70, 90, 0.3); /* Bluish-grey background */ color: #87cefa; /* Light Sky Blue */ border: 1px solid #87cefa; animation: pulseChecking 1.5s infinite ease-in-out; } @keyframes pulseChecking { 0%, 100% { opacity: 0.7; } 50% { opacity: 1; } } /* Responsive adjustments for the status bar if needed */ @media (min-width: 600px) { .status-bar-container { flex-direction: row; /* Horizontal layout on wider screens */ gap: 20px; } }