:root { --bg-1: #f8f2e6; --bg-2: #dce9f4; --card: #fff9f0; --ink: #1f2633; --muted: #586173; --primary: #0a5f94; --primary-press: #084d79; --disabled: #9fa9b8; } * { box-sizing: border-box; } html, body { margin: 0; min-height: 100%; } body { color: var(--ink); font-family: 'Trebuchet MS', 'Avenir Next', 'Segoe UI', sans-serif; background: radial-gradient(circle at 16% 18%, rgba(255, 255, 255, 0.85) 0%, rgba(255, 255, 255, 0) 44%), linear-gradient(140deg, var(--bg-1), var(--bg-2)); } .page-shell { min-height: 100vh; display: grid; place-items: center; padding: 1.25rem; } .player-card { width: min(30rem, 100%); border-radius: 1.25rem; background: var(--card); box-shadow: 0 1.5rem 3rem rgba(18, 50, 73, 0.17), inset 0 0.1rem 0.25rem rgba(255, 255, 255, 0.6); padding: 1.4rem; text-align: center; animation: card-enter 420ms ease-out; } .eyebrow { margin: 0; text-transform: uppercase; letter-spacing: 0.14em; font-weight: 700; font-size: 0.72rem; color: var(--muted); } h1 { margin: 0.4rem 0 0.6rem; font-size: clamp(2rem, 8vw, 2.8rem); line-height: 1.1; } .status { margin: 0 0 1.2rem; color: var(--muted); font-size: 1rem; min-height: 1.3rem; } .controls { display: grid; gap: 0.75rem; grid-template-columns: 1fr 1fr; } button { appearance: none; border: none; border-radius: 0.7rem; background: var(--primary); color: #ffffff; font-size: 1rem; font-weight: 700; padding: 0.78rem 1rem; cursor: pointer; transition: transform 120ms ease, background 120ms ease; } button:hover:not(:disabled) { background: var(--primary-press); } button:active:not(:disabled) { transform: translateY(1px); } button:disabled { cursor: not-allowed; background: var(--disabled); } @keyframes card-enter { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @media (max-width: 560px) { .controls { grid-template-columns: 1fr; } }