rikiki-deck 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +183 -0
  3. package/dist/deck-badge.d.ts +13 -0
  4. package/dist/deck-badge.d.ts.map +1 -0
  5. package/dist/deck-badge.js +1 -0
  6. package/dist/deck-callout.d.ts +13 -0
  7. package/dist/deck-callout.d.ts.map +1 -0
  8. package/dist/deck-callout.js +1 -0
  9. package/dist/deck-card.d.ts +15 -0
  10. package/dist/deck-card.d.ts.map +1 -0
  11. package/dist/deck-card.js +1 -0
  12. package/dist/deck-code.d.ts +22 -0
  13. package/dist/deck-code.d.ts.map +1 -0
  14. package/dist/deck-code.js +2 -0
  15. package/dist/deck-cover.d.ts +23 -0
  16. package/dist/deck-cover.d.ts.map +1 -0
  17. package/dist/deck-cover.js +10 -0
  18. package/dist/deck-feature-cards.d.ts +12 -0
  19. package/dist/deck-feature-cards.d.ts.map +1 -0
  20. package/dist/deck-feature-cards.js +9 -0
  21. package/dist/deck-feature.d.ts +12 -0
  22. package/dist/deck-feature.d.ts.map +1 -0
  23. package/dist/deck-feature.js +5 -0
  24. package/dist/deck-grid.d.ts +18 -0
  25. package/dist/deck-grid.d.ts.map +1 -0
  26. package/dist/deck-grid.js +1 -0
  27. package/dist/deck-help.d.ts +3 -0
  28. package/dist/deck-help.d.ts.map +1 -0
  29. package/dist/deck-help.js +82 -0
  30. package/dist/deck-kicker.d.ts +6 -0
  31. package/dist/deck-kicker.d.ts.map +1 -0
  32. package/dist/deck-kicker.js +1 -0
  33. package/dist/deck-md.d.ts +14 -0
  34. package/dist/deck-md.d.ts.map +1 -0
  35. package/dist/deck-md.js +3 -0
  36. package/dist/deck-mermaid.d.ts +28 -0
  37. package/dist/deck-mermaid.d.ts.map +1 -0
  38. package/dist/deck-mermaid.js +3 -0
  39. package/dist/deck-metric.d.ts +20 -0
  40. package/dist/deck-metric.d.ts.map +1 -0
  41. package/dist/deck-metric.js +1 -0
  42. package/dist/deck-notes.d.ts +13 -0
  43. package/dist/deck-notes.d.ts.map +1 -0
  44. package/dist/deck-notes.js +1 -0
  45. package/dist/deck-overview.d.ts +16 -0
  46. package/dist/deck-overview.d.ts.map +1 -0
  47. package/dist/deck-overview.js +202 -0
  48. package/dist/deck-photo.d.ts +17 -0
  49. package/dist/deck-photo.d.ts.map +1 -0
  50. package/dist/deck-photo.js +1 -0
  51. package/dist/deck-presenter.d.ts +3 -0
  52. package/dist/deck-presenter.d.ts.map +1 -0
  53. package/dist/deck-presenter.js +148 -0
  54. package/dist/deck-punch.d.ts +18 -0
  55. package/dist/deck-punch.d.ts.map +1 -0
  56. package/dist/deck-punch.js +1 -0
  57. package/dist/deck-root.d.ts +76 -0
  58. package/dist/deck-root.d.ts.map +1 -0
  59. package/dist/deck-root.js +11 -0
  60. package/dist/deck-section.d.ts +12 -0
  61. package/dist/deck-section.d.ts.map +1 -0
  62. package/dist/deck-section.js +3 -0
  63. package/dist/deck-shortcut.d.ts +30 -0
  64. package/dist/deck-shortcut.d.ts.map +1 -0
  65. package/dist/deck-shortcut.js +7 -0
  66. package/dist/deck-split.d.ts +19 -0
  67. package/dist/deck-split.d.ts.map +1 -0
  68. package/dist/deck-split.js +7 -0
  69. package/dist/deck-stack.d.ts +19 -0
  70. package/dist/deck-stack.d.ts.map +1 -0
  71. package/dist/deck-stack.js +1 -0
  72. package/dist/deck-stat.d.ts +15 -0
  73. package/dist/deck-stat.d.ts.map +1 -0
  74. package/dist/deck-stat.js +4 -0
  75. package/dist/deck-step-list.d.ts +18 -0
  76. package/dist/deck-step-list.d.ts.map +1 -0
  77. package/dist/deck-step-list.js +2 -0
  78. package/dist/deck-takeaway.d.ts +12 -0
  79. package/dist/deck-takeaway.d.ts.map +1 -0
  80. package/dist/deck-takeaway.js +4 -0
  81. package/dist/deck-tier-list.d.ts +26 -0
  82. package/dist/deck-tier-list.d.ts.map +1 -0
  83. package/dist/deck-tier-list.js +1 -0
  84. package/dist/deck-transition.d.ts +3 -0
  85. package/dist/deck-transition.d.ts.map +1 -0
  86. package/dist/deck-transition.js +51 -0
  87. package/dist/index.d.ts +25 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +58 -0
  90. package/dist/livereload.d.ts +2 -0
  91. package/dist/livereload.d.ts.map +1 -0
  92. package/dist/livereload.js +1 -0
  93. package/dist/shared-styles.d.ts +5 -0
  94. package/dist/shared-styles.d.ts.map +1 -0
  95. package/dist/shared-styles.js +1 -0
  96. package/dist/shiki-plugin.d.ts +11 -0
  97. package/dist/shiki-plugin.d.ts.map +1 -0
  98. package/dist/shiki-plugin.js +1 -0
  99. package/dist/standalone.js +539 -0
  100. package/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lqDY.woff2 +0 -0
  101. package/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lqDY.woff2 +0 -0
  102. package/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2 +0 -0
  103. package/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2 +0 -0
  104. package/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBduz8A.woff2 +0 -0
  105. package/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRduz8A.woff2 +0 -0
  106. package/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu.woff2 +0 -0
  107. package/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBduz8A.woff2 +0 -0
  108. package/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRduz8A.woff2 +0 -0
  109. package/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu.woff2 +0 -0
  110. package/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBduz8A.woff2 +0 -0
  111. package/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRduz8A.woff2 +0 -0
  112. package/fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2 +0 -0
  113. package/fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2 +0 -0
  114. package/fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2 +0 -0
  115. package/package.json +61 -0
  116. package/themes/rikiki.css +430 -0
  117. package/themes/siliceum-fonts.css +126 -0
  118. package/themes/siliceum.css +380 -0
  119. package/tokens.css +10 -0
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "rikiki-deck",
3
+ "version": "0.1.0",
4
+ "description": "A tiny Lit Web Components framework for technical presentations · zero-build for consumers, TypeScript for contributors.",
5
+ "homepage": "https://rikiki.tordu-jardin.fr",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://gitlab.com/tordu-jardin/rikiki.git"
9
+ },
10
+ "bugs": {
11
+ "url": "https://gitlab.com/tordu-jardin/rikiki/-/issues"
12
+ },
13
+ "type": "module",
14
+ "main": "./dist/index.js",
15
+ "module": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ },
22
+ "./tokens.css": "./tokens.css",
23
+ "./themes/rikiki.css": "./themes/rikiki.css",
24
+ "./themes/siliceum.css": "./themes/siliceum.css",
25
+ "./livereload": "./dist/livereload.js",
26
+ "./dist/*": "./dist/*"
27
+ },
28
+ "files": [
29
+ "dist",
30
+ "tokens.css",
31
+ "themes",
32
+ "fonts",
33
+ "README.md"
34
+ ],
35
+ "scripts": {
36
+ "build": "node build.mjs && tsc --emitDeclarationOnly",
37
+ "watch": "node build.mjs --watch",
38
+ "typecheck": "tsc --noEmit",
39
+ "clean": "rm -rf dist",
40
+ "bundle": "node bundle.mjs"
41
+ },
42
+ "devDependencies": {
43
+ "esbuild": "^0.24.0",
44
+ "lit": "^3.3.3",
45
+ "typescript": "^5.6.0",
46
+ "vite": "^6.4.2",
47
+ "vite-plugin-singlefile": "^2.3.3"
48
+ },
49
+ "peerDependencies": {
50
+ "lit": "^3.3.3"
51
+ },
52
+ "keywords": [
53
+ "lit",
54
+ "web-components",
55
+ "presentation",
56
+ "slides",
57
+ "deck",
58
+ "rikiki"
59
+ ],
60
+ "license": "MIT"
61
+ }
@@ -0,0 +1,430 @@
1
+ /* ════════════════════════════════════════════════════════════════
2
+ RIKIKI · default theme
3
+ Token system · three layers:
4
+ 1. Palette (--rik-palette-*) · raw colors, do NOT consume directly.
5
+ 2. Semantic (--rik-<role>--<modifier>) · this is the public API.
6
+ 3. Component (--deck-<tag>-*) · declared per-component, default to
7
+ semantic tokens; override on the host to retheme one instance.
8
+ To swap the palette, replace this file with one that re-declares the
9
+ same semantic names. Components and decks never see the palette.
10
+ ════════════════════════════════════════════════════════════════ */
11
+
12
+ /* Variable-axis fonts: Unbounded (variable weight 400-900), Inter (variable
13
+ weight 100-900 + opsz), Space Mono static. Switching Inter to its variable
14
+ build cuts the loaded payload to one file and unlocks `font-variation-settings`. */
15
+ @import url('https://fonts.googleapis.com/css2?family=Unbounded:wght@400..900&family=Inter:opsz,wght@14..32,100..900&family=Space+Mono:wght@400;700&display=swap');
16
+
17
+ :root {
18
+ /* ─────────────────────────────────────────────────────────────
19
+ LAYER 1 · PALETTE (private, theme-internal)
20
+ ───────────────────────────────────────────────────────────── */
21
+ --rik-palette-paper-0: #ffffff;
22
+ --rik-palette-paper-50: #faf8f5;
23
+ --rik-palette-paper-100: #f0ede8;
24
+ --rik-palette-paper-200: #e0dbd4;
25
+
26
+ --rik-palette-ink-500: #7a7570;
27
+ --rik-palette-ink-700: #4a4540;
28
+ --rik-palette-ink-900: #2a2520;
29
+
30
+ --rik-palette-night-900: #06080f;
31
+ --rik-palette-night-800: #0a0e18;
32
+ --rik-palette-night-700: #0f1422;
33
+ --rik-palette-night-600: #161c2e;
34
+ --rik-palette-night-500: #1e2840;
35
+ --rik-palette-night-400: #263350;
36
+ --rik-palette-night-100: #e8e4f0;
37
+
38
+ --rik-palette-mango-700: #b65820;
39
+ --rik-palette-mango-500: #f07020;
40
+ --rik-palette-mango-200: rgba(240, 112, 32, 0.50);
41
+ --rik-palette-mango-100: rgba(240, 112, 32, 0.18);
42
+ --rik-palette-mango-50: rgba(240, 112, 32, 0.06);
43
+
44
+ /* Rikiki status tints · saturated, presence. bg alpha 0.18, border 0.70 */
45
+ --rik-palette-ember-500: #e84828;
46
+ --rik-palette-ember-200: rgba(232, 72, 40, 0.70);
47
+ --rik-palette-ember-100: rgba(232, 72, 40, 0.18);
48
+
49
+ --rik-palette-helico-500: #00c8a0;
50
+ --rik-palette-helico-200: rgba(0, 200, 160, 0.70);
51
+ --rik-palette-helico-100: rgba(0, 200, 160, 0.18);
52
+
53
+ --rik-palette-warm-500: #e8581a;
54
+ --rik-palette-warm-200: rgba(232, 88, 26, 0.65);
55
+ --rik-palette-warm-100: rgba(232, 88, 26, 0.18);
56
+
57
+ --rik-palette-orchid-500: #c050e0;
58
+ --rik-palette-lime-500: #b8e830;
59
+ --rik-palette-canary-500: #00ddb0;
60
+
61
+ /* ─────────────────────────────────────────────────────────────
62
+ LAYER 2 · SEMANTIC (consumer-facing, BEM)
63
+ ───────────────────────────────────────────────────────────── */
64
+
65
+ /* Surfaces */
66
+ --rik-surface-page: var(--rik-palette-paper-50);
67
+ --rik-surface-raised: var(--rik-palette-paper-100);
68
+ --rik-surface-raised--strong: var(--rik-palette-paper-0);
69
+ --rik-surface-sunken: var(--rik-palette-paper-100);
70
+ --rik-surface-tint: rgba(42, 37, 32, 0.04);
71
+ --rik-surface-tint--strong: rgba(42, 37, 32, 0.07);
72
+ --rik-surface-inverse: var(--rik-palette-night-900);
73
+ --rik-surface-inverse--soft: var(--rik-palette-night-800);
74
+ --rik-surface-inverse--soft-2: var(--rik-palette-night-700);
75
+ --rik-surface-inverse--soft-3: var(--rik-palette-night-600);
76
+ --rik-surface-inverse--soft-4: var(--rik-palette-night-500);
77
+ --rik-surface-inverse--soft-5: var(--rik-palette-night-400);
78
+ --rik-surface-inverse__overlay: rgba(232, 228, 240, 0.05);
79
+
80
+ /* Text */
81
+ --rik-text-default: var(--rik-palette-ink-900);
82
+ --rik-text-default--muted: var(--rik-palette-ink-700);
83
+ --rik-text-default--faint: var(--rik-palette-ink-500);
84
+ --rik-text-inverse: var(--rik-palette-night-100);
85
+ --rik-text-inverse--muted: rgba(232, 228, 240, 0.72);
86
+ --rik-text-inverse--faint: rgba(232, 228, 240, 0.55);
87
+ --rik-text-inverse--ghost: rgba(232, 228, 240, 0.32);
88
+
89
+ /* Borders */
90
+ --rik-border-default: var(--rik-palette-paper-200);
91
+ --rik-border-default--subtle: rgba(42, 37, 32, 0.06);
92
+ --rik-border-inverse: rgba(232, 228, 240, 0.12);
93
+
94
+ /* Accent (brand) */
95
+ --rik-accent: var(--rik-palette-mango-500);
96
+ --rik-accent--soft: var(--rik-palette-mango-100);
97
+ --rik-accent--faint: var(--rik-palette-mango-50);
98
+ --rik-accent--strong: var(--rik-palette-mango-700);
99
+ --rik-accent__on: var(--rik-palette-paper-0);
100
+
101
+ /* Status · success */
102
+ --rik-status-success: var(--rik-palette-helico-500);
103
+ --rik-status-success__bg: var(--rik-palette-helico-100);
104
+ --rik-status-success__border: var(--rik-palette-helico-200);
105
+
106
+ /* Status · danger */
107
+ --rik-status-danger: var(--rik-palette-ember-500);
108
+ --rik-status-danger__bg: var(--rik-palette-ember-100);
109
+ --rik-status-danger__border: var(--rik-palette-ember-200);
110
+
111
+ /* Status · warn (uses the warm tone, distinct from accent) */
112
+ --rik-status-warn: var(--rik-palette-warm-500);
113
+ --rik-status-warn__bg: var(--rik-palette-warm-100);
114
+ --rik-status-warn__border: var(--rik-palette-warm-200);
115
+
116
+ /* Status · info (low-emphasis accent variant) */
117
+ --rik-status-info: var(--rik-palette-mango-500);
118
+ --rik-status-info__text: var(--rik-palette-mango-700);
119
+ --rik-status-info__bg: var(--rik-palette-mango-50);
120
+ --rik-status-info__bg--mid: rgba(240, 112, 32, 0.12);
121
+ --rik-status-info__bg--strong: rgba(240, 112, 32, 0.20);
122
+ --rik-status-info__border: var(--rik-palette-mango-200);
123
+
124
+ /* Interactive */
125
+ --rik-interactive-bg: transparent;
126
+ --rik-interactive-bg--hover: rgba(42, 37, 32, 0.04);
127
+ --rik-interactive-bg--active: rgba(42, 37, 32, 0.07);
128
+ --rik-interactive-bg--selected: var(--rik-accent--soft);
129
+ --rik-interactive-fg: var(--rik-accent);
130
+ --rik-interactive-fg--hover: var(--rik-accent--strong);
131
+
132
+ /* Focus ring */
133
+ --rik-focus-ring: var(--rik-accent);
134
+ --rik-focus-ring--width: 2px;
135
+ --rik-focus-ring--offset: 2px;
136
+
137
+ /* Link · mango-500 on paper is 3.2:1 (fails WCAG AA for body text).
138
+ Default link uses mango-700 (≥4.5:1); hover bumps to the brighter
139
+ accent for visual feedback. */
140
+ --rik-link: var(--rik-accent--strong);
141
+ --rik-link--hover: var(--rik-accent);
142
+ --rik-link--visited: var(--rik-palette-orchid-500);
143
+
144
+ /* Selection */
145
+ --rik-selection__bg: var(--rik-accent);
146
+ --rik-selection__text: var(--rik-palette-paper-0);
147
+
148
+ /* Decorative palette (when a slide explicitly needs a hue) */
149
+ --rik-decor-orchid: var(--rik-palette-orchid-500);
150
+ --rik-decor-lime: var(--rik-palette-lime-500);
151
+ --rik-decor-canary: var(--rik-palette-canary-500);
152
+
153
+ /* Elevation */
154
+ --rik-elevation-1: 0 1px 2px rgba(6, 8, 15, 0.04);
155
+ --rik-elevation-2: 0 1px 3px rgba(6, 8, 15, 0.06), 0 4px 12px rgba(6, 8, 15, 0.06);
156
+ --rik-elevation-3: 0 2px 6px rgba(6, 8, 15, 0.10), 0 8px 20px rgba(6, 8, 15, 0.10);
157
+
158
+ /* Motion */
159
+ --rik-motion-fast: 120ms;
160
+ --rik-motion-base: 200ms;
161
+ --rik-motion-slow: 400ms;
162
+ --rik-motion__ease-out: cubic-bezier(0.16, 1, 0.3, 1);
163
+ --rik-motion__ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
164
+ --rik-motion__ease-spring: cubic-bezier(0.5, 1.8, 0.3, 1);
165
+
166
+ /* Z-index scale */
167
+ --rik-z-base: 0;
168
+ --rik-z-sticky: 200;
169
+ --rik-z-overlay: 300;
170
+ --rik-z-modal: 400;
171
+ --rik-z-toast: 500;
172
+ --rik-z-tooltip: 600;
173
+
174
+ /* Typography · families */
175
+ --rik-font-sans: 'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;
176
+ --rik-font-display: 'Unbounded', 'Inter', system-ui, sans-serif;
177
+ --rik-font-mono: 'Space Mono', 'JetBrains Mono', ui-monospace, monospace;
178
+
179
+ /* Typography · body scale · modular ratio 1.25 (major third) from 1rem.
180
+ html root-size is `clamp(14px, 2.35vh, 42px)` so rems scale with viewport.
181
+ New `--rik-text-*` aliases follow a documented t-shirt scale; the
182
+ historical `--rik-font-size-*` names map to the same values for back-compat. */
183
+ --rik-text-2xs: 0.64rem; /* 1 / 1.25^2 */
184
+ --rik-text-xs: 0.8rem; /* 1 / 1.25 */
185
+ --rik-text-sm: 1rem;
186
+ --rik-text-base: 1.25rem; /* 1.25 */
187
+ --rik-text-md: 1.563rem; /* 1.25^2 */
188
+ --rik-text-lg: 1.953rem; /* 1.25^3 */
189
+ --rik-text-xl: 2.441rem; /* 1.25^4 */
190
+ --rik-text-2xl: 3.052rem; /* 1.25^5 */
191
+ --rik-text-3xl: 3.815rem; /* 1.25^6 */
192
+ --rik-text-4xl: 4.768rem; /* 1.25^7 */
193
+
194
+ /* Legacy names · kept aligned to the new scale.
195
+ Fixed in 2026-05-20: --rik-font-size-mega was smaller than -big · the
196
+ order is now monotonic (strong < big < mega < hook < stat). */
197
+ --rik-font-size-xs: var(--rik-text-2xs);
198
+ --rik-font-size-sm: var(--rik-text-xs);
199
+ --rik-font-size-body: 0.92rem; /* between -xs and -sm */
200
+ --rik-font-size-lead: var(--rik-text-sm);
201
+ --rik-font-size-h2: var(--rik-text-base);
202
+ --rik-font-size-h1: var(--rik-text-md);
203
+ --rik-font-size-section: var(--rik-text-lg);
204
+ --rik-font-size-display: var(--rik-text-xl);
205
+ --rik-font-size-mono: 0.88rem;
206
+ --rik-font-size-mono-sm: var(--rik-text-xs);
207
+
208
+ /* Display-class · big numbers, hook punchlines */
209
+ --rik-font-size-strong: var(--rik-text-base); /* 1.25rem */
210
+ --rik-font-size-big: var(--rik-text-lg); /* 1.953rem */
211
+ --rik-font-size-mega: var(--rik-text-2xl); /* 3.052rem · now > big */
212
+ --rik-font-size-hook: clamp(2.2rem, 4.5vw, 3.8rem);
213
+ --rik-font-size-stat: clamp(3.5rem, 7vw, 5.5rem);
214
+
215
+ /* Spacing */
216
+ --rik-space-hair: 4px;
217
+ --rik-space-2xs: 6px;
218
+ --rik-space-1: 0.5rem;
219
+ --rik-space-2: 0.75rem;
220
+ --rik-space-3: 1rem;
221
+ --rik-space-4: 1.5rem;
222
+ --rik-space-5: 2.25rem;
223
+ --rik-space-6: 3.5rem;
224
+
225
+ /* Radius */
226
+ --rik-radius-xs: 6px;
227
+ --rik-radius-sm: 8px;
228
+ --rik-radius-md: 14px;
229
+ --rik-radius-lg: 20px;
230
+ --rik-radius-pill: 9999px;
231
+
232
+ /* Icon sizes */
233
+ --rik-icon-xs: 16px;
234
+ --rik-icon-sm: 22px;
235
+ --rik-icon-md: 28px;
236
+ --rik-icon-lg: 40px;
237
+ --rik-icon-xl: 56px;
238
+ --rik-icon-2xl: 72px;
239
+
240
+ /* Opacity scale */
241
+ --rik-opacity-faint: 0.5;
242
+ --rik-opacity-soft: 0.7;
243
+
244
+ /* Slide layout */
245
+ --rik-slide-padding-y: 3.5rem;
246
+ --rik-slide-padding-x: 4rem;
247
+ --rik-title-block: 4.5rem;
248
+
249
+ /* Code surface + syntax (BEM elements under "code") */
250
+ --rik-code__bg: #0f0f10;
251
+ --rik-code__border: #232325;
252
+ --rik-code__text: #f4f4f5;
253
+ --rik-code__syntax-comment: #8b95a0;
254
+ --rik-code__syntax-keyword: #c792ea;
255
+ --rik-code__syntax-string: #c3e88d;
256
+ --rik-code__syntax-number: #f78c6c;
257
+ --rik-code__syntax-type: #ffcb6b;
258
+ --rik-code__syntax-property: #80cbc4;
259
+ --rik-code__syntax-function: #82aaff;
260
+ }
261
+
262
+ /* Reduced motion · zero out durations and replace the spring ease with a
263
+ linear out-curve. Per Yannick: the spring overshoot (1.8) is a vestibular
264
+ trigger. WCAG 2.3.3 compliance. */
265
+ @media (prefers-reduced-motion: reduce) {
266
+ :root {
267
+ --rik-motion-fast: 0ms;
268
+ --rik-motion-base: 0ms;
269
+ --rik-motion-slow: 0ms;
270
+ --rik-motion__ease-spring: var(--rik-motion__ease-out);
271
+ }
272
+ }
273
+
274
+ /* ────────────────────────────────────────────────────────────────
275
+ Minimal reset (don't override the padding of slotted components)
276
+ ──────────────────────────────────────────────────────────────── */
277
+ *, *::before, *::after { box-sizing: border-box; }
278
+ body, h1, h2, h3, h4, p, ul, ol, li, blockquote, pre, table, td, th,
279
+ figure, dl, dd { margin: 0; padding: 0; }
280
+ html { font-size: clamp(14px, 2.35vh, 42px); }
281
+ html, body { width: 100%; height: 100%; overflow: hidden; background: var(--rik-surface-page); }
282
+ body { font-family: var(--rik-font-sans); color: var(--rik-text-default); }
283
+
284
+ ::selection { background: var(--rik-selection__bg); color: var(--rik-selection__text); }
285
+
286
+ /* ────────────────────────────────────────────────────────────────
287
+ Light-DOM helpers (apply to slotted children of deck-* hosts)
288
+ ──────────────────────────────────────────────────────────────── */
289
+ .accent { color: var(--rik-accent); }
290
+ .accent-danger { color: var(--rik-status-danger); }
291
+ .accent-warn { color: var(--rik-status-warn); }
292
+ .accent-success { color: var(--rik-status-success); }
293
+ .accent-orchid { color: var(--rik-decor-orchid); }
294
+ .accent-lime { color: var(--rik-decor-lime); }
295
+
296
+ .sub {
297
+ font-size: var(--rik-font-size-h2);
298
+ color: var(--rik-text-inverse--muted);
299
+ line-height: 1.45;
300
+ max-width: 60ch;
301
+ }
302
+ .display {
303
+ font-family: var(--rik-font-display);
304
+ font-size: clamp(3rem, 7vw, 5.5rem);
305
+ font-weight: 900;
306
+ line-height: 1.05;
307
+ letter-spacing: -0.03em;
308
+ }
309
+ .display.danger { color: var(--rik-status-danger); }
310
+ .caption.on-dark { color: var(--rik-text-inverse--muted); font-size: var(--rik-font-size-lead); }
311
+ .lead {
312
+ font-size: var(--rik-font-size-lead);
313
+ color: var(--rik-text-default--faint);
314
+ line-height: 1.5;
315
+ max-width: 75ch;
316
+ }
317
+
318
+ /* Slide titles (h1 in light DOM, slotted) */
319
+ deck-feature > h1,
320
+ deck-split > h1,
321
+ deck-feature-cards > h1 {
322
+ font-family: var(--rik-font-display);
323
+ font-size: var(--rik-font-size-h1);
324
+ font-weight: 800;
325
+ color: var(--rik-text-default);
326
+ letter-spacing: -0.025em;
327
+ line-height: 1.1;
328
+ margin-bottom: var(--rik-space-4);
329
+ padding-bottom: var(--rik-space-2);
330
+ border-bottom: 4px solid var(--rik-accent);
331
+ display: inline-block;
332
+ align-self: flex-start;
333
+ }
334
+ deck-cover > h1 {
335
+ font-family: var(--rik-font-display);
336
+ font-size: clamp(3.6rem, 9vw, 8.5rem);
337
+ font-weight: 900;
338
+ color: var(--rik-text-inverse);
339
+ line-height: 1.02;
340
+ letter-spacing: -0.035em;
341
+ margin-bottom: var(--rik-space-4);
342
+ }
343
+ deck-section > h1 {
344
+ font-family: var(--rik-font-display);
345
+ font-size: var(--rik-font-size-section);
346
+ font-weight: 900;
347
+ color: var(--rik-accent);
348
+ line-height: 1.02;
349
+ letter-spacing: -0.03em;
350
+ max-width: 18ch;
351
+ text-align: center;
352
+ }
353
+ deck-section > h1 em {
354
+ color: var(--rik-text-inverse--muted);
355
+ font-style: normal;
356
+ font-weight: 700;
357
+ }
358
+
359
+ /* Slotted sub-headings */
360
+ deck-cover > .sub, deck-cover > p.sub {
361
+ display: block;
362
+ font-size: var(--rik-font-size-h2);
363
+ color: var(--rik-text-inverse--muted);
364
+ margin-bottom: var(--rik-space-6);
365
+ max-width: 60ch;
366
+ line-height: 1.45;
367
+ }
368
+
369
+ deck-feature > .lead,
370
+ deck-split > .lead,
371
+ deck-feature-cards > .lead {
372
+ display: block;
373
+ font-size: var(--rik-font-size-lead);
374
+ color: var(--rik-text-default--faint);
375
+ line-height: 1.5;
376
+ margin-bottom: var(--rik-space-4);
377
+ max-width: 75ch;
378
+ }
379
+
380
+ /* Inline code in light DOM (slotted) */
381
+ deck-feature code, deck-split code, deck-feature-cards code, deck-md code {
382
+ font-family: var(--rik-font-mono);
383
+ font-size: var(--rik-font-size-mono-sm);
384
+ background: var(--rik-surface-tint);
385
+ padding: 2px 6px;
386
+ border-radius: var(--rik-radius-sm);
387
+ color: var(--rik-text-default);
388
+ }
389
+ deck-code code { all: unset; }
390
+
391
+ /* Light-DOM utility blocks */
392
+ .card-text {
393
+ font-size: var(--rik-font-size-body);
394
+ color: var(--rik-text-default--muted);
395
+ line-height: 1.55;
396
+ margin: 0;
397
+ }
398
+
399
+ table.dense {
400
+ width: 100%;
401
+ border-collapse: separate;
402
+ border-spacing: 0;
403
+ font-size: var(--rik-font-size-body);
404
+ border: 1px solid var(--rik-border-default);
405
+ border-radius: var(--rik-radius-md);
406
+ overflow: hidden;
407
+ background: var(--rik-surface-raised--strong);
408
+ box-shadow: var(--rik-elevation-2);
409
+ }
410
+ table.dense th {
411
+ text-align: left;
412
+ padding: 10px var(--rik-space-3);
413
+ color: var(--rik-text-default--faint);
414
+ font-size: var(--rik-font-size-xs);
415
+ font-weight: 700;
416
+ text-transform: uppercase;
417
+ letter-spacing: 0.08em;
418
+ border-bottom: 1px solid var(--rik-border-default);
419
+ background: var(--rik-surface-sunken);
420
+ }
421
+ table.dense td {
422
+ padding: 10px var(--rik-space-3);
423
+ border-bottom: 1px solid var(--rik-border-default);
424
+ color: var(--rik-text-default--muted);
425
+ line-height: 1.4;
426
+ }
427
+ table.dense tr:last-child td { border-bottom: none; }
428
+ table.dense td.ok { color: var(--rik-status-success); font-weight: 700; }
429
+ table.dense td.no { color: var(--rik-status-danger); }
430
+ table.dense td.meh { color: var(--rik-status-warn); }
@@ -0,0 +1,126 @@
1
+ /* ════════════════════════════════════════════════════════════════
2
+ RIKIKI · Siliceum theme fonts
3
+ Source Sans Pro (400, 600, 700, 900) + JetBrains Mono (400, 600)
4
+ Subsets latin + latin-ext. Self-hosted woff2 in ../fonts/
5
+ ════════════════════════════════════════════════════════════════ */
6
+
7
+ /* latin-ext */
8
+ @font-face {
9
+ font-family: 'JetBrains Mono';
10
+ font-style: normal;
11
+ font-weight: 400;
12
+ font-display: swap;
13
+ src: url(../fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2');
14
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
15
+ }
16
+
17
+ /* latin */
18
+ @font-face {
19
+ font-family: 'JetBrains Mono';
20
+ font-style: normal;
21
+ font-weight: 400;
22
+ font-display: swap;
23
+ src: url(../fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2');
24
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
25
+ }
26
+
27
+ /* latin-ext */
28
+ @font-face {
29
+ font-family: 'JetBrains Mono';
30
+ font-style: normal;
31
+ font-weight: 600;
32
+ font-display: swap;
33
+ src: url(../fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2');
34
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
35
+ }
36
+
37
+ /* latin */
38
+ @font-face {
39
+ font-family: 'JetBrains Mono';
40
+ font-style: normal;
41
+ font-weight: 600;
42
+ font-display: swap;
43
+ src: url(../fonts/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2');
44
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
45
+ }
46
+
47
+ /* latin-ext */
48
+ @font-face {
49
+ font-family: 'Source Sans Pro';
50
+ font-style: normal;
51
+ font-weight: 400;
52
+ font-display: swap;
53
+ src: url(../fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lqDY.woff2) format('woff2');
54
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
55
+ }
56
+
57
+ /* latin */
58
+ @font-face {
59
+ font-family: 'Source Sans Pro';
60
+ font-style: normal;
61
+ font-weight: 400;
62
+ font-display: swap;
63
+ src: url(../fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2) format('woff2');
64
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
65
+ }
66
+
67
+ /* latin-ext */
68
+ @font-face {
69
+ font-family: 'Source Sans Pro';
70
+ font-style: normal;
71
+ font-weight: 600;
72
+ font-display: swap;
73
+ src: url(../fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRduz8A.woff2) format('woff2');
74
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
75
+ }
76
+
77
+ /* latin */
78
+ @font-face {
79
+ font-family: 'Source Sans Pro';
80
+ font-style: normal;
81
+ font-weight: 600;
82
+ font-display: swap;
83
+ src: url(../fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2) format('woff2');
84
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
85
+ }
86
+
87
+ /* latin-ext */
88
+ @font-face {
89
+ font-family: 'Source Sans Pro';
90
+ font-style: normal;
91
+ font-weight: 700;
92
+ font-display: swap;
93
+ src: url(../fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRduz8A.woff2) format('woff2');
94
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
95
+ }
96
+
97
+ /* latin */
98
+ @font-face {
99
+ font-family: 'Source Sans Pro';
100
+ font-style: normal;
101
+ font-weight: 700;
102
+ font-display: swap;
103
+ src: url(../fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu.woff2) format('woff2');
104
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
105
+ }
106
+
107
+ /* latin-ext */
108
+ @font-face {
109
+ font-family: 'Source Sans Pro';
110
+ font-style: normal;
111
+ font-weight: 900;
112
+ font-display: swap;
113
+ src: url(../fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRduz8A.woff2) format('woff2');
114
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
115
+ }
116
+
117
+ /* latin */
118
+ @font-face {
119
+ font-family: 'Source Sans Pro';
120
+ font-style: normal;
121
+ font-weight: 900;
122
+ font-display: swap;
123
+ src: url(../fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu.woff2) format('woff2');
124
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
125
+ }
126
+