@livepeer-frameworks/streamcrafter-wc 0.1.0

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 (81) hide show
  1. package/dist/cjs/components/fw-sc-advanced.js +198 -0
  2. package/dist/cjs/components/fw-sc-advanced.js.map +1 -0
  3. package/dist/cjs/components/fw-sc-compositor.js +116 -0
  4. package/dist/cjs/components/fw-sc-compositor.js.map +1 -0
  5. package/dist/cjs/components/fw-sc-layer-list.js +253 -0
  6. package/dist/cjs/components/fw-sc-layer-list.js.map +1 -0
  7. package/dist/cjs/components/fw-sc-scene-switcher.js +164 -0
  8. package/dist/cjs/components/fw-sc-scene-switcher.js.map +1 -0
  9. package/dist/cjs/components/fw-sc-volume.js +183 -0
  10. package/dist/cjs/components/fw-sc-volume.js.map +1 -0
  11. package/dist/cjs/components/fw-streamcrafter.js +508 -0
  12. package/dist/cjs/components/fw-streamcrafter.js.map +1 -0
  13. package/dist/cjs/controllers/ingest-controller-host.js +236 -0
  14. package/dist/cjs/controllers/ingest-controller-host.js.map +1 -0
  15. package/dist/cjs/define.js +25 -0
  16. package/dist/cjs/define.js.map +1 -0
  17. package/dist/cjs/icons/index.js +283 -0
  18. package/dist/cjs/icons/index.js.map +1 -0
  19. package/dist/cjs/index.js +38 -0
  20. package/dist/cjs/index.js.map +1 -0
  21. package/dist/cjs/node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js +33 -0
  22. package/dist/cjs/node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js.map +1 -0
  23. package/dist/cjs/styles/shared-styles.js +2019 -0
  24. package/dist/cjs/styles/shared-styles.js.map +1 -0
  25. package/dist/cjs/styles/utility-styles.js +182 -0
  26. package/dist/cjs/styles/utility-styles.js.map +1 -0
  27. package/dist/esm/components/fw-sc-advanced.js +198 -0
  28. package/dist/esm/components/fw-sc-advanced.js.map +1 -0
  29. package/dist/esm/components/fw-sc-compositor.js +116 -0
  30. package/dist/esm/components/fw-sc-compositor.js.map +1 -0
  31. package/dist/esm/components/fw-sc-layer-list.js +253 -0
  32. package/dist/esm/components/fw-sc-layer-list.js.map +1 -0
  33. package/dist/esm/components/fw-sc-scene-switcher.js +164 -0
  34. package/dist/esm/components/fw-sc-scene-switcher.js.map +1 -0
  35. package/dist/esm/components/fw-sc-volume.js +183 -0
  36. package/dist/esm/components/fw-sc-volume.js.map +1 -0
  37. package/dist/esm/components/fw-streamcrafter.js +508 -0
  38. package/dist/esm/components/fw-streamcrafter.js.map +1 -0
  39. package/dist/esm/controllers/ingest-controller-host.js +234 -0
  40. package/dist/esm/controllers/ingest-controller-host.js.map +1 -0
  41. package/dist/esm/define.js +23 -0
  42. package/dist/esm/define.js.map +1 -0
  43. package/dist/esm/icons/index.js +253 -0
  44. package/dist/esm/icons/index.js.map +1 -0
  45. package/dist/esm/index.js +8 -0
  46. package/dist/esm/index.js.map +1 -0
  47. package/dist/esm/node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js +31 -0
  48. package/dist/esm/node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js.map +1 -0
  49. package/dist/esm/styles/shared-styles.js +2017 -0
  50. package/dist/esm/styles/shared-styles.js.map +1 -0
  51. package/dist/esm/styles/utility-styles.js +180 -0
  52. package/dist/esm/styles/utility-styles.js.map +1 -0
  53. package/dist/fw-streamcrafter.iife.js +3121 -0
  54. package/dist/fw-streamcrafter.iife.js.map +1 -0
  55. package/dist/types/components/fw-sc-advanced.d.ts +20 -0
  56. package/dist/types/components/fw-sc-compositor.d.ts +19 -0
  57. package/dist/types/components/fw-sc-layer-list.d.ts +30 -0
  58. package/dist/types/components/fw-sc-scene-switcher.d.ts +23 -0
  59. package/dist/types/components/fw-sc-volume.d.ts +30 -0
  60. package/dist/types/components/fw-streamcrafter.d.ts +49 -0
  61. package/dist/types/controllers/ingest-controller-host.d.ts +77 -0
  62. package/dist/types/define.d.ts +1 -0
  63. package/dist/types/icons/index.d.ts +29 -0
  64. package/dist/types/iife-entry.d.ts +11 -0
  65. package/dist/types/index.d.ts +12 -0
  66. package/dist/types/styles/shared-styles.d.ts +1 -0
  67. package/dist/types/styles/utility-styles.d.ts +1 -0
  68. package/package.json +55 -0
  69. package/src/components/fw-sc-advanced.ts +221 -0
  70. package/src/components/fw-sc-compositor.ts +162 -0
  71. package/src/components/fw-sc-layer-list.ts +251 -0
  72. package/src/components/fw-sc-scene-switcher.ts +163 -0
  73. package/src/components/fw-sc-volume.ts +171 -0
  74. package/src/components/fw-streamcrafter.ts +515 -0
  75. package/src/controllers/ingest-controller-host.ts +358 -0
  76. package/src/define.ts +23 -0
  77. package/src/icons/index.ts +291 -0
  78. package/src/iife-entry.ts +11 -0
  79. package/src/index.ts +15 -0
  80. package/src/styles/shared-styles.ts +2014 -0
  81. package/src/styles/utility-styles.ts +177 -0
@@ -0,0 +1,2019 @@
1
+ 'use strict';
2
+
3
+ var lit = require('lit');
4
+
5
+ // AUTO-GENERATED — do not edit. Run `pnpm run build:css` to regenerate.
6
+ // Source: packages/core/src/styles/streamcrafter.css
7
+ const sharedStyles = lit.css `
8
+ /**
9
+ * StreamCrafter CSS
10
+ * Wrapped in @layer fw-streamcrafter for cascade isolation.
11
+ * Host app unlayered styles will always take precedence.
12
+ *
13
+ * Import this file in your application:
14
+ * import '@livepeer-frameworks/streamcrafter-core/styles/streamcrafter.css';
15
+ */
16
+
17
+ /* Declare layer upfront for lowest priority */
18
+ @layer fw-streamcrafter;
19
+
20
+ @layer fw-streamcrafter {
21
+ /* =============================================
22
+ Root Container (with scoped CSS variables)
23
+ ============================================= */
24
+ .fw-sc-root {
25
+ /* Tokyo Night color tokens - scoped to component */
26
+ --tn-bg-dark: 240 15% 10%; /* #16161e - Darkest surface */
27
+ --tn-bg: 235 19% 13%; /* #1a1b26 - Main background */
28
+ --tn-bg-highlight: 229 24% 19%; /* #24283b - Elevated surfaces */
29
+
30
+ --tn-fg: 229 73% 86%; /* #c0caf5 - Primary text */
31
+ --tn-fg-dark: 229 35% 75%; /* #a9b1d6 - Secondary text */
32
+ --tn-fg-gutter: 229 24% 31%; /* #3b4261 - Borders, seams */
33
+ --tn-comment: 229 23% 44%; /* #565f89 - Comments, muted */
34
+
35
+ --tn-blue: 225 86% 70%; /* #7aa2f7 - Primary actions */
36
+ --tn-green: 89 51% 61%; /* #9ece6a - Success, live */
37
+ --tn-red: 349 89% 72%; /* #f7768e - Destructive, errors */
38
+ --tn-yellow: 36 66% 64%; /* #e0af68 - Warnings */
39
+ --tn-purple: 264 85% 74%; /* #bb9af7 - Special */
40
+ --tn-cyan: 197 95% 74%; /* #7dcfff - Info */
41
+
42
+ /* Component styles */
43
+ background: hsl(var(--tn-bg-dark));
44
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
45
+ font-family:
46
+ system-ui,
47
+ -apple-system,
48
+ BlinkMacSystemFont,
49
+ "Segoe UI",
50
+ Roboto,
51
+ sans-serif;
52
+ font-size: 14px;
53
+ line-height: 1.5;
54
+ color: hsl(var(--tn-fg));
55
+ /* Allow root to take full height of parent and manage its children */
56
+ height: 100%;
57
+ min-height: 500px;
58
+ display: flex;
59
+ flex-direction: column;
60
+
61
+ overflow: hidden; /* Prevent content from overflowing the root container */
62
+
63
+ /* Container query support for responsive layout */
64
+ container-type: inline-size;
65
+ container-name: streamcrafter;
66
+ }
67
+
68
+ /* Dev mode - flex layout for side panel */
69
+ .fw-sc-root--devmode {
70
+ display: flex;
71
+ flex-direction: row;
72
+ }
73
+
74
+ /* Main content wrapper */
75
+ .fw-sc-main {
76
+ display: flex;
77
+ flex-direction: column;
78
+ min-width: 0;
79
+ /* Occupy remaining vertical space in root */
80
+ flex: 1;
81
+ overflow: hidden; /* Manage internal overflow */
82
+ }
83
+
84
+ /* Content area (preview + mixer) - responsive layout */
85
+ .fw-sc-content {
86
+ display: flex;
87
+ flex-direction: column;
88
+ flex: 1; /* Occupy remaining vertical space in fw-sc-main */
89
+ min-height: 0; /* Allow flex item to shrink below content size */
90
+ }
91
+
92
+ /* Preview wrapper for flex sizing */
93
+ .fw-sc-preview-wrapper {
94
+ display: flex;
95
+ flex-direction: column;
96
+ }
97
+
98
+ /* Mixer panel class for responsive targeting */
99
+ .fw-sc-mixer {
100
+ /* Default: takes full width below preview */
101
+ }
102
+
103
+ /* =============================================
104
+ Responsive Layout: Mixer on Right (Wide Screens)
105
+ Uses container queries for container-aware layout
106
+ ============================================= */
107
+ @container streamcrafter (min-width: 600px) {
108
+ .fw-sc-content {
109
+ flex-direction: row;
110
+ align-items: stretch; /* Ensure full height */
111
+ }
112
+
113
+ .fw-sc-preview-wrapper {
114
+ flex: 1;
115
+ min-width: 0;
116
+ /* Center preview vertically if needed */
117
+ display: flex;
118
+ flex-direction: column;
119
+ justify-content: center;
120
+ background: black;
121
+ }
122
+
123
+ .fw-sc-mixer {
124
+ width: 320px; /* Slightly wider for better ergonomics */
125
+ flex-shrink: 0;
126
+ border-left: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
127
+ border-bottom: none;
128
+ background: hsl(var(--tn-bg));
129
+ display: flex;
130
+ flex-direction: column;
131
+ max-height: none;
132
+ overflow-y: auto;
133
+ transition: width 0.2s ease-out; /* Smooth collapse transition */
134
+ }
135
+
136
+ /* Collapsed state for sidebar mixer */
137
+ .fw-sc-mixer.fw-sc-section--collapsed {
138
+ width: 48px; /* Collapsed width */
139
+ overflow-x: hidden; /* Hide overflowing content */
140
+ }
141
+
142
+ .fw-sc-mixer.fw-sc-section--collapsed .fw-sc-section-header {
143
+ justify-content: center; /* Center icon */
144
+ }
145
+
146
+ .fw-sc-mixer.fw-sc-section--collapsed .fw-sc-section-header span {
147
+ display: none; /* Hide text */
148
+ }
149
+
150
+ .fw-sc-mixer.fw-sc-section--collapsed .fw-sc-section-header svg {
151
+ transform: rotate(0deg) !important; /* Reset chevron rotation */
152
+ }
153
+
154
+ .fw-sc-mixer.fw-sc-section--collapsed .fw-sc-sources {
155
+ display: none; /* Hide source list content */
156
+ }
157
+
158
+ /* Redesign Source Items for Sidebar Context */
159
+ .fw-sc-mixer .fw-sc-source {
160
+ display: flex;
161
+ align-items: center;
162
+ gap: 0.5rem;
163
+ padding: 0.375rem 0.5rem;
164
+ background: hsl(var(--tn-bg-highlight) / 0.1);
165
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
166
+ transition: background 0.2s;
167
+ height: 48px;
168
+ }
169
+
170
+ .fw-sc-mixer .fw-sc-source:hover {
171
+ background: hsl(var(--tn-bg-highlight) / 0.3);
172
+ }
173
+
174
+ /* Icon */
175
+ .fw-sc-mixer .fw-sc-source-icon {
176
+ flex: 0 0 auto;
177
+ }
178
+
179
+ /* Name + Type */
180
+ .fw-sc-mixer .fw-sc-source-info {
181
+ flex: 1;
182
+ min-width: 0; /* Enable truncation */
183
+ display: flex;
184
+ flex-direction: column;
185
+ gap: 0;
186
+ }
187
+
188
+ .fw-sc-mixer .fw-sc-source-label {
189
+ font-size: 0.8rem;
190
+ font-weight: 600;
191
+ }
192
+
193
+ /* Hide the source type in sidebar to save space */
194
+ .fw-sc-mixer .fw-sc-source-type {
195
+ display: none;
196
+ }
197
+
198
+ /* Controls */
199
+ .fw-sc-mixer .fw-sc-source-controls {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: 0.25rem;
203
+ margin: 0;
204
+ width: auto;
205
+ }
206
+
207
+ /* Volume Slider fixed width in compact mode */
208
+ .fw-sc-mixer .fw-sc-volume-slider {
209
+ width: 60px;
210
+ flex: 0 0 auto;
211
+ height: 6px;
212
+ }
213
+
214
+ /* Hide the percentage text in this compact view */
215
+ .fw-sc-mixer .fw-sc-volume-label {
216
+ display: none;
217
+ }
218
+ }
219
+
220
+ /* Advanced Panel styling - matches Player DevModePanel */
221
+ .fw-sc-advanced-panel {
222
+ background: hsl(var(--tn-bg));
223
+ border-left: 1px solid hsl(var(--tn-fg-gutter) / 0.5);
224
+ width: 280px;
225
+ flex-shrink: 0;
226
+ display: flex;
227
+ flex-direction: column;
228
+ height: 100%;
229
+ overflow: hidden;
230
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
231
+ font-size: 12px;
232
+ z-index: 40;
233
+ }
234
+
235
+ /* =============================================
236
+ Header Zone
237
+ ============================================= */
238
+ .fw-sc-header {
239
+ display: flex;
240
+ align-items: center;
241
+ justify-content: space-between;
242
+ padding: 0.5rem 1rem;
243
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
244
+ background: hsl(var(--tn-bg-highlight) / 0.5);
245
+ }
246
+
247
+ .fw-sc-header-title {
248
+ font-weight: 600;
249
+ text-transform: uppercase;
250
+ letter-spacing: 0.05em;
251
+ font-size: 0.75rem;
252
+ color: hsl(var(--tn-fg-dark));
253
+ }
254
+
255
+ .fw-sc-header-status {
256
+ display: flex;
257
+ align-items: center;
258
+ gap: 0.5rem;
259
+ }
260
+
261
+ .fw-sc-header-actions {
262
+ display: flex;
263
+ align-items: center;
264
+ gap: 0.25rem;
265
+ }
266
+
267
+ /* Header Button - visible gear/wrench like Player */
268
+ .fw-sc-header-btn {
269
+ display: flex;
270
+ align-items: center;
271
+ justify-content: center;
272
+ width: 28px;
273
+ height: 28px;
274
+ padding: 0;
275
+ border: none;
276
+ border-radius: 4px;
277
+ background: transparent;
278
+ color: hsl(var(--tn-comment));
279
+ cursor: pointer;
280
+ transition: all 0.15s ease;
281
+ }
282
+
283
+ .fw-sc-header-btn:hover {
284
+ background: hsl(var(--tn-bg-highlight));
285
+ color: hsl(var(--tn-fg));
286
+ }
287
+
288
+ .fw-sc-header-btn--active {
289
+ background: hsl(var(--tn-blue) / 0.2);
290
+ color: hsl(var(--tn-blue));
291
+ }
292
+
293
+ .fw-sc-header-btn--active:hover {
294
+ background: hsl(var(--tn-blue) / 0.3);
295
+ color: hsl(var(--tn-blue));
296
+ }
297
+
298
+ /* =============================================
299
+ Video Preview (Flush - No Padding)
300
+ ============================================= */
301
+ .fw-sc-preview {
302
+ position: relative;
303
+ /* Use flex-grow instead of aspect-ratio to fill available height */
304
+ flex: 1;
305
+ background: black;
306
+ overflow: hidden;
307
+ display: flex; /* Make it a flex container for the video */
308
+ align-items: center;
309
+ justify-content: center;
310
+ }
311
+
312
+ .fw-sc-preview video {
313
+ width: 100%;
314
+ height: 100%;
315
+ object-fit: contain; /* Ensure video fits within the preview area */
316
+ }
317
+
318
+ .fw-sc-preview-placeholder {
319
+ position: absolute;
320
+ inset: 0;
321
+ display: flex;
322
+ flex-direction: column;
323
+ align-items: center;
324
+ justify-content: center;
325
+ color: hsl(var(--tn-comment));
326
+ gap: 0.5rem;
327
+ }
328
+
329
+ .fw-sc-preview-placeholder svg {
330
+ width: 48px;
331
+ height: 48px;
332
+ opacity: 0.5;
333
+ }
334
+
335
+ /* =============================================
336
+ Live Badge Overlay
337
+ ============================================= */
338
+ .fw-sc-live-badge {
339
+ position: absolute;
340
+ top: 1rem;
341
+ right: 1rem;
342
+ display: flex;
343
+ align-items: center;
344
+ gap: 0.375rem;
345
+ padding: 0.25rem 0.5rem;
346
+ background: hsl(var(--tn-red));
347
+ color: white;
348
+ font-size: 0.7rem;
349
+ font-weight: 700;
350
+ text-transform: uppercase;
351
+ letter-spacing: 0.05em;
352
+ }
353
+
354
+ .fw-sc-live-badge::before {
355
+ content: "";
356
+ width: 0.5rem;
357
+ height: 0.5rem;
358
+ background: white;
359
+ border-radius: 50%;
360
+ animation: fw-sc-pulse 1.5s infinite;
361
+ }
362
+
363
+ @keyframes fw-sc-pulse {
364
+ 0%,
365
+ 100% {
366
+ opacity: 1;
367
+ }
368
+ 50% {
369
+ opacity: 0.5;
370
+ }
371
+ }
372
+
373
+ /* =============================================
374
+ Status Overlay
375
+ ============================================= */
376
+ .fw-sc-status-overlay {
377
+ position: absolute;
378
+ inset: 0;
379
+ display: flex;
380
+ flex-direction: column;
381
+ align-items: center;
382
+ justify-content: center;
383
+ background: hsl(var(--tn-bg-dark) / 0.9);
384
+ gap: 1rem;
385
+ }
386
+
387
+ .fw-sc-status-spinner {
388
+ width: 32px;
389
+ height: 32px;
390
+ border: 3px solid hsl(var(--tn-fg-gutter) / 0.3);
391
+ border-top-color: hsl(var(--tn-blue));
392
+ border-radius: 50%;
393
+ animation: fw-sc-spin 1s linear infinite;
394
+ }
395
+
396
+ @keyframes fw-sc-spin {
397
+ to {
398
+ transform: rotate(360deg);
399
+ }
400
+ }
401
+
402
+ .fw-sc-status-text {
403
+ font-size: 0.875rem;
404
+ color: hsl(var(--tn-fg-dark));
405
+ }
406
+
407
+ /* =============================================
408
+ VU Meter
409
+ ============================================= */
410
+ .fw-sc-vu-meter {
411
+ height: 8px;
412
+ background: hsl(var(--tn-bg-highlight));
413
+ position: relative;
414
+ overflow: hidden;
415
+ }
416
+
417
+ .fw-sc-vu-meter-fill {
418
+ height: 100%;
419
+ background: linear-gradient(
420
+ to right,
421
+ hsl(var(--tn-green)) 0%,
422
+ hsl(var(--tn-green)) 60%,
423
+ hsl(var(--tn-yellow)) 80%,
424
+ hsl(var(--tn-red)) 100%
425
+ );
426
+ transition: width 50ms ease-out;
427
+ }
428
+
429
+ .fw-sc-vu-meter-peak {
430
+ position: absolute;
431
+ top: 0;
432
+ height: 100%;
433
+ width: 2px;
434
+ background: hsl(var(--tn-fg));
435
+ transition: left 50ms ease-out;
436
+ }
437
+
438
+ /* Vertical VU Meter variant */
439
+ .fw-sc-vu-meter--vertical {
440
+ width: 4px;
441
+ height: 100%;
442
+ background: hsl(var(--tn-bg-highlight));
443
+ }
444
+
445
+ .fw-sc-vu-meter--vertical .fw-sc-vu-meter-fill {
446
+ width: 100%;
447
+ background: linear-gradient(
448
+ to top,
449
+ hsl(var(--tn-green)) 0%,
450
+ hsl(var(--tn-green)) 60%,
451
+ hsl(var(--tn-yellow)) 80%,
452
+ hsl(var(--tn-red)) 100%
453
+ );
454
+ transition: height 50ms ease-out;
455
+ }
456
+
457
+ /* =============================================
458
+ Section (Collapsible Areas)
459
+ ============================================= */
460
+ .fw-sc-section {
461
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
462
+ }
463
+
464
+ .fw-sc-section:last-child {
465
+ border-bottom: none;
466
+ }
467
+
468
+ .fw-sc-section-header {
469
+ display: flex;
470
+ align-items: center;
471
+ justify-content: space-between;
472
+ padding: 0.5rem 1rem;
473
+ font-size: 0.7rem;
474
+ font-weight: 600;
475
+ text-transform: uppercase;
476
+ letter-spacing: 0.05em;
477
+ color: hsl(var(--tn-comment));
478
+ cursor: pointer;
479
+ user-select: none;
480
+ background: hsl(var(--tn-bg-highlight) / 0.3);
481
+ }
482
+
483
+ .fw-sc-section-header:hover {
484
+ background: hsl(var(--tn-bg-highlight) / 0.5);
485
+ }
486
+
487
+ .fw-sc-section-header svg {
488
+ width: 14px;
489
+ height: 14px;
490
+ transition: transform 0.2s;
491
+ }
492
+
493
+ .fw-sc-section--collapsed .fw-sc-section-header svg {
494
+ transform: rotate(-90deg);
495
+ }
496
+
497
+ .fw-sc-section-body {
498
+ padding: 0.75rem 1rem;
499
+ }
500
+
501
+ .fw-sc-section-body--flush {
502
+ padding: 0;
503
+ }
504
+
505
+ /* =============================================
506
+ Source List
507
+ ============================================= */
508
+ .fw-sc-sources {
509
+ display: flex;
510
+ flex-direction: column;
511
+ }
512
+
513
+ .fw-sc-source {
514
+ display: flex;
515
+ align-items: center;
516
+ padding: 0.5rem 1rem;
517
+ gap: 0.5rem;
518
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.2);
519
+ }
520
+
521
+ .fw-sc-source:last-child {
522
+ border-bottom: none;
523
+ }
524
+
525
+ .fw-sc-source--hidden {
526
+ opacity: 0.5;
527
+ background: hsl(var(--tn-bg-dark) / 0.3);
528
+ }
529
+
530
+ .fw-sc-source-icon {
531
+ width: 24px;
532
+ height: 24px;
533
+ display: flex;
534
+ align-items: center;
535
+ justify-content: center;
536
+ color: hsl(var(--tn-comment));
537
+ }
538
+
539
+ .fw-sc-source-info {
540
+ flex: 1;
541
+ min-width: 0;
542
+ }
543
+
544
+ .fw-sc-source-label {
545
+ font-size: 0.875rem;
546
+ font-weight: 500;
547
+ overflow: hidden;
548
+ text-overflow: ellipsis;
549
+ white-space: nowrap;
550
+ display: flex;
551
+ align-items: center;
552
+ gap: 0.5rem;
553
+ }
554
+
555
+ .fw-sc-primary-badge {
556
+ font-size: 0.55rem;
557
+ font-weight: 700;
558
+ text-transform: uppercase;
559
+ letter-spacing: 0.05em;
560
+ padding: 0.125rem 0.375rem;
561
+ background: hsl(var(--tn-green) / 0.2);
562
+ color: hsl(var(--tn-green));
563
+ border-radius: 2px;
564
+ }
565
+
566
+ .fw-sc-source-type {
567
+ font-size: 0.7rem;
568
+ color: hsl(var(--tn-comment));
569
+ text-transform: uppercase;
570
+ }
571
+
572
+ .fw-sc-source-controls {
573
+ display: flex;
574
+ align-items: center;
575
+ gap: 0.25rem;
576
+ flex-wrap: wrap; /* Allow items to wrap */
577
+ justify-content: flex-end; /* Align to the right when wrapped */
578
+ }
579
+
580
+ /* =============================================
581
+ Icon Buttons (Small Controls)
582
+ ============================================= */
583
+ .fw-sc-icon-btn {
584
+ width: 28px;
585
+ height: 28px;
586
+ display: flex;
587
+ align-items: center;
588
+ justify-content: center;
589
+ padding: 0;
590
+ border: none;
591
+ border-radius: 4px;
592
+ background: transparent;
593
+ color: hsl(var(--tn-comment));
594
+ cursor: pointer;
595
+ transition:
596
+ background 0.15s,
597
+ color 0.15s;
598
+ }
599
+
600
+ .fw-sc-icon-btn:hover {
601
+ background: hsl(var(--tn-bg-highlight) / 0.5);
602
+ color: hsl(var(--tn-fg));
603
+ }
604
+
605
+ .fw-sc-icon-btn:disabled {
606
+ opacity: 0.5;
607
+ cursor: not-allowed;
608
+ }
609
+
610
+ .fw-sc-icon-btn--active {
611
+ color: hsl(var(--tn-blue));
612
+ }
613
+
614
+ .fw-sc-icon-btn--inactive {
615
+ opacity: 0.45;
616
+ color: hsl(var(--tn-comment));
617
+ }
618
+
619
+ .fw-sc-icon-btn--primary {
620
+ color: hsl(var(--tn-green));
621
+ }
622
+
623
+ .fw-sc-icon-btn--primary:disabled {
624
+ color: hsl(var(--tn-green));
625
+ opacity: 1;
626
+ }
627
+
628
+ .fw-sc-icon-btn--destructive:hover {
629
+ color: hsl(var(--tn-red));
630
+ }
631
+
632
+ .fw-sc-icon-btn--muted {
633
+ color: hsl(var(--tn-comment) / 0.5);
634
+ }
635
+
636
+ .fw-sc-icon-btn svg {
637
+ width: 16px;
638
+ height: 16px;
639
+ }
640
+
641
+ /* =============================================
642
+ Settings Panel
643
+ ============================================= */
644
+ .fw-sc-settings {
645
+ display: flex;
646
+ flex-direction: column;
647
+ gap: 0.5rem;
648
+ }
649
+
650
+ .fw-sc-setting-row {
651
+ display: flex;
652
+ align-items: center;
653
+ justify-content: space-between;
654
+ gap: 1rem;
655
+ }
656
+
657
+ .fw-sc-setting-label {
658
+ font-size: 0.875rem;
659
+ color: hsl(var(--tn-fg-dark));
660
+ }
661
+
662
+ .fw-sc-select {
663
+ padding: 0.25rem 0.5rem;
664
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
665
+ border-radius: 4px;
666
+ background: hsl(var(--tn-bg-highlight));
667
+ color: hsl(var(--tn-fg));
668
+ font-size: 0.875rem;
669
+ cursor: pointer;
670
+ }
671
+
672
+ .fw-sc-select:focus {
673
+ outline: none;
674
+ border-color: hsl(var(--tn-blue));
675
+ }
676
+
677
+ /* =============================================
678
+ Action Bar (Bottom Controls)
679
+ ============================================= */
680
+ .fw-sc-actions {
681
+ display: flex;
682
+ border-top: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
683
+ }
684
+
685
+ .fw-sc-actions button {
686
+ padding: 1rem;
687
+ border: none;
688
+ border-radius: 0;
689
+ background: transparent;
690
+ color: hsl(var(--tn-fg));
691
+ font-size: 0.875rem;
692
+ font-weight: 500;
693
+ cursor: pointer;
694
+ transition: background 0.15s;
695
+ border-right: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
696
+ display: flex;
697
+ align-items: center;
698
+ justify-content: center;
699
+ gap: 0.25rem;
700
+ }
701
+
702
+ .fw-sc-actions button:last-child {
703
+ border-right: none;
704
+ }
705
+
706
+ .fw-sc-actions button:hover:not(:disabled) {
707
+ background: hsl(var(--tn-bg-highlight) / 0.5);
708
+ }
709
+
710
+ .fw-sc-actions button:disabled {
711
+ color: hsl(var(--tn-comment));
712
+ cursor: not-allowed;
713
+ }
714
+
715
+ .fw-sc-actions button svg {
716
+ width: 18px;
717
+ height: 18px;
718
+ }
719
+
720
+ /* Secondary actions (Camera, Screen, Settings) - smaller */
721
+ .fw-sc-action-secondary {
722
+ flex: 0 0 auto;
723
+ }
724
+
725
+ .fw-sc-action-secondary--active {
726
+ background: hsl(var(--tn-blue) / 0.2) !important;
727
+ color: hsl(var(--tn-blue)) !important;
728
+ }
729
+
730
+ /* Settings icon rotation on hover */
731
+ .fw-sc-action-secondary .settings-icon-wrapper {
732
+ display: inline-flex;
733
+ transition: transform 0.2s ease;
734
+ }
735
+
736
+ .fw-sc-action-secondary:hover .settings-icon-wrapper {
737
+ transform: rotate(90deg);
738
+ }
739
+
740
+ /* Primary action (Go Live) - takes remaining space */
741
+ .fw-sc-action-primary {
742
+ flex: 1;
743
+ font-weight: 600 !important;
744
+ background: hsl(var(--tn-red)) !important;
745
+ color: white !important;
746
+ }
747
+
748
+ .fw-sc-action-primary:hover:not(:disabled) {
749
+ background: hsl(var(--tn-red) / 0.8) !important;
750
+ }
751
+
752
+ .fw-sc-action-primary:disabled {
753
+ background: hsl(var(--tn-bg-highlight)) !important;
754
+ color: hsl(var(--tn-comment)) !important;
755
+ }
756
+
757
+ /* Stop action (when streaming) */
758
+ .fw-sc-action-stop {
759
+ background: hsl(var(--tn-bg-highlight)) !important;
760
+ }
761
+
762
+ .fw-sc-action-stop:hover:not(:disabled) {
763
+ background: hsl(var(--tn-red) / 0.3) !important;
764
+ }
765
+
766
+ /* =============================================
767
+ Status Badge
768
+ ============================================= */
769
+ .fw-sc-badge {
770
+ display: inline-flex;
771
+ align-items: center;
772
+ gap: 0.25rem;
773
+ padding: 0.125rem 0.5rem;
774
+ font-size: 0.7rem;
775
+ font-weight: 600;
776
+ text-transform: uppercase;
777
+ letter-spacing: 0.025em;
778
+ border-radius: 2px;
779
+ }
780
+
781
+ .fw-sc-badge--idle {
782
+ background: hsl(var(--tn-bg-highlight));
783
+ color: hsl(var(--tn-comment));
784
+ }
785
+
786
+ .fw-sc-badge--ready {
787
+ background: hsl(var(--tn-blue) / 0.2);
788
+ color: hsl(var(--tn-blue));
789
+ }
790
+
791
+ .fw-sc-badge--live {
792
+ background: hsl(var(--tn-red));
793
+ color: white;
794
+ }
795
+
796
+ .fw-sc-badge--connecting {
797
+ background: hsl(var(--tn-yellow) / 0.2);
798
+ color: hsl(var(--tn-yellow));
799
+ }
800
+
801
+ .fw-sc-badge--error {
802
+ background: hsl(var(--tn-red) / 0.2);
803
+ color: hsl(var(--tn-red));
804
+ }
805
+
806
+ /* =============================================
807
+ Volume Slider
808
+ ============================================= */
809
+ .fw-sc-volume-label {
810
+ font-size: 0.65rem;
811
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
812
+ color: hsl(var(--tn-fg-dark));
813
+ min-width: 32px;
814
+ text-align: right;
815
+ font-variant-numeric: tabular-nums;
816
+ }
817
+
818
+ .fw-sc-volume-slider {
819
+ width: 80px; /* Slightly wider by default */
820
+ height: 6px;
821
+ -webkit-appearance: none;
822
+ appearance: none;
823
+ background: hsl(var(--tn-bg-highlight));
824
+ border-radius: 3px;
825
+ cursor: pointer;
826
+ position: relative;
827
+ transition: opacity 0.2s;
828
+ }
829
+
830
+ .fw-sc-volume-slider:hover {
831
+ opacity: 0.9;
832
+ }
833
+
834
+ /* Track fill simulation (Note: WebKit requires JS to update background-size for true fill before thumb,
835
+ but we can use a gradient trick if value is known, or just keep the clean track look) */
836
+
837
+ .fw-sc-volume-slider::-webkit-slider-thumb {
838
+ -webkit-appearance: none;
839
+ width: 14px;
840
+ height: 14px;
841
+ border-radius: 50%;
842
+ background: hsl(var(--tn-fg));
843
+ border: 2px solid hsl(var(--tn-bg)); /* Ring effect */
844
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
845
+ cursor: pointer;
846
+ margin-top: -4px; /* Center thumb on 6px track */
847
+ transition: transform 0.1s;
848
+ }
849
+
850
+ .fw-sc-volume-slider:hover::-webkit-slider-thumb {
851
+ transform: scale(1.1);
852
+ background: white;
853
+ }
854
+
855
+ .fw-sc-volume-slider::-moz-range-thumb {
856
+ width: 14px;
857
+ height: 14px;
858
+ border-radius: 50%;
859
+ background: hsl(var(--tn-fg));
860
+ border: 2px solid hsl(var(--tn-bg));
861
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
862
+ cursor: pointer;
863
+ transition: transform 0.1s;
864
+ }
865
+
866
+ .fw-sc-volume-slider:hover::-moz-range-thumb {
867
+ transform: scale(1.1);
868
+ background: white;
869
+ }
870
+
871
+ /* Boosted state (>100%) - Add a glow */
872
+ .fw-sc-volume-slider--boosted::-webkit-slider-thumb {
873
+ background: hsl(var(--tn-yellow));
874
+ box-shadow: 0 0 5px hsl(var(--tn-yellow) / 0.5);
875
+ }
876
+
877
+ .fw-sc-volume-slider--boosted::-moz-range-thumb {
878
+ background: hsl(var(--tn-yellow));
879
+ box-shadow: 0 0 5px hsl(var(--tn-yellow) / 0.5);
880
+ }
881
+
882
+ /* =============================================
883
+ Error State
884
+ ============================================= */
885
+ .fw-sc-error {
886
+ padding: 1rem;
887
+ background: hsl(var(--tn-red) / 0.1);
888
+ border-left: 3px solid hsl(var(--tn-red));
889
+ }
890
+
891
+ .fw-sc-error-title {
892
+ font-weight: 600;
893
+ color: hsl(var(--tn-red));
894
+ margin-bottom: 0.25rem;
895
+ }
896
+
897
+ .fw-sc-error-message {
898
+ font-size: 0.875rem;
899
+ color: hsl(var(--tn-fg-dark));
900
+ }
901
+
902
+ /* =============================================
903
+ Utility Classes
904
+ ============================================= */
905
+ .fw-sc-hidden {
906
+ display: none !important;
907
+ }
908
+
909
+ .fw-sc-sr-only {
910
+ position: absolute;
911
+ width: 1px;
912
+ height: 1px;
913
+ padding: 0;
914
+ margin: -1px;
915
+ overflow: hidden;
916
+ clip: rect(0, 0, 0, 0);
917
+ white-space: nowrap;
918
+ border: 0;
919
+ }
920
+
921
+ /* =============================================
922
+ Settings Dropdown
923
+ ============================================= */
924
+ .fw-sc-settings-dropdown {
925
+ position: absolute;
926
+ top: calc(100% + 4px);
927
+ right: 0;
928
+ min-width: 200px;
929
+ background: hsl(var(--tn-bg-dark));
930
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
931
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
932
+ z-index: 50;
933
+ overflow: hidden;
934
+ }
935
+
936
+ .fw-sc-dropdown-section {
937
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.2);
938
+ }
939
+
940
+ .fw-sc-dropdown-section:last-child {
941
+ border-bottom: none;
942
+ }
943
+
944
+ .fw-sc-dropdown-label {
945
+ padding: 0.5rem 0.75rem 0.25rem;
946
+ font-size: 0.65rem;
947
+ font-weight: 600;
948
+ text-transform: uppercase;
949
+ letter-spacing: 0.05em;
950
+ color: hsl(var(--tn-comment));
951
+ }
952
+
953
+ .fw-sc-dropdown-options {
954
+ display: flex;
955
+ flex-direction: column;
956
+ padding: 0 0.25rem 0.5rem;
957
+ }
958
+
959
+ .fw-sc-dropdown-option {
960
+ display: flex;
961
+ flex-direction: column;
962
+ align-items: flex-start;
963
+ gap: 0;
964
+ padding: 0.375rem 0.5rem;
965
+ margin: 0;
966
+ border: none;
967
+ border-radius: 4px;
968
+ background: transparent;
969
+ color: hsl(var(--tn-fg));
970
+ cursor: pointer;
971
+ text-align: left;
972
+ width: 100%;
973
+ transition: background 0.15s;
974
+ }
975
+
976
+ .fw-sc-dropdown-option:hover:not(:disabled) {
977
+ background: hsl(var(--tn-bg-highlight) / 0.5);
978
+ }
979
+
980
+ .fw-sc-dropdown-option:disabled {
981
+ opacity: 0.5;
982
+ cursor: not-allowed;
983
+ }
984
+
985
+ .fw-sc-dropdown-option--active {
986
+ background: hsl(var(--tn-blue) / 0.2);
987
+ }
988
+
989
+ .fw-sc-dropdown-option--active:hover:not(:disabled) {
990
+ background: hsl(var(--tn-blue) / 0.3);
991
+ }
992
+
993
+ .fw-sc-dropdown-option-label {
994
+ font-size: 0.875rem;
995
+ font-weight: 500;
996
+ }
997
+
998
+ .fw-sc-dropdown-option-desc {
999
+ font-size: 0.7rem;
1000
+ color: hsl(var(--tn-comment));
1001
+ }
1002
+
1003
+ .fw-sc-dropdown-info {
1004
+ padding: 0.25rem 0.75rem 0.5rem;
1005
+ }
1006
+
1007
+ .fw-sc-dropdown-info-row {
1008
+ display: flex;
1009
+ justify-content: space-between;
1010
+ align-items: center;
1011
+ padding: 0.25rem 0;
1012
+ font-size: 0.75rem;
1013
+ color: hsl(var(--tn-fg-dark));
1014
+ }
1015
+
1016
+ .fw-sc-dropdown-info-value {
1017
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1018
+ color: hsl(var(--tn-fg));
1019
+ }
1020
+
1021
+ /* =============================================
1022
+ Context Menu
1023
+ ============================================= */
1024
+ .fw-sc-context-menu {
1025
+ position: fixed;
1026
+ min-width: 160px;
1027
+ background: hsl(var(--tn-bg-dark));
1028
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1029
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
1030
+ z-index: 100;
1031
+ overflow: hidden;
1032
+ }
1033
+
1034
+ .fw-sc-context-menu-item {
1035
+ display: flex;
1036
+ align-items: center;
1037
+ gap: 0.5rem;
1038
+ padding: 0.5rem 0.75rem;
1039
+ font-size: 0.875rem;
1040
+ color: hsl(var(--tn-fg));
1041
+ cursor: pointer;
1042
+ background: transparent;
1043
+ border: none;
1044
+ width: 100%;
1045
+ text-align: left;
1046
+ transition:
1047
+ background 0.15s,
1048
+ color 0.15s;
1049
+ }
1050
+
1051
+ .fw-sc-context-menu-item:hover {
1052
+ background: hsl(var(--tn-bg-highlight) / 0.7);
1053
+ color: hsl(var(--tn-fg));
1054
+ }
1055
+
1056
+ .fw-sc-context-menu-item--destructive {
1057
+ color: hsl(var(--tn-red));
1058
+ }
1059
+
1060
+ .fw-sc-context-menu-item--destructive:hover {
1061
+ background: hsl(var(--tn-red) / 0.15);
1062
+ color: hsl(var(--tn-red));
1063
+ }
1064
+
1065
+ .fw-sc-context-menu-separator {
1066
+ height: 1px;
1067
+ background: hsl(var(--tn-fg-gutter) / 0.3);
1068
+ margin: 0.25rem 0;
1069
+ }
1070
+
1071
+ .fw-sc-context-menu-label {
1072
+ padding: 0.375rem 0.75rem;
1073
+ font-size: 0.65rem;
1074
+ font-weight: 600;
1075
+ text-transform: uppercase;
1076
+ letter-spacing: 0.05em;
1077
+ color: hsl(var(--tn-comment));
1078
+ }
1079
+
1080
+ /* =============================================
1081
+ Compositor Controls (Phase 3)
1082
+ ============================================= */
1083
+ .fw-sc-compositor-controls {
1084
+ display: flex;
1085
+ flex-direction: column;
1086
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1087
+ }
1088
+
1089
+ .fw-sc-compositor-controls--disabled,
1090
+ .fw-sc-compositor-controls--loading {
1091
+ padding: 1rem;
1092
+ }
1093
+
1094
+ .fw-sc-compositor-enable {
1095
+ text-align: center;
1096
+ }
1097
+
1098
+ .fw-sc-compositor-enable p {
1099
+ font-size: 0.875rem;
1100
+ color: hsl(var(--tn-fg-dark));
1101
+ margin-bottom: 0.75rem;
1102
+ }
1103
+
1104
+ .fw-sc-compositor-enable-btn {
1105
+ padding: 0.5rem 1rem;
1106
+ border: 1px solid hsl(var(--tn-blue));
1107
+ border-radius: 4px;
1108
+ background: hsl(var(--tn-blue) / 0.1);
1109
+ color: hsl(var(--tn-blue));
1110
+ font-size: 0.875rem;
1111
+ font-weight: 500;
1112
+ cursor: pointer;
1113
+ transition: background 0.15s;
1114
+ }
1115
+
1116
+ .fw-sc-compositor-enable-btn:hover {
1117
+ background: hsl(var(--tn-blue) / 0.2);
1118
+ }
1119
+
1120
+ .fw-sc-compositor-loading {
1121
+ text-align: center;
1122
+ color: hsl(var(--tn-comment));
1123
+ font-size: 0.875rem;
1124
+ }
1125
+
1126
+ .fw-sc-compositor-header {
1127
+ display: flex;
1128
+ align-items: center;
1129
+ justify-content: space-between;
1130
+ padding: 0.5rem 1rem;
1131
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.2);
1132
+ background: hsl(var(--tn-bg-highlight) / 0.3);
1133
+ }
1134
+
1135
+ .fw-sc-compositor-info {
1136
+ display: flex;
1137
+ align-items: center;
1138
+ gap: 0.75rem;
1139
+ }
1140
+
1141
+ .fw-sc-compositor-title {
1142
+ font-size: 0.7rem;
1143
+ font-weight: 600;
1144
+ text-transform: uppercase;
1145
+ letter-spacing: 0.05em;
1146
+ color: hsl(var(--tn-comment));
1147
+ }
1148
+
1149
+ .fw-sc-compositor-renderer {
1150
+ font-size: 0.7rem;
1151
+ color: hsl(var(--tn-fg-dark));
1152
+ }
1153
+
1154
+ .fw-sc-compositor-stats-inline {
1155
+ font-size: 0.65rem;
1156
+ color: hsl(var(--tn-fg-gutter));
1157
+ font-family:
1158
+ ui-monospace,
1159
+ SFMono-Regular,
1160
+ SF Mono,
1161
+ Menlo,
1162
+ Consolas,
1163
+ monospace;
1164
+ margin-left: 0.5rem;
1165
+ }
1166
+
1167
+ .fw-sc-compositor-disable-btn {
1168
+ width: 24px;
1169
+ height: 24px;
1170
+ display: flex;
1171
+ align-items: center;
1172
+ justify-content: center;
1173
+ padding: 0;
1174
+ border: none;
1175
+ border-radius: 4px;
1176
+ background: transparent;
1177
+ color: hsl(var(--tn-comment));
1178
+ cursor: pointer;
1179
+ transition: all 0.15s;
1180
+ }
1181
+
1182
+ .fw-sc-compositor-disable-btn:hover {
1183
+ background: hsl(var(--tn-red) / 0.2);
1184
+ color: hsl(var(--tn-red));
1185
+ }
1186
+
1187
+ .fw-sc-compositor-stats {
1188
+ display: flex;
1189
+ align-items: center;
1190
+ gap: 1rem;
1191
+ padding: 0.25rem 1rem;
1192
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1193
+ font-size: 0.7rem;
1194
+ color: hsl(var(--tn-fg-dark));
1195
+ background: hsl(var(--tn-bg-dark) / 0.5);
1196
+ }
1197
+
1198
+ .fw-sc-stat {
1199
+ color: hsl(var(--tn-cyan));
1200
+ }
1201
+
1202
+ /* =============================================
1203
+ Compositor Actions (Header Right Side)
1204
+ ============================================= */
1205
+ .fw-sc-compositor-actions {
1206
+ display: flex;
1207
+ align-items: center;
1208
+ gap: 0.5rem;
1209
+ }
1210
+
1211
+ .fw-sc-scaling-mode-select {
1212
+ padding: 0.25rem 0.5rem;
1213
+ font-size: 0.7rem;
1214
+ background: hsl(var(--tn-bg-dark));
1215
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1216
+ border-radius: 4px;
1217
+ color: hsl(var(--tn-fg));
1218
+ cursor: pointer;
1219
+ }
1220
+
1221
+ .fw-sc-scaling-mode-select:hover {
1222
+ border-color: hsl(var(--tn-fg-gutter) / 0.5);
1223
+ }
1224
+
1225
+ /* =============================================
1226
+ Compositor Sources (Simplified)
1227
+ ============================================= */
1228
+ .fw-sc-compositor-sources {
1229
+ padding: 0.5rem;
1230
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.2);
1231
+ }
1232
+
1233
+ .fw-sc-section-label {
1234
+ font-size: 0.65rem;
1235
+ font-weight: 600;
1236
+ text-transform: uppercase;
1237
+ letter-spacing: 0.05em;
1238
+ color: hsl(var(--tn-comment));
1239
+ margin-bottom: 0.5rem;
1240
+ padding-left: 0.5rem;
1241
+ }
1242
+
1243
+ .fw-sc-source-list {
1244
+ display: flex;
1245
+ flex-direction: column;
1246
+ gap: 0.25rem;
1247
+ }
1248
+
1249
+ .fw-sc-source-row {
1250
+ display: flex;
1251
+ align-items: center;
1252
+ gap: 0.5rem;
1253
+ padding: 0.375rem 0.5rem;
1254
+ background: hsl(var(--tn-bg-highlight) / 0.3);
1255
+ border-radius: 4px;
1256
+ transition: opacity 0.15s;
1257
+ }
1258
+
1259
+ .fw-sc-source-row--hidden {
1260
+ opacity: 0.4;
1261
+ }
1262
+
1263
+ .fw-sc-visibility-btn {
1264
+ width: 24px;
1265
+ height: 24px;
1266
+ display: flex;
1267
+ align-items: center;
1268
+ justify-content: center;
1269
+ padding: 0;
1270
+ border: none;
1271
+ border-radius: 4px;
1272
+ background: transparent;
1273
+ color: hsl(var(--tn-fg-dark));
1274
+ cursor: pointer;
1275
+ transition: all 0.15s;
1276
+ }
1277
+
1278
+ .fw-sc-visibility-btn:hover {
1279
+ background: hsl(var(--tn-bg-highlight));
1280
+ color: hsl(var(--tn-fg));
1281
+ }
1282
+
1283
+ .fw-sc-source-icon {
1284
+ display: flex;
1285
+ align-items: center;
1286
+ color: hsl(var(--tn-comment));
1287
+ }
1288
+
1289
+ .fw-sc-source-label {
1290
+ flex: 1;
1291
+ font-size: 0.8rem;
1292
+ color: hsl(var(--tn-fg));
1293
+ overflow: hidden;
1294
+ text-overflow: ellipsis;
1295
+ white-space: nowrap;
1296
+ }
1297
+
1298
+ /* =============================================
1299
+ Layout Presets (Grid)
1300
+ ============================================= */
1301
+ .fw-sc-layout-presets {
1302
+ padding: 0.5rem;
1303
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.2);
1304
+ }
1305
+
1306
+ .fw-sc-layout-grid {
1307
+ display: grid;
1308
+ grid-template-columns: repeat(6, 1fr);
1309
+ gap: 0.25rem;
1310
+ }
1311
+
1312
+ .fw-sc-layout-btn {
1313
+ aspect-ratio: 1;
1314
+ display: flex;
1315
+ align-items: center;
1316
+ justify-content: center;
1317
+ padding: 0;
1318
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1319
+ border-radius: 4px;
1320
+ background: hsl(var(--tn-bg-highlight) / 0.3);
1321
+ color: hsl(var(--tn-fg-dark));
1322
+ cursor: pointer;
1323
+ transition: all 0.15s;
1324
+ }
1325
+
1326
+ .fw-sc-layout-btn:hover {
1327
+ background: hsl(var(--tn-bg-highlight));
1328
+ border-color: hsl(var(--tn-fg-gutter) / 0.5);
1329
+ }
1330
+
1331
+ .fw-sc-layout-btn--active {
1332
+ background: hsl(var(--tn-blue) / 0.2);
1333
+ border-color: hsl(var(--tn-blue) / 0.5);
1334
+ color: hsl(var(--tn-blue));
1335
+ }
1336
+
1337
+ .fw-sc-layout-btn--disabled,
1338
+ .fw-sc-layout-btn:disabled {
1339
+ opacity: 0.3;
1340
+ cursor: not-allowed;
1341
+ }
1342
+
1343
+ .fw-sc-layout-btn--disabled:hover,
1344
+ .fw-sc-layout-btn:disabled:hover {
1345
+ background: hsl(var(--tn-bg-highlight) / 0.3);
1346
+ border-color: hsl(var(--tn-fg-gutter) / 0.3);
1347
+ }
1348
+
1349
+ /* Legacy layout preset buttons (for backwards compat) */
1350
+ .fw-sc-layout-presets-label {
1351
+ font-size: 0.7rem;
1352
+ font-weight: 600;
1353
+ text-transform: uppercase;
1354
+ letter-spacing: 0.05em;
1355
+ color: hsl(var(--tn-comment));
1356
+ }
1357
+
1358
+ .fw-sc-layout-preset-buttons {
1359
+ display: flex;
1360
+ gap: 0.25rem;
1361
+ }
1362
+
1363
+ .fw-sc-layout-preset-btn {
1364
+ width: 32px;
1365
+ height: 28px;
1366
+ display: flex;
1367
+ align-items: center;
1368
+ justify-content: center;
1369
+ padding: 0;
1370
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1371
+ border-radius: 4px;
1372
+ background: hsl(var(--tn-bg-highlight) / 0.3);
1373
+ color: hsl(var(--tn-fg-dark));
1374
+ font-size: 0.75rem;
1375
+ cursor: pointer;
1376
+ transition: all 0.15s;
1377
+ }
1378
+
1379
+ .fw-sc-layout-preset-btn:hover {
1380
+ background: hsl(var(--tn-bg-highlight));
1381
+ border-color: hsl(var(--tn-fg-gutter) / 0.5);
1382
+ }
1383
+
1384
+ .fw-sc-layout-preset-btn--active {
1385
+ background: hsl(var(--tn-blue) / 0.2);
1386
+ border-color: hsl(var(--tn-blue) / 0.5);
1387
+ color: hsl(var(--tn-blue));
1388
+ }
1389
+
1390
+ .fw-sc-layout-preset-btn--disabled,
1391
+ .fw-sc-layout-preset-btn:disabled {
1392
+ opacity: 0.3;
1393
+ cursor: not-allowed;
1394
+ }
1395
+
1396
+ .fw-sc-layout-preset-btn--disabled:hover,
1397
+ .fw-sc-layout-preset-btn:disabled:hover {
1398
+ background: transparent;
1399
+ border-color: hsl(var(--tn-fg-gutter) / 0.3);
1400
+ }
1401
+
1402
+ /* =============================================
1403
+ Scene Switcher
1404
+ ============================================= */
1405
+ .fw-sc-scene-switcher {
1406
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.2);
1407
+ }
1408
+
1409
+ .fw-sc-scene-switcher-header {
1410
+ display: flex;
1411
+ align-items: center;
1412
+ justify-content: space-between;
1413
+ padding: 0.5rem 1rem;
1414
+ }
1415
+
1416
+ .fw-sc-scene-switcher-title {
1417
+ font-size: 0.7rem;
1418
+ font-weight: 600;
1419
+ text-transform: uppercase;
1420
+ letter-spacing: 0.05em;
1421
+ color: hsl(var(--tn-comment));
1422
+ }
1423
+
1424
+ .fw-sc-transition-controls {
1425
+ display: flex;
1426
+ align-items: center;
1427
+ gap: 0.5rem;
1428
+ }
1429
+
1430
+ .fw-sc-transition-select {
1431
+ padding: 0.25rem 0.5rem;
1432
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1433
+ border-radius: 4px;
1434
+ background: hsl(var(--tn-bg-highlight));
1435
+ color: hsl(var(--tn-fg));
1436
+ font-size: 0.75rem;
1437
+ cursor: pointer;
1438
+ }
1439
+
1440
+ .fw-sc-transition-select:focus {
1441
+ outline: none;
1442
+ border-color: hsl(var(--tn-blue));
1443
+ }
1444
+
1445
+ .fw-sc-transition-duration {
1446
+ width: 60px;
1447
+ padding: 0.25rem 0.5rem;
1448
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1449
+ border-radius: 4px;
1450
+ background: hsl(var(--tn-bg-highlight));
1451
+ color: hsl(var(--tn-fg));
1452
+ font-size: 0.75rem;
1453
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1454
+ }
1455
+
1456
+ .fw-sc-transition-duration:focus {
1457
+ outline: none;
1458
+ border-color: hsl(var(--tn-blue));
1459
+ }
1460
+
1461
+ .fw-sc-transition-unit {
1462
+ font-size: 0.7rem;
1463
+ color: hsl(var(--tn-comment));
1464
+ }
1465
+
1466
+ .fw-sc-scene-list {
1467
+ display: flex;
1468
+ gap: 0.5rem;
1469
+ padding: 0 1rem 0.75rem;
1470
+ overflow-x: auto;
1471
+ }
1472
+
1473
+ .fw-sc-scene-item {
1474
+ position: relative;
1475
+ display: flex;
1476
+ flex-direction: column;
1477
+ align-items: flex-start;
1478
+ padding: 0.5rem 0.75rem;
1479
+ min-width: 100px;
1480
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1481
+ border-radius: 4px;
1482
+ background: hsl(var(--tn-bg-highlight));
1483
+ color: hsl(var(--tn-fg));
1484
+ cursor: pointer;
1485
+ transition: all 0.15s;
1486
+ }
1487
+
1488
+ .fw-sc-scene-item:hover {
1489
+ border-color: hsl(var(--tn-fg-gutter) / 0.5);
1490
+ }
1491
+
1492
+ .fw-sc-scene-item--active {
1493
+ border-color: hsl(var(--tn-green));
1494
+ box-shadow: 0 0 0 1px hsl(var(--tn-green) / 0.3);
1495
+ }
1496
+
1497
+ .fw-sc-scene-item--transitioning {
1498
+ opacity: 0.7;
1499
+ pointer-events: none;
1500
+ }
1501
+
1502
+ .fw-sc-scene-name {
1503
+ font-size: 0.875rem;
1504
+ font-weight: 500;
1505
+ }
1506
+
1507
+ .fw-sc-scene-layer-count {
1508
+ font-size: 0.7rem;
1509
+ color: hsl(var(--tn-comment));
1510
+ }
1511
+
1512
+ .fw-sc-scene-delete {
1513
+ position: absolute;
1514
+ top: 2px;
1515
+ right: 2px;
1516
+ width: 18px;
1517
+ height: 18px;
1518
+ display: flex;
1519
+ align-items: center;
1520
+ justify-content: center;
1521
+ padding: 0;
1522
+ border: none;
1523
+ border-radius: 2px;
1524
+ background: transparent;
1525
+ color: hsl(var(--tn-comment));
1526
+ font-size: 14px;
1527
+ cursor: pointer;
1528
+ opacity: 0;
1529
+ transition: all 0.15s;
1530
+ }
1531
+
1532
+ .fw-sc-scene-item:hover .fw-sc-scene-delete {
1533
+ opacity: 1;
1534
+ }
1535
+
1536
+ .fw-sc-scene-delete:hover {
1537
+ background: hsl(var(--tn-red) / 0.2);
1538
+ color: hsl(var(--tn-red));
1539
+ }
1540
+
1541
+ .fw-sc-scene-add {
1542
+ display: flex;
1543
+ align-items: center;
1544
+ justify-content: center;
1545
+ min-width: 40px;
1546
+ padding: 0.5rem;
1547
+ border: 1px dashed hsl(var(--tn-fg-gutter) / 0.5);
1548
+ border-radius: 4px;
1549
+ background: transparent;
1550
+ color: hsl(var(--tn-comment));
1551
+ font-size: 1.25rem;
1552
+ cursor: pointer;
1553
+ transition: all 0.15s;
1554
+ }
1555
+
1556
+ .fw-sc-scene-add:hover {
1557
+ border-color: hsl(var(--tn-blue));
1558
+ color: hsl(var(--tn-blue));
1559
+ background: hsl(var(--tn-blue) / 0.1);
1560
+ }
1561
+
1562
+ /* New Scene Input */
1563
+ .fw-sc-new-scene-input {
1564
+ display: flex;
1565
+ gap: 0.5rem;
1566
+ padding: 0.5rem 1rem;
1567
+ background: hsl(var(--tn-bg-dark) / 0.5);
1568
+ }
1569
+
1570
+ .fw-sc-new-scene-input input {
1571
+ flex: 1;
1572
+ padding: 0.375rem 0.5rem;
1573
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1574
+ border-radius: 4px;
1575
+ background: hsl(var(--tn-bg-highlight));
1576
+ color: hsl(var(--tn-fg));
1577
+ font-size: 0.875rem;
1578
+ }
1579
+
1580
+ .fw-sc-new-scene-input input:focus {
1581
+ outline: none;
1582
+ border-color: hsl(var(--tn-blue));
1583
+ }
1584
+
1585
+ .fw-sc-new-scene-input button {
1586
+ padding: 0.375rem 0.75rem;
1587
+ border: none;
1588
+ border-radius: 4px;
1589
+ background: hsl(var(--tn-blue));
1590
+ color: white;
1591
+ font-size: 0.75rem;
1592
+ font-weight: 500;
1593
+ cursor: pointer;
1594
+ transition: background 0.15s;
1595
+ }
1596
+
1597
+ .fw-sc-new-scene-input button:hover {
1598
+ background: hsl(var(--tn-blue) / 0.8);
1599
+ }
1600
+
1601
+ .fw-sc-new-scene-input button:last-child {
1602
+ background: hsl(var(--tn-bg-highlight));
1603
+ color: hsl(var(--tn-fg-dark));
1604
+ }
1605
+
1606
+ .fw-sc-new-scene-input button:last-child:hover {
1607
+ background: hsl(var(--tn-bg-highlight) / 0.8);
1608
+ }
1609
+
1610
+ /* =============================================
1611
+ Layer List
1612
+ ============================================= */
1613
+ .fw-sc-layer-list {
1614
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.2);
1615
+ }
1616
+
1617
+ .fw-sc-layer-list-header {
1618
+ display: flex;
1619
+ align-items: center;
1620
+ justify-content: space-between;
1621
+ padding: 0.5rem 1rem;
1622
+ background: hsl(var(--tn-bg-highlight) / 0.3);
1623
+ }
1624
+
1625
+ .fw-sc-layer-list-title {
1626
+ font-size: 0.7rem;
1627
+ font-weight: 600;
1628
+ text-transform: uppercase;
1629
+ letter-spacing: 0.05em;
1630
+ color: hsl(var(--tn-comment));
1631
+ }
1632
+
1633
+ .fw-sc-layer-count {
1634
+ font-size: 0.7rem;
1635
+ color: hsl(var(--tn-fg-dark));
1636
+ background: hsl(var(--tn-bg-highlight));
1637
+ padding: 0.125rem 0.375rem;
1638
+ border-radius: 8px;
1639
+ }
1640
+
1641
+ .fw-sc-layer-items {
1642
+ display: flex;
1643
+ flex-direction: column;
1644
+ }
1645
+
1646
+ .fw-sc-layer-empty {
1647
+ padding: 1rem;
1648
+ text-align: center;
1649
+ color: hsl(var(--tn-comment));
1650
+ font-size: 0.875rem;
1651
+ }
1652
+
1653
+ .fw-sc-layer-item {
1654
+ display: flex;
1655
+ align-items: center;
1656
+ gap: 0.5rem;
1657
+ padding: 0.5rem 1rem;
1658
+ border-bottom: 1px solid hsl(var(--tn-fg-gutter) / 0.15);
1659
+ cursor: pointer;
1660
+ transition: background 0.15s;
1661
+ }
1662
+
1663
+ .fw-sc-layer-item:last-child {
1664
+ border-bottom: none;
1665
+ }
1666
+
1667
+ .fw-sc-layer-item:hover {
1668
+ background: hsl(var(--tn-bg-highlight) / 0.3);
1669
+ }
1670
+
1671
+ .fw-sc-layer-item--selected {
1672
+ background: hsl(var(--tn-blue) / 0.1);
1673
+ }
1674
+
1675
+ .fw-sc-layer-item--selected:hover {
1676
+ background: hsl(var(--tn-blue) / 0.15);
1677
+ }
1678
+
1679
+ .fw-sc-layer-item--dragging {
1680
+ opacity: 0.5;
1681
+ }
1682
+
1683
+ .fw-sc-layer-item--drag-over {
1684
+ border-top: 2px solid hsl(var(--tn-blue));
1685
+ }
1686
+
1687
+ .fw-sc-layer-item--hidden {
1688
+ opacity: 0.5;
1689
+ }
1690
+
1691
+ .fw-sc-layer-visibility {
1692
+ width: 24px;
1693
+ height: 24px;
1694
+ display: flex;
1695
+ align-items: center;
1696
+ justify-content: center;
1697
+ padding: 0;
1698
+ border: none;
1699
+ border-radius: 4px;
1700
+ background: transparent;
1701
+ color: hsl(var(--tn-comment));
1702
+ cursor: pointer;
1703
+ transition: all 0.15s;
1704
+ }
1705
+
1706
+ .fw-sc-layer-visibility:hover {
1707
+ background: hsl(var(--tn-bg-highlight));
1708
+ }
1709
+
1710
+ .fw-sc-layer-visibility--visible {
1711
+ color: hsl(var(--tn-fg));
1712
+ }
1713
+
1714
+ .fw-sc-layer-icon {
1715
+ font-size: 1rem;
1716
+ }
1717
+
1718
+ .fw-sc-layer-name {
1719
+ flex: 1;
1720
+ font-size: 0.875rem;
1721
+ overflow: hidden;
1722
+ text-overflow: ellipsis;
1723
+ white-space: nowrap;
1724
+ }
1725
+
1726
+ .fw-sc-layer-opacity {
1727
+ display: flex;
1728
+ align-items: center;
1729
+ gap: 0.5rem;
1730
+ margin-right: 0.5rem;
1731
+ }
1732
+
1733
+ .fw-sc-layer-opacity input[type="range"] {
1734
+ width: 60px;
1735
+ height: 4px;
1736
+ -webkit-appearance: none;
1737
+ appearance: none;
1738
+ background: hsl(var(--tn-bg-highlight));
1739
+ border-radius: 2px;
1740
+ cursor: pointer;
1741
+ }
1742
+
1743
+ .fw-sc-layer-opacity input[type="range"]::-webkit-slider-thumb {
1744
+ -webkit-appearance: none;
1745
+ width: 12px;
1746
+ height: 12px;
1747
+ border-radius: 50%;
1748
+ background: hsl(var(--tn-fg));
1749
+ cursor: pointer;
1750
+ }
1751
+
1752
+ .fw-sc-layer-opacity input[type="range"]::-moz-range-thumb {
1753
+ width: 12px;
1754
+ height: 12px;
1755
+ border-radius: 50%;
1756
+ background: hsl(var(--tn-fg));
1757
+ border: none;
1758
+ cursor: pointer;
1759
+ }
1760
+
1761
+ .fw-sc-layer-opacity span {
1762
+ font-size: 0.7rem;
1763
+ color: hsl(var(--tn-fg-dark));
1764
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1765
+ min-width: 32px;
1766
+ }
1767
+
1768
+ .fw-sc-layer-controls {
1769
+ display: flex;
1770
+ align-items: center;
1771
+ gap: 0.125rem;
1772
+ }
1773
+
1774
+ .fw-sc-layer-btn {
1775
+ width: 24px;
1776
+ height: 24px;
1777
+ display: flex;
1778
+ align-items: center;
1779
+ justify-content: center;
1780
+ padding: 0;
1781
+ border: none;
1782
+ border-radius: 4px;
1783
+ background: transparent;
1784
+ color: hsl(var(--tn-comment));
1785
+ font-size: 0.875rem;
1786
+ cursor: pointer;
1787
+ transition: all 0.15s;
1788
+ }
1789
+
1790
+ .fw-sc-layer-btn:hover:not(:disabled) {
1791
+ background: hsl(var(--tn-bg-highlight));
1792
+ color: hsl(var(--tn-fg));
1793
+ }
1794
+
1795
+ .fw-sc-layer-btn:disabled {
1796
+ opacity: 0.3;
1797
+ cursor: not-allowed;
1798
+ }
1799
+
1800
+ .fw-sc-layer-btn--active {
1801
+ background: hsl(var(--tn-blue) / 0.2);
1802
+ color: hsl(var(--tn-blue));
1803
+ }
1804
+
1805
+ .fw-sc-layer-btn--danger:hover:not(:disabled) {
1806
+ background: hsl(var(--tn-red) / 0.2);
1807
+ color: hsl(var(--tn-red));
1808
+ }
1809
+
1810
+ /* ============================================================================
1811
+ * Compact Layout Overlay
1812
+ * ============================================================================ */
1813
+
1814
+ .fw-sc-layout-overlay {
1815
+ position: absolute;
1816
+ bottom: 8px;
1817
+ left: 50%;
1818
+ transform: translateX(-50%);
1819
+ z-index: 20;
1820
+ display: flex;
1821
+ flex-direction: column;
1822
+ align-items: center;
1823
+ gap: 4px;
1824
+ opacity: 0.7;
1825
+ transition: opacity 0.2s ease;
1826
+ }
1827
+
1828
+ .fw-sc-layout-overlay:hover,
1829
+ .fw-sc-layout-overlay--expanded {
1830
+ opacity: 1;
1831
+ }
1832
+
1833
+ .fw-sc-layout-bar {
1834
+ display: flex;
1835
+ align-items: center;
1836
+ gap: 2px;
1837
+ padding: 4px 6px;
1838
+ background: hsl(var(--tn-bg-dark) / 0.9);
1839
+ backdrop-filter: blur(8px);
1840
+ border-radius: 6px;
1841
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1842
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
1843
+ }
1844
+
1845
+ .fw-sc-layout-icons,
1846
+ .fw-sc-scaling-icons {
1847
+ display: flex;
1848
+ align-items: center;
1849
+ gap: 1px;
1850
+ }
1851
+
1852
+ .fw-sc-layout-icon {
1853
+ width: 22px;
1854
+ height: 22px;
1855
+ display: flex;
1856
+ align-items: center;
1857
+ justify-content: center;
1858
+ padding: 0;
1859
+ border: none;
1860
+ border-radius: 4px;
1861
+ background: transparent;
1862
+ color: hsl(var(--tn-fg-dark));
1863
+ cursor: pointer;
1864
+ transition: all 0.15s ease;
1865
+ }
1866
+
1867
+ .fw-sc-layout-icon:hover {
1868
+ background: hsl(var(--tn-bg-highlight));
1869
+ color: hsl(var(--tn-fg));
1870
+ }
1871
+
1872
+ .fw-sc-layout-icon--active {
1873
+ background: hsl(var(--tn-blue) / 0.2);
1874
+ color: hsl(var(--tn-blue));
1875
+ }
1876
+
1877
+ .fw-sc-layout-icon--active:hover {
1878
+ background: hsl(var(--tn-blue) / 0.3);
1879
+ }
1880
+
1881
+ .fw-sc-layout-separator {
1882
+ width: 1px;
1883
+ height: 14px;
1884
+ background: hsl(var(--tn-fg-gutter) / 0.5);
1885
+ margin: 0 4px;
1886
+ }
1887
+
1888
+ .fw-sc-layout-stats {
1889
+ font-size: 0.65rem;
1890
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1891
+ color: hsl(var(--tn-fg-dark));
1892
+ white-space: nowrap;
1893
+ padding: 0 2px;
1894
+ }
1895
+
1896
+ /* Source chips (expanded on hover) */
1897
+ .fw-sc-layout-sources {
1898
+ display: flex;
1899
+ align-items: center;
1900
+ gap: 4px;
1901
+ padding: 4px 6px;
1902
+ background: hsl(var(--tn-bg-dark) / 0.9);
1903
+ backdrop-filter: blur(8px);
1904
+ border-radius: 6px;
1905
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1906
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
1907
+ }
1908
+
1909
+ .fw-sc-source-chip {
1910
+ display: flex;
1911
+ align-items: center;
1912
+ gap: 4px;
1913
+ padding: 3px 8px;
1914
+ border: none;
1915
+ border-radius: 4px;
1916
+ background: hsl(var(--tn-bg-highlight));
1917
+ color: hsl(var(--tn-fg));
1918
+ font-size: 0.7rem;
1919
+ cursor: pointer;
1920
+ transition: all 0.15s ease;
1921
+ }
1922
+
1923
+ .fw-sc-source-chip:hover {
1924
+ background: hsl(var(--tn-bg-highlight) / 1.5);
1925
+ }
1926
+
1927
+ .fw-sc-source-chip--hidden {
1928
+ background: hsl(var(--tn-bg-dark));
1929
+ color: hsl(var(--tn-comment));
1930
+ opacity: 0.6;
1931
+ }
1932
+
1933
+ .fw-sc-source-chip--hidden:hover {
1934
+ opacity: 0.9;
1935
+ }
1936
+
1937
+ .fw-sc-source-chip-icon {
1938
+ font-size: 0.75rem;
1939
+ }
1940
+
1941
+ .fw-sc-source-chip-label {
1942
+ max-width: 80px;
1943
+ overflow: hidden;
1944
+ text-overflow: ellipsis;
1945
+ white-space: nowrap;
1946
+ }
1947
+
1948
+ /* ============================================================================
1949
+ * Layout Bar Sections & Labels
1950
+ * ============================================================================ */
1951
+
1952
+ .fw-sc-layout-section {
1953
+ display: flex;
1954
+ align-items: center;
1955
+ gap: 4px;
1956
+ }
1957
+
1958
+ .fw-sc-layout-label {
1959
+ font-size: 0.6rem;
1960
+ font-weight: 500;
1961
+ text-transform: uppercase;
1962
+ letter-spacing: 0.05em;
1963
+ color: hsl(var(--tn-comment));
1964
+ padding: 0 4px;
1965
+ }
1966
+
1967
+ /* ============================================================================
1968
+ * Custom Instant Tooltips
1969
+ * ============================================================================ */
1970
+
1971
+ .fw-sc-tooltip-wrapper {
1972
+ position: relative;
1973
+ display: inline-flex;
1974
+ }
1975
+
1976
+ .fw-sc-tooltip {
1977
+ position: absolute;
1978
+ bottom: calc(100% + 8px);
1979
+ left: 50%;
1980
+ transform: translateX(-50%);
1981
+ padding: 4px 8px;
1982
+ background: hsl(var(--tn-bg-dark));
1983
+ border: 1px solid hsl(var(--tn-fg-gutter) / 0.5);
1984
+ border-radius: 4px;
1985
+ font-size: 0.7rem;
1986
+ font-weight: 500;
1987
+ color: hsl(var(--tn-fg));
1988
+ white-space: nowrap;
1989
+ z-index: 100;
1990
+ pointer-events: none;
1991
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
1992
+ }
1993
+
1994
+ .fw-sc-tooltip::after {
1995
+ content: "";
1996
+ position: absolute;
1997
+ top: 100%;
1998
+ left: 50%;
1999
+ transform: translateX(-50%);
2000
+ border: 5px solid transparent;
2001
+ border-top-color: hsl(var(--tn-fg-gutter) / 0.5);
2002
+ }
2003
+
2004
+ .fw-sc-tooltip::before {
2005
+ content: "";
2006
+ position: absolute;
2007
+ top: 100%;
2008
+ left: 50%;
2009
+ transform: translateX(-50%);
2010
+ border: 4px solid transparent;
2011
+ border-top-color: hsl(var(--tn-bg-dark));
2012
+ margin-top: -1px;
2013
+ }
2014
+ } /* End @layer fw-streamcrafter */
2015
+
2016
+ `;
2017
+
2018
+ exports.sharedStyles = sharedStyles;
2019
+ //# sourceMappingURL=shared-styles.js.map