@livepeer-frameworks/player-core 0.0.4 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +21 -6
  2. package/dist/cjs/index.js +792 -146
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/esm/index.js +792 -146
  5. package/dist/esm/index.js.map +1 -1
  6. package/dist/player.css +185 -373
  7. package/dist/types/core/GatewayClient.d.ts +3 -4
  8. package/dist/types/core/InteractionController.d.ts +12 -0
  9. package/dist/types/core/MetaTrackManager.d.ts +1 -1
  10. package/dist/types/core/PlayerController.d.ts +18 -2
  11. package/dist/types/core/PlayerInterface.d.ts +10 -0
  12. package/dist/types/core/SeekingUtils.d.ts +3 -1
  13. package/dist/types/core/StreamStateClient.d.ts +1 -1
  14. package/dist/types/players/HlsJsPlayer.d.ts +8 -0
  15. package/dist/types/players/MewsWsPlayer/index.d.ts +1 -1
  16. package/dist/types/players/VideoJsPlayer.d.ts +12 -4
  17. package/dist/types/players/WebCodecsPlayer/SyncController.d.ts +1 -1
  18. package/dist/types/players/WebCodecsPlayer/index.d.ts +11 -0
  19. package/dist/types/players/WebCodecsPlayer/types.d.ts +25 -3
  20. package/dist/types/players/WebCodecsPlayer/worker/types.d.ts +20 -2
  21. package/dist/types/types.d.ts +32 -1
  22. package/dist/types/vanilla/FrameWorksPlayer.d.ts +5 -5
  23. package/dist/types/vanilla/index.d.ts +3 -3
  24. package/dist/workers/decoder.worker.js +183 -6
  25. package/dist/workers/decoder.worker.js.map +1 -1
  26. package/package.json +1 -1
  27. package/src/core/ABRController.ts +38 -36
  28. package/src/core/CodecUtils.ts +50 -47
  29. package/src/core/Disposable.ts +4 -4
  30. package/src/core/EventEmitter.ts +1 -1
  31. package/src/core/GatewayClient.ts +48 -48
  32. package/src/core/InteractionController.ts +89 -82
  33. package/src/core/LiveDurationProxy.ts +14 -16
  34. package/src/core/MetaTrackManager.ts +74 -66
  35. package/src/core/MistReporter.ts +72 -45
  36. package/src/core/MistSignaling.ts +59 -56
  37. package/src/core/PlayerController.ts +724 -375
  38. package/src/core/PlayerInterface.ts +89 -59
  39. package/src/core/PlayerManager.ts +118 -123
  40. package/src/core/PlayerRegistry.ts +59 -42
  41. package/src/core/QualityMonitor.ts +38 -31
  42. package/src/core/ScreenWakeLockManager.ts +8 -9
  43. package/src/core/SeekingUtils.ts +31 -22
  44. package/src/core/StreamStateClient.ts +75 -69
  45. package/src/core/SubtitleManager.ts +25 -23
  46. package/src/core/TelemetryReporter.ts +34 -31
  47. package/src/core/TimeFormat.ts +13 -17
  48. package/src/core/TimerManager.ts +25 -9
  49. package/src/core/UrlUtils.ts +20 -17
  50. package/src/core/detector.ts +44 -44
  51. package/src/core/index.ts +57 -48
  52. package/src/core/scorer.ts +137 -138
  53. package/src/core/selector.ts +2 -6
  54. package/src/global.d.ts +1 -1
  55. package/src/index.ts +46 -35
  56. package/src/players/DashJsPlayer.ts +175 -114
  57. package/src/players/HlsJsPlayer.ts +154 -76
  58. package/src/players/MewsWsPlayer/SourceBufferManager.ts +44 -39
  59. package/src/players/MewsWsPlayer/WebSocketManager.ts +9 -10
  60. package/src/players/MewsWsPlayer/index.ts +196 -154
  61. package/src/players/MewsWsPlayer/types.ts +21 -21
  62. package/src/players/MistPlayer.ts +46 -27
  63. package/src/players/MistWebRTCPlayer/index.ts +175 -129
  64. package/src/players/NativePlayer.ts +203 -143
  65. package/src/players/VideoJsPlayer.ts +200 -146
  66. package/src/players/WebCodecsPlayer/JitterBuffer.ts +6 -7
  67. package/src/players/WebCodecsPlayer/LatencyProfiles.ts +43 -43
  68. package/src/players/WebCodecsPlayer/RawChunkParser.ts +10 -10
  69. package/src/players/WebCodecsPlayer/SyncController.ts +46 -55
  70. package/src/players/WebCodecsPlayer/WebSocketController.ts +67 -69
  71. package/src/players/WebCodecsPlayer/index.ts +280 -220
  72. package/src/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.ts +12 -17
  73. package/src/players/WebCodecsPlayer/types.ts +81 -53
  74. package/src/players/WebCodecsPlayer/worker/decoder.worker.ts +255 -192
  75. package/src/players/WebCodecsPlayer/worker/types.ts +33 -29
  76. package/src/players/index.ts +8 -8
  77. package/src/styles/animations.css +2 -1
  78. package/src/styles/player.css +182 -356
  79. package/src/styles/tailwind.css +473 -159
  80. package/src/types.ts +75 -33
  81. package/src/vanilla/FrameWorksPlayer.ts +34 -19
  82. package/src/vanilla/index.ts +7 -7
@@ -25,24 +25,24 @@
25
25
  */
26
26
  .fw-player-surface {
27
27
  /* Tokyo Night color palette */
28
- --tn-bg-dark: 235 21% 11%; /* #1a1b26 - Darkest (slab backgrounds) */
29
- --tn-bg: 233 23% 17%; /* #24283b - Main background */
30
- --tn-bg-highlight: 233 23% 21%; /* #292e42 - Elevated surfaces */
31
- --tn-bg-visual: 232 27% 25%; /* #33395e - Selection/active states */
28
+ --tn-bg-dark: 235 21% 11%; /* #1a1b26 - Darkest (slab backgrounds) */
29
+ --tn-bg: 233 23% 17%; /* #24283b - Main background */
30
+ --tn-bg-highlight: 233 23% 21%; /* #292e42 - Elevated surfaces */
31
+ --tn-bg-visual: 232 27% 25%; /* #33395e - Selection/active states */
32
32
 
33
33
  /* Text hierarchy */
34
- --tn-fg: 223 27% 76%; /* #a9b1d6 - Primary text */
35
- --tn-fg-dark: 224 16% 53%; /* #787c99 - Secondary text (muted) */
36
- --tn-fg-gutter: 228 15% 45%; /* #5a607f - Borders, seams */
34
+ --tn-fg: 223 27% 76%; /* #a9b1d6 - Primary text */
35
+ --tn-fg-dark: 224 16% 53%; /* #787c99 - Secondary text (muted) */
36
+ --tn-fg-gutter: 228 15% 45%; /* #5a607f - Borders, seams */
37
37
 
38
38
  /* Accent colors (semantic) */
39
- --tn-blue: 218 79% 73%; /* #7aa2f7 - Primary actions */
40
- --tn-green: 95 53% 55%; /* #9ece6a - Success */
41
- --tn-red: 348 74% 64%; /* #f7768e - Destructive, live */
42
- --tn-yellow: 35 79% 64%; /* #e0af68 - Warnings */
43
- --tn-purple: 267 82% 77%; /* #bb9af7 - Secondary accent */
44
- --tn-cyan: 178 64% 63%; /* #7dcfff - Info */
45
- --tn-teal: 162 66% 62%; /* #73daca - Terminal green */
39
+ --tn-blue: 218 79% 73%; /* #7aa2f7 - Primary actions */
40
+ --tn-green: 95 53% 55%; /* #9ece6a - Success */
41
+ --tn-red: 348 74% 64%; /* #f7768e - Destructive, live */
42
+ --tn-yellow: 35 79% 64%; /* #e0af68 - Warnings */
43
+ --tn-purple: 267 82% 77%; /* #bb9af7 - Secondary accent */
44
+ --tn-cyan: 178 64% 63%; /* #7dcfff - Info */
45
+ --tn-teal: 162 66% 62%; /* #73daca - Terminal green */
46
46
 
47
47
  /* Player-internal variables (not shared with host) */
48
48
  --fw-background: var(--tn-bg);
@@ -147,7 +147,9 @@
147
147
  border-radius: 0;
148
148
  background: transparent;
149
149
  color: hsl(var(--tn-fg));
150
- transition: background-color 0.15s, color 0.15s;
150
+ transition:
151
+ background-color 0.15s,
152
+ color 0.15s;
151
153
  cursor: pointer;
152
154
  }
153
155
 
@@ -160,10 +162,18 @@
160
162
  }
161
163
 
162
164
  /* Status indicators */
163
- .fw-status-online { color: hsl(var(--tn-green)); }
164
- .fw-status-offline { color: hsl(var(--tn-red)); }
165
- .fw-status-warning { color: hsl(var(--tn-yellow)); }
166
- .fw-status-info { color: hsl(var(--tn-cyan)); }
165
+ .fw-status-online {
166
+ color: hsl(var(--tn-green));
167
+ }
168
+ .fw-status-offline {
169
+ color: hsl(var(--tn-red));
170
+ }
171
+ .fw-status-warning {
172
+ color: hsl(var(--tn-yellow));
173
+ }
174
+ .fw-status-info {
175
+ color: hsl(var(--tn-cyan));
176
+ }
167
177
 
168
178
  .animate-spin-slow {
169
179
  animation: spin-slow 18s linear infinite;
@@ -178,7 +188,7 @@
178
188
  height: 100%;
179
189
  width: 100%;
180
190
  overflow: hidden;
181
- border-radius: 0; /* Slabs don't have rounded corners */
191
+ border-radius: 0; /* Slabs don't have rounded corners */
182
192
  background-color: hsl(var(--tn-bg-dark));
183
193
  border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
184
194
  }
@@ -221,165 +231,457 @@
221
231
  ===================================================== */
222
232
 
223
233
  /* Positioning */
224
- .inset-0 { inset: 0; }
225
- .inset-x-0 { left: 0; right: 0; }
226
- .inset-y-0 { top: 0; bottom: 0; }
227
- .top-0 { top: 0; }
228
- .top-2 { top: 0.5rem; }
229
- .right-0 { right: 0; }
230
- .right-2 { right: 0.5rem; }
231
- .bottom-0 { bottom: 0; }
232
- .bottom-2 { bottom: 0.5rem; }
233
- .left-0 { left: 0; }
234
- .left-2 { left: 0.5rem; }
234
+ .inset-0 {
235
+ inset: 0;
236
+ }
237
+ .inset-x-0 {
238
+ left: 0;
239
+ right: 0;
240
+ }
241
+ .inset-y-0 {
242
+ top: 0;
243
+ bottom: 0;
244
+ }
245
+ .top-0 {
246
+ top: 0;
247
+ }
248
+ .top-2 {
249
+ top: 0.5rem;
250
+ }
251
+ .right-0 {
252
+ right: 0;
253
+ }
254
+ .right-2 {
255
+ right: 0.5rem;
256
+ }
257
+ .bottom-0 {
258
+ bottom: 0;
259
+ }
260
+ .bottom-2 {
261
+ bottom: 0.5rem;
262
+ }
263
+ .left-0 {
264
+ left: 0;
265
+ }
266
+ .left-2 {
267
+ left: 0.5rem;
268
+ }
235
269
 
236
270
  /* Sizing */
237
- .w-2 { width: 0.5rem; }
238
- .w-2\.5 { width: 0.625rem; }
239
- .w-4 { width: 1rem; }
240
- .w-5 { width: 1.25rem; }
241
- .w-6 { width: 1.5rem; }
242
- .w-8 { width: 2rem; }
243
- .w-10 { width: 2.5rem; }
244
- .w-12 { width: 3rem; }
245
- .w-24 { width: 6rem; }
246
- .w-28 { width: 7rem; }
247
- .w-48 { width: 12rem; }
248
- .w-full { width: 100%; }
249
- .h-1 { height: 0.25rem; }
250
- .h-1\.5 { height: 0.375rem; }
251
- .h-2 { height: 0.5rem; }
252
- .h-2\.5 { height: 0.625rem; }
253
- .h-4 { height: 1rem; }
254
- .h-5 { height: 1.25rem; }
255
- .h-6 { height: 1.5rem; }
256
- .h-8 { height: 2rem; }
257
- .h-10 { height: 2.5rem; }
258
- .h-12 { height: 3rem; }
259
- .h-full { height: 100%; }
260
- .min-w-0 { min-width: 0; }
261
- .max-w-xs { max-width: 20rem; }
262
- .max-w-sm { max-width: 24rem; }
263
- .max-h-\[80\%\] { max-height: 80%; }
264
- .max-w-\[320px\] { max-width: 320px; }
271
+ .w-2 {
272
+ width: 0.5rem;
273
+ }
274
+ .w-2\.5 {
275
+ width: 0.625rem;
276
+ }
277
+ .w-4 {
278
+ width: 1rem;
279
+ }
280
+ .w-5 {
281
+ width: 1.25rem;
282
+ }
283
+ .w-6 {
284
+ width: 1.5rem;
285
+ }
286
+ .w-8 {
287
+ width: 2rem;
288
+ }
289
+ .w-10 {
290
+ width: 2.5rem;
291
+ }
292
+ .w-12 {
293
+ width: 3rem;
294
+ }
295
+ .w-24 {
296
+ width: 6rem;
297
+ }
298
+ .w-28 {
299
+ width: 7rem;
300
+ }
301
+ .w-48 {
302
+ width: 12rem;
303
+ }
304
+ .w-full {
305
+ width: 100%;
306
+ }
307
+ .h-1 {
308
+ height: 0.25rem;
309
+ }
310
+ .h-1\.5 {
311
+ height: 0.375rem;
312
+ }
313
+ .h-2 {
314
+ height: 0.5rem;
315
+ }
316
+ .h-2\.5 {
317
+ height: 0.625rem;
318
+ }
319
+ .h-4 {
320
+ height: 1rem;
321
+ }
322
+ .h-5 {
323
+ height: 1.25rem;
324
+ }
325
+ .h-6 {
326
+ height: 1.5rem;
327
+ }
328
+ .h-8 {
329
+ height: 2rem;
330
+ }
331
+ .h-10 {
332
+ height: 2.5rem;
333
+ }
334
+ .h-12 {
335
+ height: 3rem;
336
+ }
337
+ .h-full {
338
+ height: 100%;
339
+ }
340
+ .min-w-0 {
341
+ min-width: 0;
342
+ }
343
+ .max-w-xs {
344
+ max-width: 20rem;
345
+ }
346
+ .max-w-sm {
347
+ max-width: 24rem;
348
+ }
349
+ .max-h-\[80\%\] {
350
+ max-height: 80%;
351
+ }
352
+ .max-w-\[320px\] {
353
+ max-width: 320px;
354
+ }
265
355
 
266
356
  /* Spacing */
267
- .gap-1 { gap: 0.25rem; }
268
- .gap-2 { gap: 0.5rem; }
269
- .gap-4 { gap: 1rem; }
270
- .space-x-1 > * + * { margin-left: 0.25rem; }
271
- .space-x-2 > * + * { margin-left: 0.5rem; }
272
- .space-y-1 > * + * { margin-top: 0.25rem; }
273
- .p-1 { padding: 0.25rem; }
274
- .p-2 { padding: 0.5rem; }
275
- .p-3 { padding: 0.75rem; }
276
- .pr-2 { padding-right: 0.5rem; }
277
- .pr-5 { padding-right: 1.25rem; }
278
- .px-1 { padding-left: 0.25rem; padding-right: 0.25rem; }
279
- .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
280
- .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }
281
- .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }
282
- .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
283
- .m-0 { margin: 0; }
284
- .mx-auto { margin-left: auto; margin-right: auto; }
285
- .mt-1 { margin-top: 0.25rem; }
286
- .mt-2 { margin-top: 0.5rem; }
287
- .mb-1 { margin-bottom: 0.25rem; }
288
- .mb-2 { margin-bottom: 0.5rem; }
289
- .-mb-1 { margin-bottom: -0.25rem; }
290
- .-ml-4 { margin-left: -1rem; }
291
- .ml-0\.5 { margin-left: 0.125rem; }
357
+ .gap-1 {
358
+ gap: 0.25rem;
359
+ }
360
+ .gap-2 {
361
+ gap: 0.5rem;
362
+ }
363
+ .gap-4 {
364
+ gap: 1rem;
365
+ }
366
+ .space-x-1 > * + * {
367
+ margin-left: 0.25rem;
368
+ }
369
+ .space-x-2 > * + * {
370
+ margin-left: 0.5rem;
371
+ }
372
+ .space-y-1 > * + * {
373
+ margin-top: 0.25rem;
374
+ }
375
+ .p-1 {
376
+ padding: 0.25rem;
377
+ }
378
+ .p-2 {
379
+ padding: 0.5rem;
380
+ }
381
+ .p-3 {
382
+ padding: 0.75rem;
383
+ }
384
+ .pr-2 {
385
+ padding-right: 0.5rem;
386
+ }
387
+ .pr-5 {
388
+ padding-right: 1.25rem;
389
+ }
390
+ .px-1 {
391
+ padding-left: 0.25rem;
392
+ padding-right: 0.25rem;
393
+ }
394
+ .px-2 {
395
+ padding-left: 0.5rem;
396
+ padding-right: 0.5rem;
397
+ }
398
+ .px-3 {
399
+ padding-left: 0.75rem;
400
+ padding-right: 0.75rem;
401
+ }
402
+ .py-1 {
403
+ padding-top: 0.25rem;
404
+ padding-bottom: 0.25rem;
405
+ }
406
+ .py-2 {
407
+ padding-top: 0.5rem;
408
+ padding-bottom: 0.5rem;
409
+ }
410
+ .m-0 {
411
+ margin: 0;
412
+ }
413
+ .mx-auto {
414
+ margin-left: auto;
415
+ margin-right: auto;
416
+ }
417
+ .mt-1 {
418
+ margin-top: 0.25rem;
419
+ }
420
+ .mt-2 {
421
+ margin-top: 0.5rem;
422
+ }
423
+ .mb-1 {
424
+ margin-bottom: 0.25rem;
425
+ }
426
+ .mb-2 {
427
+ margin-bottom: 0.5rem;
428
+ }
429
+ .-mb-1 {
430
+ margin-bottom: -0.25rem;
431
+ }
432
+ .-ml-4 {
433
+ margin-left: -1rem;
434
+ }
435
+ .ml-0\.5 {
436
+ margin-left: 0.125rem;
437
+ }
292
438
 
293
439
  /* Typography */
294
- .text-\[10px\] { font-size: 10px; }
295
- .text-\[11px\] { font-size: 11px; }
296
- .text-xs { font-size: 0.75rem; line-height: 1rem; }
297
- .text-sm { font-size: 0.875rem; line-height: 1.25rem; }
298
- .text-center { text-align: center; }
299
- .text-right { text-align: right; }
300
- .font-medium { font-weight: 500; }
301
- .font-semibold { font-weight: 600; }
302
- .font-mono { font-family: ui-monospace, monospace; }
303
- .uppercase { text-transform: uppercase; }
304
- .leading-none { line-height: 1; }
305
- .tracking-wider { letter-spacing: 0.05em; }
306
- .whitespace-nowrap { white-space: nowrap; }
307
- .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
440
+ .text-\[10px\] {
441
+ font-size: 10px;
442
+ }
443
+ .text-\[11px\] {
444
+ font-size: 11px;
445
+ }
446
+ .text-xs {
447
+ font-size: 0.75rem;
448
+ line-height: 1rem;
449
+ }
450
+ .text-sm {
451
+ font-size: 0.875rem;
452
+ line-height: 1.25rem;
453
+ }
454
+ .text-center {
455
+ text-align: center;
456
+ }
457
+ .text-right {
458
+ text-align: right;
459
+ }
460
+ .font-medium {
461
+ font-weight: 500;
462
+ }
463
+ .font-semibold {
464
+ font-weight: 600;
465
+ }
466
+ .font-mono {
467
+ font-family: ui-monospace, monospace;
468
+ }
469
+ .uppercase {
470
+ text-transform: uppercase;
471
+ }
472
+ .leading-none {
473
+ line-height: 1;
474
+ }
475
+ .tracking-wider {
476
+ letter-spacing: 0.05em;
477
+ }
478
+ .whitespace-nowrap {
479
+ white-space: nowrap;
480
+ }
481
+ .truncate {
482
+ overflow: hidden;
483
+ text-overflow: ellipsis;
484
+ white-space: nowrap;
485
+ }
308
486
 
309
487
  /* Colors */
310
- .text-white { color: white; }
311
- .text-white\/50 { color: rgb(255 255 255 / 0.5); }
312
- .text-white\/70 { color: rgb(255 255 255 / 0.7); }
313
- .text-white\/80 { color: rgb(255 255 255 / 0.8); }
314
- .text-white\/90 { color: rgb(255 255 255 / 0.9); }
315
- .bg-black { background-color: black; }
316
- .bg-black\/40 { background-color: rgb(0 0 0 / 0.4); }
317
- .bg-black\/50 { background-color: rgb(0 0 0 / 0.5); }
318
- .bg-black\/80 { background-color: rgb(0 0 0 / 0.8); }
319
- .bg-black\/90 { background-color: rgb(0 0 0 / 0.9); }
320
- .bg-white { background-color: white; }
321
- .bg-white\/5 { background-color: rgb(255 255 255 / 0.05); }
322
- .bg-white\/10 { background-color: rgb(255 255 255 / 0.1); }
323
- .bg-white\/20 { background-color: rgb(255 255 255 / 0.2); }
324
- .bg-white\/30 { background-color: rgb(255 255 255 / 0.3); }
325
- .bg-white\/50 { background-color: rgb(255 255 255 / 0.5); }
326
- .border-white\/10 { border-color: rgb(255 255 255 / 0.1); }
327
- .hover\:text-white:hover { color: white; }
328
- .hover\:bg-white\/5:hover { background-color: rgb(255 255 255 / 0.05); }
329
- .hover\:bg-white\/10:hover { background-color: rgb(255 255 255 / 0.1); }
488
+ .text-white {
489
+ color: white;
490
+ }
491
+ .text-white\/50 {
492
+ color: rgb(255 255 255 / 0.5);
493
+ }
494
+ .text-white\/70 {
495
+ color: rgb(255 255 255 / 0.7);
496
+ }
497
+ .text-white\/80 {
498
+ color: rgb(255 255 255 / 0.8);
499
+ }
500
+ .text-white\/90 {
501
+ color: rgb(255 255 255 / 0.9);
502
+ }
503
+ .bg-black {
504
+ background-color: black;
505
+ }
506
+ .bg-black\/40 {
507
+ background-color: rgb(0 0 0 / 0.4);
508
+ }
509
+ .bg-black\/50 {
510
+ background-color: rgb(0 0 0 / 0.5);
511
+ }
512
+ .bg-black\/80 {
513
+ background-color: rgb(0 0 0 / 0.8);
514
+ }
515
+ .bg-black\/90 {
516
+ background-color: rgb(0 0 0 / 0.9);
517
+ }
518
+ .bg-white {
519
+ background-color: white;
520
+ }
521
+ .bg-white\/5 {
522
+ background-color: rgb(255 255 255 / 0.05);
523
+ }
524
+ .bg-white\/10 {
525
+ background-color: rgb(255 255 255 / 0.1);
526
+ }
527
+ .bg-white\/20 {
528
+ background-color: rgb(255 255 255 / 0.2);
529
+ }
530
+ .bg-white\/30 {
531
+ background-color: rgb(255 255 255 / 0.3);
532
+ }
533
+ .bg-white\/50 {
534
+ background-color: rgb(255 255 255 / 0.5);
535
+ }
536
+ .border-white\/10 {
537
+ border-color: rgb(255 255 255 / 0.1);
538
+ }
539
+ .hover\:text-white:hover {
540
+ color: white;
541
+ }
542
+ .hover\:bg-white\/5:hover {
543
+ background-color: rgb(255 255 255 / 0.05);
544
+ }
545
+ .hover\:bg-white\/10:hover {
546
+ background-color: rgb(255 255 255 / 0.1);
547
+ }
330
548
 
331
549
  /* Borders & Rounded */
332
- .border { border-width: 1px; }
333
- .border-b { border-bottom-width: 1px; }
334
- .rounded { border-radius: 0.25rem; }
335
- .rounded-md { border-radius: 0.375rem; }
336
- .rounded-lg { border-radius: 0.5rem; }
337
- .rounded-full { border-radius: 9999px; }
550
+ .border {
551
+ border-width: 1px;
552
+ }
553
+ .border-b {
554
+ border-bottom-width: 1px;
555
+ }
556
+ .rounded {
557
+ border-radius: 0.25rem;
558
+ }
559
+ .rounded-md {
560
+ border-radius: 0.375rem;
561
+ }
562
+ .rounded-lg {
563
+ border-radius: 0.5rem;
564
+ }
565
+ .rounded-full {
566
+ border-radius: 9999px;
567
+ }
338
568
 
339
569
  /* Effects */
340
- .shadow-lg { box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); }
341
- .backdrop-blur-sm { backdrop-filter: blur(4px); }
570
+ .shadow-lg {
571
+ box-shadow:
572
+ 0 10px 15px -3px rgb(0 0 0 / 0.1),
573
+ 0 4px 6px -4px rgb(0 0 0 / 0.1);
574
+ }
575
+ .backdrop-blur-sm {
576
+ backdrop-filter: blur(4px);
577
+ }
342
578
 
343
579
  /* Tokyo Night Utilities */
344
- .bg-tn-bg-dark { background-color: hsl(var(--tn-bg-dark)); }
345
- .bg-tn-bg { background-color: hsl(var(--tn-bg)); }
346
- .bg-tn-bg-highlight { background-color: hsl(var(--tn-bg-highlight)); }
347
- .text-tn-fg { color: hsl(var(--tn-fg)); }
348
- .text-tn-fg-dark { color: hsl(var(--tn-fg-dark)); }
349
- .text-tn-blue { color: hsl(var(--tn-blue)); }
350
- .text-tn-accent { color: hsl(var(--tn-bg-visual)); }
351
- .bg-tn-blue { background-color: hsl(var(--tn-blue)); }
352
- .bg-tn-accent { background-color: hsl(var(--tn-bg-visual)); }
353
- .border-tn-seam { border-color: hsl(var(--tn-fg-gutter) / 0.3); }
580
+ .bg-tn-bg-dark {
581
+ background-color: hsl(var(--tn-bg-dark));
582
+ }
583
+ .bg-tn-bg {
584
+ background-color: hsl(var(--tn-bg));
585
+ }
586
+ .bg-tn-bg-highlight {
587
+ background-color: hsl(var(--tn-bg-highlight));
588
+ }
589
+ .text-tn-fg {
590
+ color: hsl(var(--tn-fg));
591
+ }
592
+ .text-tn-fg-dark {
593
+ color: hsl(var(--tn-fg-dark));
594
+ }
595
+ .text-tn-blue {
596
+ color: hsl(var(--tn-blue));
597
+ }
598
+ .text-tn-accent {
599
+ color: hsl(var(--tn-bg-visual));
600
+ }
601
+ .bg-tn-blue {
602
+ background-color: hsl(var(--tn-blue));
603
+ }
604
+ .bg-tn-accent {
605
+ background-color: hsl(var(--tn-bg-visual));
606
+ }
607
+ .border-tn-seam {
608
+ border-color: hsl(var(--tn-fg-gutter) / 0.3);
609
+ }
354
610
 
355
611
  /* Opacity */
356
- .opacity-0 { opacity: 0; }
357
- .opacity-40 { opacity: 0.4; }
358
- .opacity-50 { opacity: 0.5; }
359
- .opacity-100 { opacity: 1; }
612
+ .opacity-0 {
613
+ opacity: 0;
614
+ }
615
+ .opacity-40 {
616
+ opacity: 0.4;
617
+ }
618
+ .opacity-50 {
619
+ opacity: 0.5;
620
+ }
621
+ .opacity-100 {
622
+ opacity: 1;
623
+ }
360
624
 
361
625
  /* Transitions */
362
- .transition { transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, width; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
363
- .transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
364
- .transition-colors { transition-property: color, background-color, border-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
365
- .transition-transform { transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
366
- .duration-200 { transition-duration: 200ms; }
626
+ .transition {
627
+ transition-property:
628
+ color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter,
629
+ width;
630
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
631
+ transition-duration: 150ms;
632
+ }
633
+ .transition-opacity {
634
+ transition-property: opacity;
635
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
636
+ transition-duration: 150ms;
637
+ }
638
+ .transition-colors {
639
+ transition-property: color, background-color, border-color, fill, stroke;
640
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
641
+ transition-duration: 150ms;
642
+ }
643
+ .transition-transform {
644
+ transition-property: transform;
645
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
646
+ transition-duration: 150ms;
647
+ }
648
+ .duration-200 {
649
+ transition-duration: 200ms;
650
+ }
367
651
 
368
652
  /* Interactive */
369
- .cursor-pointer { cursor: pointer; }
370
- .cursor-not-allowed { cursor: not-allowed; }
371
- .select-none { user-select: none; }
372
- .touch-none { touch-action: none; }
373
- .group:hover .group-hover\:rotate-90 { transform: rotate(90deg); }
374
- .group:hover .group-hover\:h-1\.5 { height: 0.375rem; }
653
+ .cursor-pointer {
654
+ cursor: pointer;
655
+ }
656
+ .cursor-not-allowed {
657
+ cursor: not-allowed;
658
+ }
659
+ .select-none {
660
+ user-select: none;
661
+ }
662
+ .touch-none {
663
+ touch-action: none;
664
+ }
665
+ .group:hover .group-hover\:rotate-90 {
666
+ transform: rotate(90deg);
667
+ }
668
+ .group:hover .group-hover\:h-1\.5 {
669
+ height: 0.375rem;
670
+ }
375
671
 
376
672
  /* Overflow */
377
- .overflow-hidden { overflow: hidden; }
378
- .overflow-auto { overflow: auto; }
673
+ .overflow-hidden {
674
+ overflow: hidden;
675
+ }
676
+ .overflow-auto {
677
+ overflow: auto;
678
+ }
379
679
 
380
680
  /* Responsive - sm: breakpoint (640px) */
381
681
  @media (min-width: 640px) {
382
- .sm\:flex { display: flex; }
682
+ .sm\:flex {
683
+ display: flex;
684
+ }
383
685
  }
384
686
 
385
687
  /* =====================================================
@@ -415,7 +717,11 @@
415
717
  border: 1px solid hsl(var(--tn-fg-gutter) / 0.5) !important; /* Override reset */
416
718
  color: hsl(var(--tn-fg-dark));
417
719
  cursor: pointer;
418
- transition: opacity 200ms, background-color 150ms, border-color 150ms, color 150ms;
720
+ transition:
721
+ opacity 200ms,
722
+ background-color 150ms,
723
+ border-color 150ms,
724
+ color 150ms;
419
725
  }
420
726
 
421
727
  .fw-dev-toggle:hover {
@@ -459,7 +765,9 @@
459
765
  text-transform: uppercase;
460
766
  letter-spacing: 0.05em;
461
767
  font-weight: 600;
462
- transition: color 150ms, background-color 150ms;
768
+ transition:
769
+ color 150ms,
770
+ background-color 150ms;
463
771
  border-right: 1px solid hsl(var(--tn-fg-gutter) / 0.3) !important; /* Override reset */
464
772
  background: transparent;
465
773
  cursor: pointer;
@@ -540,7 +848,9 @@
540
848
  padding: 0.375rem 0.5rem;
541
849
  font-size: 10px;
542
850
  font-weight: 500;
543
- transition: color 150ms, background-color 150ms;
851
+ transition:
852
+ color 150ms,
853
+ background-color 150ms;
544
854
  background: hsl(var(--tn-bg));
545
855
  color: hsl(var(--tn-fg-dark));
546
856
  cursor: pointer;
@@ -574,7 +884,9 @@
574
884
  background: hsl(var(--tn-bg));
575
885
  color: hsl(var(--tn-fg));
576
886
  font-size: 0.75rem;
577
- transition: color 150ms, background-color 150ms;
887
+ transition:
888
+ color 150ms,
889
+ background-color 150ms;
578
890
  cursor: pointer;
579
891
  }
580
892
 
@@ -638,7 +950,9 @@
638
950
  display: flex;
639
951
  align-items: center;
640
952
  gap: 0.5rem;
641
- transition: background-color 150ms, color 150ms;
953
+ transition:
954
+ background-color 150ms,
955
+ color 150ms;
642
956
  background: transparent;
643
957
  color: hsl(var(--tn-fg));
644
958
  cursor: pointer;