dev-process-kit 0.2.1 → 0.3.0-beta.1

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/README.md +178 -60
  2. package/dist/boards.js +1 -0
  3. package/dist/chunks/shared-BX1EnRfr.js +1 -0
  4. package/dist/chunks/shared-C-M2Nfmu.js +686 -0
  5. package/dist/chunks/shared-Cas88qVh.js +2165 -0
  6. package/dist/chunks/{shared-DeXM1v86.js → shared-Cejw83eH.js} +21 -29
  7. package/dist/chunks/shared-CfVpKPRY.js +1844 -0
  8. package/dist/chunks/shared-CnPCm4bJ.js +31 -0
  9. package/dist/chunks/shared-D1iBuYZV.js +6208 -0
  10. package/dist/chunks/shared-D7VtCoY6.js +3586 -0
  11. package/dist/chunks/{shared-zZF1zU0o.js → shared-DHVDag3x.js} +25 -56
  12. package/dist/chunks/shared-DdpMqkAH.js +4928 -0
  13. package/dist/chunks/shared-EYOAbLSo.js +1 -0
  14. package/dist/chunks/shared-TrlnHjrJ.js +1 -0
  15. package/dist/chunks/shared-a9QCZpxj.js +574 -0
  16. package/dist/chunks/shared-df9XN7ns.js +904 -0
  17. package/dist/chunks/shared-dnY35u9q.js +2530 -0
  18. package/dist/chunks/shared-e9ia12Uz.js +1636 -0
  19. package/dist/chunks/shared-qk9TB_UM.js +705 -0
  20. package/dist/components.js +1 -1
  21. package/dist/index.js +1 -1
  22. package/dist/views/delegation-poker.js +1 -0
  23. package/dist/views/plain.js +1 -0
  24. package/dist/views/prototype.js +1 -0
  25. package/dist/views/slides.js +1 -0
  26. package/dist/views/task-board.js +1 -0
  27. package/dist/views/usm.js +1 -0
  28. package/package.json +8 -10
  29. package/dist/chunks/shared-B5lBiq5s.js +0 -1
  30. package/dist/chunks/shared-BjyoXjSO.js +0 -1
  31. package/dist/chunks/shared-C-d71uRP.js +0 -573
  32. package/dist/chunks/shared-C5n6LBUz.js +0 -1105
  33. package/dist/chunks/shared-CAWKGcWJ.js +0 -1053
  34. package/dist/chunks/shared-CdZhkPto.js +0 -1
  35. package/dist/chunks/shared-DB_C1Mdu.js +0 -1
  36. package/dist/chunks/shared-DDOpqbVL.js +0 -49
  37. package/dist/chunks/shared-DehzCTC2.js +0 -1616
  38. package/dist/chunks/shared-Dfj6O0K4.js +0 -2774
  39. package/dist/chunks/shared-DiFAX1_p.js +0 -3780
  40. package/dist/chunks/shared-DkPo0jX3.js +0 -4214
  41. package/dist/chunks/shared-GL2Z98Cz.js +0 -4206
  42. package/dist/chunks/shared-cMhjZGRs.js +0 -301
  43. package/dist/templates/delegation-poker.js +0 -1
  44. package/dist/templates/event-storming.js +0 -1
  45. package/dist/templates/example-mapping.js +0 -1
  46. package/dist/templates/plain.js +0 -1
  47. package/dist/templates/prototype.js +0 -1
  48. package/dist/templates/slides.js +0 -1
  49. package/dist/templates/task-board.js +0 -1
  50. package/dist/templates/usm.js +0 -1
  51. package/dist/templates/whiteboard.js +0 -1
@@ -0,0 +1,2165 @@
1
+ import{ah as e,bA as t,bB as o,bC as n}from"./shared-DdpMqkAH.js";import{a as d,c as i}from"./shared-qk9TB_UM.js";import{m as p}from"./shared-a9QCZpxj.js";const r=e`
2
+ /*
3
+ * A chart: a framed plot with its head above it. CSS only — the author draws
4
+ * the SVG and this styles it, so a line chart reads as the kit's own: rules
5
+ * in the grid, an axis, ticks, the line with the area under it, its points,
6
+ * the ideal it should have followed and the mark where a moment is called
7
+ * out.
8
+ */
9
+ :where(.dpk-chart) {
10
+ display: grid;
11
+ gap: 8px;
12
+ margin: 0;
13
+ padding: 14px 16px 10px;
14
+ border: 1px solid var(--dpk-rule);
15
+ border-radius: var(--dpk-radius-lg);
16
+ background: var(--dpk-paper-raised);
17
+ box-shadow: var(--dpk-shadow-xs);
18
+ }
19
+
20
+ :where(.dpk-chart-head) {
21
+ display: flex;
22
+ flex-wrap: wrap;
23
+ align-items: baseline;
24
+ gap: 4px 12px;
25
+ }
26
+
27
+ :where(.dpk-chart-title) {
28
+ color: var(--dpk-ink);
29
+ font-size: 13px;
30
+ font-weight: 650;
31
+ }
32
+
33
+ :where(.dpk-chart-value) {
34
+ margin-inline-start: auto;
35
+ color: var(--dpk-ink-soft);
36
+ font-family: var(--dpk-mono);
37
+ font-size: 12px;
38
+ font-variant-numeric: tabular-nums;
39
+ }
40
+
41
+ :where(.dpk-chart-plot) {
42
+ position: relative;
43
+ min-width: 0;
44
+ }
45
+
46
+ :where(.dpk-chart-plot) > :where(svg) {
47
+ display: block;
48
+ width: 100%;
49
+ height: auto;
50
+ overflow: visible;
51
+ }
52
+
53
+ :where(.dpk-chart-grid) :where(line, path) {
54
+ fill: none;
55
+ stroke: var(--dpk-rule);
56
+ stroke-width: 1;
57
+ }
58
+
59
+ :where(.dpk-chart-axis) :where(line, path) {
60
+ fill: none;
61
+ stroke: var(--dpk-rule-strong);
62
+ stroke-width: 1;
63
+ }
64
+
65
+ /* Ticks read as text on both sides: an SVG text is filled, an HTML one is colored. */
66
+ :where(.dpk-chart-tick) {
67
+ color: var(--dpk-ink-faint);
68
+ fill: currentColor;
69
+ font-family: var(--dpk-mono);
70
+ font-size: 10px;
71
+ font-variant-numeric: tabular-nums;
72
+ }
73
+
74
+ :where(.dpk-chart-line) {
75
+ fill: none;
76
+ stroke: var(--tone, var(--dpk-blue));
77
+ stroke-width: 2.25;
78
+ stroke-linejoin: round;
79
+ stroke-linecap: round;
80
+ }
81
+
82
+ :where(.dpk-chart-area) {
83
+ fill: color-mix(in srgb, var(--tone, var(--dpk-blue)) 14%, transparent);
84
+ stroke: none;
85
+ }
86
+
87
+ :where(.dpk-chart-point) {
88
+ fill: var(--dpk-paper-raised);
89
+ stroke: var(--tone, var(--dpk-blue));
90
+ stroke-width: 2;
91
+ }
92
+
93
+ /* Where the line should have gone: the same shape, dashed and gray. */
94
+ :where(.dpk-chart-ideal) {
95
+ fill: none;
96
+ stroke: var(--dpk-ink-faint);
97
+ stroke-width: 1.25;
98
+ stroke-dasharray: 5 4;
99
+ }
100
+
101
+ /* The moment the chart calls out, ruled down through the plot. */
102
+ :where(.dpk-chart-mark) {
103
+ stroke: var(--tone, var(--dpk-accent));
104
+ stroke-width: 1.5;
105
+ stroke-dasharray: 2 3;
106
+ }
107
+
108
+ :where(.dpk-chart-mark-label) {
109
+ color: var(--tone, var(--dpk-accent));
110
+ fill: currentColor;
111
+ font-family: var(--dpk-mono);
112
+ font-size: 10px;
113
+ font-weight: 650;
114
+ }
115
+
116
+ :where(.dpk-chart-legend) {
117
+ display: flex;
118
+ flex-wrap: wrap;
119
+ gap: 4px 12px;
120
+ color: var(--dpk-ink-soft);
121
+ font-size: 11px;
122
+ }
123
+
124
+ :where(.dpk-chart-key) {
125
+ display: inline-flex;
126
+ align-items: center;
127
+ gap: 5px;
128
+ min-width: 0;
129
+ }
130
+
131
+ :where(.dpk-chart-key)::before {
132
+ content: '';
133
+ flex: none;
134
+ width: 14px;
135
+ height: 2px;
136
+ border-radius: 1px;
137
+ background: var(--tone, var(--dpk-blue));
138
+ }
139
+
140
+ :where(.dpk-chart-key[data-variant='area'])::before {
141
+ height: 8px;
142
+ border-radius: 3px;
143
+ background: color-mix(in srgb, var(--tone, var(--dpk-blue)) 24%, transparent);
144
+ box-shadow: inset 0 -2px 0 var(--tone, var(--dpk-blue));
145
+ }
146
+
147
+ :where(.dpk-chart-key[data-variant='dashed'])::before {
148
+ height: 0;
149
+ border-top: 1.5px dashed var(--tone, var(--dpk-ink-faint));
150
+ background: none;
151
+ }
152
+
153
+ :where(.dpk-chart-key[data-variant='mark'])::before {
154
+ width: 2px;
155
+ height: 11px;
156
+ background: var(--tone, var(--dpk-accent));
157
+ }
158
+
159
+ :where(.dpk-chart-empty) {
160
+ color: var(--dpk-ink-faint);
161
+ font-size: 12px;
162
+ }
163
+ `,s=e`
164
+ /* ------------------------------------------------------------ theme scope */
165
+
166
+ ${t}
167
+
168
+ /* ------------------------------------------------------------ motion */
169
+
170
+ ${o}
171
+
172
+ /*
173
+ * A group that should arrive in sequence rather than all at once: put
174
+ * 'data-dpk-stagger' on the container (a .dpk-stack, a .dpk-grid, a list) and
175
+ * its children rise in one after another, --dpk-stagger apart. Opt-in, so no
176
+ * ordinary list animates; the seventh child onwards arrives with the sixth.
177
+ */
178
+ @media (prefers-reduced-motion: no-preference) {
179
+ :where([data-dpk-stagger]) > :where(*) {
180
+ animation: dpk-rise-in var(--dpk-dur) var(--dpk-ease-out) backwards;
181
+ }
182
+
183
+ :where([data-dpk-stagger]) > :where(:nth-child(2)) {
184
+ animation-delay: var(--dpk-stagger);
185
+ }
186
+
187
+ :where([data-dpk-stagger]) > :where(:nth-child(3)) {
188
+ animation-delay: calc(var(--dpk-stagger) * 2);
189
+ }
190
+
191
+ :where([data-dpk-stagger]) > :where(:nth-child(4)) {
192
+ animation-delay: calc(var(--dpk-stagger) * 3);
193
+ }
194
+
195
+ :where([data-dpk-stagger]) > :where(:nth-child(5)) {
196
+ animation-delay: calc(var(--dpk-stagger) * 4);
197
+ }
198
+
199
+ :where([data-dpk-stagger]) > :where(:nth-child(n + 6)) {
200
+ animation-delay: calc(var(--dpk-stagger) * 5);
201
+ }
202
+ }
203
+
204
+ /* ------------------------------------------------------------ layout */
205
+
206
+ :where(.dpk-stack) {
207
+ display: flex;
208
+ flex-direction: column;
209
+ gap: var(--dpk-gap, 12px);
210
+ }
211
+
212
+ :where(.dpk-cluster) {
213
+ display: flex;
214
+ flex-wrap: wrap;
215
+ align-items: center;
216
+ gap: var(--dpk-gap, 8px);
217
+ }
218
+
219
+ :where(.dpk-status) {
220
+ --tone: var(--dpk-ink-soft);
221
+ --tone-soft: var(--dpk-paper-sunken);
222
+ display: inline-flex;
223
+ align-items: center;
224
+ gap: 7px;
225
+ padding: 4px 11px 4px 9px;
226
+ border-radius: 999px;
227
+ background: var(--tone-soft);
228
+ color: color-mix(in srgb, var(--tone) 80%, var(--dpk-ink));
229
+ font-size: 12.5px;
230
+ font-weight: 650;
231
+ line-height: 1.5;
232
+ white-space: nowrap;
233
+ }
234
+
235
+ :where(.dpk-status)::before {
236
+ content: '';
237
+ flex: 0 0 8px;
238
+ width: 8px;
239
+ height: 8px;
240
+ border-radius: 50%;
241
+ background: var(--tone);
242
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--tone) 22%, transparent);
243
+ }
244
+
245
+ :where(.dpk-status[data-status='todo']) {
246
+ --tone: var(--dpk-rule-strong);
247
+ --tone-soft: var(--dpk-paper-sunken);
248
+ }
249
+
250
+ :where(.dpk-status[data-status='doing']) {
251
+ --tone: var(--dpk-blue);
252
+ --tone-soft: var(--dpk-blue-soft);
253
+ }
254
+
255
+ :where(.dpk-status[data-status='done']) {
256
+ --tone: var(--dpk-green);
257
+ --tone-soft: var(--dpk-green-soft);
258
+ }
259
+
260
+ :where(.dpk-status[data-status='blocked']) {
261
+ --tone: var(--dpk-danger);
262
+ --tone-soft: var(--dpk-danger-soft);
263
+ }
264
+
265
+ :where(.dpk-hover-tools) {
266
+ display: inline-flex;
267
+ align-items: center;
268
+ gap: var(--dpk-gap, 4px);
269
+ opacity: 0;
270
+ /* Revealed by its host: fades up a hair, so the row does not just blink. */
271
+ transform: translateY(2px);
272
+ pointer-events: none;
273
+ transition:
274
+ opacity var(--dpk-dur-fast) var(--dpk-ease),
275
+ transform var(--dpk-dur-fast) var(--dpk-ease);
276
+ }
277
+
278
+ :where(.dpk-hover-host):is(:hover, :focus-within) :where(.dpk-hover-tools) {
279
+ opacity: 1;
280
+ transform: none;
281
+ pointer-events: auto;
282
+ }
283
+
284
+ @media (hover: none) {
285
+ :where(.dpk-hover-tools) {
286
+ opacity: 1;
287
+ transform: none;
288
+ pointer-events: auto;
289
+ }
290
+ }
291
+
292
+ :where(.dpk-navlist) {
293
+ display: grid;
294
+ gap: 2px;
295
+ margin: 0;
296
+ padding: 0;
297
+ list-style: none;
298
+ }
299
+
300
+ :where(.dpk-navlist) > :where(li) {
301
+ min-width: 0;
302
+ }
303
+
304
+ :where(.dpk-navlist) > :where(li) > :where(a, button) {
305
+ display: flex;
306
+ align-items: center;
307
+ gap: 8px;
308
+ width: 100%;
309
+ min-width: 0;
310
+ padding: 7px 10px;
311
+ border: none;
312
+ border-radius: var(--dpk-radius-sm);
313
+ background: transparent;
314
+ color: var(--dpk-ink-soft);
315
+ font: inherit;
316
+ font-size: 13px;
317
+ line-height: 1.4;
318
+ text-align: start;
319
+ text-decoration: none;
320
+ cursor: pointer;
321
+ transition:
322
+ background var(--dpk-dur-fast) var(--dpk-ease),
323
+ color var(--dpk-dur-fast) var(--dpk-ease),
324
+ box-shadow var(--dpk-dur-fast) var(--dpk-ease);
325
+ }
326
+
327
+ :where(.dpk-navlist) > :where(li) > :where(a, button):hover {
328
+ background: var(--dpk-paper-raised);
329
+ color: var(--dpk-ink);
330
+ }
331
+
332
+ :where(.dpk-navlist) > :where(li) > :where(a, button):focus-visible {
333
+ outline: none;
334
+ box-shadow: var(--dpk-focus);
335
+ }
336
+
337
+ :where(.dpk-navlist) > :where(li) > :where([aria-current='page'], [aria-selected='true']) {
338
+ background: color-mix(in srgb, var(--dpk-accent) 8%, var(--dpk-paper-raised));
339
+ color: var(--dpk-ink);
340
+ font-weight: 650;
341
+ box-shadow:
342
+ inset 0 0 0 1px color-mix(in srgb, var(--dpk-accent) 20%, transparent),
343
+ var(--dpk-shadow-xs);
344
+ }
345
+
346
+ /*
347
+ * A tree: rows nested one step per level, with a guide line down each level
348
+ * and a caret on the rows that open. A branch is a details element whose
349
+ * summary is the row (or a row carrying aria-expanded); a leaf is a
350
+ * plain row, indented to the label column so the levels still read as one
351
+ * list. aria-current="page" marks the row the reader is on.
352
+ */
353
+ :where(.dpk-tree) {
354
+ display: grid;
355
+ gap: 2px;
356
+ margin: 0;
357
+ padding: 0;
358
+ list-style: none;
359
+ }
360
+
361
+ :where(.dpk-tree) :where(.dpk-tree) {
362
+ margin-left: 14px;
363
+ padding-left: 7px;
364
+ border-left: 1px solid var(--dpk-rule);
365
+ }
366
+
367
+ :where(.dpk-tree-node) {
368
+ min-width: 0;
369
+ }
370
+
371
+ :where(.dpk-tree-row) {
372
+ display: flex;
373
+ align-items: center;
374
+ gap: 6px;
375
+ min-width: 0;
376
+ padding: 5px 8px;
377
+ border: none;
378
+ border-radius: var(--dpk-radius-sm);
379
+ background: transparent;
380
+ color: var(--dpk-ink-soft);
381
+ font: inherit;
382
+ font-size: 12.5px;
383
+ line-height: 1.45;
384
+ text-align: start;
385
+ text-decoration: none;
386
+ cursor: pointer;
387
+ transition:
388
+ background var(--dpk-dur-fast) var(--dpk-ease),
389
+ color var(--dpk-dur-fast) var(--dpk-ease);
390
+ }
391
+
392
+ :where(button.dpk-tree-row) {
393
+ width: 100%;
394
+ }
395
+
396
+ :where(.dpk-tree-row):hover {
397
+ background: var(--dpk-paper-raised);
398
+ color: var(--dpk-ink);
399
+ }
400
+
401
+ :where(.dpk-tree-row):focus-visible {
402
+ outline: none;
403
+ box-shadow: var(--dpk-focus);
404
+ }
405
+
406
+ /* The caret, turned the way a disclosure's is: closed points along the row, open points down it. */
407
+ :where(summary.dpk-tree-row, .dpk-tree-row[aria-expanded]) {
408
+ list-style: none;
409
+ }
410
+
411
+ :where(summary.dpk-tree-row)::-webkit-details-marker {
412
+ display: none;
413
+ }
414
+
415
+ :where(summary.dpk-tree-row)::before,
416
+ :where(.dpk-tree-row[aria-expanded])::before {
417
+ content: '';
418
+ flex: none;
419
+ width: 6px;
420
+ height: 6px;
421
+ margin-right: 2px;
422
+ border-right: 1.5px solid currentColor;
423
+ border-bottom: 1.5px solid currentColor;
424
+ transform: rotate(-45deg);
425
+ transition: transform var(--dpk-dur) var(--dpk-ease);
426
+ }
427
+
428
+ :where(details[open]) > :where(summary.dpk-tree-row)::before,
429
+ :where(.dpk-tree-row[aria-expanded='true'])::before {
430
+ transform: rotate(45deg);
431
+ }
432
+
433
+ /* A leaf keeps the column of the labels above it, with no caret to take. */
434
+ :where(.dpk-tree-row[data-leaf]) {
435
+ padding-left: 22px;
436
+ cursor: default;
437
+ }
438
+
439
+ :where(.dpk-tree-row[aria-current='page'], .dpk-tree-row[aria-selected='true'], .dpk-tree-row[data-current]) {
440
+ background: color-mix(in srgb, var(--dpk-accent) 8%, var(--dpk-paper-raised));
441
+ color: var(--dpk-ink);
442
+ font-weight: 650;
443
+ box-shadow:
444
+ inset 0 0 0 1px color-mix(in srgb, var(--dpk-accent) 20%, transparent),
445
+ var(--dpk-shadow-xs);
446
+ }
447
+
448
+ :where(.dpk-list-row) {
449
+ display: grid;
450
+ grid-template-columns: auto minmax(0, 1fr) auto;
451
+ align-items: center;
452
+ gap: 10px;
453
+ min-width: 0;
454
+ padding: 8px 10px;
455
+ border-radius: var(--dpk-radius-sm);
456
+ color: var(--dpk-ink);
457
+ transition: background var(--dpk-dur-fast) var(--dpk-ease);
458
+ }
459
+
460
+ :where(.dpk-list-row):hover {
461
+ background: var(--dpk-paper-sunken);
462
+ }
463
+
464
+ :where(.dpk-list-row) > :where(:nth-child(2)) {
465
+ min-width: 0;
466
+ overflow: hidden;
467
+ text-overflow: ellipsis;
468
+ white-space: nowrap;
469
+ }
470
+
471
+ :where(.dpk-list-row) > :where(:last-child) {
472
+ justify-self: end;
473
+ }
474
+
475
+ :where(.dpk-list-row[data-density='compact']) {
476
+ gap: 8px;
477
+ padding: 5px 8px;
478
+ }
479
+
480
+ /*
481
+ * An overview row: the same row carrying what a list of the page's own
482
+ * things needs — a tone swatch or a status icon in the first column, a name
483
+ * that is edited in place, and the row's tools at the end.
484
+ */
485
+ :where(.dpk-list-row-name) {
486
+ min-width: 0;
487
+ overflow: hidden;
488
+ color: var(--dpk-ink);
489
+ font-size: 13.5px;
490
+ font-weight: 650;
491
+ text-overflow: ellipsis;
492
+ white-space: nowrap;
493
+ }
494
+
495
+ /* The editor pads its text by 4px; pull it back so the name sits on the row's own line. */
496
+ :where(.dpk-list-row-name) > :where(dpk-inline-edit) {
497
+ display: block;
498
+ margin: 0 -4px;
499
+ }
500
+
501
+ /* A label's color: a small rounded swatch in --tone. */
502
+ :where(.dpk-list-row-swatch) {
503
+ flex: none;
504
+ width: 12px;
505
+ height: 12px;
506
+ border-radius: 4px;
507
+ background: var(--tone, var(--dpk-ink-faint));
508
+ }
509
+
510
+ /* A status's icon, where a label shows its swatch. */
511
+ :where(.dpk-list-row-icon) {
512
+ flex: none;
513
+ width: 16px;
514
+ height: 16px;
515
+ color: var(--tone, var(--dpk-ink-faint));
516
+ }
517
+
518
+ :where(.dpk-list-row-icon) > :where(svg) {
519
+ display: block;
520
+ width: 100%;
521
+ height: 100%;
522
+ }
523
+
524
+ /* What the row is worth: a share, a count, a note. */
525
+ :where(.dpk-list-row-meta) {
526
+ min-width: 0;
527
+ color: var(--dpk-ink-faint);
528
+ font-family: var(--dpk-mono);
529
+ font-size: 11px;
530
+ font-variant-numeric: tabular-nums;
531
+ }
532
+
533
+ /* The row's own tools, gathered in its last column. */
534
+ :where(.dpk-list-row-tools) {
535
+ display: inline-flex;
536
+ align-items: center;
537
+ gap: 2px;
538
+ }
539
+
540
+ :where(.dpk-toolbar) {
541
+ display: flex;
542
+ flex-wrap: wrap;
543
+ align-items: center;
544
+ gap: 8px 12px;
545
+ min-height: var(--dpk-control-h, 32px);
546
+ padding: 5px 12px;
547
+ }
548
+
549
+ :where(.dpk-toolbar[data-align='end']) {
550
+ justify-content: flex-end;
551
+ }
552
+
553
+ :where(.dpk-toolbar-sep) {
554
+ flex: 0 0 1px;
555
+ align-self: stretch;
556
+ margin-block: 4px;
557
+ background: var(--dpk-rule);
558
+ }
559
+
560
+ :where(.dpk-grid) {
561
+ display: grid;
562
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--dpk-min, 220px)), 1fr));
563
+ gap: var(--dpk-gap, 12px);
564
+ }
565
+
566
+ :where(.dpk-grid[data-cols='2']) {
567
+ grid-template-columns: repeat(2, minmax(0, 1fr));
568
+ }
569
+
570
+ :where(.dpk-grid[data-cols='3']) {
571
+ grid-template-columns: repeat(3, minmax(0, 1fr));
572
+ }
573
+
574
+ @media (max-width: 640px) {
575
+ :where(.dpk-grid[data-cols]) {
576
+ grid-template-columns: minmax(0, 1fr);
577
+ }
578
+ }
579
+
580
+ :where(.dpk-hscroll) {
581
+ min-width: 0;
582
+ max-width: 100%;
583
+ overflow-x: auto;
584
+ overscroll-behavior-x: contain;
585
+ scrollbar-width: thin;
586
+ }
587
+
588
+ :where(.dpk-hscroll[data-snap]) {
589
+ scroll-snap-type: x proximity;
590
+ }
591
+
592
+ :where(.dpk-hscroll[data-snap]) > :where(*) {
593
+ scroll-snap-align: start;
594
+ }
595
+
596
+ :where(.dpk-legend) {
597
+ display: inline-flex;
598
+ flex-wrap: wrap;
599
+ align-items: center;
600
+ gap: 6px 14px;
601
+ color: var(--dpk-ink-soft);
602
+ font-size: 11.5px;
603
+ line-height: 1.4;
604
+ }
605
+
606
+ :where(.dpk-legend) > :where(.dpk-legend-item) {
607
+ display: inline-flex;
608
+ align-items: center;
609
+ gap: 6px;
610
+ white-space: nowrap;
611
+ }
612
+
613
+ :where(.dpk-legend) > :where(.dpk-legend-item)::before {
614
+ content: '';
615
+ flex: 0 0 8px;
616
+ width: 8px;
617
+ height: 8px;
618
+ border-radius: 2px;
619
+ background: var(--dpk-swatch, var(--dpk-rule-strong));
620
+ }
621
+
622
+ :where(.dpk-separator) {
623
+ height: 0;
624
+ margin: 20px 0;
625
+ border: none;
626
+ border-top: 1px solid var(--dpk-rule);
627
+ }
628
+
629
+ /* ------------------------------------------------------------ prose */
630
+
631
+ :where(.dpk-prose) {
632
+ max-width: var(--dpk-measure, 860px);
633
+ color: var(--dpk-ink-soft);
634
+ font-size: 13.5px;
635
+ line-height: 1.8;
636
+ overflow-wrap: anywhere;
637
+ word-break: auto-phrase;
638
+ text-wrap: pretty;
639
+ }
640
+
641
+ :where(.dpk-prose) :where(h1, h2, h3, h4) {
642
+ color: var(--dpk-ink);
643
+ font-family: var(--dpk-display);
644
+ font-weight: 660;
645
+ line-height: 1.3;
646
+ letter-spacing: -0.01em;
647
+ }
648
+
649
+ :where(.dpk-prose) :where(h1) {
650
+ margin: 0 0 12px;
651
+ font-size: 22px;
652
+ }
653
+
654
+ :where(.dpk-prose) :where(h2) {
655
+ margin: 36px 0 12px;
656
+ font-size: 16px;
657
+ }
658
+
659
+ :where(.dpk-prose) :where(h3) {
660
+ margin: 22px 0 8px;
661
+ font-size: 13.5px;
662
+ }
663
+
664
+ :where(.dpk-prose) :where(p, ul, ol, blockquote, pre, table) {
665
+ margin: 0 0 12px;
666
+ }
667
+
668
+ :where(.dpk-prose) > :where(:first-child) {
669
+ margin-top: 0;
670
+ }
671
+
672
+ :where(.dpk-prose) > :where(:last-child) {
673
+ margin-bottom: 0;
674
+ }
675
+
676
+ :where(.dpk-prose) :where(ul, ol) {
677
+ padding-left: 20px;
678
+ }
679
+
680
+ :where(.dpk-prose) :where(strong) {
681
+ color: var(--dpk-ink);
682
+ font-weight: 650;
683
+ }
684
+
685
+ :where(.dpk-prose) :where(a) {
686
+ color: var(--dpk-blue);
687
+ text-underline-offset: 2px;
688
+ }
689
+
690
+ :where(.dpk-prose) :where(:not(pre) > code) {
691
+ padding: 0.08em 0.35em;
692
+ border-radius: var(--dpk-radius-xs);
693
+ background: var(--dpk-paper-sunken);
694
+ color: var(--dpk-ink);
695
+ font-family: var(--dpk-mono);
696
+ font-size: 0.88em;
697
+ }
698
+
699
+ :where(.dpk-prose) :where(blockquote) {
700
+ padding: 8px 14px;
701
+ border-radius: var(--dpk-radius-sm);
702
+ background: var(--dpk-paper-sunken);
703
+ }
704
+
705
+ /*
706
+ * A code block is revealed rather than simply present: the frame fades up as
707
+ * its already-highlighted lines land, at the slow step so a long block reads
708
+ * as one panel instead of a flicker. 'dpk-code' (its own element) gets the
709
+ * same entrance from the outside, since its frame is in its shadow root.
710
+ */
711
+ @media (prefers-reduced-motion: no-preference) {
712
+ :where(.dpk-prose) :where(pre),
713
+ :where(dpk-code, dpk-code-group) {
714
+ animation: dpk-rise-in var(--dpk-dur-slow) var(--dpk-ease-out) backwards;
715
+ }
716
+ }
717
+
718
+ :where(.dpk-eyebrow) {
719
+ color: var(--dpk-ink-faint);
720
+ font-family: var(--dpk-mono);
721
+ font-size: 10px;
722
+ font-weight: 550;
723
+ letter-spacing: 0.1em;
724
+ text-transform: uppercase;
725
+ }
726
+
727
+ :where(.dpk-muted) {
728
+ color: var(--dpk-ink-faint);
729
+ }
730
+
731
+ /* ------------------------------------------------------------ button */
732
+
733
+ :where(.dpk-btn) {
734
+ display: inline-flex;
735
+ align-items: center;
736
+ justify-content: center;
737
+ gap: 6px;
738
+ min-height: 30px;
739
+ padding: 0 12px;
740
+ border: 1px solid var(--dpk-rule-strong);
741
+ border-radius: var(--dpk-radius-sm);
742
+ background: var(--dpk-paper-raised);
743
+ color: var(--dpk-ink);
744
+ font: inherit;
745
+ font-size: 12.5px;
746
+ font-weight: 550;
747
+ line-height: 1;
748
+ white-space: nowrap;
749
+ text-decoration: none;
750
+ box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
751
+ cursor: pointer;
752
+ transition:
753
+ background var(--dpk-dur) var(--dpk-ease),
754
+ border-color var(--dpk-dur) var(--dpk-ease),
755
+ box-shadow var(--dpk-dur) var(--dpk-ease),
756
+ transform var(--dpk-dur-fast) var(--dpk-ease);
757
+ }
758
+
759
+ :where(.dpk-btn):hover:not(:disabled) {
760
+ border-color: var(--dpk-rule-hover);
761
+ box-shadow: var(--dpk-bevel), var(--dpk-shadow-sm);
762
+ }
763
+
764
+ :where(.dpk-btn):active:not(:disabled) {
765
+ transform: translateY(1px) scale(0.985);
766
+ }
767
+
768
+ :where(.dpk-btn):focus-visible {
769
+ outline: none;
770
+ box-shadow: var(--dpk-focus);
771
+ }
772
+
773
+ :where(.dpk-btn):disabled {
774
+ opacity: 0.45;
775
+ cursor: not-allowed;
776
+ }
777
+
778
+ :where(.dpk-btn[data-variant='primary']) {
779
+ border-color: transparent;
780
+ background: var(--dpk-accent);
781
+ color: var(--dpk-accent-ink);
782
+ }
783
+
784
+ :where(.dpk-btn[data-variant='primary']):hover:not(:disabled) {
785
+ border-color: transparent;
786
+ background: var(--dpk-accent-strong);
787
+ }
788
+
789
+ :where(.dpk-btn[data-variant='ghost']) {
790
+ border-color: transparent;
791
+ background: transparent;
792
+ color: var(--dpk-ink-soft);
793
+ box-shadow: none;
794
+ }
795
+
796
+ :where(.dpk-btn[data-variant='ghost']):hover:not(:disabled) {
797
+ background: var(--dpk-paper-sunken);
798
+ color: var(--dpk-ink);
799
+ box-shadow: none;
800
+ }
801
+
802
+ :where(.dpk-btn[data-variant='danger']) {
803
+ color: var(--dpk-danger);
804
+ }
805
+
806
+ :where(.dpk-btn[data-variant='danger']):hover:not(:disabled) {
807
+ border-color: color-mix(in srgb, var(--dpk-danger) 40%, transparent);
808
+ background: var(--dpk-danger-soft);
809
+ }
810
+
811
+ :where(.dpk-btn[data-size='sm']) {
812
+ min-height: 24px;
813
+ padding: 0 9px;
814
+ font-size: 11.5px;
815
+ }
816
+
817
+ /*
818
+ * An icon-only button: a close ✕, a comment glyph, a card's hover tools.
819
+ * The same class and rules as the shadow-DOM components use (src/core/theme,
820
+ * \`iconButtonCss\`), so author content and the kit's own chrome read as one
821
+ * button family. data-size='sm' is quieter; data-variant='subtle' stays
822
+ * visible at rest instead of only on hover; data-active marks a toggle.
823
+ */
824
+ ${n(a=>`:where(${a})`)}
825
+
826
+ /*
827
+ * The comment trigger: a quiet pill that opens a review comment on the thing
828
+ * it sits beside (a commentable region's corner, a board's chrome). It stays
829
+ * out of the way at rest, warms to the accent on hover and while its popover
830
+ * is open, and with data-reveal it only appears once its .dpk-hover-host is
831
+ * hovered or focused (always, on a touch screen).
832
+ */
833
+ :where(.dpk-comment-btn) {
834
+ display: inline-flex;
835
+ align-items: center;
836
+ gap: 4px;
837
+ padding: 2px 8px 2px 6px;
838
+ border: 1px solid transparent;
839
+ border-radius: 999px;
840
+ background: transparent;
841
+ color: var(--dpk-ink-faint);
842
+ font: inherit;
843
+ font-size: 11.5px;
844
+ font-weight: 550;
845
+ line-height: 18px;
846
+ white-space: nowrap;
847
+ cursor: pointer;
848
+ transition:
849
+ background var(--dpk-dur-fast) var(--dpk-ease),
850
+ border-color var(--dpk-dur-fast) var(--dpk-ease),
851
+ color var(--dpk-dur-fast) var(--dpk-ease),
852
+ opacity var(--dpk-dur-fast) var(--dpk-ease);
853
+ }
854
+
855
+ :where(.dpk-comment-btn):hover,
856
+ :where(.dpk-comment-btn[aria-expanded='true']) {
857
+ border-color: color-mix(in srgb, var(--dpk-accent) 30%, transparent);
858
+ background: var(--dpk-accent-soft);
859
+ color: var(--dpk-accent);
860
+ }
861
+
862
+ :where(.dpk-comment-btn):focus-visible {
863
+ outline: none;
864
+ color: var(--dpk-accent);
865
+ box-shadow: var(--dpk-focus);
866
+ }
867
+
868
+ :where(.dpk-comment-btn) > :where(svg) {
869
+ flex: none;
870
+ width: 14px;
871
+ height: 14px;
872
+ }
873
+
874
+ /* Revealed by its host rather than standing at rest: the row or card it belongs to turns it up. */
875
+ :where(.dpk-comment-btn[data-reveal]) {
876
+ opacity: 0;
877
+ pointer-events: none;
878
+ }
879
+
880
+ :where(.dpk-hover-host):is(:hover, :focus-within) :where(.dpk-comment-btn[data-reveal]),
881
+ :where(.dpk-comment-btn[data-reveal]):is(:focus-visible, [aria-expanded='true']) {
882
+ opacity: 1;
883
+ pointer-events: auto;
884
+ }
885
+
886
+ @media (hover: none) {
887
+ :where(.dpk-comment-btn[data-reveal]) {
888
+ opacity: 1;
889
+ pointer-events: auto;
890
+ }
891
+ }
892
+
893
+ @media (prefers-reduced-motion: reduce) {
894
+ :where(.dpk-comment-btn) {
895
+ transition: none;
896
+ }
897
+ }
898
+
899
+ /*
900
+ * The copy button: compact, and it says what happened. data-state='copied'
901
+ * (or data-copied='true') turns it green, a failure red; data-variant
902
+ * 'outline' gives it a border where it stands on its own instead of in a row.
903
+ */
904
+ :where(.dpk-copy-btn) {
905
+ display: inline-flex;
906
+ align-items: center;
907
+ gap: 5px;
908
+ min-height: 24px;
909
+ padding: 0 8px;
910
+ border: 1px solid transparent;
911
+ border-radius: var(--dpk-radius-sm);
912
+ background: transparent;
913
+ color: var(--dpk-ink-soft);
914
+ font: inherit;
915
+ font-size: 11.5px;
916
+ font-weight: 600;
917
+ line-height: 1;
918
+ white-space: nowrap;
919
+ cursor: pointer;
920
+ transition:
921
+ background var(--dpk-dur-fast) var(--dpk-ease),
922
+ border-color var(--dpk-dur-fast) var(--dpk-ease),
923
+ color var(--dpk-dur-fast) var(--dpk-ease);
924
+ }
925
+
926
+ :where(.dpk-copy-btn):hover:not(:disabled) {
927
+ background: var(--dpk-paper-sunken);
928
+ color: var(--dpk-ink);
929
+ }
930
+
931
+ :where(.dpk-copy-btn):focus-visible {
932
+ outline: none;
933
+ box-shadow: var(--dpk-focus);
934
+ }
935
+
936
+ :where(.dpk-copy-btn[data-variant='outline']) {
937
+ border-color: var(--dpk-rule-strong);
938
+ background: var(--dpk-paper-raised);
939
+ box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
940
+ }
941
+
942
+ :where(.dpk-copy-btn[data-variant='outline']):hover:not(:disabled) {
943
+ border-color: var(--dpk-rule-hover);
944
+ }
945
+
946
+ :where(.dpk-copy-btn):is([data-state='copied'], [data-copied='true']) {
947
+ color: var(--dpk-green);
948
+ }
949
+
950
+ :where(.dpk-copy-btn[data-variant='outline']):is([data-state='copied'], [data-copied='true']) {
951
+ border-color: color-mix(in srgb, var(--dpk-green) 35%, transparent);
952
+ background: var(--dpk-green-soft);
953
+ }
954
+
955
+ :where(.dpk-copy-btn):is([data-state='failed'], [data-status='failed']) {
956
+ color: var(--dpk-danger);
957
+ }
958
+
959
+ :where(.dpk-copy-btn[data-variant='outline']):is([data-state='failed'], [data-status='failed']) {
960
+ border-color: color-mix(in srgb, var(--dpk-danger) 35%, transparent);
961
+ background: var(--dpk-danger-soft);
962
+ }
963
+
964
+ :where(.dpk-copy-btn):disabled {
965
+ opacity: 0.45;
966
+ cursor: not-allowed;
967
+ }
968
+
969
+ :where(.dpk-copy-btn) > :where(svg) {
970
+ flex: none;
971
+ width: 13px;
972
+ height: 13px;
973
+ }
974
+
975
+ /* ------------------------------------------------------------ badge / chip / kbd */
976
+
977
+ :where(.dpk-badge) {
978
+ --tone: var(--dpk-ink-soft);
979
+ --tone-soft: var(--dpk-paper-sunken);
980
+ display: inline-flex;
981
+ align-items: center;
982
+ gap: 4px;
983
+ padding: 2px 8px;
984
+ border-radius: 999px;
985
+ background: var(--tone-soft);
986
+ color: var(--tone);
987
+ font-size: 11px;
988
+ font-weight: 600;
989
+ line-height: 1.5;
990
+ white-space: nowrap;
991
+ vertical-align: 0.08em;
992
+ }
993
+
994
+ :where([data-tone='accent']) {
995
+ --tone: var(--dpk-accent);
996
+ --tone-soft: var(--dpk-accent-soft);
997
+ }
998
+
999
+ :where([data-tone='blue'], [data-tone='info']) {
1000
+ --tone: var(--dpk-blue);
1001
+ --tone-soft: var(--dpk-blue-soft);
1002
+ }
1003
+
1004
+ :where([data-tone='green'], [data-tone='success']) {
1005
+ --tone: var(--dpk-green);
1006
+ --tone-soft: var(--dpk-green-soft);
1007
+ }
1008
+
1009
+ :where([data-tone='amber'], [data-tone='warning']) {
1010
+ --tone: var(--dpk-amber);
1011
+ --tone-soft: var(--dpk-amber-soft);
1012
+ }
1013
+
1014
+ :where([data-tone='violet'], [data-tone='note']) {
1015
+ --tone: var(--dpk-violet);
1016
+ --tone-soft: var(--dpk-violet-soft);
1017
+ }
1018
+
1019
+ :where([data-tone='danger']) {
1020
+ --tone: var(--dpk-danger);
1021
+ --tone-soft: var(--dpk-danger-soft);
1022
+ }
1023
+
1024
+ :where(.dpk-chip) {
1025
+ display: inline-flex;
1026
+ align-items: center;
1027
+ gap: 7px;
1028
+ padding: 3px 12px 3px 4px;
1029
+ border: 1px solid var(--dpk-rule-strong);
1030
+ border-radius: 999px;
1031
+ background: var(--dpk-paper-raised);
1032
+ color: var(--dpk-ink-soft);
1033
+ font-size: 11.5px;
1034
+ line-height: 1.6;
1035
+ box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
1036
+ }
1037
+
1038
+ :where(.dpk-chip[data-tone]) {
1039
+ padding-left: 12px;
1040
+ border-color: color-mix(in srgb, var(--tone) 35%, transparent);
1041
+ background: var(--tone-soft);
1042
+ color: var(--tone);
1043
+ }
1044
+
1045
+ :where(.dpk-chip) > :where(b) {
1046
+ padding: 1px 8px;
1047
+ border-radius: 999px;
1048
+ background: var(--dpk-paper-sunken);
1049
+ color: var(--dpk-ink-faint);
1050
+ font-family: var(--dpk-mono);
1051
+ font-size: 9.5px;
1052
+ font-weight: 550;
1053
+ letter-spacing: 0.08em;
1054
+ text-transform: uppercase;
1055
+ }
1056
+
1057
+ /*
1058
+ * A link chip: the service's mark and the short label, for a story's
1059
+ * references and anything else that points outward. The mark is a 12px SVG
1060
+ * slot in currentColor; the label truncates rather than widening its line.
1061
+ */
1062
+ :where(.dpk-link-chip) {
1063
+ display: inline-flex;
1064
+ align-items: center;
1065
+ gap: 5px;
1066
+ min-width: 0;
1067
+ max-width: 100%;
1068
+ padding: 1px 8px 1px 6px;
1069
+ border: 1px solid var(--dpk-rule-strong);
1070
+ border-radius: 999px;
1071
+ background: var(--dpk-paper-raised);
1072
+ color: var(--dpk-ink-soft);
1073
+ font-family: var(--dpk-mono);
1074
+ font-size: 10.5px;
1075
+ font-weight: 600;
1076
+ line-height: 18px;
1077
+ text-decoration: none;
1078
+ transition:
1079
+ color var(--dpk-dur-fast) var(--dpk-ease),
1080
+ border-color var(--dpk-dur-fast) var(--dpk-ease);
1081
+ }
1082
+
1083
+ :where(.dpk-link-chip):hover {
1084
+ border-color: var(--dpk-ink-faint);
1085
+ color: var(--dpk-ink);
1086
+ }
1087
+
1088
+ :where(.dpk-link-chip):focus-visible {
1089
+ outline: none;
1090
+ box-shadow: var(--dpk-focus);
1091
+ }
1092
+
1093
+ :where(.dpk-link-chip) > :where(svg) {
1094
+ flex: none;
1095
+ width: 12px;
1096
+ height: 12px;
1097
+ }
1098
+
1099
+ :where(.dpk-link-chip) > :where(span) {
1100
+ min-width: 0;
1101
+ overflow: hidden;
1102
+ text-overflow: ellipsis;
1103
+ white-space: nowrap;
1104
+ }
1105
+
1106
+ :where(.dpk-kbd) {
1107
+ display: inline-block;
1108
+ min-width: 1.6em;
1109
+ padding: 0 5px;
1110
+ border: 1px solid var(--dpk-rule-strong);
1111
+ border-bottom-width: 2px;
1112
+ border-radius: var(--dpk-radius-xs);
1113
+ background: var(--dpk-paper-raised);
1114
+ color: var(--dpk-ink-soft);
1115
+ font-family: var(--dpk-mono);
1116
+ font-size: 0.82em;
1117
+ line-height: 1.5;
1118
+ text-align: center;
1119
+ }
1120
+
1121
+ /* ------------------------------------------------------------ motion on state */
1122
+
1123
+ /*
1124
+ * A figure that appears beside a thing — a status, a badge, a chip, a count —
1125
+ * grows into its place over the fast step. It is the same pop the kit's own
1126
+ * count badge uses (src/core/theme), at the size of a chip: enough to say
1127
+ * "this is new" without the row moving.
1128
+ */
1129
+ @media (prefers-reduced-motion: no-preference) {
1130
+ :where(.dpk-status, .dpk-badge, .dpk-chip, .dpk-link-chip, .dpk-kbd) {
1131
+ animation: dpk-scale-in var(--dpk-dur-fast) var(--dpk-ease-out);
1132
+ }
1133
+
1134
+ /* A press: the surface gives a hair, and the shadow with it. */
1135
+ :where(.dpk-btn, .dpk-copy-btn, .dpk-comment-btn, .dpk-add, .dpk-filter, .dpk-segmented > *):active {
1136
+ transform: scale(var(--dpk-press));
1137
+ }
1138
+
1139
+ /* A menu is lifted into place from the control that opened it. */
1140
+ :where(.dpk-menu[popover]:popover-open) {
1141
+ animation: dpk-scale-in var(--dpk-dur-fast) var(--dpk-ease-out);
1142
+ }
1143
+ }
1144
+
1145
+ :where(.dpk-menu-item):active {
1146
+ background: var(--dpk-paper-inset);
1147
+ }
1148
+
1149
+ ${d}
1150
+
1151
+ /* ------------------------------------------------------------ field */
1152
+
1153
+ :where(.dpk-field) {
1154
+ display: grid;
1155
+ gap: 6px;
1156
+ }
1157
+
1158
+ :where(.dpk-field-hint) {
1159
+ margin: -2px 0 0;
1160
+ color: var(--dpk-ink-faint);
1161
+ font-size: 11.5px;
1162
+ line-height: 1.5;
1163
+ }
1164
+
1165
+ :where(.dpk-field[data-invalid]) > :where(.dpk-label) {
1166
+ color: var(--dpk-danger);
1167
+ }
1168
+
1169
+ :where(.dpk-field[data-invalid]) > :where(.dpk-input, .dpk-select, .dpk-textarea) {
1170
+ border-color: var(--dpk-danger);
1171
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--dpk-danger) 22%, transparent);
1172
+ }
1173
+
1174
+ :where(.dpk-field[data-invalid]) > :where(.dpk-field-hint) {
1175
+ color: var(--dpk-danger);
1176
+ }
1177
+
1178
+ /* ------------------------------------------------------------ surfaces */
1179
+
1180
+ ${i}
1181
+
1182
+ /* Info by default; a data-tone (same specificity, earlier in the sheet) must still win. */
1183
+ :where(.dpk-callout:not([data-tone])) {
1184
+ --tone: var(--dpk-blue);
1185
+ --tone-soft: var(--dpk-blue-soft);
1186
+ }
1187
+
1188
+ :where(.dpk-callout) {
1189
+ position: relative;
1190
+ display: grid;
1191
+ gap: 2px;
1192
+ padding: 12px 14px 12px 40px;
1193
+ border: 1px solid color-mix(in srgb, var(--tone) 24%, transparent);
1194
+ border-radius: var(--dpk-radius);
1195
+ background: var(--tone-soft);
1196
+ color: var(--dpk-ink-soft);
1197
+ font-size: 13px;
1198
+ line-height: 1.65;
1199
+ }
1200
+
1201
+ :where(.dpk-callout)::before {
1202
+ content: '';
1203
+ position: absolute;
1204
+ top: 15px;
1205
+ left: 14px;
1206
+ width: 16px;
1207
+ height: 16px;
1208
+ background: var(--tone);
1209
+ mask: var(--dpk-callout-icon) center / contain no-repeat;
1210
+ -webkit-mask: var(--dpk-callout-icon) center / contain no-repeat;
1211
+ --dpk-callout-icon: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round'><circle cx='8' cy='8' r='6.3'/><path d='M8 7.2v3.6M8 5.2v.1'/></svg>");
1212
+ }
1213
+
1214
+ :where(.dpk-callout[data-tone='success'])::before {
1215
+ --dpk-callout-icon: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><circle cx='8' cy='8' r='6.3'/><path d='m5.4 8.2 1.8 1.8 3.4-3.6'/></svg>");
1216
+ }
1217
+
1218
+ :where(.dpk-callout[data-tone='warning'], .dpk-callout[data-tone='danger'])::before {
1219
+ --dpk-callout-icon: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><path d='M8 2.2 14.3 13H1.7z'/><path d='M8 6.6v3M8 11.3v.1'/></svg>");
1220
+ }
1221
+
1222
+ :where(.dpk-callout[data-tone='note'])::before {
1223
+ --dpk-callout-icon: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><path d='M3 2.5h7l3 3v8H3z'/><path d='M5.5 8h5M5.5 10.5h3.5'/></svg>");
1224
+ }
1225
+
1226
+ :where(.dpk-callout) > :where(*) {
1227
+ margin: 0;
1228
+ }
1229
+
1230
+ /* A callout arrives as a block of its own — and its mark lands a step later,
1231
+ like a stamp on the block it belongs to. */
1232
+ @media (prefers-reduced-motion: no-preference) {
1233
+ :where(.dpk-callout) {
1234
+ animation: dpk-rise-in var(--dpk-dur-slow) var(--dpk-ease-out) backwards;
1235
+ }
1236
+
1237
+ :where(.dpk-callout)::before {
1238
+ animation: dpk-pop var(--dpk-dur) var(--dpk-ease-spring) both;
1239
+ animation-delay: calc(var(--dpk-stagger) * 2);
1240
+ }
1241
+ }
1242
+
1243
+ :where(.dpk-callout) > :where(strong:first-child, b:first-child) {
1244
+ color: var(--dpk-ink);
1245
+ }
1246
+
1247
+ :where(.dpk-empty) {
1248
+ display: grid;
1249
+ justify-items: center;
1250
+ gap: 8px;
1251
+ max-width: 620px;
1252
+ padding: 28px 24px;
1253
+ border: 1px solid var(--dpk-rule-strong);
1254
+ border-radius: var(--dpk-radius-lg);
1255
+ background: var(--dpk-paper-sunken);
1256
+ color: var(--dpk-ink-faint);
1257
+ font-size: 13px;
1258
+ line-height: 1.65;
1259
+ text-align: center;
1260
+ }
1261
+
1262
+ :where(.dpk-empty[data-variant='dashed']) {
1263
+ border-style: dashed;
1264
+ }
1265
+
1266
+ :where(.dpk-empty) > :where(*) {
1267
+ margin: 0;
1268
+ }
1269
+
1270
+ :where(.dpk-empty) > :where(svg:first-child) {
1271
+ width: 24px;
1272
+ height: 24px;
1273
+ color: var(--dpk-ink-faint);
1274
+ opacity: 0.7;
1275
+ }
1276
+
1277
+ /*
1278
+ * A menu: the shell's settings menu and the context menu turned into an atom
1279
+ * for author content. One raised panel on the lg radius with the kit's own
1280
+ * bevel and shadow, 6px of padding and a 2px gap between its rows; a row is
1281
+ * a button, a link or an option that is on. It opens as a popover (the
1282
+ * browser places it) or sits inline as a plain panel.
1283
+ */
1284
+ :where(.dpk-menu) {
1285
+ box-sizing: border-box;
1286
+ display: grid;
1287
+ align-content: start;
1288
+ gap: 2px;
1289
+ min-width: 180px;
1290
+ margin: 0;
1291
+ padding: 6px;
1292
+ border: 1px solid var(--dpk-rule-strong);
1293
+ border-radius: var(--dpk-radius-lg);
1294
+ background: var(--dpk-paper-raised);
1295
+ box-shadow: var(--dpk-bevel), var(--dpk-shadow-lg);
1296
+ color: var(--dpk-ink);
1297
+ font-size: 12.5px;
1298
+ line-height: 1.45;
1299
+ }
1300
+
1301
+ /*
1302
+ * As a popover it keeps the browser's own hiding: this reset takes the UA's
1303
+ * margins and border off it, and its layout waits for :popover-open, so a
1304
+ * closed menu is never laid out.
1305
+ */
1306
+ :where(.dpk-menu[popover]) {
1307
+ position: fixed;
1308
+ inset: auto;
1309
+ display: none;
1310
+ max-height: min(70vh, 480px);
1311
+ margin: 0;
1312
+ overflow: auto;
1313
+ overscroll-behavior: contain;
1314
+ }
1315
+
1316
+ :where(.dpk-menu[popover]:popover-open) {
1317
+ display: grid;
1318
+ }
1319
+
1320
+ :where(.dpk-menu-item) {
1321
+ display: flex;
1322
+ align-items: center;
1323
+ gap: 9px;
1324
+ width: 100%;
1325
+ min-width: 0;
1326
+ padding: 7px 9px;
1327
+ border: 0;
1328
+ border-radius: var(--dpk-radius-sm);
1329
+ background: none;
1330
+ color: var(--dpk-ink);
1331
+ font: inherit;
1332
+ font-size: 12.5px;
1333
+ font-weight: 550;
1334
+ line-height: 1.4;
1335
+ text-align: start;
1336
+ text-decoration: none;
1337
+ cursor: pointer;
1338
+ transition:
1339
+ background var(--dpk-dur-fast) var(--dpk-ease),
1340
+ color var(--dpk-dur-fast) var(--dpk-ease);
1341
+ }
1342
+
1343
+ /* The row a pointer or a keyboard arrow is on, and the one the menu opened from. */
1344
+ :where(.dpk-menu-item):hover,
1345
+ :where(.dpk-menu-item[data-active]) {
1346
+ background: var(--dpk-paper-sunken);
1347
+ }
1348
+
1349
+ :where(.dpk-menu-item):focus-visible {
1350
+ outline: none;
1351
+ background: var(--dpk-paper-sunken);
1352
+ box-shadow: var(--dpk-focus);
1353
+ }
1354
+
1355
+ :where(.dpk-menu-item):is(:disabled, [aria-disabled='true']) {
1356
+ color: var(--dpk-ink-faint);
1357
+ opacity: 0.55;
1358
+ cursor: default;
1359
+ }
1360
+
1361
+ :where(.dpk-menu-item[aria-checked='true'], .dpk-menu-item[aria-selected='true'], .dpk-menu-item[data-checked]) {
1362
+ font-weight: 650;
1363
+ }
1364
+
1365
+ /* A destructive row carries the danger tone's own ink and hover tint. */
1366
+ :where(.dpk-menu-item[data-tone='danger']) {
1367
+ color: var(--dpk-danger);
1368
+ }
1369
+
1370
+ :where(.dpk-menu-item[data-tone='danger']):hover {
1371
+ background: var(--dpk-danger-soft);
1372
+ }
1373
+
1374
+ :where(.dpk-menu-item) > :where(svg) {
1375
+ flex: none;
1376
+ width: 15px;
1377
+ height: 15px;
1378
+ }
1379
+
1380
+ :where(.dpk-menu-heading) {
1381
+ margin: 0;
1382
+ padding: 6px 9px 2px;
1383
+ color: var(--dpk-ink-faint);
1384
+ font-size: 10.5px;
1385
+ font-weight: 650;
1386
+ letter-spacing: 0.04em;
1387
+ text-transform: uppercase;
1388
+ }
1389
+
1390
+ :where(.dpk-menu-separator) {
1391
+ height: 0;
1392
+ margin: 4px 2px;
1393
+ border: 0;
1394
+ border-top: 1px solid var(--dpk-rule);
1395
+ }
1396
+
1397
+ /* What the row is bound to on the keyboard, kept out of its label's way. */
1398
+ :where(.dpk-menu-shortcut) {
1399
+ margin-inline-start: auto;
1400
+ padding-inline-start: 16px;
1401
+ color: var(--dpk-ink-faint);
1402
+ font-family: var(--dpk-mono);
1403
+ font-size: 10.5px;
1404
+ font-variant-numeric: tabular-nums;
1405
+ white-space: nowrap;
1406
+ }
1407
+
1408
+ /* The check column: a box that fills with the accent while its row is on. */
1409
+ :where(.dpk-menu-check) {
1410
+ flex: none;
1411
+ display: inline-grid;
1412
+ place-items: center;
1413
+ width: 16px;
1414
+ height: 16px;
1415
+ border: 1px solid var(--dpk-rule-strong);
1416
+ border-radius: 4px;
1417
+ background: var(--dpk-paper-raised);
1418
+ /* A tick always in the markup keeps its place and shows only when checked. */
1419
+ color: transparent;
1420
+ }
1421
+
1422
+ :where(.dpk-menu-check) > :where(svg) {
1423
+ width: 12px;
1424
+ height: 12px;
1425
+ stroke-width: 3;
1426
+ }
1427
+
1428
+ :where(.dpk-menu-item[aria-checked='true'], .dpk-menu-item[data-checked]) > :where(.dpk-menu-check) {
1429
+ border-color: var(--dpk-accent-strong);
1430
+ background: var(--dpk-accent-strong);
1431
+ color: var(--dpk-accent-ink);
1432
+ }
1433
+
1434
+ /* A row of two lines: what it does, and what that means. */
1435
+ :where(.dpk-menu-text) {
1436
+ display: grid;
1437
+ gap: 2px;
1438
+ min-width: 0;
1439
+ }
1440
+
1441
+ :where(.dpk-menu-label) {
1442
+ min-width: 0;
1443
+ overflow: hidden;
1444
+ color: var(--dpk-ink);
1445
+ font-size: 13px;
1446
+ font-weight: 650;
1447
+ text-overflow: ellipsis;
1448
+ white-space: nowrap;
1449
+ }
1450
+
1451
+ :where(.dpk-menu-hint) {
1452
+ color: var(--dpk-ink-soft);
1453
+ font-size: 11.5px;
1454
+ font-weight: 400;
1455
+ line-height: 1.45;
1456
+ white-space: normal;
1457
+ }
1458
+
1459
+ /* ------------------------------------------------------------ table */
1460
+
1461
+ :where(table.dpk-table) {
1462
+ width: 100%;
1463
+ border-collapse: separate;
1464
+ border-spacing: 0;
1465
+ border: 1px solid var(--dpk-rule-strong);
1466
+ border-radius: var(--dpk-radius);
1467
+ background: var(--dpk-paper-raised);
1468
+ font-size: 12.5px;
1469
+ line-height: 1.55;
1470
+ overflow: hidden;
1471
+ }
1472
+
1473
+ :where(table.dpk-table) :where(th, td) {
1474
+ padding: 8px 12px;
1475
+ border-bottom: 1px solid var(--dpk-rule);
1476
+ text-align: left;
1477
+ vertical-align: top;
1478
+ /* A row's highlight follows the pointer across it instead of jumping cell
1479
+ to cell; a background fade costs no layout. */
1480
+ transition: background var(--dpk-dur-fast) var(--dpk-ease);
1481
+ }
1482
+
1483
+ :where(table.dpk-table) :where(thead th) {
1484
+ background: var(--dpk-paper-sunken);
1485
+ color: var(--dpk-ink-faint);
1486
+ font-size: 11px;
1487
+ font-weight: 600;
1488
+ letter-spacing: 0.02em;
1489
+ }
1490
+
1491
+ :where(table.dpk-table) :where(tbody tr:last-child) > :where(td, th) {
1492
+ border-bottom: none;
1493
+ }
1494
+
1495
+ :where(table.dpk-table) :where(tbody tr):hover > :where(td, th) {
1496
+ background: color-mix(in srgb, var(--dpk-paper-sunken) 60%, transparent);
1497
+ }
1498
+
1499
+ :where(table.dpk-table) :where(tbody tr[data-chosen], tbody tr[aria-current='true']) > :where(td, th) {
1500
+ background: var(--dpk-blue-soft);
1501
+ }
1502
+
1503
+ :where(table.dpk-table) :where(td.dpk-num, th.dpk-num) {
1504
+ font-variant-numeric: tabular-nums;
1505
+ text-align: right;
1506
+ }
1507
+
1508
+ :where(.dpk-table-wrap) {
1509
+ max-width: 100%;
1510
+ overflow-x: auto;
1511
+ }
1512
+
1513
+ /* ------------------------------------------------------------ data display */
1514
+
1515
+ :where(dl.dpk-dl) {
1516
+ display: grid;
1517
+ grid-template-columns: max-content minmax(0, 1fr);
1518
+ gap: 6px 18px;
1519
+ margin: 0;
1520
+ font-size: 13px;
1521
+ }
1522
+
1523
+ :where(dl.dpk-dl) > :where(dt) {
1524
+ color: var(--dpk-ink-faint);
1525
+ font-weight: 550;
1526
+ }
1527
+
1528
+ :where(dl.dpk-dl) > :where(dd) {
1529
+ margin: 0;
1530
+ color: var(--dpk-ink);
1531
+ }
1532
+
1533
+ :where(.dpk-stat) {
1534
+ display: flex;
1535
+ flex-direction: column;
1536
+ gap: 2px;
1537
+ padding: 12px 14px;
1538
+ border: 1px solid var(--dpk-rule-strong);
1539
+ border-radius: var(--dpk-radius);
1540
+ background: var(--dpk-paper-raised);
1541
+ box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
1542
+ }
1543
+
1544
+ :where(.dpk-stat) > :where(span) {
1545
+ color: var(--dpk-ink-faint);
1546
+ font-size: 11.5px;
1547
+ }
1548
+
1549
+ :where(.dpk-stat) > :where(strong) {
1550
+ color: var(--dpk-ink);
1551
+ font-family: var(--dpk-display);
1552
+ font-size: 22px;
1553
+ font-weight: 660;
1554
+ font-variant-numeric: tabular-nums;
1555
+ line-height: 1.25;
1556
+ }
1557
+
1558
+ :where(.dpk-stat) > :where(small) {
1559
+ color: var(--tone, var(--dpk-ink-faint));
1560
+ font-size: 11.5px;
1561
+ }
1562
+
1563
+ :where(ol.dpk-steps) {
1564
+ counter-reset: dpk-step;
1565
+ margin: 0;
1566
+ padding: 0;
1567
+ list-style: none;
1568
+ }
1569
+
1570
+ :where(ol.dpk-steps) > :where(li) {
1571
+ position: relative;
1572
+ padding: 0 0 18px 36px;
1573
+ counter-increment: dpk-step;
1574
+ color: var(--dpk-ink-soft);
1575
+ }
1576
+
1577
+ :where(ol.dpk-steps) > :where(li)::before {
1578
+ content: counter(dpk-step);
1579
+ position: absolute;
1580
+ top: 0;
1581
+ left: 0;
1582
+ display: grid;
1583
+ place-items: center;
1584
+ width: 24px;
1585
+ height: 24px;
1586
+ border: 1px solid var(--dpk-rule-strong);
1587
+ border-radius: 999px;
1588
+ background: var(--dpk-paper-raised);
1589
+ color: var(--dpk-ink-soft);
1590
+ font-family: var(--dpk-mono);
1591
+ font-size: 11px;
1592
+ font-weight: 600;
1593
+ }
1594
+
1595
+ :where(ol.dpk-steps) > :where(li:not(:last-child))::after {
1596
+ content: '';
1597
+ position: absolute;
1598
+ top: 28px;
1599
+ bottom: 4px;
1600
+ left: 12px;
1601
+ width: 1px;
1602
+ background: var(--dpk-rule-strong);
1603
+ }
1604
+
1605
+ :where(ol.dpk-steps) > :where(li[data-state='done'])::before {
1606
+ content: '✓';
1607
+ border-color: transparent;
1608
+ background: var(--dpk-green-soft);
1609
+ color: var(--dpk-green);
1610
+ }
1611
+
1612
+ :where(ol.dpk-steps) > :where(li[data-state='current'])::before {
1613
+ border-color: var(--dpk-blue);
1614
+ background: var(--dpk-blue);
1615
+ color: #fff;
1616
+ }
1617
+
1618
+ :where(ol.dpk-steps) > :where(li) > :where(b, strong):first-child {
1619
+ display: block;
1620
+ color: var(--dpk-ink);
1621
+ line-height: 24px;
1622
+ }
1623
+
1624
+ /*
1625
+ * A timeline: a vertical rail with a node per entry, the date beside it in
1626
+ * the when column and the entry itself in the body. The rail runs through
1627
+ * each entry's own padding, so the nodes read as one line; data-variant
1628
+ * 'add' ends it in a dashed stub, and a data-tone colors a node through
1629
+ * --tone.
1630
+ */
1631
+ :where(ol.dpk-timeline) {
1632
+ --dpk-timeline-when: 96px;
1633
+ --dpk-timeline-node: 26px;
1634
+ --dpk-timeline-gap: 24px;
1635
+ display: grid;
1636
+ margin: 0;
1637
+ padding: 0;
1638
+ list-style: none;
1639
+ }
1640
+
1641
+ :where(.dpk-timeline-entry) {
1642
+ display: grid;
1643
+ grid-template-columns: var(--dpk-timeline-when) var(--dpk-timeline-node) minmax(0, 1fr);
1644
+ grid-template-areas: 'when rail body';
1645
+ column-gap: 14px;
1646
+ padding-bottom: var(--dpk-timeline-gap);
1647
+ }
1648
+
1649
+ :where(.dpk-timeline-entry:last-child) {
1650
+ padding-bottom: 0;
1651
+ }
1652
+
1653
+ :where(.dpk-timeline-when) {
1654
+ grid-area: when;
1655
+ display: flex;
1656
+ justify-content: flex-end;
1657
+ padding-top: 3px;
1658
+ }
1659
+
1660
+ :where(.dpk-timeline-date) {
1661
+ color: var(--dpk-ink);
1662
+ font-family: var(--dpk-mono);
1663
+ font-size: 11.5px;
1664
+ font-weight: 600;
1665
+ font-variant-numeric: tabular-nums;
1666
+ text-align: right;
1667
+ white-space: nowrap;
1668
+ }
1669
+
1670
+ :where(.dpk-timeline-rail) {
1671
+ grid-area: rail;
1672
+ position: relative;
1673
+ display: flex;
1674
+ justify-content: center;
1675
+ }
1676
+
1677
+ :where(.dpk-timeline-rail)::before {
1678
+ content: '';
1679
+ position: absolute;
1680
+ top: 0;
1681
+ bottom: calc(-1 * var(--dpk-timeline-gap));
1682
+ left: calc(50% - 1px);
1683
+ width: 2px;
1684
+ border-radius: 1px;
1685
+ background: var(--dpk-rule-strong);
1686
+ }
1687
+
1688
+ /* The first node starts the rail, the last one ends it. */
1689
+ :where(.dpk-timeline-entry:first-child) > :where(.dpk-timeline-rail)::before {
1690
+ top: calc(var(--dpk-timeline-node) / 2);
1691
+ }
1692
+
1693
+ :where(.dpk-timeline-entry:last-child) > :where(.dpk-timeline-rail)::before {
1694
+ bottom: auto;
1695
+ height: calc(var(--dpk-timeline-node) / 2);
1696
+ }
1697
+
1698
+ :where(.dpk-timeline-entry[data-variant='add']) > :where(.dpk-timeline-rail)::before {
1699
+ bottom: auto;
1700
+ height: calc(var(--dpk-timeline-node) / 2);
1701
+ background: repeating-linear-gradient(to bottom, var(--dpk-rule-strong) 0 3px, transparent 3px 7px);
1702
+ }
1703
+
1704
+ :where(.dpk-timeline-node) {
1705
+ position: relative;
1706
+ display: grid;
1707
+ place-items: center;
1708
+ width: var(--dpk-timeline-node);
1709
+ height: var(--dpk-timeline-node);
1710
+ border: 1px solid color-mix(in srgb, var(--tone, var(--dpk-rule-strong)) 45%, transparent);
1711
+ border-radius: 50%;
1712
+ background: var(--dpk-paper-raised);
1713
+ color: var(--tone, var(--dpk-ink));
1714
+ font-family: var(--dpk-mono);
1715
+ font-size: 11px;
1716
+ font-weight: 650;
1717
+ font-variant-numeric: tabular-nums;
1718
+ /* A ring of page color cuts the rail around the node. */
1719
+ box-shadow:
1720
+ 0 0 0 4px var(--dpk-timeline-ring, var(--dpk-paper)),
1721
+ var(--dpk-bevel),
1722
+ var(--dpk-shadow-xs);
1723
+ }
1724
+
1725
+ :where(.dpk-timeline-entry[data-variant='add']) > :where(.dpk-timeline-node) {
1726
+ border-style: dashed;
1727
+ border-color: var(--dpk-rule-strong);
1728
+ background: var(--dpk-paper);
1729
+ box-shadow: 0 0 0 4px var(--dpk-timeline-ring, var(--dpk-paper));
1730
+ }
1731
+
1732
+ /* The add node draws its own plus, so an empty node is enough. */
1733
+ :where(.dpk-timeline-entry[data-variant='add']) > :where(.dpk-timeline-node)::before,
1734
+ :where(.dpk-timeline-entry[data-variant='add']) > :where(.dpk-timeline-node)::after {
1735
+ content: '';
1736
+ position: absolute;
1737
+ top: calc(50% - 0.75px);
1738
+ left: calc(50% - 5px);
1739
+ width: 10px;
1740
+ height: 1.5px;
1741
+ border-radius: 1px;
1742
+ background: var(--dpk-ink-faint);
1743
+ }
1744
+
1745
+ :where(.dpk-timeline-entry[data-variant='add']) > :where(.dpk-timeline-node)::after {
1746
+ transform: rotate(90deg);
1747
+ }
1748
+
1749
+ :where(.dpk-timeline-body) {
1750
+ grid-area: body;
1751
+ display: grid;
1752
+ gap: 6px;
1753
+ min-width: 0;
1754
+ justify-items: start;
1755
+ }
1756
+
1757
+ /*
1758
+ * A milestone: the same timeline, one slice of the work per entry — a title,
1759
+ * what it is for, and the facts that measure it. data-at marks the entry the
1760
+ * page stands on, whose node takes the accent; data-empty leaves a date or a
1761
+ * text the timeline has none for faint rather than blank.
1762
+ */
1763
+ :where(.dpk-timeline-entry[data-at]) > :where(.dpk-timeline-node) {
1764
+ border-color: color-mix(in srgb, var(--dpk-blue) 55%, transparent);
1765
+ background: var(--dpk-blue-soft);
1766
+ color: var(--dpk-blue);
1767
+ }
1768
+
1769
+ :where(.dpk-timeline-title) {
1770
+ min-width: 0;
1771
+ margin: 0;
1772
+ color: var(--dpk-ink);
1773
+ font-family: var(--dpk-display);
1774
+ font-size: 16px;
1775
+ font-weight: 660;
1776
+ line-height: 1.35;
1777
+ letter-spacing: -0.01em;
1778
+ }
1779
+
1780
+ :where(.dpk-timeline-text) {
1781
+ max-width: 62ch;
1782
+ margin: 0;
1783
+ color: var(--dpk-ink-soft);
1784
+ font-size: 13px;
1785
+ line-height: 1.7;
1786
+ }
1787
+
1788
+ :where(.dpk-timeline-date[data-empty], .dpk-timeline-title[data-empty], .dpk-timeline-text[data-empty]) {
1789
+ color: var(--dpk-ink-faint);
1790
+ font-weight: 500;
1791
+ }
1792
+
1793
+ /* What the slice is worth: label over value, as many facts as fit on the line. */
1794
+ :where(dl.dpk-timeline-facts) {
1795
+ display: flex;
1796
+ flex-wrap: wrap;
1797
+ gap: 10px 32px;
1798
+ margin: 2px 0 0;
1799
+ }
1800
+
1801
+ :where(dl.dpk-timeline-facts) > :where(div) {
1802
+ min-width: 0;
1803
+ }
1804
+
1805
+ :where(dl.dpk-timeline-facts) :where(dt) {
1806
+ margin-bottom: 3px;
1807
+ color: var(--dpk-ink-faint);
1808
+ font-size: 11px;
1809
+ font-weight: 600;
1810
+ letter-spacing: 0.02em;
1811
+ }
1812
+
1813
+ :where(dl.dpk-timeline-facts) :where(dd) {
1814
+ display: flex;
1815
+ align-items: center;
1816
+ gap: 10px;
1817
+ margin: 0;
1818
+ color: var(--dpk-ink-faint);
1819
+ font-size: 12px;
1820
+ }
1821
+
1822
+ :where(dl.dpk-timeline-facts) :where(strong) {
1823
+ color: var(--dpk-ink);
1824
+ font-size: 15px;
1825
+ font-weight: 650;
1826
+ font-variant-numeric: tabular-nums;
1827
+ }
1828
+
1829
+ /* Narrow: the date moves above the name and the rail takes the left column. */
1830
+ @media (max-width: 640px) {
1831
+ :where(ol.dpk-timeline) {
1832
+ --dpk-timeline-node: 24px;
1833
+ }
1834
+
1835
+ :where(.dpk-timeline-entry) {
1836
+ grid-template-columns: var(--dpk-timeline-node) minmax(0, 1fr);
1837
+ grid-template-areas:
1838
+ 'rail when'
1839
+ 'rail body';
1840
+ column-gap: 14px;
1841
+ }
1842
+
1843
+ :where(.dpk-timeline-when) {
1844
+ justify-content: flex-start;
1845
+ padding-top: 0;
1846
+ }
1847
+
1848
+ :where(.dpk-timeline-date) {
1849
+ text-align: left;
1850
+ }
1851
+ }
1852
+
1853
+ :where(progress.dpk-progress, meter.dpk-progress) {
1854
+ width: 100%;
1855
+ height: 6px;
1856
+ border: none;
1857
+ border-radius: 999px;
1858
+ background: var(--dpk-paper-inset);
1859
+ overflow: hidden;
1860
+ appearance: none;
1861
+ }
1862
+
1863
+ :where(progress.dpk-progress)::-webkit-progress-bar {
1864
+ background: var(--dpk-paper-inset);
1865
+ }
1866
+
1867
+ :where(progress.dpk-progress)::-webkit-progress-value {
1868
+ border-radius: 999px;
1869
+ background: var(--tone, var(--dpk-blue));
1870
+ }
1871
+
1872
+ :where(progress.dpk-progress)::-moz-progress-bar {
1873
+ border-radius: 999px;
1874
+ background: var(--tone, var(--dpk-blue));
1875
+ }
1876
+
1877
+ :where(.dpk-meter) {
1878
+ display: block;
1879
+ width: 100%;
1880
+ height: 6px;
1881
+ border-radius: 999px;
1882
+ background: var(--dpk-paper-inset);
1883
+ overflow: hidden;
1884
+ }
1885
+
1886
+ :where(.dpk-meter)::before {
1887
+ content: '';
1888
+ display: block;
1889
+ width: clamp(0%, calc(var(--dpk-value, 0) * 1%), 100%);
1890
+ height: 100%;
1891
+ border-radius: inherit;
1892
+ background: var(--tone, var(--dpk-blue));
1893
+ transform-origin: left center;
1894
+ transition: width var(--dpk-dur-slow) var(--dpk-ease);
1895
+ }
1896
+
1897
+ /*
1898
+ * The fill grows in from its start edge the first time the bar is drawn, and
1899
+ * a bar with no value yet ('data-loading') says so with the one continuous
1900
+ * animation in the kit: a shimmer sweeping across the fill. Both are
1901
+ * transform/opacity only — a progress bar never nudges its own row.
1902
+ */
1903
+ @media (prefers-reduced-motion: no-preference) {
1904
+ :where(.dpk-meter)::before {
1905
+ animation: dpk-grow-in var(--dpk-dur-slow) var(--dpk-ease-out);
1906
+ }
1907
+
1908
+ :where(.dpk-meter[data-loading])::before {
1909
+ width: 100%;
1910
+ background-image: linear-gradient(
1911
+ 90deg,
1912
+ transparent 0%,
1913
+ color-mix(in srgb, var(--dpk-paper-raised) 65%, transparent) 50%,
1914
+ transparent 100%
1915
+ );
1916
+ background-size: 50% 100%;
1917
+ background-repeat: no-repeat;
1918
+ animation: dpk-shimmer 1.4s var(--dpk-ease) infinite;
1919
+ }
1920
+ }
1921
+
1922
+ /*
1923
+ * A status mark: a 16px slot for a status's own SVG (data-size 'sm' or 'lg'
1924
+ * resizes it), and with data-progress a ring around it, swept from the tone
1925
+ * to --dpk-progress (0-100) and masked to a hairline, so one small mark says
1926
+ * both which status a thing is in and how far through it is.
1927
+ */
1928
+ :where(.dpk-status-mark) {
1929
+ display: inline-grid;
1930
+ flex: none;
1931
+ place-items: center;
1932
+ width: 16px;
1933
+ height: 16px;
1934
+ color: var(--tone, var(--dpk-ink-faint));
1935
+ }
1936
+
1937
+ :where(.dpk-status-mark) > :where(svg) {
1938
+ display: block;
1939
+ width: 100%;
1940
+ height: 100%;
1941
+ }
1942
+
1943
+ :where(.dpk-status-mark[data-size='sm']) {
1944
+ width: 12px;
1945
+ height: 12px;
1946
+ }
1947
+
1948
+ :where(.dpk-status-mark[data-size='lg']) {
1949
+ width: 22px;
1950
+ height: 22px;
1951
+ }
1952
+
1953
+ /* The ring sits outside the slot, so it never squeezes the mark it measures. */
1954
+ :where(.dpk-status-mark[data-progress]) {
1955
+ position: relative;
1956
+ }
1957
+
1958
+ :where(.dpk-status-mark[data-progress])::before {
1959
+ content: '';
1960
+ position: absolute;
1961
+ inset: -3px;
1962
+ border-radius: 50%;
1963
+ background: conic-gradient(
1964
+ var(--tone, var(--dpk-blue)) calc(var(--dpk-progress, 0) * 1%),
1965
+ color-mix(in srgb, var(--dpk-ink-faint) 25%, transparent) 0
1966
+ );
1967
+ mask: radial-gradient(closest-side, transparent calc(100% - 2.5px), #000 calc(100% - 2.5px));
1968
+ -webkit-mask: radial-gradient(closest-side, transparent calc(100% - 2.5px), #000 calc(100% - 2.5px));
1969
+ }
1970
+
1971
+ /*
1972
+ * A segmented status bar: the statuses a thing has passed through, one 6px
1973
+ * bar of them. Each segment grows by --dpk-value, an empty one stays faint,
1974
+ * and data-size 'lg' thickens the whole bar where it is the point of a view.
1975
+ */
1976
+ :where(.dpk-status-segments) {
1977
+ display: flex;
1978
+ gap: 2px;
1979
+ height: 6px;
1980
+ min-width: 0;
1981
+ }
1982
+
1983
+ :where(.dpk-status-segments[data-size='lg']) {
1984
+ height: 8px;
1985
+ }
1986
+
1987
+ :where(.dpk-status-segment) {
1988
+ flex-grow: var(--dpk-value, 1);
1989
+ flex-basis: 0;
1990
+ min-width: 4px;
1991
+ border-radius: 3px;
1992
+ background: var(--tone, var(--dpk-blue));
1993
+ transition: flex-grow var(--dpk-dur-slow) var(--dpk-ease);
1994
+ }
1995
+
1996
+ :where(.dpk-status-segment[data-empty]) {
1997
+ background: color-mix(in srgb, var(--dpk-ink-faint) 30%, transparent);
1998
+ }
1999
+
2000
+ @media (prefers-reduced-motion: reduce) {
2001
+ :where(.dpk-status-segment) {
2002
+ transition: none;
2003
+ }
2004
+ }
2005
+
2006
+ /*
2007
+ * The weight bar: how a whole is shared out between named parts, as one bar
2008
+ * of them with a scale under it. CSS only and no dragging: a part grows by
2009
+ * --dpk-value, and a scale's ticks stand at --dpk-at, a percentage of the
2010
+ * track's own width.
2011
+ */
2012
+ :where(.dpk-weight-bar) {
2013
+ display: grid;
2014
+ grid-template-columns: minmax(0, 1fr) auto;
2015
+ column-gap: 10px;
2016
+ row-gap: 4px;
2017
+ align-items: center;
2018
+ min-width: 0;
2019
+ }
2020
+
2021
+ :where(.dpk-weight-track) {
2022
+ grid-area: 1 / 1;
2023
+ display: flex;
2024
+ gap: 2px;
2025
+ height: 32px;
2026
+ border-radius: var(--dpk-radius-sm);
2027
+ background: var(--dpk-paper-sunken);
2028
+ overflow: hidden;
2029
+ }
2030
+
2031
+ :where(.dpk-weight-part) {
2032
+ display: flex;
2033
+ align-items: center;
2034
+ gap: 6px;
2035
+ flex-grow: var(--dpk-value, 1);
2036
+ flex-basis: 0;
2037
+ min-width: 0;
2038
+ padding: 0 9px;
2039
+ overflow: hidden;
2040
+ background: color-mix(in oklab, var(--tone, var(--dpk-blue)) 16%, var(--dpk-paper-raised));
2041
+ color: var(--dpk-ink);
2042
+ font-size: 11.5px;
2043
+ font-weight: 600;
2044
+ white-space: nowrap;
2045
+ transition: flex-grow var(--dpk-dur) var(--dpk-ease);
2046
+ }
2047
+
2048
+ :where(.dpk-weight-name) {
2049
+ min-width: 0;
2050
+ overflow: hidden;
2051
+ text-overflow: ellipsis;
2052
+ }
2053
+
2054
+ :where(.dpk-weight-value) {
2055
+ flex: none;
2056
+ color: var(--tone, var(--dpk-blue));
2057
+ font-family: var(--dpk-mono);
2058
+ font-variant-numeric: tabular-nums;
2059
+ }
2060
+
2061
+ /* What the bar is out of: the whole at its end, outside the track. */
2062
+ :where(.dpk-weight-end) {
2063
+ grid-area: 1 / 2;
2064
+ align-self: center;
2065
+ display: flex;
2066
+ align-items: center;
2067
+ gap: 6px;
2068
+ color: var(--dpk-ink-faint);
2069
+ font-size: 11.5px;
2070
+ font-weight: 600;
2071
+ white-space: nowrap;
2072
+ }
2073
+
2074
+ :where(.dpk-weight-scale) {
2075
+ grid-area: 2 / 1;
2076
+ position: relative;
2077
+ height: 14px;
2078
+ color: var(--dpk-ink-faint);
2079
+ font-family: var(--dpk-mono);
2080
+ font-size: 10px;
2081
+ }
2082
+
2083
+ /* A tick with its value under it, standing where --dpk-at puts it. */
2084
+ :where(.dpk-weight-tick) {
2085
+ position: absolute;
2086
+ top: 0;
2087
+ left: calc(var(--dpk-at, 0) * 1%);
2088
+ padding-top: 5px;
2089
+ transform: translateX(-50%);
2090
+ white-space: nowrap;
2091
+ }
2092
+
2093
+ :where(.dpk-weight-tick)::before {
2094
+ content: '';
2095
+ position: absolute;
2096
+ top: 0;
2097
+ left: 50%;
2098
+ width: 1px;
2099
+ height: 3px;
2100
+ background: var(--dpk-rule-strong);
2101
+ }
2102
+
2103
+ @media (prefers-reduced-motion: reduce) {
2104
+ :where(.dpk-weight-part) {
2105
+ transition: none;
2106
+ }
2107
+ }
2108
+
2109
+ ${r}
2110
+
2111
+ ${p}
2112
+
2113
+ /* ------------------------------------------------------------ disclosure */
2114
+
2115
+ :where(details.dpk-disclosure) {
2116
+ border: 1px solid var(--dpk-rule-strong);
2117
+ border-radius: var(--dpk-radius);
2118
+ background: var(--dpk-paper-raised);
2119
+ }
2120
+
2121
+ :where(details.dpk-disclosure + details.dpk-disclosure) {
2122
+ margin-top: 8px;
2123
+ }
2124
+
2125
+ :where(details.dpk-disclosure) > :where(summary) {
2126
+ display: flex;
2127
+ align-items: center;
2128
+ gap: 8px;
2129
+ padding: 10px 14px;
2130
+ color: var(--dpk-ink);
2131
+ font-weight: 600;
2132
+ list-style: none;
2133
+ cursor: pointer;
2134
+ }
2135
+
2136
+ :where(details.dpk-disclosure) > :where(summary)::-webkit-details-marker {
2137
+ display: none;
2138
+ }
2139
+
2140
+ :where(details.dpk-disclosure) > :where(summary)::before {
2141
+ content: '';
2142
+ width: 7px;
2143
+ height: 7px;
2144
+ border-right: 1.5px solid var(--dpk-ink-faint);
2145
+ border-bottom: 1.5px solid var(--dpk-ink-faint);
2146
+ transform: rotate(-45deg);
2147
+ transition: transform var(--dpk-dur) var(--dpk-ease);
2148
+ }
2149
+
2150
+ :where(details.dpk-disclosure[open]) > :where(summary)::before {
2151
+ transform: rotate(45deg);
2152
+ }
2153
+
2154
+ :where(details.dpk-disclosure) > :where(summary):focus-visible {
2155
+ outline: none;
2156
+ border-radius: var(--dpk-radius);
2157
+ box-shadow: var(--dpk-focus);
2158
+ }
2159
+
2160
+ :where(details.dpk-disclosure) > :where(:not(summary)) {
2161
+ margin: 0;
2162
+ padding: 0 14px 12px 29px;
2163
+ color: var(--dpk-ink-soft);
2164
+ }
2165
+ `;export{s as a,r as c};