/* ============================================================ DIGITAL SPACEPORT ARCADE — synthwave theme ============================================================ */ :root { --bg: #0a0118; --bg2: #12002e; --pink: #ff2d95; --cyan: #7df9ff; --purple: #9d7dff; --yellow: #ffe14d; --green: #7dff5e; --red: #ff4d6d; --orange: #ff9d2d; --text: #e8e0ff; --dim: #8a7fb5; } * { margin: 0; padding: 0; box-sizing: border-box; } html, body { min-height: 100%; background: var(--bg); color: var(--text); font-family: "Press Start 2P", monospace; overflow-x: hidden; } /* ---------- Sky ---------- */ .sky { position: fixed; inset: 0; z-index: -1; background: linear-gradient(180deg, #05010d 0%, #12002e 30%, #2d0a4e 55%, #4a1259 70%, #7a1e5c 82%, #c23a6b 92%, #ff6b6b 100%); overflow: hidden; } .stars { position: absolute; inset: 0; } .star { position: absolute; border-radius: 50%; animation: twinkle 2s ease-in-out infinite; } @keyframes twinkle { 0%, 100% { opacity: 0.3; } 50% { opacity: 1; } } .sun { position: absolute; left: 50%; top: 16%; width: 340px; height: 340px; transform: translateX(-50%); border-radius: 50%; background: linear-gradient(180deg, #ffe14d 0%, #ff9d2d 35%, #ff2d95 70%, #9d7dff 100%); box-shadow: 0 0 120px 40px rgba(255, 45, 149, 0.45); -webkit-mask-image: repeating-linear-gradient(180deg, #000 0 14px, transparent 14px 20px); mask-image: repeating-linear-gradient(180deg, #000 0 14px, transparent 14px 20px); animation: sunpulse 4s ease-in-out infinite; } @keyframes sunpulse { 0%, 100% { box-shadow: 0 0 120px 40px rgba(255,45,149,0.45); } 50% { box-shadow: 0 0 160px 60px rgba(255,45,149,0.6); } } .grid-floor { position: absolute; left: -50%; right: -50%; bottom: -10%; height: 55%; background: linear-gradient(180deg, transparent 0%, rgba(255,45,149,0.25) 100%), repeating-linear-gradient(90deg, rgba(125,249,255,0.5) 0 2px, transparent 2px 80px), repeating-linear-gradient(0deg, rgba(125,249,255,0.5) 0 2px, transparent 2px 60px); transform: perspective(400px) rotateX(62deg); transform-origin: top center; animation: gridmove 2.2s linear infinite; } @keyframes gridmove { from { background-position: 0 0, 0 0, 0 0; } to { background-position: 0 0, 0 0, 0 60px; } } /* ---------- Hero ---------- */ .hero { text-align: center; padding: 70px 20px 40px; position: relative; } .badge { display: inline-block; font-size: 9px; color: var(--cyan); border: 1px solid var(--cyan); padding: 8px 14px; letter-spacing: 2px; margin-bottom: 28px; background: rgba(125,249,255,0.06); box-shadow: 0 0 18px rgba(125,249,255,0.25); } .title { line-height: 1.25; margin-bottom: 22px; } .title span { display: block; } .t1 { font-size: clamp(26px, 6vw, 54px); color: var(--cyan); text-shadow: 0 0 12px var(--cyan), 0 0 40px rgba(125,249,255,0.5); } .t2 { font-size: clamp(30px, 7.5vw, 68px); color: var(--pink); text-shadow: 0 0 14px var(--pink), 0 0 50px rgba(255,45,149,0.6); } .t3 { font-size: clamp(26px, 6vw, 54px); color: var(--yellow); text-shadow: 0 0 12px var(--yellow), 0 0 40px rgba(255,225,77,0.5); } .tagline { font-size: clamp(8px, 1.6vw, 11px); color: var(--dim); letter-spacing: 2px; margin-bottom: 26px; } .blink { font-size: clamp(10px, 2vw, 14px); color: var(--yellow); animation: blinker 1.1s steps(1) infinite; text-shadow: 0 0 10px rgba(255,225,77,0.7); } @keyframes blinker { 50% { opacity: 0; } } /* ---------- Cards ---------- */ .cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 30px; max-width: 1200px; margin: 30px auto 60px; padding: 0 24px; } .card { display: block; text-decoration: none; color: inherit; background: linear-gradient(160deg, rgba(18,0,46,0.92), rgba(45,10,78,0.85)); border: 2px solid rgba(157,125,255,0.35); box-shadow: 0 0 0 rgba(255,45,149,0); transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease; position: relative; overflow: hidden; } .card::before { content: ''; position: absolute; inset: 0; background: linear-gradient(120deg, transparent 30%, rgba(255,255,255,0.06) 50%, transparent 70%); transform: translateX(-100%); transition: transform 0.6s ease; pointer-events: none; } .card:hover::before { transform: translateX(100%); } .card:hover { border-color: var(--pink); box-shadow: 0 0 30px rgba(255,45,149,0.45), 0 0 60px rgba(125,249,255,0.15); } .thumb { position: relative; aspect-ratio: 4 / 3; background: #05010d; border-bottom: 2px solid rgba(157,125,255,0.35); overflow: hidden; } .thumb img { width: 100%; height: 100%; object-fit: cover; image-rendering: pixelated; display: block; transition: transform 0.4s ease; } .card:hover .thumb img { transform: scale(1.06); } .thumb-glow { position: absolute; inset: 0; background: radial-gradient(circle at 50% 120%, rgba(255,45,149,0.35), transparent 60%); opacity: 0; transition: opacity 0.3s ease; pointer-events: none; } .card:hover .thumb-glow { opacity: 1; } .card-body { padding: 20px; } .card-body h2 { font-size: 15px; color: var(--cyan); text-shadow: 0 0 10px rgba(125,249,255,0.6); margin-bottom: 12px; letter-spacing: 1px; } .desc { font-size: 9px; line-height: 1.8; color: var(--dim); margin-bottom: 14px; } .meta { display: flex; justify-content: space-between; gap: 10px; font-size: 7px; margin-bottom: 16px; flex-wrap: wrap; } .diff { color: var(--orange); } .ctrl { color: var(--purple); } .play { font-size: 11px; color: var(--yellow); text-shadow: 0 0 8px rgba(255,225,77,0.6); transition: letter-spacing 0.25s ease; } .card:hover .play { letter-spacing: 3px; } /* ---------- Footer ---------- */ .footer { text-align: center; padding: 30px 20px 50px; border-top: 1px solid rgba(157,125,255,0.2); margin: 0 24px; } .controls-legend { display: flex; justify-content: center; gap: 26px; flex-wrap: wrap; font-size: 8px; color: var(--dim); margin-bottom: 18px; } .credit { font-size: 8px; color: var(--dim); letter-spacing: 1px; } .neon { color: var(--pink); text-shadow: 0 0 8px rgba(255,45,149,0.8); } /* ---------- Game pages ---------- */ .game-page { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 18px; padding: 20px; background: radial-gradient(ellipse at 50% 0%, #1a0533 0%, #05010d 70%); } .game-top { display: flex; align-items: center; gap: 18px; width: 100%; max-width: 840px; } .back { font-family: "Press Start 2P", monospace; font-size: 9px; color: var(--cyan); text-decoration: none; border: 1px solid var(--cyan); padding: 10px 14px; background: rgba(125,249,255,0.05); transition: background 0.2s, box-shadow 0.2s; white-space: nowrap; } .back:hover { background: rgba(125,249,255,0.15); box-shadow: 0 0 14px rgba(125,249,255,0.4); } .game-title { font-size: clamp(12px, 3vw, 18px); color: var(--pink); text-shadow: 0 0 12px rgba(255,45,149,0.7); letter-spacing: 2px; } canvas#game { width: min(840px, 96vw); height: auto; aspect-ratio: 4 / 3; image-rendering: pixelated; border: 3px solid rgba(157,125,255,0.5); box-shadow: 0 0 40px rgba(157,125,255,0.25), inset 0 0 60px rgba(0,0,0,0.5); background: #05010d; } .game-hint { font-size: 8px; color: var(--dim); letter-spacing: 1px; text-align: center; line-height: 2; } @media (max-width: 600px) { .cards { grid-template-columns: 1fr; } .game-top { flex-direction: column; gap: 10px; } }