viberoom 0.6.0 → 0.7.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.
Files changed (110) hide show
  1. package/NOTICE +14 -0
  2. package/dist/hub.js +45 -4
  3. package/dist/main.js +1 -1
  4. package/dist/recipes.js +2 -1
  5. package/dist/shortcuts.js +1 -1
  6. package/package.json +1 -1
  7. package/ui/app.css +131 -107
  8. package/ui/app.js +334 -87
  9. package/ui/avatars.js +7 -14
  10. package/ui/components.css +116 -21
  11. package/ui/components.js +202 -1
  12. package/ui/fonts/anonymous-pro-cyrillic-400.woff2 +0 -0
  13. package/ui/fonts/anonymous-pro-cyrillic-700.woff2 +0 -0
  14. package/ui/fonts/anonymous-pro-latin-400.woff2 +0 -0
  15. package/ui/fonts/anonymous-pro-latin-700.woff2 +0 -0
  16. package/ui/fonts/anonymous-pro-latin-ext-400.woff2 +0 -0
  17. package/ui/fonts/anonymous-pro-latin-ext-700.woff2 +0 -0
  18. package/ui/fonts/anonymous-pro.css +7 -0
  19. package/ui/fonts/cascadia-code-cyrillic-ext.woff2 +0 -0
  20. package/ui/fonts/cascadia-code-cyrillic.woff2 +0 -0
  21. package/ui/fonts/cascadia-code-latin-ext.woff2 +0 -0
  22. package/ui/fonts/cascadia-code-latin.woff2 +0 -0
  23. package/ui/fonts/cascadia-code.css +5 -0
  24. package/ui/fonts/comfortaa-cyrillic-ext.woff2 +0 -0
  25. package/ui/fonts/comfortaa-cyrillic.woff2 +0 -0
  26. package/ui/fonts/comfortaa-latin-ext.woff2 +0 -0
  27. package/ui/fonts/comfortaa-latin.woff2 +0 -0
  28. package/ui/fonts/comfortaa.css +5 -0
  29. package/ui/fonts/exo-2-cyrillic-ext.woff2 +0 -0
  30. package/ui/fonts/exo-2-cyrillic.woff2 +0 -0
  31. package/ui/fonts/exo-2-latin-ext.woff2 +0 -0
  32. package/ui/fonts/exo-2-latin.woff2 +0 -0
  33. package/ui/fonts/exo-2.css +5 -0
  34. package/ui/fonts/golos-text-cyrillic-ext.woff2 +0 -0
  35. package/ui/fonts/golos-text-cyrillic.woff2 +0 -0
  36. package/ui/fonts/golos-text-latin-ext.woff2 +0 -0
  37. package/ui/fonts/golos-text-latin.woff2 +0 -0
  38. package/ui/fonts/golos-text.css +5 -0
  39. package/ui/fonts/ibm-plex-mono-cyrillic-400.woff2 +0 -0
  40. package/ui/fonts/ibm-plex-mono-cyrillic-600.woff2 +0 -0
  41. package/ui/fonts/ibm-plex-mono-cyrillic-700.woff2 +0 -0
  42. package/ui/fonts/ibm-plex-mono-cyrillic-ext-400.woff2 +0 -0
  43. package/ui/fonts/ibm-plex-mono-cyrillic-ext-600.woff2 +0 -0
  44. package/ui/fonts/ibm-plex-mono-cyrillic-ext-700.woff2 +0 -0
  45. package/ui/fonts/ibm-plex-mono-latin-400.woff2 +0 -0
  46. package/ui/fonts/ibm-plex-mono-latin-600.woff2 +0 -0
  47. package/ui/fonts/ibm-plex-mono-latin-700.woff2 +0 -0
  48. package/ui/fonts/ibm-plex-mono-latin-ext-400.woff2 +0 -0
  49. package/ui/fonts/ibm-plex-mono-latin-ext-600.woff2 +0 -0
  50. package/ui/fonts/ibm-plex-mono-latin-ext-700.woff2 +0 -0
  51. package/ui/fonts/ibm-plex-mono.css +13 -0
  52. package/ui/fonts/ibm-plex-sans-cyrillic-400.woff2 +0 -0
  53. package/ui/fonts/ibm-plex-sans-cyrillic-600.woff2 +0 -0
  54. package/ui/fonts/ibm-plex-sans-cyrillic-700.woff2 +0 -0
  55. package/ui/fonts/ibm-plex-sans-cyrillic-ext-400.woff2 +0 -0
  56. package/ui/fonts/ibm-plex-sans-cyrillic-ext-600.woff2 +0 -0
  57. package/ui/fonts/ibm-plex-sans-cyrillic-ext-700.woff2 +0 -0
  58. package/ui/fonts/ibm-plex-sans-latin-400.woff2 +0 -0
  59. package/ui/fonts/ibm-plex-sans-latin-600.woff2 +0 -0
  60. package/ui/fonts/ibm-plex-sans-latin-700.woff2 +0 -0
  61. package/ui/fonts/ibm-plex-sans-latin-ext-400.woff2 +0 -0
  62. package/ui/fonts/ibm-plex-sans-latin-ext-600.woff2 +0 -0
  63. package/ui/fonts/ibm-plex-sans-latin-ext-700.woff2 +0 -0
  64. package/ui/fonts/ibm-plex-sans.css +13 -0
  65. package/ui/fonts/manrope-cyrillic-ext.woff2 +0 -0
  66. package/ui/fonts/manrope-cyrillic.woff2 +0 -0
  67. package/ui/fonts/manrope-latin-ext.woff2 +0 -0
  68. package/ui/fonts/manrope-latin.woff2 +0 -0
  69. package/ui/fonts/manrope.css +5 -0
  70. package/ui/fonts/montserrat-cyrillic-ext.woff2 +0 -0
  71. package/ui/fonts/montserrat-cyrillic.woff2 +0 -0
  72. package/ui/fonts/montserrat-latin-ext.woff2 +0 -0
  73. package/ui/fonts/montserrat-latin.woff2 +0 -0
  74. package/ui/fonts/montserrat.css +5 -0
  75. package/ui/fonts/open-sans-cyrillic-ext.woff2 +0 -0
  76. package/ui/fonts/open-sans-cyrillic.woff2 +0 -0
  77. package/ui/fonts/open-sans-latin-ext.woff2 +0 -0
  78. package/ui/fonts/open-sans-latin.woff2 +0 -0
  79. package/ui/fonts/open-sans.css +5 -0
  80. package/ui/fonts/pt-mono-cyrillic-ext.woff2 +0 -0
  81. package/ui/fonts/pt-mono-cyrillic.woff2 +0 -0
  82. package/ui/fonts/pt-mono-latin-ext.woff2 +0 -0
  83. package/ui/fonts/pt-mono-latin.woff2 +0 -0
  84. package/ui/fonts/pt-mono.css +5 -0
  85. package/ui/fonts/rubik-cyrillic-ext.woff2 +0 -0
  86. package/ui/fonts/rubik-cyrillic.woff2 +0 -0
  87. package/ui/fonts/rubik-latin-ext.woff2 +0 -0
  88. package/ui/fonts/rubik-latin.woff2 +0 -0
  89. package/ui/fonts/rubik.css +5 -0
  90. package/ui/fonts/source-sans-3-cyrillic-ext.woff2 +0 -0
  91. package/ui/fonts/source-sans-3-cyrillic.woff2 +0 -0
  92. package/ui/fonts/source-sans-3-latin-ext.woff2 +0 -0
  93. package/ui/fonts/source-sans-3-latin.woff2 +0 -0
  94. package/ui/fonts/source-sans-3.css +5 -0
  95. package/ui/fonts/ubuntu-sans-cyrillic-ext.woff2 +0 -0
  96. package/ui/fonts/ubuntu-sans-cyrillic.woff2 +0 -0
  97. package/ui/fonts/ubuntu-sans-latin-ext.woff2 +0 -0
  98. package/ui/fonts/ubuntu-sans-latin.woff2 +0 -0
  99. package/ui/fonts/ubuntu-sans.css +5 -0
  100. package/ui/fonts/victor-mono-cyrillic-ext.woff2 +0 -0
  101. package/ui/fonts/victor-mono-cyrillic.woff2 +0 -0
  102. package/ui/fonts/victor-mono-latin-ext.woff2 +0 -0
  103. package/ui/fonts/victor-mono-latin.woff2 +0 -0
  104. package/ui/fonts/victor-mono.css +5 -0
  105. package/ui/index.html +15 -6
  106. package/ui/looks.css +2446 -0
  107. package/ui/manifest.json +3 -3
  108. package/ui/theme.css +114 -84
  109. package/ui/tokens.js +315 -29
  110. package/ui/ui.js +2 -0
package/ui/manifest.json CHANGED
@@ -7,8 +7,8 @@
7
7
  "background_color": "#f3f2fb",
8
8
  "theme_color": "#6d5dfc",
9
9
  "icons": [
10
- { "src": "/icon.svg?v=6", "sizes": "any", "type": "image/svg+xml", "purpose": "any" },
11
- { "src": "/icon-256.png?v=6", "sizes": "256x256", "type": "image/png" },
12
- { "src": "/icon-512.png?v=6", "sizes": "512x512", "type": "image/png" }
10
+ { "src": "/icon-256.png?v=8", "sizes": "256x256", "type": "image/png", "purpose": "any" },
11
+ { "src": "/icon-512.png?v=8", "sizes": "512x512", "type": "image/png", "purpose": "any" },
12
+ { "src": "/icon.svg?v=8", "sizes": "any", "type": "image/svg+xml", "purpose": "any" }
13
13
  ]
14
14
  }
package/ui/theme.css CHANGED
@@ -5,6 +5,21 @@
5
5
  @import url("/fonts/jetbrains-mono.css");
6
6
  @import url("/fonts/fira-code.css");
7
7
  @import url("/fonts/source-code-pro.css");
8
+ @import url("/fonts/open-sans.css");
9
+ @import url("/fonts/source-sans-3.css");
10
+ @import url("/fonts/ibm-plex-sans.css");
11
+ @import url("/fonts/manrope.css");
12
+ @import url("/fonts/rubik.css");
13
+ @import url("/fonts/montserrat.css");
14
+ @import url("/fonts/golos-text.css");
15
+ @import url("/fonts/exo-2.css");
16
+ @import url("/fonts/comfortaa.css");
17
+ @import url("/fonts/ubuntu-sans.css");
18
+ @import url("/fonts/ibm-plex-mono.css");
19
+ @import url("/fonts/pt-mono.css");
20
+ @import url("/fonts/victor-mono.css");
21
+ @import url("/fonts/anonymous-pro.css");
22
+ @import url("/fonts/cascadia-code.css");
8
23
  :root {
9
24
  --primary: #5b5bf0;
10
25
  --primary-light: #6a6af7;
@@ -16,7 +31,7 @@
16
31
  --ink-2: #2c2b4a;
17
32
  --ink-3: #5c5c80;
18
33
  --indigo: #1f1d3a;
19
- --muted: #8f8fb0;
34
+ --muted: #8080a3;
20
35
  --faint: #b3b3cc;
21
36
  --placeholder: #a3a3c0;
22
37
  --grey: #9ca3af;
@@ -39,7 +54,7 @@
39
54
  --green: #2fc97e;
40
55
  --warm: #fff3cc;
41
56
  --warm-2: #ffeaa8;
42
- --warm-ink: #b8860b;
57
+ --warm-ink: #a07408;
43
58
  --bronze: #5a4200;
44
59
  --amber: #f5a524;
45
60
  --honey: #ffcf8f;
@@ -86,7 +101,7 @@
86
101
  --st-waiting-ink: #2a6fbf;
87
102
  --st-waiting-dot: #7aa7ff;
88
103
  --st-thinking: #fff3cc;
89
- --st-thinking-ink: #b8860b;
104
+ --st-thinking-ink: #a07408;
90
105
  --st-thinking-dot: #f5a524;
91
106
  --st-writing: #f3e4fb;
92
107
  --st-writing-ink: #8a3fc2;
@@ -95,7 +110,7 @@
95
110
  --st-error-ink: #e0554a;
96
111
  --st-error-dot: #e0554a;
97
112
  --st-asleep: #f1f1f8;
98
- --st-asleep-ink: #8f8fb0;
113
+ --st-asleep-ink: #8080a3;
99
114
  --st-asleep-dot: #b3b3cc;
100
115
  --attention: #ff8a3d;
101
116
  --attention-ink: #c9461c;
@@ -109,8 +124,6 @@
109
124
  --tick-mine: #cdcdf9;
110
125
  --tick-mine-view: #a9a9f5;
111
126
  --tick-fallback: #9ca3af;
112
- --unseen-ink: #be185d;
113
- --unseen-bg: #fff1f7;
114
127
  --grad-primary: linear-gradient(135deg, #6a6af7, #4f4fe0);
115
128
  --panel: #ffffff;
116
129
  --card: #ffffff;
@@ -148,6 +161,8 @@
148
161
  --shadow-inset: none;
149
162
  --shadow-soft: 0 2px 0 rgba(28, 27, 51, 0.04);
150
163
  --shadow: 0 2px 0 rgba(28, 27, 51, 0.04);
164
+ --bevel: none;
165
+ --shadow-room: 0px;
151
166
  --grad-canvas: radial-gradient(900px 520px at 100% 100%, rgba(91, 91, 240, 0.06), transparent 70%), radial-gradient(640px 380px at 0% 0%, rgba(47, 201, 126, 0.04), transparent 70%), linear-gradient(165deg, #fdfdff 0%, #f7f7fe 55%, #f0f1fd 100%);
152
167
  --canvas-pattern: radial-gradient(circle at 1px 1px, rgba(91, 91, 240, 0.13) 0.9px, transparent 1.6px);
153
168
  --canvas-pattern-size: 22px 22px;
@@ -155,14 +170,16 @@
155
170
  --sb-w: 8px;
156
171
  --sb-thumb: rgba(91, 91, 240, 0.22);
157
172
  --sb-thumb-hover: rgba(91, 91, 240, 0.45);
158
- --r-xs: 8px;
159
- --r-sm: 12px;
160
- --r-md: 14px;
161
- --r-lg: 18px;
162
- --r-xl: 18px;
163
- --r-pill: 99px;
173
+ --r-scale: 1;
174
+ --r-xs: calc(8px * var(--r-scale));
175
+ --r-sm: calc(12px * var(--r-scale));
176
+ --r-md: calc(14px * var(--r-scale));
177
+ --r-lg: calc(18px * var(--r-scale));
178
+ --r-xl: calc(18px * var(--r-scale));
179
+ --r-pill: calc(99px * var(--r-scale));
164
180
  --font: "Nunito", "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
165
181
  --mono: "JetBrains Mono", ui-monospace, Consolas, "Courier New", monospace;
182
+ --line-height: 1.45;
166
183
  --fs-scale: 1;
167
184
  --fs-xs: calc(11px * var(--fs-scale));
168
185
  --fs-sm: calc(12px * var(--fs-scale));
@@ -189,7 +206,7 @@
189
206
  --btn-secondary-bg: #ffffff;
190
207
  --btn-soft-bg: #eef0fb;
191
208
  --btn-soft-hover-bg: #e4e6fb;
192
- --btn-ghost-ink: #8f8fb0;
209
+ --btn-ghost-ink: #8080a3;
193
210
  --btn-ghost-hover-bg: #f6f6fb;
194
211
  --btn-danger-bg: #fff0ee;
195
212
  --btn-danger-ink: #e0554a;
@@ -205,7 +222,7 @@
205
222
  --btn-dark-bg: rgba(255, 255, 255, 0.12);
206
223
  --btn-dark-ink: #ffffff;
207
224
  --btn-dark-hover-bg: #5b5bf0;
208
- --btn-warn-ink: #b8860b;
225
+ --btn-warn-ink: #a07408;
209
226
  --btn-warn-hover-bg: #fff3cc;
210
227
  --btn-inverse-bg: rgba(255, 255, 255, 0.92);
211
228
  --btn-inverse-ink: #c9461c;
@@ -226,7 +243,7 @@
226
243
  --btn-fs-sm: calc(12px * var(--fs-scale));
227
244
  --btn-fs-lg: calc(15px * var(--fs-scale));
228
245
  --btn-fs-cta: calc(14px * var(--fs-scale));
229
- --icon-button-ink: #8f8fb0;
246
+ --icon-button-ink: #8080a3;
230
247
  --icon-button-hover-bg: #f6f6fb;
231
248
  --icon-button-hover-ink: #5b5bf0;
232
249
  --icon-button-disabled-opacity: 0.4;
@@ -246,11 +263,11 @@
246
263
  --badge-bg: #eef0fb;
247
264
  --badge-ink: #5b5bf0;
248
265
  --badge-attention-bg: #fff3cc;
249
- --badge-attention-ink: #b8860b;
266
+ --badge-attention-ink: #a07408;
250
267
  --badge-muted-bg: #f1f1f8;
251
- --badge-muted-ink: #8f8fb0;
268
+ --badge-muted-ink: #8080a3;
252
269
  --badge-outline-border: #e4e6fb;
253
- --badge-outline-ink: #8f8fb0;
270
+ --badge-outline-ink: #8080a3;
254
271
  --badge-fs-xs: calc(10px * var(--fs-scale));
255
272
  --chip-bg: #eef0fb;
256
273
  --chip-ink: #5b5bf0;
@@ -268,17 +285,17 @@
268
285
  --tool-call-error-bg: #fff0ee;
269
286
  --tool-call-error-ink: #e0554a;
270
287
  --tool-call-thinking-bg: #fff3cc;
271
- --tool-call-thinking-ink: #b8860b;
288
+ --tool-call-thinking-ink: #a07408;
272
289
  --tool-call-pending-bg: #eef0fb;
273
290
  --tool-call-pending-ink: #5b5bf0;
274
291
  --tool-call-body-bg: #ffffff;
275
292
  --tool-call-pre-bg: #f6f6fb;
276
293
  --tool-call-pre-ink: #1c1b33;
277
- --tool-call-quiet-ink: #8f8fb0;
294
+ --tool-call-quiet-ink: #8080a3;
278
295
  --tool-call-fs: calc(12px * var(--fs-scale));
279
296
  --tool-call-pre-fs: calc(11.5px * var(--fs-scale));
280
297
  --tool-call-label-fs: calc(10.5px * var(--fs-scale));
281
- --tool-fold-ink: #8f8fb0;
298
+ --tool-fold-ink: #8080a3;
282
299
  --tool-fold-bg: #f6f6fb;
283
300
  --tool-fold-hover-bg: #eef0fb;
284
301
  --tool-fold-hover-ink: #5b5bf0;
@@ -286,34 +303,38 @@
286
303
  --tool-fold-fs: calc(11px * var(--fs-scale));
287
304
  --ask-card-bg: #fff3cc;
288
305
  --ask-card-ink: #1c1b33;
289
- --ask-card-quiet-ink: #8f8fb0;
306
+ --ask-card-quiet-ink: #8080a3;
290
307
  --ask-card-resolved-opacity: 0.7;
291
308
  --ask-card-fs: calc(13px * var(--fs-scale));
292
309
  --ask-card-kind-fs: calc(11px * var(--fs-scale));
293
310
  --ask-card-input-fs: calc(11px * var(--fs-scale));
294
311
  --ask-card-outcome-fs: calc(12px * var(--fs-scale));
295
- --reply-note-ink: #8f8fb0;
312
+ --reply-note-ink: #8080a3;
296
313
  --reply-note-bg: #f6f6fb;
297
- --reply-note-attention-ink: #b8860b;
314
+ --reply-note-attention-ink: #a07408;
298
315
  --reply-note-attention-bg: #fff3cc;
299
316
  --reply-note-fs: calc(12px * var(--fs-scale));
317
+ --look-card-w: 150px;
318
+ --look-card-paper-h: 84px;
319
+ --look-card-bg: #ffffff;
320
+ --look-card-ink: #1c1b33;
321
+ --look-card-border: #e4e6fb;
322
+ --look-card-hover-border: #a9a9f5;
323
+ --look-card-on-border: #5b5bf0;
300
324
  --choice-bg: #f6f6fb;
301
325
  --choice-ink: #5c5c80;
302
326
  --choice-hover-bg: #eef0fb;
303
327
  --choice-on-ink: #5b5bf0;
304
328
  --choice-on-border: #5b5bf0;
305
- --choice-quiet-ink: #8f8fb0;
329
+ --choice-quiet-ink: #8080a3;
306
330
  --choice-h: 32px;
307
331
  --control-knob: #ffffff;
308
332
  --control-knob-shadow: 0 1px 3px rgba(28, 27, 51, 0.25);
309
333
  --control-box-bg: #ffffff;
310
334
  --control-tick: #ffffff;
311
- --tile-logo-bg: #ffffff;
312
335
  --tile-badge-bg: #ffffff;
313
- --tile-badge-border: #ffffff;
314
- --tile-ring: #ffffff;
315
- --tile-mark-ink: #ffffff;
316
336
  --tile-count-ink: #ffffff;
337
+ --room-mark-ink: #ffffff;
317
338
  --room-mark-grad-angle: 135deg;
318
339
  --room-mark-grad-from: 72% 66%;
319
340
  --room-mark-grad-to: 68% 52%;
@@ -329,7 +350,7 @@
329
350
  --scrim-shadow: 0 24px 60px -20px rgba(0, 0, 0, 0.6);
330
351
  --scrim-image-bg: #ffffff;
331
352
  --toast-bg: #1c1b33;
332
- --toast-ink: #f4f2ff;
353
+ --toast-ink: #ffffff;
333
354
  --rail-logo-shadow: 0 8px 18px -6px rgba(91, 91, 240, 0.6);
334
355
  --rail-active-bg: #ffffff;
335
356
  --timeline-view-bg: rgba(91, 91, 240, 0.07);
@@ -340,6 +361,7 @@
340
361
  --timeline-flash-out: rgba(91, 91, 240, 0);
341
362
  --bubble-bg: #ffffff;
342
363
  --bubble-ink: #2c2b4a;
364
+ --bubble-border: transparent;
343
365
  --bubble-shadow: 0 2px 0 rgba(28, 27, 51, 0.06), 0 1px 3px rgba(28, 27, 51, 0.04);
344
366
  --bubble-mine-bg: linear-gradient(135deg, #6a6af7, #4f4fe0);
345
367
  --bubble-mine-ink: #ffffff;
@@ -393,7 +415,7 @@
393
415
  --code-sb-firefox: rgba(255, 255, 255, 0.35);
394
416
  --code-find-hit-bg: #ffcf8f;
395
417
  --code-find-hit-ink: #26244a;
396
- --syntax-comment: #8f8fb0;
418
+ --syntax-comment: #8080a3;
397
419
  --syntax-punctuation: #c9c6ea;
398
420
  --syntax-keyword: #b9a7ff;
399
421
  --syntax-string: #8fe3bd;
@@ -407,25 +429,56 @@
407
429
  --diagram-node-ink: #1c1b33;
408
430
  --input-bg: #ffffff;
409
431
  --input-focus-border: #5b5bf0;
432
+ --input-shadow: none;
410
433
  --profile-bg: linear-gradient(160deg, #eef0fb, #e4f7ee);
411
- --profile-avatar-bg: #ffffff;
412
434
  --profile-badge-bg: #ffffff;
413
- --participant-fallback: #9ca3af;
414
- --participant-human-ink: #1f1d3a;
415
- --participant-avatar-default: #5b5bf0;
416
- --participant-avatar-gloss: #ffffff;
417
- --participant-avatar-label-ink: #ffffff;
418
- --participant-avatar-blend: #ffffff;
435
+ --face-paper: #ffffff;
436
+ --face-tint: 16%;
437
+ --face-corner: 0.32;
438
+ --face-ring: #ffffff;
439
+ --face-me-ring: #5b5bf0;
440
+ --face-dot-bg: #b3b3cc;
441
+ --face-card-bg: #ffffff;
442
+ --face-fallback: #9ca3af;
443
+ --face-human-ink: #1f1d3a;
444
+ --face-avatar-default: #5b5bf0;
445
+ --face-avatar-gloss: #ffffff;
446
+ --face-avatar-label-ink: #ffffff;
447
+ --logo-tile-bg: #ffffff;
448
+ --logo-tile-ink: #1f1d3a;
449
+ --logo-tile-badge-bg: #ffffff;
450
+ --logo-tile-badge-border: #ffffff;
451
+ --logo-tile-badge-ink: #1f1d3a;
452
+ --logo-tile-muted-bg: #fff3cc;
453
+ --logo-tile-muted-ink: #a07408;
454
+ --logo-tile-sm: 30px;
455
+ --logo-tile-md: 36px;
456
+ --logo-tile-lg: 40px;
457
+ --unseen-line-ink: #be185d;
458
+ --unseen-line-bg: #fff1f7;
459
+ --unseen-line-line: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='8' viewBox='0 0 16 8'><path d='M0 4 Q4 0 8 4 T16 4' fill='none' stroke='%23be185d' stroke-width='1.6'/></svg>") repeat-x center / 16px 8px;
460
+ --unseen-line-line-h: 8px;
461
+ --unseen-line-line-opacity: 0.55;
462
+ --number-field-step-w: 22px;
463
+ --number-field-step-ink: #8080a3;
464
+ --number-field-step-hover-bg: #eef0fb;
465
+ --number-field-step-hover-ink: #5b5bf0;
466
+ --adjust-row-swatch-border: #e4e6fb;
467
+ --adjust-row-value-ink: #8080a3;
468
+ --adjust-row-hint-ink: #8080a3;
469
+ --adjust-row-changed-ink: #5b5bf0;
470
+ --adjust-row-back-ink: #8080a3;
471
+ --adjust-row-back-hover-bg: #eef0fb;
419
472
  --row-button-size: 24px;
420
473
  --row-button-icon: 14px;
421
474
  --row-button-radius: 8px;
422
475
  --row-button-bg: #f1f1f8;
423
- --row-button-ink: #8f8fb0;
476
+ --row-button-ink: #8080a3;
424
477
  --row-button-hover-bg: #5b5bf0;
425
478
  --row-button-hover-ink: #ffffff;
426
479
  --row-button-disabled-opacity: 0.4;
427
- --hub-row-ink: #8f8fb0;
428
- --hub-row-attention-ink: #b8860b;
480
+ --hub-row-ink: #8080a3;
481
+ --hub-row-attention-ink: #a07408;
429
482
  --hub-row-error-ink: #e0554a;
430
483
  --hub-row-action-bg: #d9f7e8;
431
484
  --hub-row-action-ink: #1d8f6a;
@@ -458,17 +511,17 @@
458
511
  }
459
512
  * { box-sizing: border-box; }
460
513
  html, body { height: 100%; margin: 0; overflow: hidden; }
461
- body { font-family: var(--font); color: var(--page-ink); background: var(--page-bg); font-size: var(--fs-md); font-weight: 600; line-height: 1.45; -webkit-font-smoothing: antialiased; }
514
+ body { font-family: var(--font); color: var(--page-ink); background: var(--page-bg); font-size: var(--fs-md); font-weight: 600; line-height: var(--line-height); -webkit-font-smoothing: antialiased; }
462
515
  button { font: inherit; cursor: pointer; color: inherit; }
463
516
  input, select, textarea { font: inherit; color: var(--ink); }
464
517
  h1, h2, h3, h4 { margin: 0; font-weight: 800; line-height: 1.2; }
465
518
  p { margin: 0 0 8px; }
466
519
  pre, code { font-family: var(--mono); font-size: calc(12px * var(--fs-scale)); font-weight: 500; }
467
- code { background: var(--lav); padding: 1px 6px; border-radius: 6px; overflow-wrap: anywhere; }
520
+ code { background: var(--lav); padding: 1px 6px; border-radius: calc(6px * var(--r-scale)); overflow-wrap: anywhere; }
468
521
  pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; border-radius: var(--r-sm); overflow-x: auto; white-space: pre-wrap; }
469
522
  [hidden] { display: none !important; }
470
523
  ::selection { background: var(--page-selection); }
471
- :focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 2px; border-radius: 8px; }
524
+ :focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 2px; border-radius: calc(8px * var(--r-scale)); }
472
525
  @supports not selector(::-webkit-scrollbar) { * { scrollbar-width: thin; scrollbar-color: var(--sb-thumb) transparent; } }
473
526
  *::-webkit-scrollbar { width: var(--sb-w); height: var(--sb-w); }
474
527
  *::-webkit-scrollbar-track { background: transparent; margin: 12px 0; }
@@ -479,7 +532,7 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
479
532
  .i.lg { width: 20px; height: 20px; }
480
533
  .i.xl { width: 24px; height: 24px; }
481
534
  [data-icon] { display: inline-flex; align-items: center; justify-content: center; line-height: 0; }
482
- .h-ico { width: 40px; height: 40px; border-radius: 13px; background: var(--lav); color: var(--primary); display: inline-grid; place-content: center; flex: none; }
535
+ .h-ico { width: 40px; height: 40px; border-radius: calc(13px * var(--r-scale)); background: var(--lav); color: var(--primary); display: inline-grid; place-content: center; flex: none; }
483
536
  .h-ico .i { width: 20px; height: 20px; }
484
537
  .h-ico.danger { background: var(--rose); color: var(--rose-ink); }
485
538
  .hint { color: var(--faint); font-size: var(--fs-xs); font-weight: 600; line-height: 1.45; }
@@ -521,7 +574,7 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
521
574
  .field .rules-editor:hover { border-color: var(--lav-2); }
522
575
  .field .rules-editor:focus { outline: none; border-color: var(--primary); background: var(--card); }
523
576
  .field .rules-editor:empty::before { content: attr(data-placeholder); color: var(--placeholder); pointer-events: none; }
524
- .mention-chip { display: inline-flex; align-items: center; gap: 4px; vertical-align: baseline; padding: 0 6px 0 2px; border-radius: 7px; background: var(--soft); font-weight: 800; white-space: nowrap; line-height: 1.35; user-select: all; }
577
+ .mention-chip { display: inline-flex; align-items: center; gap: 4px; vertical-align: baseline; padding: 0 6px 0 2px; border-radius: calc(7px * var(--r-scale)); background: var(--soft); font-weight: 800; white-space: nowrap; line-height: 1.35; user-select: all; }
525
578
  .mention-chip .chip-name { color: inherit; }
526
579
  .field.inline-num input { width: 84px; }
527
580
  .field-grid { display: grid; gap: 8px 10px; }
@@ -533,14 +586,14 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
533
586
  .switch .label { flex: 1; }
534
587
  .switch .label .hint { display: block; margin-top: 2px; }
535
588
  .switch input, .toggle input { flex: none; width: 42px; height: 24px; appearance: none; -webkit-appearance: none; background: var(--lav-2); border-radius: var(--r-pill); position: relative; cursor: pointer; transition: background var(--t-base) var(--ease-out); margin: 0; }
536
- .switch input::after, .toggle input::after { content: ""; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; background: var(--control-knob); border-radius: 50%; box-shadow: var(--control-knob-shadow); transition: transform var(--t-base) var(--ease-pop); }
589
+ .switch input::after, .toggle input::after { content: ""; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; background: var(--control-knob); border-radius: calc(50% * var(--r-scale)); box-shadow: var(--control-knob-shadow); transition: transform var(--t-base) var(--ease-pop); }
537
590
  .switch input:checked, .toggle input:checked { background: var(--primary); }
538
591
  .switch input:checked::after, .toggle input:checked::after { transform: translateX(18px); }
539
592
  .switch input:focus-visible { outline: 3px solid var(--focus-ring); }
540
593
  .check-list { display: flex; flex-direction: column; gap: 4px; margin-top: 2px; }
541
- .check-row { display: flex; flex-direction: row; align-items: flex-start; gap: 10px; font-size: calc(13px * var(--fs-scale)); font-weight: 700; color: var(--ink-2); cursor: pointer; margin-bottom: 0; padding: 8px 10px; border-radius: 12px; transition: background var(--t-fast); }
594
+ .check-row { display: flex; flex-direction: row; align-items: flex-start; gap: 10px; font-size: calc(13px * var(--fs-scale)); font-weight: 700; color: var(--ink-2); cursor: pointer; margin-bottom: 0; padding: 8px 10px; border-radius: calc(12px * var(--r-scale)); transition: background var(--t-fast); }
542
595
  .check-row:hover { background: var(--soft); }
543
- .check-row input { appearance: none; -webkit-appearance: none; width: 20px; height: 20px; border: 2px solid var(--lav-2); border-radius: 7px; background: var(--control-box-bg); margin: 0; flex: none; display: grid; place-content: center; transition: background var(--t-fast), border-color var(--t-fast); cursor: pointer; }
596
+ .check-row input { appearance: none; -webkit-appearance: none; width: 20px; height: 20px; border: 2px solid var(--lav-2); border-radius: calc(7px * var(--r-scale)); background: var(--control-box-bg); margin: 0; flex: none; display: grid; place-content: center; transition: background var(--t-fast), border-color var(--t-fast); cursor: pointer; }
544
597
  .check-row input::before { content: ""; width: 10px; height: 10px; clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); background: var(--control-tick); transform: scale(0); transition: transform var(--t-fast) var(--ease-pop); }
545
598
  .check-row input:checked { background: var(--primary); border-color: var(--primary); }
546
599
  .check-row input:checked::before { transform: scale(1); }
@@ -556,7 +609,7 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
556
609
  .card.hover:hover { transform: translateY(-2px); background: var(--lav); }
557
610
  .card.cta { border: 2px dashed var(--lav-2); background: transparent; color: var(--primary); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; font-weight: 800; }
558
611
  .card.cta:hover { background: var(--soft); transform: translateY(-2px); }
559
- .card.cta .plus { width: 44px; height: 44px; border-radius: 14px; background: var(--grad-primary); color: var(--btn-on-primary); display: grid; place-content: center; box-shadow: var(--shadow-primary); }
612
+ .card.cta .plus { width: 44px; height: 44px; border-radius: calc(14px * var(--r-scale)); background: var(--grad-primary); color: var(--btn-on-primary); display: grid; place-content: center; box-shadow: var(--shadow-primary); }
560
613
  .card.cta .plus .i { width: 20px; height: 20px; }
561
614
  .section { background: var(--soft); border: 0; border-radius: var(--r-lg); padding: 16px 16px 12px; margin-bottom: 12px; min-width: 0; }
562
615
  .section > h4 { margin: 0 0 12px; font-size: calc(11px * var(--fs-scale)); font-weight: 800; letter-spacing: 0.1em; text-transform: uppercase; color: var(--faint); display: flex; align-items: center; gap: 7px; }
@@ -576,7 +629,7 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
576
629
  .kv { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 5px 10px; font-size: var(--fs-sm); font-weight: 700; overflow-wrap: anywhere; }
577
630
  .kv span:nth-child(odd) { color: var(--muted); font-weight: 600; overflow-wrap: normal; }
578
631
  .kv span:nth-child(even) { text-align: right; color: var(--ink-2); }
579
- .divider { height: 2px; background: var(--lav); margin: 10px 0; border-radius: 2px; }
632
+ .divider { height: 2px; background: var(--lav); margin: 10px 0; border-radius: calc(2px * var(--r-scale)); }
580
633
  .geek { margin: 4px 0 2px; min-width: 0; }
581
634
  .geek > summary { list-style: none; display: flex; align-items: center; gap: 8px; padding: 10px 14px; border-radius: var(--r-sm); background: var(--lav); color: var(--primary); font-weight: 800; font-size: calc(12px * var(--fs-scale)); cursor: pointer; user-select: none; white-space: nowrap; min-width: 0; transition: background var(--t-fast); }
582
635
  .geek > summary::-webkit-details-marker { display: none; }
@@ -591,15 +644,13 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
591
644
  .geek-tip .i { width: 17px; height: 17px; display: block; }
592
645
  p .geek-tip, .hint > .geek-tip, .switch .label > .geek-tip { margin-left: 8px; }
593
646
  .geek-tip:hover { box-shadow: inset 0 -1.5px 0 currentColor; }
594
- .geek-text { display: block; flex: 1 0 100%; font-size: calc(11.5px * var(--fs-scale)); font-weight: 600; color: var(--muted); background: var(--lav); border-radius: 10px; padding: 8px 10px; margin: 4px 0 2px; line-height: 1.45; animation: fade-in var(--t-base) var(--ease-out); }
647
+ .geek-text { display: block; flex: 1 0 100%; font-size: calc(11.5px * var(--fs-scale)); font-weight: 600; color: var(--muted); background: var(--lav); border-radius: calc(10px * var(--r-scale)); padding: 8px 10px; margin: 4px 0 2px; line-height: 1.45; animation: fade-in var(--t-base) var(--ease-out); }
595
648
  .geek-text code { font-size: calc(11px * var(--fs-scale)); }
596
649
  .choice-row { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; min-width: 0; }
597
650
  .choice-row > .label { font-size: calc(12px * var(--fs-scale)); font-weight: 800; color: var(--ink-3); }
598
651
  .chips { display: flex; flex-wrap: wrap; gap: 6px; }
599
652
  .agent-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 8px; margin: 2px 0 14px; }
600
653
  .agent-tile { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 12px 6px 10px; border: 2px solid transparent; border-radius: var(--r-md); background: var(--soft); cursor: pointer; text-align: center; transition: transform var(--t-fast) var(--ease-out), border-color var(--t-fast), background var(--t-fast); min-width: 0; }
601
- .agent-tile .at-logo { width: 40px; height: 40px; border-radius: 13px; background: var(--tile-logo-bg); display: grid; place-content: center; overflow: hidden; box-shadow: var(--shadow-tile); }
602
- .agent-tile .at-logo img { width: 22px; height: 22px; object-fit: contain; display: block; }
603
654
  .agent-tile .at-name { font-size: calc(12px * var(--fs-scale)); font-weight: 800; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
604
655
  .agent-tile .at-sub { font-size: calc(10px * var(--fs-scale)); font-weight: 700; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
605
656
  .agent-tile:hover:not(.off) { transform: translateY(-2px); background: var(--lav); }
@@ -607,23 +658,9 @@ p .geek-tip, .hint > .geek-tip, .switch .label > .geek-tip { margin-left: 8px; }
607
658
  .agent-tile.off { opacity: 0.5; filter: grayscale(1); cursor: default; }
608
659
  .count-pill { background: var(--primary); color: var(--tile-count-ink); border-radius: var(--r-pill); font-size: calc(10px * var(--fs-scale)); padding: 1px 7px; font-weight: 800; line-height: calc(15px * var(--fs-scale)); }
609
660
  .zzz { font-size: calc(10px * var(--fs-scale)); font-weight: 800; color: var(--muted); background: var(--softer); padding: 3px 8px; border-radius: var(--r-pill); }
610
- .live-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--st-thinking-dot); box-shadow: 0 0 0 3px var(--st-thinking); animation: pulse 1.2s ease-in-out infinite; display: inline-block; }
611
- .avatar { position: relative; display: inline-block; flex: none; }
612
- .avatar .av-tile { display: grid; place-items: center; width: 100%; height: 100%; font-weight: 800; line-height: 1; font-family: var(--font); user-select: none; }
613
- .avatar-badge { position: absolute; right: -4px; bottom: -4px; width: 44%; height: 44%; min-width: 15px; min-height: 15px; border-radius: 6px; background: var(--tile-badge-bg); border: 2px solid var(--tile-badge-border); box-shadow: var(--shadow-tile); display: flex; align-items: center; justify-content: center; font-size: 9px; font-weight: 800; color: var(--primary); overflow: hidden; }
614
- .avatar-badge img { width: 72%; height: 72%; object-fit: contain; }
615
- .avatar-badge.muted { color: var(--warm-ink); background: var(--warm); border-color: var(--tile-badge-border); }
616
- .avatar-badge.muted .i { width: 78%; height: 78%; }
617
- .avatar-status { position: absolute; left: -3px; bottom: -3px; width: 12px; height: 12px; border-radius: 50%; border: 2px solid var(--tile-ring); background: var(--faint); }
618
- .avatar-status.status-idle { background: var(--st-ready-dot); }
619
- .avatar-status.status-thinking { background: var(--st-thinking-dot); animation: pulse 1.2s ease-in-out infinite; }
620
- .avatar-status.status-writing { background: var(--st-writing-dot); animation: pulse 1.2s ease-in-out infinite; }
621
- .avatar-status.status-offline { background: var(--st-asleep-dot); }
622
- .avatar-status.status-error { background: var(--st-error-dot); }
623
- .avatar-status.status-starting { background: var(--st-waiting-dot); }
624
- .avatar-status.status-queued { background: var(--st-waiting-dot); }
661
+ .live-dot { width: 8px; height: 8px; border-radius: calc(50% * var(--r-scale)); background: var(--st-thinking-dot); box-shadow: 0 0 0 3px var(--st-thinking); animation: pulse 1.2s ease-in-out infinite; display: inline-block; }
625
662
  .avatar-picker { display: grid; grid-template-columns: repeat(auto-fill, minmax(38px, 1fr)); gap: 6px; margin: 4px 0 8px; max-height: 148px; overflow-y: auto; padding: 2px 4px 2px 2px; scroll-padding: 4px; }
626
- .avatar-picker button { aspect-ratio: 1; width: 100%; border-radius: 12px; border: 2px solid transparent; background: var(--soft); font-size: 20px; padding: 0; display: inline-flex; align-items: center; justify-content: center; transition: transform var(--t-fast) var(--ease-pop), border-color var(--t-fast), background var(--t-fast); }
663
+ .avatar-picker button { aspect-ratio: 1; width: 100%; border-radius: calc(12px * var(--r-scale)); border: 2px solid transparent; background: var(--soft); font-size: 20px; padding: 0; display: inline-flex; align-items: center; justify-content: center; transition: transform var(--t-fast) var(--ease-pop), border-color var(--t-fast), background var(--t-fast); }
627
664
  .avatar-picker button:hover { transform: translateY(-1px); background: var(--lav); }
628
665
  .avatar-picker button.selected { border-color: var(--primary); background: var(--lav); }
629
666
  .avatar-picker button.none { font-size: 12px; font-weight: 800; color: var(--muted); }
@@ -634,17 +671,10 @@ p .geek-tip, .hint > .geek-tip, .switch .label > .geek-tip { margin-left: 8px; }
634
671
  .emoji-none { grid-column: 1 / -1; color: var(--muted); font-size: calc(12px * var(--fs-scale)); font-weight: 700; padding: 8px 4px; }
635
672
  .avatar-stack { display: flex; }
636
673
  .avatar-stack .avatar { margin-left: -8px; }
637
- .avatar-stack .avatar .av-tile { box-shadow: 0 0 0 2px var(--tile-ring); }
638
674
  .avatar-stack .avatar:first-child { margin-left: 0; }
639
- .room-mark { width: 44px; height: 44px; border-radius: 14px; display: grid; place-content: center; color: var(--tile-mark-ink); background: linear-gradient(var(--room-mark-grad-angle), hsl(var(--room-hue) var(--room-mark-grad-from)), hsl(var(--room-hue-2) var(--room-mark-grad-to))); font-weight: 800; font-size: 18px; flex: none; text-transform: uppercase; }
640
- .room-mark.lg { width: 52px; height: 52px; border-radius: 16px; font-size: 22px; }
641
- .room-mark.emoji { background: hsl(var(--room-hue) var(--room-mark-emoji)); font-size: 24px; text-transform: none; }
642
- .room-mark.lg.emoji { font-size: 28px; }
643
675
  .vendor-card { display: flex; flex-direction: column; gap: 8px; background: var(--card); border-radius: var(--r-md); padding: 12px 14px; margin-bottom: 8px; }
644
676
  .vendor-card .vc-head, .vendor-row { display: flex; align-items: center; gap: 10px; }
645
677
  .vendor-row { padding: 6px 0; }
646
- .vc-logo { width: 36px; height: 36px; border-radius: 12px; background: var(--card); box-shadow: var(--shadow-tile); display: grid; place-content: center; font-weight: 800; color: var(--primary); overflow: hidden; flex: none; }
647
- .vc-logo img { width: 22px; height: 22px; object-fit: contain; }
648
678
  .vc-name { font-weight: 800; flex: 1; min-width: 0; }
649
679
  .vc-name .hint { display: block; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
650
680
  .vendor-card .vc-fields { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
@@ -661,20 +691,20 @@ p .geek-tip, .hint > .geek-tip, .switch .label > .geek-tip { margin-left: 8px; }
661
691
  .open-link { color: var(--link-ink); font-weight: 800; text-decoration: underline; text-decoration-color: var(--link-underline); text-underline-offset: 2px; cursor: pointer; overflow-wrap: anywhere; }
662
692
  .open-link:hover { text-decoration-color: var(--primary); }
663
693
  code .open-link { color: inherit; }
664
- .mermaid-block, .csv-block { margin: 8px 0; background: var(--card); border-radius: 14px; padding: 10px 12px 4px; max-width: 100%; overflow-x: auto; box-shadow: var(--edge); }
694
+ .mermaid-block, .csv-block { margin: 8px 0; background: var(--card); border-radius: calc(14px * var(--r-scale)); padding: 10px 12px 4px; max-width: 100%; overflow-x: auto; box-shadow: var(--edge); }
665
695
  .mermaid-block .mm-out svg { max-width: 100%; height: auto; display: block; margin: 0 auto; }
666
696
  .mermaid-block .mm-out pre { margin: 0; }
667
697
  .mermaid-block .mm-bar, .csv-block .mm-bar { display: flex; justify-content: flex-end; align-items: center; gap: 8px; margin-top: 2px; }
668
- .mermaid-block .mm-src, .csv-block .mm-src { border: 0; background: transparent; color: var(--faint); font-size: calc(11px * var(--fs-scale)); font-weight: 800; cursor: pointer; padding: 2px 6px; border-radius: 6px; }
698
+ .mermaid-block .mm-src, .csv-block .mm-src { border: 0; background: transparent; color: var(--faint); font-size: calc(11px * var(--fs-scale)); font-weight: 800; cursor: pointer; padding: 2px 6px; border-radius: calc(6px * var(--r-scale)); }
669
699
  .mermaid-block .mm-src:hover, .csv-block .mm-src:hover { background: var(--soft); color: var(--primary); }
670
700
  .mermaid-block .mm-code, .csv-block .mm-code { margin: 6px 0 0; }
671
701
  .csv-block .csv-wrap { box-shadow: none; max-height: 320px; }
672
702
  .csv-block .csv-count { margin: 4px 2px 0; }
673
703
  .mermaid-block.preview { margin-top: 4px; }
674
704
  .mermaid-block.preview .mm-bar { display: none; }
675
- .diagram-presets .swatch { width: 14px; height: 14px; border-radius: 5px; border: 2px solid; display: inline-block; }
676
- .menu, .mention-menu { position: absolute; background: var(--card); border: 0; border-radius: 14px; box-shadow: var(--shadow-pop); padding: 6px; z-index: 30; min-width: 240px; max-height: 280px; overflow-y: auto; animation: rise var(--t-base) var(--ease-out); transform-origin: bottom left; }
677
- .menu button, .mention-menu button { display: flex; align-items: center; gap: 10px; width: 100%; border: 0; background: none; padding: 8px 10px; border-radius: 10px; text-align: left; font-size: calc(13px * var(--fs-scale)); font-weight: 800; color: var(--ink); }
705
+ .diagram-presets .swatch { width: 14px; height: 14px; border-radius: calc(5px * var(--r-scale)); border: 2px solid; display: inline-block; }
706
+ .menu, .mention-menu { position: absolute; background: var(--card); border: 0; border-radius: calc(14px * var(--r-scale)); box-shadow: var(--shadow-pop); padding: 6px; z-index: 30; min-width: 240px; max-height: 280px; overflow-y: auto; animation: rise var(--t-base) var(--ease-out); transform-origin: bottom left; }
707
+ .menu button, .mention-menu button { display: flex; align-items: center; gap: 10px; width: 100%; border: 0; background: none; padding: 8px 10px; border-radius: calc(10px * var(--r-scale)); text-align: left; font-size: calc(13px * var(--fs-scale)); font-weight: 800; color: var(--ink); }
678
708
  .menu button.active, .menu button:hover, .mention-menu button.active, .mention-menu button:hover { background: var(--lav); }
679
709
  .menu .mm-sub, .mention-menu .mm-sub { color: var(--muted); font-size: calc(11px * var(--fs-scale)); font-weight: 600; line-height: 1.3; }
680
710
  .menu .mm-skill, .mention-menu .mm-skill { font-weight: 800; color: var(--primary); min-width: 84px; }
@@ -683,7 +713,7 @@ code .open-link { color: inherit; }
683
713
  .emoji-menu { min-width: 0; width: 352px; padding: 8px; }
684
714
  .emoji-menu .avatar-picker { margin: 0; grid-template-columns: repeat(8, 1fr); }
685
715
  #rp-emoji-picker .avatar-picker { max-height: 236px; }
686
- .dialog { border: 0; border-radius: 22px; padding: 24px 26px; width: 580px; max-width: 94vw; max-height: 90vh; box-shadow: var(--shadow-dialog); overflow: auto; overflow-x: hidden; background: var(--card); color: var(--ink); }
716
+ .dialog { border: 0; border-radius: calc(22px * var(--r-scale)); padding: 24px 26px; width: 580px; max-width: 94vw; max-height: 90vh; box-shadow: var(--shadow-dialog); overflow: auto; overflow-x: hidden; background: var(--card); color: var(--ink); }
687
717
  .dialog::backdrop { background: var(--dialog-backdrop); backdrop-filter: blur(4px); }
688
718
  .dialog[open] { animation: pop var(--t-slow) var(--ease-pop); }
689
719
  .dialog[open]::backdrop { animation: fade-in var(--t-base) var(--ease-out); }
@@ -714,7 +744,7 @@ code .open-link { color: inherit; }
714
744
  .dialog.wide { width: 720px; }
715
745
  .dialog.narrow { width: 440px; }
716
746
  .toasts { position: fixed; right: 18px; bottom: 20px; display: flex; flex-direction: column; gap: 8px; max-width: 400px; z-index: 50; pointer-events: none; }
717
- .toast { pointer-events: auto; background: var(--toast-bg); color: var(--toast-ink); padding: 10px 14px; border-radius: 12px; font-size: var(--fs-sm); font-weight: 700; box-shadow: var(--shadow-pop); cursor: pointer; animation: slide-in-right var(--t-slow) var(--ease-pop); line-height: 1.4; display: flex; gap: 8px; align-items: flex-start; }
747
+ .toast { pointer-events: auto; background: var(--toast-bg); color: var(--toast-ink); padding: 10px 14px; border-radius: calc(12px * var(--r-scale)); font-size: var(--fs-sm); font-weight: 700; box-shadow: var(--shadow-pop); cursor: pointer; animation: slide-in-right var(--t-slow) var(--ease-pop); line-height: 1.4; display: flex; gap: 8px; align-items: flex-start; }
718
748
  .toast .i { width: 15px; height: 15px; margin-top: 1px; opacity: 0.85; }
719
749
  .toast.warn { background: var(--warm-ink); }
720
750
  .toast.error { background: var(--rose-ink); }