|
|
@@ -17,6 +17,7 @@ html, body { |
|
|
color: var(--text); |
|
|
color: var(--text); |
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; |
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; |
|
|
-webkit-tap-highlight-color: transparent; |
|
|
-webkit-tap-highlight-color: transparent; |
|
|
|
|
|
-webkit-user-select: none; |
|
|
user-select: none; |
|
|
user-select: none; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@@ -24,20 +25,25 @@ html, body { |
|
|
max-width: 600px; |
|
|
max-width: 600px; |
|
|
margin: 0 auto; |
|
|
margin: 0 auto; |
|
|
padding: 16px; |
|
|
padding: 16px; |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
|
|
|
-webkit-flex-direction: column; |
|
|
flex-direction: column; |
|
|
flex-direction: column; |
|
|
gap: 16px; |
|
|
|
|
|
min-height: 100vh; |
|
|
min-height: 100vh; |
|
|
} |
|
|
} |
|
|
|
|
|
/* gap fallback: margin between every direct child */ |
|
|
|
|
|
#app > * + * { margin-top: 16px; } |
|
|
|
|
|
|
|
|
/* Status bar */ |
|
|
/* Status bar */ |
|
|
#status-bar { |
|
|
#status-bar { |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
|
|
|
-webkit-align-items: center; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
gap: 8px; |
|
|
|
|
|
font-size: 12px; |
|
|
font-size: 12px; |
|
|
color: var(--text-dim); |
|
|
color: var(--text-dim); |
|
|
} |
|
|
} |
|
|
|
|
|
#status-bar > * + * { margin-left: 8px; } |
|
|
#winamp-status { font-size: 16px; } |
|
|
#winamp-status { font-size: 16px; } |
|
|
#winamp-status.ok { color: #4caf50; } |
|
|
#winamp-status.ok { color: #4caf50; } |
|
|
#winamp-status.err { color: var(--accent); } |
|
|
#winamp-status.err { color: var(--accent); } |
|
|
@@ -62,15 +68,17 @@ html, body { |
|
|
letter-spacing: 4px; |
|
|
letter-spacing: 4px; |
|
|
cursor: pointer; |
|
|
cursor: pointer; |
|
|
-webkit-tap-highlight-color: transparent; |
|
|
-webkit-tap-highlight-color: transparent; |
|
|
|
|
|
-webkit-user-select: none; |
|
|
user-select: none; |
|
|
user-select: none; |
|
|
} |
|
|
} |
|
|
.star { |
|
|
.star { |
|
|
color: #333; |
|
|
color: #333; |
|
|
|
|
|
-webkit-transition: color 0.12s, -webkit-transform 0.1s; |
|
|
transition: color 0.12s, transform 0.1s; |
|
|
transition: color 0.12s, transform 0.1s; |
|
|
display: inline-block; |
|
|
display: inline-block; |
|
|
} |
|
|
} |
|
|
.star.lit { color: #f5a623; } |
|
|
.star.lit { color: #f5a623; } |
|
|
.star:active { transform: scale(1.25); } |
|
|
|
|
|
|
|
|
.star:active { -webkit-transform: scale(1.25); transform: scale(1.25); } |
|
|
|
|
|
|
|
|
#playlist-pos { |
|
|
#playlist-pos { |
|
|
font-size: 12px; |
|
|
font-size: 12px; |
|
|
@@ -90,10 +98,12 @@ html, body { |
|
|
|
|
|
|
|
|
/* Progress */ |
|
|
/* Progress */ |
|
|
#progress-wrap { |
|
|
#progress-wrap { |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
|
|
|
-webkit-flex-direction: column; |
|
|
flex-direction: column; |
|
|
flex-direction: column; |
|
|
gap: 4px; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
#progress-wrap > * + * { margin-top: 4px; } |
|
|
#progress-bar { |
|
|
#progress-bar { |
|
|
height: 8px; |
|
|
height: 8px; |
|
|
background: var(--accent2); |
|
|
background: var(--accent2); |
|
|
@@ -105,11 +115,14 @@ html, body { |
|
|
height: 100%; |
|
|
height: 100%; |
|
|
background: var(--accent); |
|
|
background: var(--accent); |
|
|
width: 0%; |
|
|
width: 0%; |
|
|
|
|
|
-webkit-transition: width 0.5s linear; |
|
|
transition: width 0.5s linear; |
|
|
transition: width 0.5s linear; |
|
|
border-radius: 4px; |
|
|
border-radius: 4px; |
|
|
} |
|
|
} |
|
|
#time-display { |
|
|
#time-display { |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
|
|
|
-webkit-justify-content: space-between; |
|
|
justify-content: space-between; |
|
|
justify-content: space-between; |
|
|
font-size: 12px; |
|
|
font-size: 12px; |
|
|
color: var(--text-dim); |
|
|
color: var(--text-dim); |
|
|
@@ -123,32 +136,70 @@ html, body { |
|
|
border-radius: var(--radius); |
|
|
border-radius: var(--radius); |
|
|
font-size: 22px; |
|
|
font-size: 22px; |
|
|
cursor: pointer; |
|
|
cursor: pointer; |
|
|
|
|
|
-webkit-transition: background 0.15s, -webkit-transform 0.08s; |
|
|
transition: background 0.15s, transform 0.08s; |
|
|
transition: background 0.15s, transform 0.08s; |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
|
|
|
-webkit-align-items: center; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
|
|
|
-webkit-justify-content: center; |
|
|
justify-content: center; |
|
|
justify-content: center; |
|
|
touch-action: manipulation; |
|
|
touch-action: manipulation; |
|
|
} |
|
|
} |
|
|
.btn:active { transform: scale(0.93); background: var(--accent2); } |
|
|
|
|
|
|
|
|
.btn:active { -webkit-transform: scale(0.93); transform: scale(0.93); background: var(--accent2); } |
|
|
|
|
|
|
|
|
/* Seek row */ |
|
|
|
|
|
|
|
|
/* ── Seek row ────────────────────────────────────────────────────────────── */ |
|
|
|
|
|
/* Base: flexbox (iOS 9 and up) */ |
|
|
#seek-row { |
|
|
#seek-row { |
|
|
display: grid; |
|
|
|
|
|
grid-template-columns: repeat(4, 1fr); |
|
|
|
|
|
gap: 8px; |
|
|
|
|
|
|
|
|
display: -webkit-flex; |
|
|
|
|
|
display: flex; |
|
|
|
|
|
} |
|
|
|
|
|
#seek-row > .btn-seek { |
|
|
|
|
|
-webkit-flex: 1; |
|
|
|
|
|
flex: 1; |
|
|
|
|
|
} |
|
|
|
|
|
#seek-row > .btn-seek + .btn-seek { margin-left: 8px; } |
|
|
|
|
|
|
|
|
|
|
|
/* Enhancement: CSS Grid (iOS 10.3+, all modern browsers) */ |
|
|
|
|
|
@supports (display: grid) { |
|
|
|
|
|
#seek-row { |
|
|
|
|
|
display: grid; |
|
|
|
|
|
grid-template-columns: repeat(4, 1fr); |
|
|
|
|
|
gap: 8px; |
|
|
|
|
|
} |
|
|
|
|
|
#seek-row > .btn-seek { -webkit-flex: none; flex: none; } |
|
|
|
|
|
#seek-row > .btn-seek + .btn-seek { margin-left: 0; } |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.btn-seek { |
|
|
.btn-seek { |
|
|
height: 52px; |
|
|
height: 52px; |
|
|
font-size: 14px; |
|
|
font-size: 14px; |
|
|
font-weight: 600; |
|
|
font-weight: 600; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* Controls row */ |
|
|
|
|
|
|
|
|
/* ── Controls row ───────────────────────────────────────────────────────── */ |
|
|
|
|
|
/* Base: flexbox */ |
|
|
#controls-row { |
|
|
#controls-row { |
|
|
display: grid; |
|
|
|
|
|
grid-template-columns: repeat(4, 1fr); |
|
|
|
|
|
gap: 8px; |
|
|
|
|
|
|
|
|
display: -webkit-flex; |
|
|
|
|
|
display: flex; |
|
|
} |
|
|
} |
|
|
|
|
|
#controls-row > .btn-ctrl { |
|
|
|
|
|
-webkit-flex: 1; |
|
|
|
|
|
flex: 1; |
|
|
|
|
|
} |
|
|
|
|
|
#controls-row > .btn-ctrl + .btn-ctrl { margin-left: 8px; } |
|
|
|
|
|
|
|
|
|
|
|
/* Enhancement: CSS Grid */ |
|
|
|
|
|
@supports (display: grid) { |
|
|
|
|
|
#controls-row { |
|
|
|
|
|
display: grid; |
|
|
|
|
|
grid-template-columns: repeat(4, 1fr); |
|
|
|
|
|
gap: 8px; |
|
|
|
|
|
} |
|
|
|
|
|
#controls-row > .btn-ctrl { -webkit-flex: none; flex: none; } |
|
|
|
|
|
#controls-row > .btn-ctrl + .btn-ctrl { margin-left: 0; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
.btn-ctrl { height: var(--btn-h); font-size: 28px; } |
|
|
.btn-ctrl { height: var(--btn-h); font-size: 28px; } |
|
|
.btn-play { |
|
|
.btn-play { |
|
|
background: var(--accent); |
|
|
background: var(--accent); |
|
|
@@ -158,14 +209,24 @@ html, body { |
|
|
|
|
|
|
|
|
/* Volume row */ |
|
|
/* Volume row */ |
|
|
#volume-row { |
|
|
#volume-row { |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
|
|
|
-webkit-align-items: center; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
gap: 10px; |
|
|
|
|
|
} |
|
|
} |
|
|
.btn-vol { width: 48px; height: 48px; flex-shrink: 0; font-size: 18px; } |
|
|
|
|
|
|
|
|
#volume-row > * + * { margin-left: 10px; } |
|
|
|
|
|
.btn-vol { width: 48px; height: 48px; -webkit-flex-shrink: 0; flex-shrink: 0; font-size: 18px; } |
|
|
#btn-mute { font-size: 22px; } |
|
|
#btn-mute { font-size: 22px; } |
|
|
#btn-mute.muted { color: var(--accent); } |
|
|
#btn-mute.muted { color: var(--accent); } |
|
|
#volume-bar-wrap { flex: 1; display: flex; flex-direction: column; gap: 4px; } |
|
|
|
|
|
|
|
|
#volume-bar-wrap { |
|
|
|
|
|
-webkit-flex: 1; |
|
|
|
|
|
flex: 1; |
|
|
|
|
|
display: -webkit-flex; |
|
|
|
|
|
display: flex; |
|
|
|
|
|
-webkit-flex-direction: column; |
|
|
|
|
|
flex-direction: column; |
|
|
|
|
|
} |
|
|
|
|
|
#volume-bar-wrap > * + * { margin-top: 4px; } |
|
|
#volume-bar { |
|
|
#volume-bar { |
|
|
height: 8px; |
|
|
height: 8px; |
|
|
background: var(--accent2); |
|
|
background: var(--accent2); |
|
|
@@ -177,6 +238,7 @@ html, body { |
|
|
height: 100%; |
|
|
height: 100%; |
|
|
background: #4caf50; |
|
|
background: #4caf50; |
|
|
width: 70%; |
|
|
width: 70%; |
|
|
|
|
|
-webkit-transition: width 0.2s; |
|
|
transition: width 0.2s; |
|
|
transition: width 0.2s; |
|
|
border-radius: 4px; |
|
|
border-radius: 4px; |
|
|
} |
|
|
} |
|
|
@@ -189,10 +251,11 @@ html, body { |
|
|
|
|
|
|
|
|
/* Killist */ |
|
|
/* Killist */ |
|
|
#killist-row { |
|
|
#killist-row { |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
gap: 8px; |
|
|
|
|
|
} |
|
|
} |
|
|
.btn-kill { flex: 1; height: 52px; font-size: 16px; background: #3a1a1a; } |
|
|
|
|
|
|
|
|
#killist-row > * + * { margin-left: 8px; } |
|
|
|
|
|
.btn-kill { -webkit-flex: 1; flex: 1; height: 52px; font-size: 16px; background: #3a1a1a; } |
|
|
.btn-kill:active { background: var(--accent); } |
|
|
.btn-kill:active { background: var(--accent); } |
|
|
.btn-kill-list { width: 64px; height: 52px; font-size: 14px; } |
|
|
.btn-kill-list { width: 64px; height: 52px; font-size: 14px; } |
|
|
.btn-action { width: 52px; height: 52px; font-size: 20px; } |
|
|
.btn-action { width: 52px; height: 52px; font-size: 20px; } |
|
|
@@ -203,10 +266,20 @@ html, body { |
|
|
padding: 16px; |
|
|
padding: 16px; |
|
|
} |
|
|
} |
|
|
#killist-panel h3 { margin-bottom: 12px; } |
|
|
#killist-panel h3 { margin-bottom: 12px; } |
|
|
#killist-items { list-style: none; display: flex; flex-direction: column; gap: 8px; } |
|
|
|
|
|
|
|
|
#killist-items { |
|
|
|
|
|
list-style: none; |
|
|
|
|
|
display: -webkit-flex; |
|
|
|
|
|
display: flex; |
|
|
|
|
|
-webkit-flex-direction: column; |
|
|
|
|
|
flex-direction: column; |
|
|
|
|
|
} |
|
|
|
|
|
#killist-items li + li { margin-top: 8px; } |
|
|
#killist-items li { |
|
|
#killist-items li { |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
|
|
|
-webkit-justify-content: space-between; |
|
|
justify-content: space-between; |
|
|
justify-content: space-between; |
|
|
|
|
|
-webkit-align-items: center; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
background: var(--bg); |
|
|
background: var(--bg); |
|
|
border-radius: 8px; |
|
|
border-radius: 8px; |
|
|
@@ -226,19 +299,29 @@ html, body { |
|
|
/* ── Playlist overlay ────────────────────────────────────────────────────── */ |
|
|
/* ── Playlist overlay ────────────────────────────────────────────────────── */ |
|
|
#playlist-overlay { |
|
|
#playlist-overlay { |
|
|
position: fixed; |
|
|
position: fixed; |
|
|
inset: 0; |
|
|
|
|
|
|
|
|
/* inset: 0 fallback for browsers without inset support (iOS < 14.5) */ |
|
|
|
|
|
top: 0; |
|
|
|
|
|
right: 0; |
|
|
|
|
|
bottom: 0; |
|
|
|
|
|
left: 0; |
|
|
z-index: 200; |
|
|
z-index: 200; |
|
|
background: var(--bg); |
|
|
background: var(--bg); |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
|
|
|
-webkit-flex-direction: column; |
|
|
flex-direction: column; |
|
|
flex-direction: column; |
|
|
} |
|
|
} |
|
|
#playlist-header { |
|
|
#playlist-header { |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
|
|
|
-webkit-align-items: center; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
|
|
|
-webkit-justify-content: space-between; |
|
|
justify-content: space-between; |
|
|
justify-content: space-between; |
|
|
padding: 16px 20px; |
|
|
padding: 16px 20px; |
|
|
background: var(--surface); |
|
|
background: var(--surface); |
|
|
border-bottom: 1px solid #ffffff12; |
|
|
border-bottom: 1px solid #ffffff12; |
|
|
|
|
|
-webkit-flex-shrink: 0; |
|
|
flex-shrink: 0; |
|
|
flex-shrink: 0; |
|
|
} |
|
|
} |
|
|
#playlist-title-label { |
|
|
#playlist-title-label { |
|
|
@@ -261,20 +344,24 @@ html, body { |
|
|
#playlist-list { |
|
|
#playlist-list { |
|
|
list-style: none; |
|
|
list-style: none; |
|
|
overflow-y: auto; |
|
|
overflow-y: auto; |
|
|
|
|
|
-webkit-flex: 1; |
|
|
flex: 1; |
|
|
flex: 1; |
|
|
padding: 8px 0; |
|
|
padding: 8px 0; |
|
|
-webkit-overflow-scrolling: touch; |
|
|
-webkit-overflow-scrolling: touch; |
|
|
} |
|
|
} |
|
|
#playlist-list li { |
|
|
#playlist-list li { |
|
|
|
|
|
display: -webkit-flex; |
|
|
display: flex; |
|
|
display: flex; |
|
|
|
|
|
-webkit-align-items: center; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
gap: 12px; |
|
|
|
|
|
padding: 12px 20px; |
|
|
padding: 12px 20px; |
|
|
cursor: pointer; |
|
|
cursor: pointer; |
|
|
border-radius: 0; |
|
|
border-radius: 0; |
|
|
|
|
|
-webkit-transition: background 0.1s; |
|
|
transition: background 0.1s; |
|
|
transition: background 0.1s; |
|
|
-webkit-tap-highlight-color: transparent; |
|
|
-webkit-tap-highlight-color: transparent; |
|
|
} |
|
|
} |
|
|
|
|
|
#playlist-list li > * + * { margin-left: 12px; } |
|
|
#playlist-list li:active { background: var(--accent2); } |
|
|
#playlist-list li:active { background: var(--accent2); } |
|
|
#playlist-list li.current { |
|
|
#playlist-list li.current { |
|
|
background: #e9456018; |
|
|
background: #e9456018; |
|
|
@@ -286,6 +373,7 @@ html, body { |
|
|
color: var(--text-dim); |
|
|
color: var(--text-dim); |
|
|
min-width: 32px; |
|
|
min-width: 32px; |
|
|
text-align: right; |
|
|
text-align: right; |
|
|
|
|
|
-webkit-flex-shrink: 0; |
|
|
flex-shrink: 0; |
|
|
flex-shrink: 0; |
|
|
} |
|
|
} |
|
|
.pl-title { |
|
|
.pl-title { |
|
|
@@ -303,4 +391,31 @@ li.current .pl-title { color: var(--accent); font-weight: 600; } |
|
|
font-size: 14px; |
|
|
font-size: 14px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* ── gap enhancement for all flex containers (iOS 14.5+ / modern browsers) */ |
|
|
|
|
|
@supports (gap: 1px) { |
|
|
|
|
|
#app { gap: 16px; } |
|
|
|
|
|
#app > * + * { margin-top: 0; } |
|
|
|
|
|
|
|
|
|
|
|
#status-bar { gap: 8px; } |
|
|
|
|
|
#status-bar > * + * { margin-left: 0; } |
|
|
|
|
|
|
|
|
|
|
|
#progress-wrap { gap: 4px; } |
|
|
|
|
|
#progress-wrap > * + * { margin-top: 0; } |
|
|
|
|
|
|
|
|
|
|
|
#volume-row { gap: 10px; } |
|
|
|
|
|
#volume-row > * + * { margin-left: 0; } |
|
|
|
|
|
|
|
|
|
|
|
#volume-bar-wrap { gap: 4px; } |
|
|
|
|
|
#volume-bar-wrap > * + * { margin-top: 0; } |
|
|
|
|
|
|
|
|
|
|
|
#killist-row { gap: 8px; } |
|
|
|
|
|
#killist-row > * + * { margin-left: 0; } |
|
|
|
|
|
|
|
|
|
|
|
#killist-items { gap: 8px; } |
|
|
|
|
|
#killist-items li + li { margin-top: 0; } |
|
|
|
|
|
|
|
|
|
|
|
#playlist-list li { gap: 12px; } |
|
|
|
|
|
#playlist-list li > * + * { margin-left: 0; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
.hidden { display: none !important; } |
|
|
.hidden { display: none !important; } |