Skip to main content

max / makenotwork

7.2 KB · 404 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: 3rem 1.5rem 5rem;
8 }
9
10 /* Author header */
11 .author-header {
12 display: flex;
13 align-items: center;
14 gap: 1rem;
15 margin-bottom: 2rem;
16 }
17
18 .author-avatar {
19 width: 48px;
20 height: 48px;
21 background: var(--surface-muted);
22 border-radius: 50%;
23 display: flex;
24 align-items: center;
25 justify-content: center;
26 font-family: var(--font-heading);
27 font-size: 1.25rem;
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: 1rem;
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: 0.875rem;
53 color: var(--text-muted);
54 }
55
56 /* Title */
57 .media-title {
58 font-family: var(--font-heading);
59 font-size: 2.5rem;
60 font-weight: normal;
61 line-height: 1.2;
62 margin-bottom: 1rem;
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: 0.9375rem;
71 color: var(--text-muted);
72 margin-bottom: 2.5rem;
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 2rem;
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 2rem;
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: 1.5rem;
125 margin-bottom: 2.5rem;
126 }
127
128 .player-controls {
129 display: flex;
130 align-items: center;
131 gap: 1rem;
132 margin-bottom: 1rem;
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: 50%;
142 cursor: pointer;
143 display: flex;
144 align-items: center;
145 justify-content: center;
146 font-size: 1.5rem;
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: 3px;
163 overflow: hidden;
164 cursor: pointer;
165 margin-bottom: 0.5rem;
166 position: relative;
167 }
168
169 .progress-fill {
170 height: 100%;
171 background: var(--highlight);
172 width: 0%;
173 border-radius: 3px;
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: 0.8125rem;
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: 1rem;
190 border-top: 1px solid var(--border);
191 }
192
193 .speed-control {
194 font-family: var(--font-mono);
195 font-size: 0.875rem;
196 display: flex;
197 align-items: center;
198 gap: 0.5rem;
199 }
200
201 .speed-button {
202 background: var(--surface-muted);
203 border: none;
204 padding: 0.375rem 0.75rem;
205 font-family: var(--font-mono);
206 font-size: 0.8125rem;
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: 0.5rem;
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: 2px;
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: 50%;
245 cursor: pointer;
246 }
247
248 .volume-slider::-moz-range-thumb {
249 width: 12px;
250 height: 12px;
251 background: var(--detail);
252 border-radius: 50%;
253 cursor: pointer;
254 border: none;
255 }
256
257 /* Description */
258 .media-description {
259 font-family: var(--font-body);
260 font-size: 1.125rem;
261 line-height: 1.9;
262 margin-bottom: 2rem;
263 }
264
265 .media-description p {
266 margin-bottom: 1.5rem;
267 }
268
269 /* Chapters */
270 .chapters {
271 background: var(--light-background);
272 padding: 1.5rem;
273 margin-bottom: 2rem;
274 }
275
276 .chapters h3 {
277 font-family: var(--font-mono);
278 font-size: 1rem;
279 font-weight: normal;
280 margin-bottom: 1rem;
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: 0.75rem 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 margin: 0 -1.5rem;
304 padding-left: 1.5rem;
305 padding-right: 1.5rem;
306 }
307
308 .chapter-title {
309 font-family: var(--font-body);
310 color: var(--detail);
311 }
312
313 .chapter-time {
314 font-family: var(--font-mono);
315 font-size: 0.875rem;
316 color: var(--text-muted);
317 }
318
319 /* Tags */
320 .media-tags {
321 display: flex;
322 gap: 0.5rem;
323 flex-wrap: wrap;
324 margin-top: 2rem;
325 padding-top: 2rem;
326 border-top: 1px solid var(--border);
327 }
328
329 .tag {
330 font-family: var(--font-mono);
331 background: var(--surface-muted);
332 color: var(--detail);
333 padding: 0.375rem 0.75rem;
334 font-size: 0.8125rem;
335 }
336
337 /* Footer */
338 .media-player-footer {
339 font-family: var(--font-mono);
340 text-align: center;
341 padding: 2rem;
342 font-size: 0.875rem;
343 color: var(--text-muted);
344 border-top: 1px solid var(--border);
345 }
346
347 .media-player-footer a {
348 color: var(--detail);
349 text-decoration: none;
350 }
351
352 .media-player-footer a:hover {
353 text-decoration: underline;
354 }
355
356 /* Hidden media elements */
357 audio {
358 display: none;
359 }
360
361 /* Skip button for insertion segments */
362 .skip-insertion {
363 font-family: var(--font-mono);
364 font-size: 0.8125rem;
365 background: var(--surface-muted);
366 border: 1px solid var(--border);
367 padding: 0.375rem 0.75rem;
368 cursor: pointer;
369 color: var(--detail);
370 display: none;
371 margin-top: 0.5rem;
372 }
373
374 .skip-insertion:hover {
375 background: var(--border);
376 }
377
378 /* Insertion label shown during playback */
379 .insertion-label {
380 font-family: var(--font-mono);
381 font-size: 0.8125rem;
382 color: var(--text-muted);
383 font-style: italic;
384 display: none;
385 margin-top: 0.25rem;
386 }
387
388 /* Responsive */
389 @media (max-width: 600px) {
390 .media-title {
391 font-size: 2rem;
392 }
393
394 .cover-art {
395 max-width: 100%;
396 }
397
398 .player-secondary {
399 flex-direction: column;
400 gap: 1rem;
401 align-items: flex-start;
402 }
403 }
404