Skip to main content

max / makenotwork

8.0 KB · 406 lines History Blame Raw
1 /* Unified media player styles, shared by audio and video player pages. */
2
3 /* Media container */
4 .media-container {
5 max-width: 680px;
6 margin: 0 auto;
7 padding: var(--gap-page) var(--gap-pane) var(--gap-page);
8 }
9
10 /* Author header */
11 .author-header {
12 display: flex;
13 align-items: center;
14 gap: var(--gap-section);
15 margin-bottom: var(--gap-page);
16 }
17
18 .author-avatar {
19 width: 48px;
20 height: 48px;
21 background: var(--surface-muted);
22 border-radius: var(--radius-round);
23 display: flex;
24 align-items: center;
25 justify-content: center;
26 font-family: var(--font-heading);
27 font-size: var(--text-subhead);
28 color: var(--detail);
29 }
30
31 .author-info {
32 flex: 1;
33 }
34
35 .author-name {
36 font-family: var(--font-mono);
37 font-size: var(--text-body);
38 color: var(--detail);
39 }
40
41 .author-name a {
42 color: inherit;
43 text-decoration: none;
44 }
45
46 .author-name a:hover {
47 text-decoration: underline;
48 }
49
50 .media-meta {
51 font-family: var(--font-mono);
52 font-size: var(--text-note);
53 color: var(--text-muted);
54 }
55
56 /* Title */
57 .media-title {
58 font-family: var(--font-heading);
59 font-size: var(--text-display);
60 font-weight: normal;
61 line-height: 1.2;
62 margin-bottom: var(--gap-section);
63 color: var(--detail);
64 text-align: left;
65 }
66
67 /* Series name */
68 .media-series {
69 font-family: var(--font-mono);
70 font-size: var(--text-note);
71 color: var(--text-muted);
72 margin-bottom: var(--gap-page);
73 }
74
75 .media-series a {
76 color: var(--highlight);
77 text-decoration: none;
78 }
79
80 .media-series a:hover {
81 text-decoration: underline;
82 }
83
84 /* Cover art (audio) */
85 .cover-art {
86 background: var(--surface-muted);
87 aspect-ratio: 1;
88 max-width: 400px;
89 margin: 0 auto var(--gap-page);
90 display: flex;
91 align-items: center;
92 justify-content: center;
93 color: var(--text-muted);
94 font-family: var(--font-mono);
95 }
96
97 .cover-art img {
98 width: 100%;
99 height: 100%;
100 object-fit: cover;
101 }
102
103 /* Video display */
104 .video-display {
105 max-width: 100%;
106 margin: 0 auto var(--gap-page);
107 background: var(--detail);
108 }
109
110 .video-display video {
111 width: 100%;
112 display: block;
113 }
114
115 /* Only the active element is shown; the standby preloads the next segment
116 off-screen so pre/mid/post-roll transitions are gapless. */
117 .video-display video.is-standby {
118 display: none;
119 }
120
121 /* Player controls */
122 .media-player {
123 background: var(--light-background);
124 padding: var(--gap-pane);
125 margin-bottom: var(--gap-page);
126 }
127
128 .player-controls {
129 display: flex;
130 align-items: center;
131 gap: var(--gap-section);
132 margin-bottom: var(--gap-section);
133 }
134
135 .play-button {
136 width: 56px;
137 height: 56px;
138 background: var(--primary-dark);
139 color: var(--primary-light);
140 border: none;
141 border-radius: var(--radius-round);
142 cursor: pointer;
143 display: flex;
144 align-items: center;
145 justify-content: center;
146 font-size: var(--text-head);
147 transition: opacity 0.2s ease;
148 flex-shrink: 0;
149 }
150
151 .play-button:hover {
152 opacity: 0.8;
153 }
154
155 .progress-container {
156 flex: 1;
157 }
158
159 .progress-bar {
160 height: 6px;
161 background: var(--surface-muted);
162 border-radius: var(--radius-control);
163 overflow: hidden;
164 cursor: pointer;
165 margin-bottom: var(--gap-peer);
166 position: relative;
167 }
168
169 .progress-fill {
170 height: 100%;
171 background: var(--highlight);
172 width: 0%;
173 border-radius: var(--radius-control);
174 transition: width 0.1s linear;
175 }
176
177 .time-display {
178 display: flex;
179 justify-content: space-between;
180 font-family: var(--font-mono);
181 font-size: var(--text-fine);
182 color: var(--text-muted);
183 }
184
185 .player-secondary {
186 display: flex;
187 justify-content: space-between;
188 align-items: center;
189 padding-top: var(--gap-section);
190 border-top: 1px solid var(--border);
191 }
192
193 .speed-control {
194 font-family: var(--font-mono);
195 font-size: var(--text-note);
196 display: flex;
197 align-items: center;
198 gap: var(--gap-peer);
199 }
200
201 .speed-button {
202 background: var(--surface-muted);
203 border: none;
204 padding: var(--gap-peer) var(--gap-section);
205 font-family: var(--font-mono);
206 font-size: var(--text-fine);
207 cursor: pointer;
208 color: var(--detail);
209 }
210
211 .speed-button:hover {
212 background: var(--border);
213 }
214
215 .speed-button.is-selected {
216 background: var(--primary-dark);
217 color: var(--primary-light);
218 }
219
220 .volume-control {
221 display: flex;
222 align-items: center;
223 gap: var(--gap-peer);
224 }
225
226 .volume-icon {
227 color: var(--text-muted);
228 }
229
230 .volume-slider {
231 width: 80px;
232 height: 4px;
233 background: var(--surface-muted);
234 border-radius: var(--radius-fine);
235 appearance: none;
236 cursor: pointer;
237 }
238
239 .volume-slider::-webkit-slider-thumb {
240 appearance: none;
241 width: 12px;
242 height: 12px;
243 background: var(--detail);
244 border-radius: var(--radius-round);
245 cursor: pointer;
246 }
247
248 .volume-slider::-moz-range-thumb {
249 width: 12px;
250 height: 12px;
251 background: var(--detail);
252 border-radius: var(--radius-round);
253 cursor: pointer;
254 border: none;
255 }
256
257 /* Description */
258 .media-description {
259 font-family: var(--font-body);
260 font-size: var(--text-lead);
261 line-height: 1.9;
262 margin-bottom: var(--gap-page);
263 }
264
265 .media-description p {
266 margin-bottom: var(--gap-pane);
267 }
268
269 /* Chapters */
270 .chapters {
271 background: var(--light-background);
272 padding: var(--gap-pane);
273 margin-bottom: var(--gap-page);
274 }
275
276 .chapters h3 {
277 font-family: var(--font-mono);
278 font-size: var(--text-body);
279 font-weight: normal;
280 margin-bottom: var(--gap-section);
281 color: var(--detail);
282 }
283
284 .chapter-list {
285 list-style: none;
286 }
287
288 .chapter-item {
289 display: flex;
290 justify-content: space-between;
291 padding: var(--gap-section) 0;
292 border-bottom: 1px solid var(--border);
293 cursor: pointer;
294 transition: background 0.2s ease;
295 }
296
297 .chapter-item:last-child {
298 border-bottom: none;
299 }
300
301 .chapter-item:hover {
302 background: var(--surface-muted);
303 /* The bleed and the inset must stay equal or the row shifts on hover,
304 so both sides read the same token. */
305 margin: 0 calc(var(--gap-pane) * -1);
306 padding-left: var(--gap-pane);
307 padding-right: var(--gap-pane);
308 }
309
310 .chapter-title {
311 font-family: var(--font-body);
312 color: var(--detail);
313 }
314
315 .chapter-time {
316 font-family: var(--font-mono);
317 font-size: var(--text-note);
318 color: var(--text-muted);
319 }
320
321 /* Tags */
322 .media-tags {
323 display: flex;
324 gap: var(--gap-peer);
325 flex-wrap: wrap;
326 margin-top: var(--gap-page);
327 padding-top: var(--gap-page);
328 border-top: 1px solid var(--border);
329 }
330
331 .tag {
332 font-family: var(--font-mono);
333 background: var(--surface-muted);
334 color: var(--detail);
335 padding: var(--gap-peer) var(--gap-section);
336 font-size: var(--text-fine);
337 }
338
339 /* Footer */
340 .media-player-footer {
341 font-family: var(--font-mono);
342 text-align: center;
343 padding: var(--gap-page);
344 font-size: var(--text-note);
345 color: var(--text-muted);
346 border-top: 1px solid var(--border);
347 }
348
349 .media-player-footer a {
350 color: var(--detail);
351 text-decoration: none;
352 }
353
354 .media-player-footer a:hover {
355 text-decoration: underline;
356 }
357
358 /* Hidden media elements */
359 audio {
360 display: none;
361 }
362
363 /* Skip button for insertion segments */
364 .skip-insertion {
365 font-family: var(--font-mono);
366 font-size: var(--text-fine);
367 background: var(--surface-muted);
368 border: 1px solid var(--border);
369 padding: var(--gap-peer) var(--gap-section);
370 cursor: pointer;
371 color: var(--detail);
372 display: none;
373 margin-top: var(--gap-peer);
374 }
375
376 .skip-insertion:hover {
377 background: var(--border);
378 }
379
380 /* Insertion label shown during playback */
381 .insertion-label {
382 font-family: var(--font-mono);
383 font-size: var(--text-fine);
384 color: var(--text-muted);
385 font-style: italic;
386 display: none;
387 margin-top: var(--gap-bound);
388 }
389
390 /* Responsive */
391 @media (max-width: 599px) {
392 .media-title {
393 font-size: var(--text-title);
394 }
395
396 .cover-art {
397 max-width: 100%;
398 }
399
400 .player-secondary {
401 flex-direction: column;
402 gap: var(--gap-section);
403 align-items: flex-start;
404 }
405 }
406