@ketvietlab/design-system 0.1.3

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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -0
  3. package/dist/catalogue/catalogue.css +344 -0
  4. package/dist/catalogue/index.d.ts +22 -0
  5. package/dist/catalogue/index.d.ts.map +1 -0
  6. package/dist/catalogue/index.js +421 -0
  7. package/dist/catalogue/index.js.map +1 -0
  8. package/dist/catalogue/page-surfaces.d.ts +15 -0
  9. package/dist/catalogue/page-surfaces.d.ts.map +1 -0
  10. package/dist/catalogue/page-surfaces.js +162 -0
  11. package/dist/catalogue/page-surfaces.js.map +1 -0
  12. package/dist/catalogue/styles.css +2 -0
  13. package/dist/contract/index.d.ts +3 -0
  14. package/dist/contract/index.d.ts.map +1 -0
  15. package/dist/contract/index.js +37 -0
  16. package/dist/contract/index.js.map +1 -0
  17. package/dist/foundations/reset.css +42 -0
  18. package/dist/foundations/tokens.css +305 -0
  19. package/dist/index.d.ts +35 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +20 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/layouts/index.d.ts +68 -0
  24. package/dist/layouts/index.d.ts.map +1 -0
  25. package/dist/layouts/index.js +66 -0
  26. package/dist/layouts/index.js.map +1 -0
  27. package/dist/layouts/layouts.css +332 -0
  28. package/dist/layouts/shell.css +154 -0
  29. package/dist/layouts/shell.d.ts +27 -0
  30. package/dist/layouts/shell.d.ts.map +1 -0
  31. package/dist/layouts/shell.js +24 -0
  32. package/dist/layouts/shell.js.map +1 -0
  33. package/dist/patterns/board-page.d.ts +14 -0
  34. package/dist/patterns/board-page.d.ts.map +1 -0
  35. package/dist/patterns/board-page.js +28 -0
  36. package/dist/patterns/board-page.js.map +1 -0
  37. package/dist/patterns/dashboard-page.d.ts +13 -0
  38. package/dist/patterns/dashboard-page.d.ts.map +1 -0
  39. package/dist/patterns/dashboard-page.js +25 -0
  40. package/dist/patterns/dashboard-page.js.map +1 -0
  41. package/dist/patterns/data-table.d.ts +26 -0
  42. package/dist/patterns/data-table.d.ts.map +1 -0
  43. package/dist/patterns/data-table.js +6 -0
  44. package/dist/patterns/data-table.js.map +1 -0
  45. package/dist/patterns/form-page.d.ts +8 -0
  46. package/dist/patterns/form-page.d.ts.map +1 -0
  47. package/dist/patterns/form-page.js +22 -0
  48. package/dist/patterns/form-page.js.map +1 -0
  49. package/dist/patterns/list-page.d.ts +31 -0
  50. package/dist/patterns/list-page.d.ts.map +1 -0
  51. package/dist/patterns/list-page.js +41 -0
  52. package/dist/patterns/list-page.js.map +1 -0
  53. package/dist/patterns/modal-sheet.d.ts +11 -0
  54. package/dist/patterns/modal-sheet.d.ts.map +1 -0
  55. package/dist/patterns/modal-sheet.js +11 -0
  56. package/dist/patterns/modal-sheet.js.map +1 -0
  57. package/dist/patterns/page-shell.d.ts +24 -0
  58. package/dist/patterns/page-shell.d.ts.map +1 -0
  59. package/dist/patterns/page-shell.js +11 -0
  60. package/dist/patterns/page-shell.js.map +1 -0
  61. package/dist/patterns/patterns.css +1435 -0
  62. package/dist/patterns/pipeline.d.ts +29 -0
  63. package/dist/patterns/pipeline.d.ts.map +1 -0
  64. package/dist/patterns/pipeline.js +26 -0
  65. package/dist/patterns/pipeline.js.map +1 -0
  66. package/dist/patterns/record-form.d.ts +18 -0
  67. package/dist/patterns/record-form.d.ts.map +1 -0
  68. package/dist/patterns/record-form.js +14 -0
  69. package/dist/patterns/record-form.js.map +1 -0
  70. package/dist/patterns/record-page.d.ts +30 -0
  71. package/dist/patterns/record-page.d.ts.map +1 -0
  72. package/dist/patterns/record-page.js +29 -0
  73. package/dist/patterns/record-page.js.map +1 -0
  74. package/dist/patterns/workspace-page.d.ts +23 -0
  75. package/dist/patterns/workspace-page.d.ts.map +1 -0
  76. package/dist/patterns/workspace-page.js +26 -0
  77. package/dist/patterns/workspace-page.js.map +1 -0
  78. package/dist/primitives/actions.d.ts +30 -0
  79. package/dist/primitives/actions.d.ts.map +1 -0
  80. package/dist/primitives/actions.js +8 -0
  81. package/dist/primitives/actions.js.map +1 -0
  82. package/dist/primitives/feedback.d.ts +19 -0
  83. package/dist/primitives/feedback.d.ts.map +1 -0
  84. package/dist/primitives/feedback.js +23 -0
  85. package/dist/primitives/feedback.js.map +1 -0
  86. package/dist/primitives/field.d.ts +22 -0
  87. package/dist/primitives/field.d.ts.map +1 -0
  88. package/dist/primitives/field.js +29 -0
  89. package/dist/primitives/field.js.map +1 -0
  90. package/dist/primitives/navigation.css +99 -0
  91. package/dist/primitives/navigation.d.ts +26 -0
  92. package/dist/primitives/navigation.d.ts.map +1 -0
  93. package/dist/primitives/navigation.js +16 -0
  94. package/dist/primitives/navigation.js.map +1 -0
  95. package/dist/primitives/primitives.css +489 -0
  96. package/dist/primitives/progress.css +46 -0
  97. package/dist/primitives/progress.d.ts +10 -0
  98. package/dist/primitives/progress.d.ts.map +1 -0
  99. package/dist/primitives/progress.js +13 -0
  100. package/dist/primitives/progress.js.map +1 -0
  101. package/dist/primitives/status.d.ts +27 -0
  102. package/dist/primitives/status.d.ts.map +1 -0
  103. package/dist/primitives/status.js +16 -0
  104. package/dist/primitives/status.js.map +1 -0
  105. package/dist/styles.css +9 -0
  106. package/package.json +58 -0
@@ -0,0 +1,1435 @@
1
+ @layer ket.app {
2
+ :where([data-kv-design-system])
3
+ :is([data-ui="list-page"], [data-ui="form-page"], [data-ui="dashboard-page"], [data-ui="board-page"]) {
4
+ --kv-page-title-size: 1.5rem;
5
+ }
6
+
7
+ :where([data-kv-design-system]) [data-ui="list-page"] {
8
+ display: grid;
9
+ min-width: 0;
10
+ gap: var(--kv-space-3);
11
+ padding: var(--kv-space-6) var(--kv-page-padding-x) var(--kv-space-10);
12
+ }
13
+
14
+ :where([data-kv-design-system]) [data-ui="list-page-header"] {
15
+ min-width: 0;
16
+ padding-bottom: var(--kv-space-2);
17
+ }
18
+
19
+ :where([data-kv-design-system]) [data-ui="list-page-heading"] {
20
+ display: grid;
21
+ min-width: 0;
22
+ gap: var(--kv-space-1);
23
+ }
24
+
25
+ :where([data-kv-design-system]) [data-ui="list-page-title-row"] {
26
+ display: flex;
27
+ min-width: 0;
28
+ flex-wrap: wrap;
29
+ align-items: center;
30
+ gap: var(--kv-space-3);
31
+ }
32
+
33
+ :where([data-kv-design-system]) [data-ui="list-page-eyebrow"] {
34
+ margin: 0;
35
+ color: var(--kv-accent);
36
+ font-size: var(--kv-text-2xs);
37
+ font-weight: var(--kv-weight-bold);
38
+ letter-spacing: 0.09em;
39
+ line-height: var(--kv-leading-tight);
40
+ text-transform: uppercase;
41
+ }
42
+
43
+ :where([data-kv-design-system]) [data-ui="list-page-title"] {
44
+ margin: 0;
45
+ color: var(--kv-text-main);
46
+ font-size: var(--kv-page-title-size);
47
+ font-weight: var(--kv-weight-semibold);
48
+ letter-spacing: -0.025em;
49
+ line-height: var(--kv-leading-tight);
50
+ }
51
+
52
+ :where([data-kv-design-system]) [data-ui="list-page-description"] {
53
+ max-width: 48rem;
54
+ margin: 0;
55
+ color: var(--kv-text-muted);
56
+ font-size: var(--kv-text-sm);
57
+ line-height: var(--kv-leading-normal);
58
+ }
59
+
60
+ :where([data-kv-design-system]) [data-ui="list-page-actions"] {
61
+ display: flex;
62
+ flex: 0 0 auto;
63
+ flex-wrap: wrap;
64
+ align-items: center;
65
+ gap: var(--kv-space-2);
66
+ }
67
+
68
+ :where([data-kv-design-system]) [data-ui="list-page-toolbar"] {
69
+ display: flex;
70
+ width: 100%;
71
+ min-width: 0;
72
+ flex-wrap: wrap;
73
+ align-items: center;
74
+ gap: var(--kv-space-2);
75
+ padding: var(--kv-space-2);
76
+ border: 1px solid var(--kv-panel-border);
77
+ border-radius: var(--kv-radius-md);
78
+ background: var(--kv-panel-bg-subtle);
79
+ }
80
+
81
+ :where([data-kv-design-system]) [data-ui="list-page-controls"] {
82
+ min-width: min(100%, 24rem);
83
+ flex: 1 1 40rem;
84
+ }
85
+
86
+ :where([data-kv-design-system]) [data-ui="list-page-status"] {
87
+ min-width: max-content;
88
+ flex: 0 0 auto;
89
+ padding-inline: var(--kv-space-2);
90
+ color: var(--kv-text-muted);
91
+ font-size: var(--kv-text-xs);
92
+ font-variant-numeric: tabular-nums;
93
+ }
94
+
95
+ :where([data-kv-design-system]) [data-ui="list-page-body"] {
96
+ min-width: 0;
97
+ }
98
+
99
+ :where([data-kv-design-system]) [data-ui="list-page-footer"] {
100
+ min-width: 0;
101
+ padding-top: var(--kv-space-3);
102
+ border-top: 1px solid var(--kv-panel-divider);
103
+ color: var(--kv-text-muted);
104
+ font-size: var(--kv-text-xs);
105
+ }
106
+
107
+ /* Application collections opt into the full operational workspace. This keeps
108
+ context, identity, command bar and results in distinct horizontal bands so
109
+ dense records remain the visual focus. */
110
+ :where([data-kv-design-system]) [data-ui="list-page"][data-variant="operational"] {
111
+ gap: 0;
112
+ padding: 0 0 var(--kv-space-10);
113
+ background: var(--kv-page-content-bg);
114
+ }
115
+
116
+ :where([data-kv-design-system])
117
+ [data-ui="list-page"][data-variant="operational"]
118
+ [data-ui="list-page-context"] {
119
+ display: flex;
120
+ min-width: 0;
121
+ min-height: var(--kv-table-header-height);
122
+ align-items: center;
123
+ padding-inline: var(--kv-page-padding-x);
124
+ border-bottom: 1px solid var(--kv-panel-divider);
125
+ background: var(--kv-page-chrome-bg);
126
+ }
127
+
128
+ :where([data-kv-design-system])
129
+ [data-ui="list-page"][data-variant="operational"]
130
+ [data-ui="list-page-header"] {
131
+ padding: var(--kv-space-4) var(--kv-page-padding-x);
132
+ border-bottom: 1px solid var(--kv-panel-divider);
133
+ background: var(--kv-page-chrome-bg);
134
+ }
135
+
136
+ :where([data-kv-design-system])
137
+ [data-ui="list-page"][data-variant="operational"]
138
+ [data-ui="list-page-title-row"] {
139
+ display: grid;
140
+ grid-template-columns: minmax(0, 1fr) auto;
141
+ gap: var(--kv-space-5);
142
+ }
143
+
144
+ :where([data-kv-design-system])
145
+ [data-ui="list-page"][data-variant="operational"]
146
+ [data-ui="list-page-actions"] {
147
+ justify-content: flex-end;
148
+ }
149
+
150
+ :where([data-kv-design-system])
151
+ [data-ui="list-page"][data-variant="operational"]
152
+ [data-ui="list-page-toolbar"] {
153
+ padding: var(--kv-space-3) var(--kv-page-padding-x) var(--kv-space-2-5);
154
+ border: 0;
155
+ border-radius: 0;
156
+ background: var(--kv-page-bg);
157
+ }
158
+
159
+ :where([data-kv-design-system])
160
+ [data-ui="list-page"][data-variant="operational"]
161
+ [data-ui="list-page-controls"] {
162
+ min-width: 0;
163
+ flex-basis: 100%;
164
+ }
165
+
166
+ :where([data-kv-design-system])
167
+ [data-ui="list-page"][data-variant="operational"]
168
+ [data-ui="list-page-body"] {
169
+ padding-top: var(--kv-space-2);
170
+ padding-inline: var(--kv-page-padding-x);
171
+ background: var(--kv-page-content-bg);
172
+ }
173
+
174
+ :where([data-kv-design-system])
175
+ [data-ui="list-page"][data-variant="operational"]
176
+ [data-ui="list-page-footer"] {
177
+ margin: var(--kv-space-3) var(--kv-page-padding-x) 0;
178
+ padding: var(--kv-space-2-5) var(--kv-space-3);
179
+ border: 1px solid var(--kv-panel-border);
180
+ border-radius: var(--kv-radius-md);
181
+ background: var(--kv-panel-bg);
182
+ font-variant-numeric: tabular-nums;
183
+ }
184
+
185
+ :where([data-kv-design-system])
186
+ [data-ui="list-page"][data-variant="operational"]
187
+ [data-ui="list-page-body"]:has(> [data-ui="table-scroll"])
188
+ > [data-ui="table-scroll"] {
189
+ border-radius: var(--kv-radius-md) var(--kv-radius-md) 0 0;
190
+ }
191
+
192
+ :where([data-kv-design-system])
193
+ [data-ui="list-page"][data-variant="operational"]
194
+ [data-ui="list-page-body"]:has(> [data-ui="table-scroll"])
195
+ + [data-ui="list-page-footer"] {
196
+ margin-top: -1px;
197
+ border-radius: 0 0 var(--kv-radius-md) var(--kv-radius-md);
198
+ }
199
+
200
+ /* Lists are page regions, not cards. More capable application tables may add
201
+ selection, grouping or configurable columns while retaining this surface. */
202
+ :where([data-kv-design-system]) [data-ui="list-page"] [data-ui="table-scroll"] {
203
+ margin: 0;
204
+ border-color: var(--kv-table-border);
205
+ border-radius: var(--kv-radius-md);
206
+ background: var(--kv-table-bg);
207
+ box-shadow: none;
208
+ }
209
+
210
+ :where([data-kv-design-system]) [data-ui="list-page"] [data-ui="table"] th {
211
+ background: var(--kv-table-header-bg);
212
+ color: var(--kv-table-header-text);
213
+ }
214
+
215
+ :where([data-kv-design-system]) [data-ui="list-page"] [data-ui="row"] td {
216
+ background: var(--kv-table-row-bg);
217
+ }
218
+
219
+ :where([data-kv-design-system]) [data-ui="list-page"] [data-ui="row"]:hover td {
220
+ background: var(--kv-table-row-hover);
221
+ }
222
+
223
+ :where([data-kv-design-system]) [data-ui="table-scroll"] {
224
+ width: 100%;
225
+ overflow-x: auto;
226
+ border: 1px solid var(--kv-panel-border);
227
+ border-radius: var(--kv-radius-md);
228
+ background: var(--kv-table-bg);
229
+ }
230
+
231
+ :where([data-kv-design-system]) [data-ui="table"] {
232
+ width: 100%;
233
+ min-width: 38rem;
234
+ border-collapse: separate;
235
+ border-spacing: 0;
236
+ font-size: var(--kv-text-sm);
237
+ }
238
+
239
+ :where([data-kv-design-system]) [data-ui="table-caption"] {
240
+ padding: var(--kv-space-3);
241
+ color: var(--kv-text-muted);
242
+ font-size: var(--kv-text-xs);
243
+ text-align: left;
244
+ }
245
+
246
+ :where([data-kv-design-system]) [data-ui="col"] {
247
+ height: var(--kv-table-header-height);
248
+ padding: 0 var(--kv-space-3);
249
+ border-bottom: 1px solid var(--kv-table-border);
250
+ background: var(--kv-table-header-bg);
251
+ color: var(--kv-table-header-text);
252
+ font-size: var(--kv-text-2xs);
253
+ font-weight: var(--kv-weight-semibold);
254
+ letter-spacing: 0.035em;
255
+ text-align: left;
256
+ text-transform: uppercase;
257
+ white-space: nowrap;
258
+ }
259
+
260
+ :where([data-kv-design-system]) [data-ui="col"][data-align="end"],
261
+ :where([data-kv-design-system]) [data-ui="cell"][data-align="end"] {
262
+ font-variant-numeric: tabular-nums;
263
+ text-align: right;
264
+ }
265
+
266
+ :where([data-kv-design-system]) [data-ui="row"] {
267
+ height: var(--kv-row-height);
268
+ transition: background var(--kv-motion-fast);
269
+ }
270
+
271
+ :where([data-kv-design-system]) [data-ui="row"]:hover {
272
+ background: transparent;
273
+ }
274
+
275
+ :where([data-kv-design-system]) [data-ui="row"]:hover [data-ui="cell"] {
276
+ background: var(--kv-table-row-hover);
277
+ }
278
+
279
+ :where([data-kv-design-system]) [data-ui="row"][data-selected="true"] [data-ui="cell"] {
280
+ background: var(--kv-table-row-selected);
281
+ }
282
+
283
+ :where([data-kv-design-system]) [data-ui="cell"] {
284
+ max-width: 24rem;
285
+ height: var(--kv-row-height);
286
+ padding: 0.4375rem var(--kv-space-3);
287
+ border-bottom: 1px solid var(--kv-table-border);
288
+ background: var(--kv-table-row-bg);
289
+ color: var(--kv-text-secondary);
290
+ overflow-wrap: anywhere;
291
+ }
292
+
293
+ :where([data-kv-design-system]) [data-ui="cell"][data-priority="primary"] {
294
+ color: var(--kv-text-main);
295
+ font-weight: var(--kv-weight-semibold);
296
+ }
297
+
298
+ :where([data-kv-design-system]) [data-ui="row-link"] {
299
+ color: inherit;
300
+ text-decoration: none;
301
+ }
302
+
303
+ :where([data-kv-design-system]) [data-ui="row-link"]:hover {
304
+ color: var(--kv-color-accent);
305
+ text-decoration: underline;
306
+ text-underline-offset: 0.15em;
307
+ }
308
+
309
+ :where([data-kv-design-system]) [data-ui="record-form"] {
310
+ display: grid;
311
+ gap: var(--kv-gap-field-group);
312
+ }
313
+
314
+ @media (max-width: 48rem) {
315
+ :where([data-kv-design-system]) [data-ui="table-scroll"][data-responsive="stack"] {
316
+ overflow: hidden;
317
+ }
318
+
319
+ :where([data-kv-design-system]) [data-responsive="stack"] > [data-ui="table"] {
320
+ display: block;
321
+ min-width: 0;
322
+ }
323
+
324
+ :where([data-kv-design-system]) [data-responsive="stack"] > [data-ui="table"] > thead {
325
+ display: none;
326
+ }
327
+
328
+ :where([data-kv-design-system]) [data-responsive="stack"] > [data-ui="table"] > tbody {
329
+ display: block;
330
+ }
331
+
332
+ :where([data-kv-design-system]) [data-responsive="stack"] [data-ui="row"] {
333
+ display: grid;
334
+ grid-template-columns: minmax(0, 1fr);
335
+ height: auto;
336
+ padding: var(--kv-space-3);
337
+ border-bottom: 1px solid var(--kv-table-border);
338
+ }
339
+
340
+ :where([data-kv-design-system]) [data-responsive="stack"] [data-ui="row"]:last-child {
341
+ border-bottom: 0;
342
+ }
343
+
344
+ :where([data-kv-design-system]) [data-responsive="stack"] [data-ui="cell"] {
345
+ display: flex;
346
+ flex-wrap: wrap;
347
+ align-items: center;
348
+ justify-content: space-between;
349
+ gap: var(--kv-space-2);
350
+ width: 100%;
351
+ min-width: 0;
352
+ max-width: none;
353
+ height: auto;
354
+ padding: var(--kv-space-2) 0;
355
+ border: 0;
356
+ white-space: normal;
357
+ }
358
+
359
+ :where([data-kv-design-system]) [data-responsive="stack"] [data-ui="cell"]::before {
360
+ content: attr(data-label);
361
+ color: var(--kv-text-muted);
362
+ font-size: var(--kv-text-sm);
363
+ }
364
+
365
+ :where([data-kv-design-system]) [data-responsive="stack"] [data-ui="cell"]:first-child {
366
+ display: block;
367
+ font-weight: var(--kv-weight-semibold);
368
+ }
369
+
370
+ :where([data-kv-design-system]) [data-responsive="stack"] [data-ui="cell"]:first-child::before {
371
+ display: none;
372
+ }
373
+ }
374
+
375
+ :where([data-kv-design-system]) [data-ui="form-errors"] {
376
+ display: grid;
377
+ gap: var(--kv-space-1);
378
+ margin: 0;
379
+ padding: var(--kv-space-3) var(--kv-space-3) var(--kv-space-3) 2rem;
380
+ border: 1px solid var(--kv-color-danger);
381
+ border-radius: var(--kv-radius-sm);
382
+ background: var(--kv-color-danger-soft);
383
+ color: var(--kv-color-danger);
384
+ font-size: var(--kv-text-sm);
385
+ }
386
+
387
+ :where([data-kv-design-system]) [data-ui="form-grid"] {
388
+ display: grid;
389
+ grid-template-columns: repeat(2, minmax(0, 1fr));
390
+ gap: var(--kv-gap-form-row) var(--kv-gap-field-group);
391
+ }
392
+
393
+ :where([data-kv-design-system]) [data-ui="form-grid"] [data-ui="field"][data-span="full"] {
394
+ grid-column: 1 / -1;
395
+ }
396
+
397
+ :where([data-kv-design-system]) [data-ui="form-actions"] {
398
+ display: flex;
399
+ justify-content: flex-end;
400
+ padding-top: var(--kv-space-4);
401
+ border-top: 1px solid var(--kv-panel-divider);
402
+ }
403
+
404
+ @media (max-width: 47.9375rem) {
405
+ :where([data-kv-design-system]) [data-ui="form-grid"] {
406
+ grid-template-columns: minmax(0, 1fr);
407
+ }
408
+
409
+ :where([data-kv-design-system]) [data-ui="form-grid"] [data-ui="field"] {
410
+ grid-column: 1;
411
+ }
412
+ }
413
+
414
+ :where([data-kv-design-system]) [data-ui="modal-backdrop"] {
415
+ position: fixed;
416
+ z-index: var(--kv-z-modal);
417
+ inset: 0;
418
+ display: grid;
419
+ place-items: center;
420
+ padding: var(--kv-space-4);
421
+ background: rgb(12 14 16 / 52%);
422
+ backdrop-filter: blur(3px);
423
+ }
424
+
425
+ :where([data-kv-design-system]) [data-ui="modal-backdrop"][data-mode="embedded"] {
426
+ position: relative;
427
+ min-height: 20rem;
428
+ inset: auto;
429
+ border-radius: var(--kv-radius-md);
430
+ background:
431
+ linear-gradient(135deg, color-mix(in srgb, var(--kv-color-accent-soft) 60%, transparent), transparent),
432
+ var(--kv-color-canvas);
433
+ backdrop-filter: none;
434
+ }
435
+
436
+ :where([data-kv-design-system]) [data-ui="modal-sheet"] {
437
+ width: min(34rem, 100%);
438
+ max-height: calc(100dvh - 2rem);
439
+ overflow: auto;
440
+ border: 1px solid var(--kv-color-line-strong);
441
+ border-radius: var(--kv-radius-lg);
442
+ background: var(--kv-color-surface);
443
+ box-shadow: var(--kv-shadow-popover);
444
+ }
445
+
446
+ :where([data-kv-design-system]) [data-ui="modal-head"] {
447
+ display: flex;
448
+ align-items: center;
449
+ justify-content: space-between;
450
+ gap: var(--kv-space-4);
451
+ padding: var(--kv-space-4) var(--kv-space-5);
452
+ border-bottom: 1px solid var(--kv-color-line);
453
+ }
454
+
455
+ :where([data-kv-design-system]) [data-ui="modal-title"] {
456
+ margin-bottom: 0;
457
+ font-family: var(--kv-font-display);
458
+ font-size: var(--kv-text-lg);
459
+ font-weight: 650;
460
+ }
461
+
462
+ :where([data-kv-design-system]) [data-ui="modal-close"] {
463
+ display: grid;
464
+ width: 2rem;
465
+ height: 2rem;
466
+ place-items: center;
467
+ border-radius: 50%;
468
+ color: var(--kv-color-ink-muted);
469
+ font-size: 1.4rem;
470
+ line-height: 1;
471
+ text-decoration: none;
472
+ }
473
+
474
+ :where([data-kv-design-system]) [data-ui="modal-close"]:hover {
475
+ background: var(--kv-color-surface-hover);
476
+ color: var(--kv-color-ink);
477
+ }
478
+
479
+ :where([data-kv-design-system]) [data-ui="modal-body"] {
480
+ padding: var(--kv-space-5);
481
+ }
482
+
483
+ @media (max-width: 42rem) {
484
+ :where([data-kv-design-system]) [data-ui="list-page"] {
485
+ gap: var(--kv-space-3);
486
+ padding: var(--kv-space-4) var(--kv-space-4) var(--kv-space-8);
487
+ }
488
+
489
+ :where([data-kv-design-system]) [data-ui="list-page-header"] {
490
+ padding-bottom: var(--kv-space-1);
491
+ }
492
+
493
+ :where([data-kv-design-system]) [data-ui="list-page-actions"] {
494
+ justify-content: flex-start;
495
+ }
496
+
497
+ :where([data-kv-design-system]) [data-ui="list-page-toolbar"] {
498
+ gap: var(--kv-space-2);
499
+ padding: var(--kv-space-2);
500
+ }
501
+
502
+ :where([data-kv-design-system]) [data-ui="list-page-controls"] {
503
+ min-width: 0;
504
+ flex-basis: 15rem;
505
+ }
506
+
507
+ :where([data-kv-design-system]) [data-ui="list-page"][data-variant="operational"] {
508
+ padding: 0 0 var(--kv-space-8);
509
+ }
510
+
511
+ :where([data-kv-design-system])
512
+ [data-ui="list-page"][data-variant="operational"]
513
+ [data-ui="list-page-context"] {
514
+ min-height: 2.75rem;
515
+ padding-inline: var(--kv-space-4);
516
+ }
517
+
518
+ :where([data-kv-design-system])
519
+ [data-ui="list-page"][data-variant="operational"]
520
+ [data-ui="list-page-header"] {
521
+ padding: var(--kv-space-4) var(--kv-space-4) var(--kv-space-3);
522
+ }
523
+
524
+ :where([data-kv-design-system])
525
+ [data-ui="list-page"][data-variant="operational"]
526
+ [data-ui="list-page-heading"] {
527
+ display: flex;
528
+ flex-direction: column;
529
+ }
530
+
531
+ :where([data-kv-design-system])
532
+ [data-ui="list-page"][data-variant="operational"]
533
+ [data-ui="list-page-title-row"] {
534
+ display: contents;
535
+ }
536
+
537
+ :where([data-kv-design-system])
538
+ [data-ui="list-page"][data-variant="operational"]
539
+ [data-ui="list-page-title"] {
540
+ order: 1;
541
+ font-size: var(--kv-text-lg);
542
+ }
543
+
544
+ :where([data-kv-design-system])
545
+ [data-ui="list-page"][data-variant="operational"]
546
+ [data-ui="list-page-description"] {
547
+ order: 2;
548
+ }
549
+
550
+ :where([data-kv-design-system])
551
+ [data-ui="list-page"][data-variant="operational"]
552
+ [data-ui="list-page-actions"],
553
+ :where([data-kv-design-system])
554
+ [data-ui="list-page"][data-variant="operational"]
555
+ [data-ui="list-page-actions"]
556
+ > [data-ui="inline"] {
557
+ width: 100%;
558
+ }
559
+
560
+ :where([data-kv-design-system])
561
+ [data-ui="list-page"][data-variant="operational"]
562
+ [data-ui="list-page-actions"] {
563
+ order: 3;
564
+ margin-top: var(--kv-space-2);
565
+ }
566
+
567
+ :where([data-kv-design-system])
568
+ [data-ui="list-page"][data-variant="operational"]
569
+ [data-ui="list-page-actions"]
570
+ [data-ui="action"][data-variant="primary"] {
571
+ min-height: 2.75rem;
572
+ flex: 1 1 auto;
573
+ }
574
+
575
+ :where([data-kv-design-system])
576
+ [data-ui="list-page"][data-variant="operational"]
577
+ [data-ui="list-page-toolbar"] {
578
+ padding: var(--kv-space-3) var(--kv-space-4);
579
+ }
580
+
581
+ :where([data-kv-design-system])
582
+ [data-ui="list-page"][data-variant="operational"]
583
+ :is([data-ui="list-page-body"], [data-ui="list-page-footer"]) {
584
+ margin-inline: var(--kv-space-4);
585
+ padding-inline: 0;
586
+ }
587
+
588
+ :where([data-kv-design-system])
589
+ [data-ui="list-page"][data-variant="operational"]
590
+ [data-ui="list-page-footer"] {
591
+ padding: var(--kv-space-2-5) var(--kv-space-3);
592
+ }
593
+
594
+ :where([data-kv-design-system]) [data-ui="list-page"][data-variant="operational"] [data-ui="table"] {
595
+ min-width: 0;
596
+ }
597
+
598
+ :where([data-kv-design-system])
599
+ [data-ui="list-page"][data-variant="operational"]
600
+ [data-ui="table-scroll"]:not([data-responsive="stack"])
601
+ [data-ui="table"]
602
+ :is(th, td):is([data-priority="secondary"], [data-priority="tertiary"]) {
603
+ display: none;
604
+ }
605
+
606
+ :where([data-kv-design-system])
607
+ [data-ui="list-page"][data-variant="operational"]
608
+ [data-ui="table-scroll"]:not([data-responsive="stack"])
609
+ [data-ui="table"]
610
+ :is(th, td)[data-priority="primary"][data-align="end"] {
611
+ width: 7rem;
612
+ }
613
+
614
+ :where([data-kv-design-system])
615
+ [data-ui="list-page"][data-variant="operational"]
616
+ [data-ui="table"]
617
+ :is([data-ui="col"], [data-ui="cell"]) {
618
+ padding-inline: var(--kv-space-2);
619
+ }
620
+ }
621
+
622
+ /* A process read left to right. The rail is drawn as two half-lines per step
623
+ rather than one line behind the row, so it starts at the first node and stops
624
+ at the last instead of running off both ends of the grid. */
625
+ :where([data-kv-design-system]) [data-ui="pipeline"] {
626
+ display: grid;
627
+ margin: 0;
628
+ padding: 0;
629
+ grid-auto-columns: 1fr;
630
+ grid-auto-flow: column;
631
+ list-style: none;
632
+ }
633
+
634
+ :where([data-kv-design-system]) [data-ui="pipeline-step"] {
635
+ position: relative;
636
+ display: grid;
637
+ padding-bottom: var(--kv-space-5);
638
+ justify-items: center;
639
+ gap: var(--kv-space-1);
640
+ text-align: center;
641
+ }
642
+
643
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]::before,
644
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]::after {
645
+ position: absolute;
646
+ bottom: 0.3125rem;
647
+ height: 1px;
648
+ background: var(--kv-color-line-strong);
649
+ content: "";
650
+ }
651
+
652
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]::before {
653
+ left: 0;
654
+ right: 50%;
655
+ }
656
+
657
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]::after {
658
+ left: 50%;
659
+ right: 0;
660
+ }
661
+
662
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]:first-child::before,
663
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]:last-child::after {
664
+ display: none;
665
+ }
666
+
667
+ :where([data-kv-design-system]) [data-ui="pipeline-step-node"] {
668
+ position: absolute;
669
+ bottom: 0;
670
+ left: 50%;
671
+ width: 0.625rem;
672
+ height: 0.625rem;
673
+ border-radius: 50%;
674
+ background: var(--kv-text-muted);
675
+ translate: -50% 0;
676
+ }
677
+
678
+ :where([data-kv-design-system]) [data-ui="pipeline-step"][data-tone="info"] [data-ui="pipeline-step-node"] {
679
+ background: var(--kv-color-info);
680
+ }
681
+
682
+ :where([data-kv-design-system])
683
+ [data-ui="pipeline-step"][data-tone="positive"]
684
+ [data-ui="pipeline-step-node"] {
685
+ background: var(--kv-color-positive);
686
+ }
687
+
688
+ :where([data-kv-design-system])
689
+ [data-ui="pipeline-step"][data-tone="warning"]
690
+ [data-ui="pipeline-step-node"] {
691
+ background: var(--kv-color-warning);
692
+ }
693
+
694
+ :where([data-kv-design-system])
695
+ [data-ui="pipeline-step"][data-tone="danger"]
696
+ [data-ui="pipeline-step-node"] {
697
+ background: var(--kv-color-danger);
698
+ }
699
+
700
+ /* Two borders rotated into a chevron, sat on the column boundary. Drawn rather
701
+ than written, because the order is already in the markup and an arrow
702
+ character here would be read out between every pair of stages. */
703
+ :where([data-kv-design-system]) [data-ui="pipeline-arrow"] {
704
+ position: absolute;
705
+ top: 0.25rem;
706
+ left: 0;
707
+ width: 0.375rem;
708
+ height: 0.375rem;
709
+ border-top: 1.5px solid var(--kv-text-muted);
710
+ border-right: 1.5px solid var(--kv-text-muted);
711
+ rotate: 45deg;
712
+ translate: -50% 0;
713
+ }
714
+
715
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]:first-child [data-ui="pipeline-arrow"] {
716
+ display: none;
717
+ }
718
+
719
+ :where([data-kv-design-system]) [data-ui="pipeline-step-label"] {
720
+ color: var(--kv-text-secondary);
721
+ font-size: var(--kv-text-sm);
722
+ text-decoration: none;
723
+ }
724
+
725
+ :where([data-kv-design-system]) a[data-ui="pipeline-step-label"]:hover {
726
+ color: var(--kv-text-main);
727
+ text-decoration: underline;
728
+ }
729
+
730
+ :where([data-kv-design-system]) [data-ui="pipeline-step-value"] {
731
+ color: var(--kv-text-main);
732
+ font-size: var(--kv-text-2xl);
733
+ font-weight: var(--kv-weight-bold);
734
+ font-variant-numeric: tabular-nums;
735
+ letter-spacing: -0.025em;
736
+ }
737
+
738
+ /* Too narrow for four columns, so the rail turns and runs down the left. The
739
+ stages keep their order and their counts; only the axis changes. */
740
+ @media (max-width: 42rem) {
741
+ :where([data-kv-design-system]) [data-ui="pipeline"] {
742
+ grid-auto-columns: auto;
743
+ grid-auto-flow: row;
744
+ }
745
+
746
+ :where([data-kv-design-system]) [data-ui="pipeline-step"] {
747
+ padding-bottom: var(--kv-space-3);
748
+ padding-left: var(--kv-space-6);
749
+ grid-template-columns: 1fr auto;
750
+ align-items: center;
751
+ justify-items: start;
752
+ text-align: left;
753
+ }
754
+
755
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]::before,
756
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]::after {
757
+ left: 0.3125rem;
758
+ right: auto;
759
+ width: 1px;
760
+ height: 50%;
761
+ }
762
+
763
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]::before {
764
+ top: 0;
765
+ bottom: auto;
766
+ }
767
+
768
+ :where([data-kv-design-system]) [data-ui="pipeline-step"]::after {
769
+ top: 50%;
770
+ bottom: auto;
771
+ }
772
+
773
+ :where([data-kv-design-system]) [data-ui="pipeline-step-node"] {
774
+ top: 50%;
775
+ bottom: auto;
776
+ left: 0.3125rem;
777
+ translate: -50% -50%;
778
+ }
779
+
780
+ :where([data-kv-design-system]) [data-ui="pipeline-arrow"] {
781
+ display: none;
782
+ }
783
+
784
+ :where([data-kv-design-system]) [data-ui="pipeline-step-value"] {
785
+ font-size: var(--kv-text-lg);
786
+ }
787
+ }
788
+ }
789
+
790
+ @layer ket.app {
791
+ /* Boards spend their space on the operational surface. Context, identity and
792
+ global controls stay in compact horizontal bands; the specialised board
793
+ owns its internal columns, timeline and scrolling behavior. */
794
+ :where([data-kv-design-system]) [data-ui="board-page"] {
795
+ display: grid;
796
+ min-width: 0;
797
+ background: var(--kv-page-bg);
798
+ }
799
+
800
+ :where([data-kv-design-system]) [data-ui="board-page"][data-variant="operational"] {
801
+ gap: 0;
802
+ padding: 0;
803
+ }
804
+
805
+ :where([data-kv-design-system])
806
+ [data-ui="board-page"][data-variant="operational"]
807
+ [data-ui="board-page-context"] {
808
+ display: flex;
809
+ min-width: 0;
810
+ min-height: var(--kv-table-header-height);
811
+ align-items: center;
812
+ padding-inline: var(--kv-page-padding-x);
813
+ border-bottom: 1px solid var(--kv-panel-divider);
814
+ background: var(--kv-page-chrome-bg);
815
+ }
816
+
817
+ :where([data-kv-design-system]) [data-ui="board-page-header"] {
818
+ display: grid;
819
+ min-width: 0;
820
+ padding: var(--kv-space-4) var(--kv-page-padding-x);
821
+ border-bottom: 1px solid var(--kv-panel-divider);
822
+ }
823
+
824
+ :where([data-kv-design-system])
825
+ [data-ui="board-page"][data-variant="operational"]
826
+ [data-ui="board-page-header"] {
827
+ background: var(--kv-page-chrome-bg);
828
+ }
829
+
830
+ :where([data-kv-design-system]) [data-ui="board-page-heading"] {
831
+ display: grid;
832
+ min-width: 0;
833
+ gap: var(--kv-space-1);
834
+ }
835
+
836
+ :where([data-kv-design-system]) [data-ui="board-page-eyebrow"] {
837
+ margin: 0;
838
+ color: var(--kv-text-muted);
839
+ font-size: var(--kv-text-2xs);
840
+ font-weight: var(--kv-weight-semibold);
841
+ letter-spacing: 0.07em;
842
+ line-height: var(--kv-leading-normal);
843
+ text-transform: uppercase;
844
+ }
845
+
846
+ :where([data-kv-design-system]) [data-ui="board-page-title-row"] {
847
+ display: grid;
848
+ min-width: 0;
849
+ grid-template-columns: minmax(0, 1fr) auto;
850
+ align-items: center;
851
+ gap: var(--kv-space-4);
852
+ }
853
+
854
+ :where([data-kv-design-system]) [data-ui="board-page-title"] {
855
+ margin: 0;
856
+ overflow-wrap: anywhere;
857
+ color: var(--kv-text-main);
858
+ font-size: var(--kv-page-title-size);
859
+ font-weight: var(--kv-weight-semibold);
860
+ letter-spacing: -0.025em;
861
+ line-height: var(--kv-leading-tight);
862
+ }
863
+
864
+ :where([data-kv-design-system]) [data-ui="board-page-description"] {
865
+ max-width: 56rem;
866
+ margin: 0;
867
+ color: var(--kv-text-muted);
868
+ font-size: var(--kv-text-sm);
869
+ line-height: var(--kv-leading-normal);
870
+ }
871
+
872
+ :where([data-kv-design-system]) [data-ui="board-page-subline"] {
873
+ display: flex;
874
+ min-width: 0;
875
+ flex-wrap: wrap;
876
+ align-items: center;
877
+ gap: var(--kv-space-2);
878
+ }
879
+
880
+ :where([data-kv-design-system]) [data-ui="board-page-status"],
881
+ :where([data-kv-design-system]) [data-ui="board-page-meta"] {
882
+ color: var(--kv-text-muted);
883
+ font-size: var(--kv-text-xs);
884
+ font-variant-numeric: tabular-nums;
885
+ }
886
+
887
+ :where([data-kv-design-system]) [data-ui="board-page-actions"] {
888
+ display: flex;
889
+ min-width: 0;
890
+ flex-wrap: wrap;
891
+ align-items: center;
892
+ justify-content: flex-end;
893
+ gap: var(--kv-space-2);
894
+ }
895
+
896
+ :where([data-kv-design-system]) [data-ui="board-page-toolbar"] {
897
+ display: flex;
898
+ min-width: 0;
899
+ align-items: center;
900
+ padding: var(--kv-space-3) var(--kv-page-padding-x) var(--kv-space-2-5);
901
+ border-bottom: 1px solid var(--kv-panel-divider);
902
+ background: var(--kv-page-bg);
903
+ }
904
+
905
+ :where([data-kv-design-system]) [data-ui="board-page-controls"] {
906
+ min-width: 0;
907
+ flex: 1 1 auto;
908
+ }
909
+
910
+ :where([data-kv-design-system]) [data-ui="board-page-body"] {
911
+ display: grid;
912
+ min-width: 0;
913
+ gap: var(--kv-space-4);
914
+ padding: var(--kv-space-4) var(--kv-page-padding-x) var(--kv-space-8);
915
+ }
916
+
917
+ :where([data-kv-design-system]) [data-ui="board-page-body"] > [data-ui="stack"] {
918
+ gap: var(--kv-space-4);
919
+ }
920
+
921
+ @media (max-width: 42rem) {
922
+ :where([data-kv-design-system])
923
+ [data-ui="board-page"][data-variant="operational"]
924
+ [data-ui="board-page-context"] {
925
+ min-height: 2.75rem;
926
+ padding-inline: var(--kv-space-4);
927
+ }
928
+
929
+ :where([data-kv-design-system]) [data-ui="board-page-header"] {
930
+ padding: var(--kv-space-4) var(--kv-space-4) var(--kv-space-3);
931
+ }
932
+
933
+ :where([data-kv-design-system]) [data-ui="board-page-title-row"] {
934
+ grid-template-columns: minmax(0, 1fr);
935
+ align-items: stretch;
936
+ gap: var(--kv-space-3);
937
+ }
938
+
939
+ :where([data-kv-design-system]) [data-ui="board-page-title"] {
940
+ font-size: var(--kv-text-lg);
941
+ }
942
+
943
+ :where([data-kv-design-system]) [data-ui="board-page-actions"] {
944
+ justify-content: flex-start;
945
+ }
946
+
947
+ :where([data-kv-design-system]) [data-ui="board-page-toolbar"],
948
+ :where([data-kv-design-system]) [data-ui="board-page-body"] {
949
+ padding-inline: var(--kv-space-4);
950
+ }
951
+ }
952
+ }
953
+
954
+ @layer ket.app {
955
+ /* Dashboards are working canvases, not records. Their context and identity use
956
+ the same quiet bands as lists and forms; KPI, workflow and analytical blocks
957
+ own their surfaces on the grey page canvas below. Never paint the whole
958
+ workspace white: the gaps must separate independent cards and tables. */
959
+ :where([data-kv-design-system]) [data-ui="dashboard-page"] {
960
+ display: grid;
961
+ min-width: 0;
962
+ background: var(--kv-page-bg);
963
+ }
964
+
965
+ :where([data-kv-design-system]) [data-ui="dashboard-page"][data-variant="operational"] {
966
+ gap: 0;
967
+ padding: 0 0 var(--kv-space-10);
968
+ }
969
+
970
+ :where([data-kv-design-system])
971
+ [data-ui="dashboard-page"][data-variant="operational"]
972
+ [data-ui="dashboard-page-context"] {
973
+ display: flex;
974
+ min-width: 0;
975
+ min-height: var(--kv-table-header-height);
976
+ align-items: center;
977
+ padding-inline: var(--kv-page-padding-x);
978
+ border-bottom: 1px solid var(--kv-panel-divider);
979
+ background: var(--kv-page-chrome-bg);
980
+ }
981
+
982
+ :where([data-kv-design-system]) [data-ui="dashboard-page-header"] {
983
+ display: grid;
984
+ min-width: 0;
985
+ padding: var(--kv-space-4) var(--kv-page-padding-x);
986
+ border-bottom: 1px solid var(--kv-panel-divider);
987
+ }
988
+
989
+ :where([data-kv-design-system])
990
+ [data-ui="dashboard-page"][data-variant="operational"]
991
+ [data-ui="dashboard-page-header"] {
992
+ background: var(--kv-page-chrome-bg);
993
+ }
994
+
995
+ :where([data-kv-design-system]) [data-ui="dashboard-page-heading"] {
996
+ display: grid;
997
+ min-width: 0;
998
+ gap: var(--kv-space-1);
999
+ }
1000
+
1001
+ :where([data-kv-design-system]) [data-ui="dashboard-page-eyebrow"] {
1002
+ margin: 0;
1003
+ color: var(--kv-text-muted);
1004
+ font-size: var(--kv-text-2xs);
1005
+ font-weight: var(--kv-weight-semibold);
1006
+ letter-spacing: 0.07em;
1007
+ line-height: var(--kv-leading-normal);
1008
+ text-transform: uppercase;
1009
+ }
1010
+
1011
+ :where([data-kv-design-system]) [data-ui="dashboard-page-title-row"] {
1012
+ display: grid;
1013
+ min-width: 0;
1014
+ grid-template-columns: minmax(0, 1fr) auto;
1015
+ align-items: center;
1016
+ gap: var(--kv-space-4);
1017
+ }
1018
+
1019
+ :where([data-kv-design-system]) [data-ui="dashboard-page-title"] {
1020
+ margin: 0;
1021
+ overflow-wrap: anywhere;
1022
+ color: var(--kv-text-main);
1023
+ font-size: var(--kv-page-title-size);
1024
+ font-weight: var(--kv-weight-semibold);
1025
+ letter-spacing: -0.025em;
1026
+ line-height: var(--kv-leading-tight);
1027
+ }
1028
+
1029
+ :where([data-kv-design-system]) [data-ui="dashboard-page-description"] {
1030
+ max-width: 56rem;
1031
+ margin: 0;
1032
+ color: var(--kv-text-muted);
1033
+ font-size: var(--kv-text-sm);
1034
+ line-height: var(--kv-leading-normal);
1035
+ }
1036
+
1037
+ :where([data-kv-design-system]) [data-ui="dashboard-page-subline"] {
1038
+ display: flex;
1039
+ min-width: 0;
1040
+ flex-wrap: wrap;
1041
+ align-items: center;
1042
+ gap: var(--kv-space-2);
1043
+ }
1044
+
1045
+ :where([data-kv-design-system]) [data-ui="dashboard-page-status"],
1046
+ :where([data-kv-design-system]) [data-ui="dashboard-page-meta"] {
1047
+ color: var(--kv-text-muted);
1048
+ font-size: var(--kv-text-xs);
1049
+ font-variant-numeric: tabular-nums;
1050
+ }
1051
+
1052
+ :where([data-kv-design-system]) [data-ui="dashboard-page-actions"] {
1053
+ display: flex;
1054
+ min-width: 0;
1055
+ flex-wrap: wrap;
1056
+ align-items: center;
1057
+ justify-content: flex-end;
1058
+ gap: var(--kv-space-2);
1059
+ }
1060
+
1061
+ :where([data-kv-design-system]) [data-ui="dashboard-page-body"] {
1062
+ display: grid;
1063
+ min-width: 0;
1064
+ gap: var(--kv-space-6);
1065
+ padding: var(--kv-space-5) var(--kv-page-padding-x) var(--kv-space-10);
1066
+ background: var(--kv-page-bg);
1067
+ }
1068
+
1069
+ :where([data-kv-design-system]) [data-ui="dashboard-page-toolbar"] {
1070
+ background: var(--kv-page-bg);
1071
+ }
1072
+
1073
+ :where([data-kv-design-system]) [data-ui="dashboard-page-body"] > [data-ui="stack"] {
1074
+ gap: var(--kv-space-6);
1075
+ }
1076
+
1077
+ @media (max-width: 42rem) {
1078
+ :where([data-kv-design-system]) [data-ui="dashboard-page"][data-variant="operational"] {
1079
+ padding-bottom: var(--kv-space-8);
1080
+ }
1081
+
1082
+ :where([data-kv-design-system])
1083
+ [data-ui="dashboard-page"][data-variant="operational"]
1084
+ [data-ui="dashboard-page-context"] {
1085
+ min-height: 2.75rem;
1086
+ padding-inline: var(--kv-space-4);
1087
+ }
1088
+
1089
+ :where([data-kv-design-system]) [data-ui="dashboard-page-header"] {
1090
+ padding: var(--kv-space-4) var(--kv-space-4) var(--kv-space-3);
1091
+ }
1092
+
1093
+ :where([data-kv-design-system]) [data-ui="dashboard-page-title-row"] {
1094
+ grid-template-columns: minmax(0, 1fr);
1095
+ align-items: stretch;
1096
+ gap: var(--kv-space-3);
1097
+ }
1098
+
1099
+ :where([data-kv-design-system]) [data-ui="dashboard-page-title"] {
1100
+ font-size: var(--kv-text-lg);
1101
+ }
1102
+
1103
+ :where([data-kv-design-system]) [data-ui="dashboard-page-actions"] {
1104
+ justify-content: flex-start;
1105
+ }
1106
+
1107
+ :where([data-kv-design-system]) [data-ui="dashboard-page-actions"] > [data-ui="inline"] {
1108
+ width: 100%;
1109
+ }
1110
+
1111
+ :where([data-kv-design-system])
1112
+ [data-ui="dashboard-page-actions"]
1113
+ [data-ui="action"][data-variant="primary"] {
1114
+ min-height: 2.75rem;
1115
+ flex: 1 1 auto;
1116
+ }
1117
+
1118
+ :where([data-kv-design-system]) [data-ui="dashboard-page-body"] {
1119
+ padding: var(--kv-space-4) var(--kv-space-4) var(--kv-space-8);
1120
+ }
1121
+ }
1122
+ }
1123
+
1124
+ @layer ket.app {
1125
+ /* Operational forms read like one working sheet: identity and the primary
1126
+ decision stay together, sections use rhythm instead of card nesting, and
1127
+ durable context occupies a quiet rail when there is room. */
1128
+ :where([data-kv-design-system]) [data-ui="form-page"] {
1129
+ display: grid;
1130
+ min-width: 0;
1131
+ background: var(--kv-page-content-bg);
1132
+ }
1133
+
1134
+ /* Operational forms share the same quiet location band as collections. The
1135
+ form title remains compact: business fields, not chrome, own the viewport. */
1136
+ :where([data-kv-design-system]) [data-ui="form-page"][data-variant="operational"] {
1137
+ gap: 0;
1138
+ padding: 0 0 var(--kv-space-10);
1139
+ }
1140
+
1141
+ :where([data-kv-design-system])
1142
+ [data-ui="form-page"][data-variant="operational"]
1143
+ [data-ui="form-page-context"] {
1144
+ display: flex;
1145
+ min-width: 0;
1146
+ min-height: var(--kv-table-header-height);
1147
+ align-items: center;
1148
+ padding-inline: var(--kv-page-padding-x);
1149
+ border-bottom: 1px solid var(--kv-panel-divider);
1150
+ background: var(--kv-page-chrome-bg);
1151
+ }
1152
+
1153
+ :where([data-kv-design-system]) [data-ui="form-page-header"] {
1154
+ display: grid;
1155
+ min-width: 0;
1156
+ gap: var(--kv-space-2);
1157
+ padding: var(--kv-space-4) var(--kv-page-padding-x);
1158
+ border-bottom: 1px solid var(--kv-panel-divider);
1159
+ }
1160
+
1161
+ :where([data-kv-design-system])
1162
+ [data-ui="form-page"][data-variant="operational"]
1163
+ [data-ui="form-page-header"] {
1164
+ background: var(--kv-page-chrome-bg);
1165
+ }
1166
+
1167
+ :where([data-kv-design-system]) [data-ui="form-page-title-row"] {
1168
+ display: grid;
1169
+ min-width: 0;
1170
+ grid-template-columns: minmax(0, 1fr) auto;
1171
+ align-items: center;
1172
+ gap: var(--kv-space-4);
1173
+ }
1174
+
1175
+ :where([data-kv-design-system]) [data-ui="form-page-heading"] {
1176
+ display: grid;
1177
+ min-width: 0;
1178
+ gap: var(--kv-space-1);
1179
+ }
1180
+
1181
+ :where([data-kv-design-system]) [data-ui="form-page-title"] {
1182
+ margin: 0;
1183
+ overflow-wrap: anywhere;
1184
+ color: var(--kv-text-main);
1185
+ font-size: var(--kv-page-title-size);
1186
+ font-weight: var(--kv-weight-semibold);
1187
+ letter-spacing: -0.025em;
1188
+ line-height: var(--kv-leading-tight);
1189
+ }
1190
+
1191
+ :where([data-kv-design-system]) [data-ui="form-page-status"] {
1192
+ display: inline-flex;
1193
+ flex: 0 0 auto;
1194
+ align-items: center;
1195
+ }
1196
+
1197
+ :where([data-kv-design-system]) [data-ui="form-page-subline"] {
1198
+ display: flex;
1199
+ min-width: 0;
1200
+ flex-wrap: wrap;
1201
+ align-items: center;
1202
+ gap: var(--kv-space-2);
1203
+ }
1204
+
1205
+ :where([data-kv-design-system]) [data-ui="form-page-description"] {
1206
+ max-width: 48rem;
1207
+ margin: 0;
1208
+ color: var(--kv-text-muted);
1209
+ font-size: var(--kv-text-sm);
1210
+ line-height: var(--kv-leading-normal);
1211
+ }
1212
+
1213
+ :where([data-kv-design-system]) [data-ui="form-page-actions"] {
1214
+ display: flex;
1215
+ min-width: 0;
1216
+ flex-wrap: wrap;
1217
+ align-items: center;
1218
+ justify-content: flex-end;
1219
+ gap: var(--kv-space-2);
1220
+ }
1221
+
1222
+ :where([data-kv-design-system]) [data-ui="form-page-meta"] {
1223
+ min-width: 0;
1224
+ }
1225
+
1226
+ :where([data-kv-design-system]) [data-ui="form-page-controller"] {
1227
+ min-width: 0;
1228
+ padding-inline: var(--kv-page-padding-x);
1229
+ background: var(--kv-page-bg);
1230
+ }
1231
+
1232
+ :where([data-kv-design-system]) [data-ui="form-page-controller"]:empty {
1233
+ display: none;
1234
+ }
1235
+
1236
+ :where([data-kv-design-system]) [data-ui="form-page-navigation"] {
1237
+ min-width: 0;
1238
+ padding-inline: var(--kv-page-padding-x);
1239
+ border-bottom: 1px solid var(--kv-panel-divider);
1240
+ background: var(--kv-page-bg);
1241
+ }
1242
+
1243
+ :where([data-kv-design-system]) [data-ui="form-page-layout"] {
1244
+ display: grid;
1245
+ min-width: 0;
1246
+ grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
1247
+ align-items: start;
1248
+ }
1249
+
1250
+ :where([data-kv-design-system]) [data-ui="form-page"][data-has-aside="false"] [data-ui="form-page-layout"] {
1251
+ grid-template-columns: minmax(0, 56rem);
1252
+ }
1253
+
1254
+ :where([data-kv-design-system]) [data-ui="form-page-body"] {
1255
+ display: grid;
1256
+ min-width: 0;
1257
+ gap: var(--kv-space-6);
1258
+ padding: var(--kv-space-5) var(--kv-page-padding-x) var(--kv-space-10);
1259
+ background: var(--kv-page-content-bg);
1260
+ }
1261
+
1262
+ :where([data-kv-design-system]) [data-ui="form-page-body"] > [data-ui="stack"] {
1263
+ gap: var(--kv-space-6);
1264
+ }
1265
+
1266
+ :where([data-kv-design-system]) [data-ui="form-page-body"] > [data-ui="section"] > [data-ui="section-head"],
1267
+ :where([data-kv-design-system])
1268
+ [data-ui="form-page-body"]
1269
+ > [data-ui="stack"]
1270
+ > [data-ui="section"]
1271
+ > [data-ui="section-head"] {
1272
+ align-items: flex-start;
1273
+ padding-bottom: 0;
1274
+ border-bottom: 0;
1275
+ }
1276
+
1277
+ :where([data-kv-design-system]) [data-ui="form-page-body"] > [data-ui="stack"] > [data-ui="section"] {
1278
+ padding-block: var(--kv-space-5);
1279
+ border-bottom: 1px solid var(--kv-panel-divider);
1280
+ }
1281
+
1282
+ :where([data-kv-design-system])
1283
+ [data-ui="form-page-body"]
1284
+ > [data-ui="stack"]
1285
+ > [data-ui="section"]:first-child {
1286
+ padding-block-start: 0;
1287
+ }
1288
+
1289
+ :where([data-kv-design-system]) [data-ui="form-page-aside"] {
1290
+ position: sticky;
1291
+ top: 0;
1292
+ display: grid;
1293
+ min-width: 0;
1294
+ max-height: 100dvh;
1295
+ align-content: start;
1296
+ padding: var(--kv-space-5) var(--kv-page-padding-x) var(--kv-space-10) var(--kv-space-5);
1297
+ overflow-y: auto;
1298
+ border-left: 1px solid var(--kv-panel-divider);
1299
+ background: var(--kv-panel-bg-subtle);
1300
+ }
1301
+
1302
+ /* Record forms use the compact ERP label/value rhythm while there is enough
1303
+ room. Below 768 px the form becomes conventional vertical fields so labels
1304
+ and controls never compete for the same narrow row. */
1305
+ :where([data-kv-design-system])
1306
+ [data-ui="form-page"]
1307
+ [data-ui="record-form"]
1308
+ [data-ui="field"]:not([data-kind="checkbox"]) {
1309
+ grid-template-columns: minmax(7rem, 9rem) minmax(0, 1fr);
1310
+ align-items: center;
1311
+ column-gap: var(--kv-space-3);
1312
+ }
1313
+
1314
+ :where([data-kv-design-system])
1315
+ [data-ui="form-page"]
1316
+ [data-ui="record-form"]
1317
+ [data-ui="field"]:not([data-kind="checkbox"])
1318
+ > [data-ui="field-label"] {
1319
+ grid-column: 1;
1320
+ }
1321
+
1322
+ :where([data-kv-design-system])
1323
+ [data-ui="form-page"]
1324
+ [data-ui="record-form"]
1325
+ [data-ui="field"]:not([data-kind="checkbox"])
1326
+ > :is(
1327
+ [data-ui="field-control"],
1328
+ [data-ui="field-options"],
1329
+ [data-ui="field-help"],
1330
+ [data-ui="field-error"]
1331
+ ) {
1332
+ grid-column: 2;
1333
+ }
1334
+
1335
+ @media (max-width: 89.9375rem) {
1336
+ :where([data-kv-design-system])
1337
+ [data-ui="form-page"]
1338
+ [data-ui="record-form"]
1339
+ [data-ui="field"]:not([data-kind="checkbox"]) {
1340
+ grid-template-columns: minmax(6.5rem, 7.5rem) minmax(0, 1fr);
1341
+ column-gap: var(--kv-space-2);
1342
+ }
1343
+ }
1344
+
1345
+ @media (max-width: 63.9375rem) {
1346
+ :where([data-kv-design-system]) [data-ui="form-page-layout"] {
1347
+ grid-template-columns: minmax(0, 1fr);
1348
+ row-gap: var(--kv-space-5);
1349
+ }
1350
+
1351
+ :where([data-kv-design-system]) [data-ui="form-page-aside"] {
1352
+ position: static;
1353
+ max-height: none;
1354
+ padding-top: var(--kv-space-5);
1355
+ overflow: visible;
1356
+ border-top: 1px solid var(--kv-panel-divider);
1357
+ border-left: 0;
1358
+ }
1359
+ }
1360
+
1361
+ @media (max-width: 47.9375rem) {
1362
+ :where([data-kv-design-system])
1363
+ [data-ui="form-page"]
1364
+ [data-ui="record-form"]
1365
+ [data-ui="field"]:not([data-kind="checkbox"]) {
1366
+ grid-template-columns: minmax(0, 1fr);
1367
+ align-items: stretch;
1368
+ }
1369
+
1370
+ :where([data-kv-design-system])
1371
+ [data-ui="form-page"]
1372
+ [data-ui="record-form"]
1373
+ [data-ui="field"]:not([data-kind="checkbox"])
1374
+ > :is(
1375
+ [data-ui="field-label"],
1376
+ [data-ui="field-control"],
1377
+ [data-ui="field-options"],
1378
+ [data-ui="field-help"],
1379
+ [data-ui="field-error"]
1380
+ ) {
1381
+ grid-column: 1;
1382
+ }
1383
+ }
1384
+
1385
+ @media (max-width: 42rem) {
1386
+ :where([data-kv-design-system]) [data-ui="form-page"][data-variant="operational"] {
1387
+ padding-bottom: var(--kv-space-8);
1388
+ }
1389
+
1390
+ :where([data-kv-design-system])
1391
+ [data-ui="form-page"][data-variant="operational"]
1392
+ [data-ui="form-page-context"] {
1393
+ min-height: 2.75rem;
1394
+ padding-inline: var(--kv-space-4);
1395
+ }
1396
+
1397
+ :where([data-kv-design-system]) [data-ui="form-page-header"] {
1398
+ padding: var(--kv-space-4) var(--kv-space-4) var(--kv-space-3);
1399
+ }
1400
+
1401
+ :where([data-kv-design-system]) [data-ui="form-page-title-row"] {
1402
+ grid-template-columns: minmax(0, 1fr);
1403
+ align-items: stretch;
1404
+ gap: var(--kv-space-3);
1405
+ }
1406
+
1407
+ :where([data-kv-design-system]) [data-ui="form-page-title"] {
1408
+ font-size: var(--kv-text-lg);
1409
+ }
1410
+
1411
+ :where([data-kv-design-system]) [data-ui="form-page-actions"] {
1412
+ justify-content: flex-start;
1413
+ }
1414
+
1415
+ :where([data-kv-design-system])
1416
+ [data-ui="form-page-actions"]
1417
+ > :is([data-ui="action-group"], [data-ui="form-cluster"]) {
1418
+ width: 100%;
1419
+ }
1420
+
1421
+ :where([data-kv-design-system]) [data-ui="form-page-meta"] {
1422
+ padding-left: 0;
1423
+ }
1424
+
1425
+ :where([data-kv-design-system]) [data-ui="form-page-navigation"] {
1426
+ padding-inline: var(--kv-space-4);
1427
+ }
1428
+
1429
+ :where([data-kv-design-system]) [data-ui="form-page-body"],
1430
+ :where([data-kv-design-system]) [data-ui="form-page-aside"],
1431
+ :where([data-kv-design-system]) [data-ui="form-page-controller"] {
1432
+ padding-inline: var(--kv-space-4);
1433
+ }
1434
+ }
1435
+ }