Ruperth commited on
Commit
eabdc81
·
1 Parent(s): e154491

feat: restyle the app with a hand-drawn sketchy aesthetic

Browse files

Replaces the YouTube-dark palette with a paper-and-ink look inspired by the SignalMod slide deck. Defines theme tokens for both light and dark modes, sketchy border radii, Patrick Hand and Caveat Brush from Google Fonts, and responsive breakpoints down to mobile.

Files changed (2) hide show
  1. frontend/index.html +3 -3
  2. frontend/src/index.css +798 -244
frontend/index.html CHANGED
@@ -1,14 +1,14 @@
1
  <!DOCTYPE html>
2
- <html lang="en">
3
  <head>
4
  <meta charset="UTF-8" />
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
  <link rel="icon" type="image/png" href="/signalmod_logo.png" />
7
- <title>SignalMod — Moderación inteligente para YouTube</title>
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
  <link
11
- href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap"
12
  rel="stylesheet"
13
  />
14
  </head>
 
1
  <!DOCTYPE html>
2
+ <html lang="es" data-theme="light">
3
  <head>
4
  <meta charset="UTF-8" />
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
  <link rel="icon" type="image/png" href="/signalmod_logo.png" />
7
+ <title>SignalMod</title>
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
  <link
11
+ href="https://fonts.googleapis.com/css2?family=Patrick+Hand&family=Caveat+Brush&family=Caveat:wght@500;700&display=swap"
12
  rel="stylesheet"
13
  />
14
  </head>
frontend/src/index.css CHANGED
@@ -1,89 +1,468 @@
1
- :root {
2
- --yt-bg: #0f0f0f;
3
- --yt-surface: #212121;
4
- --yt-text: #f1f1f1;
5
- --yt-muted: #aaaaaa;
6
- --yt-accent: #3ea6ff;
7
- --yt-red: #ff4e45;
8
- --yt-green: #2ba640;
9
- font-family: Roboto, Arial, sans-serif;
10
- color: var(--yt-text);
11
- background: var(--yt-bg);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  }
13
 
14
  * {
15
  box-sizing: border-box;
16
  }
17
 
18
- body {
 
 
19
  margin: 0;
20
  min-height: 100vh;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  }
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  .app-shell {
24
  display: flex;
25
  min-height: 100vh;
 
26
  }
27
 
28
  .sidebar {
29
- width: 240px;
30
- background: #0f0f0f;
31
- border-right: 1px solid #303030;
32
- padding: 1rem 0.75rem;
33
  display: flex;
34
  flex-direction: column;
35
- gap: 0.25rem;
36
  flex-shrink: 0;
 
37
  }
38
 
39
- .logo {
40
- font-weight: 700;
41
- font-size: 0.95rem;
42
- padding: 0.25rem 0.25rem 1rem;
43
- color: #fff;
44
- word-break: break-word;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  display: flex;
46
  align-items: center;
 
 
 
 
 
 
 
47
  }
48
 
49
- .logo-img {
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  width: 100%;
51
- height: auto;
52
- display: block;
53
- object-fit: contain;
54
  }
55
 
56
- .nav {
57
- color: var(--yt-muted);
58
- text-decoration: none;
59
- padding: 0.6rem 0.75rem;
60
- border-radius: 10px;
61
- font-size: 0.9rem;
62
  }
63
 
64
- .nav:hover,
65
- .nav.active {
66
- background: #272727;
67
- color: #fff;
 
 
 
 
 
 
 
 
 
 
 
68
  }
69
 
70
  .main-content {
71
  flex: 1;
72
  overflow-x: hidden;
 
 
73
  }
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  .watch-page {
76
- padding: 1.5rem 1.5rem 3rem;
 
77
  }
78
 
79
  .watch-grid {
80
  display: grid;
81
- grid-template-columns: 1fr 400px;
82
  gap: 1.5rem;
83
  align-items: start;
84
  }
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  @media (max-width: 1100px) {
 
 
 
 
 
 
87
  .watch-grid {
88
  grid-template-columns: 1fr;
89
  }
@@ -92,26 +471,31 @@ body {
92
  .staged-player {
93
  width: 100%;
94
  aspect-ratio: 16 / 9;
95
- background: #000;
96
- border-radius: 12px;
 
 
97
  overflow: hidden;
 
98
  }
99
 
100
- .player-poster {
101
- width: 100%;
102
- height: 100%;
103
- background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
104
- display: flex;
105
- flex-direction: column;
106
- align-items: center;
107
- justify-content: center;
108
- gap: 0.75rem;
109
- }
110
-
111
- .player-hint {
112
- color: var(--yt-muted);
113
- font-size: 0.9rem;
114
- margin: 0;
 
 
115
  }
116
 
117
  .player-iframe {
@@ -130,90 +514,49 @@ body {
130
  height: 100%;
131
  text-decoration: none;
132
  color: inherit;
133
- position: relative;
134
- background: #000;
135
  }
136
 
137
  .player-fallback-thumb {
138
  width: 100%;
139
  height: 100%;
140
  object-fit: cover;
141
- opacity: 0.75;
142
  }
143
 
144
  .player-fallback-cta {
145
  position: absolute;
146
  bottom: 1rem;
147
- background: rgba(0, 0, 0, 0.85);
148
- padding: 0.5rem 1rem;
149
- border-radius: 8px;
 
 
150
  font-size: 0.9rem;
151
- color: var(--yt-accent);
152
- }
153
-
154
- .play-icon {
155
- width: 68px;
156
- height: 48px;
157
- background: rgba(255, 255, 255, 0.9);
158
- color: #000;
159
- border-radius: 12px;
160
- display: flex;
161
- align-items: center;
162
- justify-content: center;
163
- font-size: 1.25rem;
164
  }
165
 
166
  .video-title {
167
- font-size: 1.25rem;
168
- font-weight: 600;
169
- margin: 0.75rem 0 0.35rem;
170
- line-height: 1.4;
171
- word-break: break-word;
172
- display: -webkit-box;
173
- -webkit-line-clamp: 3;
174
- -webkit-box-orient: vertical;
175
- overflow: hidden;
176
  }
177
 
178
  .video-meta {
179
- color: var(--yt-muted);
180
- font-size: 0.85rem;
181
- margin: 0;
182
- }
183
-
184
- .channel-row {
185
- display: flex;
186
- align-items: center;
187
- gap: 0.75rem;
188
- margin: 1rem 0;
189
- padding-bottom: 1rem;
190
- border-bottom: 1px solid #303030;
191
- }
192
-
193
- .channel-avatar {
194
- width: 40px;
195
- height: 40px;
196
- border-radius: 50%;
197
- background: var(--yt-red);
198
- display: flex;
199
- align-items: center;
200
- justify-content: center;
201
- font-weight: 700;
202
- }
203
-
204
- .channel-name {
205
  margin: 0;
206
- font-weight: 500;
207
  }
208
 
209
  .info-banner {
210
- font-size: 0.85rem;
211
- color: var(--yt-muted);
212
- background: #1a2a3a;
213
- border: 1px solid #303030;
214
- border-radius: 8px;
215
- padding: 0.6rem 0.85rem;
216
- margin: 0.5rem 0 0.75rem;
 
217
  }
218
 
219
  .info-banner.dismissible {
@@ -221,56 +564,82 @@ body {
221
  align-items: flex-start;
222
  justify-content: space-between;
223
  gap: 0.75rem;
224
- color: var(--yt-text);
225
  }
226
 
227
  .btn-dismiss {
228
  background: transparent;
229
  border: none;
230
- color: var(--yt-muted);
231
- font-size: 1.25rem;
232
  line-height: 1;
233
  cursor: pointer;
234
  padding: 0 0.25rem;
 
235
  }
236
 
237
  .btn-dismiss:hover {
238
- color: var(--yt-text);
239
  }
240
 
241
- .loading-comments {
242
- color: var(--yt-muted);
243
- font-size: 0.9rem;
244
- margin: 0.5rem 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  }
246
 
247
  .comments-header {
248
- font-size: 1rem;
249
- font-weight: 600;
250
- margin-bottom: 1rem;
 
251
  }
252
 
253
  .toxic-count {
254
- color: var(--yt-red);
255
  font-weight: 500;
256
- font-size: 0.85rem;
 
 
 
 
257
  }
258
 
259
  .comment-compose textarea {
260
  width: 100%;
261
- background: transparent;
262
- border: none;
263
- border-bottom: 1px solid #303030;
264
- color: var(--yt-text);
265
- font-size: 0.95rem;
266
- resize: vertical;
267
- padding: 0.5rem 0;
268
  font-family: inherit;
 
 
 
 
 
269
  }
270
 
271
  .comment-compose textarea:focus {
272
- outline: none;
273
- border-bottom-color: var(--yt-accent);
274
  }
275
 
276
  .live-analysis {
@@ -278,170 +647,229 @@ body {
278
  flex-wrap: wrap;
279
  gap: 0.5rem 1rem;
280
  align-items: center;
281
- font-size: 0.85rem;
282
  margin: 0.5rem 0;
283
- color: var(--yt-muted);
284
  }
285
 
286
  .compose-actions {
287
  display: flex;
288
  justify-content: flex-end;
289
- gap: 0.5rem;
290
- margin-top: 0.75rem;
291
  }
292
 
293
  .btn-primary,
294
  .btn-secondary,
295
  .btn-danger {
296
- border: none;
297
- border-radius: 999px;
298
- padding: 0.5rem 1rem;
299
- font-weight: 500;
300
  cursor: pointer;
301
- font-size: 0.9rem;
 
302
  }
303
 
304
  .btn-primary {
305
- background: #3f3f3f;
306
- color: #fff;
 
 
307
  }
308
 
309
- .btn-primary:hover {
310
- background: #525252;
 
311
  }
312
 
313
  .btn-secondary {
314
- background: transparent;
315
- color: var(--yt-accent);
316
  }
317
 
318
  .btn-danger {
319
- background: var(--yt-red);
320
- color: #fff;
 
321
  }
322
 
323
  .badge {
324
- font-size: 0.7rem;
325
  font-weight: 700;
326
- padding: 2px 8px;
327
- border-radius: 4px;
328
- text-transform: uppercase;
 
329
  }
330
 
331
  .badge-safe {
332
- background: rgba(43, 166, 64, 0.2);
333
- color: var(--yt-green);
 
334
  }
335
 
336
  .badge-toxic {
337
- background: rgba(255, 78, 69, 0.2);
338
- color: var(--yt-red);
 
339
  }
340
 
341
  .comment-list {
342
- margin-top: 1.5rem;
 
 
 
343
  }
344
 
345
  .comment-row {
346
  display: flex;
347
  gap: 0.75rem;
348
- padding: 0.75rem 0;
349
- border-bottom: 1px solid #222;
 
 
 
 
 
 
 
350
  }
351
 
352
  .avatar {
353
  width: 40px;
354
  height: 40px;
355
- border-radius: 50%;
356
- background: #717171;
 
357
  display: flex;
358
  align-items: center;
359
  justify-content: center;
360
- font-weight: 600;
361
  flex-shrink: 0;
 
362
  }
363
 
364
  .avatar.toxic {
365
- background: #5c1a1a;
366
  }
367
 
368
  .comment-meta {
369
  display: flex;
370
  flex-wrap: wrap;
371
- gap: 0.35rem 0.75rem;
372
  align-items: center;
373
- font-size: 0.8rem;
374
  }
375
 
376
  .comment-user {
377
- font-weight: 500;
378
- color: var(--yt-text);
379
  }
380
 
381
  .comment-time,
382
  .comment-pct {
383
- color: var(--yt-muted);
384
  }
385
 
386
  .comment-text {
387
  margin: 0.35rem 0 0;
388
  line-height: 1.45;
389
- font-size: 0.9rem;
390
  }
391
 
392
  .flagged {
393
- color: var(--yt-red);
394
- font-size: 0.8rem;
395
  margin: 0.25rem 0 0;
 
396
  }
397
 
398
  .comment-labels {
399
- font-size: 0.75rem;
400
- color: var(--yt-muted);
401
  margin: 0.2rem 0 0;
402
  }
403
 
 
 
 
 
 
 
 
404
  .suggested-rail {
405
  display: flex;
406
  flex-direction: column;
407
- gap: 0.5rem;
408
  }
409
 
410
  .rail-title {
411
- font-weight: 600;
412
- margin: 0 0 0.5rem;
 
413
  }
414
 
415
  .suggested-card {
416
- display: flex;
417
- gap: 0.5rem;
 
418
  background: transparent;
419
- border: none;
420
  color: inherit;
421
  text-align: left;
422
  cursor: pointer;
423
- padding: 0.25rem;
424
- border-radius: 8px;
425
  width: 100%;
 
 
 
 
 
 
 
426
  }
427
 
428
- .suggested-card:hover,
429
  .suggested-card.active {
430
- background: #272727;
 
 
431
  }
432
 
433
  .suggested-thumb {
434
  width: 168px;
435
  height: 94px;
436
  object-fit: cover;
437
- border-radius: 8px;
438
- flex-shrink: 0;
439
- background: #333;
 
 
 
 
440
  }
441
 
442
  .suggested-title {
443
- font-size: 0.85rem;
444
- font-weight: 500;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
445
  margin: 0;
446
  display: -webkit-box;
447
  -webkit-line-clamp: 2;
@@ -450,20 +878,20 @@ body {
450
  }
451
 
452
  .suggested-channel {
453
- font-size: 0.75rem;
454
- color: var(--yt-muted);
455
- margin: 0.25rem 0 0;
456
  }
457
 
458
  .loading-tag {
459
- font-size: 0.7rem;
460
- color: var(--yt-accent);
461
  }
462
 
463
  .embed-badge {
464
  display: inline-block;
465
- font-size: 0.65rem;
466
- color: var(--yt-muted);
467
  margin-top: 0.2rem;
468
  }
469
 
@@ -473,53 +901,66 @@ body {
473
  }
474
 
475
  .model-reason {
476
- font-size: 0.75rem;
477
- color: var(--yt-muted);
478
  font-weight: normal;
479
  }
480
 
481
  .error-banner,
482
  .error-text {
483
- color: var(--yt-red);
484
- font-size: 0.85rem;
485
  }
486
 
487
- .settings-page,
488
- .hub-page {
 
489
  padding: 1.5rem 2rem 3rem;
490
- max-width: 960px;
491
  }
492
 
493
  .settings-card,
494
  .chart-box,
495
- .hub-stat {
496
- background: var(--yt-surface);
497
- border-radius: 12px;
498
- padding: 1.25rem;
 
 
499
  margin-bottom: 1rem;
 
500
  }
501
 
502
  .hint {
503
- color: var(--yt-muted);
504
- font-size: 0.85rem;
505
  }
506
 
507
  .model-list {
508
  display: flex;
509
  flex-direction: column;
510
- gap: 0.5rem;
 
511
  }
512
 
513
  .model-option {
514
  display: flex;
515
  align-items: center;
516
- gap: 0.5rem;
517
  cursor: pointer;
 
 
 
 
 
 
 
518
  }
519
 
520
  .settings-msg {
521
- color: var(--yt-accent);
522
- font-size: 0.9rem;
 
523
  }
524
 
525
  .hub-cards {
@@ -529,15 +970,21 @@ body {
529
  margin-bottom: 1rem;
530
  }
531
 
 
 
 
 
532
  .stat-label {
533
  display: block;
534
- color: var(--yt-muted);
535
- font-size: 0.8rem;
536
  }
537
 
538
  .stat-value {
539
- font-size: 1.5rem;
 
540
  font-weight: 700;
 
541
  }
542
 
543
  .hub-charts {
@@ -546,7 +993,7 @@ body {
546
  gap: 1rem;
547
  }
548
 
549
- @media (max-width: 800px) {
550
  .hub-charts,
551
  .hub-cards {
552
  grid-template-columns: 1fr;
@@ -556,20 +1003,28 @@ body {
556
  .hub-table {
557
  width: 100%;
558
  border-collapse: collapse;
559
- font-size: 0.85rem;
560
  }
561
 
562
  .hub-table th,
563
  .hub-table td {
564
  text-align: left;
565
- padding: 0.5rem;
566
- border-bottom: 1px solid #333;
567
  }
568
 
569
- .hub-table-wrap {
570
- background: var(--yt-surface);
571
- border-radius: 12px;
572
- padding: 1rem;
 
 
 
 
 
 
 
 
573
  }
574
 
575
  .model-banner {
@@ -577,21 +1032,120 @@ body {
577
  align-items: center;
578
  gap: 0.6rem;
579
  margin: 0 0 1rem;
580
- padding: 0.65rem 1rem;
581
- background: linear-gradient(90deg, #1a3a1a 0%, #212121 100%);
582
- border: 1px solid #2ba640;
583
- border-radius: 8px;
584
- color: #e8f5e9;
585
- font-size: 0.9rem;
 
586
  }
587
 
588
  .model-banner-icon {
589
- font-size: 1.1rem;
590
  }
591
 
592
- .production-model-note {
593
- color: var(--yt-text);
594
- font-size: 0.9rem;
595
- margin: 0 0 0.75rem;
596
- line-height: 1.45;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597
  }
 
1
+ /* ---------- Hand-drawn theme tokens ---------- */
2
+ :root,
3
+ :root[data-theme="light"] {
4
+ --bg: #f4ede1;
5
+ --bg-soft: #ece2d0;
6
+ --surface: #faf4e7;
7
+ --surface-2: #f0e5cf;
8
+ --ink: #1a1a1a;
9
+ --ink-soft: #3b3b3b;
10
+ --muted: #6b6256;
11
+ --line: #1a1a1a;
12
+ --line-soft: #8a7e6d;
13
+ --accent: #d83d2c;
14
+ --accent-soft: #f4b8b0;
15
+ --safe: #2f8f3e;
16
+ --safe-soft: #cbe9c9;
17
+ --toxic: #c2331f;
18
+ --toxic-soft: #f4c4bc;
19
+ --link: #b32a1d;
20
+ --shadow: rgba(26, 26, 26, 0.18);
21
+ }
22
+
23
+ :root[data-theme="dark"] {
24
+ --bg: #1a1612;
25
+ --bg-soft: #221d18;
26
+ --surface: #25201a;
27
+ --surface-2: #2e2820;
28
+ --ink: #f4ede1;
29
+ --ink-soft: #d8cdb8;
30
+ --muted: #a89c87;
31
+ --line: #f4ede1;
32
+ --line-soft: #7d7464;
33
+ --accent: #ff6a55;
34
+ --accent-soft: #5a2a22;
35
+ --safe: #6fcf6f;
36
+ --safe-soft: #2d4a30;
37
+ --toxic: #ff7a66;
38
+ --toxic-soft: #5a2a22;
39
+ --link: #ffb09b;
40
+ --shadow: rgba(0, 0, 0, 0.5);
41
  }
42
 
43
  * {
44
  box-sizing: border-box;
45
  }
46
 
47
+ html,
48
+ body,
49
+ #root {
50
  margin: 0;
51
  min-height: 100vh;
52
+ background: var(--bg);
53
+ color: var(--ink);
54
+ }
55
+
56
+ body {
57
+ font-family: "Patrick Hand", "Comic Sans MS", "Segoe Print", system-ui, sans-serif;
58
+ font-size: 18px;
59
+ line-height: 1.45;
60
+ -webkit-font-smoothing: antialiased;
61
+ }
62
+
63
+ h1,
64
+ h2,
65
+ h3,
66
+ h4 {
67
+ font-family: "Caveat Brush", "Patrick Hand", system-ui, sans-serif;
68
+ font-weight: 400;
69
+ letter-spacing: 0.02em;
70
+ margin: 0 0 0.5rem;
71
+ color: var(--ink);
72
  }
73
 
74
+ h1 {
75
+ font-size: 2.4rem;
76
+ line-height: 1.05;
77
+ }
78
+ h2 {
79
+ font-size: 1.6rem;
80
+ }
81
+ h3 {
82
+ font-size: 1.25rem;
83
+ }
84
+
85
+ a {
86
+ color: var(--link);
87
+ }
88
+
89
+ code {
90
+ font-family: "Courier New", monospace;
91
+ background: var(--surface-2);
92
+ padding: 0 0.25rem;
93
+ border-radius: 4px;
94
+ font-size: 0.9em;
95
+ }
96
+
97
+ /* ---------- Sketchy primitives ---------- */
98
+ .sketch {
99
+ background: var(--surface);
100
+ border: 2px solid var(--line);
101
+ border-radius: 255px 15px 225px 15px / 15px 225px 15px 255px;
102
+ box-shadow: 2px 3px 0 var(--shadow);
103
+ }
104
+
105
+ .sketch-soft {
106
+ background: var(--surface);
107
+ border: 2px solid var(--line);
108
+ border-radius: 18px 6px 22px 8px / 8px 22px 6px 18px;
109
+ }
110
+
111
+ .sketch-tab {
112
+ background: var(--surface);
113
+ border: 2px solid var(--line);
114
+ border-radius: 12px 4px 14px 5px / 5px 14px 4px 12px;
115
+ padding: 0.35rem 0.85rem;
116
+ font-size: 1rem;
117
+ color: var(--ink);
118
+ text-decoration: none;
119
+ display: inline-block;
120
+ cursor: pointer;
121
+ transition: transform 0.08s ease;
122
+ }
123
+
124
+ .sketch-tab:hover {
125
+ transform: translate(-1px, -1px);
126
+ }
127
+
128
+ .sketch-underline {
129
+ display: inline-block;
130
+ position: relative;
131
+ }
132
+
133
+ .sketch-underline::after {
134
+ content: "";
135
+ position: absolute;
136
+ left: -4px;
137
+ right: -4px;
138
+ bottom: -6px;
139
+ height: 6px;
140
+ background: var(--accent);
141
+ border-radius: 60% 40% 50% 50% / 40% 60% 40% 60%;
142
+ opacity: 0.85;
143
+ }
144
+
145
+ .wavy {
146
+ width: 56px;
147
+ height: 14px;
148
+ display: inline-block;
149
+ background-image: radial-gradient(
150
+ circle at 8px 10px,
151
+ transparent 5px,
152
+ var(--line) 5px 6px,
153
+ transparent 6px
154
+ ),
155
+ radial-gradient(
156
+ circle at 22px 4px,
157
+ transparent 5px,
158
+ var(--line) 5px 6px,
159
+ transparent 6px
160
+ ),
161
+ radial-gradient(
162
+ circle at 36px 10px,
163
+ transparent 5px,
164
+ var(--line) 5px 6px,
165
+ transparent 6px
166
+ ),
167
+ radial-gradient(
168
+ circle at 50px 4px,
169
+ transparent 5px,
170
+ var(--line) 5px 6px,
171
+ transparent 6px
172
+ );
173
+ background-repeat: no-repeat;
174
+ }
175
+
176
+ /* ---------- App shell ---------- */
177
  .app-shell {
178
  display: flex;
179
  min-height: 100vh;
180
+ background: var(--bg);
181
  }
182
 
183
  .sidebar {
184
+ width: 220px;
185
+ background: var(--bg);
186
+ border-right: 2px solid var(--line);
187
+ padding: 1.1rem 0.9rem;
188
  display: flex;
189
  flex-direction: column;
190
+ gap: 0.6rem;
191
  flex-shrink: 0;
192
+ transition: width 0.18s ease;
193
  }
194
 
195
+ .sidebar.collapsed {
196
+ width: 0;
197
+ padding: 0;
198
+ border-right: none;
199
+ overflow: hidden;
200
+ }
201
+
202
+ .sidebar.collapsed > * {
203
+ display: none;
204
+ }
205
+
206
+ .brand {
207
+ overflow: hidden;
208
+ }
209
+
210
+ .brand-logo {
211
+ flex-shrink: 0;
212
+ }
213
+
214
+ .sidebar-section {
215
+ display: flex;
216
+ flex-direction: column;
217
+ gap: 0.45rem;
218
+ padding-bottom: 0.6rem;
219
+ border-bottom: 2px dashed var(--line-soft);
220
+ }
221
+
222
+ .sidebar-section:last-child {
223
+ border-bottom: none;
224
+ }
225
+
226
+ .sidebar-heading {
227
  display: flex;
228
  align-items: center;
229
+ gap: 0.6rem;
230
+ margin: 0 0 0.2rem;
231
+ padding: 0.4rem 0.75rem 0.2rem;
232
+ font-family: "Caveat Brush", "Patrick Hand", sans-serif;
233
+ font-size: 1.15rem;
234
+ font-weight: 400;
235
+ color: var(--muted);
236
  }
237
 
238
+ .nav-item {
239
+ display: flex;
240
+ align-items: center;
241
+ gap: 0.6rem;
242
+ padding: 0.55rem 0.75rem;
243
+ font-size: 1rem;
244
+ color: var(--ink);
245
+ text-decoration: none;
246
+ border: 2px solid transparent;
247
+ border-radius: 12px 4px 14px 5px / 5px 14px 4px 12px;
248
+ background: transparent;
249
+ cursor: pointer;
250
+ font-family: inherit;
251
+ text-align: left;
252
  width: 100%;
 
 
 
253
  }
254
 
255
+ .nav-item:hover {
256
+ background: var(--surface);
257
+ border-color: var(--line-soft);
 
 
 
258
  }
259
 
260
+ .nav-item.active {
261
+ background: var(--surface);
262
+ border-color: var(--line);
263
+ font-weight: 700;
264
+ box-shadow: 2px 2px 0 var(--shadow);
265
+ }
266
+
267
+ .nav-icon {
268
+ display: inline-flex;
269
+ align-items: center;
270
+ justify-content: center;
271
+ width: 1.6rem;
272
+ height: 1.6rem;
273
+ color: var(--ink);
274
+ flex-shrink: 0;
275
  }
276
 
277
  .main-content {
278
  flex: 1;
279
  overflow-x: hidden;
280
+ display: flex;
281
+ flex-direction: column;
282
  }
283
 
284
+ /* ---------- Topbar ---------- */
285
+ .topbar {
286
+ display: flex;
287
+ align-items: center;
288
+ gap: 1rem;
289
+ padding: 0.9rem 1.25rem;
290
+ border-bottom: 2px solid var(--line);
291
+ background: var(--bg);
292
+ position: sticky;
293
+ top: 0;
294
+ z-index: 10;
295
+ }
296
+
297
+ .topbar-left {
298
+ display: flex;
299
+ align-items: center;
300
+ gap: 0.85rem;
301
+ flex-shrink: 0;
302
+ }
303
+
304
+ .icon-btn {
305
+ width: 40px;
306
+ height: 40px;
307
+ display: inline-flex;
308
+ align-items: center;
309
+ justify-content: center;
310
+ background: transparent;
311
+ border: 2px solid var(--line);
312
+ border-radius: 12px 4px 14px 5px / 5px 14px 4px 12px;
313
+ cursor: pointer;
314
+ color: var(--ink);
315
+ font-family: inherit;
316
+ font-size: 1.1rem;
317
+ flex-shrink: 0;
318
+ }
319
+
320
+ .icon-btn:hover {
321
+ background: var(--surface);
322
+ transform: translate(-1px, -1px);
323
+ }
324
+
325
+ .brand {
326
+ display: flex;
327
+ align-items: center;
328
+ gap: 0.5rem;
329
+ text-decoration: none;
330
+ color: var(--ink);
331
+ }
332
+
333
+ .brand-logo {
334
+ height: 36px;
335
+ width: auto;
336
+ max-width: 100%;
337
+ display: block;
338
+ object-fit: contain;
339
+ }
340
+
341
+ .sidebar .brand {
342
+ padding: 0.25rem 0.5rem 1.25rem;
343
+ margin-bottom: 0.25rem;
344
+ justify-content: flex-start;
345
+ }
346
+
347
+ .sidebar .brand-logo {
348
+ height: 38px;
349
+ max-width: 100%;
350
+ }
351
+
352
+ .topbar-search {
353
+ flex: 1;
354
+ max-width: 720px;
355
+ display: flex;
356
+ align-items: center;
357
+ background: var(--surface);
358
+ border: 2px solid var(--line);
359
+ border-radius: 999px 30px 999px 30px / 30px 999px 30px 999px;
360
+ padding: 0.45rem 1rem;
361
+ gap: 0.5rem;
362
+ }
363
+
364
+ .topbar-search > svg {
365
+ color: var(--muted);
366
+ flex-shrink: 0;
367
+ }
368
+
369
+ .topbar-search input {
370
+ flex: 1;
371
+ background: transparent;
372
+ border: none;
373
+ outline: none;
374
+ font-family: inherit;
375
+ font-size: 1rem;
376
+ color: var(--ink);
377
+ min-width: 0;
378
+ }
379
+
380
+ .topbar-search input::placeholder {
381
+ color: var(--muted);
382
+ }
383
+
384
+ .topbar-right {
385
+ display: flex;
386
+ align-items: center;
387
+ gap: 0.5rem;
388
+ margin-left: auto;
389
+ flex-shrink: 0;
390
+ }
391
+
392
+ .lang-toggle,
393
+ .theme-toggle {
394
+ min-width: 48px;
395
+ height: 40px;
396
+ padding: 0 0.7rem;
397
+ font-family: inherit;
398
+ font-size: 0.95rem;
399
+ border: 2px solid var(--line);
400
+ border-radius: 12px 4px 14px 5px / 5px 14px 4px 12px;
401
+ background: var(--surface);
402
+ color: var(--ink);
403
+ cursor: pointer;
404
+ display: inline-flex;
405
+ align-items: center;
406
+ justify-content: center;
407
+ gap: 0.3rem;
408
+ }
409
+
410
+ .lang-toggle:hover,
411
+ .theme-toggle:hover {
412
+ transform: translate(-1px, -1px);
413
+ }
414
+
415
+ .sign-in {
416
+ height: 40px;
417
+ padding: 0 1.1rem;
418
+ background: var(--accent-soft);
419
+ border: 2px solid var(--accent);
420
+ color: var(--accent);
421
+ border-radius: 14px 4px 16px 6px / 6px 16px 4px 14px;
422
+ cursor: pointer;
423
+ font-family: inherit;
424
+ font-size: 1rem;
425
+ font-weight: 700;
426
+ }
427
+
428
+ .sign-in:hover {
429
+ background: var(--accent);
430
+ color: var(--surface);
431
+ }
432
+
433
+ /* ---------- Watch ---------- */
434
  .watch-page {
435
+ padding: 1.5rem 2rem 3rem;
436
+ width: 100%;
437
  }
438
 
439
  .watch-grid {
440
  display: grid;
441
+ grid-template-columns: minmax(0, 1fr) 402px;
442
  gap: 1.5rem;
443
  align-items: start;
444
  }
445
 
446
+ .primary-column {
447
+ min-width: 0;
448
+ width: 100%;
449
+ display: flex;
450
+ flex-direction: column;
451
+ }
452
+
453
+ @media (max-width: 1400px) {
454
+ .watch-grid {
455
+ grid-template-columns: minmax(0, 1fr) 360px;
456
+ }
457
+ }
458
+
459
  @media (max-width: 1100px) {
460
+ .watch-grid {
461
+ grid-template-columns: minmax(0, 1fr) 320px;
462
+ }
463
+ }
464
+
465
+ @media (max-width: 900px) {
466
  .watch-grid {
467
  grid-template-columns: 1fr;
468
  }
 
471
  .staged-player {
472
  width: 100%;
473
  aspect-ratio: 16 / 9;
474
+ background: var(--ink);
475
+ border: 2px solid var(--line);
476
+ border-radius: 18px 6px 22px 8px / 8px 22px 6px 18px;
477
+ box-shadow: 3px 4px 0 var(--shadow);
478
  overflow: hidden;
479
+ position: relative;
480
  }
481
 
482
+ .staged-player::before {
483
+ content: "▶";
484
+ position: absolute;
485
+ top: 50%;
486
+ left: 50%;
487
+ transform: translate(-50%, -50%);
488
+ color: var(--accent);
489
+ font-size: 4rem;
490
+ pointer-events: none;
491
+ opacity: 0.85;
492
+ z-index: 1;
493
+ }
494
+
495
+ .staged-player iframe,
496
+ .staged-player .player-fallback {
497
+ position: relative;
498
+ z-index: 2;
499
  }
500
 
501
  .player-iframe {
 
514
  height: 100%;
515
  text-decoration: none;
516
  color: inherit;
517
+ background: var(--ink);
 
518
  }
519
 
520
  .player-fallback-thumb {
521
  width: 100%;
522
  height: 100%;
523
  object-fit: cover;
524
+ opacity: 0.7;
525
  }
526
 
527
  .player-fallback-cta {
528
  position: absolute;
529
  bottom: 1rem;
530
+ background: var(--surface);
531
+ border: 2px solid var(--line);
532
+ color: var(--ink);
533
+ padding: 0.45rem 0.9rem;
534
+ border-radius: 12px 4px 14px 5px / 5px 14px 4px 12px;
535
  font-size: 0.9rem;
536
+ z-index: 3;
 
 
 
 
 
 
 
 
 
 
 
 
537
  }
538
 
539
  .video-title {
540
+ font-size: 1.7rem;
541
+ margin: 1rem 0 0.35rem;
542
+ line-height: 1.15;
 
 
 
 
 
 
543
  }
544
 
545
  .video-meta {
546
+ color: var(--muted);
547
+ font-size: 0.95rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
548
  margin: 0;
 
549
  }
550
 
551
  .info-banner {
552
+ font-size: 0.95rem;
553
+ color: var(--ink);
554
+ background: var(--surface);
555
+ border: 2px solid var(--line);
556
+ border-radius: 14px 4px 16px 6px / 6px 16px 4px 14px;
557
+ padding: 0.65rem 0.9rem;
558
+ margin: 0.6rem 0 0.75rem;
559
+ box-shadow: 2px 2px 0 var(--shadow);
560
  }
561
 
562
  .info-banner.dismissible {
 
564
  align-items: flex-start;
565
  justify-content: space-between;
566
  gap: 0.75rem;
 
567
  }
568
 
569
  .btn-dismiss {
570
  background: transparent;
571
  border: none;
572
+ color: var(--muted);
573
+ font-size: 1.4rem;
574
  line-height: 1;
575
  cursor: pointer;
576
  padding: 0 0.25rem;
577
+ font-family: inherit;
578
  }
579
 
580
  .btn-dismiss:hover {
581
+ color: var(--ink);
582
  }
583
 
584
+ .channel-row {
585
+ display: flex;
586
+ align-items: center;
587
+ gap: 0.75rem;
588
+ margin: 1rem 0;
589
+ padding-bottom: 1rem;
590
+ border-bottom: 2px dashed var(--line-soft);
591
+ }
592
+
593
+ .channel-avatar {
594
+ width: 42px;
595
+ height: 42px;
596
+ border-radius: 60% 40% 50% 50% / 40% 60% 40% 60%;
597
+ background: var(--accent);
598
+ color: var(--surface);
599
+ display: flex;
600
+ align-items: center;
601
+ justify-content: center;
602
+ font-weight: 700;
603
+ border: 2px solid var(--line);
604
+ }
605
+
606
+ .channel-name {
607
+ margin: 0;
608
+ font-weight: 700;
609
  }
610
 
611
  .comments-header {
612
+ font-size: 1.15rem;
613
+ font-weight: 700;
614
+ margin-bottom: 0.85rem;
615
+ font-family: "Caveat Brush", "Patrick Hand", sans-serif;
616
  }
617
 
618
  .toxic-count {
619
+ color: var(--toxic);
620
  font-weight: 500;
621
+ font-size: 0.95rem;
622
+ }
623
+
624
+ .comment-compose {
625
+ margin-bottom: 1rem;
626
  }
627
 
628
  .comment-compose textarea {
629
  width: 100%;
630
+ background: var(--surface);
631
+ border: 2px solid var(--line);
632
+ color: var(--ink);
 
 
 
 
633
  font-family: inherit;
634
+ font-size: 1rem;
635
+ resize: vertical;
636
+ padding: 0.6rem 0.85rem;
637
+ border-radius: 14px 4px 16px 6px / 6px 16px 4px 14px;
638
+ outline: none;
639
  }
640
 
641
  .comment-compose textarea:focus {
642
+ box-shadow: 2px 2px 0 var(--shadow);
 
643
  }
644
 
645
  .live-analysis {
 
647
  flex-wrap: wrap;
648
  gap: 0.5rem 1rem;
649
  align-items: center;
650
+ font-size: 0.95rem;
651
  margin: 0.5rem 0;
652
+ color: var(--muted);
653
  }
654
 
655
  .compose-actions {
656
  display: flex;
657
  justify-content: flex-end;
658
+ gap: 0.6rem;
659
+ margin-top: 0.6rem;
660
  }
661
 
662
  .btn-primary,
663
  .btn-secondary,
664
  .btn-danger {
665
+ border: 2px solid var(--line);
666
+ border-radius: 14px 4px 16px 6px / 6px 16px 4px 14px;
667
+ padding: 0.5rem 1.1rem;
668
+ font-weight: 700;
669
  cursor: pointer;
670
+ font-size: 1rem;
671
+ font-family: inherit;
672
  }
673
 
674
  .btn-primary {
675
+ background: var(--accent);
676
+ color: var(--surface);
677
+ border-color: var(--accent);
678
+ box-shadow: 2px 2px 0 var(--shadow);
679
  }
680
 
681
+ .btn-primary:disabled {
682
+ opacity: 0.5;
683
+ cursor: not-allowed;
684
  }
685
 
686
  .btn-secondary {
687
+ background: var(--surface);
688
+ color: var(--ink);
689
  }
690
 
691
  .btn-danger {
692
+ background: var(--toxic);
693
+ color: var(--surface);
694
+ border-color: var(--toxic);
695
  }
696
 
697
  .badge {
698
+ font-size: 0.8rem;
699
  font-weight: 700;
700
+ padding: 2px 10px;
701
+ border: 2px solid var(--line);
702
+ border-radius: 10px 3px 12px 4px / 4px 12px 3px 10px;
703
+ display: inline-block;
704
  }
705
 
706
  .badge-safe {
707
+ background: var(--safe-soft);
708
+ color: var(--safe);
709
+ border-color: var(--safe);
710
  }
711
 
712
  .badge-toxic {
713
+ background: var(--toxic-soft);
714
+ color: var(--toxic);
715
+ border-color: var(--toxic);
716
  }
717
 
718
  .comment-list {
719
+ margin-top: 1rem;
720
+ display: flex;
721
+ flex-direction: column;
722
+ gap: 0.6rem;
723
  }
724
 
725
  .comment-row {
726
  display: flex;
727
  gap: 0.75rem;
728
+ padding: 0.75rem;
729
+ background: var(--surface);
730
+ border: 2px solid var(--line);
731
+ border-radius: 16px 5px 18px 6px / 6px 18px 5px 16px;
732
+ box-shadow: 2px 2px 0 var(--shadow);
733
+ }
734
+
735
+ .comment-row.toxic {
736
+ border-color: var(--toxic);
737
  }
738
 
739
  .avatar {
740
  width: 40px;
741
  height: 40px;
742
+ border-radius: 60% 40% 50% 50% / 40% 60% 40% 60%;
743
+ background: var(--line-soft);
744
+ color: var(--surface);
745
  display: flex;
746
  align-items: center;
747
  justify-content: center;
748
+ font-weight: 700;
749
  flex-shrink: 0;
750
+ border: 2px solid var(--line);
751
  }
752
 
753
  .avatar.toxic {
754
+ background: var(--toxic);
755
  }
756
 
757
  .comment-meta {
758
  display: flex;
759
  flex-wrap: wrap;
760
+ gap: 0.35rem 0.85rem;
761
  align-items: center;
762
+ font-size: 0.9rem;
763
  }
764
 
765
  .comment-user {
766
+ font-weight: 700;
767
+ color: var(--ink);
768
  }
769
 
770
  .comment-time,
771
  .comment-pct {
772
+ color: var(--muted);
773
  }
774
 
775
  .comment-text {
776
  margin: 0.35rem 0 0;
777
  line-height: 1.45;
778
+ font-size: 1rem;
779
  }
780
 
781
  .flagged {
782
+ color: var(--toxic);
783
+ font-size: 0.9rem;
784
  margin: 0.25rem 0 0;
785
+ font-weight: 700;
786
  }
787
 
788
  .comment-labels {
789
+ font-size: 0.85rem;
790
+ color: var(--muted);
791
  margin: 0.2rem 0 0;
792
  }
793
 
794
+ .loading-comments {
795
+ color: var(--muted);
796
+ font-size: 1rem;
797
+ margin: 0.5rem 0;
798
+ }
799
+
800
+ /* ---------- Suggested rail ---------- */
801
  .suggested-rail {
802
  display: flex;
803
  flex-direction: column;
804
+ gap: 0.6rem;
805
  }
806
 
807
  .rail-title {
808
+ font-family: "Caveat Brush", "Patrick Hand", sans-serif;
809
+ font-size: 1.4rem;
810
+ margin: 0 0 0.3rem;
811
  }
812
 
813
  .suggested-card {
814
+ display: grid;
815
+ grid-template-columns: 168px 1fr;
816
+ gap: 0.6rem;
817
  background: transparent;
818
+ border: 2px solid transparent;
819
  color: inherit;
820
  text-align: left;
821
  cursor: pointer;
822
+ padding: 0.4rem;
823
+ border-radius: 14px 4px 16px 6px / 6px 16px 4px 14px;
824
  width: 100%;
825
+ font-family: inherit;
826
+ align-items: start;
827
+ }
828
+
829
+ .suggested-card:hover {
830
+ background: var(--surface);
831
+ border-color: var(--line-soft);
832
  }
833
 
 
834
  .suggested-card.active {
835
+ background: var(--surface);
836
+ border-color: var(--line);
837
+ box-shadow: 2px 2px 0 var(--shadow);
838
  }
839
 
840
  .suggested-thumb {
841
  width: 168px;
842
  height: 94px;
843
  object-fit: cover;
844
+ border-radius: 10px 3px 12px 4px / 4px 12px 3px 10px;
845
+ background: var(--ink);
846
+ border: 2px solid var(--line);
847
+ }
848
+
849
+ .suggested-info {
850
+ min-width: 0;
851
  }
852
 
853
  .suggested-title {
854
+ font-size: 0.95rem;
855
+ font-weight: 700;
856
+ margin: 0;
857
+ display: -webkit-box;
858
+ -webkit-line-clamp: 2;
859
+ -webkit-box-orient: vertical;
860
+ overflow: hidden;
861
+ line-height: 1.25;
862
+ }
863
+
864
+ .suggested-info {
865
+ display: flex;
866
+ flex-direction: column;
867
+ gap: 0.15rem;
868
+ }
869
+
870
+ .suggested-title {
871
+ font-size: 0.95rem;
872
+ font-weight: 700;
873
  margin: 0;
874
  display: -webkit-box;
875
  -webkit-line-clamp: 2;
 
878
  }
879
 
880
  .suggested-channel {
881
+ font-size: 0.85rem;
882
+ color: var(--muted);
883
+ margin: 0.1rem 0 0;
884
  }
885
 
886
  .loading-tag {
887
+ font-size: 0.8rem;
888
+ color: var(--accent);
889
  }
890
 
891
  .embed-badge {
892
  display: inline-block;
893
+ font-size: 0.75rem;
894
+ color: var(--muted);
895
  margin-top: 0.2rem;
896
  }
897
 
 
901
  }
902
 
903
  .model-reason {
904
+ font-size: 0.85rem;
905
+ color: var(--muted);
906
  font-weight: normal;
907
  }
908
 
909
  .error-banner,
910
  .error-text {
911
+ color: var(--toxic);
912
+ font-size: 0.95rem;
913
  }
914
 
915
+ /* ---------- Hub & settings ---------- */
916
+ .hub-page,
917
+ .settings-page {
918
  padding: 1.5rem 2rem 3rem;
919
+ max-width: 1080px;
920
  }
921
 
922
  .settings-card,
923
  .chart-box,
924
+ .hub-stat,
925
+ .hub-table-wrap {
926
+ background: var(--surface);
927
+ border: 2px solid var(--line);
928
+ border-radius: 18px 6px 22px 8px / 8px 22px 6px 18px;
929
+ padding: 1.2rem 1.3rem;
930
  margin-bottom: 1rem;
931
+ box-shadow: 3px 3px 0 var(--shadow);
932
  }
933
 
934
  .hint {
935
+ color: var(--muted);
936
+ font-size: 0.95rem;
937
  }
938
 
939
  .model-list {
940
  display: flex;
941
  flex-direction: column;
942
+ gap: 0.6rem;
943
+ margin-top: 0.5rem;
944
  }
945
 
946
  .model-option {
947
  display: flex;
948
  align-items: center;
949
+ gap: 0.6rem;
950
  cursor: pointer;
951
+ padding: 0.5rem 0.6rem;
952
+ border: 2px dashed var(--line-soft);
953
+ border-radius: 12px 4px 14px 5px / 5px 14px 4px 12px;
954
+ }
955
+
956
+ .model-option:hover {
957
+ background: var(--surface-2);
958
  }
959
 
960
  .settings-msg {
961
+ color: var(--safe);
962
+ font-size: 1rem;
963
+ font-weight: 700;
964
  }
965
 
966
  .hub-cards {
 
970
  margin-bottom: 1rem;
971
  }
972
 
973
+ .hub-stat {
974
+ margin-bottom: 0;
975
+ }
976
+
977
  .stat-label {
978
  display: block;
979
+ color: var(--muted);
980
+ font-size: 0.95rem;
981
  }
982
 
983
  .stat-value {
984
+ font-family: "Caveat Brush", "Patrick Hand", sans-serif;
985
+ font-size: 2rem;
986
  font-weight: 700;
987
+ color: var(--ink);
988
  }
989
 
990
  .hub-charts {
 
993
  gap: 1rem;
994
  }
995
 
996
+ @media (max-width: 900px) {
997
  .hub-charts,
998
  .hub-cards {
999
  grid-template-columns: 1fr;
 
1003
  .hub-table {
1004
  width: 100%;
1005
  border-collapse: collapse;
1006
+ font-size: 0.95rem;
1007
  }
1008
 
1009
  .hub-table th,
1010
  .hub-table td {
1011
  text-align: left;
1012
+ padding: 0.55rem 0.5rem;
1013
+ border-bottom: 2px dashed var(--line-soft);
1014
  }
1015
 
1016
+ .hub-table th {
1017
+ font-family: "Caveat Brush", "Patrick Hand", sans-serif;
1018
+ font-size: 1.1rem;
1019
+ font-weight: 400;
1020
+ color: var(--ink);
1021
+ }
1022
+
1023
+ .production-model-note {
1024
+ color: var(--ink);
1025
+ font-size: 1rem;
1026
+ margin: 0 0 0.6rem;
1027
+ line-height: 1.5;
1028
  }
1029
 
1030
  .model-banner {
 
1032
  align-items: center;
1033
  gap: 0.6rem;
1034
  margin: 0 0 1rem;
1035
+ padding: 0.7rem 1rem;
1036
+ background: var(--safe-soft);
1037
+ border: 2px solid var(--safe);
1038
+ border-radius: 14px 4px 16px 6px / 6px 16px 4px 14px;
1039
+ color: var(--ink);
1040
+ font-size: 1rem;
1041
+ box-shadow: 2px 2px 0 var(--shadow);
1042
  }
1043
 
1044
  .model-banner-icon {
1045
+ font-size: 1.2rem;
1046
  }
1047
 
1048
+ input[type="range"] {
1049
+ width: 100%;
1050
+ accent-color: var(--accent);
1051
+ }
1052
+
1053
+ input[type="radio"] {
1054
+ accent-color: var(--accent);
1055
+ width: 18px;
1056
+ height: 18px;
1057
+ }
1058
+
1059
+ /* ---------- Mobile ---------- */
1060
+ .mobile-only {
1061
+ display: none;
1062
+ }
1063
+
1064
+ @media (max-width: 820px) {
1065
+ .sidebar {
1066
+ position: fixed;
1067
+ inset: 0 auto 0 0;
1068
+ z-index: 30;
1069
+ transform: translateX(-100%);
1070
+ transition: transform 0.2s ease, width 0.18s ease;
1071
+ width: 240px;
1072
+ box-shadow: 4px 0 0 var(--shadow);
1073
+ }
1074
+
1075
+ .sidebar.open {
1076
+ transform: translateX(0);
1077
+ }
1078
+
1079
+ .sidebar-backdrop {
1080
+ position: fixed;
1081
+ inset: 0;
1082
+ background: var(--shadow);
1083
+ z-index: 20;
1084
+ }
1085
+
1086
+ .mobile-only {
1087
+ display: inline-flex;
1088
+ }
1089
+
1090
+ .topbar-search {
1091
+ max-width: none;
1092
+ }
1093
+
1094
+ .sign-in {
1095
+ padding: 0 0.7rem;
1096
+ font-size: 0.9rem;
1097
+ }
1098
+
1099
+ .watch-page,
1100
+ .hub-page,
1101
+ .settings-page {
1102
+ padding: 1rem 0.9rem 2rem;
1103
+ }
1104
+
1105
+ .suggested-thumb {
1106
+ width: 140px;
1107
+ height: 80px;
1108
+ }
1109
+ }
1110
+
1111
+ @media (max-width: 560px) {
1112
+ body {
1113
+ font-size: 17px;
1114
+ }
1115
+
1116
+ h1 {
1117
+ font-size: 2rem;
1118
+ }
1119
+
1120
+ .topbar {
1121
+ padding: 0.7rem 0.85rem;
1122
+ gap: 0.5rem;
1123
+ }
1124
+
1125
+ .brand-mark {
1126
+ font-size: 1.4rem;
1127
+ }
1128
+
1129
+ .lang-toggle,
1130
+ .theme-toggle,
1131
+ .icon-btn {
1132
+ width: 38px;
1133
+ height: 38px;
1134
+ min-width: 38px;
1135
+ padding: 0;
1136
+ }
1137
+
1138
+ .sign-in {
1139
+ height: 38px;
1140
+ }
1141
+
1142
+ .suggested-card {
1143
+ flex-direction: column;
1144
+ }
1145
+
1146
+ .suggested-thumb {
1147
+ width: 100%;
1148
+ height: auto;
1149
+ aspect-ratio: 16 / 9;
1150
+ }
1151
  }