koneck 2.87.1 → 2.88.0

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.
@@ -48,7 +48,15 @@ export function css(markUrl) {
48
48
  :root{
49
49
  /* light, and the default when nothing has been chosen */
50
50
  --bg:#f7f9fa; --panel:#ffffff; --panel-2:#eef2f4; --line:#d5dee2; --line-2:#c3d0d6;
51
- --ink:#0f1c22; --muted:#4a606b; --dim:#6b8390;
51
+ /*
52
+ * Measured against the surfaces they sit on, not chosen by eye.
53
+ *
54
+ * --dim was #6b8390: 3.98:1 on a white panel and 3.53:1 on the grey one, against the 4.5 that
55
+ * ordinary text needs to be readable. It is used for command output, timings and hints — the
56
+ * small text somebody actually has to read — and it was reported as not visible enough. #57707f
57
+ * clears it on both: 5.21:1 and 4.63:1.
58
+ */
59
+ --ink:#0f1c22; --muted:#4a606b; --dim:#57707f;
52
60
  --cyan:#0d7f92; --cyan-ink:#ffffff; --amber:#8a5a00; --green:#0f7a4a; --red:#b4232a;
53
61
  /* Code colours, one per terminal colour the highlighter uses. */
54
62
  --blue:#1b5fa8; --yellow:#8a5a00; --magenta:#8a3b9e;
@@ -91,31 +99,31 @@ aside{width:272px;flex:0 0 272px;background:var(--panel);border-right:1px solid
91
99
  aside.hide{display:none}
92
100
  .brand{display:flex;align-items:center;gap:10px;padding:15px 15px 12px}
93
101
  .brand .mark{width:26px;height:25px;color:var(--cyan)}
94
- .brand b{font-size:13px;letter-spacing:.15em;font-weight:600}
95
- .brand .tag{font-size:9px;letter-spacing:.12em;color:var(--dim);
102
+ .brand b{font-size:calc(var(--ui) * 0.9286);letter-spacing:.15em;font-weight:600}
103
+ .brand .tag{font-size:calc(var(--ui) * 0.6429);letter-spacing:.12em;color:var(--dim);
96
104
  border:1px solid var(--line);border-radius:4px;padding:2px 5px}
97
105
  .newbtn{margin:0 12px 12px;padding:9px;border:1px solid var(--line);background:var(--panel-2);
98
106
  border-radius:var(--radius);display:flex;align-items:center;justify-content:center;gap:7px;
99
107
  transition:border-color .14s,color .14s;font-weight:500}
100
108
  .newbtn:hover{border-color:var(--cyan);color:var(--cyan)}
101
- .shead{padding:9px 15px 5px;font-size:10px;letter-spacing:.12em;color:var(--dim);
109
+ .shead{padding:9px 15px 5px;font-size:calc(var(--ui) * 0.7143);letter-spacing:.12em;color:var(--dim);
102
110
  text-transform:uppercase;display:flex;justify-content:space-between;align-items:center}
103
111
  .slist{overflow-y:auto;flex:1;min-height:0;padding:0 8px 10px}
104
112
  .srow{padding:8px 10px;border-radius:8px;margin-bottom:2px;border:1px solid transparent;
105
113
  cursor:pointer;width:100%;text-align:left;display:block}
106
114
  .srow:hover{background:var(--panel-2)}
107
115
  .srow.on{background:var(--panel-2);border-color:var(--line-2)}
108
- .srow .t{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
109
- .srow .m{font-size:10.5px;color:var(--dim);margin-top:2px;display:flex;gap:7px;align-items:center;
116
+ .srow .t{font-size:calc(var(--ui) * 0.8929);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
117
+ .srow .m{font-size:calc(var(--ui) * 0.75);color:var(--dim);margin-top:2px;display:flex;gap:7px;align-items:center;
110
118
  white-space:nowrap;overflow:hidden}
111
119
  .dot{width:6px;height:6px;border-radius:50%;background:var(--green);flex:0 0 6px}
112
120
  .dot.busy{background:var(--amber);animation:pulse 1.1s infinite}
113
121
  .dot.past{background:var(--dim)}
114
122
  .srow .run{color:var(--amber)}
115
123
  @keyframes pulse{50%{opacity:.3}}
116
- .foot{border-top:1px solid var(--line);padding:9px 12px;font-size:10.5px;color:var(--dim);
124
+ .foot{border-top:1px solid var(--line);padding:9px 12px;font-size:calc(var(--ui) * 0.75);color:var(--dim);
117
125
  display:flex;justify-content:space-between;align-items:center;gap:8px}
118
- .themebtn{border:1px solid var(--line);border-radius:7px;padding:3px 8px;font-size:10.5px;
126
+ .themebtn{border:1px solid var(--line);border-radius:7px;padding:3px 8px;font-size:calc(var(--ui) * 0.75);
119
127
  color:var(--muted)}
120
128
  .themebtn:hover{border-color:var(--cyan);color:var(--cyan)}
121
129
 
@@ -133,16 +141,16 @@ main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;position
133
141
  * actually at the item's coordinates, which answered "the hero panel".
134
142
  */
135
143
  header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:flex;
136
- align-items:center;gap:8px;padding:0 14px;background:var(--panel);font-size:12px}
144
+ align-items:center;gap:8px;padding:0 14px;background:var(--panel);font-size:calc(var(--ui) * 0.8571)}
137
145
  /* The pills, which are what needed to scroll in the first place. */
138
146
  .hpills{display:flex;align-items:center;gap:8px;min-width:0;overflow-x:auto;overflow-y:hidden;
139
147
  scrollbar-width:none;padding:2px 0}
140
148
  .hpills::-webkit-scrollbar{display:none}
141
149
  .iconbtn{width:28px;height:28px;border-radius:7px;border:1px solid transparent;color:var(--muted);
142
- display:grid;place-items:center;font-size:15px}
150
+ display:grid;place-items:center;font-size:calc(var(--ui) * 1.0714)}
143
151
  .iconbtn:hover{background:var(--panel-2);color:var(--ink)}
144
152
  .tabs{display:flex;gap:2px;background:var(--panel-2);border-radius:8px;padding:2px}
145
- .tab{padding:4px 12px;border-radius:6px;font-size:12px;color:var(--muted)}
153
+ .tab{padding:4px 12px;border-radius:6px;font-size:calc(var(--ui) * 0.8571);color:var(--muted)}
146
154
  .tab.on{background:var(--panel);color:var(--ink);box-shadow:var(--shadow)}
147
155
  .tab .n{color:var(--dim);margin-left:5px;font-variant-numeric:tabular-nums}
148
156
  /*
@@ -181,29 +189,42 @@ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:fle
181
189
  .wrap{max-width:840px;margin:0 auto;padding:24px}
182
190
  .hero{text-align:center;padding:12vh 0 0;color:var(--muted)}
183
191
  .hero .mark{width:64px;height:63px;color:var(--cyan);margin:0 auto 14px}
184
- .hero h1{font-size:22px;margin:0;color:var(--ink);font-weight:600}
185
- .hero p{font-size:13px;margin:8px 0 0}
192
+ .hero h1{font-size:calc(var(--ui) * 1.5714);margin:0;color:var(--ink);font-weight:600}
193
+ .hero p{font-size:calc(var(--ui) * 0.9286);margin:8px 0 0}
186
194
  .hero .ex{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:18px}
187
195
  .hero .ex button{border:1px solid var(--line);border-radius:999px;padding:5px 13px;
188
- font-size:12px;color:var(--muted);background:var(--panel)}
196
+ font-size:calc(var(--ui) * 0.8571);color:var(--muted);background:var(--panel)}
189
197
  .hero .ex button:hover{border-color:var(--cyan);color:var(--cyan)}
190
198
 
191
199
  /* ── transcript ──────────────────────────────────────────── */
192
200
  .msg{margin-bottom:18px}
193
201
  .you{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);
194
202
  padding:11px 14px;white-space:pre-wrap;word-break:break-word}
195
- .who{display:flex;align-items:center;gap:7px;font-size:10.5px;letter-spacing:.11em;
203
+ .who{display:flex;align-items:center;gap:7px;font-size:calc(var(--ui) * 0.75);letter-spacing:.11em;
196
204
  color:var(--dim);text-transform:uppercase;margin-bottom:7px}
197
205
  .who .mark{width:13px;height:13px;color:var(--cyan)}
198
- .reply{white-space:pre-wrap;word-break:break-word;font-size:14px;line-height:1.7}
206
+ /*
207
+ * A reply is prose now, not preformatted text.
208
+ *
209
+ * pre-wrap was holding the line breaks because nothing else was: there were no paragraphs and no
210
+ * lists, so every newline the model wrote had to survive literally. With both rendered, keeping it
211
+ * would double every gap — a paragraph's margin and the blank line that made it.
212
+ */
213
+ .reply{word-break:break-word;font-size:var(--ui);line-height:1.7}
214
+ .reply > :first-child{margin-top:0}
215
+ .reply > :last-child{margin-bottom:0}
216
+ .reply p{margin:0 0 .75em}
217
+ .reply ul,.reply ol{margin:.5em 0 .8em;padding-left:1.4em}
218
+ .reply li{margin:.22em 0}
219
+ .reply li > p{margin:0}
199
220
  .reply code{background:var(--panel-2);border:1px solid var(--line);border-radius:4px;
200
- padding:1px 5px;font-family:var(--mono);font-size:12.5px}
221
+ padding:1px 5px;font-family:var(--mono);font-size:calc(var(--ui) * 0.8929)}
201
222
  .reply pre{background:var(--panel);border:1px solid var(--line);border-radius:8px;
202
223
  padding:12px 14px;overflow-x:auto;margin:10px 0;white-space:pre}
203
- .reply pre code{background:none;border:0;padding:0;font-size:12.5px;line-height:1.5}
204
- .reply h3{font-size:14.5px;margin:16px 0 6px}
224
+ .reply pre code{background:none;border:0;padding:0;font-size:calc(var(--ui) * 0.8929);line-height:1.5}
225
+ .reply h3{font-size:calc(var(--ui) * 1.0357);margin:16px 0 6px}
205
226
  .reply strong{font-weight:600}
206
- .reply table{border-collapse:collapse;margin:10px 0;font-size:12.5px;display:block;overflow-x:auto}
227
+ .reply table{border-collapse:collapse;margin:10px 0;font-size:calc(var(--ui) * 0.8929);display:block;overflow-x:auto}
207
228
  .reply th,.reply td{border:1px solid var(--line);padding:5px 9px;text-align:left}
208
229
  .reply th{background:var(--panel-2);color:var(--muted);font-weight:600}
209
230
 
@@ -211,20 +232,20 @@ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:fle
211
232
  background:var(--panel);margin:8px 0;overflow:hidden}
212
233
  .tool.ok{border-left-color:var(--green)} .tool.bad{border-left-color:var(--red)}
213
234
  .tool.run{border-left-color:var(--amber)}
214
- .tool .th{display:flex;align-items:center;gap:9px;padding:8px 12px;font-size:12.5px;width:100%;
235
+ .tool .th{display:flex;align-items:center;gap:9px;padding:8px 12px;font-size:calc(var(--ui) * 0.8929);width:100%;
215
236
  text-align:left}
216
237
  .tool .th:hover{background:var(--panel-2)}
217
- .tool .nm{font-family:var(--mono);color:var(--cyan);font-size:12px}
238
+ .tool .nm{font-family:var(--mono);color:var(--cyan);font-size:calc(var(--ui) * 0.8571)}
218
239
  .tool .dt{color:var(--muted);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
219
- font-family:var(--mono);font-size:11.5px}
220
- .tool .ms{color:var(--dim);font-variant-numeric:tabular-nums;font-size:11px}
240
+ font-family:var(--mono);font-size:calc(var(--ui) * 0.8214)}
241
+ .tool .ms{color:var(--dim);font-variant-numeric:tabular-nums;font-size:calc(var(--ui) * 0.7857)}
221
242
  /*
222
243
  * A tool's output keeps a ceiling, unlike prose: it can be a whole file, and a whole file in the
223
244
  * flow of a conversation is not something anybody wants to scroll past. Generous enough to read a
224
245
  * normal result without a second scrollbar.
225
246
  */
226
247
  .tool .body{border-top:1px solid var(--line);padding:9px 12px;font-family:var(--mono);
227
- font-size:11.5px;color:var(--muted);white-space:pre-wrap;max-height:60vh;overflow:auto}
248
+ font-size:calc(var(--ui) * 0.8214);color:var(--muted);white-space:pre-wrap;max-height:60vh;overflow:auto}
228
249
  /*
229
250
  * Thinking reads as prose, not as a window to scroll inside.
230
251
  *
@@ -241,28 +262,51 @@ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:fle
241
262
  * thinking and roughly about what — and the text is never dropped, only hidden.
242
263
  */
243
264
  .thinkbox{border-left:2px solid var(--line-2);margin:10px 0;padding-left:13px}
244
- .thinkhead{display:flex;align-items:center;gap:9px;font-size:10.5px;letter-spacing:.09em;
265
+ .thinkhead{display:flex;align-items:center;gap:9px;font-size:calc(var(--ui) * 0.75);letter-spacing:.09em;
245
266
  text-transform:uppercase;color:var(--dim)}
246
- .thinkhead button{margin-left:auto;font-size:10.5px;letter-spacing:.04em;text-transform:none;
267
+ .thinkhead button{margin-left:auto;font-size:calc(var(--ui) * 0.75);letter-spacing:.04em;text-transform:none;
247
268
  color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:1px 9px}
248
269
  .thinkhead button:hover{border-color:var(--cyan);color:var(--cyan)}
249
- .think{padding:2px 0;color:var(--muted);font-size:13px;line-height:1.65;white-space:pre-wrap;
270
+ /*
271
+ * Reasoning, set as prose rather than as a dump.
272
+ *
273
+ * pre-wrap was right when this was plain text and wrong the moment it became markdown: it would
274
+ * hold every blank line the renderer already turns into a paragraph, and double the spacing. The
275
+ * shapes a model actually reasons in — a heading, a numbered sequence, a short list, a snippet of
276
+ * code — each get the room they need and no more, at a size that stays under the reply it belongs
277
+ * to.
278
+ */
279
+ .think{padding:2px 0;color:var(--muted);font-size:calc(var(--ui) * 0.9286);line-height:1.65;
250
280
  word-break:break-word}
281
+ .think > :first-child{margin-top:0}
282
+ .think > :last-child{margin-bottom:0}
283
+ .think p{margin:0 0 .6em}
284
+ .think ul,.think ol{margin:.4em 0 .6em;padding-left:1.3em}
285
+ .think li{margin:.18em 0}
286
+ .think h1,.think h2,.think h3,.think h4{font-size:calc(var(--ui) * 0.9286);font-weight:600;
287
+ color:var(--ink);margin:.8em 0 .3em}
288
+ .think code{font-family:var(--mono);font-size:.92em;background:var(--panel-2);
289
+ border-radius:4px;padding:1px 4px}
290
+ .think pre{background:var(--panel-2);border-radius:7px;padding:8px 10px;overflow-x:auto;
291
+ margin:.5em 0}
292
+ .think pre code{background:none;padding:0}
293
+ .think strong{color:var(--ink);font-weight:600}
294
+ .think a{color:var(--cyan)}
251
295
  /* Four lines and a fade, so it is plainly cut off rather than mysteriously short. */
252
296
  .thinkbox.closed .think{max-height:6.6em;overflow:hidden;
253
297
  -webkit-mask-image:linear-gradient(to bottom,#000 60%,transparent);
254
298
  mask-image:linear-gradient(to bottom,#000 60%,transparent)}
255
299
  .notice{border:1px solid var(--line);border-left:3px solid var(--amber);border-radius:8px;
256
- padding:10px 13px;margin:9px 0;font-size:12.5px;color:var(--muted);white-space:pre-wrap;
300
+ padding:10px 13px;margin:9px 0;font-size:calc(var(--ui) * 0.8929);color:var(--muted);white-space:pre-wrap;
257
301
  background:var(--panel)}
258
302
  .notice.info{border-left-color:var(--cyan)}
259
303
  .err{border:1px solid var(--red);border-left:3px solid var(--red);border-radius:8px;
260
- padding:10px 13px;margin:9px 0;font-size:12.5px;color:var(--red);white-space:pre-wrap;
304
+ padding:10px 13px;margin:9px 0;font-size:calc(var(--ui) * 0.8929);color:var(--red);white-space:pre-wrap;
261
305
  background:var(--panel)}
262
306
 
263
307
  .plan{border:1px solid var(--line);border-radius:8px;background:var(--panel);margin:9px 0;
264
- padding:11px 13px;font-size:12.5px}
265
- .plan h4{margin:0 0 8px;font-size:10.5px;letter-spacing:.11em;color:var(--dim);
308
+ padding:11px 13px;font-size:calc(var(--ui) * 0.8929)}
309
+ .plan h4{margin:0 0 8px;font-size:calc(var(--ui) * 0.75);letter-spacing:.11em;color:var(--dim);
266
310
  text-transform:uppercase;display:flex;justify-content:space-between}
267
311
  .step{display:flex;gap:9px;padding:2px 0;color:var(--muted)}
268
312
  .step .bx{width:14px;color:var(--dim);flex:0 0 14px;text-align:center;font-family:var(--mono)}
@@ -272,8 +316,8 @@ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:fle
272
316
 
273
317
  .ask{border:1px solid var(--amber);border-radius:var(--radius);background:var(--panel);
274
318
  padding:12px 14px;margin:11px 0;box-shadow:var(--shadow)}
275
- .ask .q{font-size:13px;margin-bottom:5px;font-weight:500}
276
- .ask .a{font-family:var(--mono);font-size:11.5px;color:var(--muted);margin-bottom:11px;
319
+ .ask .q{font-size:calc(var(--ui) * 0.9286);margin-bottom:5px;font-weight:500}
320
+ .ask .a{font-family:var(--mono);font-size:calc(var(--ui) * 0.8214);color:var(--muted);margin-bottom:11px;
277
321
  white-space:pre-wrap;max-height:140px;overflow:auto;background:var(--panel-2);
278
322
  border-radius:6px;padding:7px 9px}
279
323
  .ask .btns{display:flex;gap:8px}
@@ -307,33 +351,33 @@ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:fle
307
351
  .ask .btns button.yes.chosen{background:var(--green);border-color:var(--green);color:var(--bg)}
308
352
  .ask .btns button.always.chosen{background:var(--cyan);border-color:var(--cyan);color:var(--cyan-ink)}
309
353
  .ask .btns button.no.chosen{background:var(--red);border-color:var(--red);color:var(--bg)}
310
- .ask .said{margin-top:10px;font-size:12px;color:var(--muted)}
354
+ .ask .said{margin-top:10px;font-size:calc(var(--ui) * 0.8571);color:var(--muted)}
311
355
  .ask.wasyes .said{color:var(--green)}
312
356
  .ask.wasno .said{color:var(--red)}
313
357
 
314
- .busy{display:flex;align-items:center;gap:10px;color:var(--amber);font-size:12.5px;margin:8px 0}
358
+ .busy{display:flex;align-items:center;gap:10px;color:var(--amber);font-size:calc(var(--ui) * 0.8929);margin:8px 0}
315
359
  .sp{width:11px;height:11px;border:2px solid var(--amber);border-right-color:transparent;
316
360
  border-radius:50%;animation:spin .8s linear infinite}
317
361
  @keyframes spin{to{transform:rotate(360deg)}}
318
362
 
319
363
  /* ── changes ─────────────────────────────────────────────── */
320
- .chead{display:flex;align-items:center;gap:14px;margin-bottom:14px;font-size:12.5px;
364
+ .chead{display:flex;align-items:center;gap:14px;margin-bottom:14px;font-size:calc(var(--ui) * 0.8929);
321
365
  color:var(--muted);flex-wrap:wrap}
322
366
  .chead .plus{color:var(--green);font-variant-numeric:tabular-nums}
323
367
  .chead .minus{color:var(--red);font-variant-numeric:tabular-nums}
324
368
  .file{border:1px solid var(--line);border-radius:8px;background:var(--panel);margin-bottom:10px;
325
369
  overflow:hidden}
326
370
  .file .fh{display:flex;align-items:center;gap:10px;padding:9px 12px;width:100%;text-align:left;
327
- font-size:12.5px}
371
+ font-size:calc(var(--ui) * 0.8929)}
328
372
  .file .fh:hover{background:var(--panel-2)}
329
- .file .kind{font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;padding:2px 6px;
373
+ .file .kind{font-size:calc(var(--ui) * 0.6786);letter-spacing:.08em;text-transform:uppercase;padding:2px 6px;
330
374
  border-radius:4px;border:1px solid var(--line);color:var(--muted);flex:0 0 auto}
331
375
  .file .kind.added{color:var(--green);border-color:var(--green)}
332
376
  .file .kind.deleted{color:var(--red);border-color:var(--red)}
333
377
  .file .fp{font-family:var(--mono);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
334
378
  direction:rtl;text-align:left}
335
- .file .cnt{font-size:11px;font-variant-numeric:tabular-nums;flex:0 0 auto}
336
- .diff{border-top:1px solid var(--line);font-family:var(--mono);font-size:11.5px;line-height:1.45;
379
+ .file .cnt{font-size:calc(var(--ui) * 0.7857);font-variant-numeric:tabular-nums;flex:0 0 auto}
380
+ .diff{border-top:1px solid var(--line);font-family:var(--mono);font-size:calc(var(--ui) * 0.8214);line-height:1.45;
337
381
  overflow-x:auto;max-height:520px;overflow-y:auto}
338
382
  .diff div{padding:0 12px;white-space:pre}
339
383
  /*
@@ -361,14 +405,14 @@ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:fle
361
405
  .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px;
362
406
  margin-bottom:18px}
363
407
  .card{border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:11px 13px}
364
- .card .k{font-size:10px;letter-spacing:.11em;color:var(--dim);text-transform:uppercase}
365
- .card .v{font-size:19px;margin-top:3px;font-variant-numeric:tabular-nums;font-weight:600}
366
- .card .s{font-size:11px;color:var(--muted);margin-top:2px}
408
+ .card .k{font-size:calc(var(--ui) * 0.7143);letter-spacing:.11em;color:var(--dim);text-transform:uppercase}
409
+ .card .v{font-size:calc(var(--ui) * 1.3571);margin-top:3px;font-variant-numeric:tabular-nums;font-weight:600}
410
+ .card .s{font-size:calc(var(--ui) * 0.7857);color:var(--muted);margin-top:2px}
367
411
  .bars{border:1px solid var(--line);border-radius:8px;background:var(--panel);overflow:hidden}
368
- .brow{display:flex;align-items:center;gap:10px;padding:6px 12px;font-size:12px;
412
+ .brow{display:flex;align-items:center;gap:10px;padding:6px 12px;font-size:calc(var(--ui) * 0.8571);
369
413
  border-bottom:1px solid var(--line)}
370
414
  .brow:last-child{border-bottom:0}
371
- .brow .lbl{width:118px;flex:0 0 118px;color:var(--muted);font-family:var(--mono);font-size:11px;
415
+ .brow .lbl{width:118px;flex:0 0 118px;color:var(--muted);font-family:var(--mono);font-size:calc(var(--ui) * 0.7857);
372
416
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
373
417
  .brow .track{flex:1;height:15px;background:var(--panel-2);border-radius:4px;overflow:hidden;
374
418
  display:flex;min-width:60px}
@@ -377,10 +421,10 @@ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:fle
377
421
  .brow .seg.gen{background:var(--cyan)}
378
422
  .brow .seg.tool{background:var(--amber)}
379
423
  .brow .val{width:74px;flex:0 0 74px;text-align:right;color:var(--dim);
380
- font-variant-numeric:tabular-nums;font-size:11px}
381
- .legend{display:flex;gap:16px;margin:10px 0 0;font-size:11px;color:var(--muted)}
424
+ font-variant-numeric:tabular-nums;font-size:calc(var(--ui) * 0.7857)}
425
+ .legend{display:flex;gap:16px;margin:10px 0 0;font-size:calc(var(--ui) * 0.7857);color:var(--muted)}
382
426
  .legend i{width:9px;height:9px;border-radius:2px;display:inline-block;margin-right:5px}
383
- .empty{text-align:center;padding:12vh 0;color:var(--dim);font-size:13px}
427
+ .empty{text-align:center;padding:12vh 0;color:var(--dim);font-size:calc(var(--ui) * 0.9286)}
384
428
 
385
429
  /* ── file tree ───────────────────────────────────────────── */
386
430
  /* Like #chatview: the tab itself does not scroll, so the panes inside it can. */
@@ -388,23 +432,23 @@ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:fle
388
432
  .split{display:flex;flex:1;min-height:0;min-width:0}
389
433
  .tree{width:300px;flex:0 0 300px;border-right:1px solid var(--line);overflow-y:auto;padding:8px 0}
390
434
  .tnode{display:flex;align-items:center;gap:6px;padding:3px 12px;width:100%;text-align:left;
391
- font-size:12.5px;font-family:var(--mono);color:var(--muted);white-space:nowrap}
435
+ font-size:calc(var(--ui) * 0.8929);font-family:var(--mono);color:var(--muted);white-space:nowrap}
392
436
  .tnode:hover{background:var(--panel-2);color:var(--ink)}
393
437
  .tnode.on{background:var(--panel-2);color:var(--cyan)}
394
438
  .tnode .ic{width:13px;flex:0 0 13px;color:var(--dim);text-align:center}
395
439
  .tnode.d .ic{color:var(--cyan)}
396
- .tnode .sz{margin-left:auto;font-size:10.5px;color:var(--dim)}
440
+ .tnode .sz{margin-left:auto;font-size:calc(var(--ui) * 0.75);color:var(--dim)}
397
441
  .fileview{flex:1;min-width:0;min-height:0;overflow:hidden;display:flex;flex-direction:column}
398
442
  .fvhead{position:sticky;top:0;background:var(--panel);border-bottom:1px solid var(--line);
399
- padding:8px 14px;font-family:var(--mono);font-size:12px;display:flex;gap:12px;align-items:center}
400
- .fvhead .fsz{color:var(--dim);font-size:11px}
443
+ padding:8px 14px;font-family:var(--mono);font-size:calc(var(--ui) * 0.8571);display:flex;gap:12px;align-items:center}
444
+ .fvhead .fsz{color:var(--dim);font-size:calc(var(--ui) * 0.7857)}
401
445
  /*
402
446
  * The line numbers are one element holding "1, newline, 2, newline, 3", so they need the same
403
447
  * white-space: pre the code has. Without it the newlines collapsed to spaces and the gutter became a
404
448
  * wrapping line of every number in the file — which filled the pane and pushed the code out of it.
405
449
  * Reported as "the numbers take all the space", and that is literally what was happening.
406
450
  */
407
- .code{display:flex;font-family:var(--mono);font-size:12.5px;line-height:1.5;align-items:stretch}
451
+ .code{display:flex;font-family:var(--mono);font-size:calc(var(--ui) * 0.8929);line-height:1.5;align-items:stretch}
408
452
  .code .gut{flex:0 0 auto;padding:10px 10px 10px 14px;text-align:right;color:var(--dim);
409
453
  background:var(--panel);border-right:1px solid var(--line);user-select:none;
410
454
  font-variant-numeric:tabular-nums;white-space:pre}
@@ -415,39 +459,39 @@ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:fle
415
459
  /* A two-state switch, used for whole-session/by-turn and for search scope. */
416
460
  .segbar{display:inline-flex;gap:2px;background:var(--panel-2);border-radius:8px;padding:2px;
417
461
  margin-bottom:14px}
418
- .seg{padding:4px 12px;border-radius:6px;font-size:12px;color:var(--muted)}
462
+ .seg{padding:4px 12px;border-radius:6px;font-size:calc(var(--ui) * 0.8571);color:var(--muted)}
419
463
  .seg.on{background:var(--panel);color:var(--ink);box-shadow:var(--shadow)}
420
- .turnhead{display:flex;align-items:center;gap:10px;margin:18px 0 8px;font-size:12px;
464
+ .turnhead{display:flex;align-items:center;gap:10px;margin:18px 0 8px;font-size:calc(var(--ui) * 0.8571);
421
465
  padding-bottom:6px;border-bottom:1px solid var(--line)}
422
466
  .turnhead .tn{font-weight:600}
423
- .turnhead .tm{color:var(--dim);font-size:11px}
467
+ .turnhead .tm{color:var(--dim);font-size:calc(var(--ui) * 0.7857)}
424
468
  .turnhead .plus{color:var(--green);font-variant-numeric:tabular-nums}
425
469
  .turnhead .minus{color:var(--red);font-variant-numeric:tabular-nums}
426
470
 
427
471
  /* ── search ──────────────────────────────────────────────── */
428
472
  .searchbar{display:flex;gap:9px;margin-bottom:16px}
429
473
  .searchbar input{flex:1;padding:9px 12px;border-radius:var(--radius);border:1px solid var(--line);
430
- background:var(--panel-2);font-size:13.5px}
474
+ background:var(--panel-2);font-size:calc(var(--ui) * 0.9643)}
431
475
  .searchbar input:focus{outline:0;border-color:var(--cyan)}
432
476
  .searchbar button{padding:9px 18px;border-radius:var(--radius);border:1px solid var(--line);
433
477
  background:var(--panel-2)}
434
478
  .searchbar button:hover{border-color:var(--cyan);color:var(--cyan)}
435
- .smeta{font-size:11.5px;color:var(--dim);margin-bottom:12px}
479
+ .smeta{font-size:calc(var(--ui) * 0.8214);color:var(--dim);margin-bottom:12px}
436
480
  .hit{border:1px solid var(--line);border-radius:8px;background:var(--panel);margin-bottom:8px;
437
481
  padding:9px 12px;width:100%;text-align:left;display:block}
438
482
  .hit:hover{border-color:var(--cyan)}
439
- .hit .hh{display:flex;gap:9px;align-items:center;font-size:10.5px;color:var(--dim);
483
+ .hit .hh{display:flex;gap:9px;align-items:center;font-size:calc(var(--ui) * 0.75);color:var(--dim);
440
484
  margin-bottom:5px}
441
485
  .hit .role{border:1px solid var(--line);border-radius:4px;padding:1px 5px;letter-spacing:.06em;
442
- text-transform:uppercase;font-size:9.5px}
486
+ text-transform:uppercase;font-size:calc(var(--ui) * 0.6786)}
443
487
  .hit .role.user{color:var(--cyan);border-color:var(--cyan)}
444
488
  .hit .role.assistant{color:var(--green);border-color:var(--green)}
445
489
  .hit .role.tool{color:var(--amber);border-color:var(--amber)}
446
- .hit .tk{font-size:12.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;
490
+ .hit .tk{font-size:calc(var(--ui) * 0.8929);color:var(--muted);overflow:hidden;text-overflow:ellipsis;
447
491
  white-space:nowrap;flex:1}
448
- .hit .ws{border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-size:9.5px;
492
+ .hit .ws{border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-size:calc(var(--ui) * 0.6786);
449
493
  color:var(--violet);border-color:var(--violet);letter-spacing:.05em;white-space:nowrap}
450
- .hit .sn{font-size:12.5px;font-family:var(--mono);color:var(--ink);word-break:break-word}
494
+ .hit .sn{font-size:calc(var(--ui) * 0.8929);font-family:var(--mono);color:var(--ink);word-break:break-word}
451
495
  .hit .sn mark{background:var(--cyan);color:var(--cyan-ink);border-radius:2px;padding:0 1px}
452
496
 
453
497
  /* ── composer ────────────────────────────────────────────── */
@@ -456,14 +500,14 @@ footer{flex:0 0 auto;border-top:1px solid var(--line);background:var(--panel);pa
456
500
  /* The running strip. Fixed above the composer, so "is it working?" never needs a scroll. */
457
501
  .live{display:flex;align-items:center;gap:10px;margin-bottom:9px;padding:8px 12px;
458
502
  border:1px solid var(--amber);border-radius:var(--radius);background:var(--panel-2);
459
- font-size:12.5px}
503
+ font-size:calc(var(--ui) * 0.8929)}
460
504
  .live[hidden]{display:none}
461
505
  .live .lw{color:var(--amber);font-weight:500}
462
- .live .lt{font-family:var(--mono);font-size:11.5px;color:var(--muted);flex:1;overflow:hidden;
506
+ .live .lt{font-family:var(--mono);font-size:calc(var(--ui) * 0.8214);color:var(--muted);flex:1;overflow:hidden;
463
507
  text-overflow:ellipsis;white-space:nowrap}
464
- .live .lel{color:var(--dim);font-variant-numeric:tabular-nums;font-size:11.5px}
508
+ .live .lel{color:var(--dim);font-variant-numeric:tabular-nums;font-size:calc(var(--ui) * 0.8214)}
465
509
  .live .lstop{border:1px solid var(--red);color:var(--red);border-radius:999px;padding:2px 10px;
466
- font-size:11.5px}
510
+ font-size:calc(var(--ui) * 0.8214)}
467
511
  /*
468
512
  * The @ picker.
469
513
  *
@@ -475,34 +519,34 @@ footer{flex:0 0 auto;border-top:1px solid var(--line);background:var(--panel);pa
475
519
  background:var(--panel);max-height:min(46vh,340px);overflow-y:auto;overflow-x:hidden;
476
520
  box-shadow:0 -6px 26px rgba(0,0,0,.22)}
477
521
  .mention[hidden]{display:none}
478
- .mhead{display:flex;align-items:center;gap:8px;padding:7px 11px;font-size:10.5px;
522
+ .mhead{display:flex;align-items:center;gap:8px;padding:7px 11px;font-size:calc(var(--ui) * 0.75);
479
523
  letter-spacing:.09em;text-transform:uppercase;color:var(--dim);
480
524
  border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel);z-index:1}
481
525
  .mhead .mgap{flex:1}
482
- .mhead .mkeys{text-transform:none;letter-spacing:0;font-size:11px}
526
+ .mhead .mkeys{text-transform:none;letter-spacing:0;font-size:calc(var(--ui) * 0.7857)}
483
527
  .mrow{display:flex;align-items:baseline;gap:9px;padding:6px 11px;cursor:pointer;
484
528
  border-left:2px solid transparent}
485
529
  .mrow:hover{background:var(--panel-2)}
486
530
  .mrow.on{background:var(--panel-2);border-left-color:var(--cyan)}
487
531
  /* The name carries the weight; the directory it sits in is context, not the answer. */
488
- .mrow .mp{font-family:var(--mono);font-size:12.5px;color:var(--muted);flex:1;min-width:0;
532
+ .mrow .mp{font-family:var(--mono);font-size:calc(var(--ui) * 0.8929);color:var(--muted);flex:1;min-width:0;
489
533
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl;text-align:left}
490
534
  .mrow .mp b{color:var(--ink);font-weight:600}
491
535
  .mrow .mwhy{display:flex;gap:5px;flex:0 0 auto}
492
536
  /* Why it is where it is, said in the row rather than in a tooltip nobody opens. */
493
- .mwhy span{font-size:9.5px;letter-spacing:.04em;padding:1px 6px;border-radius:999px;
537
+ .mwhy span{font-size:calc(var(--ui) * 0.6786);letter-spacing:.04em;padding:1px 6px;border-radius:999px;
494
538
  border:1px solid var(--line-2);color:var(--dim);white-space:nowrap}
495
539
  .mwhy span.s{border-color:var(--cyan);color:var(--cyan)}
496
540
  .mwhy span.g{border-color:var(--amber);color:var(--amber)}
497
541
  /* Tabular so the costs form a column you can compare down, rather than a ragged edge. */
498
- .mrow .mcost{flex:0 0 auto;font-size:11px;color:var(--dim);font-variant-numeric:tabular-nums}
499
- .mrow .mdir{flex:0 0 auto;font-size:11px;color:var(--dim)}
500
- .mnone{padding:10px 11px;font-size:12.5px;color:var(--dim)}
542
+ .mrow .mcost{flex:0 0 auto;font-size:calc(var(--ui) * 0.7857);color:var(--dim);font-variant-numeric:tabular-nums}
543
+ .mrow .mdir{flex:0 0 auto;font-size:calc(var(--ui) * 0.7857);color:var(--dim)}
544
+ .mnone{padding:10px 11px;font-size:calc(var(--ui) * 0.8929);color:var(--dim)}
501
545
  /* What an @ attached, under the message it was in. */
502
546
  /* Where a long transcript was trimmed. A rule through it, so it reads as a join rather than a row. */
503
547
  .gap{display:flex;align-items:center;gap:11px;margin:18px 0}
504
548
  .gap .gl{flex:1;height:1px;background:var(--line-2)}
505
- .gap .gt{flex:0 0 auto;font-size:11px;color:var(--dim);white-space:nowrap}
549
+ .gap .gt{flex:0 0 auto;font-size:calc(var(--ui) * 0.7857);color:var(--dim);white-space:nowrap}
506
550
  /*
507
551
  * Back to the newest.
508
552
  *
@@ -511,13 +555,13 @@ footer{flex:0 0 auto;border-top:1px solid var(--line);background:var(--panel);pa
511
555
  */
512
556
  .tobottom{position:absolute;left:50%;transform:translateX(-50%);bottom:96px;z-index:40;
513
557
  display:flex;align-items:center;gap:6px;padding:5px 13px;border-radius:999px;
514
- border:1px solid var(--cyan);background:var(--panel);color:var(--cyan);font-size:11.5px;
558
+ border:1px solid var(--cyan);background:var(--panel);color:var(--cyan);font-size:calc(var(--ui) * 0.8214);
515
559
  box-shadow:var(--shadow);cursor:pointer}
516
560
  .tobottom:hover{background:var(--panel-2)}
517
561
  .tobottom[hidden]{display:none}
518
562
 
519
563
  /* A heading inside a settings section: quieter than a section, louder than a row. */
520
- .sgroup{margin:18px 0 2px;font-size:11px;letter-spacing:.09em;text-transform:uppercase;
564
+ .sgroup{margin:18px 0 2px;font-size:calc(var(--ui) * 0.7857);letter-spacing:.09em;text-transform:uppercase;
521
565
  color:var(--muted);font-weight:600}
522
566
  .sgroup:first-child{margin-top:4px}
523
567
  /*
@@ -541,20 +585,20 @@ footer{flex:0 0 auto;border-top:1px solid var(--line);background:var(--panel);pa
541
585
  border-radius:var(--radius);box-shadow:var(--shadow);padding:9px}
542
586
  .termhist[hidden]{display:none}
543
587
  .termhist input{width:100%;background:var(--panel-2);border:1px solid var(--line);
544
- border-radius:7px;padding:7px 10px;font-family:var(--mono);font-size:12.5px;color:var(--ink)}
588
+ border-radius:7px;padding:7px 10px;font-family:var(--mono);font-size:calc(var(--ui) * 0.8929);color:var(--ink)}
545
589
  .thlist{max-height:min(40vh,300px);overflow-y:auto;margin-top:7px}
546
- .throw{display:block;width:100%;text-align:left;font-family:var(--mono);font-size:12px;
590
+ .throw{display:block;width:100%;text-align:left;font-family:var(--mono);font-size:calc(var(--ui) * 0.8571);
547
591
  padding:5px 9px;border-radius:6px;border:0;background:none;color:var(--muted);cursor:pointer;
548
592
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
549
593
  .throw:hover,.throw.on{background:var(--panel-2);color:var(--ink)}
550
- .thnone{padding:9px;font-size:12.5px;color:var(--dim)}
551
- .thhint{margin-top:6px;font-size:10.5px;color:var(--dim)}
594
+ .thnone{padding:9px;font-size:calc(var(--ui) * 0.8929);color:var(--dim)}
595
+ .thhint{margin-top:6px;font-size:calc(var(--ui) * 0.75);color:var(--dim)}
552
596
  .urefs{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
553
- .uref{font-family:var(--mono);font-size:10.5px;color:var(--dim);padding:1px 7px;
597
+ .uref{font-family:var(--mono);font-size:calc(var(--ui) * 0.75);color:var(--dim);padding:1px 7px;
554
598
  border:1px solid var(--line-2);border-radius:999px}
555
599
  .uref.bad{border-color:var(--red);color:var(--red)}
556
600
  /* "yours" beside a declared provider: a label, not an emphasis. */
557
- .pmine{font-style:normal;font-size:9.5px;letter-spacing:.05em;color:var(--cyan);
601
+ .pmine{font-style:normal;font-size:calc(var(--ui) * 0.6786);letter-spacing:.05em;color:var(--cyan);
558
602
  border:1px solid var(--cyan);border-radius:999px;padding:1px 6px;margin-left:7px}
559
603
  .attached{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:9px}
560
604
  .attached[hidden]{display:none}
@@ -562,9 +606,9 @@ footer{flex:0 0 auto;border-top:1px solid var(--line);background:var(--panel);pa
562
606
  border:1px solid var(--line)}
563
607
  .thumb img{width:100%;height:100%;object-fit:cover;display:block}
564
608
  .thumb button{position:absolute;top:1px;right:1px;width:17px;height:17px;border-radius:50%;
565
- background:var(--bg);color:var(--ink);font-size:11px;line-height:1;border:1px solid var(--line)}
609
+ background:var(--bg);color:var(--ink);font-size:calc(var(--ui) * 0.7857);line-height:1;border:1px solid var(--line)}
566
610
  .attach{width:28px;height:28px;flex:0 0 28px;border-radius:8px;border:1px solid var(--line);
567
- color:var(--muted);font-size:16px;display:grid;place-items:center}
611
+ color:var(--muted);font-size:calc(var(--ui) * 1.1429);display:grid;place-items:center}
568
612
  .attach:hover{border-color:var(--cyan);color:var(--cyan)}
569
613
  .cin.drop{border-color:var(--cyan);background:var(--panel)}
570
614
  footer[hidden]{display:none}
@@ -583,41 +627,41 @@ footer[hidden]{display:none}
583
627
  * flex-grow reading 1 the whole time.
584
628
  */
585
629
  .cin textarea{flex:1;background:none;border:0;outline:0;resize:none;max-height:200px;
586
- line-height:1.5;font-size:14px}
630
+ line-height:1.5;font-size:var(--ui)}
587
631
  textarea::placeholder{color:var(--dim)}
588
632
  .send{width:31px;height:31px;flex:0 0 31px;border-radius:50%;
589
- background:var(--cyan);color:var(--cyan-ink);font-size:15px;display:grid;place-items:center}
633
+ background:var(--cyan);color:var(--cyan-ink);font-size:calc(var(--ui) * 1.0714);display:grid;place-items:center}
590
634
  .send:disabled{background:var(--line);color:var(--dim);cursor:not-allowed}
591
- .chint{display:flex;gap:13px;margin-top:7px;font-size:10.5px;color:var(--dim)}
635
+ .chint{display:flex;gap:13px;margin-top:7px;font-size:calc(var(--ui) * 0.75);color:var(--dim)}
592
636
  .chint kbd{border:1px solid var(--line);border-radius:4px;padding:0 4px;font-family:var(--mono)}
593
- .tinybtn{border:1px solid var(--line);border-radius:5px;padding:1px 7px;font-size:10.5px;
637
+ .tinybtn{border:1px solid var(--line);border-radius:5px;padding:1px 7px;font-size:calc(var(--ui) * 0.75);
594
638
  color:var(--muted)}
595
639
  .tinybtn:hover{border-color:var(--cyan);color:var(--cyan)}
596
640
  .tinybtn:disabled{opacity:.45;cursor:not-allowed}
597
641
 
598
642
  /* sub-agents, while they run */
599
643
  .agents{border:1px solid var(--line);border-radius:8px;background:var(--panel);margin:9px 0;
600
- padding:10px 13px;font-size:12.5px}
601
- .agents h4{margin:0 0 8px;font-size:10.5px;letter-spacing:.11em;color:var(--dim);
644
+ padding:10px 13px;font-size:calc(var(--ui) * 0.8929)}
645
+ .agents h4{margin:0 0 8px;font-size:calc(var(--ui) * 0.75);letter-spacing:.11em;color:var(--dim);
602
646
  text-transform:uppercase;display:flex;justify-content:space-between}
603
647
  .arow{display:flex;align-items:center;gap:10px;padding:3px 0}
604
- .arow .ai{width:20px;flex:0 0 20px;color:var(--dim);font-family:var(--mono);font-size:11px}
648
+ .arow .ai{width:20px;flex:0 0 20px;color:var(--dim);font-family:var(--mono);font-size:calc(var(--ui) * 0.7857)}
605
649
  .arow .at{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}
606
- .arow .as{font-size:9.5px;letter-spacing:.07em;text-transform:uppercase;padding:1px 6px;
650
+ .arow .as{font-size:calc(var(--ui) * 0.6786);letter-spacing:.07em;text-transform:uppercase;padding:1px 6px;
607
651
  border-radius:4px;border:1px solid var(--line);flex:0 0 auto}
608
652
  .arow.running .as{color:var(--amber);border-color:var(--amber)}
609
653
  .arow.done .as{color:var(--green);border-color:var(--green)}
610
654
  .arow.failed .as{color:var(--red);border-color:var(--red)}
611
- .arow .an{color:var(--dim);font-size:11px;font-variant-numeric:tabular-nums;flex:0 0 auto}
612
- .readonly{max-width:840px;margin:0 auto;padding:0 24px;font-size:12px;color:var(--dim);
655
+ .arow .an{color:var(--dim);font-size:calc(var(--ui) * 0.7857);font-variant-numeric:tabular-nums;flex:0 0 auto}
656
+ .readonly{max-width:840px;margin:0 auto;padding:0 24px;font-size:calc(var(--ui) * 0.8571);color:var(--dim);
613
657
  display:flex;gap:9px;align-items:center}
614
658
 
615
659
  .moderow{display:block;width:100%;text-align:left;border:1px solid var(--line);border-radius:8px;
616
660
  padding:9px 11px;margin-bottom:7px;background:var(--panel-2)}
617
661
  .moderow:hover{border-color:var(--cyan)}
618
662
  .moderow.on{border-color:var(--cyan)}
619
- .moderow b{display:block;font-size:13px;font-weight:600}
620
- .moderow span{font-size:11.5px;color:var(--muted)}
663
+ .moderow b{display:block;font-size:calc(var(--ui) * 0.9286);font-weight:600}
664
+ .moderow span{font-size:calc(var(--ui) * 0.8214);color:var(--muted)}
621
665
 
622
666
  /* ── refactor ────────────────────────────────────────────── */
623
667
  .opgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:9px;
@@ -626,17 +670,17 @@ textarea::placeholder{color:var(--dim)}
626
670
  text-align:left;width:100%}
627
671
  .op:hover{border-color:var(--cyan)}
628
672
  .op.on{border-color:var(--cyan);box-shadow:0 0 0 3px rgba(77,214,232,.12)}
629
- .op b{display:block;font-size:13px;font-weight:600;margin-bottom:3px}
630
- .op span{font-size:11.5px;color:var(--muted);line-height:1.4}
673
+ .op b{display:block;font-size:calc(var(--ui) * 0.9286);font-weight:600;margin-bottom:3px}
674
+ .op span{font-size:calc(var(--ui) * 0.8214);color:var(--muted);line-height:1.4}
631
675
  .fform{border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:13px;
632
676
  margin-bottom:14px}
633
677
  .frow{display:flex;gap:11px;align-items:center;margin-bottom:9px}
634
- .frow label{flex:0 0 130px;font-size:11.5px;color:var(--muted)}
678
+ .frow label{flex:0 0 130px;font-size:calc(var(--ui) * 0.8214);color:var(--muted)}
635
679
  .frow input{flex:1;padding:7px 10px;border-radius:7px;border:1px solid var(--line);
636
- background:var(--panel-2);font-family:var(--mono);font-size:12.5px}
680
+ background:var(--panel-2);font-family:var(--mono);font-size:calc(var(--ui) * 0.8929)}
637
681
  .frow input:focus{outline:0;border-color:var(--cyan)}
638
682
  .fbtns{display:flex;gap:8px;align-items:center;margin-top:11px}
639
- .fbtns .hint{font-size:11.5px;color:var(--dim);flex:1}
683
+ .fbtns .hint{font-size:calc(var(--ui) * 0.8214);color:var(--dim);flex:1}
640
684
 
641
685
  /* ── command palette ─────────────────────────────────────── */
642
686
  #palette{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:40;display:flex;
@@ -644,17 +688,17 @@ textarea::placeholder{color:var(--dim)}
644
688
  #palette[hidden]{display:none}
645
689
  .pbox{width:min(620px,92vw);background:var(--panel);border:1px solid var(--line-2);
646
690
  border-radius:12px;box-shadow:var(--shadow);overflow:hidden}
647
- .pbox input{width:100%;padding:14px 16px;border:0;outline:0;background:none;font-size:15px}
691
+ .pbox input{width:100%;padding:14px 16px;border:0;outline:0;background:none;font-size:calc(var(--ui) * 1.0714)}
648
692
  #plist{max-height:min(52vh,440px);overflow-y:auto;border-top:1px solid var(--line)}
649
693
  .prow{display:flex;align-items:center;gap:11px;padding:9px 16px;width:100%;text-align:left;
650
- font-size:13px}
694
+ font-size:calc(var(--ui) * 0.9286)}
651
695
  .prow.on{background:var(--panel-2)}
652
696
  .prow .pk{font-family:var(--mono);color:var(--cyan);flex:0 0 auto}
653
- .prow .pd{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;
697
+ .prow .pd{color:var(--muted);font-size:calc(var(--ui) * 0.8571);overflow:hidden;text-overflow:ellipsis;
654
698
  white-space:nowrap}
655
- .prow .pg{margin-left:auto;font-size:10px;letter-spacing:.08em;color:var(--dim);
699
+ .prow .pg{margin-left:auto;font-size:calc(var(--ui) * 0.7143);letter-spacing:.08em;color:var(--dim);
656
700
  text-transform:uppercase;flex:0 0 auto}
657
- .pfoot{border-top:1px solid var(--line);padding:7px 16px;font-size:10.5px;color:var(--dim)}
701
+ .pfoot{border-top:1px solid var(--line);padding:7px 16px;font-size:calc(var(--ui) * 0.75);color:var(--dim)}
658
702
  .pfoot kbd{border:1px solid var(--line);border-radius:4px;padding:0 4px;font-family:var(--mono)}
659
703
 
660
704
  /* ── review, restore, settings ────────────────────────────── */
@@ -662,72 +706,72 @@ textarea::placeholder{color:var(--dim)}
662
706
  background:var(--panel);margin-bottom:8px;overflow:hidden}
663
707
  .check.ok{border-left-color:var(--green)} .check.bad{border-left-color:var(--red)}
664
708
  .check .ch{display:flex;align-items:center;gap:10px;padding:9px 12px;width:100%;text-align:left;
665
- font-size:13px}
709
+ font-size:calc(var(--ui) * 0.9286)}
666
710
  .check .ch:hover{background:var(--panel-2)}
667
- .check .cmd{font-family:var(--mono);font-size:11.5px;color:var(--muted);flex:1;overflow:hidden;
711
+ .check .cmd{font-family:var(--mono);font-size:calc(var(--ui) * 0.8214);color:var(--muted);flex:1;overflow:hidden;
668
712
  text-overflow:ellipsis;white-space:nowrap}
669
- .check .verdict{font-size:10px;letter-spacing:.07em;text-transform:uppercase;padding:2px 6px;
713
+ .check .verdict{font-size:calc(var(--ui) * 0.7143);letter-spacing:.07em;text-transform:uppercase;padding:2px 6px;
670
714
  border-radius:4px;border:1px solid var(--line)}
671
715
  .check.ok .verdict{color:var(--green);border-color:var(--green)}
672
716
  .check.bad .verdict{color:var(--red);border-color:var(--red)}
673
717
  .check .out{border-top:1px solid var(--line);padding:9px 12px;font-family:var(--mono);
674
- font-size:11.5px;color:var(--muted);white-space:pre-wrap;max-height:340px;overflow:auto}
718
+ font-size:calc(var(--ui) * 0.8214);color:var(--muted);white-space:pre-wrap;max-height:340px;overflow:auto}
675
719
  .verdictbar{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:8px;
676
720
  margin-bottom:14px;border:1px solid var(--line);background:var(--panel)}
677
721
  .verdictbar.ready{border-left:3px solid var(--green)}
678
722
  .verdictbar.notready{border-left:3px solid var(--amber)}
679
- .verdictbar b{font-size:14px}
723
+ .verdictbar b{font-size:var(--ui)}
680
724
  .act{padding:7px 14px;border-radius:8px;border:1px solid var(--line);background:var(--panel-2);
681
- font-size:12.5px}
725
+ font-size:calc(var(--ui) * 0.8929)}
682
726
  .act:hover{border-color:var(--cyan);color:var(--cyan)}
683
727
  .act.warn:hover{border-color:var(--red);color:var(--red)}
684
728
  .cprow{display:flex;align-items:center;gap:11px;border:1px solid var(--line);border-radius:8px;
685
- background:var(--panel);padding:10px 12px;margin-bottom:7px;font-size:12.5px}
729
+ background:var(--panel);padding:10px 12px;margin-bottom:7px;font-size:calc(var(--ui) * 0.8929)}
686
730
  .cprow .cl{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
687
- .cprow .cs{color:var(--dim);font-size:11px;white-space:nowrap}
731
+ .cprow .cs{color:var(--dim);font-size:calc(var(--ui) * 0.7857);white-space:nowrap}
688
732
  .setrow{border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:11px 13px;
689
733
  margin-bottom:8px;display:flex;gap:14px;align-items:flex-start}
690
734
  .setrow .si{flex:1;min-width:0}
691
- .setrow .sl{font-size:13px;font-weight:500}
692
- .setrow .sd{font-size:11.5px;color:var(--muted);margin-top:2px}
735
+ .setrow .sl{font-size:calc(var(--ui) * 0.9286);font-weight:500}
736
+ .setrow .sd{font-size:calc(var(--ui) * 0.8214);color:var(--muted);margin-top:2px}
693
737
  /* A type row is a label and a control, side by side. */
694
738
  .setrow select{flex:0 0 auto;max-width:52%;padding:6px 9px;border-radius:7px;
695
- border:1px solid var(--line);background:var(--panel-2);color:var(--ink);font-size:12px}
739
+ border:1px solid var(--line);background:var(--panel-2);color:var(--ink);font-size:calc(var(--ui) * 0.8571)}
696
740
  .setrow .sc{flex:0 0 200px;display:flex;gap:6px;align-items:center}
697
741
  .setrow input[type=text],.setrow input[type=number],.setrow select{width:100%;padding:6px 9px;
698
- border-radius:7px;border:1px solid var(--line);background:var(--panel-2);font-size:12.5px}
742
+ border-radius:7px;border:1px solid var(--line);background:var(--panel-2);font-size:calc(var(--ui) * 0.8929)}
699
743
  .setrow .toggle{width:42px;height:22px;border-radius:999px;border:1px solid var(--line);
700
744
  background:var(--panel-2);position:relative;flex:0 0 42px}
701
745
  .setrow .toggle i{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;
702
746
  background:var(--dim);transition:left .13s,background .13s}
703
747
  .setrow .toggle.on{border-color:var(--cyan)}
704
748
  .setrow .toggle.on i{left:22px;background:var(--cyan)}
705
- .setrow .clr{color:var(--dim);font-size:11px;flex:0 0 auto}
749
+ .setrow .clr{color:var(--dim);font-size:calc(var(--ui) * 0.7857);flex:0 0 auto}
706
750
  .setrow .clr:hover{color:var(--red)}
707
- .hrow{display:flex;align-items:center;gap:10px;padding:7px 0;font-size:12.5px;
751
+ .hrow{display:flex;align-items:center;gap:10px;padding:7px 0;font-size:calc(var(--ui) * 0.8929);
708
752
  border-bottom:1px solid var(--line)}
709
753
  .hrow:last-child{border-bottom:0}
710
- .hrow .hs{font-size:10px;letter-spacing:.07em;text-transform:uppercase;padding:2px 6px;
754
+ .hrow .hs{font-size:calc(var(--ui) * 0.7143);letter-spacing:.07em;text-transform:uppercase;padding:2px 6px;
711
755
  border-radius:4px;border:1px solid var(--line);flex:0 0 auto}
712
756
  .hrow .hs.pass{color:var(--green);border-color:var(--green)}
713
757
  .hrow .hs.warn{color:var(--amber);border-color:var(--amber)}
714
758
  .hrow .hs.fail{color:var(--red);border-color:var(--red)}
715
759
  .hrow .hn{flex:1}
716
- .hrow .hr{color:var(--muted);font-size:11.5px}
717
- .sect{font-size:10.5px;letter-spacing:.12em;color:var(--dim);text-transform:uppercase;
760
+ .hrow .hr{color:var(--muted);font-size:calc(var(--ui) * 0.8214)}
761
+ .sect{font-size:calc(var(--ui) * 0.75);letter-spacing:.12em;color:var(--dim);text-transform:uppercase;
718
762
  margin:22px 0 10px}
719
763
  .sect:first-child{margin-top:0}
720
764
  textarea.big{width:100%;min-height:220px;padding:11px 13px;border-radius:8px;
721
- border:1px solid var(--line);background:var(--panel-2);font-family:var(--mono);font-size:12.5px;
765
+ border:1px solid var(--line);background:var(--panel-2);font-family:var(--mono);font-size:calc(var(--ui) * 0.8929);
722
766
  line-height:1.5;resize:vertical}
723
767
 
724
768
  dialog{border:1px solid var(--line);background:var(--panel);color:var(--ink);
725
769
  border-radius:var(--radius);padding:0;max-width:450px;width:92%;box-shadow:var(--shadow)}
726
770
  dialog::backdrop{background:rgba(0,0,0,.5)}
727
771
  .dlg{padding:18px}
728
- .dlg h3{margin:0 0 5px;font-size:15px}
729
- .dlg p{margin:0 0 14px;color:var(--muted);font-size:12.5px}
730
- .dlg label{display:block;font-size:10.5px;letter-spacing:.09em;color:var(--dim);
772
+ .dlg h3{margin:0 0 5px;font-size:calc(var(--ui) * 1.0714)}
773
+ .dlg p{margin:0 0 14px;color:var(--muted);font-size:calc(var(--ui) * 0.8929)}
774
+ .dlg label{display:block;font-size:calc(var(--ui) * 0.75);letter-spacing:.09em;color:var(--dim);
731
775
  text-transform:uppercase;margin:0 0 4px}
732
776
  .dlg input,.dlg select{width:100%;padding:8px 10px;border-radius:8px;border:1px solid var(--line);
733
777
  background:var(--panel-2);margin-bottom:11px}
@@ -742,28 +786,28 @@ dialog:has(.dlg.wide){max-width:560px}
742
786
  .provrow{display:flex;gap:8px;align-items:start}
743
787
  .provrow select{flex:1}
744
788
  .addprov{padding:8px 11px;border-radius:8px;border:1px solid var(--line);background:var(--panel-2);
745
- color:var(--muted);font-size:12px;white-space:nowrap;margin-bottom:11px;cursor:pointer}
789
+ color:var(--muted);font-size:calc(var(--ui) * 0.8571);white-space:nowrap;margin-bottom:11px;cursor:pointer}
746
790
  .addprov:hover{color:var(--cyan);border-color:var(--cyan)}
747
- .mnote{font-size:11.5px;color:var(--dim);margin:-4px 0 10px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}
748
- .mnote code{font-family:var(--mono);font-size:11px;color:var(--muted);background:var(--panel-2);
791
+ .mnote{font-size:calc(var(--ui) * 0.8214);color:var(--dim);margin:-4px 0 10px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}
792
+ .mnote code{font-family:var(--mono);font-size:calc(var(--ui) * 0.7857);color:var(--muted);background:var(--panel-2);
749
793
  padding:1px 4px;border-radius:4px}
750
- .keykeep{display:flex;align-items:center;gap:7px;margin:0 0 10px;font-size:11.5px;
794
+ .keykeep{display:flex;align-items:center;gap:7px;margin:0 0 10px;font-size:calc(var(--ui) * 0.8214);
751
795
  color:var(--muted);cursor:pointer}
752
796
  .keykeep input{accent-color:var(--cyan);cursor:pointer}
753
797
  .keydrop{margin-left:7px;padding:2px 8px;border-radius:6px;border:1px solid var(--line-2);
754
- color:var(--muted);background:transparent;cursor:pointer;font-size:11px}
798
+ color:var(--muted);background:transparent;cursor:pointer;font-size:calc(var(--ui) * 0.7857)}
755
799
  .keydrop:hover{border-color:var(--red);color:var(--red)}
756
800
  .keygo{margin:0 0 12px;padding:6px 13px;border-radius:8px;border:1px solid var(--cyan);
757
- color:var(--cyan);background:transparent;cursor:pointer;font-size:12px}
801
+ color:var(--cyan);background:transparent;cursor:pointer;font-size:calc(var(--ui) * 0.8571)}
758
802
  .keygo:hover{background:var(--panel-2)}
759
803
  #keysaid{display:block;margin:-6px 0 12px;color:var(--green)}
760
804
  #keysaid:empty{display:none}
761
805
  .mnote em{color:var(--muted);font-style:normal;font-weight:500}
762
- .perr{font-size:12px;color:var(--red);margin:0 0 10px;line-height:1.5}
806
+ .perr{font-size:calc(var(--ui) * 0.8571);color:var(--red);margin:0 0 10px;line-height:1.5}
763
807
  .mlist{max-height:270px;overflow-y:auto;border:1px solid var(--line);border-radius:8px;
764
808
  background:var(--panel-2);margin-bottom:13px}
765
809
  .mlist:empty{display:none}
766
- .mgroup{padding:6px 11px;font-size:10px;letter-spacing:.09em;text-transform:uppercase;
810
+ .mgroup{padding:6px 11px;font-size:calc(var(--ui) * 0.7143);letter-spacing:.09em;text-transform:uppercase;
767
811
  color:var(--dim);background:var(--panel);position:sticky;top:0;
768
812
  border-bottom:1px solid var(--line)}
769
813
  .mrow{display:flex;gap:10px;align-items:baseline;padding:7px 11px;cursor:pointer;
@@ -771,8 +815,8 @@ dialog:has(.dlg.wide){max-width:560px}
771
815
  .mrow:last-child{border-bottom:0}
772
816
  .mrow:hover{background:var(--panel)}
773
817
  .mrow.on{background:var(--panel);box-shadow:inset 2px 0 0 var(--cyan)}
774
- .mrow .mid{font-family:var(--mono);font-size:12.5px;flex:1;min-width:0;overflow-wrap:anywhere}
775
- .mrow .mdet{font-size:11px;color:var(--dim);white-space:nowrap;flex:0 0 auto}
818
+ .mrow .mid{font-family:var(--mono);font-size:calc(var(--ui) * 0.8929);flex:1;min-width:0;overflow-wrap:anywhere}
819
+ .mrow .mdet{font-size:calc(var(--ui) * 0.7857);color:var(--dim);white-space:nowrap;flex:0 0 auto}
776
820
  .mrow.on .mid{color:var(--cyan)}
777
821
  /*
778
822
  * The file being worked on, beside the conversation.
@@ -796,8 +840,8 @@ dialog:has(.dlg.wide){max-width:560px}
796
840
  .watch{flex:0 0 var(--panelw,44%);max-width:82%;min-width:220px;border-left:1px solid var(--line);
797
841
  display:flex;flex-direction:column;background:var(--panel-2)}
798
842
  .whead{display:flex;gap:9px;align-items:center;padding:9px 12px;background:var(--panel);
799
- border-bottom:1px solid var(--line);font-size:11.5px;flex:0 0 auto}
800
- .whead .wt{color:var(--cyan);font-size:10px;letter-spacing:.09em;text-transform:uppercase;
843
+ border-bottom:1px solid var(--line);font-size:calc(var(--ui) * 0.8214);flex:0 0 auto}
844
+ .whead .wt{color:var(--cyan);font-size:calc(var(--ui) * 0.7143);letter-spacing:.09em;text-transform:uppercase;
801
845
  flex:0 0 auto}
802
846
  /*
803
847
  * A path truncated at the front, without bidi rearranging it.
@@ -814,18 +858,18 @@ dialog:has(.dlg.wide){max-width:560px}
814
858
  * filename.
815
859
  */
816
860
  .pathltr{direction:ltr;unicode-bidi:isolate}
817
- .whead .wp{font-family:var(--mono);font-size:12px;flex:1;min-width:0;overflow:hidden;
861
+ .whead .wp{font-family:var(--mono);font-size:calc(var(--ui) * 0.8571);flex:1;min-width:0;overflow:hidden;
818
862
  text-overflow:ellipsis;white-space:nowrap;direction:rtl;text-align:left}
819
- .whead .wms{flex:0 0 auto;font-size:10.5px;color:var(--dim);font-variant-numeric:tabular-nums;
863
+ .whead .wms{flex:0 0 auto;font-size:calc(var(--ui) * 0.75);color:var(--dim);font-variant-numeric:tabular-nums;
820
864
  font-family:var(--mono)}
821
865
  /* A real hit area: a 15px glyph is a thing you aim at, not a thing you click. */
822
- .whead .wx{flex:0 0 auto;background:none;border:0;color:var(--dim);font-size:17px;cursor:pointer;
866
+ .whead .wx{flex:0 0 auto;background:none;border:0;color:var(--dim);font-size:calc(var(--ui) * 1.2143);cursor:pointer;
823
867
  line-height:1;padding:2px 8px;margin:-4px -6px -4px 0;border-radius:6px}
824
868
  .whead .wx:hover{color:var(--red);background:var(--panel-2)}
825
869
  .wbody{flex:1;overflow:auto;min-height:0;position:relative}
826
870
  .wbody .code{min-height:100%}
827
871
  .wbody .diff{border-top:0}
828
- .wempty{padding:22px 14px;color:var(--dim);font-size:12.5px;line-height:1.6}
872
+ .wempty{padding:22px 14px;color:var(--dim);font-size:calc(var(--ui) * 0.8929);line-height:1.6}
829
873
 
830
874
  /*
831
875
  * Where it is looking, not just what at.
@@ -842,7 +886,7 @@ dialog:has(.dlg.wide){max-width:560px}
842
886
  * line box by construction, so row N of the gutter is row N of the source and no highlight can
843
887
  * make them drift.
844
888
  */
845
- .rows{display:flex;font-family:var(--mono);font-size:12.5px;line-height:1.5;align-items:stretch}
889
+ .rows{display:flex;font-family:var(--mono);font-size:calc(var(--ui) * 0.8929);line-height:1.5;align-items:stretch}
846
890
  .rows .gut{flex:0 0 auto;padding:10px 10px 10px 14px;text-align:right;color:var(--dim);
847
891
  background:var(--panel);border-right:1px solid var(--line);user-select:none;
848
892
  font-variant-numeric:tabular-nums}
@@ -851,20 +895,20 @@ dialog:has(.dlg.wide){max-width:560px}
851
895
  .rows .gut > div.on{color:var(--cyan);background:var(--attn-bg)}
852
896
 
853
897
  .fo{margin:2px 0 14px;padding:11px 0 0;border-top:1px solid var(--line-2)}
854
- .folabel{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--fg);cursor:pointer}
898
+ .folabel{display:flex;align-items:center;gap:8px;font-size:calc(var(--ui) * 0.8571);color:var(--fg);cursor:pointer}
855
899
  .folabel input,.fochk input{accent-color:var(--cyan);cursor:pointer}
856
- .forow{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:9px 0;font-size:11.5px;
900
+ .forow{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:9px 0;font-size:calc(var(--ui) * 0.8214);
857
901
  color:var(--muted)}
858
902
  .forow select{background:var(--panel-2);color:var(--fg);border:1px solid var(--line-2);
859
- border-radius:6px;padding:3px 6px;font-size:11.5px}
903
+ border-radius:6px;padding:3px 6px;font-size:calc(var(--ui) * 0.8214)}
860
904
  .fochk{display:flex;align-items:center;gap:5px;cursor:pointer}
861
905
  #folist{width:100%;box-sizing:border-box;background:var(--panel-2);color:var(--fg);
862
906
  border:1px solid var(--line-2);border-radius:7px;padding:6px 9px;font-family:var(--mono);
863
- font-size:11.5px;margin:2px 0 4px}
907
+ font-size:calc(var(--ui) * 0.8214);margin:2px 0 4px}
864
908
  #fosaid{color:var(--green)}
865
909
 
866
910
  /* A file being written, while it is being written. */
867
- .wwrite{padding:8px 13px;color:var(--cyan);font-size:11.5px;border-bottom:1px solid var(--line-2)}
911
+ .wwrite{padding:8px 13px;color:var(--cyan);font-size:calc(var(--ui) * 0.8214);border-bottom:1px solid var(--line-2)}
868
912
  .wwbody{min-height:0}
869
913
 
870
914
  /*
@@ -876,7 +920,7 @@ dialog:has(.dlg.wide){max-width:560px}
876
920
  */
877
921
  .cunder{display:flex;align-items:center;gap:7px;padding:7px 2px 0}
878
922
  .cmodel,.cpace{padding:3px 10px;border-radius:999px;border:1px solid var(--line-2);
879
- background:transparent;color:var(--muted);cursor:pointer;font-size:11.5px;font-family:inherit}
923
+ background:transparent;color:var(--muted);cursor:pointer;font-size:calc(var(--ui) * 0.8214);font-family:inherit}
880
924
  .cmodel:hover,.cpace:hover{border-color:var(--cyan);color:var(--cyan)}
881
925
  .cmodel #cmodelname{color:var(--fg)}
882
926
  .cgap{flex:1}
@@ -895,12 +939,12 @@ dialog:has(.dlg.wide){max-width:560px}
895
939
  * a different and worse confusion than showing nothing at all.
896
940
  */
897
941
  .carried{display:flex;align-items:center;gap:10px;margin:16px 0 6px;color:var(--dim);
898
- font-size:10.5px;text-transform:uppercase;letter-spacing:.06em}
942
+ font-size:calc(var(--ui) * 0.75);text-transform:uppercase;letter-spacing:.06em}
899
943
  .carried::before,.carried::after{content:'';flex:1;height:1px;background:var(--line)}
900
944
 
901
945
  /* The command that carries this session to a terminal: shown as something to be run, not read. */
902
946
  .ttycmd{margin:0 0 10px;padding:10px 12px;border-radius:8px;border:1px solid var(--line-2);
903
- background:var(--panel-2);font-family:var(--mono);font-size:12px;color:var(--cyan);
947
+ background:var(--panel-2);font-family:var(--mono);font-size:calc(var(--ui) * 0.8571);color:var(--cyan);
904
948
  white-space:pre-wrap;word-break:break-all}
905
949
 
906
950
  /*
@@ -921,32 +965,32 @@ dialog:has(.dlg.wide){max-width:560px}
921
965
  #wsdlg{max-width:640px}
922
966
  .wsdlg{width:100%;box-sizing:border-box;min-width:0}
923
967
  #wsfind{width:100%;box-sizing:border-box;padding:8px 11px;border-radius:8px;
924
- border:1px solid var(--line-2);background:var(--panel-2);color:var(--fg);font-size:13px;
968
+ border:1px solid var(--line-2);background:var(--panel-2);color:var(--fg);font-size:calc(var(--ui) * 0.9286);
925
969
  margin:2px 0 12px}
926
970
  .wssec{margin:0 0 12px}
927
- .wshead{display:flex;align-items:center;gap:7px;font-size:10.5px;color:var(--dim);
971
+ .wshead{display:flex;align-items:center;gap:7px;font-size:calc(var(--ui) * 0.75);color:var(--dim);
928
972
  text-transform:uppercase;letter-spacing:.06em;margin:0 0 5px}
929
973
  .wsup{padding:1px 7px;border-radius:6px;border:1px solid var(--line-2);color:var(--muted);
930
- background:transparent;cursor:pointer;font-size:11px}
974
+ background:transparent;cursor:pointer;font-size:calc(var(--ui) * 0.7857)}
931
975
  .wsup:hover{border-color:var(--cyan);color:var(--cyan)}
932
- .wswhere{font-family:var(--mono);font-size:11px;color:var(--muted);text-transform:none;
976
+ .wswhere{font-family:var(--mono);font-size:calc(var(--ui) * 0.7857);color:var(--muted);text-transform:none;
933
977
  letter-spacing:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
934
978
  .wslist{max-height:180px;overflow-y:auto;overflow-x:hidden;border:1px solid var(--line);
935
979
  border-radius:8px;background:var(--panel-2)}
936
- .wsrow{display:flex;align-items:center;gap:9px;padding:7px 11px;cursor:pointer;font-size:12.5px;
980
+ .wsrow{display:flex;align-items:center;gap:9px;padding:7px 11px;cursor:pointer;font-size:calc(var(--ui) * 0.8929);
937
981
  border-bottom:1px solid var(--line);min-width:0}
938
982
  .wsrow:last-child{border-bottom:0}
939
983
  .wsrow:hover{background:var(--panel)}
940
984
  .wsrow.on{background:var(--panel);box-shadow:inset 2px 0 0 var(--cyan)}
941
985
  .wsrow .wsn{color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
942
986
  /* A folder that looks like a project reads as one, so a long list can be skimmed. */
943
- .wsrow .wsp{color:var(--cyan);font-size:10px;border:1px solid var(--cyan);border-radius:999px;
987
+ .wsrow .wsp{color:var(--cyan);font-size:calc(var(--ui) * 0.7143);border:1px solid var(--cyan);border-radius:999px;
944
988
  padding:0 5px;flex:0 0 auto}
945
989
  /* Allowed to shrink and then to trail off, rather than to widen the dialog. */
946
- .wsrow .wsm{margin-left:auto;color:var(--dim);font-size:10.5px;min-width:0;
990
+ .wsrow .wsm{margin-left:auto;color:var(--dim);font-size:calc(var(--ui) * 0.75);min-width:0;
947
991
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
948
- .wsrow .wsinto{flex:0 0 auto;color:var(--dim);font-size:12px}
949
- .wsempty{padding:10px 11px;color:var(--dim);font-size:12px}
992
+ .wsrow .wsinto{flex:0 0 auto;color:var(--dim);font-size:calc(var(--ui) * 0.8571)}
993
+ .wsempty{padding:10px 11px;color:var(--dim);font-size:calc(var(--ui) * 0.8571)}
950
994
  /*
951
995
  * The ways to reach a folder, as a list of things to do rather than a form.
952
996
  *
@@ -957,23 +1001,23 @@ dialog:has(.dlg.wide){max-width:560px}
957
1001
  .wsmenu{border:1px solid var(--line);border-radius:8px;background:var(--panel-2);overflow:hidden}
958
1002
  .wsitem{display:flex;align-items:center;gap:10px;width:100%;padding:8px 11px;
959
1003
  background:transparent;border:0;border-bottom:1px solid var(--line);cursor:pointer;
960
- font-size:12.5px;font-family:inherit;text-align:left;color:var(--fg)}
1004
+ font-size:calc(var(--ui) * 0.8929);font-family:inherit;text-align:left;color:var(--fg)}
961
1005
  .wsitem:last-child{border-bottom:0}
962
1006
  .wsitem:hover{background:var(--panel)}
963
1007
  .wsitem[aria-disabled="true"]{opacity:.5;cursor:default}
964
- .wsico{flex:0 0 16px;text-align:center;color:var(--cyan);font-size:12px}
1008
+ .wsico{flex:0 0 16px;text-align:center;color:var(--cyan);font-size:calc(var(--ui) * 0.8571)}
965
1009
 
966
1010
  /* A tool call with nothing to open — what was asked, and how it went. */
967
1011
  .callhead{display:flex;align-items:center;gap:8px;padding:9px 13px;border-bottom:1px solid var(--line-2)}
968
- .callverb{color:var(--cyan);font-size:12px;text-transform:lowercase}
969
- .callname{font-family:var(--mono);font-size:12px;color:var(--fg)}
970
- .callok{margin-left:auto;color:var(--green);font-size:11px}
971
- .callbad{margin-left:auto;color:var(--red);font-size:11px}
972
- .callrun{margin-left:auto;color:var(--muted);font-size:11px}
973
- .calldetail{padding:8px 13px 0;color:var(--muted);font-size:12px;word-break:break-word}
974
- .calllabel{padding:11px 13px 4px;color:var(--dim);font-size:10.5px;text-transform:uppercase;
1012
+ .callverb{color:var(--cyan);font-size:calc(var(--ui) * 0.8571);text-transform:lowercase}
1013
+ .callname{font-family:var(--mono);font-size:calc(var(--ui) * 0.8571);color:var(--fg)}
1014
+ .callok{margin-left:auto;color:var(--green);font-size:calc(var(--ui) * 0.7857)}
1015
+ .callbad{margin-left:auto;color:var(--red);font-size:calc(var(--ui) * 0.7857)}
1016
+ .callrun{margin-left:auto;color:var(--muted);font-size:calc(var(--ui) * 0.7857)}
1017
+ .calldetail{padding:8px 13px 0;color:var(--muted);font-size:calc(var(--ui) * 0.8571);word-break:break-word}
1018
+ .calllabel{padding:11px 13px 4px;color:var(--dim);font-size:calc(var(--ui) * 0.75);text-transform:uppercase;
975
1019
  letter-spacing:.06em}
976
- .callargs{margin:0;padding:0 13px 12px;font-family:var(--mono);font-size:11.5px;line-height:1.55;
1020
+ .callargs{margin:0;padding:0 13px 12px;font-family:var(--mono);font-size:calc(var(--ui) * 0.8214);line-height:1.55;
977
1021
  color:var(--muted);white-space:pre-wrap;word-break:break-word}
978
1022
 
979
1023
  /*
@@ -1001,7 +1045,7 @@ dialog:has(.dlg.wide){max-width:560px}
1001
1045
  .rows .src .hit{background:var(--attn-hit);border-radius:2px}
1002
1046
 
1003
1047
  /* A command, as it runs. */
1004
- .wterm{font-family:var(--mono);font-size:11.5px;line-height:1.5;padding:10px 13px;
1048
+ .wterm{font-family:var(--mono);font-size:calc(var(--ui) * 0.8214);line-height:1.5;padding:10px 13px;
1005
1049
  white-space:pre-wrap;word-break:break-word;color:var(--muted)}
1006
1050
  .wterm .cmd{color:var(--cyan);display:block;margin-bottom:7px}
1007
1051
  .wterm .ln{display:block}
@@ -1012,7 +1056,7 @@ dialog:has(.dlg.wide){max-width:560px}
1012
1056
  border-top:1px solid var(--line);background:var(--panel)}
1013
1057
  .wtrail::-webkit-scrollbar{height:0}
1014
1058
  .wchip{flex:0 0 auto;display:flex;gap:5px;align-items:center;padding:3px 9px;border-radius:999px;
1015
- border:1px solid var(--line);background:var(--panel-2);font-size:11px;cursor:pointer;
1059
+ border:1px solid var(--line);background:var(--panel-2);font-size:calc(var(--ui) * 0.7857);cursor:pointer;
1016
1060
  white-space:nowrap;color:var(--muted);font-family:var(--mono)}
1017
1061
  .wchip:hover{border-color:var(--cyan);color:var(--ink)}
1018
1062
  .wchip.on{border-color:var(--cyan);color:var(--cyan)}
@@ -1032,18 +1076,18 @@ dialog:has(.dlg.wide){max-width:560px}
1032
1076
  .agcard.running{border-color:var(--amber)}
1033
1077
  .agcard.done{border-color:var(--green)}
1034
1078
  .agcard.failed{border-color:var(--red)}
1035
- .aghead{display:flex;align-items:center;gap:9px;font-size:12px}
1079
+ .aghead{display:flex;align-items:center;gap:9px;font-size:calc(var(--ui) * 0.8571)}
1036
1080
  .aghead .agn{font-family:var(--mono);color:var(--ink);font-weight:600}
1037
1081
  .aghead .aggap{flex:1}
1038
- .aghead .agm{color:var(--dim);font-variant-numeric:tabular-nums;font-size:11px}
1039
- .ags{font-size:10px;letter-spacing:.06em;text-transform:uppercase;padding:1px 7px;
1082
+ .aghead .agm{color:var(--dim);font-variant-numeric:tabular-nums;font-size:calc(var(--ui) * 0.7857)}
1083
+ .ags{font-size:calc(var(--ui) * 0.7143);letter-spacing:.06em;text-transform:uppercase;padding:1px 7px;
1040
1084
  border-radius:999px;border:1px solid var(--line-2);color:var(--dim)}
1041
1085
  .ags.running{border-color:var(--amber);color:var(--amber)}
1042
1086
  .ags.done{border-color:var(--green);color:var(--green)}
1043
1087
  .ags.failed{border-color:var(--red);color:var(--red)}
1044
- .agmeta{display:flex;gap:12px;margin-top:6px;font-size:11px;color:var(--muted)}
1088
+ .agmeta{display:flex;gap:12px;margin-top:6px;font-size:calc(var(--ui) * 0.7857);color:var(--muted)}
1045
1089
  /* The brief in full: half a sub-agent's instructions answers nothing about what it is doing. */
1046
- .agtask{margin-top:8px;font-family:var(--mono);font-size:11.5px;line-height:1.55;
1090
+ .agtask{margin-top:8px;font-family:var(--mono);font-size:calc(var(--ui) * 0.8214);line-height:1.55;
1047
1091
  color:var(--muted);white-space:pre-wrap;word-break:break-word}
1048
1092
 
1049
1093
  @media (max-width:1100px){ .watch{display:none} }
@@ -1054,20 +1098,20 @@ dialog:has(.dlg.wide){max-width:560px}
1054
1098
  */
1055
1099
  .aside{border:1px dashed var(--line);border-left:2px solid var(--violet);border-radius:8px;
1056
1100
  padding:10px 13px;margin:10px 0;background:var(--panel-2)}
1057
- .aside .ah{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--violet);
1101
+ .aside .ah{font-size:calc(var(--ui) * 0.75);letter-spacing:.06em;text-transform:uppercase;color:var(--violet);
1058
1102
  margin-bottom:7px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1059
- .aside .ab{font-size:13px;line-height:1.6}
1103
+ .aside .ab{font-size:calc(var(--ui) * 0.9286);line-height:1.6}
1060
1104
  .aside .ab.err{color:var(--red)}
1061
- .aside .af{margin-top:7px;font-size:11px;color:var(--dim);font-family:var(--mono)}
1105
+ .aside .af{margin-top:7px;font-size:calc(var(--ui) * 0.7857);color:var(--dim);font-family:var(--mono)}
1062
1106
 
1063
1107
  /* What a resumed session says for itself, at the top of the continuation. */
1064
1108
  .resumed{border:1px solid var(--cyan);border-radius:var(--radius);padding:11px 14px;margin:10px 0;
1065
1109
  background:var(--panel-2)}
1066
- .resumed .rh{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--cyan);
1110
+ .resumed .rh{font-size:calc(var(--ui) * 0.7857);letter-spacing:.05em;text-transform:uppercase;color:var(--cyan);
1067
1111
  margin-bottom:7px}
1068
- .resumed .rl{margin:6px 0;font-size:12.5px;line-height:1.6}
1069
- .resumed .ri{color:var(--muted);font-family:var(--mono);font-size:12px}
1070
- .resumed .rn{font-size:12px;color:var(--dim);margin-top:7px}
1112
+ .resumed .rl{margin:6px 0;font-size:calc(var(--ui) * 0.8929);line-height:1.6}
1113
+ .resumed .ri{color:var(--muted);font-family:var(--mono);font-size:calc(var(--ui) * 0.8571)}
1114
+ .resumed .rn{font-size:calc(var(--ui) * 0.8571);color:var(--dim);margin-top:7px}
1071
1115
 
1072
1116
  /*
1073
1117
  * Typography you choose.
@@ -1106,12 +1150,12 @@ body[data-tint="soft"]{filter:contrast(.92) brightness(1.04)}
1106
1150
  #terminalview{display:flex;flex-direction:column;overflow:hidden;position:relative}
1107
1151
  .termtop{display:flex;gap:8px;align-items:center;padding:9px 14px;background:var(--panel);
1108
1152
  border-bottom:1px solid var(--line);flex:0 0 auto}
1109
- .termttl{font-size:12px;color:var(--muted);letter-spacing:.02em}
1153
+ .termttl{font-size:calc(var(--ui) * 0.8571);color:var(--muted);letter-spacing:.02em}
1110
1154
  .termgap{flex:0 0 10px}
1111
1155
  .termbtn{padding:4px 10px;border-radius:7px;border:1px solid var(--line-2);color:var(--muted);
1112
- background:transparent;cursor:pointer;font-size:11.5px}
1156
+ background:transparent;cursor:pointer;font-size:calc(var(--ui) * 0.8214)}
1113
1157
  .termbtn:hover{border-color:var(--cyan);color:var(--cyan)}
1114
- .termchk{display:flex;gap:5px;align-items:center;font-size:11.5px;color:var(--muted);cursor:pointer}
1158
+ .termchk{display:flex;gap:5px;align-items:center;font-size:calc(var(--ui) * 0.8214);color:var(--muted);cursor:pointer}
1115
1159
  .termchk input{accent-color:var(--cyan);cursor:pointer}
1116
1160
  #tbgop{width:88px;accent-color:var(--cyan)}
1117
1161
 
@@ -1161,25 +1205,25 @@ body[data-tint="soft"]{filter:contrast(.92) brightness(1.04)}
1161
1205
  padding:0}
1162
1206
  .termin::placeholder{color:var(--dim)}
1163
1207
  .termstop{flex:0 0 auto;padding:2px 9px;border-radius:6px;border:1px solid var(--red);
1164
- color:var(--red);background:transparent;cursor:pointer;font-size:10.5px}
1208
+ color:var(--red);background:transparent;cursor:pointer;font-size:calc(var(--ui) * 0.75)}
1165
1209
  .termpanes .oe{color:var(--red)}
1166
1210
 
1167
1211
  /* ── the page, as it really renders ───────────────────────────────────────────────────────── */
1168
1212
  .pvbar{display:flex;gap:8px;align-items:center;padding:11px 14px;background:var(--panel);
1169
1213
  border-bottom:1px solid var(--line);flex:0 0 auto}
1170
1214
  .pvbar input{flex:1;min-width:0;padding:8px 11px;border-radius:8px;border:1px solid var(--line);
1171
- background:var(--panel-2);font-family:var(--mono);font-size:12.5px}
1215
+ background:var(--panel-2);font-family:var(--mono);font-size:calc(var(--ui) * 0.8929)}
1172
1216
  .pvbar .pvnav{flex:0 0 auto;width:28px;height:28px;border-radius:7px;border:1px solid var(--line);
1173
- background:transparent;color:var(--muted);cursor:pointer;font-size:15px;line-height:1;
1217
+ background:transparent;color:var(--muted);cursor:pointer;font-size:calc(var(--ui) * 1.0714);line-height:1;
1174
1218
  display:flex;align-items:center;justify-content:center}
1175
1219
  .pvbar .pvnav:hover:not(:disabled){color:var(--ink);border-color:var(--cyan)}
1176
1220
  .pvbar .pvnav:disabled{opacity:.35;cursor:default}
1177
1221
  .pvbar .pvgo{padding:8px 15px;border-radius:8px;border:1px solid var(--cyan);color:var(--cyan);
1178
- background:transparent;cursor:pointer;font-size:12.5px}
1222
+ background:transparent;cursor:pointer;font-size:calc(var(--ui) * 0.8929)}
1179
1223
  .pvbar .pvbtn{padding:8px 12px;border-radius:8px;border:1px solid var(--line);color:var(--muted);
1180
- background:transparent;cursor:pointer;font-size:12px}
1224
+ background:transparent;cursor:pointer;font-size:calc(var(--ui) * 0.8571)}
1181
1225
  .pvbar .pvbtn:hover{color:var(--ink)}
1182
- .pvinfo{font-size:11px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
1226
+ .pvinfo{font-size:calc(var(--ui) * 0.7857);color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
1183
1227
  max-width:24%}
1184
1228
  .pvbody{flex:1;overflow:auto;min-height:0;display:flex;flex-direction:column;
1185
1229
  align-items:center;padding:12px;background:var(--panel-2)}
@@ -1196,21 +1240,21 @@ body[data-tint="soft"]{filter:contrast(.92) brightness(1.04)}
1196
1240
  .pvshot:focus{outline:2px solid var(--cyan);outline-offset:1px}
1197
1241
  .pvshot{max-width:100%;border:1px solid var(--line);border-radius:8px;cursor:default;
1198
1242
  background:#fff;box-shadow:var(--shadow)}
1199
- .pvhint{margin-top:11px;font-size:11.5px;color:var(--dim);text-align:center;line-height:1.6}
1243
+ .pvhint{margin-top:11px;font-size:calc(var(--ui) * 0.8214);color:var(--dim);text-align:center;line-height:1.6}
1200
1244
  /* The same numbered elements the agent is given, so a person can drive the flow it is stuck on. */
1201
1245
  .pvctl{display:flex;flex-wrap:wrap;gap:5px;justify-content:center;margin-top:9px;max-width:100%}
1202
1246
  .pvchip{padding:3px 9px;border-radius:999px;border:1px solid var(--line);background:var(--panel);
1203
- color:var(--muted);font-size:11px;cursor:pointer;max-width:190px;overflow:hidden;
1247
+ color:var(--muted);font-size:calc(var(--ui) * 0.7857);cursor:pointer;max-width:190px;overflow:hidden;
1204
1248
  text-overflow:ellipsis;white-space:nowrap}
1205
1249
  .pvchip:hover{border-color:var(--cyan);color:var(--cyan)}
1206
- .pvnone{padding:40px 20px;color:var(--dim);font-size:13px;text-align:center;line-height:1.7;
1250
+ .pvnone{padding:40px 20px;color:var(--dim);font-size:calc(var(--ui) * 0.9286);text-align:center;line-height:1.7;
1207
1251
  max-width:520px}
1208
1252
 
1209
1253
  /* ── an editable file ─────────────────────────────────────────────────────────────────────── */
1210
1254
  .edbar{display:flex;gap:9px;align-items:center;padding:8px 14px;background:var(--panel);
1211
- border-bottom:1px solid var(--line);flex:0 0 auto;font-size:11.5px}
1255
+ border-bottom:1px solid var(--line);flex:0 0 auto;font-size:calc(var(--ui) * 0.8214)}
1212
1256
  .edbar .ebtn{padding:5px 11px;border-radius:7px;border:1px solid var(--line);background:transparent;
1213
- color:var(--muted);cursor:pointer;font-size:11.5px}
1257
+ color:var(--muted);cursor:pointer;font-size:calc(var(--ui) * 0.8214)}
1214
1258
  .edbar .ebtn:hover{color:var(--ink)}
1215
1259
  .edbar .ebtn.save{border-color:var(--cyan);color:var(--cyan)}
1216
1260
  .edbar .ebtn:disabled{opacity:.45;cursor:default}
@@ -1231,11 +1275,11 @@ body[data-tint="soft"]{filter:contrast(.92) brightness(1.04)}
1231
1275
  .ed{flex:1;display:flex;min-height:0;background:var(--bg)}
1232
1276
  .ed .egut{flex:0 0 auto;overflow:hidden;padding:12px 10px 12px 14px;text-align:right;
1233
1277
  color:var(--dim);background:var(--panel);border-right:1px solid var(--line);user-select:none;
1234
- font-family:var(--mono);font-size:12.5px;line-height:1.5;font-variant-numeric:tabular-nums;
1278
+ font-family:var(--mono);font-size:calc(var(--ui) * 0.8929);line-height:1.5;font-variant-numeric:tabular-nums;
1235
1279
  white-space:pre}
1236
1280
  .estack{position:relative;flex:1;min-width:0}
1237
1281
  .ehl,.edit{position:absolute;inset:0;margin:0;padding:12px 14px;border:0;
1238
- font-family:var(--mono);font-size:12.5px;line-height:1.5;tab-size:2;
1282
+ font-family:var(--mono);font-size:calc(var(--ui) * 0.8929);line-height:1.5;tab-size:2;
1239
1283
  white-space:pre;overflow:auto;word-break:normal;overflow-wrap:normal}
1240
1284
  .ehl{pointer-events:none;color:var(--ink)}
1241
1285
  /* Transparent text over the coloured copy, with the caret and the selection still visible. */
@@ -1263,20 +1307,20 @@ body[data-tint="soft"]{filter:contrast(.92) brightness(1.04)}
1263
1307
  */
1264
1308
  .viewpick{position:relative;flex:0 0 auto}
1265
1309
  .vbtn{display:flex;gap:7px;align-items:center;padding:6px 11px;border-radius:8px;
1266
- border:1px solid var(--line);background:var(--panel-2);color:var(--ink);font-size:12.5px;
1310
+ border:1px solid var(--line);background:var(--panel-2);color:var(--ink);font-size:calc(var(--ui) * 0.8929);
1267
1311
  cursor:pointer;min-width:118px}
1268
1312
  .vbtn:hover{border-color:var(--cyan)}
1269
- .vbtn .vcar{margin-left:auto;color:var(--dim);font-size:10px}
1313
+ .vbtn .vcar{margin-left:auto;color:var(--dim);font-size:calc(var(--ui) * 0.7143)}
1270
1314
  .vmenu{position:absolute;top:calc(100% + 6px);left:0;z-index:60;min-width:250px;
1271
1315
  background:var(--panel);border:1px solid var(--line);border-radius:10px;
1272
1316
  box-shadow:var(--shadow);padding:5px;max-height:70vh;overflow-y:auto}
1273
1317
  .vitem{display:flex;gap:9px;align-items:center;width:100%;padding:7px 9px;border:0;
1274
- border-radius:7px;background:none;color:var(--ink);font-size:12.5px;cursor:pointer;
1318
+ border-radius:7px;background:none;color:var(--ink);font-size:calc(var(--ui) * 0.8929);cursor:pointer;
1275
1319
  text-align:left}
1276
1320
  .vitem:hover,.vitem.cursor{background:var(--panel-2)}
1277
1321
  .vitem.on{color:var(--cyan)}
1278
- .vitem .vk{margin-left:auto;color:var(--dim);font-size:10.5px;font-family:var(--mono)}
1279
- .vitem .vd{color:var(--dim);font-size:11px}
1322
+ .vitem .vk{margin-left:auto;color:var(--dim);font-size:calc(var(--ui) * 0.75);font-family:var(--mono)}
1323
+ .vitem .vd{color:var(--dim);font-size:calc(var(--ui) * 0.7857)}
1280
1324
 
1281
1325
  /* The panel's own width, dragged. */
1282
1326
  .wgrip{flex:0 0 5px;cursor:col-resize;background:transparent;position:relative}
@@ -1286,7 +1330,7 @@ body[data-tint="soft"]{filter:contrast(.92) brightness(1.04)}
1286
1330
  /* work / page, inside the panel rather than as another tab. */
1287
1331
  .wmodes{display:flex;gap:2px;flex:0 0 auto;background:var(--panel-2);border-radius:7px;padding:2px}
1288
1332
  .wmode{padding:2px 8px;border:0;border-radius:5px;background:none;color:var(--dim);
1289
- font-size:10.5px;cursor:pointer;letter-spacing:.04em;text-transform:uppercase}
1333
+ font-size:calc(var(--ui) * 0.75);cursor:pointer;letter-spacing:.04em;text-transform:uppercase}
1290
1334
  .wmode.on{background:var(--panel);color:var(--cyan)}
1291
1335
 
1292
1336
  /* A terminal that shows what a terminal shows. */
@@ -1306,24 +1350,24 @@ body[data-tint="soft"]{filter:contrast(.92) brightness(1.04)}
1306
1350
  * thing being composed, not about anything that has happened yet.
1307
1351
  */
1308
1352
  .vwarn{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-top:8px;padding:7px 10px;
1309
- border:1px solid var(--amber);border-radius:8px;background:var(--panel-2);font-size:11.5px}
1353
+ border:1px solid var(--amber);border-radius:8px;background:var(--panel-2);font-size:calc(var(--ui) * 0.8214)}
1310
1354
  .vwarn .vi{flex:0 0 auto;padding:1px 7px;border-radius:999px;border:1px solid var(--amber);
1311
- color:var(--amber);font-size:10px;letter-spacing:.05em;text-transform:uppercase}
1355
+ color:var(--amber);font-size:calc(var(--ui) * 0.7143);letter-spacing:.05em;text-transform:uppercase}
1312
1356
  .vwarn .vt{flex:1;min-width:0;color:var(--muted);line-height:1.5}
1313
1357
  .vwarn .vgo{flex:0 0 auto;padding:4px 10px;border-radius:7px;border:1px solid var(--cyan);
1314
- color:var(--cyan);background:transparent;cursor:pointer;font-size:11.5px;white-space:nowrap}
1358
+ color:var(--cyan);background:transparent;cursor:pointer;font-size:calc(var(--ui) * 0.8214);white-space:nowrap}
1315
1359
  .vwarn .vgo:hover{background:var(--panel)}
1316
1360
 
1317
1361
  /* Carrying on from a transcript, offered in the bar that says it is read only. */
1318
1362
  .readonly .rgap{flex:1}
1319
- .readonly .rwhy{font-size:11.5px;color:var(--dim);white-space:nowrap;overflow:hidden;
1363
+ .readonly .rwhy{font-size:calc(var(--ui) * 0.8214);color:var(--dim);white-space:nowrap;overflow:hidden;
1320
1364
  text-overflow:ellipsis;max-width:46%}
1321
1365
  .readonly .rgo{flex:0 0 auto;padding:6px 13px;border-radius:8px;border:1px solid var(--cyan);
1322
- color:var(--cyan);background:transparent;font-size:12px;cursor:pointer;white-space:nowrap}
1366
+ color:var(--cyan);background:transparent;font-size:calc(var(--ui) * 0.8571);cursor:pointer;white-space:nowrap}
1323
1367
  .readonly .rgo:hover{background:var(--panel-2)}
1324
1368
 
1325
1369
  /* What the turn came to, in the tense that matches — the line the terminal has always printed. */
1326
- .landed{font-size:11.5px;color:var(--dim);font-family:var(--mono);margin:2px 0 14px;
1370
+ .landed{font-size:calc(var(--ui) * 0.8214);color:var(--dim);font-family:var(--mono);margin:2px 0 14px;
1327
1371
  letter-spacing:.02em}
1328
1372
  .dlg .row{display:flex;gap:8px;justify-content:flex-end}
1329
1373
  .dlg .row button{padding:7px 15px;border-radius:8px;border:1px solid var(--line)}