rikiki-deck 0.6.0 → 0.7.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 (174) hide show
  1. package/.claude/skills/rikiki-debug/SKILL.md +17 -7
  2. package/.claude/skills/rikiki-deck/SKILL.md +362 -77
  3. package/.claude/skills/rikiki-theme/SKILL.md +1 -1
  4. package/README.md +69 -50
  5. package/bin/lib/assemble.mjs +154 -0
  6. package/bin/lib/box-geometry.mjs +66 -0
  7. package/bin/lib/browser.mjs +302 -0
  8. package/bin/lib/check-api.d.ts +28 -0
  9. package/bin/lib/check-api.mjs +6 -0
  10. package/bin/lib/check-plugins.mjs +228 -0
  11. package/bin/lib/check.mjs +1347 -0
  12. package/bin/lib/cli-error.mjs +26 -0
  13. package/bin/lib/component-deps.mjs +69 -0
  14. package/bin/lib/diff.mjs +275 -0
  15. package/bin/lib/export-pdf.mjs +65 -0
  16. package/bin/lib/graph-hit.mjs +86 -0
  17. package/bin/lib/inline.mjs +137 -39
  18. package/bin/lib/narrative.mjs +77 -0
  19. package/bin/lib/prune-icons.mjs +104 -0
  20. package/bin/lib/render.mjs +195 -0
  21. package/bin/lib/scan-external.mjs +126 -0
  22. package/bin/lib/starter.mjs +27 -14
  23. package/bin/lib/visual.mjs +120 -0
  24. package/bin/rikiki.mjs +420 -35
  25. package/dist/annotation-marks.d.ts +60 -0
  26. package/dist/annotation-marks.js +1 -0
  27. package/dist/bar-segments.d.ts +28 -0
  28. package/dist/bar-segments.js +1 -0
  29. package/dist/browser-location.d.ts +3 -0
  30. package/dist/browser-location.js +1 -0
  31. package/dist/cards-syntax.d.ts +31 -0
  32. package/dist/cards-syntax.js +6 -0
  33. package/dist/{plugins/click-stages.d.ts → click-stages.d.ts} +1 -1
  34. package/dist/deck-agenda.d.ts +25 -0
  35. package/dist/deck-agenda.js +6 -0
  36. package/dist/deck-annotate.d.ts +108 -0
  37. package/dist/deck-annotate.js +18 -0
  38. package/dist/deck-bar.d.ts +32 -0
  39. package/dist/deck-bar.js +19 -0
  40. package/dist/deck-bento.d.ts +38 -0
  41. package/dist/deck-bento.js +4 -0
  42. package/dist/{molecules/deck-callout.d.ts → deck-callout.d.ts} +2 -0
  43. package/dist/deck-callout.js +1 -1
  44. package/dist/deck-cell.d.ts +19 -0
  45. package/dist/deck-cell.js +1 -0
  46. package/dist/deck-checklist.d.ts +20 -0
  47. package/dist/deck-checklist.js +1 -0
  48. package/dist/{layouts/deck-cover.d.ts → deck-cover.d.ts} +8 -0
  49. package/dist/deck-cover.js +9 -6
  50. package/dist/deck-csv.d.ts +38 -0
  51. package/dist/deck-csv.js +15 -0
  52. package/dist/deck-feature-cards.js +2 -2
  53. package/dist/deck-feature.d.ts +18 -0
  54. package/dist/deck-feature.js +2 -2
  55. package/dist/deck-figure.d.ts +26 -0
  56. package/dist/deck-figure.js +8 -0
  57. package/dist/deck-fit.d.ts +14 -0
  58. package/dist/deck-fit.js +1 -0
  59. package/dist/deck-flow.d.ts +41 -0
  60. package/dist/deck-flow.js +7 -0
  61. package/dist/deck-graph.d.ts +92 -0
  62. package/dist/deck-graph.js +25 -0
  63. package/dist/deck-grid.js +1 -1
  64. package/dist/deck-icon.d.ts +20 -0
  65. package/dist/deck-icon.js +1 -0
  66. package/dist/{atoms/deck-kicker.d.ts → deck-kicker.d.ts} +5 -0
  67. package/dist/deck-kicker.js +1 -1
  68. package/dist/deck-kpi-grid.d.ts +26 -0
  69. package/dist/deck-kpi-grid.js +4 -0
  70. package/dist/deck-link.d.ts +21 -0
  71. package/dist/deck-link.js +1 -0
  72. package/dist/{molecules/deck-md.d.ts → deck-md.d.ts} +3 -0
  73. package/dist/deck-md.js +8 -3
  74. package/dist/deck-mermaid.js +15 -3
  75. package/dist/deck-outline.d.ts +50 -0
  76. package/dist/deck-outline.js +1 -0
  77. package/dist/deck-overview.js +53 -39
  78. package/dist/deck-persona.d.ts +31 -0
  79. package/dist/deck-persona.js +6 -0
  80. package/dist/deck-photo.js +1 -1
  81. package/dist/deck-point.d.ts +22 -0
  82. package/dist/deck-point.js +1 -0
  83. package/dist/deck-presenter.js +120 -48
  84. package/dist/deck-pull.d.ts +13 -0
  85. package/dist/deck-pull.js +1 -0
  86. package/dist/{atoms/deck-punch.d.ts → deck-punch.d.ts} +6 -0
  87. package/dist/deck-punch.js +1 -1
  88. package/dist/deck-quote.d.ts +28 -0
  89. package/dist/deck-quote.js +6 -0
  90. package/dist/{runtime/deck-root.d.ts → deck-root.d.ts} +88 -8
  91. package/dist/deck-root.js +17 -13
  92. package/dist/deck-section.js +2 -2
  93. package/dist/deck-source.d.ts +12 -0
  94. package/dist/deck-source.js +2 -0
  95. package/dist/deck-split.d.ts +30 -0
  96. package/dist/deck-split.js +5 -3
  97. package/dist/{molecules/deck-stat.d.ts → deck-stat.d.ts} +2 -0
  98. package/dist/deck-stat.js +2 -2
  99. package/dist/{molecules/deck-step-list.d.ts → deck-step-list.d.ts} +8 -0
  100. package/dist/deck-step-list.js +4 -2
  101. package/dist/deck-table.d.ts +26 -0
  102. package/dist/deck-table.js +1 -0
  103. package/dist/deck-takeaway.d.ts +18 -0
  104. package/dist/deck-takeaway.js +2 -2
  105. package/dist/deck-timeline.d.ts +37 -0
  106. package/dist/deck-timeline.js +5 -0
  107. package/dist/deck-transition.js +3 -3
  108. package/dist/deck-versus.d.ts +18 -0
  109. package/dist/deck-versus.js +9 -0
  110. package/dist/deep-link.d.ts +29 -0
  111. package/dist/deep-link.js +1 -0
  112. package/dist/escape-html.d.ts +3 -0
  113. package/dist/escape-html.js +1 -0
  114. package/dist/fit-controller.d.ts +27 -0
  115. package/dist/fit-controller.js +1 -0
  116. package/dist/graph-layout.d.ts +35 -0
  117. package/dist/graph-layout.js +1 -0
  118. package/dist/grid-tracks.d.ts +17 -0
  119. package/dist/grid-tracks.js +1 -0
  120. package/dist/icon-set.d.ts +6 -0
  121. package/dist/icon-set.js +1 -0
  122. package/dist/index.d.ts +37 -31
  123. package/dist/index.js +95 -49
  124. package/dist/keymap.d.ts +40 -0
  125. package/dist/keymap.js +1 -0
  126. package/dist/mouse-nav.d.ts +12 -0
  127. package/dist/mouse-nav.js +1 -0
  128. package/dist/navigation.d.ts +25 -0
  129. package/dist/navigation.js +1 -0
  130. package/dist/parse-csv.d.ts +9 -0
  131. package/dist/parse-csv.js +3 -0
  132. package/dist/shared-styles.js +1 -1
  133. package/dist/shiki.d.ts +8 -0
  134. package/dist/signature.d.ts +2 -0
  135. package/dist/signature.js +1 -0
  136. package/dist/slide-fill.d.ts +8 -0
  137. package/dist/slide-fill.js +1 -0
  138. package/dist/standalone.js +301 -169
  139. package/dist/vendor/THIRD-PARTY-NOTICES.txt +4347 -0
  140. package/dist/vendor/inventory.json +3029 -0
  141. package/dist/vendor/lit.js +62 -2
  142. package/dist/vendor/mermaid.min.js +95 -95
  143. package/dist/vendor/shiki.js +1 -57
  144. package/dist/viewport.d.ts +42 -0
  145. package/dist/viewport.js +1 -0
  146. package/docs/llms/rikiki-reference.md +955 -64
  147. package/docs/llms/rikiki-workflow.md +536 -0
  148. package/llms.txt +39 -12
  149. package/package.json +33 -12
  150. package/themes/rikiki.css +173 -47
  151. package/themes/siliceum.css +171 -51
  152. package/dist/layouts/deck-feature.d.ts +0 -11
  153. package/dist/layouts/deck-split.d.ts +0 -18
  154. package/dist/layouts/deck-takeaway.d.ts +0 -11
  155. package/dist/plugins/shiki.d.ts +0 -8
  156. /package/dist/{runtime/color.d.ts → color.d.ts} +0 -0
  157. /package/dist/{atoms/deck-badge.d.ts → deck-badge.d.ts} +0 -0
  158. /package/dist/{molecules/deck-card.d.ts → deck-card.d.ts} +0 -0
  159. /package/dist/{atoms/deck-code-highlighter.d.ts → deck-code-highlighter.d.ts} +0 -0
  160. /package/dist/{atoms/deck-code.d.ts → deck-code.d.ts} +0 -0
  161. /package/dist/{layouts/deck-feature-cards.d.ts → deck-feature-cards.d.ts} +0 -0
  162. /package/dist/{molecules/deck-grid.d.ts → deck-grid.d.ts} +0 -0
  163. /package/dist/{runtime/deck-help.d.ts → deck-help.d.ts} +0 -0
  164. /package/dist/{molecules/deck-mermaid.d.ts → deck-mermaid.d.ts} +0 -0
  165. /package/dist/{molecules/deck-metric.d.ts → deck-metric.d.ts} +0 -0
  166. /package/dist/{runtime/deck-notes.d.ts → deck-notes.d.ts} +0 -0
  167. /package/dist/{runtime/deck-overview.d.ts → deck-overview.d.ts} +0 -0
  168. /package/dist/{layouts/deck-photo.d.ts → deck-photo.d.ts} +0 -0
  169. /package/dist/{runtime/deck-presenter.d.ts → deck-presenter.d.ts} +0 -0
  170. /package/dist/{layouts/deck-section.d.ts → deck-section.d.ts} +0 -0
  171. /package/dist/{molecules/deck-shortcut.d.ts → deck-shortcut.d.ts} +0 -0
  172. /package/dist/{molecules/deck-stack.d.ts → deck-stack.d.ts} +0 -0
  173. /package/dist/{molecules/deck-tier-list.d.ts → deck-tier-list.d.ts} +0 -0
  174. /package/dist/{runtime/deck-transition.d.ts → deck-transition.d.ts} +0 -0
@@ -31,21 +31,24 @@
31
31
 
32
32
  --rik-palette-mango-700: #a87e00;
33
33
  --rik-palette-mango-500: #F7CB44;
34
+ /* The -100 step is the status FILL, and a fill has to be seen: measured
35
+ against the page it must clear a CIE76 delta E of 10, which lands every
36
+ hue at an alpha of 0.18. Enforced by scripts/theme-contrast.test.mjs. */
34
37
  --rik-palette-mango-200: rgba(247, 203, 68, 0.45);
35
38
  --rik-palette-mango-100: rgba(247, 203, 68, 0.18);
36
39
  --rik-palette-mango-50: rgba(247, 203, 68, 0.05);
37
40
 
38
41
  --rik-palette-ember-500: #dc2626;
39
42
  --rik-palette-ember-200: rgba(220, 38, 38, 0.45);
40
- --rik-palette-ember-100: rgba(220, 38, 38, 0.10);
43
+ --rik-palette-ember-100: rgba(220, 38, 38, 0.18);
41
44
 
42
45
  --rik-palette-helico-500: #16a34a;
43
46
  --rik-palette-helico-200: rgba(22, 163, 74, 0.45);
44
- --rik-palette-helico-100: rgba(22, 163, 74, 0.08);
47
+ --rik-palette-helico-100: rgba(22, 163, 74, 0.18);
45
48
 
46
49
  --rik-palette-warm-500: #ea580c;
47
50
  --rik-palette-warm-200: rgba(234, 88, 12, 0.40);
48
- --rik-palette-warm-100: rgba(234, 88, 12, 0.08);
51
+ --rik-palette-warm-100: rgba(234, 88, 12, 0.18);
49
52
 
50
53
  --rik-palette-orchid-500: #7c3aed;
51
54
  --rik-palette-lime-500: #84cc16;
@@ -70,7 +73,8 @@
70
73
 
71
74
  --rik-text-default: var(--rik-palette-ink-900);
72
75
  --rik-text-default--muted: var(--rik-palette-ink-700);
73
- --rik-text-default--faint: var(--rik-palette-ink-500);
76
+ /* Text-grade · ink-500 measured 4.35:1 on the page, under AA body text. */
77
+ --rik-text-default--faint: #727272;
74
78
  --rik-text-inverse: #ffffff;
75
79
  --rik-text-inverse--muted: rgba(255, 255, 255, 0.70);
76
80
  --rik-text-inverse--faint: rgba(255, 255, 255, 0.55);
@@ -100,7 +104,7 @@
100
104
 
101
105
  --rik-status-info: var(--rik-palette-mango-500);
102
106
  --rik-status-info__text: var(--rik-palette-mango-700);
103
- --rik-status-info__bg: var(--rik-palette-mango-50);
107
+ --rik-status-info__bg: var(--rik-palette-mango-100);
104
108
  --rik-status-info__bg--mid: var(--rik-palette-mango-100);
105
109
  --rik-status-info__bg--strong: rgba(247, 203, 68, 0.18);
106
110
  --rik-status-info__border: var(--rik-palette-mango-200);
@@ -116,7 +120,8 @@
116
120
  --rik-focus-ring--width: 2px;
117
121
  --rik-focus-ring--offset: 2px;
118
122
 
119
- --rik-link: var(--rik-accent--strong);
123
+ /* accent--strong measured 3.56:1 on the page · under AA for body text. */
124
+ --rik-link: #916d00;
120
125
  --rik-link--hover: var(--rik-accent);
121
126
  --rik-link--visited: var(--rik-palette-orchid-500);
122
127
 
@@ -127,6 +132,23 @@
127
132
  --rik-decor-lime: var(--rik-palette-lime-500);
128
133
  --rik-decor-canary: var(--rik-palette-canary-500);
129
134
 
135
+ /* Default vertical distribution of a slide body · a per-slide `spread`
136
+ attribute overrides it. Density is usually a per-slide judgement, which is
137
+ why this is a theme default and not a deck-level attribute. */
138
+
139
+ /* Text-grade tone companions · the plain tones are surface/decoration colors
140
+ and several of them sit under WCAG AA on the page. Anything that renders
141
+ TEXT in a tone (deck-punch, deck-stat) must route here instead.
142
+ Measured, not eyeballed · src/shared/contrast.test.ts fails if a value
143
+ drifts under the large-text threshold. */
144
+ --rik-status-success__text: var(--rik-palette-helico-500);
145
+ --rik-status-warn__text: var(--rik-palette-warm-500);
146
+ --rik-status-danger__text: var(--rik-palette-ember-500);
147
+ --rik-accent__text: #ab8d2f;
148
+ --rik-decor-orchid__text: var(--rik-palette-orchid-500);
149
+ --rik-decor-lime__text: #67a011;
150
+ --rik-decor-canary__text: var(--rik-palette-canary-500);
151
+
130
152
  --rik-elevation-1: 0 1px 2px rgba(0, 0, 0, 0.04);
131
153
  --rik-elevation-2: 0 1px 3px rgba(0, 0, 0, 0.04), 0 4px 12px rgba(0, 0, 0, 0.04);
132
154
  --rik-elevation-3: 0 2px 6px rgba(0, 0, 0, 0.06), 0 8px 20px rgba(0, 0, 0, 0.06);
@@ -162,16 +184,22 @@
162
184
  --rik-text-3xl: 3.815rem;
163
185
  --rik-text-4xl: 4.768rem;
164
186
 
165
- --rik-font-size-xs: var(--rik-text-2xs);
166
- --rik-font-size-sm: var(--rik-text-xs);
187
+ /* Both of these used to sit under the legibility floor · the 8H rule puts
188
+ the smallest readable text at 1/50 of the screen height, which is 21.6px
189
+ on the 1080 canvas, and they resolved to 16.2px (1/66) and 20.3px (1/53).
190
+ A size nobody in the room can read is not a quiet tier, it is a tier that
191
+ is not there, and it was the size the micro-label tier lived at.
192
+ scripts/type-scale.test.mjs holds the floor now. */
193
+ --rik-font-size-xs: var(--rik-text-sm);
194
+ --rik-font-size-sm: var(--rik-text-sm);
167
195
  /* Slide body sized for projection (≈32px on the 1080 canvas) · the headings
168
196
  step up with it so the hierarchy (incl. markdown ## → h2) stays above body. */
169
197
  --rik-font-size-body: var(--rik-text-base);
170
198
  --rik-font-size-lead: var(--rik-text-md);
171
199
  --rik-font-size-h2: var(--rik-text-md);
172
- --rik-font-size-h1: var(--rik-text-lg);
173
- --rik-font-size-section: var(--rik-text-lg);
174
- --rik-font-size-display: var(--rik-text-xl);
200
+ --rik-font-size-h1: var(--rik-text-2xl);
201
+ --rik-font-size-section: var(--rik-text-3xl);
202
+ --rik-font-size-display: var(--rik-text-2xl);
175
203
  --rik-font-size-mono: 0.88rem;
176
204
  --rik-font-size-mono-sm: var(--rik-text-xs);
177
205
 
@@ -211,6 +239,16 @@
211
239
  --rik-slide-padding-x: 4rem;
212
240
  --rik-title-block: 4.5rem;
213
241
 
242
+ /* Slide-title voice · the four values the two shipped themes disagreed on,
243
+ each of them written twice in a light-DOM rule the other theme copied and
244
+ edited. A theme carries VALUES; the rule that consumes them is written
245
+ once. scripts/theme-parity.test.mjs keeps the two files structurally
246
+ identical so the next divergence cannot be silent. */
247
+ --rik-title-weight: 700;
248
+ --rik-title-tracking: -0.018em;
249
+ --rik-title-leading: 1.15;
250
+ --rik-rule-weight: 2px;
251
+
214
252
  --rik-code__bg: #0f0f10;
215
253
  --rik-code__border: #232325;
216
254
  --rik-code__text: #f4f4f5;
@@ -235,40 +273,53 @@
235
273
  }
236
274
 
237
275
  /* Minimal reset */
238
- *, *::before, *::after { box-sizing: border-box; }
239
- body, h1, h2, h3, h4, p, ul, ol, li, blockquote, pre, table, td, th,
240
- figure, dl, dd { margin: 0; padding: 0; }
276
+ /* Scoped to the deck subtree · a host page that imports this theme to show an
277
+ embedded deck keeps its own box model and its own heading margins. */
278
+ deck-root, deck-root *, deck-root *::before, deck-root *::after { box-sizing: border-box; }
279
+ deck-root h1, deck-root h2, deck-root h3, deck-root h4, deck-root p,
280
+ deck-root ul, deck-root ol, deck-root li, deck-root blockquote, deck-root pre,
281
+ deck-root table, deck-root td, deck-root th, deck-root figure,
282
+ deck-root dl, deck-root dd { margin: 0; padding: 0; }
241
283
  /* The rem baseline and the no-scroll reset are injected globally by deck-root
242
284
  (theme-independent · see _injectGlobals). The theme only owns the page surface
243
285
  and the type below. */
244
- html, body { background: var(--rik-surface-page); }
245
- body { font-family: var(--rik-font-sans); color: var(--rik-text-default); }
286
+ /* Page surface · only when the deck IS the page. An embedded deck must not
287
+ repaint the document around it. */
288
+ html:has(> body > deck-root), html:has(> body > deck-root) body {
289
+ background: var(--rik-surface-page);
290
+ }
291
+ html:has(> body > deck-root) body {
292
+ margin: 0;
293
+ font-family: var(--rik-font-sans);
294
+ color: var(--rik-text-default);
295
+ }
246
296
 
247
297
  ::selection { background: var(--rik-selection__bg); color: var(--rik-selection__text); }
248
298
 
249
299
  /* Light-DOM helpers */
250
- .accent { color: var(--rik-accent); } /* bright yellow · for slides on dark; on paper, use --rik-link */
251
- .accent-danger { color: var(--rik-status-danger); }
252
- .accent-warn { color: var(--rik-status-warn); }
253
- .accent-success { color: var(--rik-status-success); }
254
- .accent-orchid { color: var(--rik-decor-orchid); }
255
- .accent-lime { color: var(--rik-decor-lime); }
256
-
257
- .sub {
300
+ deck-root .accent { color: var(--rik-accent); } /* bright yellow · for slides on dark; on paper, use --rik-link */
301
+ deck-root .accent-danger { color: var(--rik-status-danger); }
302
+ deck-root .accent-warn { color: var(--rik-status-warn); }
303
+ deck-root .accent-success { color: var(--rik-status-success); }
304
+ deck-root .accent-orchid { color: var(--rik-decor-orchid); }
305
+ deck-root .accent-lime { color: var(--rik-decor-lime); }
306
+
307
+ deck-root .sub {
258
308
  font-size: var(--rik-font-size-h2);
259
- color: var(--rik-text-inverse--faint);
309
+ color: var(--rik-text-inverse--muted);
260
310
  line-height: 1.45;
261
311
  max-width: 60ch;
262
312
  }
263
- .display {
313
+ deck-root .display {
314
+ font-family: var(--rik-font-display);
264
315
  font-size: clamp(3rem, 7cqw, 5.5rem);
265
316
  font-weight: 900;
266
317
  line-height: 1.05;
267
318
  letter-spacing: -0.03em;
268
319
  }
269
- .display.danger { color: var(--rik-status-danger); }
270
- .caption.on-dark { color: var(--rik-text-inverse--faint); font-size: var(--rik-font-size-lead); }
271
- .lead {
320
+ deck-root .display.danger { color: var(--rik-status-danger); }
321
+ deck-root .caption.on-dark { color: var(--rik-text-inverse--muted); font-size: var(--rik-font-size-lead); }
322
+ deck-root .lead {
272
323
  font-size: var(--rik-font-size-lead);
273
324
  color: var(--rik-text-default--faint);
274
325
  line-height: 1.5;
@@ -277,20 +328,21 @@ body { font-family: var(--rik-font-sans); color: var(--rik-text-default); }
277
328
 
278
329
  deck-feature > h1,
279
330
  deck-split > h1,
280
- deck-feature-cards > h1 {
331
+ deck-root deck-feature-cards > h1 {
281
332
  font-family: var(--rik-font-display);
282
333
  font-size: var(--rik-font-size-h1);
283
- font-weight: 700;
334
+ font-weight: var(--rik-title-weight);
284
335
  color: var(--rik-text-default);
285
- letter-spacing: -0.018em;
286
- line-height: 1.15;
336
+ letter-spacing: var(--rik-title-tracking);
337
+ line-height: var(--rik-title-leading);
287
338
  margin-bottom: var(--rik-space-4);
288
339
  padding-bottom: var(--rik-space-2);
289
- border-bottom: 2px solid var(--rik-accent);
340
+ border-bottom: var(--rik-rule-weight) solid var(--rik-accent);
290
341
  display: inline-block;
291
342
  align-self: flex-start;
292
343
  }
293
- deck-cover > h1 {
344
+ deck-root deck-cover > h1 {
345
+ font-family: var(--rik-font-display);
294
346
  font-size: clamp(3.6rem, 9cqw, 8.5rem);
295
347
  font-weight: 900;
296
348
  color: var(--rik-text-inverse);
@@ -298,7 +350,8 @@ deck-cover > h1 {
298
350
  letter-spacing: -0.035em;
299
351
  margin-bottom: var(--rik-space-4);
300
352
  }
301
- deck-section > h1 {
353
+ deck-root deck-section > h1 {
354
+ font-family: var(--rik-font-display);
302
355
  font-size: var(--rik-font-size-section);
303
356
  font-weight: 900;
304
357
  color: var(--rik-accent);
@@ -307,16 +360,16 @@ deck-section > h1 {
307
360
  max-width: 18ch;
308
361
  text-align: center;
309
362
  }
310
- deck-section > h1 em {
311
- color: var(--rik-text-inverse--faint);
363
+ deck-root deck-section > h1 em {
364
+ color: var(--rik-text-inverse--muted);
312
365
  font-style: normal;
313
366
  font-weight: 700;
314
367
  }
315
368
 
316
- deck-cover > .sub, deck-cover > p.sub {
369
+ deck-root deck-cover > .sub, deck-root deck-cover > p.sub {
317
370
  display: block;
318
371
  font-size: var(--rik-font-size-h2);
319
- color: var(--rik-text-inverse--faint);
372
+ color: var(--rik-text-inverse--muted);
320
373
  margin-bottom: var(--rik-space-6);
321
374
  max-width: 60ch;
322
375
  line-height: 1.45;
@@ -324,7 +377,7 @@ deck-cover > .sub, deck-cover > p.sub {
324
377
 
325
378
  deck-feature > .lead,
326
379
  deck-split > .lead,
327
- deck-feature-cards > .lead {
380
+ deck-root deck-feature-cards > .lead {
328
381
  display: block;
329
382
  font-size: var(--rik-font-size-lead);
330
383
  color: var(--rik-text-default--faint);
@@ -333,7 +386,7 @@ deck-feature-cards > .lead {
333
386
  max-width: 75ch;
334
387
  }
335
388
 
336
- deck-feature code, deck-split code, deck-feature-cards code, deck-md code {
389
+ deck-root deck-feature code, deck-root deck-split code, deck-root deck-feature-cards code, deck-root deck-md code {
337
390
  font-family: var(--rik-font-mono);
338
391
  font-size: var(--rik-font-size-mono-sm);
339
392
  background: var(--rik-surface-tint);
@@ -341,16 +394,16 @@ deck-feature code, deck-split code, deck-feature-cards code, deck-md code {
341
394
  border-radius: var(--rik-radius-sm);
342
395
  color: var(--rik-text-default);
343
396
  }
344
- deck-code code { all: unset; }
397
+ deck-root deck-code code { all: unset; }
345
398
 
346
- .card-text {
399
+ deck-root .card-text {
347
400
  font-size: var(--rik-font-size-body);
348
401
  color: var(--rik-text-default--muted);
349
402
  line-height: 1.55;
350
403
  margin: 0;
351
404
  }
352
405
 
353
- table.dense {
406
+ deck-root table.dense {
354
407
  width: 100%;
355
408
  border-collapse: separate;
356
409
  border-spacing: 0;
@@ -361,7 +414,7 @@ table.dense {
361
414
  background: var(--rik-surface-raised--strong);
362
415
  box-shadow: var(--rik-elevation-2);
363
416
  }
364
- table.dense th {
417
+ deck-root table.dense th {
365
418
  text-align: left;
366
419
  padding: 10px var(--rik-space-3);
367
420
  color: var(--rik-text-default--faint);
@@ -372,13 +425,80 @@ table.dense th {
372
425
  border-bottom: 1px solid var(--rik-border-default);
373
426
  background: var(--rik-surface-sunken);
374
427
  }
375
- table.dense td {
428
+ deck-root table.dense td {
376
429
  padding: 10px var(--rik-space-3);
377
430
  border-bottom: 1px solid var(--rik-border-default);
378
431
  color: var(--rik-text-default--muted);
379
432
  line-height: 1.4;
380
433
  }
381
- table.dense tr:last-child td { border-bottom: none; }
382
- table.dense td.ok { color: var(--rik-status-success); font-weight: 700; }
383
- table.dense td.no { color: var(--rik-status-danger); }
384
- table.dense td.meh { color: var(--rik-status-warn); }
434
+ deck-root table.dense tr:last-child td { border-bottom: none; }
435
+ deck-root table.dense td.ok { color: var(--rik-status-success); font-weight: 700; }
436
+ deck-root table.dense td.no { color: var(--rik-status-danger); }
437
+ deck-root table.dense td.meh { color: var(--rik-status-warn); }
438
+
439
+ /* deck-table · the table stays in the author's light DOM, so its rules live
440
+ here rather than in a shadow root. Scoped to the deck subtree like every
441
+ other helper.
442
+
443
+ The look is the extras direction applied to data (docs/design/adr-002): the
444
+ header is told apart by weight and one rule, rows by hairlines, and nothing
445
+ is filled except the single row that matters. A pale tint reads as nothing at projection distance
446
+ (the raised surface sits at 1.10 contrast against the page), so emphasis is
447
+ the inverse surface · a dark band across the row. */
448
+ deck-root table[data-rik-table] {
449
+ width: 100%;
450
+ border-collapse: collapse;
451
+ font-variant-numeric: tabular-nums;
452
+ }
453
+ deck-root table[data-rik-table] thead th {
454
+ text-align: left;
455
+ font-weight: 700;
456
+ color: var(--rik-text-default--muted);
457
+ padding: 0 var(--rik-space-4) var(--rik-space-2);
458
+ border-bottom: 2px solid var(--rik-accent);
459
+ }
460
+ deck-root table[data-rik-table] tbody td {
461
+ padding: var(--rik-space-3) var(--rik-space-4);
462
+ border-bottom: 1px solid var(--rik-border-default);
463
+ color: var(--rik-text-default);
464
+ line-height: 1.35;
465
+ }
466
+ deck-root table[data-rik-table] tbody tr:last-child td { border-bottom: none; }
467
+
468
+ /* The emphasised row · one dark band, the only filled thing on the slide. */
469
+ deck-root table[data-rik-table] tr[data-mark] > td {
470
+ background: var(--deck-table-mark-bg, var(--rik-surface-inverse));
471
+ color: var(--deck-table-mark-color, var(--rik-text-inverse));
472
+ border-bottom-color: var(--deck-table-mark-bg, var(--rik-surface-inverse));
473
+ font-weight: 700;
474
+ }
475
+ deck-root table[data-rik-table] tr[data-mark] > td:first-child {
476
+ border-radius: var(--rik-radius-sm) 0 0 var(--rik-radius-sm);
477
+ }
478
+ deck-root table[data-rik-table] tr[data-mark] > td:last-child {
479
+ border-radius: 0 var(--rik-radius-sm) var(--rik-radius-sm) 0;
480
+ }
481
+
482
+ /* The emphasised column · colour and weight, never a second fill · two
483
+ overlapping tints is how a table stops having a hierarchy at all. */
484
+ deck-root table[data-rik-table] td[data-mark],
485
+ deck-root table[data-rik-table] th[data-mark] {
486
+ color: var(--deck-table-col-color, var(--rik-accent__text));
487
+ font-weight: 700;
488
+ }
489
+ deck-root table[data-rik-table] tr[data-mark] > td[data-mark] {
490
+ color: var(--deck-table-col-on-mark, var(--rik-accent));
491
+ }
492
+
493
+ deck-root table[data-rik-table] tr[data-pending] {
494
+ /* Hidden but still occupying its row · a table that grows makes the slide
495
+ jump under the audience. */
496
+ visibility: hidden;
497
+ }
498
+ @media print {
499
+ deck-root table[data-rik-table] tr[data-pending] { visibility: visible; }
500
+ deck-root table[data-rik-table] tr[data-mark] > td {
501
+ -webkit-print-color-adjust: exact;
502
+ print-color-adjust: exact;
503
+ }
504
+ }
@@ -1,11 +0,0 @@
1
- import { LitElement } from 'lit';
2
- export declare class DeckFeature extends LitElement {
3
- static styles: import("lit").CSSResult[];
4
- eyebrow?: string;
5
- render(): import("lit-html").TemplateResult<1>;
6
- }
7
- declare global {
8
- interface HTMLElementTagNameMap {
9
- 'deck-feature': DeckFeature;
10
- }
11
- }
@@ -1,18 +0,0 @@
1
- import { LitElement } from 'lit';
2
- export type DeckSplitCols = '1-1' | '1-2' | '2-1' | '3';
3
- export declare class DeckSplit extends LitElement {
4
- static styles: import("lit").CSSResult[];
5
- eyebrow?: string;
6
- cols?: DeckSplitCols;
7
- gap?: string;
8
- colGap?: string;
9
- /** Map '1'..'6' to var(--sp-N); fall through to raw values otherwise. */
10
- private _resolveSp;
11
- updated(): void;
12
- render(): import("lit-html").TemplateResult<1>;
13
- }
14
- declare global {
15
- interface HTMLElementTagNameMap {
16
- 'deck-split': DeckSplit;
17
- }
18
- }
@@ -1,11 +0,0 @@
1
- import { LitElement } from 'lit';
2
- export declare class DeckTakeaway extends LitElement {
3
- static styles: import("lit").CSSResult[];
4
- kicker?: string;
5
- render(): import("lit-html").TemplateResult<1>;
6
- }
7
- declare global {
8
- interface HTMLElementTagNameMap {
9
- 'deck-takeaway': DeckTakeaway;
10
- }
11
- }
@@ -1,8 +0,0 @@
1
- interface InstallOpts {
2
- /** Shiki theme name (https://shiki.style/themes) · default 'one-dark-pro'. */
3
- theme?: string;
4
- /** Languages to preload · default ['ts', 'js', 'html', 'css', 'json']. */
5
- langs?: string[];
6
- }
7
- export declare function installShiki(opts?: InstallOpts): Promise<void>;
8
- export {};
File without changes
File without changes
File without changes
File without changes