:root {
color-scheme: light;
font-family: Arial, Helvetica, sans-serif;
background: #f00020;
color: #050505;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
}
button,
input {
font: inherit;
}
.player-shell {
min-height: 100vh;
display: grid;
grid-template-rows: auto 1fr;
padding: 18px;
}
header {
display: flex;
justify-content: space-between;
align-items: baseline;
font-weight: 900;
letter-spacing: 0.08em;
}
.deck {
width: min(92vw, 720px);
margin: auto;
display: grid;
gap: 24px;
justify-items: center;
}
.platter {
width: min(72vw, 520px);
aspect-ratio: 1;
border: 2px solid #050505;
border-radius: 50%;
background:
repeating-radial-gradient(
circle,
transparent 0 8px,
rgba(5, 5, 5, 0.16) 8.5px 9.5px
);
color: #050505;
display: grid;
place-items: center;
touch-action: none;
cursor: grab;
transform: rotate(var(--rotation, 0deg));
}
.platter:active {
cursor: grabbing;
}
.label {
width: 34%;
aspect-ratio: 1;
border-radius: 50%;
background: transparent;
border: 1px solid rgba(5, 5, 5, 0.28);
display: grid;
place-items: center;
font-weight: 900;
font-size: clamp(12px, 3vw, 24px);
}
.transport {
width: 100%;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
button {
min-height: 48px;
border: 1px solid #050505;
background: transparent;
font-weight: 900;
}
button:disabled {
opacity: 0.38;
}
.timeline {
width: 100%;
display: grid;
gap: 8px;
font-size: 12px;
font-weight: 900;
}
.timeline input {
width: 100%;
}
output {
width: 100%;
min-height: 1.4em;
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
font-size: 12px;
}
.platter img {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
pointer-events: none;
}
.platter:has(img[src]) .label {
display: none;
}
.metadata {
display: grid;
gap: 0.35rem;
margin: 0;
width: 100%;
}
.metadata[hidden] {
display: none;
}
.metadata div {
display: grid;
grid-template-columns: 7rem 1fr;
gap: 1rem;
}
.metadata dt,
.metadata dd {
margin: 0;
}
.rpm-controls {
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 8px;
align-items: center;
}
.rpm-controls span {
font-size: 12px;
font-weight: 900;
}
.rpm-controls button.selected {
background: #050505;
color: #f00020;
}
#player-canvas {
width: min(94vw, 820px);
height: min(92vh, 900px);
display: block;
touch-action: none;
cursor: crosshair;
}
.legacy-platter[hidden] {
display: none;
}
.fallback-controls {
max-width: 720px;
}