@lincyaw/workbench 0.1.0 → 0.2.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +40 -8
  2. package/package.json +27 -22
  3. package/src/MediaClipEditor.tsx +122 -0
  4. package/src/StepProductionEditor.tsx +130 -0
  5. package/src/approvals.tsx +60 -0
  6. package/src/assistant-mascot.ts +62 -0
  7. package/src/audio-recording-messages.ts +44 -0
  8. package/src/audio-recording.ts +192 -0
  9. package/src/audio-wav.ts +25 -0
  10. package/src/audio-waveform.ts +110 -0
  11. package/src/audition.ts +84 -0
  12. package/src/authoring-client.ts +136 -0
  13. package/src/authoring-draft-fragment.ts +28 -0
  14. package/src/base-controls.tsx +47 -0
  15. package/src/caption-timing-drafts.ts +61 -0
  16. package/src/caption-timing-messages.ts +14 -0
  17. package/src/caption-timing.css +20 -0
  18. package/src/caption-timing.ts +14 -0
  19. package/src/component-draft-actions.ts +54 -0
  20. package/src/component-draft-inspection.ts +35 -0
  21. package/src/component-properties.css +24 -0
  22. package/src/component-properties.ts +45 -0
  23. package/src/component-property-drafts.ts +273 -0
  24. package/src/component-property-messages.ts +31 -0
  25. package/src/components.tsx +547 -90
  26. package/src/context.tsx +27 -0
  27. package/src/diagnostics.ts +113 -0
  28. package/src/document-draft-store.ts +179 -0
  29. package/src/document-drafts.ts +178 -0
  30. package/src/document-editor/BlockNoteSurface.tsx +209 -0
  31. package/src/document-editor/ComponentMaterials.tsx +62 -0
  32. package/src/document-editor/ComponentPropertiesDialog.tsx +282 -0
  33. package/src/document-editor/DocumentBlockFallback.tsx +31 -0
  34. package/src/document-editor/DocumentBlockPreview.tsx +239 -0
  35. package/src/document-editor/DocumentComments.tsx +282 -0
  36. package/src/document-editor/DocumentEditor.tsx +192 -0
  37. package/src/document-editor/DocumentStepNarration.tsx +93 -0
  38. package/src/document-editor/NarrationEditor.tsx +110 -0
  39. package/src/document-editor/NewCommentDrafts.tsx +224 -0
  40. package/src/document-editor/authoring.tsx +259 -0
  41. package/src/document-editor/block-playback.ts +90 -0
  42. package/src/document-editor/block-preview-messages.ts +13 -0
  43. package/src/document-editor/blocknote-messages.ts +98 -0
  44. package/src/document-editor/clipboard.ts +40 -0
  45. package/src/document-editor/colors.ts +57 -0
  46. package/src/document-editor/comment-draft-actions.ts +58 -0
  47. package/src/document-editor/comment-draft-inspection.ts +38 -0
  48. package/src/document-editor/comment-drafts.ts +361 -0
  49. package/src/document-editor/comments.ts +410 -0
  50. package/src/document-editor/file-input.ts +71 -0
  51. package/src/document-editor/focus.ts +54 -0
  52. package/src/document-editor/inline.ts +104 -0
  53. package/src/document-editor/math.tsx +63 -0
  54. package/src/document-editor/messages.ts +14 -0
  55. package/src/document-editor/narration-schema.tsx +85 -0
  56. package/src/document-editor/narration.ts +37 -0
  57. package/src/document-editor/popover.tsx +107 -0
  58. package/src/document-editor/projection.ts +423 -0
  59. package/src/document-editor/rich-text.ts +152 -0
  60. package/src/document-editor/schema.tsx +117 -0
  61. package/src/document-editor/selection.ts +152 -0
  62. package/src/document-editor/style.css +9 -0
  63. package/src/document-editor/styles.d.ts +1 -0
  64. package/src/document-editor/table-identities.ts +67 -0
  65. package/src/document-preview.ts +112 -0
  66. package/src/document-return-point.ts +59 -0
  67. package/src/document-session.ts +678 -0
  68. package/src/document-timing-drafts.ts +61 -0
  69. package/src/document-voices.ts +2 -0
  70. package/src/history.ts +167 -0
  71. package/src/index.ts +33 -43
  72. package/src/jobs.ts +111 -0
  73. package/src/mascot-preference.ts +37 -0
  74. package/src/media-drafts.ts +83 -0
  75. package/src/media-messages.ts +53 -0
  76. package/src/media-time.ts +12 -0
  77. package/src/messages.ts +751 -203
  78. package/src/outline.ts +97 -0
  79. package/src/panels/ChangeTrail.tsx +79 -0
  80. package/src/panels/DocumentNarrationPanel.tsx +27 -0
  81. package/src/panels/DocumentView.tsx +456 -44
  82. package/src/panels/DocumentVoiceDialog.tsx +179 -0
  83. package/src/panels/DocumentVoiceField.tsx +35 -0
  84. package/src/panels/ExportPanel.tsx +133 -0
  85. package/src/panels/HistoryPanel.tsx +88 -0
  86. package/src/panels/HomePanel.tsx +184 -0
  87. package/src/panels/PageDeleteDialog.tsx +33 -0
  88. package/src/panels/PageRenameDialog.tsx +27 -0
  89. package/src/panels/PreviewPanel.tsx +79 -0
  90. package/src/panels/ProductionCaptionTiming.tsx +122 -0
  91. package/src/panels/ProductionMediaClips.tsx +156 -0
  92. package/src/panels/ProductionPanel.tsx +272 -0
  93. package/src/panels/ProductionRecording.tsx +107 -0
  94. package/src/panels/ProductionRecordingRange.tsx +118 -0
  95. package/src/panels/ProductionTimeline.tsx +62 -0
  96. package/src/panels/ProductionTranscription.tsx +140 -0
  97. package/src/panels/SourceDocumentPanel.tsx +215 -0
  98. package/src/panels/SpeechSettingsPanel.tsx +64 -0
  99. package/src/panels/TranscriptionAdoption.tsx +147 -0
  100. package/src/panels/VoiceCloneDialog.tsx +152 -0
  101. package/src/panels/VoicePreviewDialog.tsx +74 -0
  102. package/src/panels/VoiceScopeField.tsx +30 -0
  103. package/src/panels/VoiceoverDialog.tsx +216 -0
  104. package/src/places.ts +74 -6
  105. package/src/preview-playback.ts +125 -0
  106. package/src/preview-pool.ts +320 -0
  107. package/src/preview.ts +57 -6
  108. package/src/production-messages.ts +151 -0
  109. package/src/production-playback.ts +109 -0
  110. package/src/production-voice-playback.ts +114 -0
  111. package/src/recording-adoption.ts +33 -0
  112. package/src/schema-form/PmSchemaForm.tsx +187 -0
  113. package/src/schema-form/context.ts +26 -0
  114. package/src/schema-form/fields.tsx +59 -0
  115. package/src/schema-form/templates.tsx +50 -0
  116. package/src/schema-form/validator.ts +36 -0
  117. package/src/schema-form/widgets.tsx +60 -0
  118. package/src/shortcuts.ts +8 -0
  119. package/src/sortable-list.tsx +201 -0
  120. package/src/speech-settings-messages.ts +40 -0
  121. package/src/step-production.css +5 -0
  122. package/src/step-production.ts +51 -0
  123. package/src/styles.css +757 -361
  124. package/src/telemetry.ts +152 -0
  125. package/src/transcription-messages.ts +26 -0
  126. package/src/transcription-session.ts +159 -0
  127. package/src/use-recording-adoption.ts +84 -0
  128. package/src/voice-clone-messages.ts +92 -0
  129. package/src/voice-drafts.ts +89 -0
  130. package/src/voice-messages.ts +146 -0
  131. package/src/voice-snapshot.ts +55 -0
  132. package/src/voiceover-jobs.ts +87 -0
  133. package/src/workbench.ts +2328 -0
  134. package/src/workspace-client.ts +480 -0
  135. package/src/api.ts +0 -126
  136. package/src/editor.ts +0 -223
  137. package/src/merge.ts +0 -30
  138. package/src/panels/Changes.tsx +0 -128
  139. package/src/panels/Files.tsx +0 -73
  140. package/src/panels/Home.tsx +0 -224
  141. package/src/panels/Preview.tsx +0 -68
  142. package/src/panels/Problems.tsx +0 -42
  143. package/src/panels/Source.tsx +0 -118
  144. package/src/panels/Status.tsx +0 -26
  145. package/src/react.tsx +0 -59
  146. package/src/service.ts +0 -82
  147. package/src/store.ts +0 -599
package/src/styles.css CHANGED
@@ -1,3 +1,12 @@
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
+
1
10
  .pmw-muted {
2
11
  color: var(--pm-color-muted);
3
12
  font-size: var(--pm-text-sm);
@@ -7,17 +16,29 @@
7
16
  flex: 1;
8
17
  }
9
18
 
19
+ /* The documents, as an editor's start page lists them. */
20
+
10
21
  .pmw-home {
11
22
  box-sizing: border-box;
12
23
  display: flex;
13
24
  flex-direction: column;
14
25
  gap: var(--pm-space-4);
15
26
  min-height: 100%;
16
- padding: var(--pm-space-6) var(--pm-space-8);
17
- background: var(--pm-color-bg);
27
+ padding: var(--pm-space-8) clamp(var(--pm-space-4), 5vw, var(--pm-space-10));
28
+ background: var(--pm-color-chrome);
18
29
  overflow: auto;
19
30
  }
20
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
+
21
42
  .pmw-home__bar {
22
43
  display: flex;
23
44
  flex-wrap: wrap;
@@ -26,42 +47,70 @@
26
47
  }
27
48
 
28
49
  .pmw-home__title {
50
+ min-width: 0;
29
51
  margin: 0 auto 0 0;
30
- font-family: var(--pm-font-serif);
52
+ overflow-wrap: anywhere;
31
53
  font-size: var(--pm-text-title);
32
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);
33
65
  }
34
66
 
35
67
  .pmw-home__heading {
36
68
  margin: 0;
37
69
  color: var(--pm-color-muted);
38
- font-size: var(--pm-text-sm);
70
+ font-size: var(--pm-text-xs);
39
71
  font-weight: 600;
40
72
  letter-spacing: var(--pm-tracking-label);
73
+ text-transform: uppercase;
74
+ }
75
+
76
+ .pmw-home__search {
77
+ width: min(18rem, 100%);
41
78
  }
42
79
 
43
80
  .pmw-home__cards {
44
- display: grid;
45
- grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
46
- gap: var(--pm-space-3);
47
- margin: 0;
81
+ margin-block: 0;
48
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);
49
87
  list-style: none;
50
88
  }
51
89
 
52
- .pmw-home__card > .pm-ui-card {
90
+ .pmw-home__card {
53
91
  display: flex;
54
- flex-direction: column;
92
+ align-items: center;
55
93
  gap: var(--pm-space-2);
56
- height: 100%;
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);
57
103
  }
58
104
 
59
105
  .pmw-home__open {
60
106
  display: flex;
61
- flex-direction: column;
62
- gap: var(--pm-space-1);
107
+ flex: 1;
108
+ align-items: center;
109
+ gap: var(--pm-space-3);
110
+ min-width: 0;
111
+ min-height: var(--pm-size-row);
63
112
  margin: 0;
64
- padding: 0;
113
+ padding: var(--pm-space-2) var(--pm-space-4);
65
114
  border: 0;
66
115
  background: none;
67
116
  color: inherit;
@@ -70,95 +119,27 @@
70
119
  cursor: pointer;
71
120
  }
72
121
 
73
- .pmw-home__doc-title {
74
- font-family: var(--pm-font-serif);
75
- font-size: var(--pm-text-lg);
76
- font-weight: 600;
77
- }
78
-
79
- .pmw-home__doc-dir {
80
- color: var(--pm-color-muted);
81
- font-family: var(--pm-font-mono);
82
- font-size: var(--pm-text-xs);
83
- }
84
-
85
- .pmw-home__meta {
86
- display: flex;
87
- align-items: center;
88
- justify-content: space-between;
89
- gap: var(--pm-space-2);
90
- margin-top: auto;
91
- }
92
-
93
- .pmw-home__meta > .pm-ui-anchor {
94
- margin-left: auto;
95
- }
96
-
97
- .pmw-home__mcp {
98
- display: flex;
99
- flex-direction: column;
100
- gap: var(--pm-space-2);
101
- max-width: 36rem;
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));
102
125
  }
103
126
 
104
- .pmw-home__address {
105
- display: flex;
106
- flex-wrap: wrap;
107
- align-items: center;
108
- gap: var(--pm-space-2);
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);
109
136
  }
110
137
 
111
- .pmw-home__address code {
138
+ .pmw-home__doc-title {
112
139
  overflow-wrap: anywhere;
113
- font-family: var(--pm-font-mono);
114
- font-size: var(--pm-text-sm);
115
- }
116
-
117
- .pmw-search {
118
- position: relative;
119
- flex: 1 1 16rem;
120
- max-width: 28rem;
121
- }
122
-
123
- .pmw-search__results {
124
- position: absolute;
125
- z-index: var(--pm-z-popover);
126
- top: calc(100% + 4px);
127
- right: 0;
128
- left: 0;
129
- display: flex;
130
- flex-direction: column;
131
- padding: var(--pm-space-2);
132
- border: 1px solid var(--pm-color-line);
133
- border-radius: var(--pm-radius-control);
134
- background: var(--pm-color-surface);
135
- box-shadow: var(--pm-shadow-float);
136
- }
137
-
138
- .pmw-search__group {
139
- margin: var(--pm-space-1) var(--pm-space-2);
140
- color: var(--pm-color-muted);
141
- font-size: var(--pm-text-xs);
142
- font-weight: 600;
143
- }
144
-
145
- .pmw-search__item {
146
- display: flex;
147
- align-items: center;
148
- gap: var(--pm-space-2);
149
- padding: var(--pm-space-2);
150
- border: 0;
151
- border-radius: var(--pm-radius-small);
152
- background: none;
153
- color: var(--pm-color-ink);
154
- font: inherit;
155
- text-align: start;
156
- cursor: pointer;
157
- }
158
-
159
- .pmw-search__item:hover,
160
- .pmw-search__item:focus-visible {
161
- background: var(--pm-color-selected);
140
+ font-size: var(--pm-text-md);
141
+ font-weight: 500;
142
+ line-height: var(--pm-leading-tight);
162
143
  }
163
144
 
164
145
  .pmw-operation {
@@ -178,266 +159,271 @@
178
159
  gap: var(--pm-space-2);
179
160
  }
180
161
 
181
- .pmw-files {
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 {
182
165
  display: flex;
183
166
  flex-direction: column;
184
- gap: var(--pm-space-2);
185
- padding: var(--pm-space-3);
186
- font-size: var(--pm-text-md);
167
+ height: 100%;
168
+ min-width: 0;
169
+ min-height: 0;
170
+ background: var(--pm-color-chrome);
187
171
  }
188
172
 
189
- .pmw-files__head {
173
+ .pmw-toolbar {
190
174
  display: flex;
175
+ flex: none;
191
176
  align-items: center;
192
- gap: var(--pm-space-2);
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;
193
184
  }
194
185
 
195
- .pmw-files__title {
196
- margin: 0;
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);
197
190
  overflow: hidden;
198
- font-family: var(--pm-font-serif);
199
- font-size: var(--pm-text-lg);
191
+ font-size: var(--pm-text-md);
200
192
  font-weight: 600;
201
193
  text-overflow: ellipsis;
202
194
  white-space: nowrap;
203
195
  }
204
196
 
205
- .pmw-tree,
206
- .pmw-tree ul {
207
- margin: 0;
208
- padding: 0;
209
- list-style: none;
210
- }
211
-
212
- .pmw-tree ul {
213
- padding-left: var(--pm-space-2);
214
- }
215
-
216
- .pmw-tree__dir {
217
- display: flex;
218
- align-items: center;
219
- gap: var(--pm-space-2);
220
- padding: var(--pm-space-1) var(--pm-space-2);
221
- color: var(--pm-color-muted);
222
- font-size: var(--pm-text-sm);
223
- }
197
+ .pmw-toolbar__document { display: contents; }
224
198
 
225
- .pmw-tree__file {
226
- display: flex;
199
+ .pmw-toolbar__group {
200
+ display: inline-flex;
201
+ flex: none;
227
202
  align-items: center;
228
- gap: var(--pm-space-2);
229
- width: 100%;
230
- padding: var(--pm-space-1) var(--pm-space-2);
231
- border: 0;
232
- border-radius: var(--pm-radius-small);
233
- background: none;
234
- color: var(--pm-color-ink);
235
- font: inherit;
236
- text-align: start;
237
- cursor: pointer;
203
+ gap: var(--pm-space-px);
238
204
  }
239
205
 
240
- .pmw-tree__file:hover {
241
- background: var(--pm-color-sunk);
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);
242
212
  }
243
213
 
244
- .pmw-tree__file[data-active] {
245
- background: var(--pm-color-selected);
246
- box-shadow: inset 2px 0 0 var(--pm-color-accent);
247
- }
214
+ .pmw-toolbar__status-short { display: none; }
248
215
 
249
- .pmw-tree__file:disabled {
216
+ .pmw-toolbar__status {
217
+ margin: 0 var(--pm-space-2) 0 var(--pm-space-1);
250
218
  color: var(--pm-color-muted);
251
- cursor: default;
219
+ font-size: var(--pm-text-xs);
220
+ white-space: nowrap;
252
221
  }
253
222
 
254
- .pmw-doc {
255
- flex: 1;
256
- min-height: 0;
223
+ .pmw-notices:empty {
224
+ display: none;
257
225
  }
258
226
 
259
- .pmw-document { display: flex; flex-direction: column; height: 100%; min-width: 0; min-height: 0; }
260
- .pmw-document__bar { display: flex; flex-wrap: wrap; padding: var(--pm-space-2); border-bottom: 1px solid var(--pm-color-line); }
261
- .pmw-focus { display: flex; align-items: center; gap: var(--pm-space-2); padding: var(--pm-space-1) var(--pm-space-2); border-bottom: 1px solid var(--pm-color-line); background: var(--pm-color-accent-soft); }
262
- .pmw-focus__label { flex: none; font-size: var(--pm-text-xs); }
263
- .pmw-focus__quote { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--pm-text-sm); }
264
-
265
- .pmw-doc__source {
266
- display: grid;
267
- grid-template-rows: minmax(0, 1fr) auto;
268
- min-height: 0;
269
- border-right: 1px solid var(--pm-color-line);
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;
270
233
  }
271
234
 
272
- .pmw-doc__source[hidden],
273
- .pmw-doc__preview[hidden] {
274
- display: none;
235
+ .pmw-notices > .pm-ui-notice {
236
+ display: flex;
237
+ flex-wrap: wrap;
238
+ align-items: center;
239
+ gap: var(--pm-space-2);
275
240
  }
276
241
 
277
- .pmw-doc__preview {
278
- min-width: 0;
279
- min-height: 0;
242
+ .pmw-notice__actions {
243
+ display: inline-flex;
244
+ gap: var(--pm-space-2);
245
+ margin-left: auto;
280
246
  }
281
247
 
282
- .pmw-source {
248
+ .pmw-problems {
283
249
  display: flex;
250
+ flex: 1;
284
251
  flex-direction: column;
285
- min-height: 0;
286
- background: var(--pm-color-code);
252
+ gap: var(--pm-space-1);
253
+ min-width: 0;
287
254
  }
288
255
 
289
- .pmw-source__tabs {
256
+ .pmw-problems__summary {
290
257
  display: flex;
291
258
  flex-wrap: wrap;
292
259
  align-items: center;
293
- gap: var(--pm-space-1);
294
- padding: var(--pm-space-1) var(--pm-space-2);
295
- border-bottom: 1px solid var(--pm-color-line);
296
- background: var(--pm-color-bg);
260
+ gap: var(--pm-space-2);
297
261
  }
298
262
 
299
- .pmw-source__tab {
300
- display: inline-flex;
301
- align-items: center;
302
- border-radius: var(--pm-radius-small);
263
+ .pmw-problems__failure {
264
+ margin: 0;
265
+ color: var(--pm-color-danger);
303
266
  }
304
267
 
305
- .pmw-source__tab > button[role='tab'] {
306
- display: inline-flex;
307
- align-items: center;
308
- gap: var(--pm-space-1);
309
- padding: var(--pm-space-1) var(--pm-space-2);
310
- border: 0;
311
- background: none;
268
+ .pmw-problems__details summary {
312
269
  color: var(--pm-color-muted);
313
- font-family: var(--pm-font-mono);
314
- font-size: var(--pm-text-sm);
270
+ font-size: var(--pm-text-xs);
315
271
  cursor: pointer;
316
272
  }
317
273
 
318
- .pmw-source__tab[data-active] {
319
- background: var(--pm-color-surface);
320
- box-shadow: var(--pm-shadow);
321
- }
322
-
323
- .pmw-source__tab[data-active] > button[role='tab'] {
324
- color: var(--pm-color-ink);
325
- }
326
-
327
- .pmw-source__dot {
328
- width: 0.5rem;
329
- height: 0.5rem;
330
- border-radius: 50%;
331
- background: var(--pm-color-warn);
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;
332
280
  }
333
281
 
334
- .pmw-source__editor {
282
+ .pmw-document__body {
283
+ display: flex;
335
284
  flex: 1;
285
+ min-width: 0;
336
286
  min-height: 0;
337
- overflow: hidden;
338
287
  }
339
288
 
340
- .pmw-source__editor[hidden] {
341
- display: none;
342
- }
343
-
344
- .pmw-source__empty {
345
- margin: var(--pm-space-6);
289
+ .pmw-document__body > .pmw-preview {
290
+ flex: 1;
291
+ min-width: 0;
346
292
  }
347
293
 
348
- .pmw-source > .pm-ui-notice {
294
+ .pmw-document__aside {
295
+ box-sizing: border-box;
349
296
  display: flex;
350
- flex-wrap: wrap;
351
- align-items: center;
352
- gap: var(--pm-space-2);
353
- margin: var(--pm-space-2);
354
- }
355
-
356
- .pmw-notice__actions {
357
- display: inline-flex;
358
- gap: var(--pm-space-2);
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);
359
303
  }
360
304
 
361
- .pmw-problems {
362
- max-height: 12rem;
363
- overflow: auto;
364
- border-top: 1px solid var(--pm-color-line);
365
- background: var(--pm-color-bg);
366
- }
305
+ /* The navigation pane: the document's headings, or its slides. */
367
306
 
368
- .pmw-problems__head {
307
+ .pmw-navigation {
369
308
  display: flex;
370
- align-items: center;
371
- gap: var(--pm-space-2);
372
- margin: 0;
373
- padding: var(--pm-space-2) var(--pm-space-3);
374
- font-size: var(--pm-text-sm);
375
- font-weight: 600;
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);
376
315
  }
377
316
 
378
- .pmw-problems__none {
379
- margin: 0 var(--pm-space-3) var(--pm-space-2);
317
+ .pmw-navigation__empty {
318
+ margin: var(--pm-space-3);
380
319
  }
381
320
 
382
- .pmw-problems__list {
321
+ .pmw-navigation__list {
322
+ flex: 1;
383
323
  margin: 0;
384
- padding: 0 0 var(--pm-space-2);
324
+ padding: var(--pm-space-2) var(--pm-space-2) var(--pm-space-4);
325
+ overflow: auto;
385
326
  list-style: none;
386
327
  }
387
328
 
388
- .pmw-problem {
389
- display: grid;
390
- grid-template-columns: auto auto auto minmax(0, 1fr);
391
- align-items: center;
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;
392
337
  gap: var(--pm-space-2);
393
338
  width: 100%;
394
- padding: var(--pm-space-1) var(--pm-space-3);
339
+ margin: 0;
340
+ padding: var(--pm-space-1) var(--pm-space-2);
395
341
  border: 0;
342
+ border-radius: var(--pm-radius-tool);
396
343
  background: none;
397
344
  color: var(--pm-color-ink);
398
345
  font: inherit;
399
346
  font-size: var(--pm-text-sm);
347
+ line-height: 1.4;
400
348
  text-align: start;
401
- }
402
-
403
- button.pmw-problem {
404
349
  cursor: pointer;
405
350
  }
406
351
 
407
- button.pmw-problem:hover {
408
- background: var(--pm-color-sunk);
352
+ .pmw-navigation__item:hover {
353
+ background: var(--pm-color-hover);
409
354
  }
410
355
 
411
- .pmw-problem[data-severity='error'] > .pm-ui-icon {
412
- color: var(--pm-color-danger);
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;
413
361
  }
414
362
 
415
- .pmw-problem[data-severity='warning'] > .pm-ui-icon {
416
- color: var(--pm-color-warn);
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));
417
366
  }
418
367
 
419
- .pmw-problem__where {
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);
420
376
  color: var(--pm-color-muted);
421
- font-family: var(--pm-font-mono);
422
- font-size: var(--pm-text-xs);
377
+ font-variant-numeric: tabular-nums;
378
+ text-align: end;
423
379
  }
424
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
+
425
421
  .pmw-preview {
426
422
  display: flex;
427
423
  flex-direction: column;
428
424
  height: 100%;
429
425
  min-height: 0;
430
- background: var(--pm-color-surface);
431
- }
432
-
433
- .pmw-preview__bar {
434
- display: flex;
435
- flex-wrap: wrap;
436
- align-items: center;
437
- gap: var(--pm-space-2);
438
- padding: var(--pm-space-1) var(--pm-space-2);
439
- border-bottom: 1px solid var(--pm-color-line);
440
- background: var(--pm-color-bg);
426
+ background: var(--pm-color-canvas);
441
427
  }
442
428
 
443
429
  .pmw-preview > .pm-ui-notice,
@@ -445,185 +431,595 @@ button.pmw-problem:hover {
445
431
  margin: var(--pm-space-2);
446
432
  }
447
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
448
  .pmw-preview__frame {
449
449
  flex: 1;
450
450
  width: 100%;
451
451
  min-height: 0;
452
452
  border: 0;
453
- background: var(--pm-color-surface);
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);
454
469
  }
455
470
 
456
471
  .pmw-preview__frame[hidden] {
457
472
  display: none;
458
473
  }
459
474
 
460
- .pmw-status__item {
461
- display: inline-flex;
462
- align-items: center;
463
- gap: var(--pm-space-1);
464
- white-space: nowrap;
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);
465
486
  }
466
487
 
467
- /* Radix owns positioning, layering and keyboard/focus behavior; these are visual tokens only. */
468
- .pmw-overlay { position: relative; inset: auto; transform: none; }
469
- .pmw-dialog-overlay { position: fixed; inset: 0; z-index: calc(var(--pm-z-dialog) - 1); background: rgb(28 27 25 / 32%); }
470
- .pmw-overlay [data-disabled] { color: var(--pm-color-muted); cursor: default; }
471
- .pm-ui-tab[data-state='active'], .pmw-search__item[data-selected='true'] { background: var(--pm-color-selected); }
472
- .pmw-search [cmdk-group-heading] { margin: var(--pm-space-1) var(--pm-space-2); color: var(--pm-color-muted); font-size: var(--pm-text-xs); }
473
- .pmw-source__body { display: flex; flex: 1; flex-direction: column; min-height: 0; }
474
- .pmw-separator { width: 6px; background: var(--pm-color-line); }
475
- .pmw-separator:hover, .pmw-separator:focus-visible { background: var(--pm-color-accent); }
476
- .pmw-doc > [hidden] { display: none !important; }
477
- .pmw-tree [role='treeitem']:focus-visible { outline: 2px solid var(--pm-color-accent); outline-offset: -2px; }
478
-
479
- .pmw-changes {
480
- display: grid;
481
- align-content: start;
482
- gap: var(--pm-space-3);
483
- height: 100%;
484
- overflow: auto;
488
+ .pmw-pointer[data-step='comment'] {
489
+ width: min(24rem, calc(100% - var(--pm-space-4)));
485
490
  padding: var(--pm-space-3);
486
- box-sizing: border-box;
487
491
  }
488
492
 
489
- .pmw-changes__group > p {
490
- margin: 0 0 var(--pm-space-2);
493
+ .pmw-pointer[data-step='tools'] {
494
+ width: max-content;
495
+ padding: 0;
496
+ border-radius: var(--pm-radius-control);
491
497
  }
492
498
 
493
- .pmw-changes__head {
499
+ .pmw-pointer__tools {
494
500
  display: flex;
495
501
  align-items: center;
502
+ }
503
+
504
+ .pmw-pointer__form {
505
+ display: flex;
506
+ flex-direction: column;
496
507
  gap: var(--pm-space-2);
497
- margin: 0 0 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);
498
517
  font-size: var(--pm-text-sm);
499
- font-weight: 600;
518
+ line-height: 1.5;
500
519
  }
501
520
 
502
- .pmw-changes__list {
503
- display: grid;
504
- gap: var(--pm-space-1);
505
- margin: 0 0 var(--pm-space-2);
506
- padding: 0;
507
- list-style: none;
521
+ .pmw-pointer__text {
522
+ width: 100%;
523
+ font: inherit;
508
524
  }
509
525
 
510
- .pmw-changes__file {
526
+ .pmw-pointer__actions {
511
527
  display: flex;
512
- align-items: flex-start;
528
+ align-items: center;
529
+ justify-content: flex-end;
513
530
  gap: var(--pm-space-2);
514
- font-size: var(--pm-text-sm);
515
531
  }
516
532
 
517
- .pmw-changes__file > details {
533
+ /* The side panes: comments and version history. */
534
+
535
+ .pmw-pane {
536
+ display: flex;
518
537
  flex: 1;
519
- min-width: 0;
538
+ flex-direction: column;
539
+ gap: var(--pm-space-2);
540
+ min-height: 0;
541
+ padding-bottom: var(--pm-space-3);
542
+ overflow: auto;
520
543
  }
521
544
 
522
- .pmw-changes__file summary {
523
- display: flex;
524
- flex-wrap: wrap;
525
- align-items: baseline;
526
- gap: 0 var(--pm-space-2);
527
- list-style: none;
528
- cursor: pointer;
545
+ .pmw-pane > .pm-ui-notice,
546
+ .pmw-pane > .pm-ui-empty {
547
+ margin: 0 var(--pm-space-3);
529
548
  }
530
549
 
531
- .pmw-changes__file summary::-webkit-details-marker {
532
- display: none;
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);
533
561
  }
534
562
 
535
- .pmw-changes__file summary::before {
536
- content: '▸';
563
+ .pmw-pane__title {
564
+ flex: 1;
565
+ margin: 0;
537
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;
538
571
  }
539
572
 
540
- .pmw-changes__file details[open] > summary::before {
541
- content: '▾';
573
+ .pmw-pane__footer {
574
+ margin: 0 var(--pm-space-3);
542
575
  }
543
576
 
544
- .pmw-changes__path {
545
- overflow-wrap: anywhere;
546
- font-family: var(--pm-font-mono);
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;
547
585
  }
548
586
 
549
- .pmw-changes__path[data-kind='added'] {
550
- color: var(--pm-color-ok);
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);
551
596
  }
552
597
 
553
- .pmw-changes__path[data-kind='deleted'] {
554
- color: var(--pm-color-danger);
555
- text-decoration: line-through;
598
+ .pmw-comment[data-status='resolved'] {
599
+ border-left-color: var(--pm-color-line-strong);
600
+ opacity: 0.75;
556
601
  }
557
602
 
558
- .pmw-changes__counts {
603
+ .pmw-comment__place {
559
604
  display: inline-flex;
560
- gap: var(--pm-space-1);
561
- font-family: var(--pm-font-mono);
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;
562
613
  font-size: var(--pm-text-xs);
614
+ text-align: start;
615
+ cursor: pointer;
563
616
  }
564
617
 
565
- .pmw-changes__counts [data-sign='added'] {
566
- color: var(--pm-color-ok);
567
- }
568
-
569
- .pmw-changes__counts [data-sign='removed'] {
570
- color: var(--pm-color-danger);
618
+ .pmw-comment__place:hover {
619
+ color: var(--pm-color-accent);
571
620
  }
572
621
 
573
- .pmw-changes__diff {
574
- max-height: 20rem;
575
- overflow: auto;
576
- margin: var(--pm-space-1) 0 0;
577
- padding: var(--pm-space-2);
578
- border-radius: var(--pm-radius-small);
579
- background: var(--pm-color-code);
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);
580
632
  font-size: var(--pm-text-xs);
633
+ font-weight: 600;
581
634
  }
582
635
 
583
- .pmw-changes__steps {
584
- margin-bottom: var(--pm-space-2);
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);
585
641
  font-size: var(--pm-text-sm);
586
642
  }
587
643
 
588
- .pmw-changes__steps li {
644
+ .pmw-comment__text {
645
+ margin: 0;
646
+ white-space: pre-wrap;
647
+ overflow-wrap: anywhere;
648
+ }
649
+
650
+ .pmw-comment__meta {
589
651
  display: flex;
652
+ flex-wrap: wrap;
590
653
  align-items: center;
591
- justify-content: space-between;
592
654
  gap: var(--pm-space-2);
655
+ color: var(--pm-color-muted);
656
+ font-size: var(--pm-text-xs);
593
657
  }
594
658
 
595
- .pmw-changes__form {
659
+ .pmw-comment__actions {
596
660
  display: flex;
597
661
  flex-wrap: wrap;
598
- gap: var(--pm-space-2);
662
+ align-items: center;
663
+ gap: var(--pm-space-1);
599
664
  }
600
665
 
601
- .pmw-changes__form .pm-ui-input {
602
- flex: 1 1 100%;
666
+ .pmw-comment__actions > .pm-ui-icon-button {
667
+ margin-left: auto;
603
668
  }
604
669
 
605
- .pmw-changes__revision {
670
+ .pmw-version {
606
671
  display: grid;
607
- grid-template-columns: minmax(0, 1fr) auto;
608
- gap: 0 var(--pm-space-2);
609
- align-items: center;
610
- font-size: var(--pm-text-sm);
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);
611
686
  }
612
687
 
613
- .pmw-changes__subject {
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;
614
695
  overflow-wrap: anywhere;
696
+ font-size: var(--pm-text-sm);
697
+ font-weight: 600;
615
698
  }
616
699
 
617
- .pmw-changes__meta {
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 {
618
706
  display: flex;
619
707
  flex-wrap: wrap;
620
708
  align-items: center;
621
709
  gap: var(--pm-space-1);
622
- grid-row: 2;
710
+ margin: 0;
711
+ color: var(--pm-color-muted);
623
712
  font-size: var(--pm-text-xs);
624
713
  }
625
714
 
626
- .pmw-changes__revision > :last-child {
627
- grid-row: 1 / 3;
715
+ .pmw-version__action {
628
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);
629
1025
  }