@things-factory/figure-ui 10.1.172 → 10.1.174

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 (52) hide show
  1. package/client/modeller/editor-styles.ts +11 -3
  2. package/client/modeller/figure-capability-panel.ts +1 -1
  3. package/client/modeller/figure-controls.ts +2 -2
  4. package/client/modeller/figure-data-panel.ts +1 -1
  5. package/client/modeller/figure-first-save.ts +1 -1
  6. package/client/modeller/figure-history-panel.ts +8 -8
  7. package/client/modeller/figure-parts.ts +35 -13
  8. package/client/modeller/figure-preview.ts +6 -6
  9. package/client/modeller/figure-recipe-catalog.ts +1 -1
  10. package/client/modeller/figure-section-editor.ts +5 -5
  11. package/client/modeller/figure-settings.ts +7 -7
  12. package/client/modeller/figure-verdict.ts +16 -15
  13. package/client/modeller/gate-findings.ts +5 -6
  14. package/client/modeller/group-menu.ts +1 -1
  15. package/client/pages/figure-modeller-page.ts +1 -1
  16. package/client/viewparts/figure-detail-dock.ts +1 -1
  17. package/dist-client/modeller/editor-styles.js +11 -3
  18. package/dist-client/modeller/editor-styles.js.map +1 -1
  19. package/dist-client/modeller/figure-capability-panel.js +1 -1
  20. package/dist-client/modeller/figure-capability-panel.js.map +1 -1
  21. package/dist-client/modeller/figure-controls.js +2 -2
  22. package/dist-client/modeller/figure-controls.js.map +1 -1
  23. package/dist-client/modeller/figure-data-panel.js +1 -1
  24. package/dist-client/modeller/figure-data-panel.js.map +1 -1
  25. package/dist-client/modeller/figure-first-save.js +1 -1
  26. package/dist-client/modeller/figure-first-save.js.map +1 -1
  27. package/dist-client/modeller/figure-history-panel.js +8 -8
  28. package/dist-client/modeller/figure-history-panel.js.map +1 -1
  29. package/dist-client/modeller/figure-parts.js +35 -13
  30. package/dist-client/modeller/figure-parts.js.map +1 -1
  31. package/dist-client/modeller/figure-preview.js +6 -6
  32. package/dist-client/modeller/figure-preview.js.map +1 -1
  33. package/dist-client/modeller/figure-recipe-catalog.js +1 -1
  34. package/dist-client/modeller/figure-recipe-catalog.js.map +1 -1
  35. package/dist-client/modeller/figure-section-editor.js +5 -5
  36. package/dist-client/modeller/figure-section-editor.js.map +1 -1
  37. package/dist-client/modeller/figure-settings.js +7 -7
  38. package/dist-client/modeller/figure-settings.js.map +1 -1
  39. package/dist-client/modeller/figure-verdict.js +16 -15
  40. package/dist-client/modeller/figure-verdict.js.map +1 -1
  41. package/dist-client/modeller/gate-findings.js +5 -6
  42. package/dist-client/modeller/gate-findings.js.map +1 -1
  43. package/dist-client/modeller/group-menu.js +1 -1
  44. package/dist-client/modeller/group-menu.js.map +1 -1
  45. package/dist-client/pages/figure-modeller-page.js +1 -1
  46. package/dist-client/pages/figure-modeller-page.js.map +1 -1
  47. package/dist-client/tsconfig.tsbuildinfo +1 -1
  48. package/dist-client/viewparts/figure-detail-dock.js +1 -1
  49. package/dist-client/viewparts/figure-detail-dock.js.map +1 -1
  50. package/package.json +3 -3
  51. package/test/browser/props.check.mjs +17 -0
  52. package/test/type-guard.test.ts +133 -0
@@ -10,7 +10,10 @@ export const EditorStyles = css`
10
10
  height: 100%;
11
11
  /* The editor folds by the width it is given, not the window's (UX ruling, 2026-09-24). */
12
12
  container-type: inline-size;
13
- font: 13px sans-serif;
13
+ /* The app's one face (its typography theme's --theme-font) at the body size: a bare sans-serif here put a second
14
+ face under everything the editor draws, beside the parts list and the shell in the app's own (2026-10-16). */
15
+ font-family: var(--theme-font, ui-sans-serif, system-ui, sans-serif);
16
+ font-size: var(--ui-t-body, 13px);
14
17
  color: var(--md-sys-color-on-surface);
15
18
  }
16
19
  /* The bar over the work is ox-canvas-bar (ADR-0060 decision 8): the folds at its edges, undo, redo and
@@ -177,10 +180,15 @@ export const EditorStyles = css`
177
180
  color: var(--md-sys-color-on-surface-variant);
178
181
  }
179
182
  /* The side: tabs over one panel at a time, each using the whole height. */
183
+ /*
184
+ The side's words at the panel's size (side-panel-styles: titles body, the rest small). The editor's host is at body
185
+ for the bar, and the fields the editor drew itself -- the part's name -- stood a step larger than every other field.
186
+ */
180
187
  aside {
181
188
  display: flex;
182
189
  flex-direction: column;
183
190
  min-height: 0;
191
+ font-size: var(--ui-t-small, 11.5px);
184
192
  background: var(--md-sys-color-surface-container-lowest);
185
193
  }
186
194
  div[tabs] {
@@ -220,7 +228,7 @@ export const EditorStyles = css`
220
228
  button[tab] span[tab-label] {
221
229
  max-width: 100%;
222
230
  overflow: hidden;
223
- font-size: 0.66rem;
231
+ font-size: var(--ui-t-micro, 11px);
224
232
  line-height: 1.2;
225
233
  white-space: nowrap;
226
234
  text-overflow: ellipsis;
@@ -230,7 +238,7 @@ export const EditorStyles = css`
230
238
  top: 3px;
231
239
  right: 2px;
232
240
  padding: 0 5px;
233
- font-size: 0.62rem;
241
+ font-size: var(--ui-t-micro, 11px);
234
242
  font-weight: 700;
235
243
  line-height: 1.5;
236
244
  color: var(--md-sys-color-on-primary-container);
@@ -61,7 +61,7 @@ export class FigureCapabilityPanel extends localize(i18next)(LitElement) {
61
61
  border-color: var(--md-sys-color-primary);
62
62
  }
63
63
  code {
64
- font-size: 0.9em;
64
+ font-size: var(--ui-t-small, 11.5px);
65
65
  color: var(--md-sys-color-on-surface-variant);
66
66
  }
67
67
  `]
@@ -40,13 +40,13 @@ export class FigureControls extends localize(i18next)(LitElement) {
40
40
  }
41
41
  div[control] > span[name] em {
42
42
  font-style: normal;
43
- font-size: 0.64rem;
43
+ font-size: var(--ui-t-micro, 11px);
44
44
  color: var(--md-sys-color-on-surface-variant);
45
45
  }
46
46
  div[control] input[type='number'] {
47
47
  min-height: 24px;
48
48
  padding: 2px 5px;
49
- font-family: var(--mono-font, monospace);
49
+ font-family: var(--ui-mono, ui-monospace, monospace);
50
50
  text-align: right;
51
51
  }
52
52
  svg[dial] {
@@ -139,7 +139,7 @@ export class FigureDataPanel extends localize(i18next)(LitElement) {
139
139
  width: 100%;
140
140
  min-height: 96px;
141
141
  box-sizing: border-box;
142
- font-family: var(--ui-font-mono, monospace);
142
+ font-family: var(--ui-mono, ui-monospace, monospace);
143
143
  font-size: inherit;
144
144
  }
145
145
  ul[result] {
@@ -36,7 +36,7 @@ export class FigureFirstSave extends LitElement {
36
36
  width: 100%;
37
37
  }
38
38
  input[type-field] {
39
- font-family: var(--mono-font, monospace);
39
+ font-family: var(--ui-mono, ui-monospace, monospace);
40
40
  }
41
41
  `
42
42
  ]
@@ -56,7 +56,7 @@ export class FigureHistoryPanel extends localize(i18next)(LitElement) {
56
56
  background-color: var(--md-sys-color-surface-container-lowest);
57
57
  color: var(--md-sys-color-on-surface);
58
58
  font: var(--label-font, inherit);
59
- font-size: 0.76rem;
59
+ font-size: var(--ui-t-small, 11.5px);
60
60
  }
61
61
 
62
62
  :host([off]) {
@@ -88,7 +88,7 @@ export class FigureHistoryPanel extends localize(i18next)(LitElement) {
88
88
  span[state] {
89
89
  padding: 2px 8px;
90
90
  border-radius: 10px;
91
- font-size: 0.7rem;
91
+ font-size: var(--ui-t-micro, 11px);
92
92
  font-weight: 700;
93
93
  color: var(--md-sys-color-on-secondary-container);
94
94
  background-color: var(--md-sys-color-secondary-container);
@@ -100,14 +100,14 @@ export class FigureHistoryPanel extends localize(i18next)(LitElement) {
100
100
  }
101
101
 
102
102
  span[ver] {
103
- font-family: var(--mono-font, monospace);
103
+ font-family: var(--ui-mono, ui-monospace, monospace);
104
104
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
105
105
  }
106
106
 
107
107
  input,
108
108
  button {
109
109
  font: var(--input-field-font, inherit);
110
- font-size: 0.76rem;
110
+ font-size: var(--ui-t-small, 11.5px);
111
111
  }
112
112
 
113
113
  input[note] {
@@ -140,14 +140,14 @@ export class FigureHistoryPanel extends localize(i18next)(LitElement) {
140
140
  /* 왜 못 누르는지 — 눌러 보고 알게 하지 않는다 */
141
141
  p[why] {
142
142
  margin: 6px 0 0 0;
143
- font-size: 0.7rem;
143
+ font-size: var(--ui-t-micro, 11px);
144
144
  line-height: 1.5;
145
145
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
146
146
  }
147
147
 
148
148
  p[failed] {
149
149
  margin: 6px 0 0 0;
150
- font-size: 0.7rem;
150
+ font-size: var(--ui-t-micro, 11px);
151
151
  line-height: 1.5;
152
152
  color: var(--md-sys-color-error);
153
153
  }
@@ -172,13 +172,13 @@ export class FigureHistoryPanel extends localize(i18next)(LitElement) {
172
172
  }
173
173
 
174
174
  li span[no] {
175
- font-family: var(--mono-font, monospace);
175
+ font-family: var(--ui-mono, ui-monospace, monospace);
176
176
  font-weight: 700;
177
177
  }
178
178
 
179
179
  li span[when] {
180
180
  grid-column: 2 / 4;
181
- font-size: 0.7rem;
181
+ font-size: var(--ui-t-micro, 11px);
182
182
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
183
183
  }
184
184
 
@@ -84,7 +84,7 @@ export class FigureParts extends localize(i18next)(LitElement) {
84
84
  /* The divider beside it is the editor's frame's (ox-three-pane). */
85
85
  color: var(--md-sys-color-on-surface);
86
86
  font: var(--label-font, inherit);
87
- font-size: 0.76rem;
87
+ font-size: var(--ui-t-small, 11.5px);
88
88
  /* Folds by its own width: the editor gives this column 140 px when it has two columns (UX, 2026-09-24). */
89
89
  container-type: inline-size;
90
90
  }
@@ -148,7 +148,7 @@ export class FigureParts extends localize(i18next)(LitElement) {
148
148
  margin: 0 0 6px;
149
149
  padding: 4px 6px;
150
150
  font: inherit;
151
- font-size: 0.68rem;
151
+ font-size: var(--ui-t-micro, 11px);
152
152
  line-height: 1.5;
153
153
  text-align: left;
154
154
  color: var(--md-sys-color-on-surface-variant);
@@ -190,7 +190,7 @@ export class FigureParts extends localize(i18next)(LitElement) {
190
190
  }
191
191
  p[full] {
192
192
  margin: 4px 0 0;
193
- font-size: 0.68rem;
193
+ font-size: var(--ui-t-micro, 11px);
194
194
  color: var(--md-sys-color-error);
195
195
  }
196
196
  div[level] {
@@ -199,14 +199,16 @@ export class FigureParts extends localize(i18next)(LitElement) {
199
199
  align-items: center;
200
200
  gap: 6px;
201
201
  margin: 0 0 6px;
202
- font-size: 0.68rem;
202
+ font-size: var(--ui-t-micro, 11px);
203
203
  color: var(--md-sys-color-on-surface-variant);
204
204
  }
205
+ /* One height with the side's fields (30px, side-panel-styles): it stood at 21px, the only small box on the screen. */
205
206
  div[level] select {
206
207
  min-width: 0;
208
+ min-height: 30px;
207
209
  padding: 2px 4px;
208
210
  font: inherit;
209
- font-size: 0.7rem;
211
+ font-size: var(--ui-t-small, 11.5px);
210
212
  color: var(--md-sys-color-on-surface);
211
213
  background: var(--md-sys-color-surface-container-lowest);
212
214
  border: 1px solid var(--md-sys-color-outline-variant);
@@ -216,7 +218,7 @@ export class FigureParts extends localize(i18next)(LitElement) {
216
218
  color: var(--md-sys-color-on-surface-variant);
217
219
  }
218
220
  span[room] {
219
- font-size: 0.7rem;
221
+ font-size: var(--ui-t-micro, 11px);
220
222
  font-weight: 400;
221
223
  letter-spacing: 0;
222
224
  text-transform: none;
@@ -235,7 +237,7 @@ export class FigureParts extends localize(i18next)(LitElement) {
235
237
  min-width: 0;
236
238
  padding: 5px 1px 4px;
237
239
  font: var(--label-font, inherit);
238
- font-size: 0.6rem;
240
+ font-size: var(--ui-t-micro, 11px);
239
241
  line-height: 1.2;
240
242
  text-align: center;
241
243
  overflow-wrap: anywhere;
@@ -245,13 +247,25 @@ export class FigureParts extends localize(i18next)(LitElement) {
245
247
  border-radius: 6px;
246
248
  cursor: pointer;
247
249
  }
250
+ /*
251
+ A file brought in is not a starting shape: its own row under the nine, its words on one line. As a tenth tile its
252
+ two-word name broke onto two lines and stood it taller than the rest (2026-10-16).
253
+ */
254
+ button[shape][import] {
255
+ grid-column: 1 / -1;
256
+ flex-direction: row;
257
+ justify-content: center;
258
+ gap: 6px;
259
+ min-height: 30px;
260
+ padding: 0 8px;
261
+ }
248
262
  button[recipe-catalog] {
249
263
  display: inline-flex;
250
264
  align-items: center;
251
265
  gap: 4px;
252
266
  padding: 4px 10px;
253
267
  font: inherit;
254
- font-size: 0.75rem;
268
+ font-size: var(--ui-t-small, 11.5px);
255
269
  color: var(--md-sys-color-on-surface);
256
270
  background: none;
257
271
  border: 1px solid var(--md-sys-color-outline-variant);
@@ -293,6 +307,13 @@ export class FigureParts extends localize(i18next)(LitElement) {
293
307
  color: var(--md-sys-color-on-primary-container);
294
308
  background-color: var(--md-sys-color-primary-container);
295
309
  }
310
+ /*
311
+ Icons by role, three sizes on the whole screen (2026-10-16; there were six): 20 for the bar, the tabs and the
312
+ model's head, 18 for a palette tile, 16 beside words and on a row.
313
+ */
314
+ button[model-root] md-icon {
315
+ --md-icon-size: 20px;
316
+ }
296
317
  li md-icon {
297
318
  --md-icon-size: 16px;
298
319
  flex: none;
@@ -325,7 +346,7 @@ export class FigureParts extends localize(i18next)(LitElement) {
325
346
  color: var(--md-sys-color-tertiary);
326
347
  }
327
348
  button[eye] md-icon {
328
- --md-icon-size: 15px;
349
+ --md-icon-size: 16px;
329
350
  color: inherit;
330
351
  }
331
352
  li[off] span[label],
@@ -343,11 +364,11 @@ export class FigureParts extends localize(i18next)(LitElement) {
343
364
  overflow: hidden;
344
365
  text-overflow: ellipsis;
345
366
  white-space: nowrap;
346
- font-size: 0.78rem;
367
+ font-size: var(--ui-t-body, 13px);
347
368
  }
348
369
  span[label] small {
349
370
  margin-left: 4px;
350
- font-size: 0.66rem;
371
+ font-size: var(--ui-t-micro, 11px);
351
372
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
352
373
  }
353
374
  div[ops] {
@@ -374,7 +395,7 @@ export class FigureParts extends localize(i18next)(LitElement) {
374
395
  cursor: default;
375
396
  }
376
397
  div[ops] md-icon {
377
- --md-icon-size: 15px;
398
+ --md-icon-size: 16px;
378
399
  color: inherit;
379
400
  }
380
401
  /*
@@ -392,7 +413,7 @@ export class FigureParts extends localize(i18next)(LitElement) {
392
413
  }
393
414
  p[quiet] {
394
415
  margin: 0;
395
- font-size: 0.76rem;
416
+ font-size: var(--ui-t-small, 11.5px);
396
417
  line-height: 1.6;
397
418
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
398
419
  }
@@ -441,6 +462,7 @@ export class FigureParts extends localize(i18next)(LitElement) {
441
462
  )}
442
463
  <button
443
464
  shape
465
+ import
444
466
  ?disabled=${this.locked || full}
445
467
  title=${full ? i18next.t('figure.text.part-limit-reached') : i18next.t('figure.text.import-mesh-hint')}
446
468
  @click=${() => this.renderRoot.querySelector<HTMLInputElement>('input[mesh-file]')?.click()}
@@ -51,7 +51,7 @@ export class FigurePreview extends localize(i18next)(LitElement) {
51
51
  min-height: 0;
52
52
  overflow: hidden;
53
53
  background-color: ${unsafeCSS(WORKBENCH)};
54
- font-size: 0.76rem;
54
+ font-size: var(--ui-t-small, 11.5px);
55
55
  }
56
56
  div[stage] {
57
57
  position: absolute;
@@ -91,7 +91,7 @@ export class FigurePreview extends localize(i18next)(LitElement) {
91
91
  color: rgba(255, 255, 255, 0.9);
92
92
  background-color: rgba(28, 28, 30, 0.6);
93
93
  border-radius: 6px;
94
- font-size: 0.72rem;
94
+ font-size: var(--ui-t-micro, 11px);
95
95
  flex-wrap: wrap;
96
96
  max-width: calc(100% - 16px);
97
97
  }
@@ -123,7 +123,7 @@ export class FigurePreview extends localize(i18next)(LitElement) {
123
123
  color: rgba(255, 255, 255, 0.92);
124
124
  background-color: rgba(28, 28, 30, 0.72);
125
125
  border-radius: 8px;
126
- font-size: 0.72rem;
126
+ font-size: var(--ui-t-micro, 11px);
127
127
  }
128
128
  div[sizes] label {
129
129
  display: grid;
@@ -158,7 +158,7 @@ export class FigurePreview extends localize(i18next)(LitElement) {
158
158
  color: rgba(255, 255, 255, 0.92);
159
159
  background-color: rgba(28, 28, 30, 0.72);
160
160
  border-radius: 8px;
161
- font-size: 0.72rem;
161
+ font-size: var(--ui-t-micro, 11px);
162
162
  }
163
163
  div[clips] label {
164
164
  display: grid;
@@ -196,7 +196,7 @@ export class FigurePreview extends localize(i18next)(LitElement) {
196
196
  align-self: stretch;
197
197
  padding: 4px 8px;
198
198
  font: inherit;
199
- font-size: 0.7rem;
199
+ font-size: var(--ui-t-micro, 11px);
200
200
  color: rgba(255, 255, 255, 0.92);
201
201
  background-color: rgba(255, 255, 255, 0.14);
202
202
  border: 1px solid rgba(255, 255, 255, 0.22);
@@ -208,7 +208,7 @@ export class FigurePreview extends localize(i18next)(LitElement) {
208
208
  }
209
209
  div[clips] span[drive] {
210
210
  opacity: 0.6;
211
- font-size: 0.66rem;
211
+ font-size: var(--ui-t-micro, 11px);
212
212
  }
213
213
  div[clips] input {
214
214
  width: 96px;
@@ -29,7 +29,7 @@ export class FigureRecipeCatalog extends localize(i18next)(LitElement) {
29
29
  display: grid;
30
30
  place-items: center;
31
31
  background: color-mix(in srgb, var(--md-sys-color-scrim, #000) 32%, transparent);
32
- font-size: 0.82rem;
32
+ font-size: var(--ui-t-body, 13px);
33
33
  color: var(--md-sys-color-on-surface);
34
34
  }
35
35
  div[panel] {
@@ -90,7 +90,7 @@ export class FigureSectionEditor extends localize(i18next)(LitElement) {
90
90
  font-size: var(--ui-t-body);
91
91
  }
92
92
  header span {
93
- font-size: 0.72rem;
93
+ font-size: var(--ui-t-micro, 11px);
94
94
  color: var(--md-sys-color-on-surface-variant);
95
95
  }
96
96
  nav[tabs] {
@@ -102,7 +102,7 @@ export class FigureSectionEditor extends localize(i18next)(LitElement) {
102
102
  footer button,
103
103
  li button {
104
104
  font: inherit;
105
- font-size: 0.78rem;
105
+ font-size: var(--ui-t-small, 11.5px);
106
106
  min-height: 30px;
107
107
  padding: 0 12px;
108
108
  border-radius: 15px;
@@ -136,7 +136,7 @@ export class FigureSectionEditor extends localize(i18next)(LitElement) {
136
136
  position: absolute;
137
137
  left: 8px;
138
138
  top: 6px;
139
- font-size: 0.68rem;
139
+ font-size: var(--ui-t-micro, 11px);
140
140
  color: var(--md-sys-color-on-surface-variant);
141
141
  pointer-events: none;
142
142
  }
@@ -222,7 +222,7 @@ export class FigureSectionEditor extends localize(i18next)(LitElement) {
222
222
  margin: 8px 0 0;
223
223
  padding: 0 0 0 16px;
224
224
  color: var(--md-sys-color-error);
225
- font-size: 0.76rem;
225
+ font-size: var(--ui-t-small, 11.5px);
226
226
  }
227
227
  small {
228
228
  color: var(--md-sys-color-on-surface-variant);
@@ -236,7 +236,7 @@ export class FigureSectionEditor extends localize(i18next)(LitElement) {
236
236
  }
237
237
  footer span[grow] {
238
238
  flex: 1;
239
- font-size: 0.72rem;
239
+ font-size: var(--ui-t-micro, 11px);
240
240
  color: var(--md-sys-color-on-surface-variant);
241
241
  }
242
242
  footer span[grow][stale] {
@@ -34,7 +34,7 @@ export class FigureSettings extends localize(i18next)(LitElement) {
34
34
  background-color: var(--md-sys-color-surface-container-lowest);
35
35
  color: var(--md-sys-color-on-surface);
36
36
  font: var(--label-font, inherit);
37
- font-size: 0.76rem;
37
+ font-size: var(--ui-t-small, 11.5px);
38
38
  }
39
39
 
40
40
  section {
@@ -58,7 +58,7 @@ export class FigureSettings extends localize(i18next)(LitElement) {
58
58
  /* 저장되지 않는다는 것을 한 번 말해 둔다 */
59
59
  p[quiet] {
60
60
  margin: 0;
61
- font-size: 0.72rem;
61
+ font-size: var(--ui-t-micro, 11px);
62
62
  line-height: 1.5;
63
63
  color: var(--md-sys-color-on-surface-variant);
64
64
  }
@@ -76,7 +76,7 @@ export class FigureSettings extends localize(i18next)(LitElement) {
76
76
  }
77
77
  label[row] em {
78
78
  font-style: normal;
79
- font-size: 0.7rem;
79
+ font-size: var(--ui-t-micro, 11px);
80
80
  color: var(--md-sys-color-on-surface-variant);
81
81
  }
82
82
 
@@ -104,7 +104,7 @@ export class FigureSettings extends localize(i18next)(LitElement) {
104
104
  width: 100%;
105
105
  padding: 5px 6px;
106
106
  font: var(--input-field-font, inherit);
107
- font-size: 0.76rem;
107
+ font-size: var(--ui-t-small, 11.5px);
108
108
  color: var(--md-sys-color-on-surface);
109
109
  background-color: var(--md-sys-color-surface);
110
110
  border: 1px solid var(--md-sys-color-outline-variant);
@@ -131,8 +131,8 @@ export class FigureSettings extends localize(i18next)(LitElement) {
131
131
  flex: none;
132
132
  width: 2.4em;
133
133
  text-align: right;
134
- font: var(--mono-font, ui-monospace, monospace);
135
- font-size: 0.72rem;
134
+ font-family: var(--ui-mono, ui-monospace, monospace);
135
+ font-size: var(--ui-t-micro, 11px);
136
136
  color: var(--md-sys-color-on-surface-variant);
137
137
  }
138
138
 
@@ -140,7 +140,7 @@ export class FigureSettings extends localize(i18next)(LitElement) {
140
140
  align-self: flex-start;
141
141
  padding: 5px 12px;
142
142
  font: var(--label-font, inherit);
143
- font-size: 0.74rem;
143
+ font-size: var(--ui-t-small, 11.5px);
144
144
  color: var(--md-sys-color-on-surface-variant);
145
145
  background: none;
146
146
  border: 1px solid var(--md-sys-color-outline-variant);
@@ -72,7 +72,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
72
72
  p[lead],
73
73
  p[basis],
74
74
  p[quiet] {
75
- font-size: 0.74rem;
75
+ font-size: var(--ui-t-micro, 11px);
76
76
  line-height: 1.55;
77
77
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
78
78
  }
@@ -86,14 +86,14 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
86
86
  gap: 6px;
87
87
  }
88
88
  span[capacity] {
89
- font-size: 2.1rem;
89
+ font-size: var(--ui-t-hero, 26px);
90
90
  font-weight: 800;
91
91
  line-height: 1;
92
92
  letter-spacing: -0.01em;
93
93
  color: var(--md-sys-color-primary);
94
94
  }
95
95
  span[unit] {
96
- font-size: 0.9rem;
96
+ font-size: var(--ui-t-title, 15px);
97
97
  font-weight: 600;
98
98
  color: var(--md-sys-color-primary);
99
99
  }
@@ -104,7 +104,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
104
104
  gap: 5px;
105
105
  margin-left: auto;
106
106
  padding: 3px 10px;
107
- font-size: 0.76rem;
107
+ font-size: var(--ui-t-small, 11.5px);
108
108
  font-weight: 700;
109
109
  color: var(--md-sys-color-on-primary-container);
110
110
  background-color: var(--md-sys-color-primary-container);
@@ -113,7 +113,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
113
113
  span[grade] small {
114
114
  display: inline;
115
115
  margin: 0;
116
- font-size: 0.68rem;
116
+ font-size: var(--ui-t-micro, 11px);
117
117
  font-weight: 500;
118
118
  color: inherit;
119
119
  }
@@ -127,7 +127,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
127
127
  background-color: var(--md-sys-color-error-container);
128
128
  }
129
129
  p[because] {
130
- font-size: 0.78rem;
130
+ font-size: var(--ui-t-small, 11.5px);
131
131
  line-height: 1.6;
132
132
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
133
133
  }
@@ -139,7 +139,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
139
139
  display: flex;
140
140
  flex-wrap: wrap;
141
141
  gap: 2px 10px;
142
- font-size: 0.7rem;
142
+ font-size: var(--ui-t-micro, 11px);
143
143
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
144
144
  }
145
145
  p[scale] b {
@@ -184,11 +184,12 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
184
184
  fill: var(--md-sys-color-primary);
185
185
  }
186
186
  div[radar] text {
187
+ /* svg-units: the radar's own coordinates (its viewBox), drawn to the chart's size -- not a page size. */
187
188
  font-size: 5.2px;
188
189
  fill: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
189
190
  }
190
191
  p[unmeasured] {
191
- font-size: 0.7rem;
192
+ font-size: var(--ui-t-micro, 11px);
192
193
  line-height: 1.5;
193
194
  color: var(--md-sys-color-tertiary);
194
195
  }
@@ -209,7 +210,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
209
210
  display: grid;
210
211
  grid-template-columns: 1fr auto;
211
212
  gap: 2px 8px;
212
- font-size: 0.75rem;
213
+ font-size: var(--ui-t-small, 11.5px);
213
214
  }
214
215
  ul[axes] li[blocked] {
215
216
  opacity: 0.7;
@@ -217,7 +218,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
217
218
  ul[axes] em {
218
219
  grid-column: 1 / -1;
219
220
  font-style: normal;
220
- font-size: 0.68rem;
221
+ font-size: var(--ui-t-micro, 11px);
221
222
  line-height: 1.5;
222
223
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
223
224
  }
@@ -225,7 +226,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
225
226
  color: var(--md-sys-color-tertiary);
226
227
  }
227
228
  span[reading] {
228
- font-family: var(--mono-font, monospace);
229
+ font-family: var(--ui-mono, ui-monospace, monospace);
229
230
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
230
231
  }
231
232
  div[bar] {
@@ -250,7 +251,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
250
251
  display: grid;
251
252
  grid-template-columns: 1fr auto;
252
253
  gap: 4px 8px;
253
- font-size: 0.78rem;
254
+ font-size: var(--ui-t-small, 11.5px);
254
255
  }
255
256
  dl[metrics] dt {
256
257
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
@@ -258,7 +259,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
258
259
  dl[metrics] dd {
259
260
  margin: 0;
260
261
  text-align: right;
261
- font-family: var(--mono-font, monospace);
262
+ font-family: var(--ui-mono, ui-monospace, monospace);
262
263
  }
263
264
 
264
265
  /* ── Trend ──────────────────────────────────────────────────────
@@ -268,7 +269,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
268
269
  justify-self: start;
269
270
  padding: 4px 10px;
270
271
  font: inherit;
271
- font-size: 0.74rem;
272
+ font-size: var(--ui-t-small, 11.5px);
272
273
  color: var(--md-sys-color-on-surface);
273
274
  background: none;
274
275
  border: 1px solid var(--md-sys-color-outline-variant);
@@ -304,7 +305,7 @@ export class FigureVerdict extends localize(i18next)(LitElement) {
304
305
  /* Not shrunk below its natural size — a narrow window scrolls instead. */
305
306
  min-width: 680px;
306
307
  font-family: inherit;
307
- font-size: 11px;
308
+ font-size: var(--ui-t-micro, 11px);
308
309
  fill: currentColor;
309
310
  }
310
311
  div[sheet] svg [grid] {
@@ -50,7 +50,7 @@ export const gateFindingStyles = css`
50
50
 
51
51
  li[head] {
52
52
  font: var(--label-font, inherit);
53
- font-size: 0.72rem;
53
+ font-size: var(--ui-t-small, 11.5px);
54
54
  color: var(--md-sys-color-error);
55
55
  }
56
56
 
@@ -64,7 +64,7 @@ export const gateFindingStyles = css`
64
64
  align-items: flex-start;
65
65
  gap: 3px;
66
66
  padding: 3px 6px;
67
- font-size: 0.72rem;
67
+ font-size: var(--ui-t-small, 11.5px);
68
68
  line-height: 1.5;
69
69
  color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
70
70
  background-color: var(--md-sys-color-surface-container);
@@ -77,8 +77,8 @@ export const gateFindingStyles = css`
77
77
  }
78
78
 
79
79
  li[finding] [where] {
80
- font-family: var(--mono-font, monospace);
81
- font-size: 0.68rem;
80
+ font-family: var(--ui-mono, ui-monospace, monospace);
81
+ font-size: var(--ui-t-micro, 11px);
82
82
  opacity: 0.85;
83
83
  }
84
84
 
@@ -106,8 +106,7 @@ export const gateFindingStyles = css`
106
106
  font-weight: 600;
107
107
  }
108
108
  li[finding] span[how-line] md-icon {
109
- --md-icon-size: 13px;
109
+ --md-icon-size: 16px;
110
110
  flex: none;
111
- margin-top: 1px;
112
111
  }
113
112
  `
@@ -52,6 +52,6 @@ export const GroupMenuStyles = css`
52
52
  background: var(--md-sys-color-surface-container);
53
53
  }
54
54
  button[group-menu] md-icon {
55
- --md-icon-size: 18px;
55
+ --md-icon-size: 16px;
56
56
  }
57
57
  `
@@ -72,7 +72,7 @@ export class FigureModellerPage extends PageView {
72
72
  box-sizing: border-box;
73
73
  min-height: 30px;
74
74
  padding: 4px 7px;
75
- font-family: var(--mono-font, monospace);
75
+ font-family: var(--ui-mono, ui-monospace, monospace);
76
76
  font-size: 0.76rem;
77
77
  color: var(--md-sys-color-on-surface);
78
78
  background: var(--md-sys-color-surface-container-lowest);
@@ -38,7 +38,7 @@ export class FigureDetailDock extends localize(i18next)(LitElement) {
38
38
  header { display: flex; align-items: flex-start; gap: 2px; padding: 12px 8px 4px 16px; }
39
39
  [title-block] { flex: 1; min-width: 0; display: grid; gap: 2px; }
40
40
  h2 { margin: 0; font-size: var(--ui-t-title, 16px); font-weight: 600; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
41
- code { font-family: var(--mono-font, monospace); color: var(--md-sys-color-on-surface-variant); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
41
+ code { font-family: var(--ui-mono, ui-monospace, monospace); color: var(--md-sys-color-on-surface-variant); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
42
42
  button { font: inherit; color: inherit; cursor: pointer; }
43
43
  button:focus-visible { outline: 2px solid var(--md-sys-color-primary); outline-offset: 1px; }
44
44
  button[icon] { display: inline-grid; place-items: center; width: 28px; height: 28px; padding: 0; border: none; border-radius: 6px;