@dollhousemcp/mcp-server 2.0.3 → 2.0.5

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 (51) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/generated/version.d.ts +2 -2
  3. package/dist/generated/version.js +3 -3
  4. package/dist/index.js +7 -1
  5. package/dist/seed-elements/memories/dollhousemcp-baseline-knowledge.yaml +149 -0
  6. package/dist/seed-elements/memories/how-to-create-custom-auto-load-memories.yaml +455 -0
  7. package/dist/seed-elements/memories/priority-best-practices-for-teams.yaml +542 -0
  8. package/dist/seed-elements/memories/token-estimation-guidelines.yaml +602 -0
  9. package/dist/utils/logger.d.ts +7 -0
  10. package/dist/utils/logger.d.ts.map +1 -1
  11. package/dist/utils/logger.js +13 -3
  12. package/dist/web/console/LeaderElection.d.ts +10 -0
  13. package/dist/web/console/LeaderElection.d.ts.map +1 -1
  14. package/dist/web/console/LeaderElection.js +44 -1
  15. package/dist/web/console/LeaderForwardingSink.d.ts +3 -1
  16. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
  17. package/dist/web/console/LeaderForwardingSink.js +24 -6
  18. package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
  19. package/dist/web/console/UnifiedConsole.js +12 -3
  20. package/dist/web/public/fonts/ibmplexmono--F63fjptAgt5VM-kVkqdyU8n1i8q131nj-o.woff2 +0 -0
  21. package/dist/web/public/fonts/ibmplexmono--F63fjptAgt5VM-kVkqdyU8n1iAq131nj-otFQ.woff2 +0 -0
  22. package/dist/web/public/fonts/ibmplexmono--F63fjptAgt5VM-kVkqdyU8n1iEq131nj-otFQ.woff2 +0 -0
  23. package/dist/web/public/fonts/ibmplexmono--F63fjptAgt5VM-kVkqdyU8n1iIq131nj-otFQ.woff2 +0 -0
  24. package/dist/web/public/fonts/ibmplexmono--F63fjptAgt5VM-kVkqdyU8n1isq131nj-otFQ.woff2 +0 -0
  25. package/dist/web/public/fonts/ibmplexmono--F6qfjptAgt5VM-kVkqdyU8n3twJwl1FgsAXHNlYzg.woff2 +0 -0
  26. package/dist/web/public/fonts/ibmplexmono--F6qfjptAgt5VM-kVkqdyU8n3twJwl5FgsAXHNlYzg.woff2 +0 -0
  27. package/dist/web/public/fonts/ibmplexmono--F6qfjptAgt5VM-kVkqdyU8n3twJwl9FgsAXHNlYzg.woff2 +0 -0
  28. package/dist/web/public/fonts/ibmplexmono--F6qfjptAgt5VM-kVkqdyU8n3twJwlBFgsAXHNk.woff2 +0 -0
  29. package/dist/web/public/fonts/ibmplexmono--F6qfjptAgt5VM-kVkqdyU8n3twJwlRFgsAXHNlYzg.woff2 +0 -0
  30. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggOxSvfedN62Zw.woff2 +0 -0
  31. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggSxSvfedN62Zw.woff2 +0 -0
  32. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggexSvfedN4.woff2 +0 -0
  33. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggixSvfedN62Zw.woff2 +0 -0
  34. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggmxSvfedN62Zw.woff2 +0 -0
  35. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggqxSvfedN62Zw.woff2 +0 -0
  36. package/dist/web/public/fonts/plusjakartasans-LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yygg_vb.woff2 +0 -0
  37. package/dist/web/public/fonts/plusjakartasans-LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko40yygg_vbd-E.woff2 +0 -0
  38. package/dist/web/public/fonts/plusjakartasans-LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko50yygg_vbd-E.woff2 +0 -0
  39. package/dist/web/public/fonts/plusjakartasans-LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko70yygg_vbd-E.woff2 +0 -0
  40. package/dist/web/public/fonts.css +270 -0
  41. package/dist/web/public/index.html +365 -0
  42. package/dist/web/public/logs.css +472 -0
  43. package/dist/web/public/metrics.css +238 -0
  44. package/dist/web/public/permissions.css +364 -0
  45. package/dist/web/public/sessions.css +235 -0
  46. package/dist/web/public/setup.css +648 -0
  47. package/dist/web/public/styles.css +1717 -0
  48. package/dist/web/server.d.ts.map +1 -1
  49. package/dist/web/server.js +3 -2
  50. package/package.json +3 -1
  51. package/server.json +2 -2
@@ -0,0 +1,1717 @@
1
+ /**
2
+ * DollhouseMCP Collection — Atelier Design Language
3
+ *
4
+ * Fonts: Plus Jakarta Sans (headings) · Manrope (body) · IBM Plex Mono (utility)
5
+ * Palette: Signal blue · Accent orange · Paper/Ink neutrals · 6 element-type lanes
6
+ * Modes: light (default) · dark (data-theme="dark")
7
+ */
8
+
9
+ /* ── Tokens ─────────────────────────────────────────────────────────────── */
10
+
11
+ :root {
12
+ --ink-950: #0a1020;
13
+ --ink-900: #18243a;
14
+ --ink-700: #324563;
15
+ --ink-500: #677893;
16
+ --line: #c8d5e9;
17
+ --paper: #f3f7ff;
18
+ --paper-strong: #ffffff;
19
+ --surface-1: #eaf1ff;
20
+ --surface-2: #f8fbff;
21
+ --signal: #1e40af;
22
+ --signal-2: #3b82f6;
23
+ --accent: #f97316;
24
+ --accent-soft: #fff1e5;
25
+ --violet: #7c3aed;
26
+ --teal: #2d8c80;
27
+ --radius-sm: 0.42rem;
28
+ --radius-md: 0.85rem;
29
+ --radius-lg: 1.3rem;
30
+ --radius-angled: 0.95rem;
31
+ --shadow-soft: 0 0.95rem 1.8rem -1.15rem rgba(17, 40, 74, 0.28);
32
+ --shadow-card: 0 1.5rem 2.9rem -1.35rem rgba(13, 35, 69, 0.34);
33
+ --max-width: 76rem;
34
+ --gutter: clamp(1rem, 0.72rem + 1.15vw, 1.95rem);
35
+ --font-body: "Manrope", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
36
+ --font-heading: "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
37
+ --font-mono: "IBM Plex Mono", "SFMono-Regular", Consolas, monospace;
38
+ --step--1: clamp(0.78rem, 0.75rem + 0.15vw, 0.87rem);
39
+ --step-0: clamp(0.93rem, 0.88rem + 0.25vw, 1.05rem);
40
+ --step-1: clamp(1.1rem, 1rem + 0.5vw, 1.28rem);
41
+ --step-2: clamp(1.3rem, 1.16rem + 0.7vw, 1.6rem);
42
+ --step-3: clamp(1.6rem, 1.4rem + 1vw, 2.1rem);
43
+ --step-4: clamp(1.9rem, 1.7rem + 1.1vw, 2.6rem);
44
+ }
45
+
46
+ [data-theme="dark"] {
47
+ --ink-950: #f6f9fd;
48
+ --ink-900: #dce6f2;
49
+ --ink-700: #a8bcce;
50
+ --ink-500: #7b93a7;
51
+ --line: #2b3445;
52
+ --paper: #111318;
53
+ --paper-strong: #161b24;
54
+ --surface-1: #1c2230;
55
+ --surface-2: #212838;
56
+ --signal: #6fa3f5;
57
+ --signal-2: #4f8eef;
58
+ --accent: #f5883a;
59
+ --accent-soft: #281b0c;
60
+ --shadow-soft: 0 1rem 2rem -1rem rgba(0, 0, 0, 0.4);
61
+ --shadow-card: 0 1.55rem 2.95rem -1.2rem rgba(0, 0, 0, 0.5);
62
+ }
63
+
64
+ /* ── Reset ───────────────────────────────────────────────────────────────── */
65
+
66
+ *, *::before, *::after { box-sizing: border-box; }
67
+ html { scroll-behavior: smooth; }
68
+
69
+ body {
70
+ margin: 0;
71
+ min-height: 100vh;
72
+ color-scheme: light;
73
+ color: var(--ink-900);
74
+ background:
75
+ radial-gradient(110% 55% at 0% 0%,
76
+ color-mix(in srgb, var(--signal-2) 7%, transparent), transparent 55%),
77
+ radial-gradient(85% 45% at 100% 0%,
78
+ color-mix(in srgb, var(--accent) 4%, transparent), transparent 50%),
79
+ var(--paper);
80
+ font-family: var(--font-body);
81
+ font-size: var(--step-0);
82
+ line-height: 1.62;
83
+ position: relative;
84
+ }
85
+
86
+ [data-theme="dark"] body {
87
+ color-scheme: dark;
88
+ background:
89
+ radial-gradient(110% 55% at 0% 0%,
90
+ color-mix(in srgb, var(--signal-2) 2%, transparent), transparent 55%),
91
+ radial-gradient(85% 45% at 100% 0%,
92
+ color-mix(in srgb, var(--accent) 2%, transparent), transparent 50%),
93
+ var(--paper);
94
+ }
95
+
96
+ /* Subtle crosshatch noise */
97
+ .page-noise {
98
+ position: fixed;
99
+ inset: 0;
100
+ pointer-events: none;
101
+ background-image:
102
+ linear-gradient(135deg, color-mix(in srgb, var(--signal) 4%, transparent) 0.75px, transparent 0.75px),
103
+ linear-gradient(45deg, color-mix(in srgb, var(--accent) 3%, transparent) 0.75px, transparent 0.75px);
104
+ background-size: 24px 24px, 34px 34px;
105
+ z-index: -3;
106
+ }
107
+
108
+ a {
109
+ color: var(--signal);
110
+ text-decoration-thickness: 0.08em;
111
+ text-underline-offset: 0.16em;
112
+ }
113
+ a:hover { color: var(--accent); }
114
+
115
+ h1, h2, h3, h4 {
116
+ color: var(--ink-950);
117
+ font-family: var(--font-heading);
118
+ font-weight: 800;
119
+ letter-spacing: -0.008em;
120
+ line-height: 1.14;
121
+ margin: 0 0 0.5em;
122
+ }
123
+
124
+ h1 { font-size: var(--step-4); }
125
+ h2 { font-size: var(--step-3); }
126
+ h3 { font-size: var(--step-2); }
127
+
128
+ p, li { max-width: 69ch; }
129
+
130
+ /* ── Accessibility ───────────────────────────────────────────────────────── */
131
+
132
+ .sr-only {
133
+ position: absolute;
134
+ width: 1px; height: 1px;
135
+ padding: 0; margin: -1px;
136
+ overflow: hidden;
137
+ clip: rect(0, 0, 0, 0);
138
+ border: 0;
139
+ }
140
+
141
+ /* ── Site header ─────────────────────────────────────────────────────────── */
142
+
143
+ .site-header {
144
+ position: sticky;
145
+ top: 0;
146
+ z-index: 35;
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: space-between;
150
+ gap: 1rem;
151
+ padding: 0.55rem var(--gutter);
152
+ border-bottom: 1px solid var(--line);
153
+ background: color-mix(in srgb, var(--paper-strong) 90%, transparent);
154
+ backdrop-filter: blur(8px);
155
+ }
156
+
157
+ .site-header::after {
158
+ content: "";
159
+ position: absolute;
160
+ left: 0; right: 0; bottom: -1px;
161
+ height: 2px;
162
+ background: linear-gradient(90deg,
163
+ color-mix(in srgb, var(--signal) 10%, transparent),
164
+ color-mix(in srgb, var(--accent) 12%, transparent),
165
+ color-mix(in srgb, var(--signal) 10%, transparent));
166
+ pointer-events: none;
167
+ }
168
+
169
+ .header-brand { display: flex; flex-direction: column; gap: 0.05rem; }
170
+
171
+ .site-title {
172
+ font-family: var(--font-heading);
173
+ font-size: var(--step-1);
174
+ font-weight: 800;
175
+ color: var(--ink-950);
176
+ margin: 0;
177
+ line-height: 1.2;
178
+ }
179
+
180
+ .site-tagline {
181
+ margin: 0;
182
+ font-size: var(--step--1);
183
+ color: var(--ink-700);
184
+ max-width: none;
185
+ }
186
+
187
+ .header-right {
188
+ display: flex;
189
+ align-items: center;
190
+ gap: 0.65rem;
191
+ flex-shrink: 0;
192
+ }
193
+
194
+ .site-stats {
195
+ display: flex;
196
+ align-items: center;
197
+ gap: 0.5rem;
198
+ font-family: var(--font-mono);
199
+ font-size: 0.72rem;
200
+ color: var(--ink-500);
201
+ }
202
+
203
+ .stat {
204
+ display: inline-flex;
205
+ align-items: baseline;
206
+ gap: 0.24rem;
207
+ border: 1px solid color-mix(in srgb, var(--line) 88%, var(--paper-strong));
208
+ border-radius: 0.32rem;
209
+ background: color-mix(in srgb, var(--surface-2) 65%, var(--paper-strong));
210
+ padding: 0.14rem 0.44rem;
211
+ }
212
+
213
+ .stat strong {
214
+ font-family: var(--font-heading);
215
+ font-size: var(--step-0);
216
+ font-weight: 800;
217
+ color: var(--ink-950);
218
+ }
219
+
220
+ /* Theme toggle */
221
+ .theme-toggle {
222
+ border: 1px solid color-mix(in srgb, var(--signal) 24%, var(--line));
223
+ border-radius: 999px;
224
+ background: color-mix(in srgb, var(--surface-1) 70%, var(--paper-strong));
225
+ color: var(--ink-700);
226
+ font: inherit;
227
+ width: 2rem;
228
+ height: 2rem;
229
+ display: inline-flex;
230
+ align-items: center;
231
+ justify-content: center;
232
+ font-size: 0.9rem;
233
+ padding: 0;
234
+ cursor: pointer;
235
+ flex-shrink: 0;
236
+ }
237
+ .theme-toggle:hover,
238
+ .theme-toggle:focus-visible {
239
+ background: color-mix(in srgb, var(--surface-1) 88%, var(--paper-strong));
240
+ outline: 2px solid var(--signal);
241
+ outline-offset: 2px;
242
+ }
243
+ .theme-toggle-icon { line-height: 1; }
244
+
245
+ /* ── Main layout ─────────────────────────────────────────────────────────── */
246
+
247
+ .site-main {
248
+ width: min(var(--max-width), calc(100% - 2 * var(--gutter)));
249
+ margin: 0 auto;
250
+ padding: clamp(1.1rem, 3vw, 2rem) 0 3rem;
251
+ }
252
+
253
+ /* ── Browse controls ─────────────────────────────────────────────────────── */
254
+
255
+ .browse-controls {
256
+ display: flex;
257
+ flex-direction: column;
258
+ gap: 0.72rem;
259
+ margin-bottom: 0.85rem;
260
+ }
261
+
262
+ .search-input {
263
+ width: 100%;
264
+ font-family: var(--font-body);
265
+ font-size: var(--step-0);
266
+ color: var(--ink-900);
267
+ background: color-mix(in srgb, var(--paper-strong) 94%, var(--surface-1));
268
+ border: 1px solid color-mix(in srgb, var(--signal) 18%, var(--line));
269
+ border-radius: var(--radius-md);
270
+ padding: 0.55rem 0.82rem;
271
+ outline: none;
272
+ transition: border-color 160ms ease, box-shadow 160ms ease;
273
+ }
274
+ .search-input::placeholder { color: var(--ink-500); }
275
+ .search-input:focus {
276
+ border-color: var(--signal-2);
277
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal-2) 15%, transparent);
278
+ }
279
+
280
+ /* Type filter row — filter chips + portfolio button side by side */
281
+ .type-filter-row {
282
+ display: flex;
283
+ align-items: flex-start;
284
+ gap: 0.5rem;
285
+ flex-wrap: wrap;
286
+ }
287
+
288
+ /* Type filter chips */
289
+ .type-filters {
290
+ display: flex;
291
+ flex-wrap: wrap;
292
+ gap: 0.35rem;
293
+ flex: 1;
294
+ }
295
+
296
+ .type-filter {
297
+ appearance: none;
298
+ border: 1px solid color-mix(in srgb, var(--line) 90%, var(--ink-700));
299
+ border-radius: 0.32rem;
300
+ background: color-mix(in srgb, var(--surface-2) 68%, var(--paper-strong));
301
+ color: var(--ink-500);
302
+ font-family: var(--font-mono);
303
+ font-size: 0.68rem;
304
+ font-weight: 500;
305
+ letter-spacing: 0.04em;
306
+ text-transform: uppercase;
307
+ padding: 0.2rem 0.52rem;
308
+ cursor: pointer;
309
+ transition: background 120ms ease, border-color 120ms ease, color 120ms ease;
310
+ }
311
+ .type-filter:hover {
312
+ background: color-mix(in srgb, var(--surface-1) 75%, var(--paper-strong));
313
+ color: var(--ink-700);
314
+ border-color: color-mix(in srgb, var(--signal) 20%, var(--line));
315
+ }
316
+ .type-filter.active {
317
+ background: linear-gradient(120deg, var(--signal-2), var(--signal));
318
+ border-color: transparent;
319
+ color: #fff;
320
+ }
321
+ .type-filter:focus-visible {
322
+ outline: 2px solid var(--signal);
323
+ outline-offset: 2px;
324
+ }
325
+
326
+ /* Type-specific active states */
327
+ .type-filter[data-type="agent"].active { background: linear-gradient(120deg, #5c9cfb, #1e40af); }
328
+ .type-filter[data-type="skill"].active { background: linear-gradient(120deg, #34d399, #15803d); }
329
+ .type-filter[data-type="persona"].active { background: linear-gradient(120deg, #d468e8, #9113a8); }
330
+ .type-filter[data-type="template"].active { background: linear-gradient(120deg, #38bdf8, #0e7490); }
331
+ .type-filter[data-type="memory"].active { background: linear-gradient(120deg, #f5b942, #a16207); }
332
+ .type-filter[data-type="ensemble"].active { background: linear-gradient(120deg, #f5893a, #b43410); }
333
+ .type-filter[data-type="prompt"].active { background: linear-gradient(120deg, #2dd4bf, #0f766e); }
334
+ .type-filter[data-type="tool"].active { background: linear-gradient(120deg, #94a3b8, #334155); }
335
+
336
+ /* Dark mode filter chips — lighter stop colors */
337
+ [data-theme="dark"] .type-filter[data-type="agent"].active { background: linear-gradient(120deg, #93bbfd, #4a80e6); }
338
+ [data-theme="dark"] .type-filter[data-type="skill"].active { background: linear-gradient(120deg, #6ee7b7, #2da65a); }
339
+ [data-theme="dark"] .type-filter[data-type="persona"].active { background: linear-gradient(120deg, #e879f9, #c026d3); }
340
+ [data-theme="dark"] .type-filter[data-type="template"].active { background: linear-gradient(120deg, #7dd3fc, #0891b2); }
341
+ [data-theme="dark"] .type-filter[data-type="memory"].active { background: linear-gradient(120deg, #fcd34d, #d97706); }
342
+ [data-theme="dark"] .type-filter[data-type="ensemble"].active { background: linear-gradient(120deg, #fdba74, #ea580c); }
343
+ [data-theme="dark"] .type-filter[data-type="prompt"].active { background: linear-gradient(120deg, #5eead4, #0d9488); }
344
+ [data-theme="dark"] .type-filter[data-type="tool"].active { background: linear-gradient(120deg, #cbd5e1, #64748b); }
345
+
346
+ /* Unavailable elements (404 / missing from branch) */
347
+ .element-card[data-unavailable] {
348
+ opacity: 0.45;
349
+ cursor: default;
350
+ }
351
+ .element-card[data-unavailable]:hover { box-shadow: none; transform: none; }
352
+ .unavailable-badge {
353
+ display: inline-block;
354
+ font-size: 0.62rem;
355
+ font-family: var(--font-mono);
356
+ padding: 0.1rem 0.4rem;
357
+ border-radius: 999px;
358
+ background: color-mix(in srgb, var(--ink-500) 12%, transparent);
359
+ color: var(--ink-500);
360
+ border: 1px solid color-mix(in srgb, var(--ink-500) 20%, transparent);
361
+ margin-left: auto;
362
+ }
363
+
364
+ /* LOCAL badge — shown on portfolio elements */
365
+ .source-badge {
366
+ display: inline-block;
367
+ font-size: 0.58rem;
368
+ font-family: var(--font-mono);
369
+ font-weight: 700;
370
+ letter-spacing: 0.07em;
371
+ padding: 0.08rem 0.38rem;
372
+ border-radius: 0.2rem;
373
+ background: color-mix(in srgb, #f5b942 28%, var(--paper-strong));
374
+ color: color-mix(in srgb, #a16207 90%, var(--ink-800));
375
+ border: 1px solid color-mix(in srgb, #f5b942 55%, transparent);
376
+ flex-shrink: 0;
377
+ }
378
+ [data-theme="dark"] .source-badge {
379
+ background: color-mix(in srgb, #fcd34d 18%, var(--paper-strong));
380
+ color: #fcd34d;
381
+ border-color: color-mix(in srgb, #fcd34d 35%, transparent);
382
+ }
383
+
384
+ /* Portfolio button in browse controls */
385
+ .portfolio-btn {
386
+ appearance: none;
387
+ border: 1px solid var(--line);
388
+ border-radius: 0.32rem;
389
+ padding: 0.38rem 0.85rem;
390
+ font-family: var(--font-mono);
391
+ font-size: 0.76rem;
392
+ font-weight: 600;
393
+ color: var(--ink-600);
394
+ background: var(--paper-strong);
395
+ cursor: pointer;
396
+ white-space: nowrap;
397
+ transition: background 0.15s, border-color 0.15s;
398
+ }
399
+ .portfolio-btn:hover {
400
+ background: color-mix(in srgb, var(--surface-1) 55%, var(--paper-strong));
401
+ border-color: color-mix(in srgb, var(--ink-600) 35%, var(--line));
402
+ }
403
+ .portfolio-btn[data-loaded="true"] {
404
+ border-color: color-mix(in srgb, #f5b942 60%, var(--line));
405
+ color: color-mix(in srgb, #a16207 90%, var(--ink-800));
406
+ }
407
+ [data-theme="dark"] .portfolio-btn[data-loaded="true"] {
408
+ border-color: color-mix(in srgb, #fcd34d 50%, var(--line));
409
+ color: #fcd34d;
410
+ }
411
+
412
+ .filter-count { opacity: 0.68; }
413
+ .type-filter.active .filter-count { opacity: 0.82; }
414
+
415
+ /* ── Results bar ─────────────────────────────────────────────────────────── */
416
+
417
+ .results-bar {
418
+ display: flex;
419
+ align-items: center;
420
+ gap: 0.5rem;
421
+ margin-bottom: 0.8rem;
422
+ }
423
+ .results-bar .source-toggle { margin-left: auto; }
424
+
425
+ .results-count {
426
+ font-family: var(--font-mono);
427
+ font-size: var(--step--1);
428
+ color: var(--ink-500);
429
+ }
430
+
431
+ /* Sort select */
432
+ .sort-select {
433
+ appearance: none;
434
+ border: 1px solid color-mix(in srgb, var(--line) 85%, var(--paper-strong));
435
+ border-radius: 0.35rem;
436
+ padding: 0.22rem 1.4rem 0.22rem 0.52rem;
437
+ font-family: var(--font-mono);
438
+ font-size: 0.68rem;
439
+ font-weight: 500;
440
+ color: var(--ink-600);
441
+ background:
442
+ url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23888'/%3E%3C/svg%3E") no-repeat right 0.45rem center,
443
+ color-mix(in srgb, var(--surface-2) 65%, var(--paper-strong));
444
+ background-size: 8px 5px, auto;
445
+ cursor: pointer;
446
+ letter-spacing: 0.02em;
447
+ transition: border-color 120ms ease, background-color 120ms ease;
448
+ }
449
+ .sort-select:hover { border-color: color-mix(in srgb, var(--signal) 40%, var(--line)); }
450
+ .sort-select:focus-visible { outline: 2px solid var(--signal); outline-offset: 2px; }
451
+
452
+ /* View toggle */
453
+ .view-toggle {
454
+ display: flex;
455
+ gap: 0.22rem;
456
+ border: 1px solid color-mix(in srgb, var(--line) 85%, var(--paper-strong));
457
+ border-radius: 0.4rem;
458
+ padding: 0.18rem;
459
+ background: color-mix(in srgb, var(--surface-2) 65%, var(--paper-strong));
460
+ }
461
+
462
+ .view-btn {
463
+ appearance: none;
464
+ border: none;
465
+ border-radius: 0.28rem;
466
+ background: transparent;
467
+ color: var(--ink-500);
468
+ font-family: var(--font-mono);
469
+ font-size: 0.68rem;
470
+ font-weight: 500;
471
+ letter-spacing: 0.04em;
472
+ text-transform: uppercase;
473
+ padding: 0.22rem 0.52rem;
474
+ cursor: pointer;
475
+ transition: background 120ms ease, color 120ms ease;
476
+ }
477
+ .view-btn:hover { color: var(--ink-700); background: color-mix(in srgb, var(--paper-strong) 60%, transparent); }
478
+ .view-btn.active {
479
+ background: var(--paper-strong);
480
+ color: var(--signal);
481
+ box-shadow: 0 1px 3px rgba(0,0,0,0.08);
482
+ }
483
+ .view-btn:focus-visible {
484
+ outline: 2px solid var(--signal);
485
+ outline-offset: 2px;
486
+ }
487
+
488
+ /* Source toggle — All / Collection / Portfolio */
489
+ .source-toggle {
490
+ display: flex;
491
+ gap: 0.22rem;
492
+ border: 1px solid color-mix(in srgb, var(--line) 85%, var(--paper-strong));
493
+ border-radius: 0.4rem;
494
+ padding: 0.18rem;
495
+ background: color-mix(in srgb, var(--surface-2) 65%, var(--paper-strong));
496
+ }
497
+
498
+ .source-btn {
499
+ appearance: none;
500
+ border: none;
501
+ border-radius: 0.28rem;
502
+ background: transparent;
503
+ color: var(--ink-500);
504
+ font-family: var(--font-mono);
505
+ font-size: 0.68rem;
506
+ font-weight: 500;
507
+ letter-spacing: 0.04em;
508
+ text-transform: uppercase;
509
+ padding: 0.22rem 0.52rem;
510
+ cursor: pointer;
511
+ transition: background 120ms ease, color 120ms ease;
512
+ }
513
+ .source-btn:hover { color: var(--ink-700); background: color-mix(in srgb, var(--paper-strong) 60%, transparent); }
514
+ .source-btn.active {
515
+ background: var(--paper-strong);
516
+ color: var(--signal);
517
+ box-shadow: 0 1px 3px rgba(0,0,0,0.08);
518
+ }
519
+ .source-btn:focus-visible { outline: 2px solid var(--signal); outline-offset: 2px; }
520
+
521
+ /* ── Element grid — base (cards view) ───────────────────────────────────── */
522
+
523
+ .elements-grid {
524
+ display: grid;
525
+ gap: 0.65rem;
526
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 13.5rem), 1fr));
527
+ }
528
+
529
+ /* ── Element cards ───────────────────────────────────────────────────────── */
530
+
531
+ .element-card {
532
+ --family-1: var(--signal-2);
533
+ --family-2: var(--signal);
534
+ --family-3: #6366f1;
535
+ --family-4: var(--violet);
536
+
537
+ border-radius: var(--radius-angled);
538
+ border: 1px solid color-mix(in srgb, var(--family-2) 22%, var(--line));
539
+ background:
540
+ radial-gradient(circle at 95% 6%,
541
+ color-mix(in srgb, var(--family-1) 16%, transparent), transparent 42%),
542
+ linear-gradient(168deg,
543
+ color-mix(in srgb, var(--family-1) 7%, var(--paper-strong)),
544
+ var(--paper-strong) 55%);
545
+ padding: 0.75rem;
546
+ display: flex;
547
+ flex-direction: column;
548
+ gap: 0.45rem;
549
+ box-shadow: var(--shadow-soft);
550
+ cursor: pointer;
551
+ position: relative;
552
+ overflow: hidden;
553
+ transition: transform 150ms ease, box-shadow 150ms ease;
554
+ }
555
+
556
+ /* Subtle corner accent — much smaller than before */
557
+ .element-card::before {
558
+ content: "";
559
+ position: absolute;
560
+ right: 0.7rem;
561
+ top: 0.7rem;
562
+ width: 0.42rem;
563
+ height: 0.42rem;
564
+ border-radius: 0.12rem;
565
+ transform: rotate(45deg);
566
+ background: color-mix(in srgb, var(--family-1) 60%, var(--paper-strong));
567
+ opacity: 0.7;
568
+ }
569
+
570
+ .element-card:hover {
571
+ transform: translateY(-2px);
572
+ box-shadow: var(--shadow-card);
573
+ }
574
+ .element-card:focus-visible {
575
+ outline: 2px solid var(--signal);
576
+ outline-offset: 3px;
577
+ }
578
+
579
+ /* Per-type family tokens — light mode */
580
+ .element-card[data-type="agent"] { --family-1: #5c9cfb; --family-2: #1e40af; --family-3: #60a5fa; --family-4: #2563eb; }
581
+ .element-card[data-type="skill"] { --family-1: #34d399; --family-2: #15803d; --family-3: #22c55e; --family-4: #2fbf71; }
582
+ .element-card[data-type="persona"] { --family-1: #d468e8; --family-2: #9113a8; --family-3: #c026d3; --family-4: #8b5cf6; }
583
+ .element-card[data-type="template"] { --family-1: #38bdf8; --family-2: #0e7490; --family-3: #22d3ee; --family-4: #06b6d4; }
584
+ .element-card[data-type="memory"] { --family-1: #f5b942; --family-2: #a16207; --family-3: #f59e0b; --family-4: #d97706; }
585
+ .element-card[data-type="ensemble"] { --family-1: #f5893a; --family-2: #b43410; --family-3: #f97316; --family-4: #ea580c; }
586
+ .element-card[data-type="prompt"] { --family-1: #2dd4bf; --family-2: #0f766e; --family-3: #14b8a6; --family-4: #0d9488; }
587
+ .element-card[data-type="tool"] { --family-1: #94a3b8; --family-2: #334155; --family-3: #64748b; --family-4: #475569; }
588
+
589
+ /* Per-type family tokens — dark mode (elevated lightness, reduced saturation per ui-visual-design-expert) */
590
+ [data-theme="dark"] .element-card[data-type="agent"] { --family-1: #93bbfd; --family-2: #4a80e6; --family-3: #a5c4fe; --family-4: #6ea3f7; }
591
+ [data-theme="dark"] .element-card[data-type="skill"] { --family-1: #6ee7b7; --family-2: #2da65a; --family-3: #86efac; --family-4: #4ade80; }
592
+ [data-theme="dark"] .element-card[data-type="persona"] { --family-1: #e879f9; --family-2: #c026d3; --family-3: #f0abfc; --family-4: #d946ef; }
593
+ [data-theme="dark"] .element-card[data-type="template"] { --family-1: #7dd3fc; --family-2: #0891b2; --family-3: #a5f3fc; --family-4: #22d3ee; }
594
+ [data-theme="dark"] .element-card[data-type="memory"] { --family-1: #fcd34d; --family-2: #d97706; --family-3: #fde68a; --family-4: #f59e0b; }
595
+ [data-theme="dark"] .element-card[data-type="ensemble"] { --family-1: #fdba74; --family-2: #ea580c; --family-3: #fed7aa; --family-4: #f97316; }
596
+ [data-theme="dark"] .element-card[data-type="prompt"] { --family-1: #5eead4; --family-2: #0d9488; --family-3: #99f6e4; --family-4: #2dd4bf; }
597
+ [data-theme="dark"] .element-card[data-type="tool"] { --family-1: #94a3b8; --family-2: #64748b; --family-3: #cbd5e1; --family-4: #94a3b8; }
598
+
599
+ /* Dark mode: pull color accents back — the type label pill carries identity;
600
+ card surfaces should be calm. Light mode keeps fuller saturation. */
601
+ [data-theme="dark"] .element-card {
602
+ border: 1px solid color-mix(in srgb, var(--family-2) 8%, var(--line));
603
+ background:
604
+ radial-gradient(circle at 95% 6%,
605
+ color-mix(in srgb, var(--family-1) 5%, transparent), transparent 40%),
606
+ var(--surface-1);
607
+ }
608
+ [data-theme="dark"] .element-card::before {
609
+ background: color-mix(in srgb, var(--family-1) 28%, var(--surface-2));
610
+ opacity: 0.45;
611
+ }
612
+ [data-theme="dark"] .elements-grid[data-view="list"] .element-card {
613
+ border-left: 3px solid color-mix(in srgb, var(--family-1) 45%, var(--line));
614
+ }
615
+
616
+ .card-components {
617
+ font-size: 0.68rem;
618
+ font-family: var(--font-mono);
619
+ color: var(--ink-400);
620
+ margin: 0.1rem 0 0;
621
+ white-space: nowrap;
622
+ overflow: hidden;
623
+ text-overflow: ellipsis;
624
+ }
625
+
626
+ .element-rendered {
627
+ font-size: var(--step--1);
628
+ line-height: 1.65;
629
+ color: var(--ink-700);
630
+ }
631
+ .element-rendered h1,.element-rendered h2,.element-rendered h3,
632
+ .element-rendered h4,.element-rendered h5 {
633
+ font-family: var(--font-heading);
634
+ margin: 1rem 0 0.35rem;
635
+ color: var(--ink-900);
636
+ }
637
+ .element-rendered p { margin: 0 0 0.6rem; }
638
+ .element-rendered ul,.element-rendered ol { padding-left: 1.4rem; margin: 0 0 0.6rem; }
639
+ .element-rendered code {
640
+ font-family: var(--font-mono);
641
+ font-size: 0.82em;
642
+ background: var(--surface-1);
643
+ padding: 0.1em 0.35em;
644
+ border-radius: 0.2rem;
645
+ }
646
+ .element-rendered pre { margin: 0 0 0.6rem; }
647
+ .element-rendered pre code { background: none; padding: 0; }
648
+ .element-rendered blockquote {
649
+ border-left: 3px solid var(--accent);
650
+ margin: 0 0 0.6rem;
651
+ padding: 0.2rem 0.8rem;
652
+ color: var(--ink-500);
653
+ }
654
+
655
+ /* Card internals */
656
+ .card-header {
657
+ display: flex;
658
+ align-items: flex-start;
659
+ justify-content: space-between;
660
+ gap: 0.5rem;
661
+ padding-right: 0.85rem; /* clear corner accent */
662
+ }
663
+
664
+ .card-title {
665
+ font-family: var(--font-heading);
666
+ font-size: var(--step-0);
667
+ font-weight: 800;
668
+ color: var(--ink-950);
669
+ margin: 0;
670
+ line-height: 1.25;
671
+ }
672
+
673
+ /* Type badge — filled color pill */
674
+ .type-badge {
675
+ flex-shrink: 0;
676
+ align-self: flex-start;
677
+ border: 1px solid color-mix(in srgb, var(--family-2) 45%, transparent);
678
+ border-radius: 0.28rem;
679
+ font-family: var(--font-mono);
680
+ font-size: 0.63rem;
681
+ text-transform: uppercase;
682
+ letter-spacing: 0.06em;
683
+ font-weight: 700;
684
+ color: color-mix(in srgb, var(--family-2) 100%, var(--ink-950));
685
+ background: color-mix(in srgb, var(--family-1) 22%, var(--paper-strong));
686
+ padding: 0.12rem 0.42rem;
687
+ white-space: nowrap;
688
+ }
689
+
690
+ /* Badge group — stacks type + source badges vertically, right-aligned */
691
+ .card-badges {
692
+ display: flex;
693
+ flex-direction: column;
694
+ align-items: flex-end;
695
+ gap: 0.2rem;
696
+ flex-shrink: 0;
697
+ }
698
+
699
+ .card-description {
700
+ font-size: var(--step--1);
701
+ color: var(--ink-700);
702
+ margin: 0;
703
+ line-height: 1.5;
704
+ display: -webkit-box;
705
+ -webkit-line-clamp: 2;
706
+ -webkit-box-orient: vertical;
707
+ overflow: hidden;
708
+ flex: 1;
709
+ }
710
+
711
+ .card-footer {
712
+ margin-top: auto;
713
+ display: flex;
714
+ flex-direction: column;
715
+ gap: 0.35rem;
716
+ }
717
+
718
+ .card-meta {
719
+ display: flex;
720
+ flex-wrap: wrap;
721
+ gap: 0.25rem 0.5rem;
722
+ font-family: var(--font-mono);
723
+ font-size: var(--step--1);
724
+ color: var(--ink-500);
725
+ }
726
+
727
+ /* "by" prefix handled by CSS so JS can pass raw author value */
728
+ .meta-author::before {
729
+ content: "by\00a0";
730
+ opacity: 0.65;
731
+ }
732
+
733
+ .meta-version {
734
+ border: 1px solid color-mix(in srgb, var(--line) 82%, var(--paper-strong));
735
+ border-radius: 0.24rem;
736
+ background: color-mix(in srgb, var(--surface-2) 60%, var(--paper-strong));
737
+ padding: 0 0.28rem;
738
+ }
739
+
740
+ .meta-category { color: color-mix(in srgb, var(--signal) 60%, var(--ink-700)); }
741
+
742
+ .meta-date { color: var(--ink-500); }
743
+
744
+ /* Tags */
745
+ .card-tags {
746
+ list-style: none;
747
+ margin: 0;
748
+ padding: 0;
749
+ display: flex;
750
+ flex-wrap: wrap;
751
+ gap: 0.25rem;
752
+ }
753
+
754
+ .tag {
755
+ border: 1px solid color-mix(in srgb, var(--family-2) 18%, var(--line));
756
+ border-radius: 999px;
757
+ background: color-mix(in srgb, var(--family-1) 7%, var(--paper-strong));
758
+ color: color-mix(in srgb, var(--family-2) 60%, var(--ink-500));
759
+ font-family: var(--font-mono);
760
+ font-size: 0.62rem;
761
+ letter-spacing: 0.02em;
762
+ padding: 0.08rem 0.4rem;
763
+ }
764
+
765
+ /* ── View modes ──────────────────────────────────────────────────────────── */
766
+
767
+ /* Grid (default) — already defined above */
768
+ .elements-grid[data-view="grid"] {
769
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 13.5rem), 1fr));
770
+ }
771
+
772
+ /* List view — compact horizontal rows */
773
+ .elements-grid[data-view="list"] {
774
+ display: flex;
775
+ flex-direction: column;
776
+ gap: 0.38rem;
777
+ }
778
+
779
+ .elements-grid[data-view="list"] .element-card {
780
+ flex-direction: row;
781
+ flex-wrap: wrap;
782
+ align-items: center;
783
+ gap: 0.65rem;
784
+ padding: 0.42rem 0.65rem 0.42rem 0.75rem;
785
+ border-radius: var(--radius-sm);
786
+ border-left: 4px solid var(--family-1);
787
+ }
788
+
789
+ /* Hide corner accent in list view */
790
+ .elements-grid[data-view="list"] .element-card::before { display: none; }
791
+
792
+ .elements-grid[data-view="list"] .card-header {
793
+ flex: 0 0 auto;
794
+ min-width: 0;
795
+ width: 13rem;
796
+ gap: 0.4rem;
797
+ padding-right: 0;
798
+ justify-content: flex-start;
799
+ overflow: hidden;
800
+ }
801
+
802
+ /* Move badge group visually before title in list view */
803
+ .elements-grid[data-view="list"] .card-badges {
804
+ order: -1;
805
+ flex-direction: row;
806
+ align-items: center;
807
+ gap: 0.18rem;
808
+ }
809
+
810
+ .elements-grid[data-view="list"] .card-title {
811
+ font-size: var(--step--1);
812
+ font-weight: 700;
813
+ white-space: nowrap;
814
+ overflow: hidden;
815
+ text-overflow: ellipsis;
816
+ min-width: 0;
817
+ }
818
+
819
+ .elements-grid[data-view="list"] .card-description {
820
+ flex: 1;
821
+ display: block;
822
+ -webkit-line-clamp: unset;
823
+ white-space: nowrap;
824
+ overflow: hidden;
825
+ text-overflow: ellipsis;
826
+ font-size: var(--step--1);
827
+ margin: 0;
828
+ min-width: 0;
829
+ color: var(--ink-500);
830
+ }
831
+
832
+ .elements-grid[data-view="list"] .card-footer {
833
+ flex-direction: row;
834
+ align-items: center;
835
+ flex-shrink: 0;
836
+ margin-top: 0;
837
+ }
838
+
839
+ .elements-grid[data-view="list"] .card-tags { display: none; }
840
+
841
+ /* Card download action — visible in list view only */
842
+ .card-actions { display: none; }
843
+ .elements-grid[data-view="list"] .card-actions {
844
+ display: flex;
845
+ align-items: center;
846
+ flex-shrink: 0;
847
+ }
848
+
849
+ .card-download-btn {
850
+ appearance: none;
851
+ border: 1px solid color-mix(in srgb, var(--line) 80%, transparent);
852
+ border-radius: 0.28rem;
853
+ background: color-mix(in srgb, var(--surface-1) 40%, var(--paper-strong));
854
+ color: var(--ink-500);
855
+ font-size: 0.8rem;
856
+ width: 1.55rem;
857
+ height: 1.55rem;
858
+ display: inline-flex;
859
+ align-items: center;
860
+ justify-content: center;
861
+ cursor: pointer;
862
+ transition: background 100ms ease, color 100ms ease;
863
+ flex-shrink: 0;
864
+ }
865
+ .card-download-btn:hover {
866
+ background: color-mix(in srgb, var(--signal-2) 15%, var(--paper-strong));
867
+ color: var(--signal);
868
+ border-color: color-mix(in srgb, var(--signal) 30%, var(--line));
869
+ }
870
+ .card-download-btn:focus-visible { outline: 2px solid var(--signal); outline-offset: 2px; }
871
+
872
+ /* List view — inline expand */
873
+ .card-inline-detail {
874
+ display: none;
875
+ width: 100%;
876
+ padding: 0.65rem 0 0.2rem;
877
+ border-top: 1px solid var(--line);
878
+ margin-top: 0.4rem;
879
+ }
880
+ .elements-grid[data-view="list"] .element-card[data-expanded] .card-inline-detail {
881
+ display: block;
882
+ }
883
+ .elements-grid[data-view="list"] .element-card[data-expanded] {
884
+ align-items: flex-start;
885
+ }
886
+
887
+ /* Inline detail action bar — sits at the TOP of expanded content */
888
+ .inline-detail-actions {
889
+ display: flex;
890
+ gap: 0.3rem;
891
+ flex-wrap: wrap;
892
+ padding-bottom: 0.6rem;
893
+ border-bottom: 1px solid var(--line);
894
+ margin-bottom: 0.5rem;
895
+ }
896
+ .card-expand-icon {
897
+ display: none; /* hidden unless in list view */
898
+ margin-left: auto;
899
+ font-size: 0.65rem;
900
+ color: var(--ink-400);
901
+ transition: transform 0.15s;
902
+ flex-shrink: 0;
903
+ }
904
+ .elements-grid[data-view="list"] .card-expand-icon { display: inline; }
905
+ .element-card[data-expanded] .card-expand-icon { transform: rotate(180deg); }
906
+
907
+ /* Detail view — wider cards, full description */
908
+ .elements-grid[data-view="detail"] {
909
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 22rem), 1fr));
910
+ gap: 0.9rem;
911
+ }
912
+
913
+ .elements-grid[data-view="detail"] .element-card { padding: 1rem; }
914
+
915
+ .elements-grid[data-view="detail"] .card-title { font-size: var(--step-1); }
916
+
917
+ .elements-grid[data-view="detail"] .card-description {
918
+ -webkit-line-clamp: 4;
919
+ font-size: var(--step-0);
920
+ }
921
+
922
+ .elements-grid[data-view="detail"] .card-tags .tag { font-size: 0.68rem; }
923
+
924
+ /* ── Modal ───────────────────────────────────────────────────────────────── */
925
+
926
+ /* Reset browser-native fieldset chrome */
927
+ fieldset.type-filters,
928
+ fieldset.view-toggle {
929
+ border: 0;
930
+ padding: 0;
931
+ margin: 0;
932
+ min-width: 0;
933
+ }
934
+
935
+ dialog.modal {
936
+ /* Reset browser-native dialog chrome */
937
+ border: 0;
938
+ background: transparent;
939
+ color: inherit;
940
+ max-width: none;
941
+ max-height: none;
942
+ overflow: visible;
943
+ /* Layout — full viewport, flex container so dialog is pinned to top */
944
+ position: fixed;
945
+ inset: 0;
946
+ z-index: 100;
947
+ display: flex;
948
+ align-items: flex-start;
949
+ justify-content: center;
950
+ padding: 1rem var(--gutter) 0;
951
+ width: 100%;
952
+ }
953
+ dialog.modal::backdrop { display: none; }
954
+ dialog.modal:not([open]) { display: none; }
955
+
956
+ body.modal-open { overflow: hidden; }
957
+
958
+ .modal-overlay {
959
+ position: fixed;
960
+ inset: 0;
961
+ background: color-mix(in srgb, var(--ink-900) 50%, transparent);
962
+ backdrop-filter: blur(3px);
963
+ z-index: -1;
964
+ }
965
+
966
+ .modal-dialog {
967
+ position: relative;
968
+ width: min(72rem, 100%);
969
+ margin: 0 auto;
970
+ /* Fixed height = viewport minus top padding; content scrolls inside.
971
+ This keeps the header and toolbar at a stable screen position
972
+ regardless of content length or raw/rendered toggle. */
973
+ height: calc(100vh - 1rem);
974
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
975
+ background: var(--paper-strong);
976
+ border: 1px solid var(--line);
977
+ border-bottom: none;
978
+ box-shadow: var(--shadow-card);
979
+ overflow: hidden;
980
+ display: flex;
981
+ flex-direction: column;
982
+ }
983
+
984
+ .modal-header {
985
+ display: grid;
986
+ grid-template-areas: "heading close" "meta close";
987
+ grid-template-columns: 1fr auto;
988
+ gap: 0.2rem 0.65rem;
989
+ padding: 0.9rem 1rem 0.75rem;
990
+ border-bottom: 1px solid var(--line);
991
+ background: linear-gradient(168deg,
992
+ color-mix(in srgb, var(--signal-2) 5%, var(--paper-strong)),
993
+ var(--paper-strong) 55%);
994
+ position: relative;
995
+ }
996
+
997
+ .modal-header::after {
998
+ content: "";
999
+ position: absolute;
1000
+ left: 0; right: 0; bottom: -1px;
1001
+ height: 2px;
1002
+ background: linear-gradient(90deg,
1003
+ color-mix(in srgb, var(--signal) 10%, transparent),
1004
+ color-mix(in srgb, var(--accent) 14%, transparent),
1005
+ color-mix(in srgb, var(--signal) 10%, transparent));
1006
+ }
1007
+
1008
+ .modal-heading {
1009
+ grid-area: heading;
1010
+ display: flex;
1011
+ align-items: baseline;
1012
+ gap: 0.55rem;
1013
+ flex-wrap: wrap;
1014
+ }
1015
+
1016
+ .modal-title {
1017
+ font-family: var(--font-heading);
1018
+ font-size: var(--step-2);
1019
+ font-weight: 800;
1020
+ color: var(--ink-950);
1021
+ margin: 0;
1022
+ line-height: 1.2;
1023
+ }
1024
+
1025
+ .modal-type {
1026
+ border: 1px solid color-mix(in srgb, var(--signal) 26%, var(--line));
1027
+ border-radius: 0.3rem;
1028
+ font-family: var(--font-mono);
1029
+ font-size: 0.66rem;
1030
+ text-transform: uppercase;
1031
+ letter-spacing: 0.05em;
1032
+ color: var(--signal);
1033
+ background: color-mix(in srgb, var(--signal-2) 8%, var(--paper-strong));
1034
+ padding: 0.1rem 0.38rem;
1035
+ white-space: nowrap;
1036
+ align-self: flex-start;
1037
+ }
1038
+
1039
+ .modal-meta {
1040
+ grid-area: meta;
1041
+ display: flex;
1042
+ gap: 0.55rem;
1043
+ font-family: var(--font-mono);
1044
+ font-size: var(--step--1);
1045
+ color: var(--ink-500);
1046
+ flex-wrap: wrap;
1047
+ }
1048
+
1049
+ .modal-close {
1050
+ grid-area: close;
1051
+ align-self: start;
1052
+ appearance: none;
1053
+ border: 1px solid color-mix(in srgb, var(--line) 82%, var(--paper-strong));
1054
+ border-radius: 999px;
1055
+ background: color-mix(in srgb, var(--surface-1) 50%, var(--paper-strong));
1056
+ color: var(--ink-500);
1057
+ width: 1.85rem;
1058
+ height: 1.85rem;
1059
+ display: inline-flex;
1060
+ align-items: center;
1061
+ justify-content: center;
1062
+ font-size: 0.82rem;
1063
+ cursor: pointer;
1064
+ transition: background 120ms ease;
1065
+ }
1066
+ .modal-close:hover {
1067
+ background: color-mix(in srgb, var(--accent-soft) 70%, var(--paper-strong));
1068
+ color: var(--ink-950);
1069
+ }
1070
+ .modal-close:focus-visible {
1071
+ outline: 2px solid var(--signal);
1072
+ outline-offset: 2px;
1073
+ }
1074
+
1075
+ .modal-body {
1076
+ flex: 1;
1077
+ overflow-y: auto;
1078
+ padding: 1rem;
1079
+ }
1080
+
1081
+ /* Reset the global p,li max-width readability rule inside the modal */
1082
+ .modal-body p,
1083
+ .modal-body li { max-width: none; }
1084
+
1085
+ .element-source {
1086
+ background: color-mix(in srgb, var(--ink-950) 18%, #0b1629);
1087
+ border-radius: var(--radius-md);
1088
+ margin: 0;
1089
+ overflow-x: auto;
1090
+ tab-size: 2;
1091
+ }
1092
+
1093
+ .element-code {
1094
+ display: block;
1095
+ padding: 0.9rem 1rem;
1096
+ font-family: var(--font-mono);
1097
+ font-size: 0.82rem;
1098
+ line-height: 1.6;
1099
+ color: #dce8fb;
1100
+ white-space: pre;
1101
+ background: transparent;
1102
+ }
1103
+
1104
+ /* ── Modal toolbar ───────────────────────────────────────────────────────── */
1105
+
1106
+ .modal-toolbar {
1107
+ display: flex;
1108
+ align-items: center;
1109
+ gap: 0.3rem;
1110
+ padding: 0.4rem 1rem;
1111
+ border-bottom: 1px solid var(--line);
1112
+ background: color-mix(in srgb, var(--surface-1) 35%, var(--paper-strong));
1113
+ }
1114
+
1115
+ .modal-action-btn {
1116
+ appearance: none;
1117
+ border: 1px solid color-mix(in srgb, var(--line) 80%, transparent);
1118
+ border-radius: 0.32rem;
1119
+ padding: 0.26rem 0.58rem;
1120
+ font-family: var(--font-mono);
1121
+ font-size: 0.74rem;
1122
+ font-weight: 600;
1123
+ color: var(--ink-600);
1124
+ background: color-mix(in srgb, var(--paper-strong) 65%, var(--surface-1));
1125
+ cursor: pointer;
1126
+ text-decoration: none;
1127
+ display: inline-flex;
1128
+ align-items: center;
1129
+ gap: 0.22rem;
1130
+ white-space: nowrap;
1131
+ transition: background 100ms ease, color 100ms ease, border-color 100ms ease;
1132
+ line-height: 1.4;
1133
+ }
1134
+ .modal-action-btn:hover {
1135
+ background: color-mix(in srgb, var(--surface-2) 55%, var(--paper-strong));
1136
+ color: var(--ink-900);
1137
+ border-color: color-mix(in srgb, var(--line) 110%, transparent);
1138
+ }
1139
+ .modal-action-btn:focus-visible { outline: 2px solid var(--signal); outline-offset: 2px; }
1140
+ .modal-action-btn[data-active="true"],
1141
+ #btn-render[data-mode="raw"] {
1142
+ background: color-mix(in srgb, var(--signal-2) 18%, var(--paper-strong));
1143
+ color: var(--signal);
1144
+ border-color: color-mix(in srgb, var(--signal) 30%, var(--line));
1145
+ }
1146
+
1147
+ /* ── Security scan badges ──────────────────────────────────── */
1148
+ .scan-badge {
1149
+ display: inline-flex;
1150
+ align-items: center;
1151
+ gap: 0.25rem;
1152
+ padding: 0.2rem 0.5rem;
1153
+ border-radius: 0.25rem;
1154
+ font-family: var(--font-mono);
1155
+ font-size: 0.7rem;
1156
+ font-weight: 600;
1157
+ letter-spacing: 0.02em;
1158
+ cursor: default;
1159
+ margin-left: 0.5rem;
1160
+ }
1161
+ .scan-badge--pass {
1162
+ background: #f0fdf4;
1163
+ color: #166534;
1164
+ border: 1px solid #bbf7d0;
1165
+ }
1166
+ .scan-badge--warn {
1167
+ background: #fff7ed;
1168
+ color: #9a3412;
1169
+ border: 1px solid #fed7aa;
1170
+ }
1171
+ [data-theme="dark"] .scan-badge--pass {
1172
+ background: #052e16;
1173
+ color: #86efac;
1174
+ border-color: #14532d;
1175
+ }
1176
+ [data-theme="dark"] .scan-badge--warn {
1177
+ background: #431407;
1178
+ color: #fdba74;
1179
+ border-color: #7c2d12;
1180
+ }
1181
+
1182
+ /* Submit button — accent amber for local elements */
1183
+ .modal-nav {
1184
+ display: flex;
1185
+ align-items: center;
1186
+ gap: 0.3rem;
1187
+ margin-left: auto;
1188
+ padding-left: 0.5rem;
1189
+ border-left: 1px solid var(--line);
1190
+ }
1191
+
1192
+ .modal-nav-btn {
1193
+ appearance: none;
1194
+ border: 1px solid color-mix(in srgb, var(--line) 80%, transparent);
1195
+ border-radius: 0.32rem;
1196
+ background: transparent;
1197
+ color: var(--ink-600);
1198
+ font-size: 1rem;
1199
+ line-height: 1;
1200
+ padding: 0.18rem 0.5rem;
1201
+ cursor: pointer;
1202
+ transition: background 0.12s, color 0.12s;
1203
+ }
1204
+
1205
+ .modal-nav-btn:hover:not(:disabled) { background: var(--paper-strong); color: var(--ink-700); }
1206
+ .modal-nav-btn:disabled { opacity: 0.3; cursor: default; }
1207
+ .modal-nav-btn:focus-visible { outline: 2px solid var(--signal); outline-offset: 2px; }
1208
+
1209
+ .modal-nav-count {
1210
+ font-size: 0.75rem;
1211
+ color: var(--ink-400);
1212
+ min-width: 5ch;
1213
+ text-align: center;
1214
+ white-space: nowrap;
1215
+ }
1216
+
1217
+ .modal-action-btn--submit {
1218
+ color: color-mix(in srgb, #a16207 90%, var(--ink-900));
1219
+ border-color: color-mix(in srgb, #f5b942 55%, transparent);
1220
+ background: color-mix(in srgb, #f5b942 14%, var(--paper-strong));
1221
+ }
1222
+ .modal-action-btn--submit:hover {
1223
+ background: color-mix(in srgb, #f5b942 22%, var(--paper-strong));
1224
+ color: color-mix(in srgb, #a16207 100%, transparent);
1225
+ border-color: color-mix(in srgb, #f5b942 70%, transparent);
1226
+ }
1227
+
1228
+ /* Modal date */
1229
+ .modal-date {
1230
+ font-size: var(--step--1);
1231
+ color: var(--ink-500);
1232
+ }
1233
+
1234
+ /* Hide source badge when empty */
1235
+ .modal-source:empty { display: none; }
1236
+
1237
+ /* ── State messages ──────────────────────────────────────────────────────── */
1238
+
1239
+ .loading, .empty-state, .error {
1240
+ padding: 2.5rem 1rem;
1241
+ text-align: center;
1242
+ color: var(--ink-500);
1243
+ font-family: var(--font-mono);
1244
+ font-size: var(--step--1);
1245
+ grid-column: 1 / -1;
1246
+ max-width: none;
1247
+ }
1248
+
1249
+ .error {
1250
+ color: color-mix(in srgb, #b44210 75%, var(--ink-700));
1251
+ background: color-mix(in srgb, var(--accent-soft) 40%, var(--paper-strong));
1252
+ border: 1px solid color-mix(in srgb, var(--accent) 20%, var(--line));
1253
+ border-radius: var(--radius-md);
1254
+ }
1255
+
1256
+ .error-hint {
1257
+ margin-top: 0.5rem;
1258
+ font-family: var(--font-mono);
1259
+ font-size: var(--step--1);
1260
+ color: var(--ink-500);
1261
+ max-width: none;
1262
+ }
1263
+
1264
+ .modal-body .loading,
1265
+ .modal-body .error { padding: 1.5rem 0.5rem; border-radius: var(--radius-md); }
1266
+
1267
+ /* ── Pagination ──────────────────────────────────────────────────────────── */
1268
+
1269
+ .pagination {
1270
+ display: flex;
1271
+ align-items: center;
1272
+ justify-content: center;
1273
+ gap: 1rem;
1274
+ padding: 1.25rem 0 0.5rem;
1275
+ }
1276
+
1277
+ .pagination-btn {
1278
+ padding: 0.35rem 0.85rem;
1279
+ border: 1px solid var(--line);
1280
+ border-radius: var(--radius-sm);
1281
+ background: var(--paper);
1282
+ color: var(--ink-600);
1283
+ font-size: 0.85rem;
1284
+ cursor: pointer;
1285
+ transition: background 0.15s, color 0.15s, border-color 0.15s;
1286
+ }
1287
+
1288
+ .pagination-btn:hover:not(:disabled) {
1289
+ background: var(--paper-strong);
1290
+ color: var(--ink-700);
1291
+ border-color: var(--ink-300);
1292
+ }
1293
+
1294
+ .pagination-btn:disabled {
1295
+ opacity: 0.35;
1296
+ cursor: default;
1297
+ }
1298
+
1299
+ .pagination-btn:focus-visible {
1300
+ outline: 2px solid var(--signal);
1301
+ outline-offset: 2px;
1302
+ }
1303
+
1304
+ .pagination-info {
1305
+ font-size: 0.82rem;
1306
+ color: var(--ink-500);
1307
+ min-width: 8ch;
1308
+ text-align: center;
1309
+ }
1310
+
1311
+ /* ── Console tabs ────────────────────────────────────────────────────────── */
1312
+
1313
+ .console-tabs {
1314
+ display: flex;
1315
+ gap: 2px;
1316
+ background: var(--surface-1);
1317
+ border-radius: var(--radius-sm);
1318
+ padding: 2px;
1319
+ }
1320
+
1321
+ .console-tab {
1322
+ background: transparent;
1323
+ color: var(--ink-500);
1324
+ border: none;
1325
+ border-radius: var(--radius-sm);
1326
+ padding: 4px 14px;
1327
+ font-family: var(--font-mono);
1328
+ font-size: 11.5px;
1329
+ font-weight: 600;
1330
+ cursor: pointer;
1331
+ transition: background 0.15s, color 0.15s;
1332
+ letter-spacing: 0.02em;
1333
+ }
1334
+
1335
+ .console-tab:hover {
1336
+ color: var(--ink-900);
1337
+ background: var(--surface-2);
1338
+ }
1339
+
1340
+ .console-tab.active {
1341
+ background: var(--paper-strong);
1342
+ color: var(--signal);
1343
+ box-shadow: 0 1px 3px rgba(0,0,0,0.08);
1344
+ }
1345
+
1346
+ @media (max-width: 640px) {
1347
+ .console-tabs {
1348
+ order: -1;
1349
+ width: 100%;
1350
+ }
1351
+ .console-tab {
1352
+ flex: 1;
1353
+ text-align: center;
1354
+ }
1355
+ }
1356
+
1357
+ /* ── Tab panels ──────────────────────────────────────────────────────────── */
1358
+
1359
+ .tab-panel {
1360
+ display: none;
1361
+ }
1362
+
1363
+ .tab-panel.active {
1364
+ display: block;
1365
+ }
1366
+
1367
+ .tab-panel[hidden] {
1368
+ display: none !important;
1369
+ }
1370
+
1371
+ /* ── Site footer ─────────────────────────────────────────────────────────── */
1372
+
1373
+ .site-footer {
1374
+ border-top: 1px solid var(--line);
1375
+ padding: 0.85rem 0 1.35rem;
1376
+ }
1377
+
1378
+ .footer-inner {
1379
+ width: min(var(--max-width), calc(100% - 2 * var(--gutter)));
1380
+ margin: 0 auto;
1381
+ display: flex;
1382
+ flex-wrap: wrap;
1383
+ align-items: center;
1384
+ gap: 0.35rem 0.9rem;
1385
+ font-size: var(--step--1);
1386
+ color: var(--ink-700);
1387
+ }
1388
+
1389
+ .footer-link {
1390
+ color: var(--ink-500);
1391
+ text-decoration: none;
1392
+ font-family: var(--font-mono);
1393
+ font-size: 0.75rem;
1394
+ }
1395
+ .footer-link:hover { color: var(--accent); }
1396
+
1397
+ .footer-updated {
1398
+ margin-left: auto;
1399
+ font-family: var(--font-mono);
1400
+ font-size: 0.72rem;
1401
+ color: var(--ink-500);
1402
+ }
1403
+
1404
+ /* ── Topic filters ───────────────────────────────────────────────────────── */
1405
+
1406
+ fieldset.topic-filters {
1407
+ border: 0; padding: 0; margin: 0; min-width: 0;
1408
+ display: flex; flex-wrap: wrap; gap: 0.35rem;
1409
+ margin-top: 0.4rem;
1410
+ }
1411
+
1412
+ .topic-filter {
1413
+ padding: 0.2rem 0.65rem;
1414
+ border: 1px solid var(--ink-200);
1415
+ border-radius: 999px;
1416
+ background: transparent;
1417
+ color: var(--ink-600);
1418
+ font-family: var(--font-body);
1419
+ font-size: 0.72rem;
1420
+ cursor: pointer;
1421
+ transition: background 0.15s, color 0.15s, border-color 0.15s;
1422
+ }
1423
+ .topic-filter:hover { border-color: var(--accent); color: var(--accent); }
1424
+ .topic-filter.active {
1425
+ background: color-mix(in srgb, var(--accent) 12%, transparent);
1426
+ border-color: var(--accent);
1427
+ color: var(--accent);
1428
+ font-weight: 600;
1429
+ }
1430
+
1431
+ /* Detail view — created date header */
1432
+ .detail-created {
1433
+ display: flex;
1434
+ align-items: baseline;
1435
+ gap: 0.45rem;
1436
+ padding: 0 0 0.7rem;
1437
+ border-bottom: 1px solid var(--line);
1438
+ margin-bottom: 0.2rem;
1439
+ }
1440
+ .detail-created-label {
1441
+ font-family: var(--font-mono);
1442
+ font-size: 0.65rem;
1443
+ text-transform: uppercase;
1444
+ letter-spacing: 0.07em;
1445
+ color: var(--ink-500);
1446
+ }
1447
+ .detail-created-value {
1448
+ font-family: var(--font-mono);
1449
+ font-size: 0.8rem;
1450
+ font-weight: 600;
1451
+ color: var(--ink-900);
1452
+ }
1453
+
1454
+ /* ── Detail view sections ────────────────────────────────────────────────── */
1455
+
1456
+ .detail-section {
1457
+ border-top: 1px solid var(--ink-100);
1458
+ padding: 0.9rem 0 0.5rem;
1459
+ }
1460
+ .detail-section:first-child { border-top: 0; padding-top: 0; }
1461
+
1462
+ .detail-section-title {
1463
+ font-family: var(--font-mono);
1464
+ font-size: 0.7rem;
1465
+ font-weight: 600;
1466
+ text-transform: uppercase;
1467
+ letter-spacing: 0.08em;
1468
+ color: var(--ink-500);
1469
+ margin: 0 0 0.55rem;
1470
+ padding-bottom: 0.3rem;
1471
+ border-bottom: 1px solid color-mix(in srgb, var(--line) 60%, transparent);
1472
+ }
1473
+
1474
+ .detail-section-body { font-size: var(--step--1); }
1475
+
1476
+ .detail-field {
1477
+ display: flex;
1478
+ gap: 1.25rem;
1479
+ align-items: baseline;
1480
+ padding: 0.22rem 0;
1481
+ }
1482
+
1483
+ .detail-label {
1484
+ font-family: var(--font-mono);
1485
+ font-size: 0.68rem;
1486
+ /* Signal-tinted blue — distinct from values, like YAML key color */
1487
+ color: color-mix(in srgb, var(--signal) 60%, var(--ink-400));
1488
+ min-width: 9rem;
1489
+ flex-shrink: 0;
1490
+ }
1491
+
1492
+ .detail-value {
1493
+ color: var(--ink-800);
1494
+ font-size: 0.82rem;
1495
+ }
1496
+
1497
+ .detail-pills {
1498
+ display: flex; flex-wrap: wrap; gap: 0.3rem;
1499
+ }
1500
+
1501
+ .detail-pill {
1502
+ display: inline-block;
1503
+ padding: 0.15rem 0.55rem;
1504
+ border-radius: 999px;
1505
+ font-size: 0.68rem;
1506
+ font-family: var(--font-mono);
1507
+ background: var(--ink-100);
1508
+ color: var(--ink-600);
1509
+ }
1510
+ .detail-pill.pill-tag {
1511
+ background: color-mix(in srgb, var(--accent) 10%, transparent);
1512
+ color: var(--accent);
1513
+ border: 1px solid color-mix(in srgb, var(--accent) 25%, transparent);
1514
+ }
1515
+ .detail-pill.pill-trigger {
1516
+ background: color-mix(in srgb, #f59e0b 12%, var(--paper));
1517
+ color: var(--ink-700);
1518
+ border: 1px solid color-mix(in srgb, #f59e0b 35%, var(--paper));
1519
+ }
1520
+ .detail-pill.pill-required {
1521
+ background: color-mix(in srgb, #ef4444 12%, var(--paper));
1522
+ color: var(--ink-800);
1523
+ }
1524
+ .detail-pill.pill-meta {
1525
+ background: var(--ink-100);
1526
+ color: var(--ink-500);
1527
+ }
1528
+
1529
+ .detail-prose {
1530
+ color: var(--ink-600);
1531
+ font-style: italic;
1532
+ margin: 0;
1533
+ }
1534
+
1535
+ .detail-list {
1536
+ margin: 0;
1537
+ padding-left: 1.2rem;
1538
+ color: var(--ink-700);
1539
+ }
1540
+ .detail-list li { margin-bottom: 0.2rem; }
1541
+
1542
+ .memory-entries-list {
1543
+ list-style: none;
1544
+ padding: 0;
1545
+ margin: 0;
1546
+ display: flex;
1547
+ flex-direction: column;
1548
+ gap: 0.75rem;
1549
+ }
1550
+
1551
+ .memory-entry {
1552
+ border: 1px solid var(--line);
1553
+ border-radius: var(--radius-sm);
1554
+ overflow: hidden;
1555
+ }
1556
+
1557
+ .memory-entry-content {
1558
+ padding: 0.75rem 1rem 0.5rem;
1559
+ }
1560
+
1561
+ .memory-entry-meta {
1562
+ font-size: 0.72rem;
1563
+ color: var(--ink-400);
1564
+ padding: 0.35rem 1rem;
1565
+ background: color-mix(in srgb, var(--ink-900) 4%, var(--paper));
1566
+ border-top: 1px solid var(--line);
1567
+ display: flex;
1568
+ flex-wrap: wrap;
1569
+ gap: 0.1rem 0.6rem;
1570
+ }
1571
+
1572
+ .memory-meta-key {
1573
+ color: var(--ink-500);
1574
+ font-weight: 500;
1575
+ }
1576
+
1577
+ .detail-goal-template {
1578
+ font-family: var(--font-mono);
1579
+ font-size: 0.85rem;
1580
+ color: var(--ink-700);
1581
+ background: color-mix(in srgb, var(--signal) 8%, var(--paper));
1582
+ border-left: 3px solid var(--signal);
1583
+ padding: 0.45rem 0.75rem;
1584
+ border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
1585
+ margin-bottom: 0.6rem;
1586
+ }
1587
+
1588
+ .detail-template-param {
1589
+ background: color-mix(in srgb, var(--signal) 18%, transparent);
1590
+ color: color-mix(in srgb, var(--signal) 90%, var(--ink-700));
1591
+ border: 1px solid color-mix(in srgb, var(--signal) 35%, transparent);
1592
+ border-radius: 0.25rem;
1593
+ padding: 0.05em 0.3em;
1594
+ font-size: 0.9em;
1595
+ }
1596
+
1597
+ .detail-subsection-title {
1598
+ font-size: 0.7rem;
1599
+ font-weight: 600;
1600
+ text-transform: uppercase;
1601
+ letter-spacing: 0.06em;
1602
+ color: var(--ink-500);
1603
+ margin: 0.75rem 0 0.35rem;
1604
+ }
1605
+
1606
+ .detail-multiline {
1607
+ font-family: var(--font-mono);
1608
+ font-size: 0.8rem;
1609
+ line-height: 1.55;
1610
+ white-space: pre-wrap;
1611
+ word-break: break-word;
1612
+ background: color-mix(in srgb, var(--ink-900) 6%, var(--paper));
1613
+ border-radius: var(--radius-sm);
1614
+ padding: 0.55rem 0.75rem;
1615
+ margin: 0;
1616
+ overflow-x: auto;
1617
+ color: var(--ink-700);
1618
+ }
1619
+
1620
+ .detail-param {
1621
+ display: flex;
1622
+ flex-direction: column;
1623
+ gap: 0.2rem;
1624
+ padding: 0.45rem 0;
1625
+ border-bottom: 1px solid var(--ink-100);
1626
+ }
1627
+ .detail-param:last-child { border-bottom: 0; }
1628
+
1629
+ /* Name + type/required pills on one stable row */
1630
+ .detail-param-header {
1631
+ display: flex;
1632
+ align-items: center;
1633
+ gap: 0.4rem;
1634
+ flex-wrap: wrap;
1635
+ }
1636
+ .detail-param-name {
1637
+ font-family: var(--font-mono);
1638
+ font-size: 0.78rem;
1639
+ font-weight: 600;
1640
+ color: color-mix(in srgb, var(--signal) 60%, var(--ink-400));
1641
+ }
1642
+ /* Description stacked below, never displacing the pills */
1643
+ .detail-param-desc {
1644
+ color: var(--ink-500);
1645
+ font-size: 0.75rem;
1646
+ padding-left: 0.1rem;
1647
+ }
1648
+
1649
+ /* ── Responsive ──────────────────────────────────────────────────────────── */
1650
+
1651
+ @media (max-width: 52rem) {
1652
+ .header-brand .site-tagline { display: none; }
1653
+ .stat { display: none; }
1654
+ .stat:first-child { display: inline-flex; }
1655
+ .elements-grid { grid-template-columns: repeat(auto-fill, minmax(min(100%, 11.5rem), 1fr)); }
1656
+ .elements-grid[data-view="detail"] { grid-template-columns: 1fr; }
1657
+ .modal-dialog { height: calc(100vh - 0.5rem); border-radius: 0; }
1658
+ .modal-toolbar { flex-wrap: wrap; }
1659
+ .elements-grid[data-view="list"] .card-header { width: 9rem; }
1660
+ .elements-grid[data-view="list"] .card-description { display: none; }
1661
+ }
1662
+
1663
+ /* ── Directive-style instructions ─────────────────────────────────── */
1664
+
1665
+ .directive-list {
1666
+ display: flex;
1667
+ flex-direction: column;
1668
+ gap: 0.5rem;
1669
+ }
1670
+
1671
+ .directive-block {
1672
+ padding: 0.6rem 0.85rem;
1673
+ border-left: 3px solid var(--signal-2, #3b82f6);
1674
+ background: var(--surface-1, #eaf1ff);
1675
+ border-radius: 0 var(--radius-sm, 0.42rem) var(--radius-sm, 0.42rem) 0;
1676
+ font-size: var(--step-0, 0.95rem);
1677
+ line-height: 1.55;
1678
+ }
1679
+
1680
+ [data-theme="dark"] .directive-block {
1681
+ background: rgba(59, 130, 246, 0.08);
1682
+ border-left-color: var(--signal-2, #3b82f6);
1683
+ }
1684
+
1685
+ .directive-block--prose {
1686
+ border-left-color: var(--line, #c8d5e9);
1687
+ background: var(--surface-2, #f8fbff);
1688
+ }
1689
+
1690
+ [data-theme="dark"] .directive-block--prose {
1691
+ background: rgba(255, 255, 255, 0.03);
1692
+ border-left-color: var(--ink-500, #677893);
1693
+ }
1694
+
1695
+ .directive-keyword {
1696
+ font-weight: 700;
1697
+ font-family: var(--font-mono, monospace);
1698
+ font-size: 0.85em;
1699
+ color: var(--signal, #1e40af);
1700
+ letter-spacing: 0.02em;
1701
+ }
1702
+
1703
+ [data-theme="dark"] .directive-keyword {
1704
+ color: var(--signal-2, #3b82f6);
1705
+ }
1706
+
1707
+ .directive-block p {
1708
+ margin: 0;
1709
+ }
1710
+
1711
+ @media (prefers-reduced-motion: reduce) {
1712
+ *, *::before, *::after {
1713
+ animation: none !important;
1714
+ transition: none !important;
1715
+ scroll-behavior: auto !important;
1716
+ }
1717
+ }