viberoom 0.6.1 → 0.8.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 (115) hide show
  1. package/NOTICE +14 -0
  2. package/README.md +11 -0
  3. package/dist/hub.js +101 -14
  4. package/dist/look-lint.js +180 -0
  5. package/dist/looks.js +151 -0
  6. package/dist/mcp-skills-server.js +87 -0
  7. package/dist/persona.js +2 -0
  8. package/dist/room.js +134 -4
  9. package/dist/server.js +70 -0
  10. package/dist/skills.js +23 -2
  11. package/package.json +1 -1
  12. package/ui/app.css +142 -114
  13. package/ui/app.js +423 -102
  14. package/ui/avatars.js +7 -14
  15. package/ui/components.css +156 -80
  16. package/ui/components.js +207 -1
  17. package/ui/fonts/anonymous-pro-cyrillic-400.woff2 +0 -0
  18. package/ui/fonts/anonymous-pro-cyrillic-700.woff2 +0 -0
  19. package/ui/fonts/anonymous-pro-latin-400.woff2 +0 -0
  20. package/ui/fonts/anonymous-pro-latin-700.woff2 +0 -0
  21. package/ui/fonts/anonymous-pro-latin-ext-400.woff2 +0 -0
  22. package/ui/fonts/anonymous-pro-latin-ext-700.woff2 +0 -0
  23. package/ui/fonts/anonymous-pro.css +7 -0
  24. package/ui/fonts/cascadia-code-cyrillic-ext.woff2 +0 -0
  25. package/ui/fonts/cascadia-code-cyrillic.woff2 +0 -0
  26. package/ui/fonts/cascadia-code-latin-ext.woff2 +0 -0
  27. package/ui/fonts/cascadia-code-latin.woff2 +0 -0
  28. package/ui/fonts/cascadia-code.css +5 -0
  29. package/ui/fonts/comfortaa-cyrillic-ext.woff2 +0 -0
  30. package/ui/fonts/comfortaa-cyrillic.woff2 +0 -0
  31. package/ui/fonts/comfortaa-latin-ext.woff2 +0 -0
  32. package/ui/fonts/comfortaa-latin.woff2 +0 -0
  33. package/ui/fonts/comfortaa.css +5 -0
  34. package/ui/fonts/exo-2-cyrillic-ext.woff2 +0 -0
  35. package/ui/fonts/exo-2-cyrillic.woff2 +0 -0
  36. package/ui/fonts/exo-2-latin-ext.woff2 +0 -0
  37. package/ui/fonts/exo-2-latin.woff2 +0 -0
  38. package/ui/fonts/exo-2.css +5 -0
  39. package/ui/fonts/golos-text-cyrillic-ext.woff2 +0 -0
  40. package/ui/fonts/golos-text-cyrillic.woff2 +0 -0
  41. package/ui/fonts/golos-text-latin-ext.woff2 +0 -0
  42. package/ui/fonts/golos-text-latin.woff2 +0 -0
  43. package/ui/fonts/golos-text.css +5 -0
  44. package/ui/fonts/ibm-plex-mono-cyrillic-400.woff2 +0 -0
  45. package/ui/fonts/ibm-plex-mono-cyrillic-600.woff2 +0 -0
  46. package/ui/fonts/ibm-plex-mono-cyrillic-700.woff2 +0 -0
  47. package/ui/fonts/ibm-plex-mono-cyrillic-ext-400.woff2 +0 -0
  48. package/ui/fonts/ibm-plex-mono-cyrillic-ext-600.woff2 +0 -0
  49. package/ui/fonts/ibm-plex-mono-cyrillic-ext-700.woff2 +0 -0
  50. package/ui/fonts/ibm-plex-mono-latin-400.woff2 +0 -0
  51. package/ui/fonts/ibm-plex-mono-latin-600.woff2 +0 -0
  52. package/ui/fonts/ibm-plex-mono-latin-700.woff2 +0 -0
  53. package/ui/fonts/ibm-plex-mono-latin-ext-400.woff2 +0 -0
  54. package/ui/fonts/ibm-plex-mono-latin-ext-600.woff2 +0 -0
  55. package/ui/fonts/ibm-plex-mono-latin-ext-700.woff2 +0 -0
  56. package/ui/fonts/ibm-plex-mono.css +13 -0
  57. package/ui/fonts/ibm-plex-sans-cyrillic-400.woff2 +0 -0
  58. package/ui/fonts/ibm-plex-sans-cyrillic-600.woff2 +0 -0
  59. package/ui/fonts/ibm-plex-sans-cyrillic-700.woff2 +0 -0
  60. package/ui/fonts/ibm-plex-sans-cyrillic-ext-400.woff2 +0 -0
  61. package/ui/fonts/ibm-plex-sans-cyrillic-ext-600.woff2 +0 -0
  62. package/ui/fonts/ibm-plex-sans-cyrillic-ext-700.woff2 +0 -0
  63. package/ui/fonts/ibm-plex-sans-latin-400.woff2 +0 -0
  64. package/ui/fonts/ibm-plex-sans-latin-600.woff2 +0 -0
  65. package/ui/fonts/ibm-plex-sans-latin-700.woff2 +0 -0
  66. package/ui/fonts/ibm-plex-sans-latin-ext-400.woff2 +0 -0
  67. package/ui/fonts/ibm-plex-sans-latin-ext-600.woff2 +0 -0
  68. package/ui/fonts/ibm-plex-sans-latin-ext-700.woff2 +0 -0
  69. package/ui/fonts/ibm-plex-sans.css +13 -0
  70. package/ui/fonts/manrope-cyrillic-ext.woff2 +0 -0
  71. package/ui/fonts/manrope-cyrillic.woff2 +0 -0
  72. package/ui/fonts/manrope-latin-ext.woff2 +0 -0
  73. package/ui/fonts/manrope-latin.woff2 +0 -0
  74. package/ui/fonts/manrope.css +5 -0
  75. package/ui/fonts/montserrat-cyrillic-ext.woff2 +0 -0
  76. package/ui/fonts/montserrat-cyrillic.woff2 +0 -0
  77. package/ui/fonts/montserrat-latin-ext.woff2 +0 -0
  78. package/ui/fonts/montserrat-latin.woff2 +0 -0
  79. package/ui/fonts/montserrat.css +5 -0
  80. package/ui/fonts/open-sans-cyrillic-ext.woff2 +0 -0
  81. package/ui/fonts/open-sans-cyrillic.woff2 +0 -0
  82. package/ui/fonts/open-sans-latin-ext.woff2 +0 -0
  83. package/ui/fonts/open-sans-latin.woff2 +0 -0
  84. package/ui/fonts/open-sans.css +5 -0
  85. package/ui/fonts/pt-mono-cyrillic-ext.woff2 +0 -0
  86. package/ui/fonts/pt-mono-cyrillic.woff2 +0 -0
  87. package/ui/fonts/pt-mono-latin-ext.woff2 +0 -0
  88. package/ui/fonts/pt-mono-latin.woff2 +0 -0
  89. package/ui/fonts/pt-mono.css +5 -0
  90. package/ui/fonts/rubik-cyrillic-ext.woff2 +0 -0
  91. package/ui/fonts/rubik-cyrillic.woff2 +0 -0
  92. package/ui/fonts/rubik-latin-ext.woff2 +0 -0
  93. package/ui/fonts/rubik-latin.woff2 +0 -0
  94. package/ui/fonts/rubik.css +5 -0
  95. package/ui/fonts/source-sans-3-cyrillic-ext.woff2 +0 -0
  96. package/ui/fonts/source-sans-3-cyrillic.woff2 +0 -0
  97. package/ui/fonts/source-sans-3-latin-ext.woff2 +0 -0
  98. package/ui/fonts/source-sans-3-latin.woff2 +0 -0
  99. package/ui/fonts/source-sans-3.css +5 -0
  100. package/ui/fonts/ubuntu-sans-cyrillic-ext.woff2 +0 -0
  101. package/ui/fonts/ubuntu-sans-cyrillic.woff2 +0 -0
  102. package/ui/fonts/ubuntu-sans-latin-ext.woff2 +0 -0
  103. package/ui/fonts/ubuntu-sans-latin.woff2 +0 -0
  104. package/ui/fonts/ubuntu-sans.css +5 -0
  105. package/ui/fonts/victor-mono-cyrillic-ext.woff2 +0 -0
  106. package/ui/fonts/victor-mono-cyrillic.woff2 +0 -0
  107. package/ui/fonts/victor-mono-latin-ext.woff2 +0 -0
  108. package/ui/fonts/victor-mono-latin.woff2 +0 -0
  109. package/ui/fonts/victor-mono.css +5 -0
  110. package/ui/index.html +16 -6
  111. package/ui/looks.css +2831 -0
  112. package/ui/manifest.json +3 -3
  113. package/ui/theme.css +203 -96
  114. package/ui/tokens.js +800 -45
  115. 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,9 @@
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;
166
+ --bevel-pressed: none;
151
167
  --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
168
  --canvas-pattern: radial-gradient(circle at 1px 1px, rgba(91, 91, 240, 0.13) 0.9px, transparent 1.6px);
153
169
  --canvas-pattern-size: 22px 22px;
@@ -155,14 +171,17 @@
155
171
  --sb-w: 8px;
156
172
  --sb-thumb: rgba(91, 91, 240, 0.22);
157
173
  --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;
174
+ --r-scale: 1;
175
+ --r-ctl-min: 0px;
176
+ --r-xs: calc(8px * var(--r-scale));
177
+ --r-sm: calc(12px * var(--r-scale));
178
+ --r-md: calc(14px * var(--r-scale));
179
+ --r-lg: calc(18px * var(--r-scale));
180
+ --r-xl: calc(18px * var(--r-scale));
181
+ --r-pill: calc(99px * var(--r-scale));
164
182
  --font: "Nunito", "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
165
183
  --mono: "JetBrains Mono", ui-monospace, Consolas, "Courier New", monospace;
184
+ --line-height: 1.45;
166
185
  --fs-scale: 1;
167
186
  --fs-xs: calc(11px * var(--fs-scale));
168
187
  --fs-sm: calc(12px * var(--fs-scale));
@@ -187,9 +206,10 @@
187
206
  --btn-hover-ink: #5b5bf0;
188
207
  --btn-on-primary: #ffffff;
189
208
  --btn-secondary-bg: #ffffff;
209
+ --btn-secondary-hover-bg: #ffffff;
190
210
  --btn-soft-bg: #eef0fb;
191
211
  --btn-soft-hover-bg: #e4e6fb;
192
- --btn-ghost-ink: #8f8fb0;
212
+ --btn-ghost-ink: #8080a3;
193
213
  --btn-ghost-hover-bg: #f6f6fb;
194
214
  --btn-danger-bg: #fff0ee;
195
215
  --btn-danger-ink: #e0554a;
@@ -202,10 +222,10 @@
202
222
  --btn-spinner-track-quiet: #e4e6fb;
203
223
  --btn-spinner-head-quiet: #5b5bf0;
204
224
  --btn-disabled-opacity: 0.45;
205
- --btn-dark-bg: rgba(255, 255, 255, 0.12);
206
- --btn-dark-ink: #ffffff;
225
+ --btn-dark-bg: rgba(244, 242, 255, 0.12);
226
+ --btn-dark-ink: #f4f2ff;
207
227
  --btn-dark-hover-bg: #5b5bf0;
208
- --btn-warn-ink: #b8860b;
228
+ --btn-warn-ink: #a07408;
209
229
  --btn-warn-hover-bg: #fff3cc;
210
230
  --btn-inverse-bg: rgba(255, 255, 255, 0.92);
211
231
  --btn-inverse-ink: #c9461c;
@@ -217,6 +237,23 @@
217
237
  --btn-paper-bg: #ffffff;
218
238
  --btn-paper-ink: #5c5c80;
219
239
  --btn-paper-hover-bg: #f6f6fb;
240
+ --btn-border: 0;
241
+ --btn-case: none;
242
+ --btn-tracking: 0px;
243
+ --btn-link-underline: none;
244
+ --btn-ghost-bg: transparent;
245
+ --btn-shadow: none;
246
+ --btn-hover-shadow: none;
247
+ --btn-hover-lift: 0px;
248
+ --btn-active-shadow: none;
249
+ --btn-primary-active-shadow: var(--shadow-primary);
250
+ --btn-primary-hover-filter: brightness(1.05);
251
+ --btn-secondary-hover-shadow: var(--shadow-tile);
252
+ --btn-secondary-active-shadow: var(--shadow-tile);
253
+ --btn-danger-solid-hover-shadow: 0 8px 18px -8px rgba(224, 85, 74, 0.8);
254
+ --btn-danger-solid-active-shadow: 0 8px 18px -8px rgba(224, 85, 74, 0.8);
255
+ --btn-ok-shadow: none;
256
+ --btn-warn-shadow: none;
220
257
  --btn-h: 42px;
221
258
  --btn-h-sm: 34px;
222
259
  --btn-h-xs: 24px;
@@ -226,7 +263,7 @@
226
263
  --btn-fs-sm: calc(12px * var(--fs-scale));
227
264
  --btn-fs-lg: calc(15px * var(--fs-scale));
228
265
  --btn-fs-cta: calc(14px * var(--fs-scale));
229
- --icon-button-ink: #8f8fb0;
266
+ --icon-button-ink: #8080a3;
230
267
  --icon-button-hover-bg: #f6f6fb;
231
268
  --icon-button-hover-ink: #5b5bf0;
232
269
  --icon-button-disabled-opacity: 0.4;
@@ -243,81 +280,121 @@
243
280
  --icon-button-inline-ink: #5c5c80;
244
281
  --icon-button-inline-on-bg: rgba(91, 91, 240, 0.1);
245
282
  --icon-button-inline-on-ink: #5b5bf0;
283
+ --icon-button-ghost-bg: transparent;
284
+ --icon-button-shadow: none;
285
+ --icon-button-hover-shadow: none;
286
+ --icon-button-hover-lift: 0px;
287
+ --icon-button-active-shadow: none;
288
+ --icon-button-primary-shadow: var(--shadow-primary);
289
+ --icon-button-primary-hover-shadow: var(--shadow-primary);
290
+ --icon-button-primary-active-shadow: var(--shadow-primary);
246
291
  --badge-bg: #eef0fb;
247
292
  --badge-ink: #5b5bf0;
248
293
  --badge-attention-bg: #fff3cc;
249
- --badge-attention-ink: #b8860b;
294
+ --badge-attention-ink: #a07408;
250
295
  --badge-muted-bg: #f1f1f8;
251
- --badge-muted-ink: #8f8fb0;
296
+ --badge-muted-ink: #8080a3;
252
297
  --badge-outline-border: #e4e6fb;
253
- --badge-outline-ink: #8f8fb0;
298
+ --badge-outline-w: 2px;
299
+ --badge-outline-ink: #8080a3;
254
300
  --badge-fs-xs: calc(10px * var(--fs-scale));
301
+ --badge-fill: 100%;
302
+ --badge-border: 0;
303
+ --badge-case: none;
304
+ --badge-tracking: 0px;
305
+ --badge-shadow: none;
255
306
  --chip-bg: #eef0fb;
256
307
  --chip-ink: #5b5bf0;
257
308
  --chip-hover-bg: #e4e6fb;
309
+ --chip-fill: 100%;
310
+ --chip-border: 0;
311
+ --chip-shadow: none;
312
+ --chip-hover-shadow: none;
313
+ --chip-hover-lift: 0px;
314
+ --chip-active-shadow: none;
315
+ --chip-active-drop: 0px;
258
316
  --file-card-bg: #26244a;
259
317
  --file-card-ink: #f4f2ff;
260
- --file-card-head-bg: rgba(255, 255, 255, 0.06);
318
+ --file-card-head-bg: rgba(244, 242, 255, 0.06);
261
319
  --file-card-head-ink: #e8e6ff;
262
320
  --file-card-head-meta: #a9a5d8;
263
321
  --file-card-note-ink: #e0554a;
264
- --file-card-image-body-bg: rgba(255, 255, 255, 0.04);
322
+ --file-card-image-body-bg: rgba(244, 242, 255, 0.04);
265
323
  --file-card-image-bg: #ffffff;
324
+ --file-card-shadow: var(--edge);
266
325
  --tool-call-ready-bg: #d9f7e8;
267
326
  --tool-call-ready-ink: #1d8f6a;
268
327
  --tool-call-error-bg: #fff0ee;
269
328
  --tool-call-error-ink: #e0554a;
270
329
  --tool-call-thinking-bg: #fff3cc;
271
- --tool-call-thinking-ink: #b8860b;
330
+ --tool-call-thinking-ink: #a07408;
272
331
  --tool-call-pending-bg: #eef0fb;
273
332
  --tool-call-pending-ink: #5b5bf0;
274
333
  --tool-call-body-bg: #ffffff;
275
334
  --tool-call-pre-bg: #f6f6fb;
276
335
  --tool-call-pre-ink: #1c1b33;
277
- --tool-call-quiet-ink: #8f8fb0;
336
+ --tool-call-quiet-ink: #8080a3;
278
337
  --tool-call-fs: calc(12px * var(--fs-scale));
279
338
  --tool-call-pre-fs: calc(11.5px * var(--fs-scale));
280
339
  --tool-call-label-fs: calc(10.5px * var(--fs-scale));
281
- --tool-fold-ink: #8f8fb0;
340
+ --tool-fold-ink: #8080a3;
282
341
  --tool-fold-bg: #f6f6fb;
283
342
  --tool-fold-hover-bg: #eef0fb;
284
343
  --tool-fold-hover-ink: #5b5bf0;
285
344
  --tool-fold-failed-ink: #e0554a;
286
345
  --tool-fold-fs: calc(11px * var(--fs-scale));
346
+ --tool-fold-shadow: none;
287
347
  --ask-card-bg: #fff3cc;
288
348
  --ask-card-ink: #1c1b33;
289
- --ask-card-quiet-ink: #8f8fb0;
349
+ --ask-card-quiet-ink: #8080a3;
290
350
  --ask-card-resolved-opacity: 0.7;
291
351
  --ask-card-fs: calc(13px * var(--fs-scale));
292
352
  --ask-card-kind-fs: calc(11px * var(--fs-scale));
293
353
  --ask-card-input-fs: calc(11px * var(--fs-scale));
294
354
  --ask-card-outcome-fs: calc(12px * var(--fs-scale));
295
- --reply-note-ink: #8f8fb0;
355
+ --ask-card-shadow: none;
356
+ --reply-note-ink: #8080a3;
296
357
  --reply-note-bg: #f6f6fb;
297
- --reply-note-attention-ink: #b8860b;
358
+ --reply-note-attention-ink: #a07408;
298
359
  --reply-note-attention-bg: #fff3cc;
299
360
  --reply-note-fs: calc(12px * var(--fs-scale));
361
+ --look-card-w: 150px;
362
+ --look-card-paper-h: 84px;
363
+ --look-card-bg: #ffffff;
364
+ --look-card-ink: #1c1b33;
365
+ --look-card-border: #e4e6fb;
366
+ --look-card-hover-border: #a9a9f5;
367
+ --look-card-on-border: #5b5bf0;
368
+ --look-card-shadow: none;
300
369
  --choice-bg: #f6f6fb;
301
370
  --choice-ink: #5c5c80;
302
371
  --choice-hover-bg: #eef0fb;
303
372
  --choice-on-ink: #5b5bf0;
304
373
  --choice-on-border: #5b5bf0;
305
- --choice-quiet-ink: #8f8fb0;
374
+ --choice-quiet-ink: #8080a3;
306
375
  --choice-h: 32px;
376
+ --choice-border: transparent;
377
+ --choice-shadow: none;
378
+ --choice-hover-shadow: none;
379
+ --choice-hover-lift: 0px;
380
+ --choice-active-shadow: none;
381
+ --choice-active-drop: 0px;
382
+ --choice-on-shadow: none;
307
383
  --control-knob: #ffffff;
308
384
  --control-knob-shadow: 0 1px 3px rgba(28, 27, 51, 0.25);
309
385
  --control-box-bg: #ffffff;
310
386
  --control-tick: #ffffff;
311
- --tile-logo-bg: #ffffff;
312
387
  --tile-badge-bg: #ffffff;
313
- --tile-badge-border: #ffffff;
314
- --tile-ring: #ffffff;
315
- --tile-mark-ink: #ffffff;
316
388
  --tile-count-ink: #ffffff;
389
+ --room-mark-ink: #ffffff;
317
390
  --room-mark-grad-angle: 135deg;
318
391
  --room-mark-grad-from: 72% 66%;
319
392
  --room-mark-grad-to: 68% 52%;
320
393
  --room-mark-emoji: 70% 93%;
394
+ --room-mark-shadow: none;
395
+ --room-mark-radius: calc(14px * var(--r-scale));
396
+ --room-mark-radius-lg: calc(16px * var(--r-scale));
397
+ --room-mark-radius-rail: calc(13px * var(--r-scale));
321
398
  --pop-bg: #ffffff;
322
399
  --pop-shadow: 0 10px 28px -12px rgba(28, 27, 51, 0.45);
323
400
  --pop-arrow-shadow: 3px 3px 4px -3px rgba(28, 27, 51, 0.25);
@@ -329,7 +406,7 @@
329
406
  --scrim-shadow: 0 24px 60px -20px rgba(0, 0, 0, 0.6);
330
407
  --scrim-image-bg: #ffffff;
331
408
  --toast-bg: #1c1b33;
332
- --toast-ink: #f4f2ff;
409
+ --toast-ink: #ffffff;
333
410
  --rail-logo-shadow: 0 8px 18px -6px rgba(91, 91, 240, 0.6);
334
411
  --rail-active-bg: #ffffff;
335
412
  --timeline-view-bg: rgba(91, 91, 240, 0.07);
@@ -340,6 +417,7 @@
340
417
  --timeline-flash-out: rgba(91, 91, 240, 0);
341
418
  --bubble-bg: #ffffff;
342
419
  --bubble-ink: #2c2b4a;
420
+ --bubble-border: transparent;
343
421
  --bubble-shadow: 0 2px 0 rgba(28, 27, 51, 0.06), 0 1px 3px rgba(28, 27, 51, 0.04);
344
422
  --bubble-mine-bg: linear-gradient(135deg, #6a6af7, #4f4fe0);
345
423
  --bubble-mine-ink: #ffffff;
@@ -381,19 +459,19 @@
381
459
  --code-gutter-ink: #7c78ad;
382
460
  --code-line-mark-ink: #ffcf8f;
383
461
  --code-line-mark-bg: rgba(255, 207, 143, 0.16);
384
- --code-head-bg: rgba(255, 255, 255, 0.06);
462
+ --code-head-bg: rgba(244, 242, 255, 0.06);
385
463
  --code-head-ink: #e8e6ff;
386
464
  --code-head-meta: #a9a5d8;
387
- --code-head-btn-bg: rgba(255, 255, 255, 0.12);
388
- --code-head-btn-ink: #ffffff;
389
- --code-body-bg: rgba(255, 255, 255, 0.04);
465
+ --code-head-btn-bg: rgba(244, 242, 255, 0.12);
466
+ --code-head-btn-ink: #f4f2ff;
467
+ --code-body-bg: rgba(244, 242, 255, 0.04);
390
468
  --code-sb-track: rgba(0, 0, 0, 0.25);
391
- --code-sb-thumb: rgba(255, 255, 255, 0.3);
392
- --code-sb-thumb-hover: rgba(255, 255, 255, 0.5);
393
- --code-sb-firefox: rgba(255, 255, 255, 0.35);
469
+ --code-sb-thumb: rgba(244, 242, 255, 0.3);
470
+ --code-sb-thumb-hover: rgba(244, 242, 255, 0.5);
471
+ --code-sb-firefox: rgba(244, 242, 255, 0.35);
394
472
  --code-find-hit-bg: #ffcf8f;
395
473
  --code-find-hit-ink: #26244a;
396
- --syntax-comment: #8f8fb0;
474
+ --syntax-comment: #7c78ad;
397
475
  --syntax-punctuation: #c9c6ea;
398
476
  --syntax-keyword: #b9a7ff;
399
477
  --syntax-string: #8fe3bd;
@@ -407,30 +485,77 @@
407
485
  --diagram-node-ink: #1c1b33;
408
486
  --input-bg: #ffffff;
409
487
  --input-focus-border: #5b5bf0;
488
+ --input-shadow: none;
410
489
  --profile-bg: linear-gradient(160deg, #eef0fb, #e4f7ee);
411
- --profile-avatar-bg: #ffffff;
412
490
  --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;
491
+ --face-paper: #ffffff;
492
+ --face-tint: 16%;
493
+ --face-corner: 0.32;
494
+ --face-ring: #ffffff;
495
+ --face-me-ring: #5b5bf0;
496
+ --face-dot-bg: #b3b3cc;
497
+ --face-card-bg: #ffffff;
498
+ --face-fallback: #9ca3af;
499
+ --face-human-ink: #1f1d3a;
500
+ --face-avatar-default: #5b5bf0;
501
+ --face-avatar-gloss: #ffffff;
502
+ --face-avatar-label-ink: #ffffff;
503
+ --face-shadow: 0 0 0 0 transparent;
504
+ --face-card-shadow: var(--shadow-pop);
505
+ --logo-tile-bg: #ffffff;
506
+ --logo-tile-ink: #1f1d3a;
507
+ --logo-tile-badge-bg: #ffffff;
508
+ --logo-tile-badge-border: #ffffff;
509
+ --logo-tile-badge-ink: #1f1d3a;
510
+ --logo-tile-muted-bg: #fff3cc;
511
+ --logo-tile-muted-ink: #a07408;
512
+ --logo-tile-sm: 30px;
513
+ --logo-tile-md: 36px;
514
+ --logo-tile-lg: 40px;
515
+ --logo-tile-shadow: var(--shadow-tile);
516
+ --logo-tile-radius: calc(12px * var(--r-scale));
517
+ --logo-tile-radius-sm: calc(10px * var(--r-scale));
518
+ --logo-tile-radius-lg: calc(13px * var(--r-scale));
519
+ --logo-tile-radius-badge: calc(6px * var(--r-scale));
520
+ --unseen-line-ink: #be185d;
521
+ --unseen-line-bg: #fff1f7;
522
+ --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;
523
+ --unseen-line-line-h: 8px;
524
+ --unseen-line-line-opacity: 0.55;
525
+ --unseen-line-label-border: 0;
526
+ --unseen-line-label-case: none;
527
+ --unseen-line-label-tracking: 0px;
528
+ --unseen-line-label-shadow: none;
529
+ --number-field-step-w: 22px;
530
+ --number-field-step-ink: #8080a3;
531
+ --number-field-step-hover-bg: #eef0fb;
532
+ --number-field-step-hover-ink: #5b5bf0;
533
+ --adjust-row-swatch-border: #e4e6fb;
534
+ --adjust-row-value-ink: #8080a3;
535
+ --adjust-row-hint-ink: #8080a3;
536
+ --adjust-row-changed-ink: #5b5bf0;
537
+ --adjust-row-back-ink: #8080a3;
538
+ --adjust-row-back-hover-bg: #eef0fb;
419
539
  --row-button-size: 24px;
420
540
  --row-button-icon: 14px;
421
- --row-button-radius: 8px;
541
+ --row-button-radius: calc(8px * var(--r-scale));
422
542
  --row-button-bg: #f1f1f8;
423
- --row-button-ink: #8f8fb0;
543
+ --row-button-ink: #8080a3;
424
544
  --row-button-hover-bg: #5b5bf0;
425
545
  --row-button-hover-ink: #ffffff;
426
546
  --row-button-disabled-opacity: 0.4;
427
- --hub-row-ink: #8f8fb0;
428
- --hub-row-attention-ink: #b8860b;
547
+ --row-button-shadow: none;
548
+ --row-button-active-shadow: none;
549
+ --hub-row-ink: #8080a3;
550
+ --hub-row-attention-ink: #a07408;
429
551
  --hub-row-error-ink: #e0554a;
430
552
  --hub-row-action-bg: #d9f7e8;
431
553
  --hub-row-action-ink: #1d8f6a;
432
554
  --hub-row-action-hover-bg: #c4efdb;
433
555
  --hub-row-face-size: 18px;
556
+ --hub-row-prefix: none;
557
+ --hub-row-prefix-gap: 0px;
558
+ --hub-row-action-shadow: var(--edge);
434
559
  --hero-ink: #ffffff;
435
560
  --hero-bg: linear-gradient(120deg, #6a6af7 0%, #5b5bf0 45%, #8b5cf6 100%);
436
561
  --hero-shadow: 0 18px 40px -22px rgba(91, 91, 240, 0.9);
@@ -450,6 +575,11 @@
450
575
  --hero-spark: #ffd166;
451
576
  --feature-emoji-bg: rgba(255, 255, 255, 0.8);
452
577
  --feature-peach-bg: #ffe4d6;
578
+ --feature-shadow: var(--edge);
579
+ --composer-shadow: none;
580
+ --composer-bg: transparent;
581
+ --composer-radius: 0px;
582
+ --composer-pad-x: 0px;
453
583
  --step-bg: #ffffff;
454
584
  --step-num-ink: #ffffff;
455
585
  --tpl-shadow: 0 1px 3px rgba(28, 27, 51, 0.06);
@@ -458,17 +588,17 @@
458
588
  }
459
589
  * { box-sizing: border-box; }
460
590
  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; }
591
+ 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
592
  button { font: inherit; cursor: pointer; color: inherit; }
463
593
  input, select, textarea { font: inherit; color: var(--ink); }
464
594
  h1, h2, h3, h4 { margin: 0; font-weight: 800; line-height: 1.2; }
465
595
  p { margin: 0 0 8px; }
466
596
  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; }
597
+ code { background: var(--lav); padding: 1px 6px; border-radius: calc(6px * var(--r-scale)); overflow-wrap: anywhere; }
468
598
  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
599
  [hidden] { display: none !important; }
470
600
  ::selection { background: var(--page-selection); }
471
- :focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 2px; border-radius: 8px; }
601
+ :focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 2px; border-radius: calc(8px * var(--r-scale)); }
472
602
  @supports not selector(::-webkit-scrollbar) { * { scrollbar-width: thin; scrollbar-color: var(--sb-thumb) transparent; } }
473
603
  *::-webkit-scrollbar { width: var(--sb-w); height: var(--sb-w); }
474
604
  *::-webkit-scrollbar-track { background: transparent; margin: 12px 0; }
@@ -479,7 +609,7 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
479
609
  .i.lg { width: 20px; height: 20px; }
480
610
  .i.xl { width: 24px; height: 24px; }
481
611
  [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; }
612
+ .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
613
  .h-ico .i { width: 20px; height: 20px; }
484
614
  .h-ico.danger { background: var(--rose); color: var(--rose-ink); }
485
615
  .hint { color: var(--faint); font-size: var(--fs-xs); font-weight: 600; line-height: 1.45; }
@@ -521,7 +651,7 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
521
651
  .field .rules-editor:hover { border-color: var(--lav-2); }
522
652
  .field .rules-editor:focus { outline: none; border-color: var(--primary); background: var(--card); }
523
653
  .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; }
654
+ .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
655
  .mention-chip .chip-name { color: inherit; }
526
656
  .field.inline-num input { width: 84px; }
527
657
  .field-grid { display: grid; gap: 8px 10px; }
@@ -533,14 +663,14 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
533
663
  .switch .label { flex: 1; }
534
664
  .switch .label .hint { display: block; margin-top: 2px; }
535
665
  .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); }
666
+ .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
667
  .switch input:checked, .toggle input:checked { background: var(--primary); }
538
668
  .switch input:checked::after, .toggle input:checked::after { transform: translateX(18px); }
539
669
  .switch input:focus-visible { outline: 3px solid var(--focus-ring); }
540
670
  .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); }
671
+ .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
672
  .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; }
673
+ .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
674
  .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
675
  .check-row input:checked { background: var(--primary); border-color: var(--primary); }
546
676
  .check-row input:checked::before { transform: scale(1); }
@@ -556,7 +686,7 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
556
686
  .card.hover:hover { transform: translateY(-2px); background: var(--lav); }
557
687
  .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
688
  .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); }
689
+ .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
690
  .card.cta .plus .i { width: 20px; height: 20px; }
561
691
  .section { background: var(--soft); border: 0; border-radius: var(--r-lg); padding: 16px 16px 12px; margin-bottom: 12px; min-width: 0; }
562
692
  .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 +706,7 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
576
706
  .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
707
  .kv span:nth-child(odd) { color: var(--muted); font-weight: 600; overflow-wrap: normal; }
578
708
  .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; }
709
+ .divider { height: 2px; background: var(--lav); margin: 10px 0; border-radius: calc(2px * var(--r-scale)); }
580
710
  .geek { margin: 4px 0 2px; min-width: 0; }
581
711
  .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
712
  .geek > summary::-webkit-details-marker { display: none; }
@@ -591,15 +721,13 @@ pre { background: var(--code-bg); color: var(--code-ink); padding: 10px 12px; bo
591
721
  .geek-tip .i { width: 17px; height: 17px; display: block; }
592
722
  p .geek-tip, .hint > .geek-tip, .switch .label > .geek-tip { margin-left: 8px; }
593
723
  .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); }
724
+ .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
725
  .geek-text code { font-size: calc(11px * var(--fs-scale)); }
596
726
  .choice-row { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; min-width: 0; }
597
727
  .choice-row > .label { font-size: calc(12px * var(--fs-scale)); font-weight: 800; color: var(--ink-3); }
598
728
  .chips { display: flex; flex-wrap: wrap; gap: 6px; }
599
729
  .agent-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 8px; margin: 2px 0 14px; }
600
730
  .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
731
  .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
732
  .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
733
  .agent-tile:hover:not(.off) { transform: translateY(-2px); background: var(--lav); }
@@ -607,23 +735,9 @@ p .geek-tip, .hint > .geek-tip, .switch .label > .geek-tip { margin-left: 8px; }
607
735
  .agent-tile.off { opacity: 0.5; filter: grayscale(1); cursor: default; }
608
736
  .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
737
  .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); }
738
+ .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
739
  .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); }
740
+ .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
741
  .avatar-picker button:hover { transform: translateY(-1px); background: var(--lav); }
628
742
  .avatar-picker button.selected { border-color: var(--primary); background: var(--lav); }
629
743
  .avatar-picker button.none { font-size: 12px; font-weight: 800; color: var(--muted); }
@@ -634,17 +748,10 @@ p .geek-tip, .hint > .geek-tip, .switch .label > .geek-tip { margin-left: 8px; }
634
748
  .emoji-none { grid-column: 1 / -1; color: var(--muted); font-size: calc(12px * var(--fs-scale)); font-weight: 700; padding: 8px 4px; }
635
749
  .avatar-stack { display: flex; }
636
750
  .avatar-stack .avatar { margin-left: -8px; }
637
- .avatar-stack .avatar .av-tile { box-shadow: 0 0 0 2px var(--tile-ring); }
638
751
  .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
752
  .vendor-card { display: flex; flex-direction: column; gap: 8px; background: var(--card); border-radius: var(--r-md); padding: 12px 14px; margin-bottom: 8px; }
644
753
  .vendor-card .vc-head, .vendor-row { display: flex; align-items: center; gap: 10px; }
645
754
  .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
755
  .vc-name { font-weight: 800; flex: 1; min-width: 0; }
649
756
  .vc-name .hint { display: block; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
650
757
  .vendor-card .vc-fields { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
@@ -661,20 +768,20 @@ p .geek-tip, .hint > .geek-tip, .switch .label > .geek-tip { margin-left: 8px; }
661
768
  .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
769
  .open-link:hover { text-decoration-color: var(--primary); }
663
770
  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); }
771
+ .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
772
  .mermaid-block .mm-out svg { max-width: 100%; height: auto; display: block; margin: 0 auto; }
666
773
  .mermaid-block .mm-out pre { margin: 0; }
667
774
  .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; }
775
+ .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
776
  .mermaid-block .mm-src:hover, .csv-block .mm-src:hover { background: var(--soft); color: var(--primary); }
670
777
  .mermaid-block .mm-code, .csv-block .mm-code { margin: 6px 0 0; }
671
778
  .csv-block .csv-wrap { box-shadow: none; max-height: 320px; }
672
779
  .csv-block .csv-count { margin: 4px 2px 0; }
673
780
  .mermaid-block.preview { margin-top: 4px; }
674
781
  .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); }
782
+ .diagram-presets .swatch { width: 14px; height: 14px; border-radius: calc(5px * var(--r-scale)); border: 2px solid; display: inline-block; }
783
+ .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; }
784
+ .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
785
  .menu button.active, .menu button:hover, .mention-menu button.active, .mention-menu button:hover { background: var(--lav); }
679
786
  .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
787
  .menu .mm-skill, .mention-menu .mm-skill { font-weight: 800; color: var(--primary); min-width: 84px; }
@@ -683,7 +790,7 @@ code .open-link { color: inherit; }
683
790
  .emoji-menu { min-width: 0; width: 352px; padding: 8px; }
684
791
  .emoji-menu .avatar-picker { margin: 0; grid-template-columns: repeat(8, 1fr); }
685
792
  #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); }
793
+ .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
794
  .dialog::backdrop { background: var(--dialog-backdrop); backdrop-filter: blur(4px); }
688
795
  .dialog[open] { animation: pop var(--t-slow) var(--ease-pop); }
689
796
  .dialog[open]::backdrop { animation: fade-in var(--t-base) var(--ease-out); }
@@ -714,7 +821,7 @@ code .open-link { color: inherit; }
714
821
  .dialog.wide { width: 720px; }
715
822
  .dialog.narrow { width: 440px; }
716
823
  .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; }
824
+ .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
825
  .toast .i { width: 15px; height: 15px; margin-top: 1px; opacity: 0.85; }
719
826
  .toast.warn { background: var(--warm-ink); }
720
827
  .toast.error { background: var(--rose-ink); }