Transitions UI to react.js

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-04-28 01:03:44 +00:00
co-authored by Copilot
parent 1897f8a9e7
commit dcae0b604b
12 changed files with 469 additions and 225 deletions
+118
View File
@@ -0,0 +1,118 @@
: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;
}
}