@lincyaw/workbench 0.0.0-stage → 0.2.0-rc.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 (135) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +66 -2
  3. package/package.json +68 -3
  4. package/src/MediaClipEditor.tsx +122 -0
  5. package/src/StepProductionEditor.tsx +130 -0
  6. package/src/approvals.tsx +60 -0
  7. package/src/assistant-mascot.ts +62 -0
  8. package/src/audio-recording-messages.ts +44 -0
  9. package/src/audio-recording.ts +192 -0
  10. package/src/audio-wav.ts +25 -0
  11. package/src/audio-waveform.ts +110 -0
  12. package/src/audition.ts +84 -0
  13. package/src/authoring-client.ts +136 -0
  14. package/src/authoring-draft-fragment.ts +28 -0
  15. package/src/base-controls.tsx +47 -0
  16. package/src/caption-timing-drafts.ts +61 -0
  17. package/src/caption-timing-messages.ts +14 -0
  18. package/src/caption-timing.css +20 -0
  19. package/src/caption-timing.ts +14 -0
  20. package/src/component-draft-actions.ts +54 -0
  21. package/src/component-draft-inspection.ts +35 -0
  22. package/src/component-properties.css +24 -0
  23. package/src/component-properties.ts +45 -0
  24. package/src/component-property-drafts.ts +273 -0
  25. package/src/component-property-messages.ts +31 -0
  26. package/src/components.tsx +631 -0
  27. package/src/context.tsx +27 -0
  28. package/src/diagnostics.ts +113 -0
  29. package/src/document-draft-store.ts +179 -0
  30. package/src/document-drafts.ts +178 -0
  31. package/src/document-editor/BlockNoteSurface.tsx +209 -0
  32. package/src/document-editor/ComponentMaterials.tsx +62 -0
  33. package/src/document-editor/ComponentPropertiesDialog.tsx +282 -0
  34. package/src/document-editor/DocumentBlockFallback.tsx +31 -0
  35. package/src/document-editor/DocumentBlockPreview.tsx +239 -0
  36. package/src/document-editor/DocumentComments.tsx +282 -0
  37. package/src/document-editor/DocumentEditor.tsx +192 -0
  38. package/src/document-editor/DocumentStepNarration.tsx +93 -0
  39. package/src/document-editor/NarrationEditor.tsx +110 -0
  40. package/src/document-editor/NewCommentDrafts.tsx +224 -0
  41. package/src/document-editor/authoring.tsx +259 -0
  42. package/src/document-editor/block-playback.ts +90 -0
  43. package/src/document-editor/block-preview-messages.ts +13 -0
  44. package/src/document-editor/blocknote-messages.ts +98 -0
  45. package/src/document-editor/clipboard.ts +40 -0
  46. package/src/document-editor/colors.ts +57 -0
  47. package/src/document-editor/comment-draft-actions.ts +58 -0
  48. package/src/document-editor/comment-draft-inspection.ts +38 -0
  49. package/src/document-editor/comment-drafts.ts +361 -0
  50. package/src/document-editor/comments.ts +410 -0
  51. package/src/document-editor/file-input.ts +71 -0
  52. package/src/document-editor/focus.ts +54 -0
  53. package/src/document-editor/inline.ts +104 -0
  54. package/src/document-editor/math.tsx +63 -0
  55. package/src/document-editor/messages.ts +14 -0
  56. package/src/document-editor/narration-schema.tsx +85 -0
  57. package/src/document-editor/narration.ts +37 -0
  58. package/src/document-editor/popover.tsx +107 -0
  59. package/src/document-editor/projection.ts +423 -0
  60. package/src/document-editor/rich-text.ts +152 -0
  61. package/src/document-editor/schema.tsx +117 -0
  62. package/src/document-editor/selection.ts +152 -0
  63. package/src/document-editor/style.css +9 -0
  64. package/src/document-editor/styles.d.ts +1 -0
  65. package/src/document-editor/table-identities.ts +67 -0
  66. package/src/document-preview.ts +112 -0
  67. package/src/document-return-point.ts +59 -0
  68. package/src/document-session.ts +678 -0
  69. package/src/document-timing-drafts.ts +61 -0
  70. package/src/document-voices.ts +2 -0
  71. package/src/history.ts +167 -0
  72. package/src/index.ts +36 -0
  73. package/src/jobs.ts +111 -0
  74. package/src/mascot-preference.ts +37 -0
  75. package/src/media-drafts.ts +83 -0
  76. package/src/media-messages.ts +53 -0
  77. package/src/media-time.ts +12 -0
  78. package/src/messages.ts +781 -0
  79. package/src/outline.ts +97 -0
  80. package/src/panels/ChangeTrail.tsx +79 -0
  81. package/src/panels/DocumentNarrationPanel.tsx +27 -0
  82. package/src/panels/DocumentView.tsx +462 -0
  83. package/src/panels/DocumentVoiceDialog.tsx +179 -0
  84. package/src/panels/DocumentVoiceField.tsx +35 -0
  85. package/src/panels/ExportPanel.tsx +133 -0
  86. package/src/panels/HistoryPanel.tsx +88 -0
  87. package/src/panels/HomePanel.tsx +184 -0
  88. package/src/panels/PageDeleteDialog.tsx +33 -0
  89. package/src/panels/PageRenameDialog.tsx +27 -0
  90. package/src/panels/PreviewPanel.tsx +79 -0
  91. package/src/panels/ProductionCaptionTiming.tsx +122 -0
  92. package/src/panels/ProductionMediaClips.tsx +156 -0
  93. package/src/panels/ProductionPanel.tsx +272 -0
  94. package/src/panels/ProductionRecording.tsx +107 -0
  95. package/src/panels/ProductionRecordingRange.tsx +118 -0
  96. package/src/panels/ProductionTimeline.tsx +62 -0
  97. package/src/panels/ProductionTranscription.tsx +140 -0
  98. package/src/panels/SourceDocumentPanel.tsx +215 -0
  99. package/src/panels/SpeechSettingsPanel.tsx +64 -0
  100. package/src/panels/TranscriptionAdoption.tsx +147 -0
  101. package/src/panels/VoiceCloneDialog.tsx +152 -0
  102. package/src/panels/VoicePreviewDialog.tsx +74 -0
  103. package/src/panels/VoiceScopeField.tsx +30 -0
  104. package/src/panels/VoiceoverDialog.tsx +216 -0
  105. package/src/places.ts +102 -0
  106. package/src/preview-playback.ts +125 -0
  107. package/src/preview-pool.ts +320 -0
  108. package/src/preview.ts +110 -0
  109. package/src/production-messages.ts +151 -0
  110. package/src/production-playback.ts +109 -0
  111. package/src/production-voice-playback.ts +114 -0
  112. package/src/recording-adoption.ts +33 -0
  113. package/src/schema-form/PmSchemaForm.tsx +187 -0
  114. package/src/schema-form/context.ts +26 -0
  115. package/src/schema-form/fields.tsx +59 -0
  116. package/src/schema-form/templates.tsx +50 -0
  117. package/src/schema-form/validator.ts +36 -0
  118. package/src/schema-form/widgets.tsx +60 -0
  119. package/src/shortcuts.ts +8 -0
  120. package/src/sortable-list.tsx +201 -0
  121. package/src/speech-settings-messages.ts +40 -0
  122. package/src/step-production.css +5 -0
  123. package/src/step-production.ts +51 -0
  124. package/src/styles.css +1025 -0
  125. package/src/telemetry.ts +152 -0
  126. package/src/transcription-messages.ts +26 -0
  127. package/src/transcription-session.ts +159 -0
  128. package/src/use-recording-adoption.ts +84 -0
  129. package/src/voice-clone-messages.ts +92 -0
  130. package/src/voice-drafts.ts +89 -0
  131. package/src/voice-messages.ts +146 -0
  132. package/src/voice-snapshot.ts +55 -0
  133. package/src/voiceover-jobs.ts +87 -0
  134. package/src/workbench.ts +2328 -0
  135. package/src/workspace-client.ts +480 -0
package/src/styles.css ADDED
@@ -0,0 +1,1025 @@
1
+ @import '@lincyaw/design/block-preview.css';
2
+ @import '@blocknote/mantine/style.css';
3
+ @import './document-editor/style.css';
4
+ @import './step-production.css';
5
+ @import './component-properties.css';
6
+ @import './caption-timing.css';
7
+
8
+ .pmw-preview__frames[data-pending-snapshot]:not([data-presentation-gated]) { visibility: hidden; }
9
+
10
+ .pmw-muted {
11
+ color: var(--pm-color-muted);
12
+ font-size: var(--pm-text-sm);
13
+ }
14
+
15
+ .pmw-spacer {
16
+ flex: 1;
17
+ }
18
+
19
+ /* The documents, as an editor's start page lists them. */
20
+
21
+ .pmw-home {
22
+ box-sizing: border-box;
23
+ display: flex;
24
+ flex-direction: column;
25
+ gap: var(--pm-space-4);
26
+ min-height: 100%;
27
+ padding: var(--pm-space-8) clamp(var(--pm-space-4), 5vw, var(--pm-space-10));
28
+ background: var(--pm-color-chrome);
29
+ overflow: auto;
30
+ }
31
+
32
+ .pmw-home > * {
33
+ box-sizing: border-box;
34
+ flex-shrink: 0;
35
+ min-width: 0;
36
+ width: 100%;
37
+ max-width: var(--pm-sheet-width);
38
+ margin-right: auto;
39
+ margin-left: auto;
40
+ }
41
+
42
+ .pmw-home__bar {
43
+ display: flex;
44
+ flex-wrap: wrap;
45
+ align-items: center;
46
+ gap: var(--pm-space-3);
47
+ }
48
+
49
+ .pmw-home__title {
50
+ min-width: 0;
51
+ margin: 0 auto 0 0;
52
+ overflow-wrap: anywhere;
53
+ font-size: var(--pm-text-title);
54
+ font-weight: 600;
55
+ line-height: var(--pm-leading-tight);
56
+ }
57
+
58
+ .pmw-home__heading-row {
59
+ display: flex;
60
+ flex-wrap: wrap;
61
+ align-items: center;
62
+ justify-content: space-between;
63
+ gap: var(--pm-space-3);
64
+ margin-top: var(--pm-space-2);
65
+ }
66
+
67
+ .pmw-home__heading {
68
+ margin: 0;
69
+ color: var(--pm-color-muted);
70
+ font-size: var(--pm-text-xs);
71
+ font-weight: 600;
72
+ letter-spacing: var(--pm-tracking-label);
73
+ text-transform: uppercase;
74
+ }
75
+
76
+ .pmw-home__search {
77
+ width: min(18rem, 100%);
78
+ }
79
+
80
+ .pmw-home__cards {
81
+ margin-block: 0;
82
+ padding: 0;
83
+ overflow: hidden;
84
+ border: var(--pm-size-hairline) solid var(--pm-color-line);
85
+ border-radius: var(--pm-radius-small);
86
+ background: var(--pm-color-surface);
87
+ list-style: none;
88
+ }
89
+
90
+ .pmw-home__card {
91
+ display: flex;
92
+ align-items: center;
93
+ gap: var(--pm-space-2);
94
+ padding-right: var(--pm-space-2);
95
+ }
96
+
97
+ .pmw-home__card + .pmw-home__card {
98
+ border-top: var(--pm-size-hairline) solid var(--pm-color-line);
99
+ }
100
+
101
+ .pmw-home__card:hover {
102
+ background: var(--pm-color-selected);
103
+ }
104
+
105
+ .pmw-home__open {
106
+ display: flex;
107
+ flex: 1;
108
+ align-items: center;
109
+ gap: var(--pm-space-3);
110
+ min-width: 0;
111
+ min-height: var(--pm-size-row);
112
+ margin: 0;
113
+ padding: var(--pm-space-2) var(--pm-space-4);
114
+ border: 0;
115
+ background: none;
116
+ color: inherit;
117
+ font: inherit;
118
+ text-align: start;
119
+ cursor: pointer;
120
+ }
121
+
122
+ .pmw-home__open:focus-visible {
123
+ outline: var(--pm-size-stroke) solid var(--pm-color-accent);
124
+ outline-offset: calc(-1 * var(--pm-size-stroke));
125
+ }
126
+
127
+ .pmw-home__doc-icon {
128
+ display: grid;
129
+ flex: none;
130
+ place-items: center;
131
+ width: var(--pm-size-avatar);
132
+ height: var(--pm-size-avatar);
133
+ border-radius: var(--pm-radius-tool);
134
+ background: var(--pm-color-accent-soft);
135
+ color: var(--pm-color-accent);
136
+ }
137
+
138
+ .pmw-home__doc-title {
139
+ overflow-wrap: anywhere;
140
+ font-size: var(--pm-text-md);
141
+ font-weight: 500;
142
+ line-height: var(--pm-leading-tight);
143
+ }
144
+
145
+ .pmw-operation {
146
+ display: flex;
147
+ flex-direction: column;
148
+ gap: var(--pm-space-3);
149
+ min-width: min(24rem, 80vw);
150
+ }
151
+
152
+ .pmw-operation p {
153
+ margin: 0;
154
+ }
155
+
156
+ .pmw-operation__actions {
157
+ display: flex;
158
+ justify-content: flex-end;
159
+ gap: var(--pm-space-2);
160
+ }
161
+
162
+ /* The open document, as an editor shows it: the command bar, the panes, the page on its canvas, the status bar. */
163
+
164
+ .pmw-document {
165
+ display: flex;
166
+ flex-direction: column;
167
+ height: 100%;
168
+ min-width: 0;
169
+ min-height: 0;
170
+ background: var(--pm-color-chrome);
171
+ }
172
+
173
+ .pmw-toolbar {
174
+ display: flex;
175
+ flex: none;
176
+ align-items: center;
177
+ gap: var(--pm-space-px);
178
+ min-height: var(--pm-toolbar-height);
179
+ padding: var(--pm-space-1) var(--pm-space-2);
180
+ overflow-x: auto;
181
+ border-bottom: var(--pm-size-hairline) solid var(--pm-color-line);
182
+ background: var(--pm-color-chrome);
183
+ scrollbar-width: none;
184
+ }
185
+
186
+ .pmw-toolbar__title {
187
+ min-width: 0;
188
+ max-width: calc(var(--pm-navigation-width) * 1.5);
189
+ margin: 0 var(--pm-space-2) 0 var(--pm-space-1);
190
+ overflow: hidden;
191
+ font-size: var(--pm-text-md);
192
+ font-weight: 600;
193
+ text-overflow: ellipsis;
194
+ white-space: nowrap;
195
+ }
196
+
197
+ .pmw-toolbar__document { display: contents; }
198
+
199
+ .pmw-toolbar__group {
200
+ display: inline-flex;
201
+ flex: none;
202
+ align-items: center;
203
+ gap: var(--pm-space-px);
204
+ }
205
+
206
+ .pmw-toolbar__divider {
207
+ flex: none;
208
+ width: var(--pm-size-hairline);
209
+ height: var(--pm-size-divider);
210
+ margin: 0 var(--pm-space-1);
211
+ background: var(--pm-color-line);
212
+ }
213
+
214
+ .pmw-toolbar__status-short { display: none; }
215
+
216
+ .pmw-toolbar__status {
217
+ margin: 0 var(--pm-space-2) 0 var(--pm-space-1);
218
+ color: var(--pm-color-muted);
219
+ font-size: var(--pm-text-xs);
220
+ white-space: nowrap;
221
+ }
222
+
223
+ .pmw-notices:empty {
224
+ display: none;
225
+ }
226
+
227
+ .pmw-notices {
228
+ display: flex;
229
+ flex: none;
230
+ flex-direction: column;
231
+ gap: var(--pm-space-2);
232
+ padding: var(--pm-space-2) var(--pm-space-3) 0;
233
+ }
234
+
235
+ .pmw-notices > .pm-ui-notice {
236
+ display: flex;
237
+ flex-wrap: wrap;
238
+ align-items: center;
239
+ gap: var(--pm-space-2);
240
+ }
241
+
242
+ .pmw-notice__actions {
243
+ display: inline-flex;
244
+ gap: var(--pm-space-2);
245
+ margin-left: auto;
246
+ }
247
+
248
+ .pmw-problems {
249
+ display: flex;
250
+ flex: 1;
251
+ flex-direction: column;
252
+ gap: var(--pm-space-1);
253
+ min-width: 0;
254
+ }
255
+
256
+ .pmw-problems__summary {
257
+ display: flex;
258
+ flex-wrap: wrap;
259
+ align-items: center;
260
+ gap: var(--pm-space-2);
261
+ }
262
+
263
+ .pmw-problems__failure {
264
+ margin: 0;
265
+ color: var(--pm-color-danger);
266
+ }
267
+
268
+ .pmw-problems__details summary {
269
+ color: var(--pm-color-muted);
270
+ font-size: var(--pm-text-xs);
271
+ cursor: pointer;
272
+ }
273
+
274
+ .pmw-problems__details ul {
275
+ margin: var(--pm-space-1) 0 0;
276
+ padding-left: var(--pm-space-4);
277
+ font-family: var(--pm-font-mono);
278
+ font-size: var(--pm-text-xs);
279
+ overflow-wrap: anywhere;
280
+ }
281
+
282
+ .pmw-document__body {
283
+ display: flex;
284
+ flex: 1;
285
+ min-width: 0;
286
+ min-height: 0;
287
+ }
288
+
289
+ .pmw-document__body > .pmw-preview {
290
+ flex: 1;
291
+ min-width: 0;
292
+ }
293
+
294
+ .pmw-document__aside {
295
+ box-sizing: border-box;
296
+ display: flex;
297
+ flex: 0 0 min(var(--pm-aside-width), 38%);
298
+ flex-direction: column;
299
+ min-width: 0;
300
+ min-height: 0;
301
+ border-left: var(--pm-size-hairline) solid var(--pm-color-line);
302
+ background: var(--pm-color-chrome);
303
+ }
304
+
305
+ /* The navigation pane: the document's headings, or its slides. */
306
+
307
+ .pmw-navigation {
308
+ display: flex;
309
+ flex: 0 0 var(--pm-navigation-width);
310
+ flex-direction: column;
311
+ min-width: 0;
312
+ min-height: 0;
313
+ border-right: var(--pm-size-hairline) solid var(--pm-color-line);
314
+ background: var(--pm-color-chrome);
315
+ }
316
+
317
+ .pmw-navigation__empty {
318
+ margin: var(--pm-space-3);
319
+ }
320
+
321
+ .pmw-navigation__list {
322
+ flex: 1;
323
+ margin: 0;
324
+ padding: var(--pm-space-2) var(--pm-space-2) var(--pm-space-4);
325
+ overflow: auto;
326
+ list-style: none;
327
+ }
328
+
329
+ .pmw-navigation__row { display: flex; align-items: center; gap: var(--pm-space-1); }
330
+ .pmw-navigation__row > .pmw-navigation__item { flex: 1; min-width: 0; }
331
+ .pmw-navigation > .pm-ui-notice { margin: var(--pm-space-2); }
332
+
333
+ .pmw-navigation__item {
334
+ box-sizing: border-box;
335
+ display: flex;
336
+ align-items: baseline;
337
+ gap: var(--pm-space-2);
338
+ width: 100%;
339
+ margin: 0;
340
+ padding: var(--pm-space-1) var(--pm-space-2);
341
+ border: 0;
342
+ border-radius: var(--pm-radius-tool);
343
+ background: none;
344
+ color: var(--pm-color-ink);
345
+ font: inherit;
346
+ font-size: var(--pm-text-sm);
347
+ line-height: 1.4;
348
+ text-align: start;
349
+ cursor: pointer;
350
+ }
351
+
352
+ .pmw-navigation__item:hover {
353
+ background: var(--pm-color-hover);
354
+ }
355
+
356
+ .pmw-navigation__item[aria-current] {
357
+ background: var(--pm-color-selected);
358
+ box-shadow: inset var(--pm-size-stroke) 0 0 var(--pm-color-accent);
359
+ color: var(--pm-color-accent);
360
+ font-weight: 600;
361
+ }
362
+
363
+ .pmw-navigation__item:focus-visible {
364
+ outline: var(--pm-size-stroke) solid var(--pm-color-accent);
365
+ outline-offset: calc(-1 * var(--pm-size-stroke));
366
+ }
367
+
368
+ .pmw-navigation__item[data-depth='0'] { font-weight: 600; }
369
+ .pmw-navigation__item[data-depth='1'] { padding-left: calc(var(--pm-space-2) + var(--pm-space-4)); }
370
+ .pmw-navigation__item[data-depth='2'] { padding-left: calc(var(--pm-space-2) + 2 * var(--pm-space-4)); color: var(--pm-color-muted); }
371
+ .pmw-navigation__item[data-depth='3'] { padding-left: calc(var(--pm-space-2) + 3 * var(--pm-space-4)); color: var(--pm-color-muted); }
372
+
373
+ .pmw-navigation__number {
374
+ flex: none;
375
+ min-width: var(--pm-space-5);
376
+ color: var(--pm-color-muted);
377
+ font-variant-numeric: tabular-nums;
378
+ text-align: end;
379
+ }
380
+
381
+ .pmw-navigation__title {
382
+ min-width: 0;
383
+ overflow: hidden;
384
+ text-overflow: ellipsis;
385
+ white-space: nowrap;
386
+ }
387
+
388
+ /* The status bar. */
389
+
390
+ .pmw-statusbar {
391
+ display: flex;
392
+ flex: none;
393
+ align-items: center;
394
+ gap: var(--pm-space-4);
395
+ min-height: var(--pm-statusbar-height);
396
+ padding: 0 var(--pm-space-3);
397
+ overflow: hidden;
398
+ border-top: var(--pm-size-hairline) solid var(--pm-color-line);
399
+ background: var(--pm-color-chrome);
400
+ color: var(--pm-color-muted);
401
+ font-size: var(--pm-text-xs);
402
+ white-space: nowrap;
403
+ }
404
+
405
+ .pmw-statusbar__item > .pm-ui-icon {
406
+ width: var(--pm-size-icon-sm);
407
+ height: var(--pm-size-icon-sm);
408
+ }
409
+
410
+ .pmw-statusbar__item {
411
+ display: inline-flex;
412
+ align-items: center;
413
+ gap: var(--pm-space-1);
414
+ min-width: 0;
415
+ overflow: hidden;
416
+ text-overflow: ellipsis;
417
+ }
418
+
419
+ /* The document on its canvas: the page draws itself in it, a slide lies on it at its own proportions. */
420
+
421
+ .pmw-preview {
422
+ display: flex;
423
+ flex-direction: column;
424
+ height: 100%;
425
+ min-height: 0;
426
+ background: var(--pm-color-canvas);
427
+ }
428
+
429
+ .pmw-preview > .pm-ui-notice,
430
+ .pmw-preview__loading {
431
+ margin: var(--pm-space-2);
432
+ }
433
+
434
+ .pmw-preview__stage {
435
+ position: relative;
436
+ display: flex;
437
+ flex: 1;
438
+ min-height: 0;
439
+ overflow: hidden;
440
+ }
441
+
442
+ .pmw-preview__frames {
443
+ display: flex;
444
+ flex: 1;
445
+ min-height: 0;
446
+ }
447
+
448
+ .pmw-preview__frame {
449
+ flex: 1;
450
+ width: 100%;
451
+ min-height: 0;
452
+ border: 0;
453
+ background: var(--pm-color-canvas);
454
+ }
455
+
456
+ /* A slide is as large as fits with the canvas around it, at the deck's proportions (`--pmw-slide-aspect`). */
457
+ .pmw-preview__frames[data-renderer='slides'] {
458
+ align-items: center;
459
+ justify-content: center;
460
+ container-type: size;
461
+ }
462
+
463
+ .pmw-preview__frames[data-renderer='slides'] > .pmw-preview__frame {
464
+ flex: none;
465
+ width: min(100cqw - 2 * var(--pm-space-6), (100cqh - 2 * var(--pm-space-6)) * var(--pmw-slide-aspect));
466
+ height: auto;
467
+ aspect-ratio: var(--pmw-slide-aspect);
468
+ box-shadow: var(--pm-shadow-page);
469
+ }
470
+
471
+ .pmw-preview__frame[hidden] {
472
+ display: none;
473
+ }
474
+
475
+ /* The toolbar beside the mouse. */
476
+
477
+ .pmw-pointer {
478
+ position: absolute;
479
+ z-index: 5;
480
+ max-width: min(26rem, calc(100% - var(--pm-space-4)));
481
+ padding: var(--pm-space-1);
482
+ border: var(--pm-size-hairline) solid var(--pm-color-line-strong);
483
+ border-radius: var(--pm-radius-panel);
484
+ background: var(--pm-color-surface);
485
+ box-shadow: var(--pm-shadow-float);
486
+ }
487
+
488
+ .pmw-pointer[data-step='comment'] {
489
+ width: min(24rem, calc(100% - var(--pm-space-4)));
490
+ padding: var(--pm-space-3);
491
+ }
492
+
493
+ .pmw-pointer[data-step='tools'] {
494
+ width: max-content;
495
+ padding: 0;
496
+ border-radius: var(--pm-radius-control);
497
+ }
498
+
499
+ .pmw-pointer__tools {
500
+ display: flex;
501
+ align-items: center;
502
+ }
503
+
504
+ .pmw-pointer__form {
505
+ display: flex;
506
+ flex-direction: column;
507
+ gap: var(--pm-space-2);
508
+ }
509
+
510
+ .pmw-pointer__quote {
511
+ max-height: 4.5em;
512
+ margin: 0;
513
+ padding-left: var(--pm-space-2);
514
+ overflow: hidden;
515
+ border-left: var(--pm-size-rule) solid var(--pm-color-accent);
516
+ color: var(--pm-color-muted);
517
+ font-size: var(--pm-text-sm);
518
+ line-height: 1.5;
519
+ }
520
+
521
+ .pmw-pointer__text {
522
+ width: 100%;
523
+ font: inherit;
524
+ }
525
+
526
+ .pmw-pointer__actions {
527
+ display: flex;
528
+ align-items: center;
529
+ justify-content: flex-end;
530
+ gap: var(--pm-space-2);
531
+ }
532
+
533
+ /* The side panes: comments and version history. */
534
+
535
+ .pmw-pane {
536
+ display: flex;
537
+ flex: 1;
538
+ flex-direction: column;
539
+ gap: var(--pm-space-2);
540
+ min-height: 0;
541
+ padding-bottom: var(--pm-space-3);
542
+ overflow: auto;
543
+ }
544
+
545
+ .pmw-pane > .pm-ui-notice,
546
+ .pmw-pane > .pm-ui-empty {
547
+ margin: 0 var(--pm-space-3);
548
+ }
549
+
550
+ .pmw-pane__header {
551
+ position: sticky;
552
+ top: 0;
553
+ z-index: 1;
554
+ display: flex;
555
+ flex: none;
556
+ align-items: center;
557
+ gap: var(--pm-space-2);
558
+ min-height: var(--pm-pane-header-height);
559
+ padding: 0 var(--pm-space-2) 0 var(--pm-space-3);
560
+ background: var(--pm-color-chrome);
561
+ }
562
+
563
+ .pmw-pane__title {
564
+ flex: 1;
565
+ margin: 0;
566
+ color: var(--pm-color-muted);
567
+ font-size: var(--pm-text-xs);
568
+ font-weight: 600;
569
+ letter-spacing: var(--pm-tracking-label);
570
+ text-transform: uppercase;
571
+ }
572
+
573
+ .pmw-pane__footer {
574
+ margin: 0 var(--pm-space-3);
575
+ }
576
+
577
+ .pmw-comments,
578
+ .pmw-versions {
579
+ display: flex;
580
+ flex-direction: column;
581
+ gap: var(--pm-space-2);
582
+ margin: 0;
583
+ padding: 0 var(--pm-space-3);
584
+ list-style: none;
585
+ }
586
+
587
+ .pmw-comment {
588
+ display: flex;
589
+ flex-direction: column;
590
+ gap: var(--pm-space-2);
591
+ padding: var(--pm-space-3);
592
+ border: var(--pm-size-hairline) solid var(--pm-color-line);
593
+ border-left: var(--pm-size-rule) solid var(--pm-color-accent);
594
+ border-radius: var(--pm-radius-card);
595
+ background: var(--pm-color-surface);
596
+ }
597
+
598
+ .pmw-comment[data-status='resolved'] {
599
+ border-left-color: var(--pm-color-line-strong);
600
+ opacity: 0.75;
601
+ }
602
+
603
+ .pmw-comment__place {
604
+ display: inline-flex;
605
+ align-items: center;
606
+ gap: var(--pm-space-2);
607
+ margin: 0;
608
+ padding: 0;
609
+ border: 0;
610
+ background: none;
611
+ color: var(--pm-color-muted);
612
+ font: inherit;
613
+ font-size: var(--pm-text-xs);
614
+ text-align: start;
615
+ cursor: pointer;
616
+ }
617
+
618
+ .pmw-comment__place:hover {
619
+ color: var(--pm-color-accent);
620
+ }
621
+
622
+ .pmw-comment__number {
623
+ display: inline-grid;
624
+ place-items: center;
625
+ min-width: var(--pm-size-badge);
626
+ height: var(--pm-size-badge);
627
+ padding: 0 var(--pm-space-1);
628
+ box-sizing: border-box;
629
+ border-radius: var(--pm-radius-pill);
630
+ background: var(--pm-color-accent);
631
+ color: var(--pm-color-on-accent);
632
+ font-size: var(--pm-text-xs);
633
+ font-weight: 600;
634
+ }
635
+
636
+ .pmw-comment__quote {
637
+ margin: 0;
638
+ padding-left: var(--pm-space-2);
639
+ border-left: var(--pm-size-stroke) solid var(--pm-color-line-strong);
640
+ color: var(--pm-color-muted);
641
+ font-size: var(--pm-text-sm);
642
+ }
643
+
644
+ .pmw-comment__text {
645
+ margin: 0;
646
+ white-space: pre-wrap;
647
+ overflow-wrap: anywhere;
648
+ }
649
+
650
+ .pmw-comment__meta {
651
+ display: flex;
652
+ flex-wrap: wrap;
653
+ align-items: center;
654
+ gap: var(--pm-space-2);
655
+ color: var(--pm-color-muted);
656
+ font-size: var(--pm-text-xs);
657
+ }
658
+
659
+ .pmw-comment__actions {
660
+ display: flex;
661
+ flex-wrap: wrap;
662
+ align-items: center;
663
+ gap: var(--pm-space-1);
664
+ }
665
+
666
+ .pmw-comment__actions > .pm-ui-icon-button {
667
+ margin-left: auto;
668
+ }
669
+
670
+ .pmw-version {
671
+ display: grid;
672
+ grid-template-columns: auto minmax(0, 1fr);
673
+ gap: var(--pm-space-1) var(--pm-space-2);
674
+ padding: var(--pm-space-2) 0;
675
+ border-bottom: var(--pm-size-hairline) solid var(--pm-color-line);
676
+ }
677
+
678
+ .pmw-version__icon {
679
+ display: grid;
680
+ place-items: center;
681
+ width: var(--pm-size-avatar);
682
+ height: var(--pm-size-avatar);
683
+ border-radius: 50%;
684
+ background: var(--pm-color-sunk);
685
+ color: var(--pm-color-muted);
686
+ }
687
+
688
+ .pmw-version[data-origin='agent'] .pmw-version__icon {
689
+ background: var(--pm-color-accent-soft);
690
+ color: var(--pm-color-accent);
691
+ }
692
+
693
+ .pmw-version__summary {
694
+ margin: 0;
695
+ overflow-wrap: anywhere;
696
+ font-size: var(--pm-text-sm);
697
+ font-weight: 600;
698
+ }
699
+
700
+ .pmw-version[data-undone] .pmw-version__summary {
701
+ color: var(--pm-color-muted);
702
+ text-decoration: line-through;
703
+ }
704
+
705
+ .pmw-version__meta {
706
+ display: flex;
707
+ flex-wrap: wrap;
708
+ align-items: center;
709
+ gap: var(--pm-space-1);
710
+ margin: 0;
711
+ color: var(--pm-color-muted);
712
+ font-size: var(--pm-text-xs);
713
+ }
714
+
715
+ .pmw-version__action {
716
+ grid-column: 2;
717
+ justify-self: start;
718
+ }
719
+
720
+ /* Above the video: its file. */
721
+
722
+
723
+
724
+ /* The Export pane: what the document can be made into, and what was made. */
725
+
726
+ .pmw-export__targets {
727
+ display: flex;
728
+ flex-wrap: wrap;
729
+ gap: var(--pm-space-2);
730
+ margin: 0;
731
+ padding: 0 var(--pm-space-3);
732
+ list-style: none;
733
+ }
734
+
735
+ .pmw-export__subtitle {
736
+ margin: var(--pm-space-2) var(--pm-space-3) 0;
737
+ color: var(--pm-color-muted);
738
+ font-size: var(--pm-text-xs);
739
+ font-weight: 600;
740
+ }
741
+
742
+ .pmw-export__video {
743
+ display: block;
744
+ width: 100%;
745
+ max-height: 70vh;
746
+ border-radius: var(--pm-radius-small);
747
+ background: var(--pm-color-sunk);
748
+ }
749
+
750
+ .pmw-jobs {
751
+ display: flex;
752
+ flex-direction: column;
753
+ margin: 0;
754
+ padding: 0 var(--pm-space-3);
755
+ list-style: none;
756
+ }
757
+
758
+ .pmw-job {
759
+ display: grid;
760
+ grid-template-columns: auto minmax(0, 1fr);
761
+ gap: var(--pm-space-1) var(--pm-space-2);
762
+ padding: var(--pm-space-2) 0;
763
+ border-bottom: var(--pm-size-hairline) solid var(--pm-color-line);
764
+ }
765
+
766
+ .pmw-job__icon {
767
+ display: grid;
768
+ place-items: center;
769
+ width: var(--pm-size-avatar);
770
+ height: var(--pm-size-avatar);
771
+ border-radius: 50%;
772
+ background: var(--pm-color-sunk);
773
+ color: var(--pm-color-muted);
774
+ }
775
+
776
+ .pmw-job[data-state='running'] .pmw-job__icon {
777
+ background: var(--pm-color-accent-soft);
778
+ color: var(--pm-color-accent);
779
+ }
780
+
781
+ .pmw-job[data-state='failed'] .pmw-job__icon {
782
+ background: var(--pm-color-danger-soft);
783
+ color: var(--pm-color-danger);
784
+ }
785
+
786
+ .pmw-job__body {
787
+ display: flex;
788
+ flex-direction: column;
789
+ gap: var(--pm-space-1);
790
+ min-width: 0;
791
+ }
792
+
793
+ .pmw-job__title {
794
+ margin: 0;
795
+ font-size: var(--pm-text-sm);
796
+ font-weight: 600;
797
+ }
798
+
799
+ .pmw-job__meta {
800
+ display: flex;
801
+ flex-wrap: wrap;
802
+ align-items: center;
803
+ gap: var(--pm-space-1);
804
+ margin: 0;
805
+ color: var(--pm-color-muted);
806
+ font-size: var(--pm-text-xs);
807
+ }
808
+
809
+ .pmw-job__progress {
810
+ display: flex;
811
+ flex-direction: column;
812
+ gap: var(--pm-space-1);
813
+ color: var(--pm-color-muted);
814
+ font-size: var(--pm-text-xs);
815
+ }
816
+
817
+ .pmw-job__progress progress {
818
+ width: 100%;
819
+ height: var(--pm-space-1);
820
+ accent-color: var(--pm-color-accent);
821
+ }
822
+
823
+ /* The kitten above the bar, as far along it as the job has come (`--pmw-job-done`, 0 to 1), never past its ends. */
824
+ .pmw-job__runner {
825
+ display: block;
826
+ margin-left: calc((100% - var(--pm-size-mascot-sm)) * var(--pmw-job-done));
827
+ line-height: 0;
828
+ }
829
+
830
+ .pmw-job__runner:empty {
831
+ display: none;
832
+ }
833
+
834
+ .pmw-job__error {
835
+ margin: 0;
836
+ color: var(--pm-color-danger);
837
+ font-size: var(--pm-text-xs);
838
+ overflow-wrap: anywhere;
839
+ }
840
+
841
+ .pmw-job__log summary {
842
+ color: var(--pm-color-muted);
843
+ font-size: var(--pm-text-xs);
844
+ cursor: pointer;
845
+ }
846
+
847
+ .pmw-job__log-lines {
848
+ display: flex;
849
+ flex-direction: column-reverse;
850
+ max-height: calc(var(--pm-size-row) * 5);
851
+ margin-top: var(--pm-space-1);
852
+ overflow: auto;
853
+ border-radius: var(--pm-radius-small);
854
+ background: var(--pm-color-code);
855
+ }
856
+
857
+ .pmw-job__log pre {
858
+ margin: 0;
859
+ padding: var(--pm-space-2);
860
+ color: var(--pm-color-ink);
861
+ font-family: var(--pm-font-mono);
862
+ font-size: var(--pm-text-xs);
863
+ white-space: pre-wrap;
864
+ overflow-wrap: anywhere;
865
+ }
866
+
867
+ .pmw-job__actions {
868
+ display: flex;
869
+ flex-wrap: wrap;
870
+ gap: var(--pm-space-2);
871
+ }
872
+
873
+ .pmw-job__actions:empty {
874
+ display: none;
875
+ }
876
+
877
+ /* Radix owns positioning, layering and keyboard/focus behavior; these are visual tokens only. */
878
+
879
+
880
+ .pmw-help {
881
+ display: flex;
882
+ flex-direction: column;
883
+ gap: var(--pm-space-2);
884
+ margin: 0;
885
+ padding-left: var(--pm-space-4);
886
+ line-height: var(--pm-leading-ui);
887
+ }
888
+
889
+ /* Narrow: labels go, icons stay; the side pane covers the document. */
890
+
891
+ @media (max-width: 1279px) {
892
+ .pmw-toolbar__title { max-width: 40vw; }
893
+ .pmw-document__body { position: relative; }
894
+ .pmw-navigation {
895
+ position: absolute;
896
+ inset: 0 auto 0 0;
897
+ z-index: 6;
898
+ width: min(100%, var(--pm-navigation-width));
899
+ box-shadow: var(--pm-shadow-float);
900
+ }
901
+ .pmw-document__aside {
902
+ position: absolute;
903
+ inset: 0 0 0 auto;
904
+ z-index: 6;
905
+ width: min(100%, 24rem);
906
+ box-shadow: var(--pm-shadow-float);
907
+ }
908
+ }
909
+
910
+ /* Per-step speech: compact step strip and two tracks, alongside either document or presentation. */
911
+ .pmw-narration { min-height: 0; overflow: auto; }
912
+ .pmw-narration__body { display: grid; gap: var(--pm-space-3); padding: var(--pm-space-3); }
913
+ .pmw-narration__place { display: flex; align-items: center; gap: var(--pm-space-2); margin: 0; font-family: var(--pm-font-mono); font-size: var(--pm-text-xs); }
914
+ .pmw-narration__place span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
915
+ .pmw-narration__steps { display: flex; gap: var(--pm-space-1); overflow: auto; padding-block: var(--pm-space-1); }
916
+ .pmw-narration__steps button { flex: none; }
917
+ .pmw-narration__modes { display: flex; flex-wrap: wrap; gap: var(--pm-space-1); }
918
+ .pmw-narration__actions { display: flex; justify-content: flex-end; gap: var(--pm-space-2); }
919
+ .pmw-narration__timeline { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--pm-space-1); padding: var(--pm-space-2); border-radius: var(--pm-radius-control); background: var(--pm-color-sunk); font-size: var(--pm-text-xs); }
920
+ .pmw-narration__timeline span { display: flex; align-items: center; gap: var(--pm-space-1); padding: var(--pm-space-2); border-radius: var(--pm-radius-control); }
921
+ .pmw-narration__animation { grid-column: 1; background: var(--pm-color-accent-soft); color: var(--pm-color-accent); }
922
+ .pmw-narration__speech { grid-column: 1; background: var(--pm-color-surface); color: var(--pm-color-ink); }
923
+ .pmw-narration__timeline[data-mode='after'] .pmw-narration__speech { grid-column: 2; }
924
+
925
+ /* Business regions arrange shared controls; their surfaces and states stay in design. */
926
+ .pmw-document__main { display: flex; flex: 1; flex-direction: column; min-width: 0; min-height: 0; isolation: isolate; }
927
+ .pmw-document__source { display: flex; flex: 1; min-width: 0; min-height: 0; }
928
+ .pmw-document__source[hidden] { display: none; }
929
+ .pmw-source-document { flex: 1; min-width: 0; min-height: 0; overflow: auto; padding: var(--pm-space-5); background: var(--pm-color-canvas); }
930
+ .pmw-source-document__notices { position: sticky; inset-block-start: 0; z-index: var(--pm-z-site-header); display: grid; gap: var(--pm-space-3); margin-block-end: var(--pm-space-3); }
931
+ .pmw-source-document__recovery { display: grid; gap: var(--pm-space-2); min-width: 0; }
932
+ .pmw-source-document__recovery-actions { display: flex; flex-wrap: wrap; gap: var(--pm-space-2); }
933
+ .pmw-source-document__diagnostics { margin-block-end: var(--pm-space-3); }
934
+ .pmw-source-document__sheet { position: relative; max-width: var(--pm-sheet-width); min-height: 100%; margin-inline: auto; padding-block: var(--pm-space-4); background: var(--pm-color-surface); box-shadow: var(--pm-shadow-page); }
935
+ /* Opening: the page's own margins, so that the placeholder lines sit where the text will. */
936
+ .pmw-source-document__sheet--loading { box-sizing: border-box; padding: var(--pm-space-10) var(--pm-space-12); }
937
+ .pmw-voice__filters { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--pm-space-3); }
938
+ .pmw-voice__summary, .pmw-voice__status { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pm-space-2); min-width: 0; overflow-wrap: anywhere; }
939
+ .pmw-voice__status { justify-content: space-between; }
940
+ .pmw-voice__steps { display: flex; flex-wrap: wrap; gap: var(--pm-space-1); }
941
+ .pmw-voice__sample { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
942
+ .pmw-document__main > .pmw-preview { flex: 1; height: auto; }
943
+ .pmw-step-timeline { display: flex; flex: none; flex-direction: column; gap: var(--pm-space-2); padding: var(--pm-space-3); border-top: var(--pm-size-hairline) solid var(--pm-color-line); }
944
+ .pmw-step-timeline__heading { display: flex; justify-content: space-between; gap: var(--pm-space-3); color: var(--pm-color-muted); font-size: var(--pm-text-xs); }
945
+ .pmw-step-timeline__steps { display: flex; gap: var(--pm-space-1); overflow-x: auto; padding: var(--pm-space-1); }
946
+ .pmw-step-timeline__steps > * { flex: none; }
947
+ .pmw-toolbar--present { justify-content: flex-end; }
948
+ @media (max-width: 767px) {
949
+ .pmw-source-document { padding: var(--pm-space-2); }
950
+ .pmw-toolbar--document { flex-wrap: wrap; }
951
+ .pmw-toolbar--document .pmw-toolbar__document { display: flex; flex: 1 0 100%; align-items: center; gap: var(--pm-space-px); min-width: 0; }
952
+ .pmw-toolbar--document .pmw-toolbar__title { flex: 1; max-width: none; }
953
+ .pmw-toolbar--document .pmw-toolbar__status { flex: 1 1 0; }
954
+ .pmw-toolbar--document > .pmw-spacer { display: none; }
955
+ .pmw-toolbar__status { flex: none; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
956
+ .pmw-toolbar__status-full:has(+ .pmw-toolbar__status-short) { display: none; }
957
+ .pmw-toolbar__status-short { display: inline; }
958
+ .pmw-document__aside { width: 100%; }
959
+ .pmw-step-timeline { padding: var(--pm-space-2); }
960
+ }
961
+
962
+ /* Production owns pane layout; controls and dock chrome live in the shared design layer. */
963
+ .pmw-speech-settings { min-width: 0; }
964
+ .pmw-speech-settings__content, .pmw-speech-settings__fields { display: flex; flex-direction: column; gap: var(--pm-space-3); min-width: 0; }
965
+ .pmw-speech-settings__content { padding: var(--pm-space-3); }
966
+ .pmw-speech-settings__content > p, .pmw-speech-settings__fields > p { margin: 0; }
967
+ .pmw-speech-settings__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pm-space-2); }
968
+ .pmw-production { position: relative; display: flex; flex: 1; flex-direction: column; min-width: 0; min-height: 0; overflow: hidden; }
969
+ .pmw-production__workarea { flex: 1; min-width: 0; min-height: 0; }
970
+ .pmw-production__main, .pmw-production__body { flex: 1; min-width: 0; min-height: 0; }
971
+ .pmw-production__library, .pmw-production__visuals, .pmw-production__properties { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
972
+ .pmw-production__frame { display: flex; flex: 1; min-width: 0; min-height: 0; }
973
+ .pmw-production__frame > .pmw-preview { flex: 1; }
974
+ .pmw-production__monitor-tools { display: flex; flex: none; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--pm-space-2); padding: var(--pm-space-2) var(--pm-space-3); }
975
+ .pmw-production__transport { display: flex; flex: 0 1 auto; align-items: center; flex-wrap: wrap; gap: var(--pm-space-2); min-width: 0; }
976
+ .pmw-production__fields { display: flex; flex-direction: column; gap: var(--pm-space-4); min-width: 0; }
977
+ .pmw-production [hidden] { display: none; }
978
+ .pmw-production__feedback { display: flex; flex-direction: column; gap: var(--pm-space-2); max-height: min(60vh, var(--pm-production-feedback-height)); overflow-y: auto; }
979
+ .pmw-production__timeline { min-width: 0; min-height: 0; overflow: auto; }
980
+ .pmw-voice__form { display: flex; flex-direction: column; gap: var(--pm-space-3); min-width: 0; }
981
+ .pmw-voice__actions { display: flex; flex-wrap: wrap; gap: var(--pm-space-2); }
982
+ .pmw-audio-recording { display: flex; flex-direction: column; gap: var(--pm-space-3); min-width: 0; }
983
+ .pmw-voice__steps { display: flex; flex-wrap: wrap; gap: var(--pm-space-1); max-height: var(--pm-block-preview-height); overflow-y: auto; }
984
+ .pmw-transcription, .pmw-transcription__atoms { display: grid; gap: var(--pm-space-3); min-width: 0; }
985
+ .pmw-transcription__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pm-space-2); min-width: 0; }
986
+ .pmw-transcription__actions > span { min-width: 0; overflow-wrap: anywhere; }
987
+ .pmw-transcription__review { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--pm-space-3); }
988
+ @media (max-width: 767px) { .pmw-transcription__review { grid-template-columns: minmax(0, 1fr); } }
989
+
990
+ .pmw-history-pages {
991
+ display: flex;
992
+ justify-content: space-between;
993
+ gap: var(--pm-space-2);
994
+ margin: 0 var(--pm-space-3);
995
+ }
996
+
997
+ /* The host's pending approvals, from the app bar. */
998
+ .pmw-approvals { display: grid; gap: var(--pm-space-2); }
999
+ .pmw-approvals__heading { margin: 0; font-size: var(--pm-text-md); font-weight: var(--pm-weight-semibold); }
1000
+ .pmw-approvals__list { display: grid; gap: var(--pm-space-3); margin: 0; padding: 0; list-style: none; }
1001
+ .pmw-approvals__item { display: grid; gap: var(--pm-space-1); }
1002
+ .pmw-approvals__item + .pmw-approvals__item { padding-top: var(--pm-space-3); border-top: var(--pm-size-hairline) solid var(--pm-color-line); }
1003
+ .pmw-approvals__title { margin: 0; color: var(--pm-color-ink); overflow-wrap: anywhere; }
1004
+ .pmw-approvals .pmw-muted { margin: 0; }
1005
+ .pmw-approvals__detail { max-height: 30vh; margin: 0; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; }
1006
+ .pmw-approvals__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--pm-space-2); }
1007
+
1008
+ /* The kitten walking over the preview to the blocks the AI changed: its ground line meets the block's lower left. */
1009
+ .pmw-change-trail {
1010
+ position: absolute;
1011
+ top: 0;
1012
+ left: 0;
1013
+ z-index: 1;
1014
+ pointer-events: none;
1015
+ transform: translate(calc(var(--pmw-trail-x) - 45%), calc(var(--pmw-trail-y) - 89%));
1016
+ transition: transform var(--pm-duration-walk) linear, opacity var(--pm-duration-slow);
1017
+ }
1018
+
1019
+ .pmw-change-trail[data-phase='done'] {
1020
+ opacity: 0.9;
1021
+ }
1022
+
1023
+ .pmw-change-trail__facing[data-facing='left'] {
1024
+ transform: scaleX(-1);
1025
+ }