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,647 @@
1
+ /*
2
+ * rshow theme "default": the mac skin, layer 3.
3
+ *
4
+ * A macOS look-alike drawn from the platform's public design principles: the
5
+ * system font stack, a 6px corner on a control and a 10px corner on a surface,
6
+ * one blue accent, a hairline separator instead of a border, a translucent
7
+ * sidebar, and a segmented control wherever the drawing wants tabs.
8
+ *
9
+ * It is a drawing of a Mac app, not a copy of one: no Apple artwork, no SF file
10
+ * and no icon set. -apple-system resolves to the system face on a Mac and falls
11
+ * through to system-ui everywhere else, so the shape survives a reader on Linux.
12
+ *
13
+ * Knobs: the custom.css set plus --mk-surface, --mk-surface-2, --mk-sidebar,
14
+ * --mk-on-accent, --mk-accent-soft, --mk-radius-lg, --mk-radius-pill,
15
+ * --mk-ctl-h, --mk-line-h, --mk-shadow-1, --mk-shadow-4, --mk-shadow-12.
16
+ */
17
+
18
+ /* --------------------------------------------------- the screen, light -- */
19
+
20
+ [data-skin="mac"] {
21
+ --mk-bg: #ffffff;
22
+
23
+ /* the window chrome the frame draws, in the same two modes */
24
+ --mk-chrome-bg: #efeff1;
25
+ --mk-chrome-bg-2: #e3e3e6;
26
+ --mk-chrome-line: #d8d8dc;
27
+ --mk-chrome-fg: #1d1d1f;
28
+ --mk-surface: #f5f5f7;
29
+ --mk-surface-2: #ececf0;
30
+ --mk-fg: #1d1d1f;
31
+ --mk-muted: #6e6e73;
32
+ --mk-line: #d8d8dc;
33
+ --mk-line-strong: #c2c2c7;
34
+ --mk-fill: #eeeef1;
35
+
36
+ /* the one accent. A single token, so a mockup of a product with its own
37
+ accent is one line, not a new skin. */
38
+ --mk-accent: #0a84ff;
39
+ --mk-accent-hover: #0071e3;
40
+ --mk-accent-soft: #e6f2ff;
41
+ --mk-on-accent: #ffffff;
42
+ --mk-focus: #0a84ff;
43
+
44
+ /* a sidebar in macOS is translucent, and the translucency is a token so a
45
+ dark mode and a light mode each pick their own value */
46
+ --mk-sidebar: rgba(246, 246, 248, 0.82);
47
+
48
+ --mk-radius: 6px;
49
+ --mk-radius-lg: 10px;
50
+ --mk-radius-pill: 100px;
51
+
52
+ --mk-font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue",
53
+ system-ui, sans-serif;
54
+ --mk-size: 13px;
55
+ --mk-line-h: 18px;
56
+ --mk-ctl-h: 28px;
57
+ --mk-gap: 12px;
58
+ --mk-pad: 20px;
59
+
60
+ --mk-shadow-1: 0 1px 1px rgba(0, 0, 0, 0.06);
61
+ --mk-shadow-4: 0 2px 4px rgba(0, 0, 0, 0.1);
62
+ --mk-shadow-12: 0 8px 12px rgba(0, 0, 0, 0.16);
63
+ }
64
+
65
+ /* ---------------------------------------------------- the screen, dark -- */
66
+
67
+ @media (prefers-color-scheme: dark) {
68
+ :root:not([data-mode="light"]) [data-skin="mac"] {
69
+ --mk-bg: #1e1e1e;
70
+
71
+ /* the window chrome the frame draws, in the same two modes */
72
+ --mk-chrome-bg: #2c2c2e;
73
+ --mk-chrome-bg-2: #242426;
74
+ --mk-chrome-line: #3a3a3c;
75
+ --mk-chrome-fg: #f0f0f2;
76
+ --mk-surface: #2c2c2e;
77
+ --mk-surface-2: #242426;
78
+ --mk-fg: #f5f5f7;
79
+ --mk-muted: #a1a1a6;
80
+ --mk-line: #3a3a3c;
81
+ --mk-line-strong: #48484a;
82
+ --mk-fill: #3a3a3c;
83
+ --mk-accent: #0a84ff;
84
+ --mk-accent-hover: #409cff;
85
+ --mk-accent-soft: #0b2a47;
86
+ --mk-on-accent: #ffffff;
87
+ --mk-focus: #409cff;
88
+ --mk-sidebar: rgba(38, 38, 41, 0.82);
89
+ --mk-shadow-1: 0 1px 1px rgba(0, 0, 0, 0.4);
90
+ --mk-shadow-4: 0 2px 4px rgba(0, 0, 0, 0.45);
91
+ --mk-shadow-12: 0 8px 12px rgba(0, 0, 0, 0.5);
92
+ }
93
+ }
94
+
95
+ :root[data-mode="dark"] [data-skin="mac"] {
96
+ --mk-bg: #1e1e1e;
97
+
98
+ /* the window chrome the frame draws, in the same two modes */
99
+ --mk-chrome-bg: #2c2c2e;
100
+ --mk-chrome-bg-2: #242426;
101
+ --mk-chrome-line: #3a3a3c;
102
+ --mk-chrome-fg: #f0f0f2;
103
+ --mk-surface: #2c2c2e;
104
+ --mk-surface-2: #242426;
105
+ --mk-fg: #f5f5f7;
106
+ --mk-muted: #a1a1a6;
107
+ --mk-line: #3a3a3c;
108
+ --mk-line-strong: #48484a;
109
+ --mk-fill: #3a3a3c;
110
+ --mk-accent: #0a84ff;
111
+ --mk-accent-hover: #409cff;
112
+ --mk-accent-soft: #0b2a47;
113
+ --mk-on-accent: #ffffff;
114
+ --mk-focus: #409cff;
115
+ --mk-sidebar: rgba(38, 38, 41, 0.82);
116
+ --mk-shadow-1: 0 1px 1px rgba(0, 0, 0, 0.4);
117
+ --mk-shadow-4: 0 2px 4px rgba(0, 0, 0, 0.45);
118
+ --mk-shadow-12: 0 8px 12px rgba(0, 0, 0, 0.5);
119
+ }
120
+
121
+ /* --------------------------------------------------------------- screen -- */
122
+
123
+ [data-skin="mac"] .mk-screen {
124
+ color: var(--mk-fg);
125
+ background: var(--mk-bg);
126
+ color-scheme: light;
127
+ }
128
+
129
+ @media (prefers-color-scheme: dark) {
130
+ :root:not([data-mode="light"]) [data-skin="mac"] .mk-screen {
131
+ color-scheme: dark;
132
+ }
133
+ }
134
+
135
+ :root[data-mode="dark"] [data-skin="mac"] .mk-screen {
136
+ color-scheme: dark;
137
+ }
138
+
139
+ [data-skin="mac"] .mk-screen a {
140
+ color: var(--mk-accent);
141
+ }
142
+
143
+ /* --------------------------------------------------------------- layout -- */
144
+
145
+ [data-skin="mac"] .wf-row {
146
+ display: flex;
147
+ align-items: center;
148
+ gap: var(--mk-gap);
149
+ }
150
+
151
+ [data-skin="mac"] .wf-col {
152
+ display: flex;
153
+ flex-direction: column;
154
+ gap: var(--mk-gap);
155
+ }
156
+
157
+ [data-skin="mac"] .wf-row.wf-shell {
158
+ align-items: stretch;
159
+ gap: 0;
160
+ }
161
+
162
+ [data-skin="mac"] .wf-row.wf-top {
163
+ align-items: flex-start;
164
+ }
165
+
166
+ [data-skin="mac"] .wf-spacer,
167
+ [data-skin="mac"] .wf-grow {
168
+ flex: 1 1 auto;
169
+ min-width: 0;
170
+ }
171
+
172
+ /* ----------------------------------------------------------------- type -- */
173
+
174
+ [data-skin="mac"] .wf-heading {
175
+ display: block;
176
+ width: 38%;
177
+ max-width: 18em;
178
+ height: 0.8em;
179
+ background: var(--mk-fg);
180
+ border-radius: 3px;
181
+ opacity: 0.85;
182
+ }
183
+
184
+ [data-skin="mac"] .wf-heading:not(:empty) {
185
+ width: auto;
186
+ max-width: none;
187
+ height: auto;
188
+ font-size: 17px;
189
+ font-weight: 600;
190
+ line-height: 24px;
191
+ letter-spacing: -0.01em;
192
+ background: none;
193
+ opacity: 1;
194
+ }
195
+
196
+ [data-skin="mac"] .wf-text {
197
+ --mk-lines: 2;
198
+ display: block;
199
+ height: calc(var(--mk-lines) * var(--mk-line-h));
200
+ background-image: repeating-linear-gradient(
201
+ to bottom,
202
+ var(--mk-line-strong) 0 6px,
203
+ transparent 6px var(--mk-line-h)
204
+ );
205
+ border-radius: 3px;
206
+ opacity: 0.7;
207
+ }
208
+
209
+ [data-skin="mac"] .wf-text[data-lines="1"] { --mk-lines: 1; }
210
+ [data-skin="mac"] .wf-text[data-lines="2"] { --mk-lines: 2; }
211
+ [data-skin="mac"] .wf-text[data-lines="3"] { --mk-lines: 3; }
212
+ [data-skin="mac"] .wf-text[data-lines="4"] { --mk-lines: 4; }
213
+ [data-skin="mac"] .wf-text[data-lines="5"] { --mk-lines: 5; }
214
+ [data-skin="mac"] .wf-text[data-lines="6"] { --mk-lines: 6; }
215
+ [data-skin="mac"] .wf-text[data-lines="7"] { --mk-lines: 7; }
216
+ [data-skin="mac"] .wf-text[data-lines="8"] { --mk-lines: 8; }
217
+
218
+ [data-skin="mac"] .wf-text:not(:empty) {
219
+ height: auto;
220
+ font-size: 13px;
221
+ line-height: var(--mk-line-h);
222
+ color: var(--mk-muted);
223
+ background: none;
224
+ opacity: 1;
225
+ }
226
+
227
+ /* --------------------------------------------------------------- blocks -- */
228
+
229
+ /* macOS groups rows inside a rounded panel with a hairline between them and no
230
+ border around them, so a card is a surface and a box is a row group. */
231
+ [data-skin="mac"] .wf-box {
232
+ min-height: 44px;
233
+ padding: 10px 12px;
234
+ background: var(--mk-surface);
235
+ border-radius: var(--mk-radius-lg);
236
+ }
237
+
238
+ /* A selected row: macOS fills the row with the accent at low weight and keeps
239
+ the text colour, so a list reads as a list and not as a button. */
240
+ [data-skin="mac"] .wf-box.is-active {
241
+ background: var(--mk-accent-soft);
242
+ box-shadow: inset 3px 0 0 var(--mk-accent);
243
+ }
244
+
245
+ [data-skin="mac"] .wf-card {
246
+ display: flex;
247
+ flex-direction: column;
248
+ gap: var(--mk-gap);
249
+ padding: 14px;
250
+ background: var(--mk-surface);
251
+ border-radius: var(--mk-radius-lg);
252
+ box-shadow: var(--mk-shadow-1);
253
+ }
254
+
255
+ [data-skin="mac"] .wf-image {
256
+ min-height: 120px;
257
+ background-color: var(--mk-fill);
258
+ background-image: linear-gradient(
259
+ to top right,
260
+ transparent calc(50% - 0.5px),
261
+ var(--mk-line-strong) calc(50% - 0.5px),
262
+ var(--mk-line-strong) calc(50% + 0.5px),
263
+ transparent calc(50% + 0.5px)
264
+ ),
265
+ linear-gradient(
266
+ to bottom right,
267
+ transparent calc(50% - 0.5px),
268
+ var(--mk-line-strong) calc(50% - 0.5px),
269
+ var(--mk-line-strong) calc(50% + 0.5px),
270
+ transparent calc(50% + 0.5px)
271
+ );
272
+ border-radius: var(--mk-radius-lg);
273
+ }
274
+
275
+ [data-skin="mac"] .wf-avatar {
276
+ flex: 0 0 auto;
277
+ width: 30px;
278
+ height: 30px;
279
+ background: var(--mk-accent-soft);
280
+ border: 1px solid var(--mk-line);
281
+ border-radius: 50%;
282
+ }
283
+
284
+ [data-skin="mac"] .wf-avatar[data-size="sm"] {
285
+ width: 22px;
286
+ height: 22px;
287
+ }
288
+
289
+ [data-skin="mac"] .wf-avatar[data-size="lg"] {
290
+ width: 44px;
291
+ height: 44px;
292
+ }
293
+
294
+ [data-skin="mac"] .wf-icon {
295
+ display: inline-block;
296
+ flex: 0 0 auto;
297
+ width: 15px;
298
+ height: 15px;
299
+ background: var(--mk-fill);
300
+ border-radius: 3px;
301
+ }
302
+
303
+ [data-skin="mac"] .wf-icon[data-size="lg"] {
304
+ width: 20px;
305
+ height: 20px;
306
+ }
307
+
308
+ /* ------------------------------------------------------------- controls -- */
309
+
310
+ [data-skin="mac"] .wf-button {
311
+ display: inline-flex;
312
+ align-items: center;
313
+ justify-content: center;
314
+ gap: 6px;
315
+ height: var(--mk-ctl-h);
316
+ padding: 0 12px;
317
+ font: inherit;
318
+ font-size: 13px;
319
+ font-weight: 500;
320
+ color: var(--mk-fg);
321
+ text-align: center;
322
+ text-decoration: none;
323
+ white-space: nowrap;
324
+ background: var(--mk-surface);
325
+ border: 1px solid var(--mk-line-strong);
326
+ border-radius: var(--mk-radius);
327
+ box-shadow: var(--mk-shadow-1);
328
+ }
329
+
330
+ [data-skin="mac"] .wf-button.primary {
331
+ color: var(--mk-on-accent);
332
+ background: var(--mk-accent);
333
+ border-color: transparent;
334
+ }
335
+
336
+ [data-skin="mac"] .wf-button.ghost {
337
+ color: var(--mk-accent);
338
+ background: transparent;
339
+ border-color: transparent;
340
+ box-shadow: none;
341
+ }
342
+
343
+ [data-skin="mac"] .wf-button[disabled] {
344
+ color: var(--mk-muted);
345
+ opacity: 0.55;
346
+ box-shadow: none;
347
+ }
348
+
349
+ /* macOS draws focus as a soft ring outside a control, not a hard outline. */
350
+ [data-skin="mac"] .wf-button:focus-visible,
351
+ [data-skin="mac"] .wf-button[data-focus] {
352
+ outline: none;
353
+ box-shadow: 0 0 0 3px var(--mk-accent-soft), 0 0 0 4px var(--mk-focus);
354
+ }
355
+
356
+ [data-skin="mac"] .wf-input {
357
+ position: relative;
358
+ display: flex;
359
+ align-items: center;
360
+ min-height: var(--mk-ctl-h);
361
+ padding: 0 8px;
362
+ font-size: 13px;
363
+ color: var(--mk-fg);
364
+ background: var(--mk-bg);
365
+ border: 1px solid var(--mk-line-strong);
366
+ border-radius: var(--mk-radius);
367
+ }
368
+
369
+ [data-skin="mac"] .wf-input[data-label]::before,
370
+ [data-skin="mac"] .wf-select[data-label]::before,
371
+ [data-skin="mac"] .wf-label {
372
+ position: absolute;
373
+ top: -16px;
374
+ left: 1px;
375
+ font-size: 11px;
376
+ line-height: 1.4;
377
+ color: var(--mk-muted);
378
+ background: none;
379
+ }
380
+
381
+ [data-skin="mac"] .wf-input[data-label]::before,
382
+ [data-skin="mac"] .wf-select[data-label]::before {
383
+ content: attr(data-label);
384
+ }
385
+
386
+ [data-skin="mac"] .wf-input:focus-within {
387
+ box-shadow: 0 0 0 3px var(--mk-accent-soft);
388
+ border-color: var(--mk-accent);
389
+ }
390
+
391
+ /* An empty field still says what it is: the drawing's placeholder is read out
392
+ of the attribute, so a search box in a title bar is not a blank rectangle. */
393
+ [data-skin="mac"] .wf-input[data-placeholder]:empty::after {
394
+ content: attr(data-placeholder);
395
+ color: var(--mk-muted);
396
+ }
397
+
398
+ [data-skin="mac"] .wf-select {
399
+ position: relative;
400
+ display: flex;
401
+ align-items: center;
402
+ min-height: var(--mk-ctl-h);
403
+ padding: 0 26px 0 8px;
404
+ font-size: 13px;
405
+ color: var(--mk-fg);
406
+ background: var(--mk-surface);
407
+ border: 1px solid var(--mk-line);
408
+ border-radius: var(--mk-radius);
409
+ }
410
+
411
+ [data-skin="mac"] .wf-select::after {
412
+ content: "";
413
+ position: absolute;
414
+ top: 50%;
415
+ right: 9px;
416
+ width: 0;
417
+ height: 0;
418
+ margin-top: -2px;
419
+ border-top: 4px solid var(--mk-muted);
420
+ border-right: 3px solid transparent;
421
+ border-left: 3px solid transparent;
422
+ }
423
+
424
+ [data-skin="mac"] .wf-checkbox {
425
+ position: relative;
426
+ display: inline-block;
427
+ flex: 0 0 auto;
428
+ width: 14px;
429
+ height: 14px;
430
+ background: var(--mk-bg);
431
+ border: 1px solid var(--mk-line-strong);
432
+ border-radius: 3px;
433
+ }
434
+
435
+ [data-skin="mac"] .wf-checkbox[data-checked="true"] {
436
+ background: var(--mk-accent);
437
+ border-color: var(--mk-accent);
438
+ }
439
+
440
+ [data-skin="mac"] .wf-checkbox[data-checked="true"]::after {
441
+ content: "";
442
+ position: absolute;
443
+ top: 0;
444
+ left: 3.5px;
445
+ width: 3.5px;
446
+ height: 7px;
447
+ border: solid var(--mk-on-accent);
448
+ border-width: 0 1.6px 1.6px 0;
449
+ transform: rotate(45deg);
450
+ }
451
+
452
+ [data-skin="mac"] .wf-toggle {
453
+ position: relative;
454
+ display: inline-block;
455
+ flex: 0 0 auto;
456
+ width: 34px;
457
+ height: 20px;
458
+ background: var(--mk-fill);
459
+ border: 1px solid var(--mk-line);
460
+ border-radius: var(--mk-radius-pill);
461
+ }
462
+
463
+ [data-skin="mac"] .wf-toggle::after {
464
+ content: "";
465
+ position: absolute;
466
+ top: 1px;
467
+ left: 1px;
468
+ width: 16px;
469
+ height: 16px;
470
+ background: var(--mk-bg);
471
+ border-radius: 50%;
472
+ box-shadow: var(--mk-shadow-1);
473
+ }
474
+
475
+ [data-skin="mac"] .wf-toggle.on {
476
+ background: var(--mk-accent);
477
+ border-color: var(--mk-accent);
478
+ }
479
+
480
+ [data-skin="mac"] .wf-toggle.on::after {
481
+ left: 15px;
482
+ }
483
+
484
+ /* A segmented control is what macOS uses where a web app would put tabs, and
485
+ it is one box with a raised pill inside it. */
486
+ [data-skin="mac"] .wf-tabs {
487
+ display: inline-flex;
488
+ align-self: flex-start;
489
+ align-items: center;
490
+ gap: 0;
491
+ padding: 2px;
492
+ background: var(--mk-fill);
493
+ border-radius: 8px;
494
+ }
495
+
496
+ [data-skin="mac"] .wf-tabs > * {
497
+ padding: 3px 12px;
498
+ font-size: 12px;
499
+ line-height: 16px;
500
+ color: var(--mk-fg);
501
+ white-space: nowrap;
502
+ border-radius: 6px;
503
+ }
504
+
505
+ [data-skin="mac"] .wf-tabs > .is-active,
506
+ [data-skin="mac"] .wf-tabs > [aria-selected="true"] {
507
+ font-weight: 500;
508
+ background: var(--mk-bg);
509
+ box-shadow: var(--mk-shadow-1);
510
+ }
511
+
512
+ /* ---------------------------------------------------------------- shell -- */
513
+
514
+ /* The title bar of a macOS window is translucent and it is one band with the
515
+ toolbar, so a nav is a bar over the sidebar's colour and not over white. */
516
+ [data-skin="mac"] .wf-nav {
517
+ display: flex;
518
+ align-items: center;
519
+ gap: 10px;
520
+ min-height: 44px;
521
+ padding: 0 14px;
522
+ background: var(--mk-sidebar);
523
+ border-bottom: 1px solid var(--mk-line);
524
+ }
525
+
526
+ [data-skin="mac"] .wf-sidebar {
527
+ display: flex;
528
+ flex: 0 0 auto;
529
+ flex-direction: column;
530
+ gap: 1px;
531
+ width: 208px;
532
+ padding: 10px 8px;
533
+ background: var(--mk-sidebar);
534
+ border-right: 1px solid var(--mk-line);
535
+ }
536
+
537
+ [data-skin="mac"] .wf-sidebar > .wf-row {
538
+ gap: 8px;
539
+ min-height: 26px;
540
+ padding: 0 8px;
541
+ border-radius: 6px;
542
+ }
543
+
544
+ [data-skin="mac"] .wf-sidebar > .wf-row.is-active,
545
+ [data-skin="mac"] .wf-sidebar > .is-active {
546
+ background: var(--mk-fill);
547
+ }
548
+
549
+ /* ----------------------------------------------------------------- data -- */
550
+
551
+ [data-skin="mac"] .wf-table {
552
+ --mk-rows: 4;
553
+ --mk-cols: 3;
554
+ height: calc(var(--mk-rows) * 30px);
555
+ background-image: repeating-linear-gradient(
556
+ to bottom,
557
+ transparent 0 29px,
558
+ var(--mk-line) 29px 30px
559
+ ),
560
+ repeating-linear-gradient(
561
+ to right,
562
+ transparent 0 calc(100% / var(--mk-cols) - 1px),
563
+ var(--mk-line) calc(100% / var(--mk-cols) - 1px) calc(100% / var(--mk-cols))
564
+ );
565
+ border-radius: var(--mk-radius);
566
+ }
567
+
568
+ [data-skin="mac"] .wf-table[data-rows="1"] { --mk-rows: 1; }
569
+ [data-skin="mac"] .wf-table[data-rows="2"] { --mk-rows: 2; }
570
+ [data-skin="mac"] .wf-table[data-rows="3"] { --mk-rows: 3; }
571
+ [data-skin="mac"] .wf-table[data-rows="4"] { --mk-rows: 4; }
572
+ [data-skin="mac"] .wf-table[data-rows="5"] { --mk-rows: 5; }
573
+ [data-skin="mac"] .wf-table[data-rows="6"] { --mk-rows: 6; }
574
+ [data-skin="mac"] .wf-table[data-rows="8"] { --mk-rows: 8; }
575
+ [data-skin="mac"] .wf-table[data-rows="10"] { --mk-rows: 10; }
576
+ [data-skin="mac"] .wf-table[data-cols="1"] { --mk-cols: 1; }
577
+ [data-skin="mac"] .wf-table[data-cols="2"] { --mk-cols: 2; }
578
+ [data-skin="mac"] .wf-table[data-cols="3"] { --mk-cols: 3; }
579
+ [data-skin="mac"] .wf-table[data-cols="4"] { --mk-cols: 4; }
580
+ [data-skin="mac"] .wf-table[data-cols="5"] { --mk-cols: 5; }
581
+ [data-skin="mac"] .wf-table[data-cols="6"] { --mk-cols: 6; }
582
+
583
+ [data-skin="mac"] .wf-chart {
584
+ display: flex;
585
+ align-items: flex-end;
586
+ gap: 6px;
587
+ height: 150px;
588
+ border-bottom: 1px solid var(--mk-line);
589
+ }
590
+
591
+ [data-skin="mac"] .wf-chart > * {
592
+ flex: 1 1 0;
593
+ min-height: 4px;
594
+ background: var(--mk-fill);
595
+ border-radius: 3px 3px 0 0;
596
+ }
597
+
598
+ [data-skin="mac"] .wf-chart > .is-accent {
599
+ background: var(--mk-accent);
600
+ }
601
+
602
+ /* -------------------------------------------------------------- overlay -- */
603
+
604
+ [data-skin="mac"] .wf-scrim {
605
+ position: absolute;
606
+ inset: 0;
607
+ z-index: 2;
608
+ background: rgba(0, 0, 0, 0.28);
609
+ }
610
+
611
+ [data-skin="mac"] .wf-modal {
612
+ position: absolute;
613
+ top: 50%;
614
+ left: 50%;
615
+ z-index: 3;
616
+ display: flex;
617
+ flex-direction: column;
618
+ gap: 14px;
619
+ width: min(420px, 82%);
620
+ max-height: 84%;
621
+ padding: 20px;
622
+ overflow: auto;
623
+ background: var(--mk-surface);
624
+ border: 1px solid var(--mk-line);
625
+ border-radius: 12px;
626
+ box-shadow: var(--mk-shadow-12);
627
+ transform: translate(-50%, -50%);
628
+ }
629
+
630
+ [data-skin="mac"] .wf-toast {
631
+ position: absolute;
632
+ bottom: 22px;
633
+ left: 50%;
634
+ z-index: 4;
635
+ display: flex;
636
+ align-items: center;
637
+ gap: 10px;
638
+ max-width: 82%;
639
+ padding: 10px 14px;
640
+ font-size: 13px;
641
+ color: var(--mk-fg);
642
+ background: var(--mk-surface);
643
+ border: 1px solid var(--mk-line);
644
+ border-radius: var(--mk-radius-lg);
645
+ box-shadow: var(--mk-shadow-4);
646
+ transform: translateX(-50%);
647
+ }