/* ============ Bun: The Great Migration — shared styles ============ */ :root { --bun-cream: #fbf0df; --bun-shadow: #f6dece; --rust-orange: #f5772d; --rust-deep: #b7410e; --zig-yellow: #f7a41d; --zig-dark: #8a5a00; --ink: #1c1917; --panel: #26221f; --panel-2: #332d28; --paper: #fffaf0; --good: #4ade80; --bad: #f87171; --font-ui: 'Nunito', system-ui, -apple-system, sans-serif; --font-mono: 'JetBrains Mono', ui-monospace, monospace; } * { box-sizing: border-box; margin: 0; padding: 0; } html, body { min-height: 100%; font-family: var(--font-ui); background: var(--ink); color: var(--paper); } /* ---------- page frame used by both screens ---------- */ .frame { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 24px; position: relative; overflow: hidden; } /* floating code tokens in the background */ .bg-tokens { position: absolute; inset: 0; pointer-events: none; overflow: hidden; z-index: 0; } .bg-tokens span { position: absolute; font-family: var(--font-mono); font-size: 14px; opacity: 0.14; white-space: nowrap; animation: drift linear infinite; } @keyframes drift { from { transform: translateX(105vw); } to { transform: translateX(-120%); } } /* ---------- title screen ---------- */ .title-wrap { position: relative; z-index: 1; max-width: 780px; width: 100%; text-align: center; } .logo-row { display: flex; align-items: center; justify-content: center; gap: 18px; margin-bottom: 10px; animation: bob 3.2s ease-in-out infinite; } @keyframes bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } .logo-bun { width: 120px; height: auto; filter: drop-shadow(0 12px 24px rgba(0,0,0,.45)); } .logo-word { font-size: clamp(56px, 10vw, 92px); font-weight: 900; letter-spacing: -0.03em; line-height: 1; } .subtitle { font-family: var(--font-mono); color: var(--zig-yellow); font-size: clamp(14px, 2.4vw, 19px); letter-spacing: 0.12em; margin-bottom: 22px; } .subtitle .arrow { color: var(--rust-orange); } .story { background: rgba(38, 34, 31, 0.85); border: 1px solid rgba(255, 250, 240, 0.12); border-radius: 16px; padding: 20px 24px; font-size: 16px; line-height: 1.65; color: #e7e0d4; margin-bottom: 26px; text-align: left; } .story b.zig { color: var(--zig-yellow); } .story b.rust { color: var(--rust-orange); } .story .mono { font-family: var(--font-mono); font-size: 14px; } .start-btn { display: inline-block; font-family: var(--font-ui); font-weight: 900; font-size: 22px; color: #fff; background: linear-gradient(180deg, var(--rust-orange), var(--rust-deep)); border: none; border-radius: 14px; padding: 16px 44px; cursor: pointer; box-shadow: 0 8px 0 #7c2d08, 0 16px 32px rgba(0,0,0,.4); transition: transform .08s ease, box-shadow .08s ease; } .start-btn:hover { transform: translateY(2px); box-shadow: 0 6px 0 #7c2d08, 0 12px 24px rgba(0,0,0,.4); } .start-btn:active { transform: translateY(6px); box-shadow: 0 2px 0 #7c2d08; } .controls-card { margin-top: 28px; display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; } .key { font-family: var(--font-mono); font-size: 13px; background: var(--panel); border: 1px solid rgba(255,250,240,.18); border-bottom-width: 3px; border-radius: 8px; padding: 7px 12px; color: #d8cfc0; } .key b { color: #fff; } /* little bees patrolling the title screen */ .bee-flier { position: absolute; width: 46px; z-index: 1; pointer-events: none; animation: flyBy linear infinite; filter: drop-shadow(0 6px 8px rgba(0,0,0,.4)); } .bee-flier.top { top: 12%; animation-duration: 14s; } .bee-flier.bot { bottom: 14%; animation-duration: 19s; animation-delay: -8s; transform: scaleX(-1); } @keyframes flyBy { 0% { left: -80px; margin-top: 0; } 25% { margin-top: -22px; } 50% { margin-top: 14px; } 75% { margin-top: -12px; } 100% { left: 105vw; margin-top: 0; } } /* ---------- game screen ---------- */ .game-shell { position: relative; z-index: 1; width: min(960px, 100%); } .canvas-wrap { position: relative; border-radius: 16px; overflow: hidden; border: 3px solid #000; box-shadow: 0 24px 60px rgba(0,0,0,.55), 0 0 0 2px rgba(255,250,240,.08); background: #0e1a2f; } canvas#game { display: block; width: 100%; height: auto; } /* HTML overlay (pause / game over / win) */ .overlay { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px; background: rgba(14, 12, 10, 0.78); backdrop-filter: blur(3px); text-align: center; padding: 24px; } .overlay.hidden { display: none; } .overlay h2 { font-size: clamp(28px, 5vw, 46px); font-weight: 900; } .overlay p { font-family: var(--font-mono); font-size: 14px; color: #d8cfc0; line-height: 1.7; white-space: pre-line; } .overlay .win-h { color: var(--rust-orange); text-shadow: 0 3px 0 rgba(0,0,0,.4); } .overlay .lose-h { color: var(--bad); text-shadow: 0 3px 0 rgba(0,0,0,.4); } .overlay .bun-small { width: 90px; animation: bob 2.6s ease-in-out infinite; } .overlay .bun-small.sad { filter: grayscale(.9); transform: rotate(14deg) translateY(6px); animation: none; } .game-foot { margin-top: 14px; display: flex; justify-content: space-between; align-items: center; font-family: var(--font-mono); font-size: 12px; color: #8a8073; } .game-foot a { color: var(--rust-orange); text-decoration: none; } @media (max-width: 640px) { .story { font-size: 14px; padding: 16px; } .controls-card .key { font-size: 11px; padding: 6px 9px; } }