Files
Youtube-to-mp3-ripper/frontend/style.css
2026-06-12 15:29:30 -07:00

252 lines
3.9 KiB
CSS

:root {
color-scheme: dark;
--bg: #10100f;
--panel: #1b1a18;
--panel-strong: #23211f;
--text: #f4f0e8;
--muted: #aaa49a;
--line: #38342f;
--accent: #3ddc97;
--accent-strong: #2fbd80;
--warning: #f2c14e;
--error: #ff6b6b;
--shadow: 0 24px 80px rgba(0, 0, 0, 0.45);
}
* {
box-sizing: border-box;
}
html,
body {
min-height: 100%;
}
body {
margin: 0;
background:
radial-gradient(circle at top left, rgba(61, 220, 151, 0.14), transparent 34rem),
linear-gradient(135deg, #10100f 0%, #171614 54%, #0c0c0b 100%);
color: var(--text);
font-family:
Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
.shell {
display: grid;
min-height: 100vh;
place-items: center;
padding: 28px;
}
.converter-card {
width: min(760px, 100%);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 8px;
background: rgba(27, 26, 24, 0.94);
box-shadow: var(--shadow);
padding: clamp(22px, 4vw, 38px);
}
.header {
margin-bottom: 28px;
}
.eyebrow {
margin: 0 0 8px;
color: var(--accent);
font-size: 0.76rem;
font-weight: 700;
letter-spacing: 0;
text-transform: uppercase;
}
h1,
h2,
p {
margin-top: 0;
}
h1 {
margin-bottom: 0;
font-size: clamp(2rem, 5vw, 3.4rem);
line-height: 1;
letter-spacing: 0;
}
.form {
display: grid;
gap: 18px;
}
.field {
display: grid;
gap: 8px;
}
.field span {
color: var(--muted);
font-size: 0.88rem;
font-weight: 650;
}
input,
select,
button {
width: 100%;
border-radius: 8px;
font: inherit;
}
input,
select {
border: 1px solid var(--line);
background: var(--panel-strong);
color: var(--text);
min-height: 50px;
padding: 0 14px;
outline: none;
}
input:focus,
select:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px rgba(61, 220, 151, 0.16);
}
.controls {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px;
}
button,
.download-button {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 52px;
border: 0;
background: var(--accent);
color: #09110d;
cursor: pointer;
font-weight: 800;
text-decoration: none;
transition:
transform 160ms ease,
background 160ms ease,
opacity 160ms ease;
}
button:hover,
.download-button:hover {
background: var(--accent-strong);
transform: translateY(-1px);
}
button:disabled {
cursor: not-allowed;
opacity: 0.55;
transform: none;
}
.metadata {
display: grid;
grid-template-columns: 150px 1fr;
gap: 16px;
align-items: center;
margin-top: 24px;
border: 1px solid var(--line);
border-radius: 8px;
background: rgba(35, 33, 31, 0.72);
padding: 12px;
}
.metadata img {
width: 100%;
aspect-ratio: 16 / 9;
border-radius: 6px;
object-fit: cover;
background: #0c0c0b;
}
.metadata h2 {
margin-bottom: 8px;
font-size: 1rem;
line-height: 1.35;
}
.metadata p {
margin-bottom: 4px;
color: var(--muted);
font-size: 0.92rem;
}
.status-panel {
margin-top: 22px;
border-top: 1px solid var(--line);
padding-top: 18px;
}
.status-line {
display: flex;
align-items: center;
gap: 10px;
min-height: 28px;
color: var(--muted);
}
.status-dot {
width: 10px;
height: 10px;
flex: 0 0 auto;
border-radius: 50%;
background: var(--muted);
}
.status-dot.active {
background: var(--warning);
box-shadow: 0 0 0 6px rgba(242, 193, 78, 0.13);
}
.status-dot.done {
background: var(--accent);
box-shadow: 0 0 0 6px rgba(61, 220, 151, 0.13);
}
.status-dot.error {
background: var(--error);
box-shadow: 0 0 0 6px rgba(255, 107, 107, 0.13);
}
.error-text {
margin: 10px 0 0;
color: var(--error);
}
.download-button {
margin-top: 16px;
width: 100%;
border-radius: 8px;
}
.hidden {
display: none !important;
}
@media (max-width: 640px) {
.shell {
padding: 16px;
place-items: start center;
}
.converter-card {
margin-top: 18px;
}
.controls,
.metadata {
grid-template-columns: 1fr;
}
}