@echelon-foundry/design-system 0.2.0-main.15.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 (148) hide show
  1. package/README.md +82 -0
  2. package/dist/all.css +3461 -0
  3. package/dist/assessment.css +1123 -0
  4. package/dist/brands/echelon.css +91 -0
  5. package/dist/brands/example-harbor.css +91 -0
  6. package/dist/brands/index.json +17 -0
  7. package/dist/build-metrics.json +152 -0
  8. package/dist/components.css +2123 -0
  9. package/dist/foundations.css +113 -0
  10. package/dist/patterns/alert.html +8 -0
  11. package/dist/patterns/allocation.html +24 -0
  12. package/dist/patterns/best-worst.html +21 -0
  13. package/dist/patterns/binary-choice.html +15 -0
  14. package/dist/patterns/checkbox.html +13 -0
  15. package/dist/patterns/choice-group.html +27 -0
  16. package/dist/patterns/collection-toolbar.html +22 -0
  17. package/dist/patterns/combobox.html +13 -0
  18. package/dist/patterns/command-palette.html +14 -0
  19. package/dist/patterns/composer.html +19 -0
  20. package/dist/patterns/conflict-review.html +17 -0
  21. package/dist/patterns/conversation.html +23 -0
  22. package/dist/patterns/dashboard-grid.html +5 -0
  23. package/dist/patterns/data-grid.html +30 -0
  24. package/dist/patterns/date-range.html +13 -0
  25. package/dist/patterns/dialog.html +15 -0
  26. package/dist/patterns/diff-viewer.html +22 -0
  27. package/dist/patterns/disclosure.html +6 -0
  28. package/dist/patterns/empty-state.html +6 -0
  29. package/dist/patterns/file-upload.html +19 -0
  30. package/dist/patterns/flyout.html +72 -0
  31. package/dist/patterns/hierarchical-choice.html +25 -0
  32. package/dist/patterns/hierarchical-multi-choice.html +27 -0
  33. package/dist/patterns/image-choice.html +25 -0
  34. package/dist/patterns/master-detail.html +16 -0
  35. package/dist/patterns/matrix-single.html +26 -0
  36. package/dist/patterns/menu.html +8 -0
  37. package/dist/patterns/metric-card.html +6 -0
  38. package/dist/patterns/mobile-action-bar.html +4 -0
  39. package/dist/patterns/multi-choice.html +23 -0
  40. package/dist/patterns/numeric-stepper.html +5 -0
  41. package/dist/patterns/obligation-panel.html +36 -0
  42. package/dist/patterns/operation-status.html +12 -0
  43. package/dist/patterns/ordinal-scale.html +42 -0
  44. package/dist/patterns/pagination.html +12 -0
  45. package/dist/patterns/pairwise-choice.html +21 -0
  46. package/dist/patterns/popover.html +6 -0
  47. package/dist/patterns/preview-surface.html +14 -0
  48. package/dist/patterns/provenance-trail.html +9 -0
  49. package/dist/patterns/question.html +13 -0
  50. package/dist/patterns/range-entry.html +18 -0
  51. package/dist/patterns/ranking.html +32 -0
  52. package/dist/patterns/readiness-checklist.html +12 -0
  53. package/dist/patterns/record-header.html +17 -0
  54. package/dist/patterns/rule-builder.html +37 -0
  55. package/dist/patterns/search.html +8 -0
  56. package/dist/patterns/segmented-control.html +13 -0
  57. package/dist/patterns/select.html +12 -0
  58. package/dist/patterns/semantic-differential.html +23 -0
  59. package/dist/patterns/skeleton.html +7 -0
  60. package/dist/patterns/slider.html +11 -0
  61. package/dist/patterns/special-choice.html +15 -0
  62. package/dist/patterns/status-lozenge.html +6 -0
  63. package/dist/patterns/survey-progress.html +8 -0
  64. package/dist/patterns/switch.html +14 -0
  65. package/dist/patterns/symbol-rating.html +31 -0
  66. package/dist/patterns/tabs.html +11 -0
  67. package/dist/patterns/timeline.html +19 -0
  68. package/dist/patterns/toast.html +10 -0
  69. package/dist/patterns/understanding.html +32 -0
  70. package/dist/patterns/validation-message.html +4 -0
  71. package/dist/patterns/validation-summary.html +10 -0
  72. package/dist/patterns/wizard.html +19 -0
  73. package/dist/patterns/work-queue.html +20 -0
  74. package/dist/skins.css +29 -0
  75. package/dist/tokens.css +99 -0
  76. package/docs/BRANDING.md +148 -0
  77. package/package.json +60 -0
  78. package/patterns/alert.html +8 -0
  79. package/patterns/allocation.html +24 -0
  80. package/patterns/assessment.manifest.md +93 -0
  81. package/patterns/best-worst.html +21 -0
  82. package/patterns/binary-choice.html +15 -0
  83. package/patterns/checkbox.html +13 -0
  84. package/patterns/choice-group.html +27 -0
  85. package/patterns/collection-toolbar.html +22 -0
  86. package/patterns/combobox.html +13 -0
  87. package/patterns/command-palette.html +14 -0
  88. package/patterns/composer.html +19 -0
  89. package/patterns/composer.manifest.md +27 -0
  90. package/patterns/conflict-review.html +17 -0
  91. package/patterns/conversation.html +23 -0
  92. package/patterns/conversation.manifest.md +21 -0
  93. package/patterns/dashboard-grid.html +5 -0
  94. package/patterns/data-grid.html +30 -0
  95. package/patterns/date-range.html +13 -0
  96. package/patterns/dialog.html +15 -0
  97. package/patterns/diff-viewer.html +22 -0
  98. package/patterns/disclosure.html +6 -0
  99. package/patterns/empty-state.html +6 -0
  100. package/patterns/file-upload.html +19 -0
  101. package/patterns/flyout.html +72 -0
  102. package/patterns/flyout.manifest.md +43 -0
  103. package/patterns/hierarchical-choice.html +25 -0
  104. package/patterns/hierarchical-multi-choice.html +27 -0
  105. package/patterns/image-choice.html +25 -0
  106. package/patterns/manifest.md +46 -0
  107. package/patterns/master-detail.html +16 -0
  108. package/patterns/matrix-single.html +26 -0
  109. package/patterns/menu.html +8 -0
  110. package/patterns/metric-card.html +6 -0
  111. package/patterns/mobile-action-bar.html +4 -0
  112. package/patterns/multi-choice.html +23 -0
  113. package/patterns/numeric-stepper.html +5 -0
  114. package/patterns/obligation-panel.html +36 -0
  115. package/patterns/operation-status.html +12 -0
  116. package/patterns/ordinal-scale.html +42 -0
  117. package/patterns/pagination.html +12 -0
  118. package/patterns/pairwise-choice.html +21 -0
  119. package/patterns/popover.html +6 -0
  120. package/patterns/preview-surface.html +14 -0
  121. package/patterns/provenance-trail.html +9 -0
  122. package/patterns/question.html +13 -0
  123. package/patterns/range-entry.html +18 -0
  124. package/patterns/ranking.html +32 -0
  125. package/patterns/readiness-checklist.html +12 -0
  126. package/patterns/record-header.html +17 -0
  127. package/patterns/rule-builder.html +37 -0
  128. package/patterns/search.html +8 -0
  129. package/patterns/segmented-control.html +13 -0
  130. package/patterns/select.html +12 -0
  131. package/patterns/semantic-differential.html +23 -0
  132. package/patterns/skeleton.html +7 -0
  133. package/patterns/slider.html +11 -0
  134. package/patterns/special-choice.html +15 -0
  135. package/patterns/status-lozenge.html +6 -0
  136. package/patterns/survey-progress.html +8 -0
  137. package/patterns/switch.html +14 -0
  138. package/patterns/symbol-rating.html +31 -0
  139. package/patterns/tabs.html +11 -0
  140. package/patterns/timeline.html +19 -0
  141. package/patterns/toast.html +10 -0
  142. package/patterns/understanding.html +32 -0
  143. package/patterns/understanding.manifest.md +26 -0
  144. package/patterns/validation-message.html +4 -0
  145. package/patterns/validation-summary.html +10 -0
  146. package/patterns/wizard.html +19 -0
  147. package/patterns/work-queue.html +20 -0
  148. package/schemas/brand-manifest.schema.json +152 -0
@@ -0,0 +1,2123 @@
1
+ @layer echelon.components {
2
+ /*
3
+ * Public ef-* authoring tags are inert wrappers, not registered Custom
4
+ * Elements. display: contents keeps layout and semantics owned by the
5
+ * canonical native HTML inside the tag.
6
+ */
7
+ .ef-component-tag {
8
+ display: contents;
9
+ }
10
+
11
+ .ef-field {
12
+ display: grid;
13
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
14
+ }
15
+
16
+ .ef-field__label {
17
+ color: var(--ef-color-text-primary, #171a18);
18
+ font-size: 0.9375rem;
19
+ font-weight: 650;
20
+ line-height: 1.25;
21
+ }
22
+
23
+ .ef-field__description {
24
+ color: var(--ef-color-text-secondary, #686d68);
25
+ font-size: 0.8125rem;
26
+ line-height: 1.4;
27
+ }
28
+
29
+ /* Physics-derived motion ---------------------------------------------- */
30
+ :where(.ef-switch, .ef-checkbox, .ef-select, .ef-disclosure, .ef-popover, .ef-menu, .ef-dialog, .ef-flyout, .ef-tabs, .ef-alert, .ef-toast, .ef-command-palette) {
31
+ /*
32
+ * CSS cannot run a continuous rigid-body simulation. Forma therefore uses
33
+ * a physics-derived response model. The fallback values remain usable in
34
+ * browsers that do not support CSS sqrt()/typed multiplication.
35
+ */
36
+ --ef-motion-mass: 1;
37
+ --ef-motion-stiffness: 1;
38
+ --ef-motion-damping: 0.84;
39
+ --ef-motion-distance: 1;
40
+ --ef-motion-gravity: 1;
41
+ --ef-motion-base-duration: 180ms;
42
+ --ef-motion-inertia-duration: 214ms;
43
+ --ef-motion-gravity-duration: 255ms;
44
+ --ef-motion-state-duration: 154ms;
45
+ --ef-motion-press-duration: 107ms;
46
+ --ef-motion-exit-duration: 150ms;
47
+ --ef-motion-spring-easing: linear(0, 0.42 24%, 0.82 48%, 1.055 70%, 0.988 88%, 1);
48
+ --ef-motion-damped-easing: cubic-bezier(0.2, 0.8, 0.2, 1);
49
+ }
50
+
51
+ :where(.ef-switch, .ef-checkbox, .ef-select, .ef-disclosure, .ef-popover, .ef-menu, .ef-dialog, .ef-flyout, .ef-tabs, .ef-alert, .ef-toast, .ef-command-palette)[data-ef-motion-weight="light"] {
52
+ --ef-motion-mass: 0.65;
53
+ --ef-motion-stiffness: 1.15;
54
+ --ef-motion-damping: 0.94;
55
+ }
56
+
57
+ :where(.ef-switch, .ef-checkbox, .ef-select, .ef-disclosure, .ef-popover, .ef-menu, .ef-dialog, .ef-flyout, .ef-tabs, .ef-alert, .ef-toast, .ef-command-palette)[data-ef-motion-weight="standard"] {
58
+ --ef-motion-mass: 1;
59
+ --ef-motion-stiffness: 1;
60
+ --ef-motion-damping: 0.84;
61
+ }
62
+
63
+ :where(.ef-switch, .ef-checkbox, .ef-select, .ef-disclosure, .ef-popover, .ef-menu, .ef-dialog, .ef-flyout, .ef-tabs, .ef-alert, .ef-toast, .ef-command-palette)[data-ef-motion-weight="heavy"] {
64
+ --ef-motion-mass: 1.8;
65
+ --ef-motion-stiffness: 0.92;
66
+ --ef-motion-damping: 0.76;
67
+ }
68
+
69
+ :where(.ef-disclosure, .ef-popover, .ef-menu, .ef-tabs):not([data-ef-motion-weight]) {
70
+ --ef-motion-mass: 0.65;
71
+ --ef-motion-stiffness: 1.15;
72
+ --ef-motion-damping: 0.94;
73
+ }
74
+
75
+ :where(.ef-dialog, .ef-flyout, .ef-command-palette):not([data-ef-motion-weight]) {
76
+ --ef-motion-mass: 1.8;
77
+ --ef-motion-stiffness: 0.92;
78
+ --ef-motion-damping: 0.76;
79
+ }
80
+
81
+ @supports (width: calc(1px * sqrt(1))) {
82
+ :where(.ef-switch, .ef-checkbox, .ef-select, .ef-disclosure, .ef-popover, .ef-menu, .ef-dialog, .ef-flyout, .ef-tabs, .ef-alert, .ef-toast, .ef-command-palette) {
83
+ /*
84
+ * Response time follows sqrt(mass / stiffness), then is lengthened as
85
+ * damping decreases. Vertical gravity time follows sqrt(2s / g) and is
86
+ * deliberately independent of mass.
87
+ */
88
+ --ef-motion-inertia-duration: clamp(
89
+ 110ms,
90
+ calc(
91
+ var(--ef-motion-base-duration)
92
+ * sqrt(var(--ef-motion-mass) / var(--ef-motion-stiffness))
93
+ / var(--ef-motion-damping)
94
+ ),
95
+ 420ms
96
+ );
97
+ --ef-motion-gravity-duration: clamp(
98
+ 100ms,
99
+ calc(
100
+ var(--ef-motion-base-duration)
101
+ * sqrt((2 * var(--ef-motion-distance)) / var(--ef-motion-gravity))
102
+ ),
103
+ 420ms
104
+ );
105
+ --ef-motion-state-duration: clamp(
106
+ 90ms,
107
+ calc(var(--ef-motion-inertia-duration) * 0.72),
108
+ 240ms
109
+ );
110
+ --ef-motion-press-duration: clamp(
111
+ 70ms,
112
+ calc(var(--ef-motion-inertia-duration) * 0.5),
113
+ 160ms
114
+ );
115
+ --ef-motion-exit-duration: clamp(
116
+ 80ms,
117
+ calc(var(--ef-motion-inertia-duration) * 0.68),
118
+ 220ms
119
+ );
120
+ }
121
+ }
122
+
123
+ /* Switch -------------------------------------------------------------- */
124
+ .ef-switch {
125
+ --ef-switch-width: 2.75rem;
126
+ --ef-switch-height: 1.5rem;
127
+ --ef-switch-thumb: 1.125rem;
128
+ --ef-switch-gap: 0.1875rem;
129
+ position: relative;
130
+ display: inline-grid;
131
+ grid-template-columns: var(--ef-switch-width) minmax(0, 1fr);
132
+ align-items: center;
133
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
134
+ min-block-size: 2.75rem;
135
+ max-inline-size: 100%;
136
+ color: var(--ef-color-text-primary, #171a18);
137
+ cursor: pointer;
138
+ user-select: none;
139
+ -webkit-tap-highlight-color: transparent;
140
+ }
141
+
142
+ .ef-switch__input {
143
+ position: absolute;
144
+ inset: 0;
145
+ z-index: 2;
146
+ margin: 0;
147
+ opacity: 0;
148
+ cursor: inherit;
149
+ }
150
+
151
+ .ef-switch__track {
152
+ position: relative;
153
+ inline-size: var(--ef-switch-width);
154
+ block-size: var(--ef-switch-height);
155
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
156
+ border-radius: var(--ef-primitive-radius-pill, 999px);
157
+ background: var(--ef-color-control-track, #686d68);
158
+ transition:
159
+ background var(--ef-motion-state-duration) var(--ef-motion-damped-easing),
160
+ border-color var(--ef-motion-state-duration) var(--ef-motion-damped-easing);
161
+ }
162
+
163
+ .ef-switch__track::after {
164
+ content: "";
165
+ position: absolute;
166
+ inset-block-start: 50%;
167
+ inset-inline-start: var(--ef-switch-gap);
168
+ inline-size: var(--ef-switch-thumb);
169
+ block-size: var(--ef-switch-thumb);
170
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
171
+ border-radius: 50%;
172
+ background: var(--ef-color-control-thumb, #f2efe7);
173
+ box-shadow: 0 1px 2px rgb(0 0 0 / 0.18);
174
+ translate: 0 -50%;
175
+ scale: 1;
176
+ transition:
177
+ translate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing),
178
+ scale var(--ef-motion-press-duration) var(--ef-motion-damped-easing),
179
+ border-color var(--ef-motion-state-duration) var(--ef-motion-damped-easing);
180
+ }
181
+
182
+ .ef-switch__input:checked + .ef-switch__track {
183
+ background: var(--ef-color-control-active, #905831);
184
+ }
185
+
186
+ .ef-switch__input:checked + .ef-switch__track::after {
187
+ translate: calc(var(--ef-switch-width) - var(--ef-switch-thumb) - (2 * var(--ef-switch-gap))) -50%;
188
+ }
189
+
190
+ .ef-switch__input:active + .ef-switch__track::after { scale: 1.12; }
191
+
192
+ .ef-switch__input:focus-visible + .ef-switch__track {
193
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
194
+ outline-offset: 2px;
195
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
196
+ }
197
+
198
+ .ef-switch__input:disabled ~ * { opacity: 0.62; }
199
+ .ef-switch:has(.ef-switch__input:disabled) { cursor: not-allowed; }
200
+
201
+ .ef-switch__text { min-inline-size: 0; }
202
+ .ef-switch__label { display: block; font-size: 0.9375rem; font-weight: 650; line-height: 1.25; }
203
+ .ef-switch__description {
204
+ display: block;
205
+ margin-block-start: 0.2rem;
206
+ color: var(--ef-color-text-secondary, #686d68);
207
+ font-size: 0.8125rem;
208
+ line-height: 1.35;
209
+ }
210
+
211
+ /* Checkbox ------------------------------------------------------------ */
212
+ .ef-checkbox {
213
+ position: relative;
214
+ display: inline-grid;
215
+ grid-template-columns: 1.25rem minmax(0, 1fr);
216
+ align-items: center;
217
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
218
+ min-block-size: 2.75rem;
219
+ max-inline-size: 100%;
220
+ color: var(--ef-color-text-primary, #171a18);
221
+ cursor: pointer;
222
+ user-select: none;
223
+ -webkit-tap-highlight-color: transparent;
224
+ }
225
+
226
+ .ef-checkbox__input {
227
+ position: absolute;
228
+ inset: 0;
229
+ z-index: 2;
230
+ margin: 0;
231
+ opacity: 0;
232
+ cursor: inherit;
233
+ }
234
+
235
+ .ef-checkbox__box {
236
+ position: relative;
237
+ inline-size: 1.25rem;
238
+ block-size: 1.25rem;
239
+ display: grid;
240
+ place-items: center;
241
+ border: 2px solid var(--ef-color-border-functional, #3a403c);
242
+ border-radius: var(--ef-primitive-radius-small, 4px);
243
+ background: var(--ef-color-surface-primary, #f2efe7);
244
+ scale: 1;
245
+ transition:
246
+ background var(--ef-motion-state-duration) var(--ef-motion-damped-easing),
247
+ border-color var(--ef-motion-state-duration) var(--ef-motion-damped-easing),
248
+ scale var(--ef-motion-press-duration) var(--ef-motion-damped-easing);
249
+ }
250
+
251
+ .ef-checkbox__box::after {
252
+ content: "✓";
253
+ color: var(--ef-color-text-inverse, #f2efe7);
254
+ font-family: var(--ef-primitive-font-family-sans, system-ui, sans-serif);
255
+ font-size: 0.9rem;
256
+ font-weight: 800;
257
+ line-height: 1;
258
+ opacity: 0;
259
+ rotate: -12deg;
260
+ scale: 0.35;
261
+ transition:
262
+ opacity var(--ef-motion-state-duration) linear,
263
+ rotate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing),
264
+ scale var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing);
265
+ }
266
+
267
+ .ef-checkbox__input:checked + .ef-checkbox__box {
268
+ border-color: var(--ef-color-control-active, #905831);
269
+ background: var(--ef-color-control-active, #905831);
270
+ }
271
+
272
+ .ef-checkbox__input:checked + .ef-checkbox__box::after {
273
+ opacity: 1;
274
+ rotate: 0deg;
275
+ scale: 1;
276
+ }
277
+
278
+ .ef-checkbox__input:active + .ef-checkbox__box { scale: 0.92; }
279
+
280
+ .ef-checkbox__input:focus-visible + .ef-checkbox__box {
281
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
282
+ outline-offset: 2px;
283
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
284
+ }
285
+
286
+ .ef-checkbox:has(.ef-checkbox__input:disabled) {
287
+ cursor: not-allowed;
288
+ opacity: 0.62;
289
+ }
290
+
291
+ .ef-checkbox__text { min-inline-size: 0; }
292
+ .ef-checkbox__label { display: block; font-size: 0.9375rem; font-weight: 650; line-height: 1.25; }
293
+ .ef-checkbox__description {
294
+ display: block;
295
+ margin-block-start: 0.2rem;
296
+ color: var(--ef-color-text-secondary, #686d68);
297
+ font-size: 0.8125rem;
298
+ line-height: 1.35;
299
+ }
300
+
301
+ /* Select -------------------------------------------------------------- */
302
+ .ef-select-field {
303
+ display: grid;
304
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
305
+ max-inline-size: 100%;
306
+ }
307
+
308
+ .ef-select {
309
+ --ef-motion-distance: 0.35;
310
+ position: relative;
311
+ display: grid;
312
+ align-items: center;
313
+ max-inline-size: 100%;
314
+ }
315
+
316
+ .ef-select__input {
317
+ inline-size: 100%;
318
+ min-block-size: 2.75rem;
319
+ padding-inline-end: 2.75rem;
320
+ appearance: none;
321
+ cursor: pointer;
322
+ transition:
323
+ background var(--ef-motion-state-duration) var(--ef-motion-damped-easing),
324
+ border-color var(--ef-motion-state-duration) var(--ef-motion-damped-easing);
325
+ }
326
+
327
+ .ef-select__indicator {
328
+ position: absolute;
329
+ inset-inline-end: 1rem;
330
+ inline-size: 0.55rem;
331
+ block-size: 0.55rem;
332
+ border-inline-end: 2px solid currentColor;
333
+ border-block-end: 2px solid currentColor;
334
+ color: var(--ef-color-text-primary, #171a18);
335
+ pointer-events: none;
336
+ rotate: 45deg;
337
+ translate: 0 -0.12rem;
338
+ transition:
339
+ rotate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing),
340
+ translate var(--ef-motion-gravity-duration) var(--ef-motion-damped-easing);
341
+ }
342
+
343
+ .ef-select__input:open + .ef-select__indicator {
344
+ rotate: 225deg;
345
+ translate: 0 0.08rem;
346
+ }
347
+
348
+ .ef-select__input:disabled {
349
+ cursor: not-allowed;
350
+ opacity: 0.62;
351
+ }
352
+
353
+ @media (prefers-reduced-motion: reduce) {
354
+ :where(.ef-switch, .ef-checkbox, .ef-select, .ef-disclosure, .ef-popover, .ef-menu, .ef-dialog, .ef-flyout, .ef-tabs, .ef-alert, .ef-toast, .ef-command-palette) {
355
+ --ef-motion-inertia-duration: 0.01ms;
356
+ --ef-motion-gravity-duration: 0.01ms;
357
+ --ef-motion-state-duration: 0.01ms;
358
+ --ef-motion-press-duration: 0.01ms;
359
+ --ef-motion-exit-duration: 0.01ms;
360
+ --ef-motion-spring-easing: linear;
361
+ --ef-motion-damped-easing: linear;
362
+ }
363
+
364
+ .ef-switch__input:active + .ef-switch__track::after,
365
+ .ef-checkbox__input:active + .ef-checkbox__box {
366
+ scale: 1;
367
+ }
368
+
369
+ .ef-select__indicator,
370
+ .ef-select__input:open + .ef-select__indicator {
371
+ translate: 0 0;
372
+ }
373
+ }
374
+
375
+ /* Slider -------------------------------------------------------------- */
376
+
377
+ .ef-slider {
378
+ display: grid;
379
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
380
+ }
381
+
382
+ .ef-slider__header,
383
+ .ef-slider__bounds {
384
+ min-inline-size: 0;
385
+ display: flex;
386
+ flex-wrap: wrap;
387
+ justify-content: space-between;
388
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
389
+ }
390
+
391
+ .ef-slider__label { font-size: 0.9375rem; font-weight: 650; }
392
+ .ef-slider__bounds {
393
+ color: var(--ef-color-text-secondary, #686d68);
394
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
395
+ font-size: 0.6875rem;
396
+ }
397
+
398
+ .ef-slider__input {
399
+ inline-size: 100%;
400
+ min-block-size: 2.75rem;
401
+ margin: 0;
402
+ accent-color: var(--ef-color-control-active, #905831);
403
+ cursor: pointer;
404
+ transition:
405
+ filter var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease),
406
+ opacity var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease);
407
+ }
408
+
409
+ .ef-slider__input:hover { filter: saturate(1.08); }
410
+ .ef-slider__input:active { filter: saturate(1.14); }
411
+ .ef-slider__input:disabled { cursor: not-allowed; opacity: 0.62; }
412
+
413
+ .ef-slider__input:focus-visible {
414
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
415
+ outline-offset: 2px;
416
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
417
+ }
418
+
419
+ /* Segmented control --------------------------------------------------- */
420
+ .ef-segmented {
421
+ max-inline-size: 100%;
422
+ display: inline-flex;
423
+ flex-wrap: wrap;
424
+ gap: 2px;
425
+ padding: 2px;
426
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
427
+ background: var(--ef-color-surface-secondary, #e3e0d7);
428
+ }
429
+
430
+ .ef-segment {
431
+ position: relative;
432
+ min-block-size: 2.75rem;
433
+ min-inline-size: 0;
434
+ display: grid;
435
+ place-items: center;
436
+ padding: 0.55rem 0.9rem;
437
+ background: transparent;
438
+ color: var(--ef-color-text-on-secondary-surface, #3a403c);
439
+ cursor: pointer;
440
+ transition:
441
+ background var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease),
442
+ color var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease),
443
+ transform var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease);
444
+ }
445
+
446
+ .ef-segment:has(input:checked) {
447
+ background: var(--ef-color-surface-inverse, #202421);
448
+ color: var(--ef-color-text-inverse, #f2efe7);
449
+ }
450
+
451
+ .ef-segment:has(input:active) { transform: scale(0.985); }
452
+ .ef-segment input {
453
+ position: absolute;
454
+ inline-size: 1px;
455
+ block-size: 1px;
456
+ opacity: 0;
457
+ }
458
+
459
+ .ef-segment:has(input:focus-visible) {
460
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
461
+ outline-offset: 2px;
462
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
463
+ }
464
+
465
+ /* Disclosure ---------------------------------------------------------- */
466
+ .ef-disclosure {
467
+ border-block: 1px solid var(--ef-color-border-functional, #3a403c);
468
+ }
469
+
470
+ .ef-disclosure + .ef-disclosure { border-block-start: 0; }
471
+
472
+ .ef-disclosure > summary {
473
+ min-inline-size: 0;
474
+ display: flex;
475
+ align-items: center;
476
+ justify-content: space-between;
477
+ gap: 1rem;
478
+ min-block-size: 2.75rem;
479
+ padding: 0.75rem 0;
480
+ cursor: pointer;
481
+ font-weight: 650;
482
+ list-style: none;
483
+ }
484
+
485
+ .ef-disclosure > summary::-webkit-details-marker { display: none; }
486
+ .ef-disclosure > summary::after {
487
+ content: "+";
488
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
489
+ rotate: 0deg;
490
+ scale: 1;
491
+ transition:
492
+ rotate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing),
493
+ scale var(--ef-motion-press-duration) var(--ef-motion-damped-easing);
494
+ }
495
+ .ef-disclosure > summary:active::after { scale: 0.86; }
496
+ .ef-disclosure[open] > summary::after { rotate: 45deg; }
497
+ .ef-disclosure__content {
498
+ padding: 0 0 1rem;
499
+ opacity: 1;
500
+ translate: 0 0;
501
+ transition:
502
+ opacity var(--ef-motion-state-duration) linear,
503
+ translate var(--ef-motion-inertia-duration) var(--ef-motion-damped-easing);
504
+ }
505
+
506
+ @starting-style {
507
+ .ef-disclosure[open] .ef-disclosure__content {
508
+ opacity: 0;
509
+ translate: 0 -0.25rem;
510
+ }
511
+ }
512
+
513
+ /* Popover and ordinary action menu ------------------------------------ */
514
+ .ef-popover,
515
+ .ef-menu {
516
+ max-inline-size: min(30rem, calc(100vw - 2rem));
517
+ max-block-size: min(80dvh, calc(100dvh - 2rem));
518
+ margin: 0;
519
+ padding: var(--ef-primitive-spacing-4, 1rem);
520
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
521
+ background: var(--ef-color-surface-primary, #f2efe7);
522
+ color: var(--ef-color-text-primary, #171a18);
523
+ box-shadow: 0 1rem 3rem rgb(0 0 0 / 0.18);
524
+ overflow: auto;
525
+ overscroll-behavior: contain;
526
+ opacity: 0;
527
+ translate: 0 -0.35rem;
528
+ scale: 0.985;
529
+ transition:
530
+ opacity var(--ef-motion-exit-duration) linear,
531
+ translate var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
532
+ scale var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
533
+ display var(--ef-motion-exit-duration) allow-discrete,
534
+ overlay var(--ef-motion-exit-duration) allow-discrete;
535
+ }
536
+
537
+ .ef-popover:popover-open,
538
+ .ef-menu:popover-open {
539
+ opacity: 1;
540
+ translate: 0 0;
541
+ scale: 1;
542
+ transition-duration:
543
+ var(--ef-motion-state-duration),
544
+ var(--ef-motion-inertia-duration),
545
+ var(--ef-motion-inertia-duration),
546
+ var(--ef-motion-inertia-duration),
547
+ var(--ef-motion-inertia-duration);
548
+ }
549
+
550
+ @starting-style {
551
+ .ef-popover:popover-open,
552
+ .ef-menu:popover-open {
553
+ opacity: 0;
554
+ translate: 0 -0.35rem;
555
+ scale: 0.985;
556
+ }
557
+ }
558
+
559
+ .ef-menu {
560
+ min-inline-size: min(14rem, calc(100vw - 2rem));
561
+ padding: 0.4rem;
562
+ }
563
+
564
+ .ef-menu__list {
565
+ display: grid;
566
+ gap: 0.2rem;
567
+ margin: 0;
568
+ padding: 0;
569
+ list-style: none;
570
+ }
571
+
572
+ .ef-menu__list :where(button, a) {
573
+ inline-size: 100%;
574
+ min-block-size: 2.75rem;
575
+ display: flex;
576
+ align-items: center;
577
+ justify-content: space-between;
578
+ gap: 1rem;
579
+ padding: 0.6rem 0.75rem;
580
+ border: 0;
581
+ background: transparent;
582
+ color: var(--ef-color-text-primary, #171a18);
583
+ text-align: start;
584
+ text-decoration: none;
585
+ }
586
+
587
+ .ef-menu__list :where(button, a):hover {
588
+ background: var(--ef-color-surface-secondary, #e3e0d7);
589
+ }
590
+
591
+ /* Dialog and flyout ---------------------------------------------------- */
592
+ :where(.ef-dialog, .ef-flyout) {
593
+ --ef-overlay-motion-duration: var(--ef-motion-exit-duration);
594
+ --ef-overlay-spatial-easing: var(--ef-motion-damped-easing);
595
+ padding: 0;
596
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
597
+ background: var(--ef-color-surface-primary, #f2efe7);
598
+ color: var(--ef-color-text-primary, #171a18);
599
+ overscroll-behavior: contain;
600
+ }
601
+
602
+ :where(.ef-dialog, .ef-flyout)[open] {
603
+ --ef-overlay-motion-duration: var(--ef-motion-inertia-duration);
604
+ --ef-overlay-spatial-easing: var(--ef-motion-spring-easing);
605
+ }
606
+
607
+ :where(.ef-dialog, .ef-flyout)::backdrop {
608
+ background: rgb(23 26 24 / 0);
609
+ backdrop-filter: blur(0);
610
+ transition:
611
+ background var(--ef-overlay-motion-duration) var(--ef-motion-damped-easing),
612
+ backdrop-filter var(--ef-overlay-motion-duration) var(--ef-motion-damped-easing),
613
+ display var(--ef-overlay-motion-duration) allow-discrete,
614
+ overlay var(--ef-overlay-motion-duration) allow-discrete;
615
+ }
616
+
617
+ :where(.ef-dialog, .ef-flyout)[open]::backdrop {
618
+ background: rgb(23 26 24 / 0.48);
619
+ backdrop-filter: blur(2px);
620
+ }
621
+
622
+ /* Centered modal dialog ------------------------------------------------ */
623
+ .ef-dialog {
624
+ inline-size: min(38rem, calc(100vw - 2rem));
625
+ max-block-size: calc(100dvh - 2rem);
626
+ box-shadow: 0 1.5rem 4rem rgb(0 0 0 / 0.28);
627
+ translate: 0 0.75rem;
628
+ scale: 0.985;
629
+ transition:
630
+ translate var(--ef-overlay-motion-duration) var(--ef-overlay-spatial-easing),
631
+ scale var(--ef-overlay-motion-duration) var(--ef-overlay-spatial-easing),
632
+ display var(--ef-overlay-motion-duration) allow-discrete,
633
+ overlay var(--ef-overlay-motion-duration) allow-discrete;
634
+ }
635
+
636
+ .ef-dialog[open] {
637
+ translate: 0 0;
638
+ scale: 1;
639
+ }
640
+
641
+ .ef-dialog__body { padding: var(--ef-primitive-spacing-5, 1.5rem); }
642
+ .ef-dialog__actions {
643
+ min-inline-size: 0;
644
+ display: flex;
645
+ flex-wrap: wrap;
646
+ justify-content: flex-end;
647
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
648
+ padding: 1rem 1.5rem;
649
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
650
+ }
651
+
652
+ /* Edge flyout --------------------------------------------------------- */
653
+ .ef-flyout {
654
+ --ef-flyout-closed-x: 100%;
655
+ position: fixed;
656
+ inset-block: 0;
657
+ inline-size: min(28rem, 90vw);
658
+ max-inline-size: min(28rem, 90vw);
659
+ block-size: 100dvh;
660
+ max-block-size: 100dvh;
661
+ box-sizing: border-box;
662
+ margin-block: 0;
663
+ box-shadow: 0 0 3rem rgb(0 0 0 / 0.24);
664
+ translate: var(--ef-flyout-closed-x) 0;
665
+ transition:
666
+ translate var(--ef-overlay-motion-duration) var(--ef-overlay-spatial-easing),
667
+ display var(--ef-overlay-motion-duration) allow-discrete,
668
+ overlay var(--ef-overlay-motion-duration) allow-discrete;
669
+ }
670
+
671
+ .ef-flyout[data-ef-side="left"] {
672
+ --ef-flyout-closed-x: -100%;
673
+ inset-inline-start: 0;
674
+ inset-inline-end: auto;
675
+ margin-inline: 0;
676
+ border-inline-start: 0;
677
+ }
678
+
679
+ .ef-flyout[data-ef-side="right"] {
680
+ --ef-flyout-closed-x: 100%;
681
+ inset-inline-start: auto;
682
+ inset-inline-end: 0;
683
+ margin-inline: 0;
684
+ border-inline-end: 0;
685
+ }
686
+
687
+ .ef-flyout[open] { translate: 0 0; }
688
+
689
+ .ef-flyout__surface {
690
+ min-block-size: 0;
691
+ block-size: 100%;
692
+ display: grid;
693
+ grid-template-rows: auto minmax(0, 1fr) auto;
694
+ }
695
+
696
+ .ef-flyout__header,
697
+ .ef-flyout__actions {
698
+ min-inline-size: 0;
699
+ display: flex;
700
+ align-items: center;
701
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
702
+ padding-inline: var(--ef-primitive-spacing-4, 1rem);
703
+ }
704
+
705
+ .ef-flyout__header {
706
+ justify-content: space-between;
707
+ padding-block-start: max(var(--ef-primitive-spacing-4, 1rem), env(safe-area-inset-top));
708
+ padding-block-end: var(--ef-primitive-spacing-4, 1rem);
709
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
710
+ }
711
+
712
+ .ef-flyout__header > * { min-inline-size: 0; }
713
+ .ef-flyout__header h2 { margin-block: 0; }
714
+
715
+ .ef-flyout__close {
716
+ flex: 0 0 auto;
717
+ min-inline-size: 2.75rem;
718
+ min-block-size: 2.75rem;
719
+ }
720
+
721
+ .ef-flyout__body {
722
+ min-block-size: 0;
723
+ overflow: auto;
724
+ overscroll-behavior: contain;
725
+ padding: var(--ef-primitive-spacing-4, 1rem);
726
+ }
727
+
728
+ .ef-flyout__actions {
729
+ flex-wrap: wrap;
730
+ justify-content: flex-end;
731
+ padding-block-start: var(--ef-primitive-spacing-4, 1rem);
732
+ padding-block-end: max(var(--ef-primitive-spacing-4, 1rem), env(safe-area-inset-bottom));
733
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
734
+ }
735
+
736
+ @starting-style {
737
+ .ef-dialog[open] {
738
+ translate: 0 0.75rem;
739
+ scale: 0.985;
740
+ }
741
+
742
+ .ef-flyout[open] {
743
+ translate: var(--ef-flyout-closed-x) 0;
744
+ }
745
+
746
+ :where(.ef-dialog, .ef-flyout)[open]::backdrop {
747
+ background: rgb(23 26 24 / 0);
748
+ backdrop-filter: blur(0);
749
+ }
750
+ }
751
+
752
+ @media (prefers-reduced-motion: reduce) {
753
+ .ef-dialog,
754
+ .ef-dialog[open],
755
+ .ef-flyout,
756
+ .ef-flyout[open] {
757
+ translate: 0 0;
758
+ scale: 1;
759
+ }
760
+
761
+ .ef-dialog::backdrop,
762
+ .ef-dialog[open]::backdrop,
763
+ .ef-flyout::backdrop,
764
+ .ef-flyout[open]::backdrop {
765
+ backdrop-filter: none;
766
+ }
767
+ }
768
+
769
+
770
+ /* Shared operational components --------------------------------------- */
771
+ .ef-visually-hidden {
772
+ position: absolute !important;
773
+ inline-size: 1px !important;
774
+ block-size: 1px !important;
775
+ padding: 0 !important;
776
+ margin: -1px !important;
777
+ overflow: hidden !important;
778
+ clip: rect(0 0 0 0) !important;
779
+ white-space: nowrap !important;
780
+ border: 0 !important;
781
+ }
782
+
783
+ .ef-component-kicker {
784
+ color: var(--ef-color-accent-secondary, #47756b);
785
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
786
+ font-size: 0.6875rem;
787
+ letter-spacing: 0.08em;
788
+ text-transform: uppercase;
789
+ }
790
+
791
+ .ef-status-lozenge-set,
792
+ .ef-operation-status__actions,
793
+ .ef-wizard__actions,
794
+ .ef-date-range__presets,
795
+ .ef-preview-surface__controls,
796
+ .ef-preview-surface__footer {
797
+ display: flex;
798
+ flex-wrap: wrap;
799
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
800
+ align-items: center;
801
+ }
802
+
803
+ .ef-status-lozenge {
804
+ display: inline-flex;
805
+ align-items: center;
806
+ gap: 0.35rem;
807
+ min-block-size: 1.75rem;
808
+ padding: 0.2rem 0.55rem;
809
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
810
+ background: var(--ef-color-surface-primary, #f2efe7);
811
+ color: var(--ef-color-text-primary, #171a18);
812
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
813
+ font-size: 0.6875rem;
814
+ line-height: 1.2;
815
+ white-space: nowrap;
816
+ }
817
+
818
+ .ef-status-lozenge::before {
819
+ content: "•";
820
+ font-size: 1rem;
821
+ line-height: 0;
822
+ }
823
+
824
+ .ef-status-lozenge[data-state="ok"]::before { content: "✓"; }
825
+ .ef-status-lozenge[data-state="attention"]::before { content: "!"; }
826
+ .ef-status-lozenge[data-state="unknown"]::before { content: "?"; }
827
+ .ef-status-lozenge[data-state="blocked"]::before { content: "×"; }
828
+
829
+ /* Search and collection controls -------------------------------------- */
830
+ .ef-search {
831
+ display: grid;
832
+ gap: 0.4rem;
833
+ }
834
+
835
+ .ef-search__label {
836
+ color: var(--ef-color-text-primary, #171a18);
837
+ font-size: 0.8125rem;
838
+ font-weight: 650;
839
+ }
840
+
841
+ .ef-search__control {
842
+ display: grid;
843
+ grid-template-columns: minmax(0, 1fr) auto;
844
+ }
845
+
846
+ .ef-search__control input { border-inline-end: 0; }
847
+ .ef-search__clear { min-inline-size: 4.5rem; }
848
+ .ef-search__status,
849
+ .ef-combobox__help {
850
+ margin: 0;
851
+ color: var(--ef-color-text-secondary, #686d68);
852
+ font-size: 0.75rem;
853
+ }
854
+
855
+ .ef-collection-toolbar {
856
+ display: grid;
857
+ grid-template-columns: minmax(14rem, 1.6fr) minmax(0, 2fr) auto;
858
+ gap: 1rem;
859
+ align-items: end;
860
+ padding-block: 0.75rem;
861
+ border-block: 1px solid var(--ef-color-border-functional, #3a403c);
862
+ }
863
+
864
+ .ef-collection-toolbar__controls {
865
+ display: flex;
866
+ flex-wrap: wrap;
867
+ gap: 0.75rem;
868
+ align-items: end;
869
+ }
870
+
871
+ .ef-collection-toolbar__controls label,
872
+ .ef-collection-toolbar__filters {
873
+ min-inline-size: 9rem;
874
+ font-size: 0.75rem;
875
+ font-weight: 650;
876
+ }
877
+
878
+ .ef-collection-toolbar__filters > summary {
879
+ min-block-size: 2.75rem;
880
+ display: flex;
881
+ align-items: center;
882
+ gap: 0.5rem;
883
+ padding: 0.65rem 0.75rem;
884
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
885
+ cursor: pointer;
886
+ }
887
+
888
+ .ef-collection-toolbar__filter-panel {
889
+ position: absolute;
890
+ z-index: 3;
891
+ display: grid;
892
+ gap: 0.75rem;
893
+ min-inline-size: min(20rem, calc(100vw - 2rem));
894
+ padding: 1rem;
895
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
896
+ background: var(--ef-color-surface-primary, #f2efe7);
897
+ box-shadow: 0 0.75rem 2rem rgb(0 0 0 / 0.14);
898
+ }
899
+
900
+ .ef-collection-toolbar__count {
901
+ margin: 0 0 0.75rem;
902
+ color: var(--ef-color-text-secondary, #686d68);
903
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
904
+ font-size: 0.75rem;
905
+ white-space: nowrap;
906
+ }
907
+
908
+ /* Data grid ----------------------------------------------------------- */
909
+ .ef-data-grid {
910
+ max-inline-size: 100%;
911
+ overflow-x: auto;
912
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
913
+ background: var(--ef-color-surface-primary, #f2efe7);
914
+ }
915
+
916
+ .ef-data-grid table {
917
+ inline-size: 100%;
918
+ border-collapse: collapse;
919
+ min-inline-size: 42rem;
920
+ }
921
+
922
+ .ef-data-grid th,
923
+ .ef-data-grid td {
924
+ padding: 0.75rem;
925
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
926
+ text-align: start;
927
+ vertical-align: middle;
928
+ }
929
+
930
+ .ef-data-grid th {
931
+ background: var(--ef-color-surface-secondary, #e3e0d7);
932
+ color: var(--ef-color-text-primary, #171a18);
933
+ font-size: 0.75rem;
934
+ }
935
+
936
+ .ef-data-grid th button {
937
+ min-block-size: 2.25rem;
938
+ padding: 0;
939
+ border: 0;
940
+ background: transparent;
941
+ }
942
+
943
+ .ef-data-grid th[aria-sort="ascending"] button::after { content: " ↑"; }
944
+ .ef-data-grid th[aria-sort="descending"] button::after { content: " ↓"; }
945
+
946
+ /* Pagination ---------------------------------------------------------- */
947
+ .ef-pagination {
948
+ display: flex;
949
+ flex-wrap: wrap;
950
+ gap: 0.5rem;
951
+ align-items: center;
952
+ }
953
+
954
+ .ef-pagination__pages {
955
+ display: flex;
956
+ gap: 0.25rem;
957
+ margin: 0;
958
+ padding: 0;
959
+ list-style: none;
960
+ }
961
+
962
+ .ef-pagination a {
963
+ min-block-size: 2.75rem;
964
+ min-inline-size: 2.75rem;
965
+ display: grid;
966
+ place-items: center;
967
+ padding: 0.4rem 0.65rem;
968
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
969
+ color: var(--ef-color-text-primary, #171a18);
970
+ text-decoration: none;
971
+ }
972
+
973
+ .ef-pagination a[aria-current="page"] {
974
+ background: var(--ef-color-surface-inverse, #202421);
975
+ color: var(--ef-color-text-inverse, #f2efe7);
976
+ }
977
+
978
+ .ef-pagination__summary {
979
+ color: var(--ef-color-text-secondary, #686d68);
980
+ font-size: 0.75rem;
981
+ }
982
+
983
+ /* Tabs ---------------------------------------------------------------- */
984
+ .ef-tabs {
985
+ min-inline-size: 0;
986
+ }
987
+
988
+ .ef-tabs__list {
989
+ display: flex;
990
+ max-inline-size: 100%;
991
+ overflow-x: auto;
992
+ border-block-end: 1px solid var(--ef-color-border-functional, #3a403c);
993
+ scrollbar-width: thin;
994
+ }
995
+
996
+ .ef-tabs__list [role="tab"] {
997
+ position: relative;
998
+ flex: 0 0 auto;
999
+ min-block-size: 2.75rem;
1000
+ border: 0;
1001
+ background: transparent;
1002
+ translate: 0 0.08rem;
1003
+ transition:
1004
+ background var(--ef-motion-state-duration) var(--ef-motion-damped-easing),
1005
+ translate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing);
1006
+ }
1007
+
1008
+ .ef-tabs__list [role="tab"]::after {
1009
+ content: "";
1010
+ position: absolute;
1011
+ inset-inline: 0.6rem;
1012
+ inset-block-end: 0;
1013
+ block-size: 3px;
1014
+ background: var(--ef-color-accent-primary, #905831);
1015
+ scale: 0 1;
1016
+ transition: scale var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing);
1017
+ }
1018
+
1019
+ .ef-tabs__list [aria-selected="true"] {
1020
+ background: var(--ef-color-surface-secondary, #e3e0d7);
1021
+ translate: 0 0;
1022
+ }
1023
+
1024
+ .ef-tabs__list [aria-selected="true"]::after { scale: 1 1; }
1025
+
1026
+ .ef-tabs__panel { padding-block: 1.25rem; }
1027
+
1028
+ .ef-tabs__panel[data-ef-motion-entry] {
1029
+ opacity: 1;
1030
+ translate: 0 0;
1031
+ transition:
1032
+ opacity var(--ef-motion-state-duration) linear,
1033
+ translate var(--ef-motion-inertia-duration) var(--ef-motion-damped-easing);
1034
+ }
1035
+
1036
+ @starting-style {
1037
+ .ef-tabs__panel[data-ef-motion-entry] {
1038
+ opacity: 0;
1039
+ translate: 0 0.25rem;
1040
+ }
1041
+ }
1042
+
1043
+ /* Timeline ------------------------------------------------------------ */
1044
+ .ef-timeline {
1045
+ margin: 0;
1046
+ padding: 0;
1047
+ list-style: none;
1048
+ }
1049
+
1050
+ .ef-timeline__item {
1051
+ position: relative;
1052
+ display: grid;
1053
+ grid-template-columns: 1.25rem minmax(0, 1fr);
1054
+ gap: 1rem;
1055
+ padding-block: 0 1.75rem;
1056
+ }
1057
+
1058
+ .ef-timeline__item:not(:last-child)::before {
1059
+ content: "";
1060
+ position: absolute;
1061
+ inset-inline-start: 0.5625rem;
1062
+ inset-block: 1rem 0;
1063
+ border-inline-start: 1px solid var(--ef-color-border-functional, #3a403c);
1064
+ }
1065
+
1066
+ .ef-timeline__marker {
1067
+ z-index: 1;
1068
+ inline-size: 1.125rem;
1069
+ block-size: 1.125rem;
1070
+ margin-block-start: 0.2rem;
1071
+ border: 2px solid var(--ef-color-border-functional, #3a403c);
1072
+ border-radius: 50%;
1073
+ background: var(--ef-color-surface-primary, #f2efe7);
1074
+ }
1075
+
1076
+ .ef-timeline__content {
1077
+ min-inline-size: 0;
1078
+ padding: 1rem;
1079
+ border: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1080
+ }
1081
+
1082
+ .ef-timeline__content h3,
1083
+ .ef-timeline__content p { margin-block: 0.25rem 0.5rem; }
1084
+
1085
+ .ef-timeline__meta {
1086
+ display: flex;
1087
+ flex-wrap: wrap;
1088
+ justify-content: space-between;
1089
+ gap: 0.5rem;
1090
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1091
+ font-size: 0.6875rem;
1092
+ }
1093
+
1094
+ /* Diff and conflict --------------------------------------------------- */
1095
+ .ef-diff-viewer {
1096
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1097
+ }
1098
+
1099
+ .ef-diff-viewer__header,
1100
+ .ef-conflict-review__header,
1101
+ .ef-record-header,
1102
+ .ef-work-queue__header,
1103
+ .ef-preview-surface__header {
1104
+ padding: 1rem;
1105
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1106
+ }
1107
+
1108
+ .ef-diff-viewer__header h3,
1109
+ .ef-conflict-review__header h3,
1110
+ .ef-work-queue__header h3,
1111
+ .ef-preview-surface__header h3 { margin: 0.3rem 0; }
1112
+
1113
+ .ef-diff-viewer__grid {
1114
+ display: grid;
1115
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1116
+ }
1117
+
1118
+ .ef-diff-viewer__side {
1119
+ min-inline-size: 0;
1120
+ padding: 1rem;
1121
+ }
1122
+
1123
+ .ef-diff-viewer__side + .ef-diff-viewer__side {
1124
+ border-inline-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1125
+ }
1126
+
1127
+ .ef-diff-viewer dl { margin: 0; }
1128
+ .ef-diff-row {
1129
+ display: grid;
1130
+ grid-template-columns: minmax(7rem, 0.4fr) minmax(0, 1fr);
1131
+ gap: 1rem;
1132
+ padding-block: 0.6rem;
1133
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1134
+ }
1135
+
1136
+ .ef-diff-row[data-change="changed"] {
1137
+ border-inline-start: 0.3rem solid var(--ef-color-accent-primary, #905831);
1138
+ padding-inline-start: 0.6rem;
1139
+ }
1140
+
1141
+ .ef-conflict-review {
1142
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1143
+ }
1144
+
1145
+ .ef-conflict-review > .ef-diff-viewer {
1146
+ border-inline: 0;
1147
+ }
1148
+
1149
+ .ef-conflict-review__actions {
1150
+ display: flex;
1151
+ flex-wrap: wrap;
1152
+ justify-content: flex-end;
1153
+ gap: 0.5rem;
1154
+ padding: 1rem;
1155
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1156
+ }
1157
+
1158
+ /* Metrics and dashboards --------------------------------------------- */
1159
+ .ef-metric-card {
1160
+ display: grid;
1161
+ gap: 0.5rem;
1162
+ min-inline-size: 0;
1163
+ padding: 1.25rem;
1164
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1165
+ background: var(--ef-color-surface-primary, #f2efe7);
1166
+ }
1167
+
1168
+ .ef-metric-card__label {
1169
+ color: var(--ef-color-text-secondary, #686d68);
1170
+ font-size: 0.8125rem;
1171
+ font-weight: 650;
1172
+ }
1173
+
1174
+ .ef-metric-card__value {
1175
+ color: var(--ef-color-text-heading, #202421);
1176
+ font-family: var(--ef-primitive-font-family-display, Georgia, serif);
1177
+ font-size: clamp(2rem, 8vw, 3.5rem);
1178
+ line-height: 1;
1179
+ }
1180
+
1181
+ .ef-dashboard-grid {
1182
+ display: grid;
1183
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1184
+ gap: 1rem;
1185
+ }
1186
+
1187
+ /* Work queue ---------------------------------------------------------- */
1188
+ .ef-work-queue {
1189
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1190
+ }
1191
+
1192
+ .ef-work-queue__header {
1193
+ display: flex;
1194
+ justify-content: space-between;
1195
+ gap: 1rem;
1196
+ align-items: start;
1197
+ }
1198
+
1199
+ .ef-work-queue__list {
1200
+ margin: 0;
1201
+ padding: 0;
1202
+ list-style: none;
1203
+ }
1204
+
1205
+ .ef-work-queue__item {
1206
+ display: grid;
1207
+ grid-template-columns: minmax(0, 1fr) auto;
1208
+ gap: 1rem;
1209
+ align-items: center;
1210
+ padding: 1rem;
1211
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1212
+ }
1213
+
1214
+ .ef-work-queue__item:last-child { border-block-end: 0; }
1215
+ .ef-work-queue__item p { margin: 0.25rem 0 0; }
1216
+
1217
+ /* Feedback ------------------------------------------------------------ */
1218
+ .ef-alert,
1219
+ .ef-operation-status {
1220
+ display: grid;
1221
+ grid-template-columns: auto minmax(0, 1fr) auto;
1222
+ gap: 1rem;
1223
+ align-items: start;
1224
+ padding: 1rem;
1225
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1226
+ border-inline-start: 0.35rem solid var(--ef-color-accent-primary, #905831);
1227
+ background: var(--ef-color-surface-primary, #f2efe7);
1228
+ }
1229
+
1230
+ .ef-alert[data-ef-motion-entry] {
1231
+ translate: 0 0;
1232
+ transition: translate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing);
1233
+ }
1234
+
1235
+ .ef-alert p {
1236
+ color: var(--ef-color-text-primary, #171a18);
1237
+ }
1238
+
1239
+ @starting-style {
1240
+ .ef-alert[data-ef-motion-entry] {
1241
+ translate: 0 -0.5rem;
1242
+ }
1243
+ }
1244
+
1245
+ .ef-toast {
1246
+ position: fixed;
1247
+ inset: auto max(1rem, env(safe-area-inset-right)) max(1rem, env(safe-area-inset-bottom)) auto;
1248
+ max-inline-size: min(26rem, calc(100vw - 2rem));
1249
+ margin: 0;
1250
+ padding: 1rem;
1251
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1252
+ border-inline-start: 0.35rem solid var(--ef-color-accent-primary, #905831);
1253
+ background: var(--ef-color-surface-primary, #f2efe7);
1254
+ color: var(--ef-color-text-primary, #171a18);
1255
+ box-shadow: 0 1rem 3rem rgb(0 0 0 / 0.18);
1256
+ opacity: 0;
1257
+ translate: 0 0.65rem;
1258
+ scale: 0.99;
1259
+ transition:
1260
+ opacity var(--ef-motion-exit-duration) linear,
1261
+ translate var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
1262
+ scale var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
1263
+ display var(--ef-motion-exit-duration) allow-discrete,
1264
+ overlay var(--ef-motion-exit-duration) allow-discrete;
1265
+ }
1266
+
1267
+ .ef-toast:popover-open {
1268
+ opacity: 1;
1269
+ translate: 0 0;
1270
+ scale: 1;
1271
+ transition-duration:
1272
+ var(--ef-motion-state-duration),
1273
+ var(--ef-motion-inertia-duration),
1274
+ var(--ef-motion-inertia-duration),
1275
+ var(--ef-motion-inertia-duration),
1276
+ var(--ef-motion-inertia-duration);
1277
+ }
1278
+
1279
+ @starting-style {
1280
+ .ef-toast:popover-open {
1281
+ opacity: 0;
1282
+ translate: 0 0.65rem;
1283
+ scale: 0.99;
1284
+ }
1285
+ }
1286
+
1287
+ .ef-toast__header {
1288
+ display: flex;
1289
+ justify-content: space-between;
1290
+ gap: 1rem;
1291
+ align-items: start;
1292
+ }
1293
+
1294
+ .ef-toast__title { margin: 0; }
1295
+ .ef-toast p { margin-block: 0.35rem 0; }
1296
+
1297
+ .ef-alert__icon,
1298
+ .ef-operation-status__symbol,
1299
+ .ef-empty-state__symbol {
1300
+ display: grid;
1301
+ place-items: center;
1302
+ inline-size: 2rem;
1303
+ block-size: 2rem;
1304
+ border: 1px solid currentColor;
1305
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1306
+ font-weight: 700;
1307
+ }
1308
+
1309
+ .ef-alert__title,
1310
+ .ef-operation-status h3 { margin: 0 0 0.25rem; }
1311
+
1312
+ .ef-empty-state {
1313
+ display: grid;
1314
+ justify-items: center;
1315
+ gap: 0.75rem;
1316
+ padding: clamp(2rem, 8vw, 5rem) 1.25rem;
1317
+ border: 1px dashed var(--ef-color-border-functional, #3a403c);
1318
+ text-align: center;
1319
+ }
1320
+
1321
+ .ef-empty-state h3,
1322
+ .ef-empty-state p { margin: 0; }
1323
+
1324
+ .ef-skeleton {
1325
+ display: grid;
1326
+ gap: 0.75rem;
1327
+ padding: 1rem;
1328
+ border: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1329
+ }
1330
+
1331
+ .ef-skeleton__line {
1332
+ block-size: 0.9rem;
1333
+ inline-size: 100%;
1334
+ background: linear-gradient(90deg,
1335
+ var(--ef-color-surface-secondary, #e3e0d7),
1336
+ color-mix(in srgb, var(--ef-color-surface-secondary, #e3e0d7) 55%, var(--ef-color-surface-primary, #f2efe7)),
1337
+ var(--ef-color-surface-secondary, #e3e0d7));
1338
+ background-size: 200% 100%;
1339
+ animation: ef-skeleton-shift 1.6s linear infinite;
1340
+ }
1341
+
1342
+ .ef-skeleton__line--title { inline-size: 55%; block-size: 1.4rem; }
1343
+ .ef-skeleton__line--short { inline-size: 72%; }
1344
+
1345
+ @keyframes ef-skeleton-shift {
1346
+ to { background-position: -200% 0; }
1347
+ }
1348
+
1349
+ /* Wizard and checklist ------------------------------------------------ */
1350
+ .ef-wizard,
1351
+ .ef-readiness-checklist {
1352
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1353
+ }
1354
+
1355
+ .ef-wizard__header,
1356
+ .ef-wizard__actions,
1357
+ .ef-readiness-checklist > header {
1358
+ padding: 1rem;
1359
+ }
1360
+
1361
+ .ef-wizard__header {
1362
+ display: grid;
1363
+ grid-template-columns: minmax(0, 1fr) minmax(10rem, 0.4fr);
1364
+ gap: 1rem;
1365
+ align-items: center;
1366
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1367
+ }
1368
+
1369
+ .ef-wizard__position {
1370
+ color: var(--ef-color-text-secondary, #686d68);
1371
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1372
+ font-size: 0.75rem;
1373
+ }
1374
+
1375
+ .ef-wizard__header h3 { margin: 0.25rem 0 0; }
1376
+ .ef-wizard__header progress { inline-size: 100%; }
1377
+
1378
+ .ef-wizard__steps {
1379
+ display: grid;
1380
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1381
+ margin: 0;
1382
+ padding: 1rem;
1383
+ list-style: none;
1384
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1385
+ }
1386
+
1387
+ .ef-wizard__steps li {
1388
+ display: flex;
1389
+ gap: 0.5rem;
1390
+ align-items: center;
1391
+ color: var(--ef-color-text-secondary, #686d68);
1392
+ font-size: 0.8125rem;
1393
+ }
1394
+
1395
+ .ef-wizard__steps li > span {
1396
+ display: grid;
1397
+ place-items: center;
1398
+ inline-size: 1.75rem;
1399
+ block-size: 1.75rem;
1400
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1401
+ border-radius: 50%;
1402
+ }
1403
+
1404
+ .ef-wizard__steps [data-state="complete"] > span::after { content: "✓"; position: absolute; }
1405
+ .ef-wizard__steps [data-state="current"] { color: var(--ef-color-text-primary, #171a18); font-weight: 700; }
1406
+ .ef-wizard__steps [data-state="current"] > span { background: var(--ef-color-surface-inverse, #202421); color: var(--ef-color-text-inverse, #f2efe7); }
1407
+ .ef-wizard__body { padding: 1.25rem; }
1408
+ .ef-wizard__actions { justify-content: space-between; border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7); }
1409
+
1410
+ .ef-readiness-checklist > header { border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7); }
1411
+ .ef-readiness-checklist > header h3 { margin: 0.5rem 0 0; }
1412
+ .ef-readiness-checklist__items { margin: 0; padding: 0; list-style: none; }
1413
+ .ef-readiness-checklist__items li {
1414
+ display: grid;
1415
+ grid-template-columns: 2rem minmax(0, 1fr) auto;
1416
+ gap: 0.75rem;
1417
+ align-items: center;
1418
+ min-block-size: 3rem;
1419
+ padding: 0.65rem 1rem;
1420
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1421
+ }
1422
+ .ef-readiness-checklist__items li:last-child { border-block-end: 0; }
1423
+ .ef-readiness-checklist__items [data-state="complete"] > :first-child { font-weight: 800; }
1424
+ .ef-readiness-checklist__items [data-state="blocked"] { border-inline-start: 0.35rem solid var(--ef-color-accent-primary, #905831); }
1425
+
1426
+ /* Command palette ----------------------------------------------------- */
1427
+ .ef-command-palette {
1428
+ inline-size: min(42rem, calc(100vw - 2rem));
1429
+ max-block-size: min(40rem, calc(100dvh - 2rem));
1430
+ margin: auto;
1431
+ padding: 0;
1432
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1433
+ background: var(--ef-color-surface-primary, #f2efe7);
1434
+ color: var(--ef-color-text-primary, #171a18);
1435
+ opacity: 0;
1436
+ translate: 0 0.75rem;
1437
+ scale: 0.985;
1438
+ transition:
1439
+ opacity var(--ef-motion-exit-duration) linear,
1440
+ translate var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
1441
+ scale var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
1442
+ display var(--ef-motion-exit-duration) allow-discrete,
1443
+ overlay var(--ef-motion-exit-duration) allow-discrete;
1444
+ }
1445
+
1446
+ .ef-command-palette[open] {
1447
+ opacity: 1;
1448
+ translate: 0 0;
1449
+ scale: 1;
1450
+ transition-duration:
1451
+ var(--ef-motion-state-duration),
1452
+ var(--ef-motion-inertia-duration),
1453
+ var(--ef-motion-inertia-duration),
1454
+ var(--ef-motion-inertia-duration),
1455
+ var(--ef-motion-inertia-duration);
1456
+ }
1457
+
1458
+ @starting-style {
1459
+ .ef-command-palette[open] {
1460
+ opacity: 0;
1461
+ translate: 0 0.75rem;
1462
+ scale: 0.985;
1463
+ }
1464
+ }
1465
+
1466
+ .ef-command-palette__header {
1467
+ display: flex;
1468
+ justify-content: space-between;
1469
+ align-items: center;
1470
+ padding: 1rem;
1471
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1472
+ }
1473
+
1474
+ .ef-command-palette__header h3 { margin: 0; }
1475
+ .ef-command-palette > input { border-inline: 0; }
1476
+ .ef-command-palette__group { padding: 1rem; }
1477
+ .ef-command-palette__group h4 { margin-block: 0 0.5rem; }
1478
+ .ef-command-palette__group button {
1479
+ inline-size: 100%;
1480
+ display: flex;
1481
+ justify-content: space-between;
1482
+ gap: 1rem;
1483
+ text-align: start;
1484
+ border-inline: 0;
1485
+ border-block-end: 0;
1486
+ }
1487
+ .ef-command-palette__group button:last-child { border-block-end: 1px solid var(--ef-color-border-functional, #3a403c); }
1488
+ .ef-command-palette kbd {
1489
+ padding: 0.1rem 0.35rem;
1490
+ border: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1491
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1492
+ }
1493
+
1494
+ /* Combobox and date range -------------------------------------------- */
1495
+ .ef-combobox,
1496
+ .ef-date-range {
1497
+ display: grid;
1498
+ gap: 0.5rem;
1499
+ }
1500
+
1501
+ .ef-date-range {
1502
+ min-inline-size: 0;
1503
+ inline-size: 100%;
1504
+ max-inline-size: 100%;
1505
+ margin: 0;
1506
+ }
1507
+
1508
+ .ef-combobox > label,
1509
+ .ef-date-range legend {
1510
+ font-size: 0.8125rem;
1511
+ font-weight: 650;
1512
+ }
1513
+
1514
+ .ef-combobox__control { position: relative; }
1515
+ .ef-combobox__indicator {
1516
+ position: absolute;
1517
+ inset-inline-end: 0.8rem;
1518
+ inset-block-start: 50%;
1519
+ translate: 0 -50%;
1520
+ pointer-events: none;
1521
+ }
1522
+
1523
+ .ef-date-range__fields {
1524
+ display: grid;
1525
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
1526
+ gap: 0.75rem;
1527
+ align-items: end;
1528
+ }
1529
+
1530
+ .ef-date-range__fields label {
1531
+ min-inline-size: 0;
1532
+ display: grid;
1533
+ gap: 0.35rem;
1534
+ }
1535
+
1536
+ .ef-date-range__fields input[type="date"] {
1537
+ min-inline-size: 0;
1538
+ inline-size: 100%;
1539
+ max-inline-size: 100%;
1540
+ }
1541
+
1542
+ .ef-date-range__separator { padding-block-end: 0.75rem; }
1543
+
1544
+ /* Upload -------------------------------------------------------------- */
1545
+ .ef-file-upload {
1546
+ display: grid;
1547
+ gap: 1rem;
1548
+ }
1549
+
1550
+ .ef-file-upload__drop {
1551
+ padding: 1.5rem;
1552
+ border: 1px dashed var(--ef-color-border-functional, #3a403c);
1553
+ background: var(--ef-color-surface-secondary, #e3e0d7);
1554
+ }
1555
+
1556
+ .ef-file-upload__drop h3 { margin-block-start: 0; }
1557
+ .ef-file-upload__drop .ef-button { display: inline-flex; align-items: center; cursor: pointer; }
1558
+ .ef-file-upload__drop input[type="file"] {
1559
+ position: absolute;
1560
+ inline-size: 1px;
1561
+ block-size: 1px;
1562
+ opacity: 0;
1563
+ }
1564
+
1565
+ .ef-file-upload__queue {
1566
+ margin: 0;
1567
+ padding: 0;
1568
+ list-style: none;
1569
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1570
+ }
1571
+
1572
+ .ef-file-upload__queue li {
1573
+ display: grid;
1574
+ grid-template-columns: minmax(0, 1fr) minmax(8rem, 0.5fr) auto;
1575
+ gap: 1rem;
1576
+ align-items: center;
1577
+ padding-block: 0.75rem;
1578
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1579
+ }
1580
+
1581
+ .ef-file-upload__queue small { display: block; color: var(--ef-color-text-secondary, #686d68); }
1582
+ .ef-file-upload__queue progress { inline-size: 100%; }
1583
+
1584
+ /* Record header and master/detail ------------------------------------ */
1585
+ .ef-record-header {
1586
+ display: grid;
1587
+ grid-template-columns: minmax(0, 1fr) auto;
1588
+ gap: 2rem;
1589
+ align-items: end;
1590
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1591
+ }
1592
+
1593
+ .ef-record-header__main nav { font-size: 0.75rem; }
1594
+ .ef-record-header__title {
1595
+ display: flex;
1596
+ flex-wrap: wrap;
1597
+ gap: 1rem;
1598
+ align-items: center;
1599
+ margin-block: 0.75rem 0;
1600
+ }
1601
+ .ef-record-header__title h2 { margin: 0.15rem 0 0; }
1602
+ .ef-record-header__type {
1603
+ color: var(--ef-color-accent-secondary, #47756b);
1604
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1605
+ font-size: 0.6875rem;
1606
+ letter-spacing: 0.08em;
1607
+ text-transform: uppercase;
1608
+ }
1609
+ .ef-record-header__main > p { margin: 0; }
1610
+ .ef-record-header__actions { display: flex; flex-wrap: wrap; gap: 0.5rem; }
1611
+ .ef-record-header__actions details { position: relative; }
1612
+ .ef-record-header__actions summary {
1613
+ min-block-size: 2.75rem;
1614
+ display: grid;
1615
+ place-items: center;
1616
+ padding: 0.65rem 1rem;
1617
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1618
+ cursor: pointer;
1619
+ font-weight: 700;
1620
+ }
1621
+ .ef-record-header__menu {
1622
+ position: absolute;
1623
+ z-index: 3;
1624
+ inset-inline-end: 0;
1625
+ min-inline-size: 10rem;
1626
+ padding: 0.5rem;
1627
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1628
+ background: var(--ef-color-surface-primary, #f2efe7);
1629
+ }
1630
+ .ef-record-header__menu button { inline-size: 100%; }
1631
+
1632
+ .ef-master-detail {
1633
+ display: grid;
1634
+ grid-template-columns: minmax(12rem, 0.4fr) minmax(0, 1fr);
1635
+ min-block-size: 22rem;
1636
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1637
+ }
1638
+
1639
+ .ef-master-detail__master {
1640
+ border-inline-end: 1px solid var(--ef-color-border-functional, #3a403c);
1641
+ }
1642
+
1643
+ .ef-master-detail__master a {
1644
+ display: grid;
1645
+ gap: 0.15rem;
1646
+ min-block-size: 3.5rem;
1647
+ padding: 0.75rem;
1648
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1649
+ color: var(--ef-color-text-primary, #171a18);
1650
+ text-decoration: none;
1651
+ }
1652
+
1653
+ .ef-master-detail__master a[aria-current="page"] {
1654
+ border-inline-start: 0.35rem solid var(--ef-color-accent-primary, #905831);
1655
+ background: var(--ef-color-surface-secondary, #e3e0d7);
1656
+ }
1657
+
1658
+ .ef-master-detail__master span { color: var(--ef-color-text-secondary, #686d68); font-size: 0.75rem; }
1659
+ .ef-master-detail__detail { padding: 1.25rem; min-inline-size: 0; }
1660
+
1661
+ .ef-key-value-list { margin: 1rem 0 0; }
1662
+ .ef-key-value-list > div {
1663
+ display: grid;
1664
+ grid-template-columns: minmax(7rem, 0.35fr) minmax(0, 1fr);
1665
+ gap: 1rem;
1666
+ padding-block: 0.5rem;
1667
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1668
+ }
1669
+
1670
+ /* Provenance and preview --------------------------------------------- */
1671
+ .ef-provenance-trail {
1672
+ padding: 1rem;
1673
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1674
+ }
1675
+
1676
+ .ef-provenance-trail h3 { margin-block-start: 0; }
1677
+ .ef-provenance-trail ol { margin: 0; padding: 0; list-style: none; }
1678
+ .ef-provenance-trail li {
1679
+ position: relative;
1680
+ display: grid;
1681
+ gap: 0.2rem;
1682
+ padding: 0.75rem 0 0.75rem 2rem;
1683
+ }
1684
+ .ef-provenance-trail li::before {
1685
+ content: "";
1686
+ position: absolute;
1687
+ inset-inline-start: 0.45rem;
1688
+ inset-block-start: 1.15rem;
1689
+ inline-size: 0.7rem;
1690
+ block-size: 0.7rem;
1691
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1692
+ background: var(--ef-color-surface-primary, #f2efe7);
1693
+ rotate: 45deg;
1694
+ }
1695
+ .ef-provenance-trail li:not(:last-child)::after {
1696
+ content: "";
1697
+ position: absolute;
1698
+ inset-inline-start: 0.78rem;
1699
+ inset-block: 1.85rem -0.2rem;
1700
+ border-inline-start: 1px solid var(--ef-color-border-functional, #3a403c);
1701
+ }
1702
+ .ef-provenance-trail__kind,
1703
+ .ef-provenance-trail small {
1704
+ color: var(--ef-color-text-secondary, #686d68);
1705
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1706
+ font-size: 0.6875rem;
1707
+ }
1708
+
1709
+ .ef-preview-surface {
1710
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1711
+ }
1712
+ .ef-preview-surface__header {
1713
+ display: flex;
1714
+ justify-content: space-between;
1715
+ gap: 1rem;
1716
+ align-items: center;
1717
+ }
1718
+ .ef-preview-surface__canvas {
1719
+ padding: clamp(1rem, 4vw, 3rem);
1720
+ background: var(--ef-color-surface-secondary, #e3e0d7);
1721
+ }
1722
+ .ef-preview-surface__canvas > article {
1723
+ max-inline-size: 42rem;
1724
+ margin-inline: auto;
1725
+ padding: clamp(1rem, 4vw, 2.5rem);
1726
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1727
+ background: var(--ef-color-surface-primary, #f2efe7);
1728
+ }
1729
+ .ef-preview-surface__footer {
1730
+ justify-content: space-between;
1731
+ padding: 1rem;
1732
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1733
+ }
1734
+
1735
+ /* Mobile action bar --------------------------------------------------- */
1736
+ .ef-mobile-action-bar {
1737
+ display: flex;
1738
+ gap: 0.5rem;
1739
+ padding: 0.75rem;
1740
+ padding-block-end: max(0.75rem, env(safe-area-inset-bottom));
1741
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1742
+ background: color-mix(in srgb, var(--ef-color-surface-primary, #f2efe7) 94%, transparent);
1743
+ backdrop-filter: blur(10px);
1744
+ }
1745
+
1746
+ .ef-mobile-action-bar > * { flex: 1 1 0; }
1747
+ .ef-mobile-action-bar__primary {
1748
+ background: var(--ef-color-surface-inverse, #202421);
1749
+ color: var(--ef-color-text-inverse, #f2efe7);
1750
+ }
1751
+
1752
+ /* Mobile recomposition ------------------------------------------------ */
1753
+ @media (max-width: 40rem) {
1754
+ .ef-collection-toolbar {
1755
+ grid-template-columns: 1fr auto;
1756
+ align-items: start;
1757
+ }
1758
+ .ef-collection-toolbar__search { grid-column: 1 / -1; }
1759
+ .ef-collection-toolbar__controls { grid-column: 1 / -1; }
1760
+ .ef-collection-toolbar__controls > * { flex: 1 1 9rem; }
1761
+ .ef-collection-toolbar__filters { position: static; }
1762
+ .ef-collection-toolbar__filter-panel {
1763
+ position: static;
1764
+ min-inline-size: 0;
1765
+ inline-size: 100%;
1766
+ max-inline-size: 100%;
1767
+ margin-block-start: 0.5rem;
1768
+ box-shadow: none;
1769
+ }
1770
+ .ef-collection-toolbar__count { margin: 0; align-self: center; }
1771
+
1772
+ .ef-dashboard-grid { grid-template-columns: 1fr; }
1773
+
1774
+ .ef-work-queue__item,
1775
+ .ef-alert,
1776
+ .ef-operation-status,
1777
+ .ef-record-header,
1778
+ .ef-file-upload__queue li {
1779
+ grid-template-columns: 1fr;
1780
+ }
1781
+
1782
+ .ef-work-queue__item button,
1783
+ .ef-alert > button,
1784
+ .ef-operation-status__actions button,
1785
+ .ef-record-header__actions > *,
1786
+ .ef-file-upload__queue button {
1787
+ inline-size: 100%;
1788
+ }
1789
+
1790
+ .ef-diff-viewer__grid { grid-template-columns: 1fr; }
1791
+ .ef-diff-viewer__side + .ef-diff-viewer__side {
1792
+ border-inline-start: 0;
1793
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1794
+ }
1795
+
1796
+ .ef-wizard__header { grid-template-columns: 1fr; }
1797
+ .ef-wizard__steps li:not([data-state="current"]) { display: none; }
1798
+ .ef-wizard__steps { grid-template-columns: 1fr; }
1799
+ .ef-wizard__steps [data-state="current"]::after {
1800
+ content: "Current step";
1801
+ margin-inline-start: auto;
1802
+ color: var(--ef-color-text-secondary, #686d68);
1803
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1804
+ font-size: 0.6875rem;
1805
+ font-weight: 400;
1806
+ }
1807
+
1808
+ .ef-readiness-checklist__items li { grid-template-columns: 2rem minmax(0, 1fr); }
1809
+ .ef-readiness-checklist__items li > :last-child:not(:nth-child(2)) { grid-column: 2; justify-self: start; }
1810
+
1811
+ .ef-date-range__fields { grid-template-columns: 1fr; }
1812
+ .ef-date-range__separator { display: none; }
1813
+
1814
+ .ef-command-palette {
1815
+ inline-size: 100vw;
1816
+ block-size: 100dvh;
1817
+ max-block-size: 100dvh;
1818
+ border: 0;
1819
+ }
1820
+
1821
+ .ef-master-detail { grid-template-columns: 1fr; }
1822
+ .ef-master-detail__master {
1823
+ display: flex;
1824
+ max-inline-size: 100%;
1825
+ overflow-x: auto;
1826
+ border-inline-end: 0;
1827
+ border-block-end: 1px solid var(--ef-color-border-functional, #3a403c);
1828
+ }
1829
+ .ef-master-detail__master a { flex: 0 0 12rem; }
1830
+
1831
+ .ef-preview-surface__header,
1832
+ .ef-preview-surface__footer { align-items: stretch; flex-direction: column; }
1833
+
1834
+ .ef-pagination {
1835
+ justify-content: space-between;
1836
+ }
1837
+ .ef-pagination__pages li:not(:has([aria-current="page"])) { display: none; }
1838
+ .ef-pagination__summary { order: 4; inline-size: 100%; text-align: center; }
1839
+
1840
+ .ef-mobile-action-bar {
1841
+ position: sticky;
1842
+ inset-block-end: 0;
1843
+ z-index: 8;
1844
+ }
1845
+ }
1846
+
1847
+ @media (max-width: 30rem) {
1848
+ .ef-data-grid { overflow: visible; border: 0; }
1849
+ .ef-data-grid table,
1850
+ .ef-data-grid tbody,
1851
+ .ef-data-grid tr,
1852
+ .ef-data-grid td { display: block; min-inline-size: 0; inline-size: 100%; }
1853
+ .ef-data-grid thead { display: none; }
1854
+ .ef-data-grid tr {
1855
+ margin-block-end: 0.75rem;
1856
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1857
+ }
1858
+ .ef-data-grid td {
1859
+ display: grid;
1860
+ grid-template-columns: minmax(6.5rem, 0.4fr) minmax(0, 1fr);
1861
+ gap: 0.75rem;
1862
+ padding: 0.65rem;
1863
+ }
1864
+ .ef-data-grid td::before {
1865
+ content: attr(data-label);
1866
+ color: var(--ef-color-text-secondary, #686d68);
1867
+ font-size: 0.75rem;
1868
+ font-weight: 650;
1869
+ }
1870
+ .ef-data-grid td[data-label="Actions"] > * { inline-size: 100%; }
1871
+
1872
+ .ef-search__control { grid-template-columns: 1fr; }
1873
+ .ef-search__control input { border-inline-end: 1px solid var(--ef-color-border-functional, #3a403c); border-block-end: 0; }
1874
+
1875
+ .ef-work-queue__header { display: grid; }
1876
+ .ef-diff-row,
1877
+ .ef-key-value-list > div { grid-template-columns: 1fr; gap: 0.25rem; }
1878
+
1879
+ .ef-status-lozenge-set { align-items: stretch; }
1880
+ .ef-status-lozenge-set .ef-status-lozenge { flex: 1 1 100%; justify-content: center; }
1881
+ }
1882
+
1883
+ @media (max-width: 44rem) {
1884
+ .ef-segmented {
1885
+ inline-size: 100%;
1886
+ }
1887
+
1888
+ .ef-segment {
1889
+ flex: 1 1 min(10rem, 100%);
1890
+ }
1891
+
1892
+ .ef-popover,
1893
+ .ef-menu {
1894
+ max-inline-size: calc(100vw - 1rem);
1895
+ max-block-size: calc(100dvh - 1rem);
1896
+ }
1897
+
1898
+ .ef-dialog {
1899
+ inline-size: calc(100vw - 1rem);
1900
+ max-block-size: calc(100dvh - 1rem);
1901
+ }
1902
+
1903
+ .ef-dialog__body {
1904
+ padding: var(--ef-primitive-spacing-4, 1rem);
1905
+ }
1906
+
1907
+ .ef-dialog__actions {
1908
+ justify-content: stretch;
1909
+ padding: 0.75rem var(--ef-primitive-spacing-4, 1rem);
1910
+ }
1911
+
1912
+ .ef-dialog__actions > :where(button, .ef-button) {
1913
+ flex: 1 1 100%;
1914
+ }
1915
+ }
1916
+
1917
+ @media (prefers-reduced-motion: reduce) {
1918
+ .ef-switch__track,
1919
+ .ef-switch__track::after,
1920
+ .ef-slider__input,
1921
+ .ef-segment,
1922
+ .ef-disclosure > summary::after,
1923
+ .ef-disclosure__content,
1924
+ .ef-popover,
1925
+ .ef-menu,
1926
+ .ef-dialog,
1927
+ .ef-flyout,
1928
+ .ef-tabs__list [role="tab"],
1929
+ .ef-tabs__list [role="tab"]::after,
1930
+ .ef-tabs__panel[data-ef-motion-entry],
1931
+ .ef-alert[data-ef-motion-entry],
1932
+ .ef-toast,
1933
+ .ef-command-palette {
1934
+ transition-duration: 0.01ms;
1935
+ }
1936
+ }
1937
+
1938
+ @media (forced-colors: active) {
1939
+ .ef-switch__track,
1940
+ .ef-segmented,
1941
+ .ef-popover,
1942
+ .ef-menu,
1943
+ .ef-dialog,
1944
+ .ef-flyout,
1945
+ .ef-toast {
1946
+ border-color: CanvasText;
1947
+ }
1948
+
1949
+ .ef-switch__track { background: Canvas; }
1950
+ .ef-switch__track::after { background: Canvas; border-color: CanvasText; box-shadow: none; }
1951
+ .ef-switch__input:checked + .ef-switch__track { background: Highlight; }
1952
+ .ef-switch__input:checked + .ef-switch__track::after { background: HighlightText; }
1953
+ .ef-segment:has(input:checked) { background: Highlight; color: HighlightText; }
1954
+ }
1955
+
1956
+ /* Agent and natural-language interaction ------------------------------- */
1957
+ .ef-composer {
1958
+ display: grid;
1959
+ gap: 1rem;
1960
+ min-inline-size: 0;
1961
+ padding: clamp(1rem, 3vw, 1.5rem);
1962
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1963
+ background: var(--ef-color-surface-primary, #f2efe7);
1964
+ }
1965
+
1966
+ .ef-composer__context { display: grid; gap: 0.35rem; }
1967
+ .ef-composer__context h2,
1968
+ .ef-conversation__header h2,
1969
+ .ef-understanding__header h2 { margin: 0; }
1970
+ .ef-composer__context p,
1971
+ .ef-understanding__header p { margin: 0; color: var(--ef-color-text-secondary, #686d68); }
1972
+
1973
+ .ef-composer__field { display: grid; }
1974
+ .ef-composer__field textarea {
1975
+ inline-size: 100%;
1976
+ min-block-size: 8rem;
1977
+ resize: vertical;
1978
+ }
1979
+
1980
+ .ef-composer__actions {
1981
+ display: flex;
1982
+ justify-content: space-between;
1983
+ align-items: center;
1984
+ gap: 0.75rem;
1985
+ }
1986
+
1987
+ .ef-composer__input-actions,
1988
+ .ef-turn__actions {
1989
+ display: flex;
1990
+ flex-wrap: wrap;
1991
+ gap: 0.5rem;
1992
+ }
1993
+
1994
+ .ef-composer__submit {
1995
+ background: var(--ef-color-surface-inverse, #202421);
1996
+ color: var(--ef-color-text-inverse, #f2efe7);
1997
+ }
1998
+
1999
+ .ef-composer__status {
2000
+ margin: 0;
2001
+ color: var(--ef-color-text-secondary, #686d68);
2002
+ font-size: 0.75rem;
2003
+ }
2004
+
2005
+ .ef-conversation {
2006
+ min-inline-size: 0;
2007
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2008
+ }
2009
+
2010
+ .ef-conversation__header {
2011
+ padding: 1rem;
2012
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2013
+ }
2014
+
2015
+ .ef-conversation__turns {
2016
+ display: grid;
2017
+ gap: 0;
2018
+ margin: 0;
2019
+ padding: 0;
2020
+ list-style: none;
2021
+ }
2022
+
2023
+ .ef-turn {
2024
+ display: grid;
2025
+ grid-template-columns: minmax(6rem, 0.22fr) minmax(0, 1fr);
2026
+ gap: 0.75rem 1rem;
2027
+ padding: 1rem;
2028
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2029
+ }
2030
+
2031
+ .ef-turn[data-ef-speaker="assistant"] {
2032
+ background: var(--ef-color-surface-secondary, #e3e0d7);
2033
+ }
2034
+
2035
+ .ef-turn__speaker {
2036
+ margin: 0;
2037
+ color: var(--ef-color-text-secondary, #686d68);
2038
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2039
+ font-size: 0.6875rem;
2040
+ font-weight: 800;
2041
+ letter-spacing: 0.04em;
2042
+ text-transform: uppercase;
2043
+ }
2044
+
2045
+ .ef-turn__content { min-inline-size: 0; }
2046
+ .ef-turn__content > :first-child { margin-block-start: 0; }
2047
+ .ef-turn__content > :last-child { margin-block-end: 0; }
2048
+ .ef-turn__actions { grid-column: 2; }
2049
+
2050
+ .ef-understanding {
2051
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2052
+ }
2053
+
2054
+ .ef-understanding__header {
2055
+ display: flex;
2056
+ justify-content: space-between;
2057
+ align-items: start;
2058
+ gap: 1rem;
2059
+ padding: 1rem;
2060
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2061
+ }
2062
+
2063
+ .ef-understanding__items {
2064
+ margin: 0;
2065
+ padding: 0;
2066
+ list-style: none;
2067
+ }
2068
+
2069
+ .ef-understanding__item {
2070
+ display: grid;
2071
+ grid-template-columns: minmax(6rem, auto) minmax(0, 1fr) auto;
2072
+ align-items: center;
2073
+ gap: 1rem;
2074
+ padding: 1rem;
2075
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2076
+ }
2077
+
2078
+ .ef-understanding__item[data-ef-state="unknown"],
2079
+ .ef-understanding__item[data-ef-state="conflict"] {
2080
+ border-inline-start: 0.3rem solid var(--ef-color-accent-primary, #905831);
2081
+ padding-inline-start: 0.7rem;
2082
+ }
2083
+
2084
+ .ef-understanding__state {
2085
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2086
+ font-size: 0.6875rem;
2087
+ font-weight: 800;
2088
+ letter-spacing: 0.04em;
2089
+ text-transform: uppercase;
2090
+ }
2091
+
2092
+ .ef-understanding__item[data-ef-state="accepted"] .ef-understanding__state::before { content: "✓ "; }
2093
+ .ef-understanding__item[data-ef-state="unknown"] .ef-understanding__state::before { content: "? "; }
2094
+ .ef-understanding__item[data-ef-state="conflict"] .ef-understanding__state::before { content: "! "; }
2095
+ .ef-understanding__item p { margin: 0.2rem 0 0; color: var(--ef-color-text-secondary, #686d68); }
2096
+
2097
+ @media (max-width: 40rem) {
2098
+ .ef-composer__actions,
2099
+ .ef-understanding__header { align-items: stretch; flex-direction: column; }
2100
+
2101
+ .ef-composer__input-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
2102
+ .ef-composer__actions button { min-block-size: 2.75rem; }
2103
+ .ef-composer__submit { inline-size: 100%; }
2104
+
2105
+ .ef-turn { grid-template-columns: 1fr; }
2106
+ .ef-turn__actions { grid-column: 1; }
2107
+ .ef-turn__actions button { inline-size: 100%; }
2108
+
2109
+ .ef-understanding__item { grid-template-columns: 1fr; align-items: stretch; }
2110
+ .ef-understanding__item button { inline-size: 100%; }
2111
+ }
2112
+
2113
+ @media (forced-colors: active) {
2114
+ .ef-composer,
2115
+ .ef-conversation,
2116
+ .ef-understanding,
2117
+ .ef-understanding__item[data-ef-state="unknown"],
2118
+ .ef-understanding__item[data-ef-state="conflict"] {
2119
+ border-color: CanvasText;
2120
+ }
2121
+ }
2122
+
2123
+ }