rshow 0.0.0-stage → 0.0.2

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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -2
  3. package/dist/main.js +8500 -0
  4. package/package.json +48 -4
  5. package/skills/rshow/SKILL.md +144 -0
  6. package/skills/rshow/reference/cli.md +263 -0
  7. package/skills/rshow/reference/dashboard.md +122 -0
  8. package/skills/rshow/reference/mockups.md +113 -0
  9. package/skills/rshow/reference/page-contract.md +83 -0
  10. package/skills/rshow/reference/pages.md +174 -0
  11. package/skills/rshow/reference/poster.md +137 -0
  12. package/skills/rshow/reference/project-page.md +132 -0
  13. package/skills/rshow/reference/reports.md +158 -0
  14. package/skills/rshow/reference/sketch.md +78 -0
  15. package/skills/rshow/reference/terminal.md +148 -0
  16. package/skills/rshow/reference/themes.md +139 -0
  17. package/skills/rshow-implement/SKILL.md +112 -0
  18. package/skills/rshow-implement/reference/compare.md +156 -0
  19. package/skills/rshow-implement/reference/handoff.md +125 -0
  20. package/skills/rshow-implement/reference/map.md +151 -0
  21. package/skills/rshow-slides/SKILL.md +136 -0
  22. package/skills/rshow-slides/reference/layouts.md +251 -0
  23. package/themes/default/dashboard.css +521 -0
  24. package/themes/default/dashboard.js +1390 -0
  25. package/themes/default/deck.css +586 -0
  26. package/themes/default/deck.js +741 -0
  27. package/themes/default/example/capture.ans +1 -0
  28. package/themes/default/example/dashboard.html +106 -0
  29. package/themes/default/example/demo.cast +14 -0
  30. package/themes/default/example/drawing.excalidraw +377 -0
  31. package/themes/default/example/index.html +311 -0
  32. package/themes/default/example/mockup-desktop.html +331 -0
  33. package/themes/default/example/mockup-platforms.html +742 -0
  34. package/themes/default/example/mockup.html +416 -0
  35. package/themes/default/example/page.html +153 -0
  36. package/themes/default/example/poster-figure.svg +58 -0
  37. package/themes/default/example/poster.html +181 -0
  38. package/themes/default/example/project.html +229 -0
  39. package/themes/default/example/report.html +404 -0
  40. package/themes/default/example/results.csv +61 -0
  41. package/themes/default/example/sketch.html +178 -0
  42. package/themes/default/example/teaser.svg +66 -0
  43. package/themes/default/example/terminal.html +231 -0
  44. package/themes/default/example/tui.html +223 -0
  45. package/themes/default/fonts/IBMPlexMono-Regular-Latin1.woff2 +0 -0
  46. package/themes/default/fonts/IBMPlexSans-Light-Latin1.woff2 +0 -0
  47. package/themes/default/fonts/IBMPlexSans-Regular-Latin1.woff2 +0 -0
  48. package/themes/default/fonts/IBMPlexSans-SemiBold-Latin1.woff2 +0 -0
  49. package/themes/default/fonts/OFL.txt +93 -0
  50. package/themes/default/fonts.css +63 -0
  51. package/themes/default/index.html +573 -0
  52. package/themes/default/mockup.css +1078 -0
  53. package/themes/default/mockup.js +1433 -0
  54. package/themes/default/mode.js +242 -0
  55. package/themes/default/page.css +320 -0
  56. package/themes/default/poster.css +480 -0
  57. package/themes/default/poster.js +223 -0
  58. package/themes/default/project.css +482 -0
  59. package/themes/default/project.js +116 -0
  60. package/themes/default/report.css +776 -0
  61. package/themes/default/report.js +427 -0
  62. package/themes/default/sketch.css +166 -0
  63. package/themes/default/sketch.js +681 -0
  64. package/themes/default/skins/adwaita.css +669 -0
  65. package/themes/default/skins/custom.css +596 -0
  66. package/themes/default/skins/egui.css +639 -0
  67. package/themes/default/skins/fluent.css +1093 -0
  68. package/themes/default/skins/fluent.js +458 -0
  69. package/themes/default/skins/mac.css +647 -0
  70. package/themes/default/skins/material.css +692 -0
  71. package/themes/default/skins/sketch.css +436 -0
  72. package/themes/default/skins/sketch.js +494 -0
  73. package/themes/default/skins/wire.css +561 -0
  74. package/themes/default/terminal.css +292 -0
  75. package/themes/default/terminal.js +433 -0
  76. package/themes/default/theme.json +149 -0
  77. package/themes/default/tokens.css +255 -0
  78. package/themes/default/tui.css +703 -0
  79. package/themes/default/tui.js +472 -0
  80. package/worker/index.js +6918 -0
  81. package/worker/migrations/0001_init.sql +52 -0
  82. package/worker/migrations/0002_blobs.sql +5 -0
  83. package/worker/migrations/0003_projects.sql +31 -0
  84. package/worker/migrations/0004_page_data_blob.sql +19 -0
@@ -0,0 +1,596 @@
1
+ /*
2
+ * rshow theme "default": the custom skin, layer 3.
3
+ *
4
+ * The wire skin draws a structure and the sketch skin draws it by hand; this
5
+ * skin is the one that carries a product. It is the same wf-* kit, and every
6
+ * rule reads a token instead of a literal, so a mockup of an application looks
7
+ * like that application: Electron, Tauri, an egui tool, a desktop client of
8
+ * somebody's own design.
9
+ *
10
+ * The knobs, all set on the mockup or on any element inside it, because custom
11
+ * properties inherit:
12
+ *
13
+ * --mk-bg the ground of a window
14
+ * --mk-surface a raised panel or a bar, one step off the ground
15
+ * --mk-fg text and icons
16
+ * --mk-muted a secondary line, a label, a placeholder
17
+ * --mk-line a border, a rule
18
+ * --mk-fill an inert block: a bar, a swatch, a chart column
19
+ * --mk-accent the one interactive colour
20
+ * --mk-on-accent the text that sits on --mk-accent
21
+ * --mk-radius the corner of every widget
22
+ * --mk-font the product's type
23
+ * --mk-size the body size, and the unit every widget scales from
24
+ * --mk-gap the space between blocks
25
+ * --mk-pad the inset of the screen itself
26
+ *
27
+ * Two presets ship as classes, so an example can show one product twice:
28
+ *
29
+ * .preset-compact-dark a dense tool: dark gray, 12px text, square widgets
30
+ * .preset-soft-light a consumer app: light, rounded, airy
31
+ *
32
+ * A different product is a different five line block, not a new skin. That is
33
+ * the whole point of this file.
34
+ */
35
+
36
+ .mockup[data-skin="custom"] {
37
+ --mk-bg: #ffffff;
38
+ --mk-surface: #f4f5f7;
39
+ --mk-fg: #16181d;
40
+ --mk-muted: #6b7280;
41
+ --mk-line: #d8dbe0;
42
+ --mk-fill: #eef0f3;
43
+ --mk-accent: #2f6fdd;
44
+ --mk-on-accent: #ffffff;
45
+ --mk-radius: 8px;
46
+ --mk-font: var(--font-sans, system-ui, sans-serif);
47
+ --mk-size: 15px;
48
+ --mk-gap: 14px;
49
+ --mk-pad: 24px;
50
+ }
51
+
52
+ .preset-compact-dark {
53
+ --mk-bg: #1b1b1b;
54
+ --mk-surface: #262626;
55
+ --mk-fg: #d6d6d6;
56
+ --mk-muted: #8d8d8d;
57
+ --mk-line: #3a3a3a;
58
+ --mk-fill: #2c2c2c;
59
+ --mk-accent: #4f9cf0;
60
+ --mk-on-accent: #101010;
61
+ --mk-radius: 3px;
62
+ --mk-size: 12px;
63
+ --mk-gap: 6px;
64
+ --mk-pad: 12px;
65
+ }
66
+
67
+ .preset-soft-light {
68
+ --mk-bg: #fbfbfd;
69
+ --mk-surface: #ffffff;
70
+ --mk-fg: #20222a;
71
+ --mk-muted: #6c7280;
72
+ --mk-line: #e3e5ea;
73
+ --mk-fill: #f1f3f7;
74
+ --mk-accent: #3a63f0;
75
+ --mk-on-accent: #ffffff;
76
+ --mk-radius: 14px;
77
+ --mk-size: 15px;
78
+ --mk-gap: 18px;
79
+ --mk-pad: 28px;
80
+ }
81
+
82
+ .mockup[data-skin="custom"] .mk-screen {
83
+ color: var(--mk-fg);
84
+ background: var(--mk-bg);
85
+ }
86
+
87
+ /* --------------------------------------------------------------- layout -- */
88
+
89
+ .mockup[data-skin="custom"] .wf-row {
90
+ display: flex;
91
+ align-items: center;
92
+ gap: var(--mk-gap);
93
+ }
94
+
95
+ .mockup[data-skin="custom"] .wf-col {
96
+ display: flex;
97
+ flex-direction: column;
98
+ gap: var(--mk-gap);
99
+ }
100
+
101
+ .mockup[data-skin="custom"] .wf-row.wf-shell {
102
+ align-items: stretch;
103
+ }
104
+
105
+ .mockup[data-skin="custom"] .wf-row.wf-top {
106
+ align-items: flex-start;
107
+ }
108
+
109
+ .mockup[data-skin="custom"] .wf-spacer,
110
+ .mockup[data-skin="custom"] .wf-grow {
111
+ flex: 1 1 auto;
112
+ min-width: 0;
113
+ }
114
+
115
+ /* ----------------------------------------------------------------- type -- */
116
+
117
+ .mockup[data-skin="custom"] .wf-heading {
118
+ display: block;
119
+ width: 40%;
120
+ max-width: 22em;
121
+ height: 0.9em;
122
+ background: var(--mk-fg);
123
+ border-radius: var(--mk-radius);
124
+ opacity: 0.85;
125
+ }
126
+
127
+ .mockup[data-skin="custom"] .wf-heading:not(:empty) {
128
+ width: auto;
129
+ max-width: none;
130
+ height: auto;
131
+ font-size: 1.5em;
132
+ font-weight: 600;
133
+ line-height: 1.3;
134
+ background: none;
135
+ opacity: 1;
136
+ }
137
+
138
+ .mockup[data-skin="custom"] .wf-text {
139
+ --mk-lines: 2;
140
+ display: block;
141
+ height: calc(var(--mk-lines) * 1.4em);
142
+ background-image: repeating-linear-gradient(
143
+ to bottom,
144
+ var(--mk-line) 0 0.55em,
145
+ transparent 0.55em 1.4em
146
+ );
147
+ border-radius: var(--mk-radius);
148
+ }
149
+
150
+ .mockup[data-skin="custom"] .wf-text[data-lines="1"] {
151
+ --mk-lines: 1;
152
+ }
153
+
154
+ .mockup[data-skin="custom"] .wf-text[data-lines="2"] {
155
+ --mk-lines: 2;
156
+ }
157
+
158
+ .mockup[data-skin="custom"] .wf-text[data-lines="3"] {
159
+ --mk-lines: 3;
160
+ }
161
+
162
+ .mockup[data-skin="custom"] .wf-text[data-lines="4"] {
163
+ --mk-lines: 4;
164
+ }
165
+
166
+ .mockup[data-skin="custom"] .wf-text[data-lines="5"] {
167
+ --mk-lines: 5;
168
+ }
169
+
170
+ .mockup[data-skin="custom"] .wf-text[data-lines="6"] {
171
+ --mk-lines: 6;
172
+ }
173
+
174
+ .mockup[data-skin="custom"] .wf-text[data-lines="7"] {
175
+ --mk-lines: 7;
176
+ }
177
+
178
+ .mockup[data-skin="custom"] .wf-text[data-lines="8"] {
179
+ --mk-lines: 8;
180
+ }
181
+
182
+ .mockup[data-skin="custom"] .wf-text:not(:empty) {
183
+ height: auto;
184
+ font-size: 0.95em;
185
+ line-height: 1.5;
186
+ color: var(--mk-muted);
187
+ background: none;
188
+ }
189
+
190
+ /* --------------------------------------------------------------- blocks -- */
191
+
192
+ .mockup[data-skin="custom"] .wf-box {
193
+ min-height: 2.6em;
194
+ padding: 0.85em;
195
+ background: var(--mk-surface);
196
+ border: 1px solid var(--mk-line);
197
+ border-radius: var(--mk-radius);
198
+ }
199
+
200
+ .mockup[data-skin="custom"] .wf-card {
201
+ display: flex;
202
+ flex-direction: column;
203
+ gap: var(--mk-gap);
204
+ padding: 1em;
205
+ background: var(--mk-surface);
206
+ border: 1px solid var(--mk-line);
207
+ border-radius: var(--mk-radius);
208
+ }
209
+
210
+ .mockup[data-skin="custom"] .wf-image {
211
+ min-height: 8em;
212
+ background-color: var(--mk-fill);
213
+ background-image: linear-gradient(
214
+ to top right,
215
+ transparent calc(50% - 0.5px),
216
+ var(--mk-line) calc(50% - 0.5px),
217
+ var(--mk-line) calc(50% + 0.5px),
218
+ transparent calc(50% + 0.5px)
219
+ ),
220
+ linear-gradient(
221
+ to bottom right,
222
+ transparent calc(50% - 0.5px),
223
+ var(--mk-line) calc(50% - 0.5px),
224
+ var(--mk-line) calc(50% + 0.5px),
225
+ transparent calc(50% + 0.5px)
226
+ );
227
+ border: 1px solid var(--mk-line);
228
+ border-radius: var(--mk-radius);
229
+ }
230
+
231
+ .mockup[data-skin="custom"] .wf-avatar {
232
+ flex: 0 0 auto;
233
+ width: 2.4em;
234
+ height: 2.4em;
235
+ background: var(--mk-fill);
236
+ border: 1px solid var(--mk-line);
237
+ border-radius: 50%;
238
+ }
239
+
240
+ .mockup[data-skin="custom"] .wf-avatar[data-size="sm"] {
241
+ width: 1.7em;
242
+ height: 1.7em;
243
+ }
244
+
245
+ .mockup[data-skin="custom"] .wf-avatar[data-size="lg"] {
246
+ width: 3.4em;
247
+ height: 3.4em;
248
+ }
249
+
250
+ .mockup[data-skin="custom"] .wf-icon {
251
+ display: inline-block;
252
+ flex: 0 0 auto;
253
+ width: 1em;
254
+ height: 1em;
255
+ background: var(--mk-fill);
256
+ border: 1px solid var(--mk-line);
257
+ border-radius: calc(var(--mk-radius) / 2);
258
+ }
259
+
260
+ .mockup[data-skin="custom"] .wf-icon[data-size="lg"] {
261
+ width: 1.6em;
262
+ height: 1.6em;
263
+ }
264
+
265
+ /* ------------------------------------------------------------- controls -- */
266
+
267
+ .mockup[data-skin="custom"] .wf-button {
268
+ display: inline-flex;
269
+ align-items: center;
270
+ justify-content: center;
271
+ gap: 0.4em;
272
+ height: 2.4em;
273
+ padding: 0 0.9em;
274
+ font: inherit;
275
+ font-size: 0.95em;
276
+ color: var(--mk-fg);
277
+ text-align: center;
278
+ text-decoration: none;
279
+ white-space: nowrap;
280
+ background: var(--mk-surface);
281
+ border: 1px solid var(--mk-line);
282
+ border-radius: var(--mk-radius);
283
+ }
284
+
285
+ .mockup[data-skin="custom"] .wf-button.primary {
286
+ color: var(--mk-on-accent);
287
+ background: var(--mk-accent);
288
+ border-color: var(--mk-accent);
289
+ }
290
+
291
+ .mockup[data-skin="custom"] .wf-button.ghost {
292
+ color: var(--mk-muted);
293
+ background: transparent;
294
+ }
295
+
296
+ .mockup[data-skin="custom"] .wf-input {
297
+ position: relative;
298
+ display: flex;
299
+ align-items: center;
300
+ min-height: 2.5em;
301
+ padding: 0 0.75em;
302
+ font-size: 0.95em;
303
+ color: var(--mk-muted);
304
+ background: var(--mk-bg);
305
+ border: 1px solid var(--mk-line);
306
+ border-radius: var(--mk-radius);
307
+ }
308
+
309
+ .mockup[data-skin="custom"] .wf-input[data-label]::before {
310
+ content: attr(data-label);
311
+ }
312
+
313
+ .mockup[data-skin="custom"] .wf-input[data-label]::before,
314
+ .mockup[data-skin="custom"] .wf-label {
315
+ position: absolute;
316
+ top: -0.7em;
317
+ left: 0.6em;
318
+ padding: 0 0.3em;
319
+ font-size: 0.7em;
320
+ line-height: 1.4;
321
+ color: var(--mk-muted);
322
+ background: var(--mk-bg);
323
+ }
324
+
325
+ .mockup[data-skin="custom"] .wf-input:focus-within {
326
+ border-color: var(--mk-accent);
327
+ }
328
+
329
+ .mockup[data-skin="custom"] .wf-select {
330
+ position: relative;
331
+ display: flex;
332
+ align-items: center;
333
+ min-height: 2.5em;
334
+ padding: 0 2.2em 0 0.75em;
335
+ font-size: 0.95em;
336
+ color: var(--mk-fg);
337
+ background: var(--mk-bg);
338
+ border: 1px solid var(--mk-line);
339
+ border-radius: var(--mk-radius);
340
+ }
341
+
342
+ .mockup[data-skin="custom"] .wf-select::after {
343
+ content: "";
344
+ position: absolute;
345
+ top: 50%;
346
+ right: 0.8em;
347
+ width: 0;
348
+ height: 0;
349
+ margin-top: -0.1em;
350
+ border-top: 0.32em solid var(--mk-muted);
351
+ border-right: 0.28em solid transparent;
352
+ border-left: 0.28em solid transparent;
353
+ }
354
+
355
+ .mockup[data-skin="custom"] .wf-checkbox {
356
+ position: relative;
357
+ display: inline-block;
358
+ flex: 0 0 auto;
359
+ width: 1.15em;
360
+ height: 1.15em;
361
+ background: var(--mk-bg);
362
+ border: 1px solid var(--mk-line);
363
+ border-radius: calc(var(--mk-radius) / 2);
364
+ }
365
+
366
+ .mockup[data-skin="custom"] .wf-checkbox[data-checked="true"] {
367
+ background: var(--mk-accent);
368
+ border-color: var(--mk-accent);
369
+ }
370
+
371
+ .mockup[data-skin="custom"] .wf-checkbox[data-checked="true"]::after {
372
+ content: "";
373
+ position: absolute;
374
+ top: 0.12em;
375
+ left: 0.32em;
376
+ width: 0.3em;
377
+ height: 0.58em;
378
+ border: solid var(--mk-on-accent);
379
+ border-width: 0 0.14em 0.14em 0;
380
+ transform: rotate(45deg);
381
+ }
382
+
383
+ .mockup[data-skin="custom"] .wf-toggle {
384
+ position: relative;
385
+ display: inline-block;
386
+ flex: 0 0 auto;
387
+ width: 2.4em;
388
+ height: 1.35em;
389
+ background: var(--mk-fill);
390
+ border: 1px solid var(--mk-line);
391
+ border-radius: 0.7em;
392
+ }
393
+
394
+ .mockup[data-skin="custom"] .wf-toggle::after {
395
+ content: "";
396
+ position: absolute;
397
+ top: 0.13em;
398
+ left: 0.13em;
399
+ width: 0.9em;
400
+ height: 0.9em;
401
+ background: var(--mk-bg);
402
+ border: 1px solid var(--mk-line);
403
+ border-radius: 50%;
404
+ }
405
+
406
+ .mockup[data-skin="custom"] .wf-toggle.on {
407
+ background: var(--mk-accent);
408
+ border-color: var(--mk-accent);
409
+ }
410
+
411
+ .mockup[data-skin="custom"] .wf-toggle.on::after {
412
+ left: 1.15em;
413
+ border-color: var(--mk-accent);
414
+ }
415
+
416
+ .mockup[data-skin="custom"] .wf-tabs {
417
+ display: flex;
418
+ align-items: center;
419
+ gap: 1.2em;
420
+ border-bottom: 1px solid var(--mk-line);
421
+ }
422
+
423
+ .mockup[data-skin="custom"] .wf-tabs > * {
424
+ padding: 0.65em 0;
425
+ font-size: 0.95em;
426
+ color: var(--mk-muted);
427
+ white-space: nowrap;
428
+ }
429
+
430
+ .mockup[data-skin="custom"] .wf-tabs > .is-active,
431
+ .mockup[data-skin="custom"] .wf-tabs > [aria-selected="true"] {
432
+ color: var(--mk-fg);
433
+ border-bottom: 2px solid var(--mk-accent);
434
+ }
435
+
436
+ /* ---------------------------------------------------------------- shell -- */
437
+
438
+ .mockup[data-skin="custom"] .wf-nav {
439
+ display: flex;
440
+ align-items: center;
441
+ gap: 0.9em;
442
+ min-height: 3.2em;
443
+ padding: 0 1em;
444
+ background: var(--mk-surface);
445
+ border-bottom: 1px solid var(--mk-line);
446
+ }
447
+
448
+ .mockup[data-skin="custom"] .wf-sidebar {
449
+ display: flex;
450
+ flex: 0 0 auto;
451
+ flex-direction: column;
452
+ gap: 0.4em;
453
+ width: 13em;
454
+ padding: 0.8em;
455
+ background: var(--mk-surface);
456
+ border-right: 1px solid var(--mk-line);
457
+ }
458
+
459
+ /* ----------------------------------------------------------------- data -- */
460
+
461
+ .mockup[data-skin="custom"] .wf-table {
462
+ --mk-rows: 4;
463
+ --mk-cols: 3;
464
+ height: calc(var(--mk-rows) * 2.4em);
465
+ background-image: repeating-linear-gradient(
466
+ to bottom,
467
+ transparent 0 calc(2.4em - 1px),
468
+ var(--mk-line) calc(2.4em - 1px) 2.4em
469
+ ),
470
+ repeating-linear-gradient(
471
+ to right,
472
+ transparent 0 calc(100% / var(--mk-cols) - 1px),
473
+ var(--mk-line) calc(100% / var(--mk-cols) - 1px) calc(100% / var(--mk-cols))
474
+ );
475
+ border: 1px solid var(--mk-line);
476
+ border-radius: var(--mk-radius);
477
+ }
478
+
479
+ .mockup[data-skin="custom"] .wf-table[data-rows="1"] {
480
+ --mk-rows: 1;
481
+ }
482
+
483
+ .mockup[data-skin="custom"] .wf-table[data-rows="2"] {
484
+ --mk-rows: 2;
485
+ }
486
+
487
+ .mockup[data-skin="custom"] .wf-table[data-rows="3"] {
488
+ --mk-rows: 3;
489
+ }
490
+
491
+ .mockup[data-skin="custom"] .wf-table[data-rows="4"] {
492
+ --mk-rows: 4;
493
+ }
494
+
495
+ .mockup[data-skin="custom"] .wf-table[data-rows="5"] {
496
+ --mk-rows: 5;
497
+ }
498
+
499
+ .mockup[data-skin="custom"] .wf-table[data-rows="6"] {
500
+ --mk-rows: 6;
501
+ }
502
+
503
+ .mockup[data-skin="custom"] .wf-table[data-rows="8"] {
504
+ --mk-rows: 8;
505
+ }
506
+
507
+ .mockup[data-skin="custom"] .wf-table[data-rows="10"] {
508
+ --mk-rows: 10;
509
+ }
510
+
511
+ .mockup[data-skin="custom"] .wf-table[data-cols="1"] {
512
+ --mk-cols: 1;
513
+ }
514
+
515
+ .mockup[data-skin="custom"] .wf-table[data-cols="2"] {
516
+ --mk-cols: 2;
517
+ }
518
+
519
+ .mockup[data-skin="custom"] .wf-table[data-cols="3"] {
520
+ --mk-cols: 3;
521
+ }
522
+
523
+ .mockup[data-skin="custom"] .wf-table[data-cols="4"] {
524
+ --mk-cols: 4;
525
+ }
526
+
527
+ .mockup[data-skin="custom"] .wf-table[data-cols="5"] {
528
+ --mk-cols: 5;
529
+ }
530
+
531
+ .mockup[data-skin="custom"] .wf-table[data-cols="6"] {
532
+ --mk-cols: 6;
533
+ }
534
+
535
+ .mockup[data-skin="custom"] .wf-chart {
536
+ display: flex;
537
+ align-items: flex-end;
538
+ gap: 0.4em;
539
+ height: 9em;
540
+ border-bottom: 1px solid var(--mk-line);
541
+ }
542
+
543
+ .mockup[data-skin="custom"] .wf-chart > * {
544
+ flex: 1 1 0;
545
+ min-height: 0.4em;
546
+ background: var(--mk-fill);
547
+ border-radius: calc(var(--mk-radius) / 2) calc(var(--mk-radius) / 2) 0 0;
548
+ }
549
+
550
+ .mockup[data-skin="custom"] .wf-chart > .is-accent {
551
+ background: var(--mk-accent);
552
+ }
553
+
554
+ /* -------------------------------------------------------------- overlay -- */
555
+
556
+ .mockup[data-skin="custom"] .wf-scrim {
557
+ position: absolute;
558
+ inset: 0;
559
+ z-index: 2;
560
+ background: rgba(16, 18, 22, 0.42);
561
+ }
562
+
563
+ .mockup[data-skin="custom"] .wf-modal {
564
+ position: absolute;
565
+ top: 50%;
566
+ left: 50%;
567
+ z-index: 3;
568
+ display: flex;
569
+ flex-direction: column;
570
+ gap: var(--mk-gap);
571
+ width: min(30em, 84%);
572
+ max-height: 84%;
573
+ padding: 1.3em;
574
+ overflow: auto;
575
+ background: var(--mk-surface);
576
+ border: 1px solid var(--mk-line);
577
+ border-radius: var(--mk-radius);
578
+ transform: translate(-50%, -50%);
579
+ }
580
+
581
+ .mockup[data-skin="custom"] .wf-toast {
582
+ position: absolute;
583
+ bottom: 1.5em;
584
+ left: 50%;
585
+ z-index: 4;
586
+ display: flex;
587
+ align-items: center;
588
+ gap: 0.6em;
589
+ max-width: 82%;
590
+ padding: 0.7em 1em;
591
+ font-size: 0.95em;
592
+ color: var(--mk-bg);
593
+ background: var(--mk-fg);
594
+ border-radius: var(--mk-radius);
595
+ transform: translateX(-50%);
596
+ }