@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
package/dist/all.css ADDED
@@ -0,0 +1,3461 @@
1
+ /* Generated from tokens/echelon.tokens.json. Do not edit directly. */
2
+ @layer echelon.tokens {
3
+ :root {
4
+ --ef-primitive-color-carbon: #171a18;
5
+ --ef-primitive-color-forged-iron: #3a403c;
6
+ --ef-primitive-color-foundry-charcoal: #202421;
7
+ --ef-primitive-color-graphite: #686d68;
8
+ --ef-primitive-color-oxide-bronze: #905831;
9
+ --ef-primitive-color-oxide-bronze-light: #a87e5e;
10
+ --ef-primitive-color-parchment: #f2efe7;
11
+ --ef-primitive-color-stone: #e3e0d7;
12
+ --ef-primitive-color-verdigris: #47756b;
13
+ --ef-primitive-color-verdigris-light: #698d84;
14
+ --ef-primitive-font-family-display: Newsreader, Georgia, serif;
15
+ --ef-primitive-font-family-mono: "IBM Plex Mono", ui-monospace, monospace;
16
+ --ef-primitive-font-family-sans: Manrope, system-ui, sans-serif;
17
+ --ef-primitive-motion-duration-fast: 120ms;
18
+ --ef-primitive-motion-duration-instant: 0ms;
19
+ --ef-primitive-motion-duration-slow: 280ms;
20
+ --ef-primitive-motion-duration-standard: 180ms;
21
+ --ef-primitive-motion-easing-enter: cubic-bezier(0, 0, 0.2, 1);
22
+ --ef-primitive-motion-easing-exit: cubic-bezier(0.4, 0, 1, 1);
23
+ --ef-primitive-motion-easing-standard: cubic-bezier(0.2, 0, 0, 1);
24
+ --ef-primitive-radius-medium: 8px;
25
+ --ef-primitive-radius-none: 0px;
26
+ --ef-primitive-radius-pill: 999px;
27
+ --ef-primitive-radius-small: 4px;
28
+ --ef-primitive-spacing-1: 4px;
29
+ --ef-primitive-spacing-2: 8px;
30
+ --ef-primitive-spacing-3: 12px;
31
+ --ef-primitive-spacing-4: 16px;
32
+ --ef-primitive-spacing-5: 24px;
33
+ --ef-primitive-spacing-6: 32px;
34
+ --ef-primitive-spacing-7: 48px;
35
+ --ef-primitive-spacing-8: 64px;
36
+ }
37
+ :root, [data-ef-theme="light"] {
38
+ --ef-color-accent-primary: #905831;
39
+ --ef-color-accent-secondary: #47756b;
40
+ --ef-color-border-functional: #3a403c;
41
+ --ef-color-border-subtle: #e3e0d7;
42
+ --ef-color-control-active: #905831;
43
+ --ef-color-control-thumb: #f2efe7;
44
+ --ef-color-control-track: #686d68;
45
+ --ef-color-focus-gap: #f2efe7;
46
+ --ef-color-focus-ring: #171a18;
47
+ --ef-color-surface-inverse: #202421;
48
+ --ef-color-surface-inverse-secondary: #3a403c;
49
+ --ef-color-surface-primary: #f2efe7;
50
+ --ef-color-surface-secondary: #e3e0d7;
51
+ --ef-color-text-heading: #202421;
52
+ --ef-color-text-inverse: #f2efe7;
53
+ --ef-color-text-on-secondary-surface: #3a403c;
54
+ --ef-color-text-primary: #171a18;
55
+ --ef-color-text-secondary: #686d68;
56
+ }
57
+ @media (prefers-color-scheme: dark) {
58
+ :root:not([data-ef-theme]) {
59
+ --ef-color-accent-primary: #a87e5e;
60
+ --ef-color-accent-secondary: #698d84;
61
+ --ef-color-border-functional: #e3e0d7;
62
+ --ef-color-border-subtle: #3a403c;
63
+ --ef-color-control-active: #a87e5e;
64
+ --ef-color-control-thumb: #f2efe7;
65
+ --ef-color-control-track: #686d68;
66
+ --ef-color-focus-gap: #171a18;
67
+ --ef-color-focus-ring: #f2efe7;
68
+ --ef-color-surface-inverse: #f2efe7;
69
+ --ef-color-surface-inverse-secondary: #e3e0d7;
70
+ --ef-color-surface-primary: #171a18;
71
+ --ef-color-surface-secondary: #202421;
72
+ --ef-color-text-heading: #f2efe7;
73
+ --ef-color-text-inverse: #171a18;
74
+ --ef-color-text-on-secondary-surface: #f2efe7;
75
+ --ef-color-text-primary: #f2efe7;
76
+ --ef-color-text-secondary: #e3e0d7;
77
+ }
78
+ }
79
+ [data-ef-theme="dark"] {
80
+ --ef-color-accent-primary: #a87e5e;
81
+ --ef-color-accent-secondary: #698d84;
82
+ --ef-color-border-functional: #e3e0d7;
83
+ --ef-color-border-subtle: #3a403c;
84
+ --ef-color-control-active: #a87e5e;
85
+ --ef-color-control-thumb: #f2efe7;
86
+ --ef-color-control-track: #686d68;
87
+ --ef-color-focus-gap: #171a18;
88
+ --ef-color-focus-ring: #f2efe7;
89
+ --ef-color-surface-inverse: #f2efe7;
90
+ --ef-color-surface-inverse-secondary: #e3e0d7;
91
+ --ef-color-surface-primary: #171a18;
92
+ --ef-color-surface-secondary: #202421;
93
+ --ef-color-text-heading: #f2efe7;
94
+ --ef-color-text-inverse: #171a18;
95
+ --ef-color-text-on-secondary-surface: #f2efe7;
96
+ --ef-color-text-primary: #f2efe7;
97
+ --ef-color-text-secondary: #e3e0d7;
98
+ }
99
+ }
100
+
101
+ @layer echelon.foundations {
102
+ *, *::before, *::after { box-sizing: border-box; }
103
+
104
+ :where(html) {
105
+ color-scheme: light dark;
106
+ -webkit-text-size-adjust: 100%;
107
+ text-size-adjust: 100%;
108
+ font-family: var(--ef-primitive-font-family-sans, system-ui, sans-serif);
109
+ background: var(--ef-color-surface-primary, #f2efe7);
110
+ color: var(--ef-color-text-primary, #171a18);
111
+ }
112
+
113
+ :where(body) {
114
+ margin: 0;
115
+ background: var(--ef-color-surface-primary, #f2efe7);
116
+ color: var(--ef-color-text-primary, #171a18);
117
+ font-family: var(--ef-primitive-font-family-sans, system-ui, sans-serif);
118
+ font-size: 1rem;
119
+ line-height: 1.6;
120
+ }
121
+
122
+ :where(h1, h2) {
123
+ color: var(--ef-color-text-heading, #202421);
124
+ font-family: var(--ef-primitive-font-family-display, Georgia, serif);
125
+ font-weight: 500;
126
+ letter-spacing: -0.03em;
127
+ line-height: 1.02;
128
+ }
129
+
130
+ :where(h3, h4, h5, h6) {
131
+ color: var(--ef-color-text-heading, #202421);
132
+ line-height: 1.25;
133
+ }
134
+
135
+ :where(p) {
136
+ color: var(--ef-color-text-secondary, #686d68);
137
+ max-inline-size: 72ch;
138
+ }
139
+
140
+ :where(a) {
141
+ color: var(--ef-color-accent-primary, #905831);
142
+ text-decoration-thickness: 0.08em;
143
+ text-underline-offset: 0.18em;
144
+ }
145
+
146
+ :where(button, input, select, textarea) {
147
+ max-inline-size: 100%;
148
+ font: inherit;
149
+ }
150
+
151
+ :where(img, picture, video, canvas, svg) {
152
+ max-inline-size: 100%;
153
+ }
154
+
155
+ :where(img, video, canvas) {
156
+ block-size: auto;
157
+ }
158
+
159
+ :where(button, .ef-button) {
160
+ min-block-size: 2.75rem;
161
+ padding: 0.65rem 1rem;
162
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
163
+ border-radius: var(--ef-primitive-radius-none, 0);
164
+ background: var(--ef-color-surface-primary, #f2efe7);
165
+ color: var(--ef-color-text-primary, #171a18);
166
+ font-weight: 700;
167
+ }
168
+
169
+ :where(button, .ef-button):where(:not(:disabled)):hover {
170
+ background: var(--ef-color-surface-secondary, #e3e0d7);
171
+ }
172
+
173
+ :where(input:not([type="checkbox"], [type="radio"], [type="range"]), textarea, select) {
174
+ min-block-size: 2.75rem;
175
+ inline-size: 100%;
176
+ padding: 0.7rem 0.8rem;
177
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
178
+ border-radius: var(--ef-primitive-radius-none, 0);
179
+ background: var(--ef-color-surface-primary, #f2efe7);
180
+ color: var(--ef-color-text-primary, #171a18);
181
+ }
182
+
183
+ :where(:focus-visible) {
184
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
185
+ outline-offset: 2px;
186
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
187
+ }
188
+
189
+ .ef-stack { display: flex; flex-direction: column; gap: var(--ef-stack-gap, var(--ef-primitive-spacing-4, 1rem)); }
190
+ .ef-cluster { display: flex; flex-wrap: wrap; gap: var(--ef-cluster-gap, var(--ef-primitive-spacing-3, 0.75rem)); align-items: center; }
191
+ .ef-grid { display: grid; gap: var(--ef-grid-gap, var(--ef-primitive-spacing-4, 1rem)); grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ef-grid-min, 16rem)), 1fr)); }
192
+ .ef-section { padding-block: var(--ef-section-space, var(--ef-primitive-spacing-7, 3rem)); }
193
+ .ef-surface { min-inline-size: 0; padding: var(--ef-surface-space, var(--ef-primitive-spacing-5, 1.5rem)); background: var(--ef-color-surface-secondary, #e3e0d7); color: var(--ef-color-text-on-secondary-surface, #3a403c); border: 1px solid var(--ef-color-border-subtle, #e3e0d7); }
194
+
195
+ :where(h1, h2, h3, h4, h5, h6, p, a, label, legend, td, th) {
196
+ overflow-wrap: anywhere;
197
+ }
198
+
199
+ @media (prefers-reduced-motion: reduce) {
200
+ *, *::before, *::after {
201
+ scroll-behavior: auto !important;
202
+ animation-duration: 0.01ms !important;
203
+ animation-iteration-count: 1 !important;
204
+ transition-duration: 0.01ms !important;
205
+ }
206
+ }
207
+
208
+ @media (forced-colors: active) {
209
+ :where(button, .ef-button, input, textarea, select, .ef-surface) {
210
+ border-color: CanvasText;
211
+ }
212
+ }
213
+ }
214
+
215
+ @layer echelon.components {
216
+ /*
217
+ * Public ef-* authoring tags are inert wrappers, not registered Custom
218
+ * Elements. display: contents keeps layout and semantics owned by the
219
+ * canonical native HTML inside the tag.
220
+ */
221
+ .ef-component-tag {
222
+ display: contents;
223
+ }
224
+
225
+ .ef-field {
226
+ display: grid;
227
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
228
+ }
229
+
230
+ .ef-field__label {
231
+ color: var(--ef-color-text-primary, #171a18);
232
+ font-size: 0.9375rem;
233
+ font-weight: 650;
234
+ line-height: 1.25;
235
+ }
236
+
237
+ .ef-field__description {
238
+ color: var(--ef-color-text-secondary, #686d68);
239
+ font-size: 0.8125rem;
240
+ line-height: 1.4;
241
+ }
242
+
243
+ /* Physics-derived motion ---------------------------------------------- */
244
+ :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) {
245
+ /*
246
+ * CSS cannot run a continuous rigid-body simulation. Forma therefore uses
247
+ * a physics-derived response model. The fallback values remain usable in
248
+ * browsers that do not support CSS sqrt()/typed multiplication.
249
+ */
250
+ --ef-motion-mass: 1;
251
+ --ef-motion-stiffness: 1;
252
+ --ef-motion-damping: 0.84;
253
+ --ef-motion-distance: 1;
254
+ --ef-motion-gravity: 1;
255
+ --ef-motion-base-duration: 180ms;
256
+ --ef-motion-inertia-duration: 214ms;
257
+ --ef-motion-gravity-duration: 255ms;
258
+ --ef-motion-state-duration: 154ms;
259
+ --ef-motion-press-duration: 107ms;
260
+ --ef-motion-exit-duration: 150ms;
261
+ --ef-motion-spring-easing: linear(0, 0.42 24%, 0.82 48%, 1.055 70%, 0.988 88%, 1);
262
+ --ef-motion-damped-easing: cubic-bezier(0.2, 0.8, 0.2, 1);
263
+ }
264
+
265
+ :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"] {
266
+ --ef-motion-mass: 0.65;
267
+ --ef-motion-stiffness: 1.15;
268
+ --ef-motion-damping: 0.94;
269
+ }
270
+
271
+ :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"] {
272
+ --ef-motion-mass: 1;
273
+ --ef-motion-stiffness: 1;
274
+ --ef-motion-damping: 0.84;
275
+ }
276
+
277
+ :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"] {
278
+ --ef-motion-mass: 1.8;
279
+ --ef-motion-stiffness: 0.92;
280
+ --ef-motion-damping: 0.76;
281
+ }
282
+
283
+ :where(.ef-disclosure, .ef-popover, .ef-menu, .ef-tabs):not([data-ef-motion-weight]) {
284
+ --ef-motion-mass: 0.65;
285
+ --ef-motion-stiffness: 1.15;
286
+ --ef-motion-damping: 0.94;
287
+ }
288
+
289
+ :where(.ef-dialog, .ef-flyout, .ef-command-palette):not([data-ef-motion-weight]) {
290
+ --ef-motion-mass: 1.8;
291
+ --ef-motion-stiffness: 0.92;
292
+ --ef-motion-damping: 0.76;
293
+ }
294
+
295
+ @supports (width: calc(1px * sqrt(1))) {
296
+ :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) {
297
+ /*
298
+ * Response time follows sqrt(mass / stiffness), then is lengthened as
299
+ * damping decreases. Vertical gravity time follows sqrt(2s / g) and is
300
+ * deliberately independent of mass.
301
+ */
302
+ --ef-motion-inertia-duration: clamp(
303
+ 110ms,
304
+ calc(
305
+ var(--ef-motion-base-duration)
306
+ * sqrt(var(--ef-motion-mass) / var(--ef-motion-stiffness))
307
+ / var(--ef-motion-damping)
308
+ ),
309
+ 420ms
310
+ );
311
+ --ef-motion-gravity-duration: clamp(
312
+ 100ms,
313
+ calc(
314
+ var(--ef-motion-base-duration)
315
+ * sqrt((2 * var(--ef-motion-distance)) / var(--ef-motion-gravity))
316
+ ),
317
+ 420ms
318
+ );
319
+ --ef-motion-state-duration: clamp(
320
+ 90ms,
321
+ calc(var(--ef-motion-inertia-duration) * 0.72),
322
+ 240ms
323
+ );
324
+ --ef-motion-press-duration: clamp(
325
+ 70ms,
326
+ calc(var(--ef-motion-inertia-duration) * 0.5),
327
+ 160ms
328
+ );
329
+ --ef-motion-exit-duration: clamp(
330
+ 80ms,
331
+ calc(var(--ef-motion-inertia-duration) * 0.68),
332
+ 220ms
333
+ );
334
+ }
335
+ }
336
+
337
+ /* Switch -------------------------------------------------------------- */
338
+ .ef-switch {
339
+ --ef-switch-width: 2.75rem;
340
+ --ef-switch-height: 1.5rem;
341
+ --ef-switch-thumb: 1.125rem;
342
+ --ef-switch-gap: 0.1875rem;
343
+ position: relative;
344
+ display: inline-grid;
345
+ grid-template-columns: var(--ef-switch-width) minmax(0, 1fr);
346
+ align-items: center;
347
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
348
+ min-block-size: 2.75rem;
349
+ max-inline-size: 100%;
350
+ color: var(--ef-color-text-primary, #171a18);
351
+ cursor: pointer;
352
+ user-select: none;
353
+ -webkit-tap-highlight-color: transparent;
354
+ }
355
+
356
+ .ef-switch__input {
357
+ position: absolute;
358
+ inset: 0;
359
+ z-index: 2;
360
+ margin: 0;
361
+ opacity: 0;
362
+ cursor: inherit;
363
+ }
364
+
365
+ .ef-switch__track {
366
+ position: relative;
367
+ inline-size: var(--ef-switch-width);
368
+ block-size: var(--ef-switch-height);
369
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
370
+ border-radius: var(--ef-primitive-radius-pill, 999px);
371
+ background: var(--ef-color-control-track, #686d68);
372
+ transition:
373
+ background var(--ef-motion-state-duration) var(--ef-motion-damped-easing),
374
+ border-color var(--ef-motion-state-duration) var(--ef-motion-damped-easing);
375
+ }
376
+
377
+ .ef-switch__track::after {
378
+ content: "";
379
+ position: absolute;
380
+ inset-block-start: 50%;
381
+ inset-inline-start: var(--ef-switch-gap);
382
+ inline-size: var(--ef-switch-thumb);
383
+ block-size: var(--ef-switch-thumb);
384
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
385
+ border-radius: 50%;
386
+ background: var(--ef-color-control-thumb, #f2efe7);
387
+ box-shadow: 0 1px 2px rgb(0 0 0 / 0.18);
388
+ translate: 0 -50%;
389
+ scale: 1;
390
+ transition:
391
+ translate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing),
392
+ scale var(--ef-motion-press-duration) var(--ef-motion-damped-easing),
393
+ border-color var(--ef-motion-state-duration) var(--ef-motion-damped-easing);
394
+ }
395
+
396
+ .ef-switch__input:checked + .ef-switch__track {
397
+ background: var(--ef-color-control-active, #905831);
398
+ }
399
+
400
+ .ef-switch__input:checked + .ef-switch__track::after {
401
+ translate: calc(var(--ef-switch-width) - var(--ef-switch-thumb) - (2 * var(--ef-switch-gap))) -50%;
402
+ }
403
+
404
+ .ef-switch__input:active + .ef-switch__track::after { scale: 1.12; }
405
+
406
+ .ef-switch__input:focus-visible + .ef-switch__track {
407
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
408
+ outline-offset: 2px;
409
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
410
+ }
411
+
412
+ .ef-switch__input:disabled ~ * { opacity: 0.62; }
413
+ .ef-switch:has(.ef-switch__input:disabled) { cursor: not-allowed; }
414
+
415
+ .ef-switch__text { min-inline-size: 0; }
416
+ .ef-switch__label { display: block; font-size: 0.9375rem; font-weight: 650; line-height: 1.25; }
417
+ .ef-switch__description {
418
+ display: block;
419
+ margin-block-start: 0.2rem;
420
+ color: var(--ef-color-text-secondary, #686d68);
421
+ font-size: 0.8125rem;
422
+ line-height: 1.35;
423
+ }
424
+
425
+ /* Checkbox ------------------------------------------------------------ */
426
+ .ef-checkbox {
427
+ position: relative;
428
+ display: inline-grid;
429
+ grid-template-columns: 1.25rem minmax(0, 1fr);
430
+ align-items: center;
431
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
432
+ min-block-size: 2.75rem;
433
+ max-inline-size: 100%;
434
+ color: var(--ef-color-text-primary, #171a18);
435
+ cursor: pointer;
436
+ user-select: none;
437
+ -webkit-tap-highlight-color: transparent;
438
+ }
439
+
440
+ .ef-checkbox__input {
441
+ position: absolute;
442
+ inset: 0;
443
+ z-index: 2;
444
+ margin: 0;
445
+ opacity: 0;
446
+ cursor: inherit;
447
+ }
448
+
449
+ .ef-checkbox__box {
450
+ position: relative;
451
+ inline-size: 1.25rem;
452
+ block-size: 1.25rem;
453
+ display: grid;
454
+ place-items: center;
455
+ border: 2px solid var(--ef-color-border-functional, #3a403c);
456
+ border-radius: var(--ef-primitive-radius-small, 4px);
457
+ background: var(--ef-color-surface-primary, #f2efe7);
458
+ scale: 1;
459
+ transition:
460
+ background var(--ef-motion-state-duration) var(--ef-motion-damped-easing),
461
+ border-color var(--ef-motion-state-duration) var(--ef-motion-damped-easing),
462
+ scale var(--ef-motion-press-duration) var(--ef-motion-damped-easing);
463
+ }
464
+
465
+ .ef-checkbox__box::after {
466
+ content: "✓";
467
+ color: var(--ef-color-text-inverse, #f2efe7);
468
+ font-family: var(--ef-primitive-font-family-sans, system-ui, sans-serif);
469
+ font-size: 0.9rem;
470
+ font-weight: 800;
471
+ line-height: 1;
472
+ opacity: 0;
473
+ rotate: -12deg;
474
+ scale: 0.35;
475
+ transition:
476
+ opacity var(--ef-motion-state-duration) linear,
477
+ rotate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing),
478
+ scale var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing);
479
+ }
480
+
481
+ .ef-checkbox__input:checked + .ef-checkbox__box {
482
+ border-color: var(--ef-color-control-active, #905831);
483
+ background: var(--ef-color-control-active, #905831);
484
+ }
485
+
486
+ .ef-checkbox__input:checked + .ef-checkbox__box::after {
487
+ opacity: 1;
488
+ rotate: 0deg;
489
+ scale: 1;
490
+ }
491
+
492
+ .ef-checkbox__input:active + .ef-checkbox__box { scale: 0.92; }
493
+
494
+ .ef-checkbox__input:focus-visible + .ef-checkbox__box {
495
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
496
+ outline-offset: 2px;
497
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
498
+ }
499
+
500
+ .ef-checkbox:has(.ef-checkbox__input:disabled) {
501
+ cursor: not-allowed;
502
+ opacity: 0.62;
503
+ }
504
+
505
+ .ef-checkbox__text { min-inline-size: 0; }
506
+ .ef-checkbox__label { display: block; font-size: 0.9375rem; font-weight: 650; line-height: 1.25; }
507
+ .ef-checkbox__description {
508
+ display: block;
509
+ margin-block-start: 0.2rem;
510
+ color: var(--ef-color-text-secondary, #686d68);
511
+ font-size: 0.8125rem;
512
+ line-height: 1.35;
513
+ }
514
+
515
+ /* Select -------------------------------------------------------------- */
516
+ .ef-select-field {
517
+ display: grid;
518
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
519
+ max-inline-size: 100%;
520
+ }
521
+
522
+ .ef-select {
523
+ --ef-motion-distance: 0.35;
524
+ position: relative;
525
+ display: grid;
526
+ align-items: center;
527
+ max-inline-size: 100%;
528
+ }
529
+
530
+ .ef-select__input {
531
+ inline-size: 100%;
532
+ min-block-size: 2.75rem;
533
+ padding-inline-end: 2.75rem;
534
+ appearance: none;
535
+ cursor: pointer;
536
+ transition:
537
+ background var(--ef-motion-state-duration) var(--ef-motion-damped-easing),
538
+ border-color var(--ef-motion-state-duration) var(--ef-motion-damped-easing);
539
+ }
540
+
541
+ .ef-select__indicator {
542
+ position: absolute;
543
+ inset-inline-end: 1rem;
544
+ inline-size: 0.55rem;
545
+ block-size: 0.55rem;
546
+ border-inline-end: 2px solid currentColor;
547
+ border-block-end: 2px solid currentColor;
548
+ color: var(--ef-color-text-primary, #171a18);
549
+ pointer-events: none;
550
+ rotate: 45deg;
551
+ translate: 0 -0.12rem;
552
+ transition:
553
+ rotate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing),
554
+ translate var(--ef-motion-gravity-duration) var(--ef-motion-damped-easing);
555
+ }
556
+
557
+ .ef-select__input:open + .ef-select__indicator {
558
+ rotate: 225deg;
559
+ translate: 0 0.08rem;
560
+ }
561
+
562
+ .ef-select__input:disabled {
563
+ cursor: not-allowed;
564
+ opacity: 0.62;
565
+ }
566
+
567
+ @media (prefers-reduced-motion: reduce) {
568
+ :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) {
569
+ --ef-motion-inertia-duration: 0.01ms;
570
+ --ef-motion-gravity-duration: 0.01ms;
571
+ --ef-motion-state-duration: 0.01ms;
572
+ --ef-motion-press-duration: 0.01ms;
573
+ --ef-motion-exit-duration: 0.01ms;
574
+ --ef-motion-spring-easing: linear;
575
+ --ef-motion-damped-easing: linear;
576
+ }
577
+
578
+ .ef-switch__input:active + .ef-switch__track::after,
579
+ .ef-checkbox__input:active + .ef-checkbox__box {
580
+ scale: 1;
581
+ }
582
+
583
+ .ef-select__indicator,
584
+ .ef-select__input:open + .ef-select__indicator {
585
+ translate: 0 0;
586
+ }
587
+ }
588
+
589
+ /* Slider -------------------------------------------------------------- */
590
+
591
+ .ef-slider {
592
+ display: grid;
593
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
594
+ }
595
+
596
+ .ef-slider__header,
597
+ .ef-slider__bounds {
598
+ min-inline-size: 0;
599
+ display: flex;
600
+ flex-wrap: wrap;
601
+ justify-content: space-between;
602
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
603
+ }
604
+
605
+ .ef-slider__label { font-size: 0.9375rem; font-weight: 650; }
606
+ .ef-slider__bounds {
607
+ color: var(--ef-color-text-secondary, #686d68);
608
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
609
+ font-size: 0.6875rem;
610
+ }
611
+
612
+ .ef-slider__input {
613
+ inline-size: 100%;
614
+ min-block-size: 2.75rem;
615
+ margin: 0;
616
+ accent-color: var(--ef-color-control-active, #905831);
617
+ cursor: pointer;
618
+ transition:
619
+ filter var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease),
620
+ opacity var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease);
621
+ }
622
+
623
+ .ef-slider__input:hover { filter: saturate(1.08); }
624
+ .ef-slider__input:active { filter: saturate(1.14); }
625
+ .ef-slider__input:disabled { cursor: not-allowed; opacity: 0.62; }
626
+
627
+ .ef-slider__input:focus-visible {
628
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
629
+ outline-offset: 2px;
630
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
631
+ }
632
+
633
+ /* Segmented control --------------------------------------------------- */
634
+ .ef-segmented {
635
+ max-inline-size: 100%;
636
+ display: inline-flex;
637
+ flex-wrap: wrap;
638
+ gap: 2px;
639
+ padding: 2px;
640
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
641
+ background: var(--ef-color-surface-secondary, #e3e0d7);
642
+ }
643
+
644
+ .ef-segment {
645
+ position: relative;
646
+ min-block-size: 2.75rem;
647
+ min-inline-size: 0;
648
+ display: grid;
649
+ place-items: center;
650
+ padding: 0.55rem 0.9rem;
651
+ background: transparent;
652
+ color: var(--ef-color-text-on-secondary-surface, #3a403c);
653
+ cursor: pointer;
654
+ transition:
655
+ background var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease),
656
+ color var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease),
657
+ transform var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease);
658
+ }
659
+
660
+ .ef-segment:has(input:checked) {
661
+ background: var(--ef-color-surface-inverse, #202421);
662
+ color: var(--ef-color-text-inverse, #f2efe7);
663
+ }
664
+
665
+ .ef-segment:has(input:active) { transform: scale(0.985); }
666
+ .ef-segment input {
667
+ position: absolute;
668
+ inline-size: 1px;
669
+ block-size: 1px;
670
+ opacity: 0;
671
+ }
672
+
673
+ .ef-segment:has(input:focus-visible) {
674
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
675
+ outline-offset: 2px;
676
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
677
+ }
678
+
679
+ /* Disclosure ---------------------------------------------------------- */
680
+ .ef-disclosure {
681
+ border-block: 1px solid var(--ef-color-border-functional, #3a403c);
682
+ }
683
+
684
+ .ef-disclosure + .ef-disclosure { border-block-start: 0; }
685
+
686
+ .ef-disclosure > summary {
687
+ min-inline-size: 0;
688
+ display: flex;
689
+ align-items: center;
690
+ justify-content: space-between;
691
+ gap: 1rem;
692
+ min-block-size: 2.75rem;
693
+ padding: 0.75rem 0;
694
+ cursor: pointer;
695
+ font-weight: 650;
696
+ list-style: none;
697
+ }
698
+
699
+ .ef-disclosure > summary::-webkit-details-marker { display: none; }
700
+ .ef-disclosure > summary::after {
701
+ content: "+";
702
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
703
+ rotate: 0deg;
704
+ scale: 1;
705
+ transition:
706
+ rotate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing),
707
+ scale var(--ef-motion-press-duration) var(--ef-motion-damped-easing);
708
+ }
709
+ .ef-disclosure > summary:active::after { scale: 0.86; }
710
+ .ef-disclosure[open] > summary::after { rotate: 45deg; }
711
+ .ef-disclosure__content {
712
+ padding: 0 0 1rem;
713
+ opacity: 1;
714
+ translate: 0 0;
715
+ transition:
716
+ opacity var(--ef-motion-state-duration) linear,
717
+ translate var(--ef-motion-inertia-duration) var(--ef-motion-damped-easing);
718
+ }
719
+
720
+ @starting-style {
721
+ .ef-disclosure[open] .ef-disclosure__content {
722
+ opacity: 0;
723
+ translate: 0 -0.25rem;
724
+ }
725
+ }
726
+
727
+ /* Popover and ordinary action menu ------------------------------------ */
728
+ .ef-popover,
729
+ .ef-menu {
730
+ max-inline-size: min(30rem, calc(100vw - 2rem));
731
+ max-block-size: min(80dvh, calc(100dvh - 2rem));
732
+ margin: 0;
733
+ padding: var(--ef-primitive-spacing-4, 1rem);
734
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
735
+ background: var(--ef-color-surface-primary, #f2efe7);
736
+ color: var(--ef-color-text-primary, #171a18);
737
+ box-shadow: 0 1rem 3rem rgb(0 0 0 / 0.18);
738
+ overflow: auto;
739
+ overscroll-behavior: contain;
740
+ opacity: 0;
741
+ translate: 0 -0.35rem;
742
+ scale: 0.985;
743
+ transition:
744
+ opacity var(--ef-motion-exit-duration) linear,
745
+ translate var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
746
+ scale var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
747
+ display var(--ef-motion-exit-duration) allow-discrete,
748
+ overlay var(--ef-motion-exit-duration) allow-discrete;
749
+ }
750
+
751
+ .ef-popover:popover-open,
752
+ .ef-menu:popover-open {
753
+ opacity: 1;
754
+ translate: 0 0;
755
+ scale: 1;
756
+ transition-duration:
757
+ var(--ef-motion-state-duration),
758
+ var(--ef-motion-inertia-duration),
759
+ var(--ef-motion-inertia-duration),
760
+ var(--ef-motion-inertia-duration),
761
+ var(--ef-motion-inertia-duration);
762
+ }
763
+
764
+ @starting-style {
765
+ .ef-popover:popover-open,
766
+ .ef-menu:popover-open {
767
+ opacity: 0;
768
+ translate: 0 -0.35rem;
769
+ scale: 0.985;
770
+ }
771
+ }
772
+
773
+ .ef-menu {
774
+ min-inline-size: min(14rem, calc(100vw - 2rem));
775
+ padding: 0.4rem;
776
+ }
777
+
778
+ .ef-menu__list {
779
+ display: grid;
780
+ gap: 0.2rem;
781
+ margin: 0;
782
+ padding: 0;
783
+ list-style: none;
784
+ }
785
+
786
+ .ef-menu__list :where(button, a) {
787
+ inline-size: 100%;
788
+ min-block-size: 2.75rem;
789
+ display: flex;
790
+ align-items: center;
791
+ justify-content: space-between;
792
+ gap: 1rem;
793
+ padding: 0.6rem 0.75rem;
794
+ border: 0;
795
+ background: transparent;
796
+ color: var(--ef-color-text-primary, #171a18);
797
+ text-align: start;
798
+ text-decoration: none;
799
+ }
800
+
801
+ .ef-menu__list :where(button, a):hover {
802
+ background: var(--ef-color-surface-secondary, #e3e0d7);
803
+ }
804
+
805
+ /* Dialog and flyout ---------------------------------------------------- */
806
+ :where(.ef-dialog, .ef-flyout) {
807
+ --ef-overlay-motion-duration: var(--ef-motion-exit-duration);
808
+ --ef-overlay-spatial-easing: var(--ef-motion-damped-easing);
809
+ padding: 0;
810
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
811
+ background: var(--ef-color-surface-primary, #f2efe7);
812
+ color: var(--ef-color-text-primary, #171a18);
813
+ overscroll-behavior: contain;
814
+ }
815
+
816
+ :where(.ef-dialog, .ef-flyout)[open] {
817
+ --ef-overlay-motion-duration: var(--ef-motion-inertia-duration);
818
+ --ef-overlay-spatial-easing: var(--ef-motion-spring-easing);
819
+ }
820
+
821
+ :where(.ef-dialog, .ef-flyout)::backdrop {
822
+ background: rgb(23 26 24 / 0);
823
+ backdrop-filter: blur(0);
824
+ transition:
825
+ background var(--ef-overlay-motion-duration) var(--ef-motion-damped-easing),
826
+ backdrop-filter var(--ef-overlay-motion-duration) var(--ef-motion-damped-easing),
827
+ display var(--ef-overlay-motion-duration) allow-discrete,
828
+ overlay var(--ef-overlay-motion-duration) allow-discrete;
829
+ }
830
+
831
+ :where(.ef-dialog, .ef-flyout)[open]::backdrop {
832
+ background: rgb(23 26 24 / 0.48);
833
+ backdrop-filter: blur(2px);
834
+ }
835
+
836
+ /* Centered modal dialog ------------------------------------------------ */
837
+ .ef-dialog {
838
+ inline-size: min(38rem, calc(100vw - 2rem));
839
+ max-block-size: calc(100dvh - 2rem);
840
+ box-shadow: 0 1.5rem 4rem rgb(0 0 0 / 0.28);
841
+ translate: 0 0.75rem;
842
+ scale: 0.985;
843
+ transition:
844
+ translate var(--ef-overlay-motion-duration) var(--ef-overlay-spatial-easing),
845
+ scale var(--ef-overlay-motion-duration) var(--ef-overlay-spatial-easing),
846
+ display var(--ef-overlay-motion-duration) allow-discrete,
847
+ overlay var(--ef-overlay-motion-duration) allow-discrete;
848
+ }
849
+
850
+ .ef-dialog[open] {
851
+ translate: 0 0;
852
+ scale: 1;
853
+ }
854
+
855
+ .ef-dialog__body { padding: var(--ef-primitive-spacing-5, 1.5rem); }
856
+ .ef-dialog__actions {
857
+ min-inline-size: 0;
858
+ display: flex;
859
+ flex-wrap: wrap;
860
+ justify-content: flex-end;
861
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
862
+ padding: 1rem 1.5rem;
863
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
864
+ }
865
+
866
+ /* Edge flyout --------------------------------------------------------- */
867
+ .ef-flyout {
868
+ --ef-flyout-closed-x: 100%;
869
+ position: fixed;
870
+ inset-block: 0;
871
+ inline-size: min(28rem, 90vw);
872
+ max-inline-size: min(28rem, 90vw);
873
+ block-size: 100dvh;
874
+ max-block-size: 100dvh;
875
+ box-sizing: border-box;
876
+ margin-block: 0;
877
+ box-shadow: 0 0 3rem rgb(0 0 0 / 0.24);
878
+ translate: var(--ef-flyout-closed-x) 0;
879
+ transition:
880
+ translate var(--ef-overlay-motion-duration) var(--ef-overlay-spatial-easing),
881
+ display var(--ef-overlay-motion-duration) allow-discrete,
882
+ overlay var(--ef-overlay-motion-duration) allow-discrete;
883
+ }
884
+
885
+ .ef-flyout[data-ef-side="left"] {
886
+ --ef-flyout-closed-x: -100%;
887
+ inset-inline-start: 0;
888
+ inset-inline-end: auto;
889
+ margin-inline: 0;
890
+ border-inline-start: 0;
891
+ }
892
+
893
+ .ef-flyout[data-ef-side="right"] {
894
+ --ef-flyout-closed-x: 100%;
895
+ inset-inline-start: auto;
896
+ inset-inline-end: 0;
897
+ margin-inline: 0;
898
+ border-inline-end: 0;
899
+ }
900
+
901
+ .ef-flyout[open] { translate: 0 0; }
902
+
903
+ .ef-flyout__surface {
904
+ min-block-size: 0;
905
+ block-size: 100%;
906
+ display: grid;
907
+ grid-template-rows: auto minmax(0, 1fr) auto;
908
+ }
909
+
910
+ .ef-flyout__header,
911
+ .ef-flyout__actions {
912
+ min-inline-size: 0;
913
+ display: flex;
914
+ align-items: center;
915
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
916
+ padding-inline: var(--ef-primitive-spacing-4, 1rem);
917
+ }
918
+
919
+ .ef-flyout__header {
920
+ justify-content: space-between;
921
+ padding-block-start: max(var(--ef-primitive-spacing-4, 1rem), env(safe-area-inset-top));
922
+ padding-block-end: var(--ef-primitive-spacing-4, 1rem);
923
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
924
+ }
925
+
926
+ .ef-flyout__header > * { min-inline-size: 0; }
927
+ .ef-flyout__header h2 { margin-block: 0; }
928
+
929
+ .ef-flyout__close {
930
+ flex: 0 0 auto;
931
+ min-inline-size: 2.75rem;
932
+ min-block-size: 2.75rem;
933
+ }
934
+
935
+ .ef-flyout__body {
936
+ min-block-size: 0;
937
+ overflow: auto;
938
+ overscroll-behavior: contain;
939
+ padding: var(--ef-primitive-spacing-4, 1rem);
940
+ }
941
+
942
+ .ef-flyout__actions {
943
+ flex-wrap: wrap;
944
+ justify-content: flex-end;
945
+ padding-block-start: var(--ef-primitive-spacing-4, 1rem);
946
+ padding-block-end: max(var(--ef-primitive-spacing-4, 1rem), env(safe-area-inset-bottom));
947
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
948
+ }
949
+
950
+ @starting-style {
951
+ .ef-dialog[open] {
952
+ translate: 0 0.75rem;
953
+ scale: 0.985;
954
+ }
955
+
956
+ .ef-flyout[open] {
957
+ translate: var(--ef-flyout-closed-x) 0;
958
+ }
959
+
960
+ :where(.ef-dialog, .ef-flyout)[open]::backdrop {
961
+ background: rgb(23 26 24 / 0);
962
+ backdrop-filter: blur(0);
963
+ }
964
+ }
965
+
966
+ @media (prefers-reduced-motion: reduce) {
967
+ .ef-dialog,
968
+ .ef-dialog[open],
969
+ .ef-flyout,
970
+ .ef-flyout[open] {
971
+ translate: 0 0;
972
+ scale: 1;
973
+ }
974
+
975
+ .ef-dialog::backdrop,
976
+ .ef-dialog[open]::backdrop,
977
+ .ef-flyout::backdrop,
978
+ .ef-flyout[open]::backdrop {
979
+ backdrop-filter: none;
980
+ }
981
+ }
982
+
983
+
984
+ /* Shared operational components --------------------------------------- */
985
+ .ef-visually-hidden {
986
+ position: absolute !important;
987
+ inline-size: 1px !important;
988
+ block-size: 1px !important;
989
+ padding: 0 !important;
990
+ margin: -1px !important;
991
+ overflow: hidden !important;
992
+ clip: rect(0 0 0 0) !important;
993
+ white-space: nowrap !important;
994
+ border: 0 !important;
995
+ }
996
+
997
+ .ef-component-kicker {
998
+ color: var(--ef-color-accent-secondary, #47756b);
999
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1000
+ font-size: 0.6875rem;
1001
+ letter-spacing: 0.08em;
1002
+ text-transform: uppercase;
1003
+ }
1004
+
1005
+ .ef-status-lozenge-set,
1006
+ .ef-operation-status__actions,
1007
+ .ef-wizard__actions,
1008
+ .ef-date-range__presets,
1009
+ .ef-preview-surface__controls,
1010
+ .ef-preview-surface__footer {
1011
+ display: flex;
1012
+ flex-wrap: wrap;
1013
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
1014
+ align-items: center;
1015
+ }
1016
+
1017
+ .ef-status-lozenge {
1018
+ display: inline-flex;
1019
+ align-items: center;
1020
+ gap: 0.35rem;
1021
+ min-block-size: 1.75rem;
1022
+ padding: 0.2rem 0.55rem;
1023
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1024
+ background: var(--ef-color-surface-primary, #f2efe7);
1025
+ color: var(--ef-color-text-primary, #171a18);
1026
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1027
+ font-size: 0.6875rem;
1028
+ line-height: 1.2;
1029
+ white-space: nowrap;
1030
+ }
1031
+
1032
+ .ef-status-lozenge::before {
1033
+ content: "•";
1034
+ font-size: 1rem;
1035
+ line-height: 0;
1036
+ }
1037
+
1038
+ .ef-status-lozenge[data-state="ok"]::before { content: "✓"; }
1039
+ .ef-status-lozenge[data-state="attention"]::before { content: "!"; }
1040
+ .ef-status-lozenge[data-state="unknown"]::before { content: "?"; }
1041
+ .ef-status-lozenge[data-state="blocked"]::before { content: "×"; }
1042
+
1043
+ /* Search and collection controls -------------------------------------- */
1044
+ .ef-search {
1045
+ display: grid;
1046
+ gap: 0.4rem;
1047
+ }
1048
+
1049
+ .ef-search__label {
1050
+ color: var(--ef-color-text-primary, #171a18);
1051
+ font-size: 0.8125rem;
1052
+ font-weight: 650;
1053
+ }
1054
+
1055
+ .ef-search__control {
1056
+ display: grid;
1057
+ grid-template-columns: minmax(0, 1fr) auto;
1058
+ }
1059
+
1060
+ .ef-search__control input { border-inline-end: 0; }
1061
+ .ef-search__clear { min-inline-size: 4.5rem; }
1062
+ .ef-search__status,
1063
+ .ef-combobox__help {
1064
+ margin: 0;
1065
+ color: var(--ef-color-text-secondary, #686d68);
1066
+ font-size: 0.75rem;
1067
+ }
1068
+
1069
+ .ef-collection-toolbar {
1070
+ display: grid;
1071
+ grid-template-columns: minmax(14rem, 1.6fr) minmax(0, 2fr) auto;
1072
+ gap: 1rem;
1073
+ align-items: end;
1074
+ padding-block: 0.75rem;
1075
+ border-block: 1px solid var(--ef-color-border-functional, #3a403c);
1076
+ }
1077
+
1078
+ .ef-collection-toolbar__controls {
1079
+ display: flex;
1080
+ flex-wrap: wrap;
1081
+ gap: 0.75rem;
1082
+ align-items: end;
1083
+ }
1084
+
1085
+ .ef-collection-toolbar__controls label,
1086
+ .ef-collection-toolbar__filters {
1087
+ min-inline-size: 9rem;
1088
+ font-size: 0.75rem;
1089
+ font-weight: 650;
1090
+ }
1091
+
1092
+ .ef-collection-toolbar__filters > summary {
1093
+ min-block-size: 2.75rem;
1094
+ display: flex;
1095
+ align-items: center;
1096
+ gap: 0.5rem;
1097
+ padding: 0.65rem 0.75rem;
1098
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1099
+ cursor: pointer;
1100
+ }
1101
+
1102
+ .ef-collection-toolbar__filter-panel {
1103
+ position: absolute;
1104
+ z-index: 3;
1105
+ display: grid;
1106
+ gap: 0.75rem;
1107
+ min-inline-size: min(20rem, calc(100vw - 2rem));
1108
+ padding: 1rem;
1109
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1110
+ background: var(--ef-color-surface-primary, #f2efe7);
1111
+ box-shadow: 0 0.75rem 2rem rgb(0 0 0 / 0.14);
1112
+ }
1113
+
1114
+ .ef-collection-toolbar__count {
1115
+ margin: 0 0 0.75rem;
1116
+ color: var(--ef-color-text-secondary, #686d68);
1117
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1118
+ font-size: 0.75rem;
1119
+ white-space: nowrap;
1120
+ }
1121
+
1122
+ /* Data grid ----------------------------------------------------------- */
1123
+ .ef-data-grid {
1124
+ max-inline-size: 100%;
1125
+ overflow-x: auto;
1126
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1127
+ background: var(--ef-color-surface-primary, #f2efe7);
1128
+ }
1129
+
1130
+ .ef-data-grid table {
1131
+ inline-size: 100%;
1132
+ border-collapse: collapse;
1133
+ min-inline-size: 42rem;
1134
+ }
1135
+
1136
+ .ef-data-grid th,
1137
+ .ef-data-grid td {
1138
+ padding: 0.75rem;
1139
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1140
+ text-align: start;
1141
+ vertical-align: middle;
1142
+ }
1143
+
1144
+ .ef-data-grid th {
1145
+ background: var(--ef-color-surface-secondary, #e3e0d7);
1146
+ color: var(--ef-color-text-primary, #171a18);
1147
+ font-size: 0.75rem;
1148
+ }
1149
+
1150
+ .ef-data-grid th button {
1151
+ min-block-size: 2.25rem;
1152
+ padding: 0;
1153
+ border: 0;
1154
+ background: transparent;
1155
+ }
1156
+
1157
+ .ef-data-grid th[aria-sort="ascending"] button::after { content: " ↑"; }
1158
+ .ef-data-grid th[aria-sort="descending"] button::after { content: " ↓"; }
1159
+
1160
+ /* Pagination ---------------------------------------------------------- */
1161
+ .ef-pagination {
1162
+ display: flex;
1163
+ flex-wrap: wrap;
1164
+ gap: 0.5rem;
1165
+ align-items: center;
1166
+ }
1167
+
1168
+ .ef-pagination__pages {
1169
+ display: flex;
1170
+ gap: 0.25rem;
1171
+ margin: 0;
1172
+ padding: 0;
1173
+ list-style: none;
1174
+ }
1175
+
1176
+ .ef-pagination a {
1177
+ min-block-size: 2.75rem;
1178
+ min-inline-size: 2.75rem;
1179
+ display: grid;
1180
+ place-items: center;
1181
+ padding: 0.4rem 0.65rem;
1182
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1183
+ color: var(--ef-color-text-primary, #171a18);
1184
+ text-decoration: none;
1185
+ }
1186
+
1187
+ .ef-pagination a[aria-current="page"] {
1188
+ background: var(--ef-color-surface-inverse, #202421);
1189
+ color: var(--ef-color-text-inverse, #f2efe7);
1190
+ }
1191
+
1192
+ .ef-pagination__summary {
1193
+ color: var(--ef-color-text-secondary, #686d68);
1194
+ font-size: 0.75rem;
1195
+ }
1196
+
1197
+ /* Tabs ---------------------------------------------------------------- */
1198
+ .ef-tabs {
1199
+ min-inline-size: 0;
1200
+ }
1201
+
1202
+ .ef-tabs__list {
1203
+ display: flex;
1204
+ max-inline-size: 100%;
1205
+ overflow-x: auto;
1206
+ border-block-end: 1px solid var(--ef-color-border-functional, #3a403c);
1207
+ scrollbar-width: thin;
1208
+ }
1209
+
1210
+ .ef-tabs__list [role="tab"] {
1211
+ position: relative;
1212
+ flex: 0 0 auto;
1213
+ min-block-size: 2.75rem;
1214
+ border: 0;
1215
+ background: transparent;
1216
+ translate: 0 0.08rem;
1217
+ transition:
1218
+ background var(--ef-motion-state-duration) var(--ef-motion-damped-easing),
1219
+ translate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing);
1220
+ }
1221
+
1222
+ .ef-tabs__list [role="tab"]::after {
1223
+ content: "";
1224
+ position: absolute;
1225
+ inset-inline: 0.6rem;
1226
+ inset-block-end: 0;
1227
+ block-size: 3px;
1228
+ background: var(--ef-color-accent-primary, #905831);
1229
+ scale: 0 1;
1230
+ transition: scale var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing);
1231
+ }
1232
+
1233
+ .ef-tabs__list [aria-selected="true"] {
1234
+ background: var(--ef-color-surface-secondary, #e3e0d7);
1235
+ translate: 0 0;
1236
+ }
1237
+
1238
+ .ef-tabs__list [aria-selected="true"]::after { scale: 1 1; }
1239
+
1240
+ .ef-tabs__panel { padding-block: 1.25rem; }
1241
+
1242
+ .ef-tabs__panel[data-ef-motion-entry] {
1243
+ opacity: 1;
1244
+ translate: 0 0;
1245
+ transition:
1246
+ opacity var(--ef-motion-state-duration) linear,
1247
+ translate var(--ef-motion-inertia-duration) var(--ef-motion-damped-easing);
1248
+ }
1249
+
1250
+ @starting-style {
1251
+ .ef-tabs__panel[data-ef-motion-entry] {
1252
+ opacity: 0;
1253
+ translate: 0 0.25rem;
1254
+ }
1255
+ }
1256
+
1257
+ /* Timeline ------------------------------------------------------------ */
1258
+ .ef-timeline {
1259
+ margin: 0;
1260
+ padding: 0;
1261
+ list-style: none;
1262
+ }
1263
+
1264
+ .ef-timeline__item {
1265
+ position: relative;
1266
+ display: grid;
1267
+ grid-template-columns: 1.25rem minmax(0, 1fr);
1268
+ gap: 1rem;
1269
+ padding-block: 0 1.75rem;
1270
+ }
1271
+
1272
+ .ef-timeline__item:not(:last-child)::before {
1273
+ content: "";
1274
+ position: absolute;
1275
+ inset-inline-start: 0.5625rem;
1276
+ inset-block: 1rem 0;
1277
+ border-inline-start: 1px solid var(--ef-color-border-functional, #3a403c);
1278
+ }
1279
+
1280
+ .ef-timeline__marker {
1281
+ z-index: 1;
1282
+ inline-size: 1.125rem;
1283
+ block-size: 1.125rem;
1284
+ margin-block-start: 0.2rem;
1285
+ border: 2px solid var(--ef-color-border-functional, #3a403c);
1286
+ border-radius: 50%;
1287
+ background: var(--ef-color-surface-primary, #f2efe7);
1288
+ }
1289
+
1290
+ .ef-timeline__content {
1291
+ min-inline-size: 0;
1292
+ padding: 1rem;
1293
+ border: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1294
+ }
1295
+
1296
+ .ef-timeline__content h3,
1297
+ .ef-timeline__content p { margin-block: 0.25rem 0.5rem; }
1298
+
1299
+ .ef-timeline__meta {
1300
+ display: flex;
1301
+ flex-wrap: wrap;
1302
+ justify-content: space-between;
1303
+ gap: 0.5rem;
1304
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1305
+ font-size: 0.6875rem;
1306
+ }
1307
+
1308
+ /* Diff and conflict --------------------------------------------------- */
1309
+ .ef-diff-viewer {
1310
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1311
+ }
1312
+
1313
+ .ef-diff-viewer__header,
1314
+ .ef-conflict-review__header,
1315
+ .ef-record-header,
1316
+ .ef-work-queue__header,
1317
+ .ef-preview-surface__header {
1318
+ padding: 1rem;
1319
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1320
+ }
1321
+
1322
+ .ef-diff-viewer__header h3,
1323
+ .ef-conflict-review__header h3,
1324
+ .ef-work-queue__header h3,
1325
+ .ef-preview-surface__header h3 { margin: 0.3rem 0; }
1326
+
1327
+ .ef-diff-viewer__grid {
1328
+ display: grid;
1329
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1330
+ }
1331
+
1332
+ .ef-diff-viewer__side {
1333
+ min-inline-size: 0;
1334
+ padding: 1rem;
1335
+ }
1336
+
1337
+ .ef-diff-viewer__side + .ef-diff-viewer__side {
1338
+ border-inline-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1339
+ }
1340
+
1341
+ .ef-diff-viewer dl { margin: 0; }
1342
+ .ef-diff-row {
1343
+ display: grid;
1344
+ grid-template-columns: minmax(7rem, 0.4fr) minmax(0, 1fr);
1345
+ gap: 1rem;
1346
+ padding-block: 0.6rem;
1347
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1348
+ }
1349
+
1350
+ .ef-diff-row[data-change="changed"] {
1351
+ border-inline-start: 0.3rem solid var(--ef-color-accent-primary, #905831);
1352
+ padding-inline-start: 0.6rem;
1353
+ }
1354
+
1355
+ .ef-conflict-review {
1356
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1357
+ }
1358
+
1359
+ .ef-conflict-review > .ef-diff-viewer {
1360
+ border-inline: 0;
1361
+ }
1362
+
1363
+ .ef-conflict-review__actions {
1364
+ display: flex;
1365
+ flex-wrap: wrap;
1366
+ justify-content: flex-end;
1367
+ gap: 0.5rem;
1368
+ padding: 1rem;
1369
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1370
+ }
1371
+
1372
+ /* Metrics and dashboards --------------------------------------------- */
1373
+ .ef-metric-card {
1374
+ display: grid;
1375
+ gap: 0.5rem;
1376
+ min-inline-size: 0;
1377
+ padding: 1.25rem;
1378
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1379
+ background: var(--ef-color-surface-primary, #f2efe7);
1380
+ }
1381
+
1382
+ .ef-metric-card__label {
1383
+ color: var(--ef-color-text-secondary, #686d68);
1384
+ font-size: 0.8125rem;
1385
+ font-weight: 650;
1386
+ }
1387
+
1388
+ .ef-metric-card__value {
1389
+ color: var(--ef-color-text-heading, #202421);
1390
+ font-family: var(--ef-primitive-font-family-display, Georgia, serif);
1391
+ font-size: clamp(2rem, 8vw, 3.5rem);
1392
+ line-height: 1;
1393
+ }
1394
+
1395
+ .ef-dashboard-grid {
1396
+ display: grid;
1397
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1398
+ gap: 1rem;
1399
+ }
1400
+
1401
+ /* Work queue ---------------------------------------------------------- */
1402
+ .ef-work-queue {
1403
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1404
+ }
1405
+
1406
+ .ef-work-queue__header {
1407
+ display: flex;
1408
+ justify-content: space-between;
1409
+ gap: 1rem;
1410
+ align-items: start;
1411
+ }
1412
+
1413
+ .ef-work-queue__list {
1414
+ margin: 0;
1415
+ padding: 0;
1416
+ list-style: none;
1417
+ }
1418
+
1419
+ .ef-work-queue__item {
1420
+ display: grid;
1421
+ grid-template-columns: minmax(0, 1fr) auto;
1422
+ gap: 1rem;
1423
+ align-items: center;
1424
+ padding: 1rem;
1425
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1426
+ }
1427
+
1428
+ .ef-work-queue__item:last-child { border-block-end: 0; }
1429
+ .ef-work-queue__item p { margin: 0.25rem 0 0; }
1430
+
1431
+ /* Feedback ------------------------------------------------------------ */
1432
+ .ef-alert,
1433
+ .ef-operation-status {
1434
+ display: grid;
1435
+ grid-template-columns: auto minmax(0, 1fr) auto;
1436
+ gap: 1rem;
1437
+ align-items: start;
1438
+ padding: 1rem;
1439
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1440
+ border-inline-start: 0.35rem solid var(--ef-color-accent-primary, #905831);
1441
+ background: var(--ef-color-surface-primary, #f2efe7);
1442
+ }
1443
+
1444
+ .ef-alert[data-ef-motion-entry] {
1445
+ translate: 0 0;
1446
+ transition: translate var(--ef-motion-inertia-duration) var(--ef-motion-spring-easing);
1447
+ }
1448
+
1449
+ .ef-alert p {
1450
+ color: var(--ef-color-text-primary, #171a18);
1451
+ }
1452
+
1453
+ @starting-style {
1454
+ .ef-alert[data-ef-motion-entry] {
1455
+ translate: 0 -0.5rem;
1456
+ }
1457
+ }
1458
+
1459
+ .ef-toast {
1460
+ position: fixed;
1461
+ inset: auto max(1rem, env(safe-area-inset-right)) max(1rem, env(safe-area-inset-bottom)) auto;
1462
+ max-inline-size: min(26rem, calc(100vw - 2rem));
1463
+ margin: 0;
1464
+ padding: 1rem;
1465
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1466
+ border-inline-start: 0.35rem solid var(--ef-color-accent-primary, #905831);
1467
+ background: var(--ef-color-surface-primary, #f2efe7);
1468
+ color: var(--ef-color-text-primary, #171a18);
1469
+ box-shadow: 0 1rem 3rem rgb(0 0 0 / 0.18);
1470
+ opacity: 0;
1471
+ translate: 0 0.65rem;
1472
+ scale: 0.99;
1473
+ transition:
1474
+ opacity var(--ef-motion-exit-duration) linear,
1475
+ translate var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
1476
+ scale var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
1477
+ display var(--ef-motion-exit-duration) allow-discrete,
1478
+ overlay var(--ef-motion-exit-duration) allow-discrete;
1479
+ }
1480
+
1481
+ .ef-toast:popover-open {
1482
+ opacity: 1;
1483
+ translate: 0 0;
1484
+ scale: 1;
1485
+ transition-duration:
1486
+ var(--ef-motion-state-duration),
1487
+ var(--ef-motion-inertia-duration),
1488
+ var(--ef-motion-inertia-duration),
1489
+ var(--ef-motion-inertia-duration),
1490
+ var(--ef-motion-inertia-duration);
1491
+ }
1492
+
1493
+ @starting-style {
1494
+ .ef-toast:popover-open {
1495
+ opacity: 0;
1496
+ translate: 0 0.65rem;
1497
+ scale: 0.99;
1498
+ }
1499
+ }
1500
+
1501
+ .ef-toast__header {
1502
+ display: flex;
1503
+ justify-content: space-between;
1504
+ gap: 1rem;
1505
+ align-items: start;
1506
+ }
1507
+
1508
+ .ef-toast__title { margin: 0; }
1509
+ .ef-toast p { margin-block: 0.35rem 0; }
1510
+
1511
+ .ef-alert__icon,
1512
+ .ef-operation-status__symbol,
1513
+ .ef-empty-state__symbol {
1514
+ display: grid;
1515
+ place-items: center;
1516
+ inline-size: 2rem;
1517
+ block-size: 2rem;
1518
+ border: 1px solid currentColor;
1519
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1520
+ font-weight: 700;
1521
+ }
1522
+
1523
+ .ef-alert__title,
1524
+ .ef-operation-status h3 { margin: 0 0 0.25rem; }
1525
+
1526
+ .ef-empty-state {
1527
+ display: grid;
1528
+ justify-items: center;
1529
+ gap: 0.75rem;
1530
+ padding: clamp(2rem, 8vw, 5rem) 1.25rem;
1531
+ border: 1px dashed var(--ef-color-border-functional, #3a403c);
1532
+ text-align: center;
1533
+ }
1534
+
1535
+ .ef-empty-state h3,
1536
+ .ef-empty-state p { margin: 0; }
1537
+
1538
+ .ef-skeleton {
1539
+ display: grid;
1540
+ gap: 0.75rem;
1541
+ padding: 1rem;
1542
+ border: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1543
+ }
1544
+
1545
+ .ef-skeleton__line {
1546
+ block-size: 0.9rem;
1547
+ inline-size: 100%;
1548
+ background: linear-gradient(90deg,
1549
+ var(--ef-color-surface-secondary, #e3e0d7),
1550
+ color-mix(in srgb, var(--ef-color-surface-secondary, #e3e0d7) 55%, var(--ef-color-surface-primary, #f2efe7)),
1551
+ var(--ef-color-surface-secondary, #e3e0d7));
1552
+ background-size: 200% 100%;
1553
+ animation: ef-skeleton-shift 1.6s linear infinite;
1554
+ }
1555
+
1556
+ .ef-skeleton__line--title { inline-size: 55%; block-size: 1.4rem; }
1557
+ .ef-skeleton__line--short { inline-size: 72%; }
1558
+
1559
+ @keyframes ef-skeleton-shift {
1560
+ to { background-position: -200% 0; }
1561
+ }
1562
+
1563
+ /* Wizard and checklist ------------------------------------------------ */
1564
+ .ef-wizard,
1565
+ .ef-readiness-checklist {
1566
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1567
+ }
1568
+
1569
+ .ef-wizard__header,
1570
+ .ef-wizard__actions,
1571
+ .ef-readiness-checklist > header {
1572
+ padding: 1rem;
1573
+ }
1574
+
1575
+ .ef-wizard__header {
1576
+ display: grid;
1577
+ grid-template-columns: minmax(0, 1fr) minmax(10rem, 0.4fr);
1578
+ gap: 1rem;
1579
+ align-items: center;
1580
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1581
+ }
1582
+
1583
+ .ef-wizard__position {
1584
+ color: var(--ef-color-text-secondary, #686d68);
1585
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1586
+ font-size: 0.75rem;
1587
+ }
1588
+
1589
+ .ef-wizard__header h3 { margin: 0.25rem 0 0; }
1590
+ .ef-wizard__header progress { inline-size: 100%; }
1591
+
1592
+ .ef-wizard__steps {
1593
+ display: grid;
1594
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1595
+ margin: 0;
1596
+ padding: 1rem;
1597
+ list-style: none;
1598
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1599
+ }
1600
+
1601
+ .ef-wizard__steps li {
1602
+ display: flex;
1603
+ gap: 0.5rem;
1604
+ align-items: center;
1605
+ color: var(--ef-color-text-secondary, #686d68);
1606
+ font-size: 0.8125rem;
1607
+ }
1608
+
1609
+ .ef-wizard__steps li > span {
1610
+ display: grid;
1611
+ place-items: center;
1612
+ inline-size: 1.75rem;
1613
+ block-size: 1.75rem;
1614
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1615
+ border-radius: 50%;
1616
+ }
1617
+
1618
+ .ef-wizard__steps [data-state="complete"] > span::after { content: "✓"; position: absolute; }
1619
+ .ef-wizard__steps [data-state="current"] { color: var(--ef-color-text-primary, #171a18); font-weight: 700; }
1620
+ .ef-wizard__steps [data-state="current"] > span { background: var(--ef-color-surface-inverse, #202421); color: var(--ef-color-text-inverse, #f2efe7); }
1621
+ .ef-wizard__body { padding: 1.25rem; }
1622
+ .ef-wizard__actions { justify-content: space-between; border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7); }
1623
+
1624
+ .ef-readiness-checklist > header { border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7); }
1625
+ .ef-readiness-checklist > header h3 { margin: 0.5rem 0 0; }
1626
+ .ef-readiness-checklist__items { margin: 0; padding: 0; list-style: none; }
1627
+ .ef-readiness-checklist__items li {
1628
+ display: grid;
1629
+ grid-template-columns: 2rem minmax(0, 1fr) auto;
1630
+ gap: 0.75rem;
1631
+ align-items: center;
1632
+ min-block-size: 3rem;
1633
+ padding: 0.65rem 1rem;
1634
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1635
+ }
1636
+ .ef-readiness-checklist__items li:last-child { border-block-end: 0; }
1637
+ .ef-readiness-checklist__items [data-state="complete"] > :first-child { font-weight: 800; }
1638
+ .ef-readiness-checklist__items [data-state="blocked"] { border-inline-start: 0.35rem solid var(--ef-color-accent-primary, #905831); }
1639
+
1640
+ /* Command palette ----------------------------------------------------- */
1641
+ .ef-command-palette {
1642
+ inline-size: min(42rem, calc(100vw - 2rem));
1643
+ max-block-size: min(40rem, calc(100dvh - 2rem));
1644
+ margin: auto;
1645
+ padding: 0;
1646
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1647
+ background: var(--ef-color-surface-primary, #f2efe7);
1648
+ color: var(--ef-color-text-primary, #171a18);
1649
+ opacity: 0;
1650
+ translate: 0 0.75rem;
1651
+ scale: 0.985;
1652
+ transition:
1653
+ opacity var(--ef-motion-exit-duration) linear,
1654
+ translate var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
1655
+ scale var(--ef-motion-exit-duration) var(--ef-motion-damped-easing),
1656
+ display var(--ef-motion-exit-duration) allow-discrete,
1657
+ overlay var(--ef-motion-exit-duration) allow-discrete;
1658
+ }
1659
+
1660
+ .ef-command-palette[open] {
1661
+ opacity: 1;
1662
+ translate: 0 0;
1663
+ scale: 1;
1664
+ transition-duration:
1665
+ var(--ef-motion-state-duration),
1666
+ var(--ef-motion-inertia-duration),
1667
+ var(--ef-motion-inertia-duration),
1668
+ var(--ef-motion-inertia-duration),
1669
+ var(--ef-motion-inertia-duration);
1670
+ }
1671
+
1672
+ @starting-style {
1673
+ .ef-command-palette[open] {
1674
+ opacity: 0;
1675
+ translate: 0 0.75rem;
1676
+ scale: 0.985;
1677
+ }
1678
+ }
1679
+
1680
+ .ef-command-palette__header {
1681
+ display: flex;
1682
+ justify-content: space-between;
1683
+ align-items: center;
1684
+ padding: 1rem;
1685
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1686
+ }
1687
+
1688
+ .ef-command-palette__header h3 { margin: 0; }
1689
+ .ef-command-palette > input { border-inline: 0; }
1690
+ .ef-command-palette__group { padding: 1rem; }
1691
+ .ef-command-palette__group h4 { margin-block: 0 0.5rem; }
1692
+ .ef-command-palette__group button {
1693
+ inline-size: 100%;
1694
+ display: flex;
1695
+ justify-content: space-between;
1696
+ gap: 1rem;
1697
+ text-align: start;
1698
+ border-inline: 0;
1699
+ border-block-end: 0;
1700
+ }
1701
+ .ef-command-palette__group button:last-child { border-block-end: 1px solid var(--ef-color-border-functional, #3a403c); }
1702
+ .ef-command-palette kbd {
1703
+ padding: 0.1rem 0.35rem;
1704
+ border: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1705
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1706
+ }
1707
+
1708
+ /* Combobox and date range -------------------------------------------- */
1709
+ .ef-combobox,
1710
+ .ef-date-range {
1711
+ display: grid;
1712
+ gap: 0.5rem;
1713
+ }
1714
+
1715
+ .ef-date-range {
1716
+ min-inline-size: 0;
1717
+ inline-size: 100%;
1718
+ max-inline-size: 100%;
1719
+ margin: 0;
1720
+ }
1721
+
1722
+ .ef-combobox > label,
1723
+ .ef-date-range legend {
1724
+ font-size: 0.8125rem;
1725
+ font-weight: 650;
1726
+ }
1727
+
1728
+ .ef-combobox__control { position: relative; }
1729
+ .ef-combobox__indicator {
1730
+ position: absolute;
1731
+ inset-inline-end: 0.8rem;
1732
+ inset-block-start: 50%;
1733
+ translate: 0 -50%;
1734
+ pointer-events: none;
1735
+ }
1736
+
1737
+ .ef-date-range__fields {
1738
+ display: grid;
1739
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
1740
+ gap: 0.75rem;
1741
+ align-items: end;
1742
+ }
1743
+
1744
+ .ef-date-range__fields label {
1745
+ min-inline-size: 0;
1746
+ display: grid;
1747
+ gap: 0.35rem;
1748
+ }
1749
+
1750
+ .ef-date-range__fields input[type="date"] {
1751
+ min-inline-size: 0;
1752
+ inline-size: 100%;
1753
+ max-inline-size: 100%;
1754
+ }
1755
+
1756
+ .ef-date-range__separator { padding-block-end: 0.75rem; }
1757
+
1758
+ /* Upload -------------------------------------------------------------- */
1759
+ .ef-file-upload {
1760
+ display: grid;
1761
+ gap: 1rem;
1762
+ }
1763
+
1764
+ .ef-file-upload__drop {
1765
+ padding: 1.5rem;
1766
+ border: 1px dashed var(--ef-color-border-functional, #3a403c);
1767
+ background: var(--ef-color-surface-secondary, #e3e0d7);
1768
+ }
1769
+
1770
+ .ef-file-upload__drop h3 { margin-block-start: 0; }
1771
+ .ef-file-upload__drop .ef-button { display: inline-flex; align-items: center; cursor: pointer; }
1772
+ .ef-file-upload__drop input[type="file"] {
1773
+ position: absolute;
1774
+ inline-size: 1px;
1775
+ block-size: 1px;
1776
+ opacity: 0;
1777
+ }
1778
+
1779
+ .ef-file-upload__queue {
1780
+ margin: 0;
1781
+ padding: 0;
1782
+ list-style: none;
1783
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1784
+ }
1785
+
1786
+ .ef-file-upload__queue li {
1787
+ display: grid;
1788
+ grid-template-columns: minmax(0, 1fr) minmax(8rem, 0.5fr) auto;
1789
+ gap: 1rem;
1790
+ align-items: center;
1791
+ padding-block: 0.75rem;
1792
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1793
+ }
1794
+
1795
+ .ef-file-upload__queue small { display: block; color: var(--ef-color-text-secondary, #686d68); }
1796
+ .ef-file-upload__queue progress { inline-size: 100%; }
1797
+
1798
+ /* Record header and master/detail ------------------------------------ */
1799
+ .ef-record-header {
1800
+ display: grid;
1801
+ grid-template-columns: minmax(0, 1fr) auto;
1802
+ gap: 2rem;
1803
+ align-items: end;
1804
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1805
+ }
1806
+
1807
+ .ef-record-header__main nav { font-size: 0.75rem; }
1808
+ .ef-record-header__title {
1809
+ display: flex;
1810
+ flex-wrap: wrap;
1811
+ gap: 1rem;
1812
+ align-items: center;
1813
+ margin-block: 0.75rem 0;
1814
+ }
1815
+ .ef-record-header__title h2 { margin: 0.15rem 0 0; }
1816
+ .ef-record-header__type {
1817
+ color: var(--ef-color-accent-secondary, #47756b);
1818
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1819
+ font-size: 0.6875rem;
1820
+ letter-spacing: 0.08em;
1821
+ text-transform: uppercase;
1822
+ }
1823
+ .ef-record-header__main > p { margin: 0; }
1824
+ .ef-record-header__actions { display: flex; flex-wrap: wrap; gap: 0.5rem; }
1825
+ .ef-record-header__actions details { position: relative; }
1826
+ .ef-record-header__actions summary {
1827
+ min-block-size: 2.75rem;
1828
+ display: grid;
1829
+ place-items: center;
1830
+ padding: 0.65rem 1rem;
1831
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1832
+ cursor: pointer;
1833
+ font-weight: 700;
1834
+ }
1835
+ .ef-record-header__menu {
1836
+ position: absolute;
1837
+ z-index: 3;
1838
+ inset-inline-end: 0;
1839
+ min-inline-size: 10rem;
1840
+ padding: 0.5rem;
1841
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1842
+ background: var(--ef-color-surface-primary, #f2efe7);
1843
+ }
1844
+ .ef-record-header__menu button { inline-size: 100%; }
1845
+
1846
+ .ef-master-detail {
1847
+ display: grid;
1848
+ grid-template-columns: minmax(12rem, 0.4fr) minmax(0, 1fr);
1849
+ min-block-size: 22rem;
1850
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1851
+ }
1852
+
1853
+ .ef-master-detail__master {
1854
+ border-inline-end: 1px solid var(--ef-color-border-functional, #3a403c);
1855
+ }
1856
+
1857
+ .ef-master-detail__master a {
1858
+ display: grid;
1859
+ gap: 0.15rem;
1860
+ min-block-size: 3.5rem;
1861
+ padding: 0.75rem;
1862
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1863
+ color: var(--ef-color-text-primary, #171a18);
1864
+ text-decoration: none;
1865
+ }
1866
+
1867
+ .ef-master-detail__master a[aria-current="page"] {
1868
+ border-inline-start: 0.35rem solid var(--ef-color-accent-primary, #905831);
1869
+ background: var(--ef-color-surface-secondary, #e3e0d7);
1870
+ }
1871
+
1872
+ .ef-master-detail__master span { color: var(--ef-color-text-secondary, #686d68); font-size: 0.75rem; }
1873
+ .ef-master-detail__detail { padding: 1.25rem; min-inline-size: 0; }
1874
+
1875
+ .ef-key-value-list { margin: 1rem 0 0; }
1876
+ .ef-key-value-list > div {
1877
+ display: grid;
1878
+ grid-template-columns: minmax(7rem, 0.35fr) minmax(0, 1fr);
1879
+ gap: 1rem;
1880
+ padding-block: 0.5rem;
1881
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1882
+ }
1883
+
1884
+ /* Provenance and preview --------------------------------------------- */
1885
+ .ef-provenance-trail {
1886
+ padding: 1rem;
1887
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1888
+ }
1889
+
1890
+ .ef-provenance-trail h3 { margin-block-start: 0; }
1891
+ .ef-provenance-trail ol { margin: 0; padding: 0; list-style: none; }
1892
+ .ef-provenance-trail li {
1893
+ position: relative;
1894
+ display: grid;
1895
+ gap: 0.2rem;
1896
+ padding: 0.75rem 0 0.75rem 2rem;
1897
+ }
1898
+ .ef-provenance-trail li::before {
1899
+ content: "";
1900
+ position: absolute;
1901
+ inset-inline-start: 0.45rem;
1902
+ inset-block-start: 1.15rem;
1903
+ inline-size: 0.7rem;
1904
+ block-size: 0.7rem;
1905
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1906
+ background: var(--ef-color-surface-primary, #f2efe7);
1907
+ rotate: 45deg;
1908
+ }
1909
+ .ef-provenance-trail li:not(:last-child)::after {
1910
+ content: "";
1911
+ position: absolute;
1912
+ inset-inline-start: 0.78rem;
1913
+ inset-block: 1.85rem -0.2rem;
1914
+ border-inline-start: 1px solid var(--ef-color-border-functional, #3a403c);
1915
+ }
1916
+ .ef-provenance-trail__kind,
1917
+ .ef-provenance-trail small {
1918
+ color: var(--ef-color-text-secondary, #686d68);
1919
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
1920
+ font-size: 0.6875rem;
1921
+ }
1922
+
1923
+ .ef-preview-surface {
1924
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1925
+ }
1926
+ .ef-preview-surface__header {
1927
+ display: flex;
1928
+ justify-content: space-between;
1929
+ gap: 1rem;
1930
+ align-items: center;
1931
+ }
1932
+ .ef-preview-surface__canvas {
1933
+ padding: clamp(1rem, 4vw, 3rem);
1934
+ background: var(--ef-color-surface-secondary, #e3e0d7);
1935
+ }
1936
+ .ef-preview-surface__canvas > article {
1937
+ max-inline-size: 42rem;
1938
+ margin-inline: auto;
1939
+ padding: clamp(1rem, 4vw, 2.5rem);
1940
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1941
+ background: var(--ef-color-surface-primary, #f2efe7);
1942
+ }
1943
+ .ef-preview-surface__footer {
1944
+ justify-content: space-between;
1945
+ padding: 1rem;
1946
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
1947
+ }
1948
+
1949
+ /* Mobile action bar --------------------------------------------------- */
1950
+ .ef-mobile-action-bar {
1951
+ display: flex;
1952
+ gap: 0.5rem;
1953
+ padding: 0.75rem;
1954
+ padding-block-end: max(0.75rem, env(safe-area-inset-bottom));
1955
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
1956
+ background: color-mix(in srgb, var(--ef-color-surface-primary, #f2efe7) 94%, transparent);
1957
+ backdrop-filter: blur(10px);
1958
+ }
1959
+
1960
+ .ef-mobile-action-bar > * { flex: 1 1 0; }
1961
+ .ef-mobile-action-bar__primary {
1962
+ background: var(--ef-color-surface-inverse, #202421);
1963
+ color: var(--ef-color-text-inverse, #f2efe7);
1964
+ }
1965
+
1966
+ /* Mobile recomposition ------------------------------------------------ */
1967
+ @media (max-width: 40rem) {
1968
+ .ef-collection-toolbar {
1969
+ grid-template-columns: 1fr auto;
1970
+ align-items: start;
1971
+ }
1972
+ .ef-collection-toolbar__search { grid-column: 1 / -1; }
1973
+ .ef-collection-toolbar__controls { grid-column: 1 / -1; }
1974
+ .ef-collection-toolbar__controls > * { flex: 1 1 9rem; }
1975
+ .ef-collection-toolbar__filters { position: static; }
1976
+ .ef-collection-toolbar__filter-panel {
1977
+ position: static;
1978
+ min-inline-size: 0;
1979
+ inline-size: 100%;
1980
+ max-inline-size: 100%;
1981
+ margin-block-start: 0.5rem;
1982
+ box-shadow: none;
1983
+ }
1984
+ .ef-collection-toolbar__count { margin: 0; align-self: center; }
1985
+
1986
+ .ef-dashboard-grid { grid-template-columns: 1fr; }
1987
+
1988
+ .ef-work-queue__item,
1989
+ .ef-alert,
1990
+ .ef-operation-status,
1991
+ .ef-record-header,
1992
+ .ef-file-upload__queue li {
1993
+ grid-template-columns: 1fr;
1994
+ }
1995
+
1996
+ .ef-work-queue__item button,
1997
+ .ef-alert > button,
1998
+ .ef-operation-status__actions button,
1999
+ .ef-record-header__actions > *,
2000
+ .ef-file-upload__queue button {
2001
+ inline-size: 100%;
2002
+ }
2003
+
2004
+ .ef-diff-viewer__grid { grid-template-columns: 1fr; }
2005
+ .ef-diff-viewer__side + .ef-diff-viewer__side {
2006
+ border-inline-start: 0;
2007
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2008
+ }
2009
+
2010
+ .ef-wizard__header { grid-template-columns: 1fr; }
2011
+ .ef-wizard__steps li:not([data-state="current"]) { display: none; }
2012
+ .ef-wizard__steps { grid-template-columns: 1fr; }
2013
+ .ef-wizard__steps [data-state="current"]::after {
2014
+ content: "Current step";
2015
+ margin-inline-start: auto;
2016
+ color: var(--ef-color-text-secondary, #686d68);
2017
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2018
+ font-size: 0.6875rem;
2019
+ font-weight: 400;
2020
+ }
2021
+
2022
+ .ef-readiness-checklist__items li { grid-template-columns: 2rem minmax(0, 1fr); }
2023
+ .ef-readiness-checklist__items li > :last-child:not(:nth-child(2)) { grid-column: 2; justify-self: start; }
2024
+
2025
+ .ef-date-range__fields { grid-template-columns: 1fr; }
2026
+ .ef-date-range__separator { display: none; }
2027
+
2028
+ .ef-command-palette {
2029
+ inline-size: 100vw;
2030
+ block-size: 100dvh;
2031
+ max-block-size: 100dvh;
2032
+ border: 0;
2033
+ }
2034
+
2035
+ .ef-master-detail { grid-template-columns: 1fr; }
2036
+ .ef-master-detail__master {
2037
+ display: flex;
2038
+ max-inline-size: 100%;
2039
+ overflow-x: auto;
2040
+ border-inline-end: 0;
2041
+ border-block-end: 1px solid var(--ef-color-border-functional, #3a403c);
2042
+ }
2043
+ .ef-master-detail__master a { flex: 0 0 12rem; }
2044
+
2045
+ .ef-preview-surface__header,
2046
+ .ef-preview-surface__footer { align-items: stretch; flex-direction: column; }
2047
+
2048
+ .ef-pagination {
2049
+ justify-content: space-between;
2050
+ }
2051
+ .ef-pagination__pages li:not(:has([aria-current="page"])) { display: none; }
2052
+ .ef-pagination__summary { order: 4; inline-size: 100%; text-align: center; }
2053
+
2054
+ .ef-mobile-action-bar {
2055
+ position: sticky;
2056
+ inset-block-end: 0;
2057
+ z-index: 8;
2058
+ }
2059
+ }
2060
+
2061
+ @media (max-width: 30rem) {
2062
+ .ef-data-grid { overflow: visible; border: 0; }
2063
+ .ef-data-grid table,
2064
+ .ef-data-grid tbody,
2065
+ .ef-data-grid tr,
2066
+ .ef-data-grid td { display: block; min-inline-size: 0; inline-size: 100%; }
2067
+ .ef-data-grid thead { display: none; }
2068
+ .ef-data-grid tr {
2069
+ margin-block-end: 0.75rem;
2070
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2071
+ }
2072
+ .ef-data-grid td {
2073
+ display: grid;
2074
+ grid-template-columns: minmax(6.5rem, 0.4fr) minmax(0, 1fr);
2075
+ gap: 0.75rem;
2076
+ padding: 0.65rem;
2077
+ }
2078
+ .ef-data-grid td::before {
2079
+ content: attr(data-label);
2080
+ color: var(--ef-color-text-secondary, #686d68);
2081
+ font-size: 0.75rem;
2082
+ font-weight: 650;
2083
+ }
2084
+ .ef-data-grid td[data-label="Actions"] > * { inline-size: 100%; }
2085
+
2086
+ .ef-search__control { grid-template-columns: 1fr; }
2087
+ .ef-search__control input { border-inline-end: 1px solid var(--ef-color-border-functional, #3a403c); border-block-end: 0; }
2088
+
2089
+ .ef-work-queue__header { display: grid; }
2090
+ .ef-diff-row,
2091
+ .ef-key-value-list > div { grid-template-columns: 1fr; gap: 0.25rem; }
2092
+
2093
+ .ef-status-lozenge-set { align-items: stretch; }
2094
+ .ef-status-lozenge-set .ef-status-lozenge { flex: 1 1 100%; justify-content: center; }
2095
+ }
2096
+
2097
+ @media (max-width: 44rem) {
2098
+ .ef-segmented {
2099
+ inline-size: 100%;
2100
+ }
2101
+
2102
+ .ef-segment {
2103
+ flex: 1 1 min(10rem, 100%);
2104
+ }
2105
+
2106
+ .ef-popover,
2107
+ .ef-menu {
2108
+ max-inline-size: calc(100vw - 1rem);
2109
+ max-block-size: calc(100dvh - 1rem);
2110
+ }
2111
+
2112
+ .ef-dialog {
2113
+ inline-size: calc(100vw - 1rem);
2114
+ max-block-size: calc(100dvh - 1rem);
2115
+ }
2116
+
2117
+ .ef-dialog__body {
2118
+ padding: var(--ef-primitive-spacing-4, 1rem);
2119
+ }
2120
+
2121
+ .ef-dialog__actions {
2122
+ justify-content: stretch;
2123
+ padding: 0.75rem var(--ef-primitive-spacing-4, 1rem);
2124
+ }
2125
+
2126
+ .ef-dialog__actions > :where(button, .ef-button) {
2127
+ flex: 1 1 100%;
2128
+ }
2129
+ }
2130
+
2131
+ @media (prefers-reduced-motion: reduce) {
2132
+ .ef-switch__track,
2133
+ .ef-switch__track::after,
2134
+ .ef-slider__input,
2135
+ .ef-segment,
2136
+ .ef-disclosure > summary::after,
2137
+ .ef-disclosure__content,
2138
+ .ef-popover,
2139
+ .ef-menu,
2140
+ .ef-dialog,
2141
+ .ef-flyout,
2142
+ .ef-tabs__list [role="tab"],
2143
+ .ef-tabs__list [role="tab"]::after,
2144
+ .ef-tabs__panel[data-ef-motion-entry],
2145
+ .ef-alert[data-ef-motion-entry],
2146
+ .ef-toast,
2147
+ .ef-command-palette {
2148
+ transition-duration: 0.01ms;
2149
+ }
2150
+ }
2151
+
2152
+ @media (forced-colors: active) {
2153
+ .ef-switch__track,
2154
+ .ef-segmented,
2155
+ .ef-popover,
2156
+ .ef-menu,
2157
+ .ef-dialog,
2158
+ .ef-flyout,
2159
+ .ef-toast {
2160
+ border-color: CanvasText;
2161
+ }
2162
+
2163
+ .ef-switch__track { background: Canvas; }
2164
+ .ef-switch__track::after { background: Canvas; border-color: CanvasText; box-shadow: none; }
2165
+ .ef-switch__input:checked + .ef-switch__track { background: Highlight; }
2166
+ .ef-switch__input:checked + .ef-switch__track::after { background: HighlightText; }
2167
+ .ef-segment:has(input:checked) { background: Highlight; color: HighlightText; }
2168
+ }
2169
+
2170
+ /* Agent and natural-language interaction ------------------------------- */
2171
+ .ef-composer {
2172
+ display: grid;
2173
+ gap: 1rem;
2174
+ min-inline-size: 0;
2175
+ padding: clamp(1rem, 3vw, 1.5rem);
2176
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2177
+ background: var(--ef-color-surface-primary, #f2efe7);
2178
+ }
2179
+
2180
+ .ef-composer__context { display: grid; gap: 0.35rem; }
2181
+ .ef-composer__context h2,
2182
+ .ef-conversation__header h2,
2183
+ .ef-understanding__header h2 { margin: 0; }
2184
+ .ef-composer__context p,
2185
+ .ef-understanding__header p { margin: 0; color: var(--ef-color-text-secondary, #686d68); }
2186
+
2187
+ .ef-composer__field { display: grid; }
2188
+ .ef-composer__field textarea {
2189
+ inline-size: 100%;
2190
+ min-block-size: 8rem;
2191
+ resize: vertical;
2192
+ }
2193
+
2194
+ .ef-composer__actions {
2195
+ display: flex;
2196
+ justify-content: space-between;
2197
+ align-items: center;
2198
+ gap: 0.75rem;
2199
+ }
2200
+
2201
+ .ef-composer__input-actions,
2202
+ .ef-turn__actions {
2203
+ display: flex;
2204
+ flex-wrap: wrap;
2205
+ gap: 0.5rem;
2206
+ }
2207
+
2208
+ .ef-composer__submit {
2209
+ background: var(--ef-color-surface-inverse, #202421);
2210
+ color: var(--ef-color-text-inverse, #f2efe7);
2211
+ }
2212
+
2213
+ .ef-composer__status {
2214
+ margin: 0;
2215
+ color: var(--ef-color-text-secondary, #686d68);
2216
+ font-size: 0.75rem;
2217
+ }
2218
+
2219
+ .ef-conversation {
2220
+ min-inline-size: 0;
2221
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2222
+ }
2223
+
2224
+ .ef-conversation__header {
2225
+ padding: 1rem;
2226
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2227
+ }
2228
+
2229
+ .ef-conversation__turns {
2230
+ display: grid;
2231
+ gap: 0;
2232
+ margin: 0;
2233
+ padding: 0;
2234
+ list-style: none;
2235
+ }
2236
+
2237
+ .ef-turn {
2238
+ display: grid;
2239
+ grid-template-columns: minmax(6rem, 0.22fr) minmax(0, 1fr);
2240
+ gap: 0.75rem 1rem;
2241
+ padding: 1rem;
2242
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2243
+ }
2244
+
2245
+ .ef-turn[data-ef-speaker="assistant"] {
2246
+ background: var(--ef-color-surface-secondary, #e3e0d7);
2247
+ }
2248
+
2249
+ .ef-turn__speaker {
2250
+ margin: 0;
2251
+ color: var(--ef-color-text-secondary, #686d68);
2252
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2253
+ font-size: 0.6875rem;
2254
+ font-weight: 800;
2255
+ letter-spacing: 0.04em;
2256
+ text-transform: uppercase;
2257
+ }
2258
+
2259
+ .ef-turn__content { min-inline-size: 0; }
2260
+ .ef-turn__content > :first-child { margin-block-start: 0; }
2261
+ .ef-turn__content > :last-child { margin-block-end: 0; }
2262
+ .ef-turn__actions { grid-column: 2; }
2263
+
2264
+ .ef-understanding {
2265
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2266
+ }
2267
+
2268
+ .ef-understanding__header {
2269
+ display: flex;
2270
+ justify-content: space-between;
2271
+ align-items: start;
2272
+ gap: 1rem;
2273
+ padding: 1rem;
2274
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2275
+ }
2276
+
2277
+ .ef-understanding__items {
2278
+ margin: 0;
2279
+ padding: 0;
2280
+ list-style: none;
2281
+ }
2282
+
2283
+ .ef-understanding__item {
2284
+ display: grid;
2285
+ grid-template-columns: minmax(6rem, auto) minmax(0, 1fr) auto;
2286
+ align-items: center;
2287
+ gap: 1rem;
2288
+ padding: 1rem;
2289
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2290
+ }
2291
+
2292
+ .ef-understanding__item[data-ef-state="unknown"],
2293
+ .ef-understanding__item[data-ef-state="conflict"] {
2294
+ border-inline-start: 0.3rem solid var(--ef-color-accent-primary, #905831);
2295
+ padding-inline-start: 0.7rem;
2296
+ }
2297
+
2298
+ .ef-understanding__state {
2299
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2300
+ font-size: 0.6875rem;
2301
+ font-weight: 800;
2302
+ letter-spacing: 0.04em;
2303
+ text-transform: uppercase;
2304
+ }
2305
+
2306
+ .ef-understanding__item[data-ef-state="accepted"] .ef-understanding__state::before { content: "✓ "; }
2307
+ .ef-understanding__item[data-ef-state="unknown"] .ef-understanding__state::before { content: "? "; }
2308
+ .ef-understanding__item[data-ef-state="conflict"] .ef-understanding__state::before { content: "! "; }
2309
+ .ef-understanding__item p { margin: 0.2rem 0 0; color: var(--ef-color-text-secondary, #686d68); }
2310
+
2311
+ @media (max-width: 40rem) {
2312
+ .ef-composer__actions,
2313
+ .ef-understanding__header { align-items: stretch; flex-direction: column; }
2314
+
2315
+ .ef-composer__input-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
2316
+ .ef-composer__actions button { min-block-size: 2.75rem; }
2317
+ .ef-composer__submit { inline-size: 100%; }
2318
+
2319
+ .ef-turn { grid-template-columns: 1fr; }
2320
+ .ef-turn__actions { grid-column: 1; }
2321
+ .ef-turn__actions button { inline-size: 100%; }
2322
+
2323
+ .ef-understanding__item { grid-template-columns: 1fr; align-items: stretch; }
2324
+ .ef-understanding__item button { inline-size: 100%; }
2325
+ }
2326
+
2327
+ @media (forced-colors: active) {
2328
+ .ef-composer,
2329
+ .ef-conversation,
2330
+ .ef-understanding,
2331
+ .ef-understanding__item[data-ef-state="unknown"],
2332
+ .ef-understanding__item[data-ef-state="conflict"] {
2333
+ border-color: CanvasText;
2334
+ }
2335
+ }
2336
+
2337
+ }
2338
+
2339
+ @layer echelon.assessment {
2340
+ /* Question shell ------------------------------------------------------ */
2341
+ .ef-question {
2342
+ display: grid;
2343
+ gap: var(--ef-primitive-spacing-4, 1rem);
2344
+ padding-block: var(--ef-primitive-spacing-5, 1.5rem);
2345
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2346
+ }
2347
+
2348
+ .ef-question__header {
2349
+ display: grid;
2350
+ grid-template-columns: auto minmax(0, 1fr);
2351
+ align-items: start;
2352
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
2353
+ }
2354
+
2355
+ .ef-question__number {
2356
+ min-inline-size: 2rem;
2357
+ block-size: 2rem;
2358
+ display: grid;
2359
+ place-items: center;
2360
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2361
+ border-radius: 50%;
2362
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2363
+ font-size: 0.75rem;
2364
+ font-weight: 700;
2365
+ }
2366
+
2367
+ .ef-question__prompt {
2368
+ margin: 0;
2369
+ color: var(--ef-color-text-heading, #202421);
2370
+ font-family: var(--ef-primitive-font-family-sans, system-ui, sans-serif);
2371
+ font-size: clamp(1rem, 0.95rem + 0.25vw, 1.2rem);
2372
+ font-weight: 700;
2373
+ letter-spacing: 0;
2374
+ line-height: 1.35;
2375
+ }
2376
+
2377
+ .ef-question__help {
2378
+ margin: 0.35rem 0 0;
2379
+ color: var(--ef-color-text-secondary, #686d68);
2380
+ font-size: 0.875rem;
2381
+ }
2382
+
2383
+ .ef-question__body { min-inline-size: 0; }
2384
+
2385
+ /* Ordinal / Likert scale --------------------------------------------- */
2386
+ .ef-ordinal-scale,
2387
+ .ef-choice-group,
2388
+ .ef-special-choice-group,
2389
+ .ef-ranking,
2390
+ .ef-allocation {
2391
+ min-inline-size: 0;
2392
+ margin: 0;
2393
+ padding: 0;
2394
+ border: 0;
2395
+ }
2396
+
2397
+ .ef-ordinal-scale__legend,
2398
+ .ef-choice-group__legend,
2399
+ .ef-ranking__legend,
2400
+ .ef-allocation__legend {
2401
+ margin-block-end: var(--ef-primitive-spacing-3, 0.75rem);
2402
+ color: var(--ef-color-text-primary, #171a18);
2403
+ font-size: 1rem;
2404
+ font-weight: 700;
2405
+ line-height: 1.4;
2406
+ }
2407
+
2408
+ .ef-ordinal-scale__options {
2409
+ display: grid;
2410
+ grid-template-columns: repeat(5, minmax(0, 1fr));
2411
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2412
+ }
2413
+
2414
+ .ef-ordinal-scale--3 .ef-ordinal-scale__options { grid-template-columns: repeat(3, minmax(0, 1fr)); }
2415
+ .ef-ordinal-scale--4 .ef-ordinal-scale__options { grid-template-columns: repeat(4, minmax(0, 1fr)); }
2416
+ .ef-ordinal-scale--5 .ef-ordinal-scale__options { grid-template-columns: repeat(5, minmax(0, 1fr)); }
2417
+ .ef-ordinal-scale--6 .ef-ordinal-scale__options { grid-template-columns: repeat(6, minmax(0, 1fr)); }
2418
+ .ef-ordinal-scale--7 .ef-ordinal-scale__options { grid-template-columns: repeat(7, minmax(0, 1fr)); }
2419
+ .ef-ordinal-scale--10 .ef-ordinal-scale__options { grid-template-columns: repeat(10, minmax(0, 1fr)); }
2420
+ .ef-ordinal-scale--11 .ef-ordinal-scale__options { grid-template-columns: repeat(11, minmax(0, 1fr)); }
2421
+
2422
+ .ef-ordinal-option {
2423
+ position: relative;
2424
+ min-inline-size: 0;
2425
+ min-block-size: 5.5rem;
2426
+ display: grid;
2427
+ grid-template-rows: auto 1fr;
2428
+ place-items: center;
2429
+ gap: 0.45rem;
2430
+ padding: 0.75rem 0.45rem;
2431
+ background: var(--ef-color-surface-primary, #f2efe7);
2432
+ color: var(--ef-color-text-primary, #171a18);
2433
+ text-align: center;
2434
+ cursor: pointer;
2435
+ transition:
2436
+ background var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease),
2437
+ color var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease),
2438
+ transform var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease);
2439
+ }
2440
+
2441
+ .ef-ordinal-option + .ef-ordinal-option {
2442
+ border-inline-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2443
+ }
2444
+
2445
+ .ef-ordinal-option input,
2446
+ .ef-choice input,
2447
+ .ef-special-choice input {
2448
+ position: absolute;
2449
+ inline-size: 1px;
2450
+ block-size: 1px;
2451
+ opacity: 0;
2452
+ }
2453
+
2454
+ .ef-ordinal-option__marker {
2455
+ inline-size: 2rem;
2456
+ block-size: 2rem;
2457
+ display: grid;
2458
+ place-items: center;
2459
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2460
+ border-radius: 50%;
2461
+ background: var(--ef-color-surface-primary, #f2efe7);
2462
+ color: var(--ef-color-text-primary, #171a18);
2463
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2464
+ font-size: 0.75rem;
2465
+ font-weight: 700;
2466
+ }
2467
+
2468
+ .ef-ordinal-option__label {
2469
+ align-self: start;
2470
+ font-size: 0.8125rem;
2471
+ line-height: 1.25;
2472
+ overflow-wrap: anywhere;
2473
+ }
2474
+
2475
+ .ef-ordinal-option:hover { background: var(--ef-color-surface-secondary, #e3e0d7); }
2476
+ .ef-ordinal-option:has(input:active) { transform: scale(0.985); }
2477
+
2478
+ .ef-ordinal-option:has(input:checked) {
2479
+ background: var(--ef-color-surface-inverse, #202421);
2480
+ color: var(--ef-color-text-inverse, #f2efe7);
2481
+ }
2482
+
2483
+ .ef-ordinal-option:has(input:checked) .ef-ordinal-option__marker {
2484
+ background: var(--ef-color-accent-primary, #905831);
2485
+ color: var(--ef-color-text-inverse, #f2efe7);
2486
+ border-color: currentColor;
2487
+ }
2488
+
2489
+ .ef-ordinal-option:has(input:focus-visible),
2490
+ .ef-choice:has(input:focus-visible),
2491
+ .ef-special-choice:has(input:focus-visible) {
2492
+ z-index: 1;
2493
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
2494
+ outline-offset: 2px;
2495
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
2496
+ }
2497
+
2498
+ /* Special answer states ---------------------------------------------- */
2499
+ .ef-special-choices {
2500
+ display: flex;
2501
+ flex-wrap: wrap;
2502
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
2503
+ margin-block-start: var(--ef-primitive-spacing-3, 0.75rem);
2504
+ padding-block-start: var(--ef-primitive-spacing-3, 0.75rem);
2505
+ border-block-start: 1px dashed var(--ef-color-border-functional, #3a403c);
2506
+ }
2507
+
2508
+ .ef-special-choice {
2509
+ position: relative;
2510
+ min-block-size: 2.75rem;
2511
+ display: inline-flex;
2512
+ align-items: center;
2513
+ padding: 0.55rem 0.85rem;
2514
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2515
+ background: var(--ef-color-surface-primary, #f2efe7);
2516
+ color: var(--ef-color-text-primary, #171a18);
2517
+ cursor: pointer;
2518
+ }
2519
+
2520
+ .ef-special-choice:has(input:checked) {
2521
+ background: var(--ef-color-surface-inverse, #202421);
2522
+ color: var(--ef-color-text-inverse, #f2efe7);
2523
+ }
2524
+
2525
+ /* Choice cards -------------------------------------------------------- */
2526
+ .ef-choice-group {
2527
+ display: grid;
2528
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
2529
+ }
2530
+
2531
+ .ef-choice {
2532
+ position: relative;
2533
+ min-block-size: 3.25rem;
2534
+ display: grid;
2535
+ align-items: center;
2536
+ padding: 0.8rem 1rem 0.8rem 3rem;
2537
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2538
+ background: var(--ef-color-surface-primary, #f2efe7);
2539
+ cursor: pointer;
2540
+ transition:
2541
+ background var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease),
2542
+ border-color var(--ef-primitive-motion-duration-fast, 120ms) var(--ef-primitive-motion-easing-standard, ease);
2543
+ }
2544
+
2545
+ .ef-choice::before {
2546
+ content: "";
2547
+ position: absolute;
2548
+ inset-block-start: 50%;
2549
+ inset-inline-start: 1rem;
2550
+ transform: translateY(-50%);
2551
+ inline-size: 1.125rem;
2552
+ block-size: 1.125rem;
2553
+ border: 2px solid var(--ef-color-border-functional, #3a403c);
2554
+ border-radius: 50%;
2555
+ background: var(--ef-color-surface-primary, #f2efe7);
2556
+ }
2557
+
2558
+ .ef-choice:has(input[type="checkbox"])::before { border-radius: 0.2rem; }
2559
+
2560
+ .ef-choice:has(input:checked) {
2561
+ border-color: var(--ef-color-accent-primary, #905831);
2562
+ background: var(--ef-color-surface-secondary, #e3e0d7);
2563
+ }
2564
+
2565
+ .ef-choice:has(input:checked)::before {
2566
+ background:
2567
+ radial-gradient(circle, var(--ef-color-accent-primary, #905831) 0 42%, transparent 44%);
2568
+ border-color: var(--ef-color-accent-primary, #905831);
2569
+ }
2570
+
2571
+ .ef-choice:has(input[type="checkbox"]:checked)::before {
2572
+ background: var(--ef-color-accent-primary, #905831);
2573
+ box-shadow: inset 0 0 0 3px var(--ef-color-surface-primary, #f2efe7);
2574
+ }
2575
+
2576
+ .ef-ordinal-option:has(input:disabled),
2577
+ .ef-choice:has(input:disabled),
2578
+ .ef-special-choice:has(input:disabled) {
2579
+ opacity: 0.62;
2580
+ cursor: not-allowed;
2581
+ }
2582
+
2583
+ .ef-choice__content {
2584
+ display: grid;
2585
+ gap: 0.15rem;
2586
+ }
2587
+
2588
+ .ef-choice__content > span {
2589
+ color: var(--ef-color-text-secondary, #686d68);
2590
+ font-size: 0.8125rem;
2591
+ }
2592
+
2593
+ /* Validation ---------------------------------------------------------- */
2594
+ .ef-validation-message {
2595
+ display: flex;
2596
+ align-items: flex-start;
2597
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
2598
+ margin: 0.5rem 0 0;
2599
+ color: var(--ef-color-text-primary, #171a18);
2600
+ font-size: 0.875rem;
2601
+ font-weight: 650;
2602
+ }
2603
+
2604
+ .ef-validation-message__mark,
2605
+ .ef-validation-summary__icon {
2606
+ flex: 0 0 auto;
2607
+ inline-size: 1.5rem;
2608
+ block-size: 1.5rem;
2609
+ display: grid;
2610
+ place-items: center;
2611
+ border: 1px solid currentColor;
2612
+ border-radius: 50%;
2613
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2614
+ font-weight: 800;
2615
+ }
2616
+
2617
+ .ef-validation-summary {
2618
+ display: grid;
2619
+ grid-template-columns: auto minmax(0, 1fr);
2620
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
2621
+ padding: var(--ef-primitive-spacing-4, 1rem);
2622
+ border: 2px solid var(--ef-color-accent-primary, #905831);
2623
+ background: var(--ef-color-surface-secondary, #e3e0d7);
2624
+ color: var(--ef-color-text-on-secondary-surface, #3a403c);
2625
+ }
2626
+
2627
+ .ef-validation-summary__title {
2628
+ margin: 0;
2629
+ font-family: var(--ef-primitive-font-family-sans, system-ui, sans-serif);
2630
+ font-size: 1rem;
2631
+ letter-spacing: 0;
2632
+ line-height: 1.35;
2633
+ }
2634
+
2635
+ .ef-validation-summary__list {
2636
+ margin: 0.5rem 0 0;
2637
+ padding-inline-start: 1.25rem;
2638
+ }
2639
+
2640
+ .ef-validation-summary a {
2641
+ color: var(--ef-color-text-on-secondary-surface, #3a403c);
2642
+ font-weight: 700;
2643
+ }
2644
+
2645
+ /* Survey progress ----------------------------------------------------- */
2646
+ .ef-survey-progress {
2647
+ display: grid;
2648
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
2649
+ }
2650
+
2651
+ .ef-survey-progress__header {
2652
+ min-inline-size: 0;
2653
+ display: flex;
2654
+ flex-wrap: wrap;
2655
+ justify-content: space-between;
2656
+ gap: 1rem;
2657
+ align-items: baseline;
2658
+ }
2659
+
2660
+ .ef-survey-progress__label { font-weight: 700; }
2661
+ .ef-survey-progress__value {
2662
+ color: var(--ef-color-text-secondary, #686d68);
2663
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2664
+ font-size: 0.75rem;
2665
+ }
2666
+
2667
+ .ef-survey-progress__bar {
2668
+ inline-size: 100%;
2669
+ block-size: 0.65rem;
2670
+ accent-color: var(--ef-color-accent-primary, #905831);
2671
+ }
2672
+
2673
+ .ef-survey-progress__context {
2674
+ margin: 0;
2675
+ color: var(--ef-color-text-secondary, #686d68);
2676
+ font-size: 0.8125rem;
2677
+ }
2678
+
2679
+ /* Ranking visual contract -------------------------------------------- */
2680
+ .ef-ranking__list {
2681
+ display: grid;
2682
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
2683
+ margin: var(--ef-primitive-spacing-3, 0.75rem) 0 0;
2684
+ padding: 0;
2685
+ list-style: none;
2686
+ }
2687
+
2688
+ .ef-ranking__item {
2689
+ display: grid;
2690
+ grid-template-columns: auto minmax(0, 1fr) auto;
2691
+ align-items: center;
2692
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
2693
+ min-block-size: 3.25rem;
2694
+ padding: 0.6rem 0.75rem;
2695
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2696
+ background: var(--ef-color-surface-primary, #f2efe7);
2697
+ }
2698
+
2699
+ .ef-ranking__position {
2700
+ inline-size: 2rem;
2701
+ block-size: 2rem;
2702
+ display: grid;
2703
+ place-items: center;
2704
+ background: var(--ef-color-surface-inverse, #202421);
2705
+ color: var(--ef-color-text-inverse, #f2efe7);
2706
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2707
+ font-size: 0.75rem;
2708
+ font-weight: 800;
2709
+ }
2710
+
2711
+ .ef-ranking__label {
2712
+ min-inline-size: 0;
2713
+ font-weight: 650;
2714
+ overflow-wrap: anywhere;
2715
+ }
2716
+
2717
+ .ef-ranking__actions {
2718
+ display: inline-flex;
2719
+ gap: 0.25rem;
2720
+ }
2721
+
2722
+ .ef-ranking__actions button {
2723
+ min-inline-size: 2.75rem;
2724
+ min-block-size: 2.75rem;
2725
+ padding: 0;
2726
+ }
2727
+
2728
+ .ef-ranking__announcement {
2729
+ position: absolute;
2730
+ inline-size: 1px;
2731
+ block-size: 1px;
2732
+ margin: -1px;
2733
+ padding: 0;
2734
+ overflow: hidden;
2735
+ clip: rect(0 0 0 0);
2736
+ clip-path: inset(50%);
2737
+ white-space: nowrap;
2738
+ border: 0;
2739
+ }
2740
+
2741
+ /* Allocation ---------------------------------------------------------- */
2742
+ .ef-allocation__items {
2743
+ display: grid;
2744
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
2745
+ }
2746
+
2747
+ .ef-allocation__item {
2748
+ display: grid;
2749
+ grid-template-columns: minmax(0, 1fr) minmax(5rem, 7rem);
2750
+ align-items: center;
2751
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
2752
+ }
2753
+
2754
+ .ef-allocation__item input {
2755
+ text-align: end;
2756
+ font-variant-numeric: tabular-nums;
2757
+ }
2758
+
2759
+ .ef-allocation__total {
2760
+ display: flex;
2761
+ flex-wrap: wrap;
2762
+ justify-content: space-between;
2763
+ gap: 1rem;
2764
+ margin-block-start: var(--ef-primitive-spacing-3, 0.75rem);
2765
+ padding-block-start: var(--ef-primitive-spacing-3, 0.75rem);
2766
+ border-block-start: 1px solid var(--ef-color-border-functional, #3a403c);
2767
+ font-weight: 750;
2768
+ }
2769
+
2770
+ .ef-allocation__total output {
2771
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2772
+ font-variant-numeric: tabular-nums;
2773
+ }
2774
+
2775
+ .ef-allocation__total[data-ef-state="invalid"] {
2776
+ border-block-start-width: 2px;
2777
+ color: var(--ef-color-accent-primary, #905831);
2778
+ }
2779
+
2780
+ /* Rule builder visual contract --------------------------------------- */
2781
+ .ef-rule-builder {
2782
+ min-inline-size: 0;
2783
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2784
+ background: var(--ef-color-surface-primary, #f2efe7);
2785
+ }
2786
+
2787
+ .ef-rule-builder__header {
2788
+ display: flex;
2789
+ justify-content: space-between;
2790
+ align-items: flex-start;
2791
+ gap: 1rem;
2792
+ padding: var(--ef-primitive-spacing-4, 1rem);
2793
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2794
+ }
2795
+
2796
+ .ef-rule-builder__header h2,
2797
+ .ef-rule-builder__header p { margin: 0; }
2798
+
2799
+ .ef-rule-builder__header h2 {
2800
+ font-family: var(--ef-primitive-font-family-sans, system-ui, sans-serif);
2801
+ font-size: 1rem;
2802
+ letter-spacing: 0;
2803
+ }
2804
+
2805
+ .ef-rule-builder__header p {
2806
+ margin-block-start: 0.25rem;
2807
+ font-size: 0.8125rem;
2808
+ }
2809
+
2810
+ .ef-rule-group {
2811
+ position: relative;
2812
+ display: grid;
2813
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
2814
+ padding: var(--ef-primitive-spacing-4, 1rem);
2815
+ }
2816
+
2817
+ .ef-rule-group__operator {
2818
+ justify-self: start;
2819
+ padding: 0.25rem 0.45rem;
2820
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2821
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2822
+ font-size: 0.6875rem;
2823
+ font-weight: 800;
2824
+ letter-spacing: 0.08em;
2825
+ }
2826
+
2827
+ .ef-rule-clause {
2828
+ min-inline-size: 0;
2829
+ display: grid;
2830
+ grid-template-columns: minmax(8rem, 1.25fr) minmax(8rem, 1fr) minmax(8rem, 1fr) auto;
2831
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
2832
+ align-items: end;
2833
+ }
2834
+
2835
+ .ef-rule-clause label {
2836
+ display: grid;
2837
+ gap: 0.3rem;
2838
+ font-size: 0.75rem;
2839
+ font-weight: 700;
2840
+ }
2841
+
2842
+ .ef-rule-builder__summary {
2843
+ margin: 0;
2844
+ padding: var(--ef-primitive-spacing-3, 0.75rem) var(--ef-primitive-spacing-4, 1rem);
2845
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2846
+ background: var(--ef-color-surface-secondary, #e3e0d7);
2847
+ color: var(--ef-color-text-on-secondary-surface, #3a403c);
2848
+ font-size: 0.8125rem;
2849
+ }
2850
+
2851
+ /* Ordo obligation panel ---------------------------------------------- */
2852
+ .ef-obligation-panel {
2853
+ min-inline-size: 0;
2854
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2855
+ background: var(--ef-color-surface-primary, #f2efe7);
2856
+ }
2857
+
2858
+ .ef-obligation-panel__header {
2859
+ display: flex;
2860
+ justify-content: space-between;
2861
+ align-items: flex-start;
2862
+ gap: 1rem;
2863
+ padding: var(--ef-primitive-spacing-4, 1rem);
2864
+ border-block-end: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2865
+ }
2866
+
2867
+ .ef-obligation-panel__header h2,
2868
+ .ef-obligation-panel__header p { margin: 0; }
2869
+
2870
+ .ef-obligation-panel__header h2 {
2871
+ font-family: var(--ef-primitive-font-family-sans, system-ui, sans-serif);
2872
+ font-size: 1rem;
2873
+ letter-spacing: 0;
2874
+ }
2875
+
2876
+ .ef-obligation-panel__header p {
2877
+ margin-block-start: 0.25rem;
2878
+ font-size: 0.8125rem;
2879
+ }
2880
+
2881
+ .ef-obligation-panel__count {
2882
+ min-inline-size: 2rem;
2883
+ block-size: 2rem;
2884
+ display: grid;
2885
+ place-items: center;
2886
+ background: var(--ef-color-surface-inverse, #202421);
2887
+ color: var(--ef-color-text-inverse, #f2efe7);
2888
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2889
+ font-size: 0.75rem;
2890
+ font-weight: 800;
2891
+ }
2892
+
2893
+ .ef-obligation-list {
2894
+ display: grid;
2895
+ margin: 0;
2896
+ padding: 0;
2897
+ list-style: none;
2898
+ }
2899
+
2900
+ .ef-obligation {
2901
+ display: grid;
2902
+ grid-template-columns: auto minmax(0, 1fr) auto;
2903
+ align-items: start;
2904
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
2905
+ padding: var(--ef-primitive-spacing-4, 1rem);
2906
+ border-inline-start: 4px solid var(--ef-color-border-functional, #3a403c);
2907
+ }
2908
+
2909
+ .ef-obligation + .ef-obligation {
2910
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
2911
+ }
2912
+
2913
+ .ef-obligation[data-ef-severity="blocking"] { border-inline-start-color: var(--ef-color-accent-primary, #905831); }
2914
+ .ef-obligation[data-ef-severity="warning"] { border-inline-start-style: double; }
2915
+ .ef-obligation[data-ef-severity="information"] { border-inline-start-color: var(--ef-color-accent-secondary, #47756b); }
2916
+
2917
+ .ef-obligation__status {
2918
+ min-inline-size: 5.5rem;
2919
+ padding: 0.2rem 0.4rem;
2920
+ border: 1px solid currentColor;
2921
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
2922
+ font-size: 0.625rem;
2923
+ font-weight: 800;
2924
+ letter-spacing: 0.06em;
2925
+ text-align: center;
2926
+ text-transform: uppercase;
2927
+ }
2928
+
2929
+ .ef-obligation p {
2930
+ margin: 0.25rem 0 0;
2931
+ font-size: 0.8125rem;
2932
+ }
2933
+
2934
+
2935
+ /* Selector completeness ---------------------------------------------- */
2936
+ .ef-sr-only {
2937
+ position: absolute;
2938
+ inline-size: 1px;
2939
+ block-size: 1px;
2940
+ margin: -1px;
2941
+ padding: 0;
2942
+ overflow: hidden;
2943
+ clip: rect(0 0 0 0);
2944
+ clip-path: inset(50%);
2945
+ white-space: nowrap;
2946
+ border: 0;
2947
+ }
2948
+
2949
+ .ef-binary-choice,
2950
+ .ef-semantic-differential,
2951
+ .ef-symbol-rating,
2952
+ .ef-range-entry,
2953
+ .ef-matrix,
2954
+ .ef-best-worst,
2955
+ .ef-hierarchy {
2956
+ min-inline-size: 0;
2957
+ margin: 0;
2958
+ padding: 0;
2959
+ border: 0;
2960
+ }
2961
+
2962
+ .ef-binary-choice__legend,
2963
+ .ef-semantic-differential__legend,
2964
+ .ef-symbol-rating__legend,
2965
+ .ef-range-entry__legend,
2966
+ .ef-matrix__legend,
2967
+ .ef-best-worst__legend,
2968
+ .ef-hierarchy__legend {
2969
+ margin-block-end: var(--ef-primitive-spacing-3, 0.75rem);
2970
+ font-size: 1rem;
2971
+ font-weight: 700;
2972
+ line-height: 1.4;
2973
+ }
2974
+
2975
+ .ef-binary-choice__options {
2976
+ max-inline-size: 100%;
2977
+ display: inline-grid;
2978
+ grid-auto-flow: column;
2979
+ grid-auto-columns: minmax(6rem, 1fr);
2980
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
2981
+ }
2982
+
2983
+ .ef-binary-option {
2984
+ position: relative;
2985
+ min-block-size: 2.75rem;
2986
+ display: grid;
2987
+ place-items: center;
2988
+ padding: 0.55rem 1rem;
2989
+ cursor: pointer;
2990
+ background: var(--ef-color-surface-primary, #f2efe7);
2991
+ }
2992
+
2993
+ .ef-binary-option + .ef-binary-option { border-inline-start: 1px solid var(--ef-color-border-functional, #3a403c); }
2994
+ .ef-binary-option input,
2995
+ .ef-symbol-rating__option input,
2996
+ .ef-semantic-differential__scale input {
2997
+ position: absolute;
2998
+ inline-size: 1px;
2999
+ block-size: 1px;
3000
+ opacity: 0;
3001
+ }
3002
+
3003
+ .ef-binary-option:has(input:checked),
3004
+ .ef-symbol-rating__option:has(input:checked),
3005
+ .ef-semantic-differential__scale label:has(input:checked) {
3006
+ background: var(--ef-color-surface-inverse, #202421);
3007
+ color: var(--ef-color-text-inverse, #f2efe7);
3008
+ }
3009
+
3010
+ .ef-binary-option:has(input:focus-visible),
3011
+ .ef-symbol-rating__option:has(input:focus-visible),
3012
+ .ef-semantic-differential__scale label:has(input:focus-visible) {
3013
+ z-index: 1;
3014
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
3015
+ outline-offset: 2px;
3016
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
3017
+ }
3018
+
3019
+ .ef-semantic-differential__endpoints {
3020
+ display: flex;
3021
+ justify-content: space-between;
3022
+ gap: 1rem;
3023
+ margin-block-end: 0.4rem;
3024
+ color: var(--ef-color-text-secondary, #686d68);
3025
+ font-size: 0.8125rem;
3026
+ font-weight: 650;
3027
+ }
3028
+
3029
+ .ef-semantic-differential__endpoints--mobile { display: none; }
3030
+
3031
+ .ef-semantic-differential__scale {
3032
+ max-inline-size: 100%;
3033
+ display: grid;
3034
+ grid-template-columns: repeat(7, minmax(2.75rem, 1fr));
3035
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
3036
+ }
3037
+
3038
+ .ef-semantic-differential__scale label {
3039
+ position: relative;
3040
+ min-block-size: 3rem;
3041
+ display: grid;
3042
+ place-items: center;
3043
+ cursor: pointer;
3044
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
3045
+ font-weight: 750;
3046
+ }
3047
+
3048
+ .ef-semantic-differential__scale label + label { border-inline-start: 1px solid var(--ef-color-border-subtle, #e3e0d7); }
3049
+ .ef-semantic-differential__scale label > span[aria-hidden="true"] { pointer-events: none; }
3050
+
3051
+ .ef-semantic-differential__scale input {
3052
+ inset: 0;
3053
+ z-index: 1;
3054
+ inline-size: 100%;
3055
+ block-size: 100%;
3056
+ margin: 0;
3057
+ cursor: pointer;
3058
+ }
3059
+
3060
+ .ef-symbol-rating__options {
3061
+ max-inline-size: 100%;
3062
+ display: inline-flex;
3063
+ flex-wrap: wrap;
3064
+ gap: 0.25rem;
3065
+ }
3066
+
3067
+ .ef-symbol-rating__option {
3068
+ position: relative;
3069
+ min-inline-size: 2.75rem;
3070
+ min-block-size: 2.75rem;
3071
+ display: grid;
3072
+ place-items: center;
3073
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
3074
+ cursor: pointer;
3075
+ }
3076
+
3077
+ .ef-symbol-rating__symbol {
3078
+ font-size: 1.35rem;
3079
+ line-height: 1;
3080
+ }
3081
+
3082
+ .ef-numeric-stepper {
3083
+ display: grid;
3084
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
3085
+ }
3086
+
3087
+ .ef-numeric-stepper__label { font-weight: 700; }
3088
+ .ef-numeric-stepper input { max-inline-size: 10rem; font-variant-numeric: tabular-nums; }
3089
+
3090
+ .ef-range-entry__inputs {
3091
+ display: grid;
3092
+ grid-template-columns: minmax(7rem, 1fr) auto minmax(7rem, 1fr);
3093
+ align-items: end;
3094
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
3095
+ max-inline-size: 30rem;
3096
+ }
3097
+
3098
+ .ef-range-entry__inputs label {
3099
+ display: grid;
3100
+ gap: 0.3rem;
3101
+ font-size: 0.8125rem;
3102
+ font-weight: 700;
3103
+ }
3104
+
3105
+ .ef-range-entry__separator { padding-block-end: 0.65rem; color: var(--ef-color-text-secondary, #686d68); }
3106
+
3107
+ .ef-range-entry__status,
3108
+ .ef-selection-status,
3109
+ .ef-best-worst__status {
3110
+ margin: 0.5rem 0 0;
3111
+ font-size: 0.8125rem;
3112
+ font-weight: 650;
3113
+ }
3114
+
3115
+ .ef-selection-guidance {
3116
+ margin: 0 0 var(--ef-primitive-spacing-2, 0.5rem);
3117
+ color: var(--ef-color-text-secondary, #686d68);
3118
+ font-size: 0.8125rem;
3119
+ }
3120
+
3121
+ .ef-choice--exclusive {
3122
+ border-style: dashed;
3123
+ }
3124
+
3125
+ .ef-choice--media {
3126
+ grid-template-columns: minmax(5rem, 8rem) minmax(0, 1fr);
3127
+ padding-inline-start: 1rem;
3128
+ }
3129
+
3130
+ .ef-choice--media::before { display: none; }
3131
+
3132
+ .ef-choice__media {
3133
+ display: grid;
3134
+ place-items: center;
3135
+ overflow: hidden;
3136
+ border: 1px solid var(--ef-color-border-subtle, #e3e0d7);
3137
+ background: var(--ef-color-surface-secondary, #e3e0d7);
3138
+ aspect-ratio: 4 / 3;
3139
+ }
3140
+
3141
+ .ef-choice__media img {
3142
+ max-inline-size: 100%;
3143
+ max-block-size: 100%;
3144
+ object-fit: cover;
3145
+ }
3146
+
3147
+ .ef-matrix__rows {
3148
+ display: grid;
3149
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
3150
+ margin-block-start: var(--ef-primitive-spacing-3, 0.75rem);
3151
+ }
3152
+
3153
+ .ef-matrix__row {
3154
+ display: grid;
3155
+ grid-template-columns: minmax(10rem, 1.1fr) minmax(0, 3fr);
3156
+ gap: var(--ef-primitive-spacing-3, 0.75rem);
3157
+ align-items: stretch;
3158
+ margin: 0;
3159
+ padding: 0.6rem;
3160
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
3161
+ }
3162
+
3163
+ .ef-matrix__row > legend {
3164
+ float: inline-start;
3165
+ inline-size: auto;
3166
+ margin: 0;
3167
+ padding: 0;
3168
+ font-weight: 700;
3169
+ }
3170
+
3171
+ .ef-matrix__choices {
3172
+ display: grid;
3173
+ grid-auto-flow: column;
3174
+ grid-auto-columns: minmax(5rem, 1fr);
3175
+ gap: 0.25rem;
3176
+ }
3177
+
3178
+ .ef-matrix__choices label {
3179
+ position: relative;
3180
+ min-block-size: 2.75rem;
3181
+ display: grid;
3182
+ place-items: center;
3183
+ padding: 0.4rem;
3184
+ border: 1px solid var(--ef-color-border-subtle, #e3e0d7);
3185
+ text-align: center;
3186
+ cursor: pointer;
3187
+ font-size: 0.75rem;
3188
+ }
3189
+
3190
+ .ef-matrix__choices input {
3191
+ position: absolute;
3192
+ inline-size: 1px;
3193
+ block-size: 1px;
3194
+ opacity: 0;
3195
+ }
3196
+
3197
+ .ef-matrix__choices label:has(input:checked) {
3198
+ background: var(--ef-color-surface-inverse, #202421);
3199
+ color: var(--ef-color-text-inverse, #f2efe7);
3200
+ }
3201
+
3202
+ .ef-matrix__choices label:has(input:focus-visible) {
3203
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
3204
+ outline-offset: 1px;
3205
+ box-shadow: 0 0 0 4px var(--ef-color-focus-ring, #171a18);
3206
+ }
3207
+
3208
+ .ef-best-worst__header,
3209
+ .ef-best-worst__row {
3210
+ display: grid;
3211
+ grid-template-columns: minmax(10rem, 1fr) 4.5rem 4.5rem;
3212
+ align-items: center;
3213
+ gap: 0.25rem;
3214
+ }
3215
+
3216
+ .ef-best-worst__header {
3217
+ padding: 0.35rem 0.6rem;
3218
+ color: var(--ef-color-text-secondary, #686d68);
3219
+ font-size: 0.75rem;
3220
+ font-weight: 700;
3221
+ text-align: center;
3222
+ }
3223
+
3224
+ .ef-best-worst__header > :first-child { text-align: start; }
3225
+
3226
+ .ef-best-worst__row {
3227
+ min-block-size: 3rem;
3228
+ padding: 0.5rem 0.6rem;
3229
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
3230
+ }
3231
+
3232
+ .ef-best-worst__row + .ef-best-worst__row { border-block-start: 0; }
3233
+ .ef-best-worst__row label { display: grid; place-items: center; min-block-size: 2.75rem; }
3234
+ .ef-best-worst__row input { inline-size: 1.25rem; block-size: 1.25rem; accent-color: var(--ef-color-accent-primary, #905831); }
3235
+
3236
+ .ef-pairwise {
3237
+ min-inline-size: 0;
3238
+ margin: 0;
3239
+ padding: 0;
3240
+ border: 0;
3241
+ }
3242
+
3243
+ .ef-pairwise__legend {
3244
+ margin-block-end: var(--ef-primitive-spacing-3, 0.75rem);
3245
+ font-size: 1rem;
3246
+ font-weight: 700;
3247
+ line-height: 1.4;
3248
+ }
3249
+
3250
+ .ef-pairwise__options {
3251
+ display: grid;
3252
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
3253
+ align-items: stretch;
3254
+ gap: var(--ef-primitive-spacing-2, 0.5rem);
3255
+ }
3256
+
3257
+ .ef-pairwise__option {
3258
+ position: relative;
3259
+ min-block-size: 5rem;
3260
+ display: grid;
3261
+ align-content: center;
3262
+ gap: 0.2rem;
3263
+ padding: 0.85rem 1rem;
3264
+ border: 1px solid var(--ef-color-border-functional, #3a403c);
3265
+ background: var(--ef-color-surface-primary, #f2efe7);
3266
+ cursor: pointer;
3267
+ }
3268
+
3269
+ .ef-pairwise__option input {
3270
+ position: absolute;
3271
+ inline-size: 1px;
3272
+ block-size: 1px;
3273
+ opacity: 0;
3274
+ }
3275
+
3276
+ .ef-pairwise__option:has(input:checked) {
3277
+ background: var(--ef-color-surface-inverse, #202421);
3278
+ color: var(--ef-color-text-inverse, #f2efe7);
3279
+ }
3280
+
3281
+ .ef-pairwise__option:has(input:focus-visible) {
3282
+ outline: 3px solid var(--ef-color-focus-gap, #f2efe7);
3283
+ outline-offset: 2px;
3284
+ box-shadow: 0 0 0 5px var(--ef-color-focus-ring, #171a18);
3285
+ }
3286
+
3287
+ .ef-pairwise__eyebrow {
3288
+ font-family: var(--ef-primitive-font-family-mono, ui-monospace, monospace);
3289
+ font-size: 0.6875rem;
3290
+ font-weight: 800;
3291
+ letter-spacing: 0.05em;
3292
+ text-transform: uppercase;
3293
+ }
3294
+
3295
+ .ef-pairwise__option > span:last-child { font-size: 0.8125rem; }
3296
+ .ef-pairwise__versus { align-self: center; color: var(--ef-color-text-secondary, #686d68); font-size: 0.8125rem; }
3297
+
3298
+ .ef-hierarchy__tree,
3299
+ .ef-hierarchy__tree ul {
3300
+ margin: 0;
3301
+ padding-inline-start: 1.25rem;
3302
+ list-style: none;
3303
+ }
3304
+
3305
+ .ef-hierarchy__tree { padding-inline-start: 0; }
3306
+ .ef-hierarchy details { border-inline-start: 2px solid var(--ef-color-border-subtle, #e3e0d7); padding-inline-start: 0.75rem; }
3307
+ .ef-hierarchy summary { min-block-size: 2.75rem; display: flex; align-items: center; cursor: pointer; font-weight: 700; }
3308
+ .ef-hierarchy label { min-block-size: 2.75rem; display: flex; align-items: center; gap: 0.5rem; }
3309
+
3310
+ @media (max-width: 44rem) {
3311
+ .ef-ordinal-scale__options,
3312
+ .ef-ordinal-scale--3 .ef-ordinal-scale__options,
3313
+ .ef-ordinal-scale--4 .ef-ordinal-scale__options,
3314
+ .ef-ordinal-scale--5 .ef-ordinal-scale__options,
3315
+ .ef-ordinal-scale--6 .ef-ordinal-scale__options,
3316
+ .ef-ordinal-scale--7 .ef-ordinal-scale__options,
3317
+ .ef-ordinal-scale--10 .ef-ordinal-scale__options,
3318
+ .ef-ordinal-scale--11 .ef-ordinal-scale__options {
3319
+ grid-template-columns: 1fr;
3320
+ }
3321
+
3322
+ .ef-ordinal-option {
3323
+ min-block-size: 3.25rem;
3324
+ grid-template-columns: auto minmax(0, 1fr);
3325
+ grid-template-rows: auto;
3326
+ place-items: center start;
3327
+ text-align: start;
3328
+ padding-inline: 0.75rem;
3329
+ }
3330
+
3331
+ .ef-ordinal-option + .ef-ordinal-option {
3332
+ border-inline-start: 0;
3333
+ border-block-start: 1px solid var(--ef-color-border-subtle, #e3e0d7);
3334
+ }
3335
+
3336
+ .ef-rule-builder__header,
3337
+ .ef-obligation-panel__header {
3338
+ align-items: stretch;
3339
+ flex-direction: column;
3340
+ }
3341
+
3342
+ .ef-rule-clause { grid-template-columns: 1fr; }
3343
+ .ef-obligation { grid-template-columns: 1fr; }
3344
+ .ef-obligation__status { justify-self: start; }
3345
+
3346
+ .ef-ranking__item {
3347
+ grid-template-columns: auto minmax(0, 1fr);
3348
+ align-items: start;
3349
+ }
3350
+
3351
+ .ef-ranking__actions {
3352
+ grid-column: 1 / -1;
3353
+ inline-size: 100%;
3354
+ display: grid;
3355
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3356
+ }
3357
+
3358
+ .ef-ranking__actions button {
3359
+ min-inline-size: 0;
3360
+ inline-size: 100%;
3361
+ }
3362
+
3363
+ .ef-allocation__item {
3364
+ grid-template-columns: 1fr;
3365
+ align-items: stretch;
3366
+ }
3367
+
3368
+ .ef-binary-choice__options {
3369
+ inline-size: 100%;
3370
+ grid-auto-flow: row;
3371
+ grid-template-columns: 1fr;
3372
+ grid-auto-columns: auto;
3373
+ }
3374
+
3375
+ .ef-binary-option + .ef-binary-option {
3376
+ border-inline-start: 0;
3377
+ border-block-start: 1px solid var(--ef-color-border-functional, #3a403c);
3378
+ }
3379
+
3380
+ .ef-semantic-differential__endpoints:not(.ef-semantic-differential__endpoints--mobile) { display: none; }
3381
+ .ef-semantic-differential__endpoints--mobile { display: flex; }
3382
+ .ef-semantic-differential__scale {
3383
+ grid-template-columns: repeat(7, minmax(2.75rem, 1fr));
3384
+ overflow-x: auto;
3385
+ overscroll-behavior-inline: contain;
3386
+ scrollbar-gutter: stable;
3387
+ }
3388
+ .ef-range-entry__inputs { grid-template-columns: 1fr; }
3389
+ .ef-range-entry__separator { padding: 0; }
3390
+ .ef-choice--media { grid-template-columns: 1fr; }
3391
+ .ef-matrix__row { grid-template-columns: 1fr; }
3392
+ .ef-matrix__choices { grid-auto-flow: row; grid-template-columns: 1fr; }
3393
+ .ef-matrix__choices label { grid-template-columns: auto 1fr; justify-items: start; text-align: start; }
3394
+ .ef-best-worst__header { display: none; }
3395
+ .ef-best-worst__row {
3396
+ grid-template-columns: minmax(0, 1fr) minmax(2.75rem, auto) minmax(2.75rem, auto);
3397
+ padding-inline: 0.4rem;
3398
+ }
3399
+
3400
+ .ef-pairwise__options { grid-template-columns: 1fr; }
3401
+ .ef-pairwise__versus { justify-self: center; }
3402
+
3403
+ .ef-hierarchy__tree ul {
3404
+ padding-inline-start: 0.75rem;
3405
+ }
3406
+
3407
+ .ef-hierarchy details {
3408
+ padding-inline-start: 0.5rem;
3409
+ }
3410
+ }
3411
+
3412
+ @media (prefers-reduced-motion: reduce) {
3413
+ .ef-ordinal-option,
3414
+ .ef-choice,
3415
+ .ef-binary-option,
3416
+ .ef-symbol-rating__option {
3417
+ transition-duration: 0.01ms;
3418
+ }
3419
+ }
3420
+
3421
+ @media (forced-colors: active) {
3422
+ .ef-ordinal-scale__options,
3423
+ .ef-ordinal-option,
3424
+ .ef-special-choice,
3425
+ .ef-choice,
3426
+ .ef-validation-summary,
3427
+ .ef-ranking__item,
3428
+ .ef-rule-builder,
3429
+ .ef-obligation-panel,
3430
+ .ef-binary-choice__options,
3431
+ .ef-semantic-differential__scale,
3432
+ .ef-symbol-rating__option,
3433
+ .ef-matrix__row,
3434
+ .ef-best-worst__row,
3435
+ .ef-pairwise__option {
3436
+ border-color: CanvasText;
3437
+ }
3438
+
3439
+ .ef-ordinal-option:has(input:checked),
3440
+ .ef-special-choice:has(input:checked),
3441
+ .ef-choice:has(input:checked),
3442
+ .ef-binary-option:has(input:checked),
3443
+ .ef-symbol-rating__option:has(input:checked),
3444
+ .ef-semantic-differential__scale label:has(input:checked),
3445
+ .ef-matrix__choices label:has(input:checked),
3446
+ .ef-pairwise__option:has(input:checked) {
3447
+ background: Highlight;
3448
+ color: HighlightText;
3449
+ }
3450
+
3451
+ .ef-ordinal-option:has(input:checked) .ef-ordinal-option__marker {
3452
+ background: Highlight;
3453
+ color: HighlightText;
3454
+ border-color: HighlightText;
3455
+ }
3456
+
3457
+ .ef-obligation {
3458
+ border-inline-start-color: CanvasText;
3459
+ }
3460
+ }
3461
+ }