anentrypoint-design 0.0.379 → 0.0.381
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.
- package/app-shell.css +16 -0
- package/chat.css +102 -62
- package/colors_and_type.css +66 -7
- package/community.css +112 -70
- package/dist/247420.css +908 -308
- package/dist/247420.js +26 -23
- package/package.json +1 -1
- package/src/components/content.js +13 -4
- package/src/components/freddie/helpers.js +7 -0
- package/src/components/freddie.js +21 -21
- package/src/css/app-shell/base.css +11 -1
- package/src/css/app-shell/catalog-theme.css +7 -0
- package/src/css/app-shell/chat-polish.css +6 -1
- package/src/css/app-shell/data-density.css +22 -4
- package/src/css/app-shell/files.css +3 -3
- package/src/css/app-shell/hero-content.css +1 -1
- package/src/css/app-shell/kits-appended.css +387 -33
- package/src/css/app-shell/panel-row.css +6 -1
- package/src/css/app-shell/plugins-config.css +1 -1
- package/src/css/app-shell/responsive2-workspace.css +17 -12
- package/src/css/app-shell/states-interactions.css +9 -4
- package/src/kits/os/launcher.css +1 -1
- package/src/kits/os/theme.css +359 -283
- package/src/kits/os/wm.css +2 -2
- package/src/kits/slides/deck-stage-style.js +5 -2
- package/src/kits/spoint/host-join-lobby.css +1 -1
- package/src/kits/spoint/loading-screen.css +1 -1
package/src/kits/os/theme.css
CHANGED
|
@@ -56,10 +56,10 @@ html, body {
|
|
|
56
56
|
-webkit-backdrop-filter: blur(10px);
|
|
57
57
|
border: none;
|
|
58
58
|
color: var(--os-fg);
|
|
59
|
-
font:
|
|
59
|
+
font: var(--fs-tiny) var(--os-font);
|
|
60
60
|
height: var(--os-bar-h);
|
|
61
|
-
padding: 0
|
|
62
|
-
gap:
|
|
61
|
+
padding: 0 var(--space-2-75);
|
|
62
|
+
gap: var(--space-1-75);
|
|
63
63
|
box-shadow: none;
|
|
64
64
|
display: flex;
|
|
65
65
|
align-items: center;
|
|
@@ -80,11 +80,11 @@ html, body {
|
|
|
80
80
|
font-family: var(--os-display);
|
|
81
81
|
font-weight: 700;
|
|
82
82
|
letter-spacing: -0.01em;
|
|
83
|
-
font-size:
|
|
83
|
+
font-size: var(--fs-sm);
|
|
84
84
|
margin-right: 14px;
|
|
85
85
|
display: inline-flex;
|
|
86
86
|
align-items: center;
|
|
87
|
-
gap:
|
|
87
|
+
gap: var(--space-2);
|
|
88
88
|
text-transform: lowercase;
|
|
89
89
|
}
|
|
90
90
|
.os-brand::before {
|
|
@@ -103,12 +103,12 @@ html, body {
|
|
|
103
103
|
cursor: pointer;
|
|
104
104
|
font: inherit;
|
|
105
105
|
font-family: var(--os-font);
|
|
106
|
-
font-size:
|
|
106
|
+
font-size: var(--fs-tiny);
|
|
107
107
|
border-radius: var(--r-pill, 999px);
|
|
108
108
|
transition: background 80ms ease, color 80ms ease;
|
|
109
109
|
display: inline-flex;
|
|
110
110
|
align-items: center;
|
|
111
|
-
gap:
|
|
111
|
+
gap: var(--space-1-75);
|
|
112
112
|
outline: none;
|
|
113
113
|
text-transform: lowercase;
|
|
114
114
|
}
|
|
@@ -127,10 +127,10 @@ html, body {
|
|
|
127
127
|
min-width: 220px;
|
|
128
128
|
top: calc(var(--os-bar-h) + var(--space-1, 4px));
|
|
129
129
|
left: var(--space-2, 8px);
|
|
130
|
-
z-index:
|
|
130
|
+
z-index: var(--z-dropdown);
|
|
131
131
|
display: none;
|
|
132
132
|
flex-direction: column;
|
|
133
|
-
gap:
|
|
133
|
+
gap: var(--space-hair);
|
|
134
134
|
pointer-events: auto;
|
|
135
135
|
/* Long app registries must scroll, not extend past the viewport. */
|
|
136
136
|
max-height: calc(100vh - var(--os-bar-h) - 16px);
|
|
@@ -143,7 +143,7 @@ html, body {
|
|
|
143
143
|
width: 100%;
|
|
144
144
|
text-align: left;
|
|
145
145
|
border-radius: var(--os-radius-sm);
|
|
146
|
-
padding:
|
|
146
|
+
padding: var(--space-2) var(--space-2-5);
|
|
147
147
|
color: var(--os-fg);
|
|
148
148
|
justify-content: flex-start;
|
|
149
149
|
}
|
|
@@ -153,8 +153,8 @@ html, body {
|
|
|
153
153
|
* builds the group structurally and toggles only the list's display; the static
|
|
154
154
|
* layout (column flow + indent + arrow alignment) lives here so no visual rule
|
|
155
155
|
* leaks back into thebird JS (zero-design-CSS contract). */
|
|
156
|
-
.os-menu-group { display: flex; flex-direction: column; gap:
|
|
157
|
-
.os-menu-system-toggle { display: flex; align-items: center; gap:
|
|
156
|
+
.os-menu-group { display: flex; flex-direction: column; gap: var(--space-hair); }
|
|
157
|
+
.os-menu-system-toggle { display: flex; align-items: center; gap: var(--space-1-75); }
|
|
158
158
|
.os-menu-system-arrow { display: inline-flex; align-items: center; transition: transform 120ms ease; }
|
|
159
159
|
.os-menu-system-arrow .ds-icon { width: 14px; height: 14px; }
|
|
160
160
|
.os-menu-system-list { display: none; flex-direction: column; padding-left: 14px; }
|
|
@@ -165,8 +165,8 @@ html, body {
|
|
|
165
165
|
color: var(--os-fg-2);
|
|
166
166
|
font-variant-numeric: tabular-nums;
|
|
167
167
|
font-family: var(--os-mono);
|
|
168
|
-
padding: 0
|
|
169
|
-
font-size:
|
|
168
|
+
padding: 0 var(--space-2-5);
|
|
169
|
+
font-size: var(--fs-micro);
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
.os-task {
|
|
@@ -174,8 +174,8 @@ html, body {
|
|
|
174
174
|
background: var(--os-bg-1);
|
|
175
175
|
color: var(--os-fg-2);
|
|
176
176
|
border-radius: var(--r-pill, 999px);
|
|
177
|
-
padding:
|
|
178
|
-
font-size:
|
|
177
|
+
padding: var(--space-1-75) 14px;
|
|
178
|
+
font-size: var(--fs-micro);
|
|
179
179
|
font-family: var(--os-font);
|
|
180
180
|
transition: background 80ms ease, color 80ms ease, box-shadow 80ms ease;
|
|
181
181
|
max-width: 200px;
|
|
@@ -189,7 +189,7 @@ html, body {
|
|
|
189
189
|
.os-task { min-height: 28px; }
|
|
190
190
|
.os-task:hover { background: var(--panel-hover, var(--os-bg-2)); color: var(--os-fg); }
|
|
191
191
|
/* Empty taskbar reads as an intentional strip, not a stray blurred bar. */
|
|
192
|
-
.os-task-empty { font-size:
|
|
192
|
+
.os-task-empty { font-size: var(--fs-nano); color: var(--os-fg-3); padding: 0 var(--space-2-5); font-family: var(--os-font); }
|
|
193
193
|
.os-task.focused {
|
|
194
194
|
background: var(--panel-select, var(--os-accent-soft));
|
|
195
195
|
color: var(--os-fg);
|
|
@@ -197,55 +197,63 @@ html, body {
|
|
|
197
197
|
box-shadow: inset 4px 0 0 var(--os-accent);
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
200
|
+
/* Window-chrome overrides of wm.css.
|
|
201
|
+
*
|
|
202
|
+
* wm.css is loaded by the consumer as a SEPARATE raw sheet (it is not part of
|
|
203
|
+
* the dist bundle), so its load order relative to this file is not guaranteed.
|
|
204
|
+
* These rules therefore carry the `.ds-247420` scope class: at (0,2,0) they
|
|
205
|
+
* beat wm.css's bare (0,1,0) `.wm-*` rules on SPECIFICITY, which is order-
|
|
206
|
+
* independent — replacing the `!important` wall that previously did the same
|
|
207
|
+
* job by force. Do not un-scope these; the scope IS the override mechanism. */
|
|
208
|
+
.ds-247420 .wm-win {
|
|
209
|
+
background: var(--os-bg-1);
|
|
210
|
+
border: none;
|
|
211
|
+
border-radius: var(--r-3);
|
|
212
|
+
box-shadow: none;
|
|
205
213
|
overflow: hidden;
|
|
206
214
|
}
|
|
207
|
-
.wm-win.wm-focused {
|
|
208
|
-
border: none
|
|
209
|
-
box-shadow: inset
|
|
215
|
+
.ds-247420 .wm-win.wm-focused {
|
|
216
|
+
border: none;
|
|
217
|
+
box-shadow: inset var(--space-1) 0 0 var(--os-accent);
|
|
210
218
|
}
|
|
211
219
|
|
|
212
|
-
.wm-bar {
|
|
213
|
-
background: var(--os-bg-2)
|
|
214
|
-
border: none
|
|
215
|
-
padding:
|
|
216
|
-
gap:
|
|
220
|
+
.ds-247420 .wm-bar {
|
|
221
|
+
background: var(--os-bg-2);
|
|
222
|
+
border: none;
|
|
223
|
+
padding: var(--space-2) var(--space-2-75);
|
|
224
|
+
gap: var(--space-2-5);
|
|
217
225
|
}
|
|
218
|
-
.wm-title {
|
|
219
|
-
font:
|
|
220
|
-
color: var(--os-fg-2)
|
|
226
|
+
.ds-247420 .wm-title {
|
|
227
|
+
font: var(--fs-tiny) var(--os-font);
|
|
228
|
+
color: var(--os-fg-2);
|
|
221
229
|
letter-spacing: 0.005em;
|
|
222
230
|
text-align: center;
|
|
223
231
|
font-weight: 600;
|
|
224
232
|
text-transform: lowercase;
|
|
225
233
|
}
|
|
226
|
-
.wm-btns { gap:
|
|
227
|
-
.wm-btn {
|
|
228
|
-
width: 22px
|
|
229
|
-
height: 22px
|
|
230
|
-
border-radius: var(--r-1
|
|
231
|
-
border: none
|
|
232
|
-
background: var(--os-bg-3)
|
|
233
|
-
color: var(--os-fg-2)
|
|
234
|
-
padding: 0
|
|
234
|
+
.ds-247420 .wm-btns { gap: var(--space-1-75); order: -1; }
|
|
235
|
+
.ds-247420 .wm-btn {
|
|
236
|
+
width: 22px;
|
|
237
|
+
height: 22px;
|
|
238
|
+
border-radius: var(--r-1);
|
|
239
|
+
border: none;
|
|
240
|
+
background: var(--os-bg-3);
|
|
241
|
+
color: var(--os-fg-2);
|
|
242
|
+
padding: 0;
|
|
235
243
|
cursor: pointer;
|
|
236
|
-
font: 600
|
|
237
|
-
line-height: 1
|
|
238
|
-
display: inline-flex
|
|
244
|
+
font: 600 var(--fs-micro) var(--os-mono);
|
|
245
|
+
line-height: 1;
|
|
246
|
+
display: inline-flex;
|
|
239
247
|
align-items: center;
|
|
240
248
|
justify-content: center;
|
|
241
249
|
transition: background 100ms ease, color 100ms ease;
|
|
242
250
|
}
|
|
243
|
-
.wm-btn:hover { background: var(--panel-hover, var(--os-bg-2))
|
|
251
|
+
.ds-247420 .wm-btn:hover { background: var(--panel-hover, var(--os-bg-2)); color: var(--os-fg); }
|
|
244
252
|
|
|
245
|
-
.wm-resize {
|
|
246
|
-
background: transparent
|
|
247
|
-
width: 14px
|
|
248
|
-
height: 14px
|
|
253
|
+
.ds-247420 .wm-resize {
|
|
254
|
+
background: transparent;
|
|
255
|
+
width: 14px;
|
|
256
|
+
height: 14px;
|
|
249
257
|
color: var(--os-fg-3);
|
|
250
258
|
opacity: 0.4;
|
|
251
259
|
}
|
|
@@ -261,7 +269,7 @@ html, body {
|
|
|
261
269
|
linear-gradient(135deg, transparent 0 45%, currentColor 45% 55%, transparent 55% 100%),
|
|
262
270
|
linear-gradient(135deg, transparent 0 70%, currentColor 70% 80%, transparent 80% 100%);
|
|
263
271
|
}
|
|
264
|
-
.wm-body { background: var(--os-bg-1)
|
|
272
|
+
.ds-247420 .wm-body { background: var(--os-bg-1); }
|
|
265
273
|
|
|
266
274
|
.os-side-rail {
|
|
267
275
|
position: fixed;
|
|
@@ -275,7 +283,7 @@ html, body {
|
|
|
275
283
|
align-items: center;
|
|
276
284
|
padding: var(--space-2, 8px) 0;
|
|
277
285
|
gap: var(--space-1, 4px);
|
|
278
|
-
z-index:
|
|
286
|
+
z-index: var(--z-dock);
|
|
279
287
|
pointer-events: auto;
|
|
280
288
|
}
|
|
281
289
|
.os-rail-btn {
|
|
@@ -299,7 +307,7 @@ html, body {
|
|
|
299
307
|
position: fixed;
|
|
300
308
|
inset: 0;
|
|
301
309
|
background: var(--os-bg-0);
|
|
302
|
-
z-index:
|
|
310
|
+
z-index: var(--z-modal);
|
|
303
311
|
pointer-events: auto;
|
|
304
312
|
display: none;
|
|
305
313
|
flex-direction: column;
|
|
@@ -318,7 +326,7 @@ html, body {
|
|
|
318
326
|
box-sizing: border-box;
|
|
319
327
|
background: var(--os-bg-2);
|
|
320
328
|
}
|
|
321
|
-
.os-drawer-title { color: var(--os-fg); font-family: var(--os-display); font-size:
|
|
329
|
+
.os-drawer-title { color: var(--os-fg); font-family: var(--os-display); font-size: var(--fs-xl); font-weight: 700; letter-spacing: -0.01em; text-transform: lowercase; }
|
|
322
330
|
.os-drawer-close {
|
|
323
331
|
width: 44px; height: 44px;
|
|
324
332
|
border: none; background: transparent;
|
|
@@ -349,7 +357,7 @@ html, body {
|
|
|
349
357
|
background: var(--os-bg-1);
|
|
350
358
|
border: none;
|
|
351
359
|
color: var(--os-fg);
|
|
352
|
-
font:
|
|
360
|
+
font: var(--fs-tiny) var(--os-font);
|
|
353
361
|
min-height: 100px;
|
|
354
362
|
cursor: pointer;
|
|
355
363
|
transition: background 80ms ease;
|
|
@@ -364,34 +372,38 @@ html, body {
|
|
|
364
372
|
.os-drawer-tile .lbl { color: var(--os-fg); font-weight: 600; }
|
|
365
373
|
|
|
366
374
|
.os-spacer { flex: 1 1 auto; }
|
|
367
|
-
.os-tray { display: flex; align-items: center; gap:
|
|
368
|
-
.os-instances { display: flex; gap:
|
|
375
|
+
.os-tray { display: flex; align-items: center; gap: var(--space-1-75); }
|
|
376
|
+
.os-instances { display: flex; gap: var(--space-1); margin-left: var(--space-2); flex: 0 1 40vw; max-width: 40vw; overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; padding: 0 var(--space-1); -webkit-mask-image: linear-gradient(to right, transparent, black 12px, black calc(100% - 12px), transparent); mask-image: linear-gradient(to right, transparent, black 12px, black calc(100% - 12px), transparent); }
|
|
369
377
|
.os-instances::-webkit-scrollbar { height: 4px; }
|
|
370
|
-
.os-instances .os-btn { flex: 0 0 auto; min-width: 36px; padding:
|
|
378
|
+
.os-instances .os-btn { flex: 0 0 auto; min-width: 36px; padding: var(--space-hair) var(--space-2); font-family: var(--os-mono); font-size: var(--fs-nano); }
|
|
371
379
|
.os-instances .os-btn.active { background: var(--panel-select, var(--os-accent-soft)); color: var(--os-fg); border-color: var(--panel-accent, var(--os-accent)); box-shadow: inset 0 0 0 1px var(--panel-accent, var(--os-accent)); }
|
|
372
380
|
.os-menubar [data-role="home"] { display: none; }
|
|
373
|
-
.os-root { position: fixed; inset: 0; display: flex; flex-direction: column; pointer-events: none; z-index:
|
|
381
|
+
.os-root { position: fixed; inset: 0; display: flex; flex-direction: column; pointer-events: none; z-index: calc(var(--z-dock) + 2); }
|
|
374
382
|
.os-menubar, .os-taskbar { pointer-events: auto; flex: 0 0 auto; }
|
|
375
383
|
.os-taskbar { margin-top: auto; }
|
|
376
|
-
|
|
384
|
+
/* Desktop default: the window layer sits BETWEEN the menubar and taskbar.
|
|
385
|
+
* Scoped (0,2,0) to beat wm.css's bare `.wm-root{inset:0}` by specificity
|
|
386
|
+
* rather than `!important`. The brand "bars overlay" block further below
|
|
387
|
+
* re-asserts inset:0 for .ds-247420 at equal specificity + later source order. */
|
|
388
|
+
.ds-247420 .wm-root { inset: var(--os-bar-h) 0 var(--os-bar-h) 0; }
|
|
377
389
|
|
|
378
390
|
.app-pane { padding: var(--space-3, 16px); font: var(--fs-sm, 14px) var(--os-font); color: var(--os-fg); line-height: var(--lh-base, 1.55); overflow: auto; height: 100%; box-sizing: border-box; background: var(--os-bg-1); }
|
|
379
391
|
.app-pane h2 { margin: 0 0 var(--space-2, 8px) 0; color: var(--os-fg); font-family: var(--os-display); font-size: var(--fs-xl, 21px); font-weight: 700; letter-spacing: -0.01em; line-height: var(--lh-snug, 1.2); }
|
|
380
392
|
.app-pane p { margin: 0 0 var(--space-2, 8px) 0; color: var(--os-fg-2); }
|
|
381
393
|
.app-pane ul { padding-left: var(--space-3, 16px); margin: var(--space-1, 4px) 0 var(--space-3, 16px); color: var(--os-fg-2); }
|
|
382
394
|
.app-pane li { padding: var(--space-1, 4px) 0; }
|
|
383
|
-
.app-pane code { font: var(--fs-tiny, 12px) var(--os-mono); background: var(--os-bg-2); padding: 1px
|
|
395
|
+
.app-pane code { font: var(--fs-tiny, 12px) var(--os-mono); background: var(--os-bg-2); padding: 1px var(--space-1-75); border-radius: var(--r-1, 6px); color: var(--os-fg); }
|
|
384
396
|
.app-pane a { color: var(--os-accent); text-decoration: none; }
|
|
385
397
|
.app-pane a:hover { text-decoration: underline; text-underline-offset: 2px; }
|
|
386
398
|
.app-pane .meta { color: var(--os-fg-3); font-size: var(--fs-tiny, 12px); }
|
|
387
399
|
.app-pane.mono { font: var(--fs-tiny, 12px) var(--os-mono); padding: var(--space-2, 8px); background: var(--os-bg-1); }
|
|
388
400
|
.app-pane.mono[data-component="monitor-app"] { white-space: pre-wrap; line-height: 1.7; }
|
|
389
|
-
.app-pane.mono .row { padding:
|
|
401
|
+
.app-pane.mono .row { padding: var(--space-1) var(--space-2); cursor: pointer; border-radius: var(--r-1, 6px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
390
402
|
.app-pane.mono .row:hover { background: var(--panel-hover, var(--os-bg-2)); }
|
|
391
403
|
.app-pane.mono .row.selected { background: var(--panel-select, var(--os-accent-soft)); box-shadow: inset 4px 0 0 var(--os-accent); }
|
|
392
|
-
.app-pane.mono .head { color: var(--os-accent); margin-bottom:
|
|
393
|
-
.app-pane.mono pre { background: var(--os-bg-2); padding:
|
|
394
|
-
.app-shell-pane { margin: 0; padding:
|
|
404
|
+
.app-pane.mono .head { color: var(--os-accent); margin-bottom: var(--space-2); padding-bottom: var(--space-2); font-weight: 600; letter-spacing: 0.02em; border-bottom: 1px solid var(--os-bg-3); }
|
|
405
|
+
.app-pane.mono pre { background: var(--os-bg-2); padding: var(--space-2-5) var(--space-2-75); margin: var(--space-2) 0 0 0; max-height: 220px; overflow: auto; white-space: pre-wrap; font: var(--fs-nano) var(--os-mono); border-radius: var(--r-1, 6px); color: var(--os-fg); border: none; }
|
|
406
|
+
.app-shell-pane { margin: 0; padding: var(--space-2); font: var(--fs-micro) var(--os-mono); color: var(--os-fg); background: var(--os-bg-0); height: 100%; overflow: auto; white-space: pre-wrap; box-sizing: border-box; }
|
|
395
407
|
.app-canvas { width: 100%; height: 100%; background: var(--os-bg-0); display: block; cursor: default; }
|
|
396
408
|
.app-canvas.x-display { background: #0b0d10; } /* intentional: fake CRT/terminal black screen, not a theme surface */
|
|
397
409
|
.app-frame { width: 100%; height: 100%; border: 0; background: var(--os-bg-0); }
|
|
@@ -405,7 +417,7 @@ html, body {
|
|
|
405
417
|
}
|
|
406
418
|
@media (max-width: 1023px) and (min-width: 768px) {
|
|
407
419
|
.os-side-rail { display: flex; }
|
|
408
|
-
.wm-root { left: calc(var(--os-rail-w) + env(safe-area-inset-left, 0px))
|
|
420
|
+
.ds-247420 .wm-root { left: calc(var(--os-rail-w) + env(safe-area-inset-left, 0px)); }
|
|
409
421
|
.os-menubar { padding-left: calc(var(--os-rail-w) + env(safe-area-inset-left, 0px) + var(--space-2, 8px)); }
|
|
410
422
|
.os-taskbar { padding-left: calc(var(--os-rail-w) + env(safe-area-inset-left, 0px) + var(--space-2, 8px)); }
|
|
411
423
|
.os-menubar .os-instances { display: flex; }
|
|
@@ -415,17 +427,17 @@ html, body {
|
|
|
415
427
|
@media (max-width: 767px) {
|
|
416
428
|
:root { --os-bar-h: var(--os-bar-h-mobile); }
|
|
417
429
|
body { overscroll-behavior: none; }
|
|
418
|
-
.os-menubar [data-role="home"] { display: inline-flex; min-width: var(--os-tap); min-height: var(--os-tap); padding: 0
|
|
430
|
+
.os-menubar [data-role="home"] { display: inline-flex; min-width: var(--os-tap); min-height: var(--os-tap); padding: 0 var(--space-2-75); }
|
|
419
431
|
.os-menubar [data-role="home"] .ic svg { width: 22px; height: 22px; }
|
|
420
|
-
.os-menubar { font-size:
|
|
432
|
+
.os-menubar { font-size: var(--fs-xs); padding: env(safe-area-inset-top, 0) max(8px, env(safe-area-inset-right, 0px)) 0 max(8px, env(safe-area-inset-left, 0px)); height: calc(var(--os-bar-h) + env(safe-area-inset-top, 0)); }
|
|
421
433
|
.os-menubar [data-role="apps"] { display: none; }
|
|
422
|
-
.os-menubar .os-brand { font-size:
|
|
434
|
+
.os-menubar .os-brand { font-size: var(--fs-tiny); margin-right: var(--space-1-75); }
|
|
423
435
|
.os-menubar [data-role="add"] { display: none; }
|
|
424
436
|
.os-menubar .os-instances { display: none; }
|
|
425
437
|
.os-clock { display: none; }
|
|
426
438
|
.os-taskbar {
|
|
427
439
|
padding: 6px max(8px, env(safe-area-inset-right, 0px)) calc(6px + env(safe-area-inset-bottom, 0)) max(8px, env(safe-area-inset-left, 0px));
|
|
428
|
-
gap:
|
|
440
|
+
gap: var(--space-1-75);
|
|
429
441
|
overflow-x: auto;
|
|
430
442
|
overflow-y: hidden;
|
|
431
443
|
flex-wrap: nowrap;
|
|
@@ -439,39 +451,46 @@ html, body {
|
|
|
439
451
|
min-width: 120px;
|
|
440
452
|
min-height: 44px;
|
|
441
453
|
max-width: none;
|
|
442
|
-
padding:
|
|
454
|
+
padding: var(--space-2-5) 14px;
|
|
443
455
|
scroll-snap-align: start;
|
|
444
|
-
font-size:
|
|
456
|
+
font-size: var(--fs-tiny);
|
|
445
457
|
}
|
|
446
|
-
.os-task.focused { background: var(--panel-select, var(--os-accent-soft)); box-shadow: inset
|
|
447
|
-
.os-side-rail { display: none
|
|
448
|
-
.os-menu { left:
|
|
449
|
-
.wm-root {
|
|
450
|
-
|
|
451
|
-
bottom: calc(var(--os-bar-h) + env(safe-area-inset-bottom, 0)) !important;
|
|
452
|
-
inset: calc(var(--os-bar-h) + env(safe-area-inset-top, 0)) 0 calc(var(--os-bar-h) + env(safe-area-inset-bottom, 0)) 0 !important;
|
|
458
|
+
.os-task.focused { background: var(--panel-select, var(--os-accent-soft)); box-shadow: inset var(--space-1) 0 0 var(--os-accent); }
|
|
459
|
+
.os-side-rail { display: none; }
|
|
460
|
+
.os-menu { left: var(--space-2); right: var(--space-2); min-width: 0; top: calc(var(--os-bar-h) + env(safe-area-inset-top, 0) + var(--space-1)); }
|
|
461
|
+
.ds-247420 .wm-root {
|
|
462
|
+
inset: calc(var(--os-bar-h) + env(safe-area-inset-top, 0)) 0 calc(var(--os-bar-h) + env(safe-area-inset-bottom, 0)) 0;
|
|
453
463
|
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
464
|
+
/* LOAD-BEARING !important: wm.css's own mobile block declares
|
|
465
|
+
* `.wm-win{left/top/width/height: ... !important}` (wm.css:157-165). An
|
|
466
|
+
* !important declaration can only be beaten by another !important one, so
|
|
467
|
+
* scoping alone cannot win here — these five must keep the flag. The
|
|
468
|
+
* non-!important properties in this rule do not, and were dropped. */
|
|
469
|
+
.ds-247420 .wm-win {
|
|
470
|
+
position: absolute;
|
|
471
|
+
left: 0 !important;
|
|
472
|
+
top: 0 !important;
|
|
473
|
+
width: 100% !important;
|
|
474
|
+
height: 100% !important;
|
|
475
|
+
border: none;
|
|
476
|
+
/* bare 0, not --r-0 (4px): a full-screen window has square corners.
|
|
477
|
+
* The radius lint intentionally does not flag unitless zero. */
|
|
478
|
+
border-radius: 0;
|
|
479
|
+
box-shadow: none;
|
|
461
480
|
}
|
|
462
|
-
.wm-bar {
|
|
463
|
-
padding:
|
|
464
|
-
height: 36px
|
|
465
|
-
gap:
|
|
466
|
-
cursor: default
|
|
467
|
-
touch-action: pan-y
|
|
481
|
+
.ds-247420 .wm-bar {
|
|
482
|
+
padding: var(--space-1-75) var(--space-2-5);
|
|
483
|
+
height: 36px;
|
|
484
|
+
gap: var(--space-1-75);
|
|
485
|
+
cursor: default;
|
|
486
|
+
touch-action: pan-y;
|
|
468
487
|
pointer-events: none;
|
|
469
488
|
}
|
|
470
|
-
.wm-bar .wm-title { pointer-events: auto; font-size:
|
|
471
|
-
.wm-bar .wm-btns { pointer-events: auto; }
|
|
472
|
-
.wm-btns .wm-btn:nth-child(1), .wm-btns .wm-btn:nth-child(2) { display: none
|
|
473
|
-
.wm-btns .wm-btn:nth-child(3) { width: 44px
|
|
474
|
-
.wm-resize, .wm-edge { display: none
|
|
489
|
+
.ds-247420 .wm-bar .wm-title { pointer-events: auto; font-size: var(--fs-tiny); }
|
|
490
|
+
.ds-247420 .wm-bar .wm-btns { pointer-events: auto; }
|
|
491
|
+
.ds-247420 .wm-btns .wm-btn:nth-child(1), .ds-247420 .wm-btns .wm-btn:nth-child(2) { display: none; }
|
|
492
|
+
.ds-247420 .wm-btns .wm-btn:nth-child(3) { width: 44px; height: 44px; border-radius: var(--r-1); background: var(--os-bg-3); color: var(--os-fg); }
|
|
493
|
+
.ds-247420 .wm-resize, .ds-247420 .wm-edge { display: none; }
|
|
475
494
|
}
|
|
476
495
|
|
|
477
496
|
/* ---- data-attr theme/accent: deferred to the canonical theme ----
|
|
@@ -506,7 +525,12 @@ html, body {
|
|
|
506
525
|
* ============================================================ */
|
|
507
526
|
.ds-247420 {
|
|
508
527
|
--ff-ui: var(--ff-body);
|
|
509
|
-
/* uniform bar height: 22px button + 6px+6px padding = 34px
|
|
528
|
+
/* uniform bar height: 22px button + 6px+6px padding = 34px.
|
|
529
|
+
* LOAD-BEARING !important: `:root[data-density="compact"|"comfortable"|
|
|
530
|
+
* "spacious"]` (this file, "data-attr theme/accent" block above) redefines
|
|
531
|
+
* --os-bar-h at (0,2,0) — HIGHER than this rule's (0,1,0) — on the same
|
|
532
|
+
* <html> element. Without the flag the density presets silently override
|
|
533
|
+
* the brand's uniform 34px bar geometry. */
|
|
510
534
|
--os-bar-h: 34px !important;
|
|
511
535
|
--os-bar-h-mobile: 34px !important;
|
|
512
536
|
--os-dock-h: 34px !important;
|
|
@@ -517,30 +541,47 @@ html, body {
|
|
|
517
541
|
* #F5F0E4 variant. Re-assert both here rather than forcing the consumer to
|
|
518
542
|
* opt into [data-theme="thebird"], which the OS boots past with
|
|
519
543
|
* data-theme="auto". --accent-bright is pinned too so the ink-mode
|
|
520
|
-
* --accent: var(--accent-bright, ...) chain still resolves to brand green.
|
|
544
|
+
* --accent: var(--accent-bright, ...) chain still resolves to brand green.
|
|
545
|
+
* LOAD-BEARING !important: colors_and_type.css defines --accent on
|
|
546
|
+
* `[data-accent="acid"|"green"|...]` and `[data-theme="ink"]` — attribute
|
|
547
|
+
* selectors at (0,1,0), the SAME specificity as this `.ds-247420` class
|
|
548
|
+
* rule, on the same <html> element. colors_and_type.css is always loaded
|
|
549
|
+
* first, but equal specificity + later source order would still let a
|
|
550
|
+
* [data-accent] preset win. The flag is the only thing pinning brand green. */
|
|
521
551
|
--accent: var(--green) !important;
|
|
522
552
|
--accent-bright: var(--green) !important;
|
|
523
553
|
--paper: #F5F0E4;
|
|
524
554
|
}
|
|
525
555
|
/* Window titlebar matches the 34px bar height; clamp so menubar/taskbar/titlebar
|
|
526
556
|
* heights are uniform. */
|
|
527
|
-
.ds-247420 .wm-bar { height: 34px
|
|
557
|
+
.ds-247420 .wm-bar { height: 34px; min-height: 34px; box-sizing: border-box; padding-top: var(--space-1); padding-bottom: var(--space-1); }
|
|
528
558
|
/* Bars overlay windows: .wm-root fills full viewport, menubar/taskbar paint on top.
|
|
529
|
-
* Tilde key hides them via .bars-hidden on <html>.
|
|
530
|
-
|
|
559
|
+
* Tilde key hides them via .bars-hidden on <html>.
|
|
560
|
+
* Wins over the desktop `.ds-247420 .wm-root{inset:var(--os-bar-h)...}` above by
|
|
561
|
+
* equal specificity + later source order (both are now (0,2,0)) — no flag needed. */
|
|
562
|
+
.ds-247420 .wm-root { inset: 0; }
|
|
531
563
|
/* With bars overlaying the wm-root, a maximized window's 34px titlebar would
|
|
532
564
|
* sit exactly under the 34px menubar (untappable) and its body under the
|
|
533
565
|
* taskbar; keep maximized windows between the bars on desktop/tablet. The
|
|
534
566
|
* mobile band re-asserts its own contract in the responsive layer below. */
|
|
535
567
|
@media (min-width: 768px) {
|
|
568
|
+
/* LOAD-BEARING !important: wm.css declares `.wm-win.wm-max{top:0!important;
|
|
569
|
+
* height:100%!important}` (wm.css:137-143). Only another !important can beat
|
|
570
|
+
* an !important, regardless of specificity. */
|
|
536
571
|
.ds-247420 .wm-win.wm-max {
|
|
537
572
|
top: var(--os-bar-h) !important;
|
|
538
573
|
height: calc(100% - (var(--os-bar-h) * 2)) !important;
|
|
539
574
|
}
|
|
540
575
|
}
|
|
541
|
-
/* Instance filtering hides off-instance windows via class, not inline style.
|
|
576
|
+
/* Instance filtering hides off-instance windows via class, not inline style.
|
|
577
|
+
* LOAD-BEARING !important: must beat wm.css's `.wm-win.wm-max{...!important}`
|
|
578
|
+
* geometry and any display set by the window's own state classes — a hidden
|
|
579
|
+
* window must stay hidden no matter which layout rule matched it. */
|
|
542
580
|
.ds-247420 .wm-win.wm-inst-hidden,
|
|
543
581
|
.wm-win.wm-inst-hidden { display: none !important; }
|
|
582
|
+
/* LOAD-BEARING !important: `.os-menubar`/`.os-taskbar` carry `display:flex`
|
|
583
|
+
* from rules at equal-or-higher specificity in this sheet and in the responsive
|
|
584
|
+
* bands below; the tilde-key hide must beat all of them unconditionally. */
|
|
544
585
|
html.bars-hidden .os-menubar,
|
|
545
586
|
html.bars-hidden .os-taskbar { display: none !important; }
|
|
546
587
|
.ds-247420 .os-task { border-radius: var(--r-pill, 999px); }
|
|
@@ -553,12 +594,12 @@ html.bars-hidden .os-taskbar { display: none !important; }
|
|
|
553
594
|
|
|
554
595
|
/* OS-shell z-index layering: .os-root above .wm-root so its .os-menu dropdowns
|
|
555
596
|
* paint above windows. */
|
|
556
|
-
.ds-247420 .os-root { z-index:
|
|
557
|
-
.ds-247420 .os-menubar { z-index:
|
|
558
|
-
.ds-247420 .os-taskbar { z-index:
|
|
559
|
-
.ds-247420 .os-menu { z-index:
|
|
560
|
-
.ds-247420 .wm-root { z-index:
|
|
561
|
-
.ds-247420 .launcher-dock { z-index:
|
|
597
|
+
.ds-247420 .os-root { z-index: calc(var(--z-dock) + 2); }
|
|
598
|
+
.ds-247420 .os-menubar { z-index: calc(var(--z-dock) + 1); position: relative; }
|
|
599
|
+
.ds-247420 .os-taskbar { z-index: calc(var(--z-dock) + 1); position: relative; }
|
|
600
|
+
.ds-247420 .os-menu { z-index: var(--z-dropdown); }
|
|
601
|
+
.ds-247420 .wm-root { z-index: var(--z-window); }
|
|
602
|
+
.ds-247420 .launcher-dock { z-index: var(--z-dock); }
|
|
562
603
|
|
|
563
604
|
/* Touch/gesture hardening. */
|
|
564
605
|
html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-text-size-adjust: 100%; }
|
|
@@ -572,7 +613,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
572
613
|
position: fixed;
|
|
573
614
|
pointer-events: none;
|
|
574
615
|
display: none;
|
|
575
|
-
z-index:
|
|
616
|
+
z-index: calc(var(--z-window) + 1);
|
|
576
617
|
background: color-mix(in oklab, var(--os-accent) 20%, transparent);
|
|
577
618
|
border: 2px solid var(--os-accent);
|
|
578
619
|
border-radius: var(--r-0);
|
|
@@ -590,22 +631,22 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
590
631
|
left: 50%;
|
|
591
632
|
top: 50%;
|
|
592
633
|
transform: translate(-50%, -50%);
|
|
593
|
-
padding:
|
|
634
|
+
padding: var(--space-3) var(--space-3-5);
|
|
594
635
|
background: var(--os-bg-2);
|
|
595
636
|
border: 1px solid var(--os-accent);
|
|
596
637
|
border-radius: var(--r-0);
|
|
597
|
-
z-index:
|
|
638
|
+
z-index: var(--z-modal);
|
|
598
639
|
font-family: var(--ff-ui);
|
|
599
640
|
color: var(--os-fg);
|
|
600
641
|
min-width: 280px;
|
|
601
642
|
box-shadow: var(--shadow-overlay);
|
|
602
643
|
}
|
|
603
644
|
.ds-247420 .wm-switcher-item {
|
|
604
|
-
padding:
|
|
645
|
+
padding: var(--space-2) var(--space-2-75);
|
|
605
646
|
border-radius: var(--r-0);
|
|
606
647
|
display: flex;
|
|
607
648
|
align-items: center;
|
|
608
|
-
gap:
|
|
649
|
+
gap: var(--space-2-5);
|
|
609
650
|
}
|
|
610
651
|
.ds-247420 .wm-switcher-item.active {
|
|
611
652
|
background: var(--os-accent);
|
|
@@ -637,16 +678,16 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
637
678
|
}
|
|
638
679
|
|
|
639
680
|
/* ---- Session-UX surfaces: chips + modals + empty state ---- */
|
|
640
|
-
.ds-247420 .os-instances { display: flex; gap:
|
|
681
|
+
.ds-247420 .os-instances { display: flex; gap: var(--space-1-75); align-items: center; flex: 0 1 auto; min-width: 0; height: var(--os-bar-h, 34px); overflow-x: auto; overflow-y: hidden; padding: 0 var(--space-1); scrollbar-width: none; }
|
|
641
682
|
.ds-247420 .os-instances::-webkit-scrollbar { display: none; }
|
|
642
683
|
|
|
643
684
|
.ds-247420 .tb-sess-chip {
|
|
644
|
-
display: inline-flex; align-items: center; gap:
|
|
645
|
-
height: 22px; padding: 0
|
|
685
|
+
display: inline-flex; align-items: center; gap: var(--space-1-75);
|
|
686
|
+
height: 22px; padding: 0 var(--space-1-75) 0 var(--space-2);
|
|
646
687
|
border-radius: var(--r-pill, 999px);
|
|
647
688
|
background: color-mix(in oklab, var(--fg) 6%, transparent);
|
|
648
689
|
color: var(--fg);
|
|
649
|
-
font-family: var(--ff-ui); font-size:
|
|
690
|
+
font-family: var(--ff-ui); font-size: var(--fs-nano); font-weight: 500;
|
|
650
691
|
cursor: pointer;
|
|
651
692
|
border: 1px solid transparent;
|
|
652
693
|
transition: background 120ms ease, border-color 120ms ease;
|
|
@@ -663,43 +704,43 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
663
704
|
.ds-247420 .tb-sess-label { max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
664
705
|
.ds-247420 .tb-sess-badge {
|
|
665
706
|
display: inline-flex; align-items: center; justify-content: center;
|
|
666
|
-
min-width: 16px; height: 14px; padding: 0
|
|
707
|
+
min-width: 16px; height: 14px; padding: 0 var(--space-1);
|
|
667
708
|
border-radius: var(--r-0);
|
|
668
709
|
background: color-mix(in oklab, var(--fg) 14%, transparent);
|
|
669
|
-
font-size:
|
|
710
|
+
font-size: var(--fs-pico); font-weight: 600; line-height: 1;
|
|
670
711
|
}
|
|
671
712
|
.ds-247420 .tb-sess-chip.active .tb-sess-badge { background: color-mix(in oklab, var(--os-accent) 30%, transparent); }
|
|
672
713
|
.ds-247420 .tb-sess-x {
|
|
673
714
|
width: 16px; height: 16px; line-height: 14px; text-align: center;
|
|
674
715
|
border: 0; padding: 0; background: transparent;
|
|
675
716
|
border-radius: 50%; cursor: pointer; color: inherit;
|
|
676
|
-
font-size:
|
|
717
|
+
font-size: var(--fs-xs); font-weight: 600;
|
|
677
718
|
opacity: 0.55; transition: opacity 120ms ease, background 120ms ease;
|
|
678
719
|
}
|
|
679
720
|
.ds-247420 .tb-sess-chip:hover .tb-sess-x { opacity: 1; }
|
|
680
721
|
.ds-247420 .tb-sess-x:hover { background: color-mix(in oklab, var(--danger) 30%, transparent); color: var(--on-color); }
|
|
681
722
|
|
|
682
723
|
.ds-247420 .tb-sess-add {
|
|
683
|
-
display: inline-flex; align-items: center; gap:
|
|
684
|
-
height: 22px; padding: 0
|
|
724
|
+
display: inline-flex; align-items: center; gap: var(--space-1);
|
|
725
|
+
height: 22px; padding: 0 var(--space-2-5);
|
|
685
726
|
border: 1px dashed color-mix(in oklab, var(--fg) 30%, transparent);
|
|
686
727
|
background: transparent;
|
|
687
728
|
border-radius: var(--r-pill, 999px);
|
|
688
|
-
font-family: var(--ff-ui); font-size:
|
|
729
|
+
font-family: var(--ff-ui); font-size: var(--fs-nano); font-weight: 500;
|
|
689
730
|
color: var(--fg);
|
|
690
731
|
cursor: pointer;
|
|
691
|
-
margin-left:
|
|
732
|
+
margin-left: var(--space-1-75);
|
|
692
733
|
transition: border-color 120ms ease, background 120ms ease;
|
|
693
734
|
}
|
|
694
735
|
.ds-247420 .tb-sess-add:hover {
|
|
695
736
|
border-color: var(--os-accent);
|
|
696
737
|
background: color-mix(in oklab, var(--os-accent) 8%, transparent);
|
|
697
738
|
}
|
|
698
|
-
.ds-247420 .tb-sess-add-plus { font-size:
|
|
739
|
+
.ds-247420 .tb-sess-add-plus { font-size: var(--fs-tiny); line-height: 1; }
|
|
699
740
|
.ds-247420 .tb-sess-add-lbl { line-height: 1; }
|
|
700
741
|
|
|
701
742
|
.tb-sess-overlay {
|
|
702
|
-
position: fixed; inset: 0; z-index:
|
|
743
|
+
position: fixed; inset: 0; z-index: var(--z-modal);
|
|
703
744
|
background: var(--scrim);
|
|
704
745
|
display: flex; align-items: center; justify-content: center;
|
|
705
746
|
animation: tb-sess-fade 120ms ease;
|
|
@@ -715,29 +756,29 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
715
756
|
overflow: hidden;
|
|
716
757
|
font-family: var(--ff-ui);
|
|
717
758
|
}
|
|
718
|
-
.tb-sess-modal-head { display: flex; align-items: center; justify-content: space-between; padding:
|
|
719
|
-
.tb-sess-modal-title { font-weight: 600; font-size:
|
|
720
|
-
.tb-sess-modal-x { background: transparent; border: 0; font-size:
|
|
721
|
-
.tb-sess-modal-body { padding:
|
|
722
|
-
.tb-sess-modal-lbl { font-size:
|
|
759
|
+
.tb-sess-modal-head { display: flex; align-items: center; justify-content: space-between; padding: var(--space-2-75) var(--space-3); border-bottom: 1px solid color-mix(in oklab, var(--fg) 8%, transparent); }
|
|
760
|
+
.tb-sess-modal-title { font-weight: 600; font-size: var(--fs-xs); }
|
|
761
|
+
.tb-sess-modal-x { background: transparent; border: 0; font-size: var(--fs-xl); line-height: 1; cursor: pointer; color: inherit; padding: 0 var(--space-1); }
|
|
762
|
+
.tb-sess-modal-body { padding: var(--space-3); display: flex; flex-direction: column; gap: var(--space-2); }
|
|
763
|
+
.tb-sess-modal-lbl { font-size: var(--fs-nano); font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; opacity: 0.7; }
|
|
723
764
|
.tb-sess-modal-input {
|
|
724
765
|
width: 100%; box-sizing: border-box;
|
|
725
|
-
height: 32px; padding: 0
|
|
766
|
+
height: 32px; padding: 0 var(--space-2-5);
|
|
726
767
|
border: 1px solid color-mix(in oklab, var(--fg) 20%, transparent);
|
|
727
768
|
border-radius: var(--r-0);
|
|
728
769
|
background: color-mix(in oklab, var(--fg) 6%, var(--bg));
|
|
729
770
|
color: inherit;
|
|
730
|
-
font-family: inherit; font-size:
|
|
771
|
+
font-family: inherit; font-size: var(--fs-tiny);
|
|
731
772
|
}
|
|
732
773
|
.tb-sess-modal-input:focus { outline: none; border-color: var(--os-accent); box-shadow: 0 0 0 3px color-mix(in oklab, var(--os-accent) 20%, transparent); }
|
|
733
|
-
.tb-sess-modal-hint { font-size:
|
|
734
|
-
.tb-sess-modal-msg { font-size:
|
|
735
|
-
.tb-sess-modal-foot { display: flex; justify-content: flex-end; gap:
|
|
774
|
+
.tb-sess-modal-hint { font-size: var(--fs-nano); opacity: 0.7; }
|
|
775
|
+
.tb-sess-modal-msg { font-size: var(--fs-tiny); }
|
|
776
|
+
.tb-sess-modal-foot { display: flex; justify-content: flex-end; gap: var(--space-2); padding: var(--space-2-75) var(--space-3); border-top: 1px solid color-mix(in oklab, var(--fg) 8%, transparent); }
|
|
736
777
|
.tb-sess-modal-btn {
|
|
737
778
|
height: 28px; padding: 0 14px;
|
|
738
779
|
border-radius: var(--r-0); border: 1px solid color-mix(in oklab, var(--fg) 20%, transparent);
|
|
739
780
|
background: transparent; color: inherit;
|
|
740
|
-
font-family: inherit; font-size:
|
|
781
|
+
font-family: inherit; font-size: var(--fs-micro); font-weight: 500; cursor: pointer;
|
|
741
782
|
transition: background 120ms ease, border-color 120ms ease;
|
|
742
783
|
}
|
|
743
784
|
.tb-sess-modal-btn:hover { background: color-mix(in oklab, var(--fg) 6%, transparent); }
|
|
@@ -747,7 +788,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
747
788
|
.tb-sess-modal-btn.danger:hover { background: color-mix(in oklab, var(--danger) 80%, var(--ink)); }
|
|
748
789
|
|
|
749
790
|
.tb-sess-empty {
|
|
750
|
-
position: fixed; inset: 0; z-index:
|
|
791
|
+
position: fixed; inset: 0; z-index: var(--z-window);
|
|
751
792
|
display: flex; align-items: center; justify-content: center;
|
|
752
793
|
pointer-events: none;
|
|
753
794
|
}
|
|
@@ -758,17 +799,17 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
758
799
|
border: 1px solid color-mix(in oklab, var(--fg) 14%, transparent);
|
|
759
800
|
border-radius: var(--r-2);
|
|
760
801
|
box-shadow: var(--shadow-3);
|
|
761
|
-
padding:
|
|
802
|
+
padding: var(--space-5) 40px; text-align: center;
|
|
762
803
|
font-family: var(--ff-ui);
|
|
763
804
|
max-width: 420px;
|
|
764
805
|
}
|
|
765
|
-
.tb-sess-empty-title { font-size:
|
|
766
|
-
.tb-sess-empty-sub { font-size:
|
|
806
|
+
.tb-sess-empty-title { font-size: var(--fs-lg); font-weight: 600; margin-bottom: var(--space-1-75); }
|
|
807
|
+
.tb-sess-empty-sub { font-size: var(--fs-tiny); opacity: 0.7; margin-bottom: var(--space-3-5); }
|
|
767
808
|
.tb-sess-empty-cta {
|
|
768
|
-
height: 40px; padding: 0
|
|
809
|
+
height: 40px; padding: 0 var(--space-4);
|
|
769
810
|
background: var(--os-accent); color: var(--on-color);
|
|
770
811
|
border: 0; border-radius: var(--r-pill, 999px);
|
|
771
|
-
font-family: inherit; font-size:
|
|
812
|
+
font-family: inherit; font-size: var(--fs-xs); font-weight: 600;
|
|
772
813
|
cursor: pointer;
|
|
773
814
|
transition: transform 120ms ease, box-shadow 120ms ease;
|
|
774
815
|
}
|
|
@@ -776,30 +817,30 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
776
817
|
|
|
777
818
|
/* ---- Workspaces app — full-window session manager card grid ---- */
|
|
778
819
|
.ds-247420 .tb-sessions-app { display: flex; flex-direction: column; height: 100%; font-family: var(--ff-ui); color: var(--fg); background: var(--bg); }
|
|
779
|
-
.ds-247420 .tb-sessions-bar { display: flex; align-items: center; gap:
|
|
780
|
-
.ds-247420 .tb-sessions-title { font-weight: 600; font-size:
|
|
781
|
-
.ds-247420 .tb-sessions-count { font-size:
|
|
820
|
+
.ds-247420 .tb-sessions-bar { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2-5) 14px; border-bottom: 1px solid color-mix(in oklab, var(--fg) 10%, transparent); }
|
|
821
|
+
.ds-247420 .tb-sessions-title { font-weight: 600; font-size: var(--fs-xs); }
|
|
822
|
+
.ds-247420 .tb-sessions-count { font-size: var(--fs-micro); opacity: 0.6; margin-left: var(--space-1); }
|
|
782
823
|
.ds-247420 .tb-sessions-spacer { flex: 1; }
|
|
783
|
-
.ds-247420 .tb-sessions-btn { height: 28px; padding: 0
|
|
824
|
+
.ds-247420 .tb-sessions-btn { height: 28px; padding: 0 var(--space-2-75); border-radius: var(--r-0); border: 1px solid color-mix(in oklab, var(--fg) 20%, transparent); background: transparent; color: inherit; font-size: var(--fs-micro); font-weight: 500; cursor: pointer; font-family: inherit; }
|
|
784
825
|
.ds-247420 .tb-sessions-btn:hover { background: color-mix(in oklab, var(--fg) 6%, transparent); }
|
|
785
826
|
.ds-247420 .tb-sessions-btn.primary { background: var(--os-accent); color: var(--on-color); border-color: var(--os-accent); }
|
|
786
827
|
.ds-247420 .tb-sessions-btn.danger { background: var(--danger); color: var(--on-color); border-color: var(--danger); }
|
|
787
828
|
.ds-247420 .tb-sessions-btn:disabled { opacity: 0.4; cursor: not-allowed; }
|
|
788
|
-
.ds-247420 .tb-sessions-grid { flex: 1; overflow: auto; padding: 14px; display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap:
|
|
789
|
-
.ds-247420 .tb-sessions-card { padding:
|
|
829
|
+
.ds-247420 .tb-sessions-grid { flex: 1; overflow: auto; padding: 14px; display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: var(--space-2-75); align-content: start; }
|
|
830
|
+
.ds-247420 .tb-sessions-card { padding: var(--space-2-75); border-radius: var(--r-1, 10px); border: 1px solid color-mix(in oklab, var(--fg) 12%, transparent); background: color-mix(in oklab, var(--fg) 3%, transparent); display: flex; flex-direction: column; gap: var(--space-2); transition: border-color 120ms ease, transform 120ms ease; }
|
|
790
831
|
.ds-247420 .tb-sessions-card:hover { border-color: var(--os-accent); }
|
|
791
832
|
.ds-247420 .tb-sessions-card.active { border-color: var(--os-accent); box-shadow: 0 0 0 2px color-mix(in oklab, var(--os-accent) 30%, transparent); }
|
|
792
|
-
.ds-247420 .tb-sessions-card-head { display: flex; align-items: center; gap:
|
|
833
|
+
.ds-247420 .tb-sessions-card-head { display: flex; align-items: center; gap: var(--space-2); }
|
|
793
834
|
.ds-247420 .tb-sessions-card-check { width: 14px; height: 14px; cursor: pointer; flex: 0 0 14px; }
|
|
794
|
-
.ds-247420 .tb-sessions-card-name { font-weight: 600; font-size:
|
|
835
|
+
.ds-247420 .tb-sessions-card-name { font-weight: 600; font-size: var(--fs-tiny); flex: 1; outline: none; padding: var(--space-hair) var(--space-1); border-radius: var(--r-0); }
|
|
795
836
|
.ds-247420 .tb-sessions-card-name[contenteditable="true"] { background: color-mix(in oklab, var(--fg) 8%, transparent); }
|
|
796
|
-
.ds-247420 .tb-sessions-card-id { font-family: var(--os-mono, monospace); font-size:
|
|
797
|
-
.ds-247420 .tb-sessions-card-stats { font-size:
|
|
798
|
-
.ds-247420 .tb-sessions-card-actions { display: flex; gap:
|
|
799
|
-
.ds-247420 .tb-sessions-card-actions button { flex: 1; height: 24px; font-size:
|
|
837
|
+
.ds-247420 .tb-sessions-card-id { font-family: var(--os-mono, monospace); font-size: var(--fs-pico); opacity: 0.5; }
|
|
838
|
+
.ds-247420 .tb-sessions-card-stats { font-size: var(--fs-nano); opacity: 0.7; display: flex; gap: var(--space-2-75); }
|
|
839
|
+
.ds-247420 .tb-sessions-card-actions { display: flex; gap: var(--space-1-75); margin-top: var(--space-1); }
|
|
840
|
+
.ds-247420 .tb-sessions-card-actions button { flex: 1; height: 24px; font-size: var(--fs-nano); padding: 0 var(--space-2); border-radius: var(--r-0); border: 1px solid color-mix(in oklab, var(--fg) 16%, transparent); background: transparent; color: inherit; cursor: pointer; font-family: inherit; }
|
|
800
841
|
.ds-247420 .tb-sessions-card-actions button:hover { background: color-mix(in oklab, var(--fg) 6%, transparent); }
|
|
801
842
|
.ds-247420 .tb-sessions-card-actions button.danger:hover { background: var(--danger); color: var(--on-color); border-color: var(--danger); }
|
|
802
|
-
.ds-247420 .tb-sessions-empty-mid { padding: 40px; text-align: center; opacity: 0.6; font-size:
|
|
843
|
+
.ds-247420 .tb-sessions-empty-mid { padding: 40px; text-align: center; opacity: 0.6; font-size: var(--fs-tiny); }
|
|
803
844
|
|
|
804
845
|
/* ---- prefers-contrast: more — strengthen borders + focus so the translucent
|
|
805
846
|
chrome stays legible under forced/high-contrast user settings. ---- */
|
|
@@ -816,11 +857,18 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
816
857
|
|
|
817
858
|
/* ---- print: a web-OS desktop has no meaningful print form. Suppress the
|
|
818
859
|
live chrome so a Ctrl+P does not waste pages on translucent panels. ---- */
|
|
860
|
+
/* LOAD-BEARING !important throughout this block. Print must defeat two things
|
|
861
|
+
* no selector can outrank: (1) wm.css's `.wm-win.wm-max{left/top/width/height
|
|
862
|
+
* !important}` and its mobile `.wm-win{...!important}` band, and (2) the
|
|
863
|
+
* INLINE styles createWM()/renderWindow() write directly onto .wm-win/.wm-canvas
|
|
864
|
+
* for drag, resize and pan (element style attribute beats every stylesheet
|
|
865
|
+
* rule). Flattening the desktop to static flow for print is only possible by
|
|
866
|
+
* force. Do not remove. */
|
|
819
867
|
@media print {
|
|
820
868
|
.os-menubar, .os-taskbar, .wm-snap-preview,
|
|
821
869
|
.tb-sess-overlay, .tb-switching, .wm-switcher { display: none !important; }
|
|
822
870
|
.wm-root, .wm-canvas { position: static !important; transform: none !important; overflow: visible !important; }
|
|
823
|
-
.wm-win { position: static !important; box-shadow: none !important; border: 1px solid var(--fg) !important; page-break-inside: avoid; margin: 0 0
|
|
871
|
+
.wm-win { position: static !important; box-shadow: none !important; border: 1px solid var(--fg) !important; page-break-inside: avoid; margin: 0 0 var(--space-2-75); width: auto !important; height: auto !important; }
|
|
824
872
|
.wm-win.wm-min { display: none !important; }
|
|
825
873
|
}
|
|
826
874
|
|
|
@@ -835,7 +883,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
835
883
|
.ds-247420 .wm-body:has(> .freddie-chat-wrap) { display: flex; flex-direction: column; padding: 0; }
|
|
836
884
|
.ds-247420 .freddie-chat-wrap { position: absolute; inset: 0; display: flex; flex-direction: column; min-height: 0; }
|
|
837
885
|
.ds-247420 .freddie-chat-wrap > freddie-chat { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }
|
|
838
|
-
.ds-247420 .cc-strip { flex: 0 0 auto; font-size:
|
|
886
|
+
.ds-247420 .cc-strip { flex: 0 0 auto; font-size: var(--fs-micro); border-bottom: 1px solid color-mix(in oklab, var(--fg) 16%, transparent); }
|
|
839
887
|
.ds-247420 .cc-toggle { all: unset; cursor: pointer; display: inline-flex; align-items: center; gap: .4em; padding: .35em .7em; color: var(--fg, inherit); opacity: .75; }
|
|
840
888
|
.ds-247420 .cc-toggle:hover { opacity: 1; }
|
|
841
889
|
.ds-247420 .cc-toggle.cc-open { opacity: 1; font-weight: 600; }
|
|
@@ -844,12 +892,12 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
844
892
|
.ds-247420 .cc-row { display: flex; gap: .6em; flex-wrap: wrap; }
|
|
845
893
|
.ds-247420 .cc-row > .cc-field { flex: 1 1 140px; min-width: 0; }
|
|
846
894
|
.ds-247420 .cc-field { display: flex; flex-direction: column; gap: .2em; }
|
|
847
|
-
.ds-247420 .cc-field-label { font-size:
|
|
895
|
+
.ds-247420 .cc-field-label { font-size: var(--fs-nano); opacity: .65; text-transform: lowercase; }
|
|
848
896
|
.ds-247420 .cc-strip select,
|
|
849
|
-
.ds-247420 .cc-strip input { font: inherit; font-size:
|
|
897
|
+
.ds-247420 .cc-strip input { font: inherit; font-size: var(--fs-micro); padding: .3em .4em; width: 100%; box-sizing: border-box; background: var(--panel-1, transparent); color: var(--fg, inherit); border: 1px solid color-mix(in oklab, var(--fg) 18%, transparent); border-radius: var(--r-0); }
|
|
850
898
|
.ds-247420 .cc-acp-mode-wrap { display: flex; align-items: center; gap: .4em; }
|
|
851
899
|
.ds-247420 .cc-acp-mode-wrap select { flex: 1; }
|
|
852
|
-
.ds-247420 .cc-acp-status { opacity: .5; font-size:
|
|
900
|
+
.ds-247420 .cc-acp-status { opacity: .5; font-size: var(--fs-tiny); }
|
|
853
901
|
.ds-247420 .cc-acp-status.cc-reachable { opacity: 1; color: var(--os-accent, #247420); }
|
|
854
902
|
.ds-247420 .cc-details > summary { cursor: pointer; opacity: .7; padding: .2em 0; }
|
|
855
903
|
.ds-247420 .cc-skills,
|
|
@@ -859,7 +907,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
859
907
|
.ds-247420 .cc-empty { opacity: .5; font-style: italic; }
|
|
860
908
|
|
|
861
909
|
/* ---- fsbrowse files app (was: docs/fsbrowse-app.js ensureStyles) ---- */
|
|
862
|
-
.ds-247420 .fsb-root { position: absolute; inset: 0; display: flex; flex-direction: column; min-height: 0; font-size:
|
|
910
|
+
.ds-247420 .fsb-root { position: absolute; inset: 0; display: flex; flex-direction: column; min-height: 0; font-size: var(--fs-tiny); color: var(--fg, inherit); }
|
|
863
911
|
.ds-247420 .fsb-bar { flex: 0 0 auto; display: flex; align-items: center; gap: .4em; padding: .45em .6em; border-bottom: 1px solid color-mix(in oklab, var(--fg) 16%, transparent); flex-wrap: wrap; }
|
|
864
912
|
.ds-247420 .fsb-crumbs { flex: 1; display: flex; align-items: center; gap: .2em; min-width: 0; overflow: auto; white-space: nowrap; }
|
|
865
913
|
.ds-247420 .fsb-crumb { cursor: pointer; opacity: .75; text-decoration: none; color: inherit; }
|
|
@@ -873,17 +921,17 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
873
921
|
.ds-247420 .fsb-row:focus-visible { outline: 2px solid var(--os-accent); outline-offset: -2px; background: color-mix(in oklab, var(--fg) 6%, transparent); }
|
|
874
922
|
.ds-247420 .fsb-icon { width: 1.3em; text-align: center; flex: 0 0 auto; }
|
|
875
923
|
.ds-247420 .fsb-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
876
|
-
.ds-247420 .fsb-size { opacity: .55; font-size:
|
|
924
|
+
.ds-247420 .fsb-size { opacity: .55; font-size: var(--fs-nano); font-variant-numeric: tabular-nums; flex: 0 0 auto; }
|
|
877
925
|
.ds-247420 .fsb-actions { display: flex; gap: .3em; flex: 0 0 auto; opacity: 0; }
|
|
878
926
|
/* Reveal row actions on hover OR keyboard focus-within OR coarse-pointer (touch),
|
|
879
927
|
* so they aren't hover-only dead controls for keyboard/touch users. */
|
|
880
928
|
.ds-247420 .fsb-row:hover .fsb-actions,
|
|
881
929
|
.ds-247420 .fsb-row:focus-within .fsb-actions { opacity: 1; }
|
|
882
930
|
@media (hover: none) { .ds-247420 .fsb-actions { opacity: 1; } }
|
|
883
|
-
.ds-247420 .fsb-act { all: unset; cursor: pointer; padding: .1em .35em; border-radius: var(--r-0); opacity: .7; font-size:
|
|
931
|
+
.ds-247420 .fsb-act { all: unset; cursor: pointer; padding: .1em .35em; border-radius: var(--r-0); opacity: .7; font-size: var(--fs-micro); }
|
|
884
932
|
.ds-247420 .fsb-act:hover { opacity: 1; background: color-mix(in oklab, var(--fg) 12%, transparent); }
|
|
885
933
|
.ds-247420 .fsb-empty { opacity: .5; padding: 1.5em; text-align: center; font-style: italic; }
|
|
886
|
-
.ds-247420 .fsb-view { flex: 1; min-height: 0; overflow: auto; margin: 0; padding: .7em; white-space: pre-wrap; word-break: break-word; font:
|
|
934
|
+
.ds-247420 .fsb-view { flex: 1; min-height: 0; overflow: auto; margin: 0; padding: .7em; white-space: pre-wrap; word-break: break-word; font: var(--fs-micro)/1.5 var(--os-mono, ui-monospace, monospace); background: var(--panel-1, transparent); }
|
|
887
935
|
.ds-247420 .fsb-dropping { outline: 2px dashed var(--os-accent, #247420); outline-offset: -6px; }
|
|
888
936
|
|
|
889
937
|
/* ---- wm canvas (infinite zoom/pan surface — was: docs/desktop-camera.js canvas.style.cssText) ----
|
|
@@ -893,33 +941,37 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
893
941
|
.ds-247420 .wm-canvas { position: absolute; inset: 0; transform-origin: 0 0; will-change: transform; }
|
|
894
942
|
|
|
895
943
|
/* ---- wm context menu (was: docs/wm.js showWindowMenu cssText) ---- */
|
|
896
|
-
|
|
897
|
-
.ds-247420
|
|
944
|
+
/* No var() fallbacks here: colors_and_type.css is guaranteed loaded first for
|
|
945
|
+
* every .ds-247420 consumer (see the file header), and the old `#1a1a1a` /
|
|
946
|
+
* `#fff` fallbacks were baked DARK values that would have rendered white text
|
|
947
|
+
* on a near-white panel in paper mode had they ever fired. */
|
|
948
|
+
.ds-247420 .wm-context-menu { position: fixed; background: var(--panel-2); border: 1px solid color-mix(in oklab, var(--fg) 18%, transparent); border-radius: var(--r-0); z-index: var(--z-dropdown); font-family: var(--ff-ui); color: var(--fg); min-width: 140px; box-shadow: 0 var(--space-2) var(--space-5) rgba(0, 0, 0, .35); padding: var(--space-1); }
|
|
949
|
+
.ds-247420 .wm-context-menu-item { display: block; width: 100%; padding: 7px var(--space-2-5); border: none; border-radius: var(--r-0); background: none; color: inherit; font-family: inherit; text-align: left; cursor: pointer; font-size: var(--fs-tiny); }
|
|
898
950
|
.ds-247420 .wm-context-menu-item:hover { background: color-mix(in oklab, var(--fg) 8%, transparent); }
|
|
899
951
|
|
|
900
952
|
/* ---- todo app (was: docs/apps.js todo-app cssText) ---- */
|
|
901
|
-
.ds-247420 .tb-todo-bar { display: flex; gap:
|
|
902
|
-
.ds-247420 .tb-todo-input { flex: 1; padding:
|
|
903
|
-
.ds-247420 .tb-todo-list { list-style: none; padding: 0; margin:
|
|
904
|
-
.ds-247420 .tb-todo-footer { display: flex; gap:
|
|
905
|
-
.ds-247420 .tb-todo-status { margin-top:
|
|
906
|
-
.ds-247420 .tb-todo-item { display: flex; gap:
|
|
953
|
+
.ds-247420 .tb-todo-bar { display: flex; gap: var(--space-1-75); margin-bottom: var(--space-2); }
|
|
954
|
+
.ds-247420 .tb-todo-input { flex: 1; padding: var(--space-1-5) var(--space-2); border: 1px solid color-mix(in oklab, var(--fg) 18%, transparent); border-radius: var(--r-0); font: inherit; background: var(--panel-1, transparent); color: var(--fg, inherit); }
|
|
955
|
+
.ds-247420 .tb-todo-list { list-style: none; padding: 0; margin: var(--space-1-75) 0; }
|
|
956
|
+
.ds-247420 .tb-todo-footer { display: flex; gap: var(--space-2); align-items: center; margin-top: var(--space-1-75); font-size: var(--fs-nano); }
|
|
957
|
+
.ds-247420 .tb-todo-status { margin-top: var(--space-2-5); font-size: var(--fs-nano); color: color-mix(in oklab, var(--fg) 55%, transparent); padding: var(--space-1-75) var(--space-2); background: var(--panel-1, transparent); border-radius: var(--r-0); min-height: 14px; }
|
|
958
|
+
.ds-247420 .tb-todo-item { display: flex; gap: var(--space-2); align-items: center; padding: var(--space-1-5) var(--space-1-75); border-bottom: 1px solid color-mix(in oklab, var(--fg) 8%, transparent); }
|
|
907
959
|
.ds-247420 .tb-todo-text { flex: 1; }
|
|
908
960
|
.ds-247420 .tb-todo-text.is-done { text-decoration: line-through; color: color-mix(in oklab, var(--fg) 45%, transparent); }
|
|
909
|
-
.ds-247420 .tb-todo-del { padding:
|
|
961
|
+
.ds-247420 .tb-todo-del { padding: var(--space-hair) var(--space-2); }
|
|
910
962
|
|
|
911
963
|
/* ---- freddie keys panel (was: docs/freddie-keys.js cssText) ---- */
|
|
912
|
-
.ds-247420 .fk-root { padding:
|
|
913
|
-
.ds-247420 .fk-status { margin-top:
|
|
914
|
-
.ds-247420 .fk-row { display: grid; grid-template-columns: 140px 1fr auto auto; gap:
|
|
915
|
-
.ds-247420 .fk-input { font-family: var(--os-mono, monospace); font-size:
|
|
916
|
-
.ds-247420 .fk-title { font-weight: 600; margin-bottom:
|
|
917
|
-
.ds-247420 .fk-nim-wrap { display: flex; gap:
|
|
918
|
-
.ds-247420 .fk-nim-in { font-family: var(--os-mono, monospace); font-size:
|
|
919
|
-
.ds-247420 .fk-badge { font-size:
|
|
964
|
+
.ds-247420 .fk-root { padding: var(--space-2-75); overflow: auto; height: 100%; font-family: var(--os-mono, monospace); font-size: var(--fs-micro); }
|
|
965
|
+
.ds-247420 .fk-status { margin-top: var(--space-2); color: color-mix(in oklab, var(--fg) 60%, transparent); min-height: 1.2em; }
|
|
966
|
+
.ds-247420 .fk-row { display: grid; grid-template-columns: 140px 1fr auto auto; gap: var(--space-1-75); align-items: center; margin: var(--space-hair) 0; }
|
|
967
|
+
.ds-247420 .fk-input { font-family: var(--os-mono, monospace); font-size: var(--fs-nano); padding: var(--space-hair) var(--space-1); }
|
|
968
|
+
.ds-247420 .fk-title { font-weight: 600; margin-bottom: var(--space-2); }
|
|
969
|
+
.ds-247420 .fk-nim-wrap { display: flex; gap: var(--space-1-75); align-items: center; margin: var(--space-1) 0 var(--space-2-5) 0; }
|
|
970
|
+
.ds-247420 .fk-nim-in { font-family: var(--os-mono, monospace); font-size: var(--fs-nano); padding: var(--space-hair) var(--space-1); flex: 1; }
|
|
971
|
+
.ds-247420 .fk-badge { font-size: var(--fs-pico); padding: var(--space-hair) var(--space-1-75); border: 1px solid color-mix(in oklab, var(--fg) 18%, transparent); border-radius: var(--r-hair); color: var(--os-accent, #247420); }
|
|
920
972
|
.ds-247420 .fk-agent-title,
|
|
921
|
-
.ds-247420 .fk-host-title { margin-top: 14px; font-size:
|
|
922
|
-
.ds-247420 .fk-summary { font-size:
|
|
973
|
+
.ds-247420 .fk-host-title { margin-top: 14px; font-size: var(--fs-nano); color: color-mix(in oklab, var(--fg) 60%, transparent); }
|
|
974
|
+
.ds-247420 .fk-summary { font-size: var(--fs-pico); color: color-mix(in oklab, var(--fg) 60%, transparent); margin: var(--space-1-75) 0; }
|
|
923
975
|
|
|
924
976
|
/* ============================================================================
|
|
925
977
|
* Freddie chat redesign (2026-05-30) — extends ds-chat / freddie-chat with
|
|
@@ -930,34 +982,34 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
930
982
|
* ============================================================================ */
|
|
931
983
|
|
|
932
984
|
/* Centered chrome for system/tool/thinking — full row, no avatar column. */
|
|
933
|
-
.ds-247420 .chat-msg.centered { grid-template-columns: 1fr; padding:
|
|
985
|
+
.ds-247420 .chat-msg.centered { grid-template-columns: 1fr; padding: var(--space-1) 12%; }
|
|
934
986
|
.ds-247420 .chat-msg.centered .chat-stack { align-items: center; }
|
|
935
|
-
.ds-247420 .chat-msg.system .chat-bubble { background: transparent; border: 0; font-style: italic; opacity: 0.65; font-size:
|
|
987
|
+
.ds-247420 .chat-msg.system .chat-bubble { background: transparent; border: 0; font-style: italic; opacity: 0.65; font-size: var(--fs-micro); padding: var(--space-1) var(--space-2); text-align: center; max-width: 100%; }
|
|
936
988
|
|
|
937
989
|
/* Tool-call card — collapsible details with status icon + name + label. */
|
|
938
|
-
.ds-247420 .chat-tool { display: block; background: var(--panel-1, color-mix(in oklab, var(--fg) 4%, transparent)); border: 1px solid color-mix(in oklab, var(--fg) 14%, transparent); border-radius: var(--r-0); padding: 0; max-width: min(640px, 92%); overflow: hidden; font-size:
|
|
990
|
+
.ds-247420 .chat-tool { display: block; background: var(--panel-1, color-mix(in oklab, var(--fg) 4%, transparent)); border: 1px solid color-mix(in oklab, var(--fg) 14%, transparent); border-radius: var(--r-0); padding: 0; max-width: min(640px, 92%); overflow: hidden; font-size: var(--fs-micro); }
|
|
939
991
|
.ds-247420 .chat-tool[open] { background: var(--panel-1, color-mix(in oklab, var(--fg) 6%, transparent)); }
|
|
940
992
|
.ds-247420 .chat-tool.tool-error { border-color: color-mix(in oklab, var(--danger, #c0392b) 60%, transparent); }
|
|
941
993
|
.ds-247420 .chat-tool.tool-done { border-color: color-mix(in oklab, var(--os-accent, #247420) 35%, transparent); }
|
|
942
|
-
.ds-247420 .chat-tool-head { display: flex; align-items: center; gap:
|
|
994
|
+
.ds-247420 .chat-tool-head { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-1-75) var(--space-2-5); cursor: pointer; list-style: none; user-select: none; }
|
|
943
995
|
.ds-247420 .chat-tool-head::-webkit-details-marker { display: none; }
|
|
944
|
-
.ds-247420 .chat-tool-icon { display: inline-flex; width: 14px; height: 14px; align-items: center; justify-content: center; font-family: var(--os-mono, monospace); font-size:
|
|
996
|
+
.ds-247420 .chat-tool-icon { display: inline-flex; width: 14px; height: 14px; align-items: center; justify-content: center; font-family: var(--os-mono, monospace); font-size: var(--fs-micro); opacity: 0.7; }
|
|
945
997
|
.ds-247420 .chat-tool.tool-error .chat-tool-icon { color: var(--danger, #c0392b); opacity: 1; }
|
|
946
998
|
.ds-247420 .chat-tool.tool-done .chat-tool-icon { color: var(--os-accent, #247420); opacity: 1; }
|
|
947
999
|
.ds-247420 .chat-tool.tool-running .chat-tool-icon { animation: chat-spin 1.4s linear infinite; }
|
|
948
1000
|
@keyframes chat-spin { to { transform: rotate(360deg); } }
|
|
949
|
-
.ds-247420 .chat-tool-name { font-family: var(--os-mono, monospace); font-weight: 600; font-size:
|
|
950
|
-
.ds-247420 .chat-tool-label { opacity: 0.7; font-size:
|
|
951
|
-
.ds-247420 .chat-tool-status { font-size:
|
|
952
|
-
.ds-247420 .chat-tool-body { padding:
|
|
953
|
-
.ds-247420 .chat-tool-section { display: flex; flex-direction: column; gap:
|
|
954
|
-
.ds-247420 .chat-tool-section-label { font-size:
|
|
955
|
-
.ds-247420 .chat-tool-pre { margin: 0; padding:
|
|
1001
|
+
.ds-247420 .chat-tool-name { font-family: var(--os-mono, monospace); font-weight: 600; font-size: var(--fs-micro); }
|
|
1002
|
+
.ds-247420 .chat-tool-label { opacity: 0.7; font-size: var(--fs-nano); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1003
|
+
.ds-247420 .chat-tool-status { font-size: var(--fs-pico); opacity: 0.55; text-transform: uppercase; letter-spacing: 0.05em; margin-left: auto; }
|
|
1004
|
+
.ds-247420 .chat-tool-body { padding: var(--space-1) var(--space-2-5) var(--space-2-5); display: flex; flex-direction: column; gap: var(--space-2); border-top: 1px solid color-mix(in oklab, var(--fg) 8%, transparent); }
|
|
1005
|
+
.ds-247420 .chat-tool-section { display: flex; flex-direction: column; gap: var(--space-half); }
|
|
1006
|
+
.ds-247420 .chat-tool-section-label { font-size: var(--fs-pico); opacity: 0.5; text-transform: lowercase; letter-spacing: 0.05em; }
|
|
1007
|
+
.ds-247420 .chat-tool-pre { margin: 0; padding: var(--space-1-75) var(--space-2); background: color-mix(in oklab, var(--fg) 4%, transparent); border-radius: var(--r-0); max-height: 200px; overflow: auto; font: var(--fs-nano)/1.45 var(--os-mono, ui-monospace, monospace); white-space: pre-wrap; word-break: break-word; }
|
|
956
1008
|
.ds-247420 .chat-tool-pre.is-error { color: var(--danger, #c0392b); }
|
|
957
1009
|
|
|
958
1010
|
/* Thinking indicator — typing dots + label, transient (assistant-side). */
|
|
959
|
-
.ds-247420 .chat-thinking { display: inline-flex; align-items: center; gap:
|
|
960
|
-
.ds-247420 .chat-thinking-dots { display: inline-flex; gap:
|
|
1011
|
+
.ds-247420 .chat-thinking { display: inline-flex; align-items: center; gap: var(--space-2); background: transparent; border: 0; padding: var(--space-1) var(--space-2); opacity: 0.7; font-size: var(--fs-micro); }
|
|
1012
|
+
.ds-247420 .chat-thinking-dots { display: inline-flex; gap: var(--space-half); }
|
|
961
1013
|
.ds-247420 .chat-thinking-dots span { width: 5px; height: 5px; border-radius: 50%; background: var(--fg); opacity: 0.4; animation: chat-thinking-bounce 1.2s infinite ease-in-out; }
|
|
962
1014
|
.ds-247420 .chat-thinking-dots span:nth-child(2) { animation-delay: 0.15s; }
|
|
963
1015
|
.ds-247420 .chat-thinking-dots span:nth-child(3) { animation-delay: 0.3s; }
|
|
@@ -968,13 +1020,13 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
968
1020
|
}
|
|
969
1021
|
|
|
970
1022
|
/* Empty-state suggestion chips — clickable prompts. */
|
|
971
|
-
.ds-247420 .chat-empty-suggestions { display: flex; flex-wrap: wrap; gap:
|
|
972
|
-
.ds-247420 .chat-empty-suggestion { all: unset; cursor: pointer; font-size:
|
|
1023
|
+
.ds-247420 .chat-empty-suggestions { display: flex; flex-wrap: wrap; gap: var(--space-1-75); justify-content: center; margin-top: var(--space-2-75); max-width: 480px; }
|
|
1024
|
+
.ds-247420 .chat-empty-suggestion { all: unset; cursor: pointer; font-size: var(--fs-micro); padding: var(--space-1-75) var(--space-2-5); border: 1px solid color-mix(in oklab, var(--fg) 18%, transparent); border-radius: var(--r-pill, 999px); background: var(--panel-1, transparent); transition: background 120ms ease, border-color 120ms ease; }
|
|
973
1025
|
.ds-247420 .chat-empty-suggestion:hover { background: color-mix(in oklab, var(--os-accent, #247420) 10%, transparent); border-color: var(--os-accent, #247420); }
|
|
974
1026
|
.ds-247420 .chat-empty-suggestion:focus-visible { outline: 2px solid var(--os-accent, #247420); outline-offset: 2px; }
|
|
975
1027
|
|
|
976
1028
|
/* Cancel-while-generating button replaces send. */
|
|
977
|
-
.ds-247420 .chat-composer .send.cancel { background: var(--danger
|
|
1029
|
+
.ds-247420 .chat-composer .send.cancel { background: var(--danger); color: var(--on-color); }
|
|
978
1030
|
.ds-247420 .chat-composer .send.cancel:hover { background: color-mix(in oklab, var(--danger, #c0392b) 80%, black); }
|
|
979
1031
|
|
|
980
1032
|
/* ============================================================================
|
|
@@ -1025,16 +1077,18 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1025
1077
|
min-height: 0;
|
|
1026
1078
|
height: 100%;
|
|
1027
1079
|
overflow: hidden;
|
|
1028
|
-
/* zero legacy
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1080
|
+
/* zero the legacy `.chat` card treatment (app-shell.css chat-polish.css,
|
|
1081
|
+
which the bundle scopes to `.ds-247420 .chat` = (0,2,0)) leaking onto the
|
|
1082
|
+
host element, which also carries the `.chat` class. The
|
|
1083
|
+
`freddie-chat.chat` / `ds-chat.chat` compound selectors here are (0,2,1) —
|
|
1084
|
+
strictly higher — so these win on SPECIFICITY alone, independent of which
|
|
1085
|
+
sheet loads first. That is why no !important is needed. */
|
|
1086
|
+
margin: 0;
|
|
1087
|
+
padding: 0;
|
|
1088
|
+
gap: 0;
|
|
1089
|
+
max-width: none;
|
|
1090
|
+
background: transparent;
|
|
1091
|
+
border-radius: 0;
|
|
1038
1092
|
}
|
|
1039
1093
|
.ds-247420 freddie-chat > .chat,
|
|
1040
1094
|
.ds-247420 ds-chat > .chat {
|
|
@@ -1051,8 +1105,8 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1051
1105
|
.ds-247420 .chat-head {
|
|
1052
1106
|
display: flex;
|
|
1053
1107
|
align-items: center;
|
|
1054
|
-
gap:
|
|
1055
|
-
padding:
|
|
1108
|
+
gap: var(--space-2);
|
|
1109
|
+
padding: var(--space-2) var(--space-2-75);
|
|
1056
1110
|
border-bottom: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
|
|
1057
1111
|
min-height: 38px;
|
|
1058
1112
|
flex: 0 0 auto;
|
|
@@ -1066,7 +1120,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1066
1120
|
flex-shrink: 0;
|
|
1067
1121
|
}
|
|
1068
1122
|
.ds-247420 .chat-head .ds-chat-title {
|
|
1069
|
-
font-size:
|
|
1123
|
+
font-size: var(--fs-tiny);
|
|
1070
1124
|
font-weight: 600;
|
|
1071
1125
|
margin: 0;
|
|
1072
1126
|
white-space: nowrap;
|
|
@@ -1075,7 +1129,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1075
1129
|
flex-shrink: 0;
|
|
1076
1130
|
}
|
|
1077
1131
|
.ds-247420 .chat-head .sub {
|
|
1078
|
-
font-size:
|
|
1132
|
+
font-size: var(--fs-micro);
|
|
1079
1133
|
opacity: 0.7;
|
|
1080
1134
|
white-space: nowrap;
|
|
1081
1135
|
overflow: hidden;
|
|
@@ -1090,10 +1144,10 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1090
1144
|
min-height: 0;
|
|
1091
1145
|
overflow-y: auto;
|
|
1092
1146
|
overflow-x: hidden;
|
|
1093
|
-
padding:
|
|
1147
|
+
padding: var(--space-2-75);
|
|
1094
1148
|
display: flex;
|
|
1095
1149
|
flex-direction: column;
|
|
1096
|
-
gap:
|
|
1150
|
+
gap: var(--space-1-75);
|
|
1097
1151
|
scrollbar-width: thin;
|
|
1098
1152
|
scrollbar-color: color-mix(in oklab, var(--fg) 22%, transparent) transparent;
|
|
1099
1153
|
scroll-behavior: smooth;
|
|
@@ -1115,7 +1169,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1115
1169
|
.ds-247420 .chat-msg {
|
|
1116
1170
|
display: grid;
|
|
1117
1171
|
grid-template-columns: 28px 1fr;
|
|
1118
|
-
gap:
|
|
1172
|
+
gap: var(--space-2);
|
|
1119
1173
|
align-items: start;
|
|
1120
1174
|
}
|
|
1121
1175
|
.ds-247420 .chat-msg.you {
|
|
@@ -1126,7 +1180,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1126
1180
|
.ds-247420 .chat-msg.centered {
|
|
1127
1181
|
grid-template-columns: 1fr;
|
|
1128
1182
|
justify-items: center;
|
|
1129
|
-
padding:
|
|
1183
|
+
padding: var(--space-hair) 12%;
|
|
1130
1184
|
}
|
|
1131
1185
|
|
|
1132
1186
|
.ds-247420 .chat-avatar {
|
|
@@ -1138,7 +1192,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1138
1192
|
display: inline-flex;
|
|
1139
1193
|
align-items: center;
|
|
1140
1194
|
justify-content: center;
|
|
1141
|
-
font-size:
|
|
1195
|
+
font-size: var(--fs-micro);
|
|
1142
1196
|
font-weight: 600;
|
|
1143
1197
|
text-transform: lowercase;
|
|
1144
1198
|
flex-shrink: 0;
|
|
@@ -1146,13 +1200,13 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1146
1200
|
}
|
|
1147
1201
|
.ds-247420 .chat-msg.you .chat-avatar {
|
|
1148
1202
|
background: var(--os-accent, #247420);
|
|
1149
|
-
color: var(--on-color
|
|
1203
|
+
color: var(--on-color);
|
|
1150
1204
|
}
|
|
1151
1205
|
|
|
1152
1206
|
.ds-247420 .chat-stack {
|
|
1153
1207
|
display: flex;
|
|
1154
1208
|
flex-direction: column;
|
|
1155
|
-
gap:
|
|
1209
|
+
gap: var(--space-half);
|
|
1156
1210
|
min-width: 0;
|
|
1157
1211
|
align-items: flex-start;
|
|
1158
1212
|
}
|
|
@@ -1162,8 +1216,8 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1162
1216
|
color: var(--fg);
|
|
1163
1217
|
border: 1px solid color-mix(in oklab, var(--fg) 8%, transparent);
|
|
1164
1218
|
border-radius: var(--r-1);
|
|
1165
|
-
padding:
|
|
1166
|
-
font-size:
|
|
1219
|
+
padding: var(--space-2) var(--space-2-75);
|
|
1220
|
+
font-size: var(--fs-xs);
|
|
1167
1221
|
line-height: 1.5;
|
|
1168
1222
|
max-width: min(720px, 86%);
|
|
1169
1223
|
overflow-wrap: anywhere;
|
|
@@ -1171,19 +1225,19 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1171
1225
|
}
|
|
1172
1226
|
.ds-247420 .chat-msg.you .chat-bubble {
|
|
1173
1227
|
background: var(--os-accent, #247420);
|
|
1174
|
-
color: var(--on-color
|
|
1228
|
+
color: var(--on-color);
|
|
1175
1229
|
border-color: color-mix(in oklab, var(--os-accent, #247420) 60%, black);
|
|
1176
1230
|
border-bottom-right-radius: 4px;
|
|
1177
1231
|
}
|
|
1178
1232
|
.ds-247420 .chat-msg.them .chat-bubble {
|
|
1179
1233
|
border-bottom-left-radius: 4px;
|
|
1180
1234
|
}
|
|
1181
|
-
.ds-247420 .chat-bubble + .chat-bubble { margin-top:
|
|
1235
|
+
.ds-247420 .chat-bubble + .chat-bubble { margin-top: var(--space-1); }
|
|
1182
1236
|
.ds-247420 .chat-bubble pre,
|
|
1183
|
-
.ds-247420 .chat-bubble code { font-family: var(--os-mono, ui-monospace, monospace); font-size:
|
|
1237
|
+
.ds-247420 .chat-bubble code { font-family: var(--os-mono, ui-monospace, monospace); font-size: var(--fs-micro); }
|
|
1184
1238
|
.ds-247420 .chat-bubble pre {
|
|
1185
|
-
margin:
|
|
1186
|
-
padding:
|
|
1239
|
+
margin: var(--space-1-75) 0 0;
|
|
1240
|
+
padding: var(--space-2) var(--space-2-5);
|
|
1187
1241
|
background: color-mix(in oklab, var(--fg) 6%, transparent);
|
|
1188
1242
|
border-radius: var(--r-0);
|
|
1189
1243
|
max-height: 320px;
|
|
@@ -1193,7 +1247,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1193
1247
|
}
|
|
1194
1248
|
.ds-247420 .chat-msg.you .chat-bubble pre {
|
|
1195
1249
|
background: color-mix(in oklab, black 25%, transparent);
|
|
1196
|
-
color: var(--on-color
|
|
1250
|
+
color: var(--on-color);
|
|
1197
1251
|
}
|
|
1198
1252
|
.ds-247420 .chat-bubble a {
|
|
1199
1253
|
color: inherit;
|
|
@@ -1204,12 +1258,12 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1204
1258
|
}
|
|
1205
1259
|
|
|
1206
1260
|
.ds-247420 .chat-meta {
|
|
1207
|
-
font-size:
|
|
1261
|
+
font-size: var(--fs-nano);
|
|
1208
1262
|
opacity: 0.55;
|
|
1209
1263
|
display: inline-flex;
|
|
1210
1264
|
align-items: center;
|
|
1211
|
-
gap:
|
|
1212
|
-
padding: 0
|
|
1265
|
+
gap: var(--space-1-75);
|
|
1266
|
+
padding: 0 var(--space-1);
|
|
1213
1267
|
}
|
|
1214
1268
|
.ds-247420 .chat-msg.you .chat-meta { flex-direction: row-reverse; }
|
|
1215
1269
|
|
|
@@ -1220,18 +1274,18 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1220
1274
|
align-items: center;
|
|
1221
1275
|
justify-content: center;
|
|
1222
1276
|
text-align: center;
|
|
1223
|
-
padding:
|
|
1277
|
+
padding: var(--space-5) var(--space-4);
|
|
1224
1278
|
color: var(--fg);
|
|
1225
|
-
gap:
|
|
1279
|
+
gap: var(--space-1);
|
|
1226
1280
|
}
|
|
1227
1281
|
.ds-247420 .chat-empty-title {
|
|
1228
|
-
font-size:
|
|
1282
|
+
font-size: var(--fs-lg);
|
|
1229
1283
|
font-weight: 600;
|
|
1230
1284
|
margin: 0;
|
|
1231
1285
|
letter-spacing: -0.01em;
|
|
1232
1286
|
}
|
|
1233
1287
|
.ds-247420 .chat-empty-sub {
|
|
1234
|
-
font-size:
|
|
1288
|
+
font-size: var(--fs-tiny);
|
|
1235
1289
|
opacity: 0.65;
|
|
1236
1290
|
margin: 0;
|
|
1237
1291
|
max-width: 420px;
|
|
@@ -1241,19 +1295,19 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1241
1295
|
.ds-247420 .chat-composer {
|
|
1242
1296
|
display: flex;
|
|
1243
1297
|
flex-direction: column;
|
|
1244
|
-
gap:
|
|
1245
|
-
padding:
|
|
1298
|
+
gap: var(--space-1-75);
|
|
1299
|
+
padding: var(--space-2) var(--space-2-5);
|
|
1246
1300
|
border-top: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
|
|
1247
1301
|
background: var(--panel-0, transparent);
|
|
1248
1302
|
flex: 0 0 auto;
|
|
1249
1303
|
}
|
|
1250
1304
|
.ds-247420 .chat-composer textarea {
|
|
1251
|
-
font:
|
|
1305
|
+
font: var(--fs-xs)/1.45 var(--os-ui, system-ui), sans-serif;
|
|
1252
1306
|
background: var(--panel-1, color-mix(in oklab, var(--fg) 5%, transparent));
|
|
1253
1307
|
color: var(--fg);
|
|
1254
1308
|
border: 1px solid color-mix(in oklab, var(--fg) 14%, transparent);
|
|
1255
1309
|
border-radius: var(--r-0);
|
|
1256
|
-
padding:
|
|
1310
|
+
padding: var(--space-2) var(--space-2-5);
|
|
1257
1311
|
resize: none;
|
|
1258
1312
|
outline: none;
|
|
1259
1313
|
width: 100%;
|
|
@@ -1273,7 +1327,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1273
1327
|
.ds-247420 .chat-composer-toolbar {
|
|
1274
1328
|
display: flex;
|
|
1275
1329
|
align-items: center;
|
|
1276
|
-
gap:
|
|
1330
|
+
gap: var(--space-1);
|
|
1277
1331
|
}
|
|
1278
1332
|
.ds-247420 .composer-btn {
|
|
1279
1333
|
all: unset;
|
|
@@ -1305,7 +1359,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1305
1359
|
height: 32px;
|
|
1306
1360
|
border-radius: var(--r-0);
|
|
1307
1361
|
background: var(--os-accent, #247420);
|
|
1308
|
-
color: var(--on-color
|
|
1362
|
+
color: var(--on-color);
|
|
1309
1363
|
display: inline-flex;
|
|
1310
1364
|
align-items: center;
|
|
1311
1365
|
justify-content: center;
|
|
@@ -1334,7 +1388,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1334
1388
|
|
|
1335
1389
|
.ds-247420 .aicat-face {
|
|
1336
1390
|
font-family: var(--os-mono, ui-monospace, monospace);
|
|
1337
|
-
font-size:
|
|
1391
|
+
font-size: var(--fs-nano);
|
|
1338
1392
|
line-height: 1.2;
|
|
1339
1393
|
margin: 0;
|
|
1340
1394
|
}
|
|
@@ -1344,13 +1398,13 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1344
1398
|
.ds-247420 .gm-recall-hits {
|
|
1345
1399
|
display: flex;
|
|
1346
1400
|
flex-direction: column;
|
|
1347
|
-
gap:
|
|
1348
|
-
margin:
|
|
1401
|
+
gap: var(--space-1-75);
|
|
1402
|
+
margin: var(--space-2) 0;
|
|
1349
1403
|
}
|
|
1350
1404
|
.ds-247420 .gm-recall-hit {
|
|
1351
1405
|
border: 1px solid color-mix(in oklab, var(--fg) 14%, transparent);
|
|
1352
1406
|
border-radius: var(--r-0);
|
|
1353
|
-
padding:
|
|
1407
|
+
padding: var(--space-2) var(--space-2-5);
|
|
1354
1408
|
background: color-mix(in oklab, var(--bg) 92%, var(--fg) 2%);
|
|
1355
1409
|
}
|
|
1356
1410
|
.ds-247420 .gm-recall-hit.is-pruned {
|
|
@@ -1359,12 +1413,12 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1359
1413
|
}
|
|
1360
1414
|
.ds-247420 .gm-recall-meta {
|
|
1361
1415
|
font-family: var(--os-mono, ui-monospace, monospace);
|
|
1362
|
-
font-size:
|
|
1416
|
+
font-size: var(--fs-nano);
|
|
1363
1417
|
color: color-mix(in oklab, var(--fg) 60%, transparent);
|
|
1364
|
-
margin-bottom:
|
|
1418
|
+
margin-bottom: var(--space-1);
|
|
1365
1419
|
}
|
|
1366
1420
|
.ds-247420 .gm-recall-text {
|
|
1367
|
-
font-size:
|
|
1421
|
+
font-size: var(--fs-tiny);
|
|
1368
1422
|
line-height: 1.4;
|
|
1369
1423
|
white-space: pre-wrap;
|
|
1370
1424
|
word-break: break-word;
|
|
@@ -1372,21 +1426,26 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1372
1426
|
.ds-247420 .gm-recall-acts {
|
|
1373
1427
|
display: flex;
|
|
1374
1428
|
justify-content: flex-end;
|
|
1375
|
-
margin-top:
|
|
1429
|
+
margin-top: var(--space-1-75);
|
|
1376
1430
|
}
|
|
1377
1431
|
.ds-247420 .gm-recall-forget {
|
|
1378
|
-
font-size:
|
|
1379
|
-
padding:
|
|
1432
|
+
font-size: var(--fs-nano);
|
|
1433
|
+
padding: var(--space-hair) var(--space-2);
|
|
1380
1434
|
}
|
|
1381
1435
|
|
|
1382
1436
|
/* ============================================================
|
|
1383
1437
|
* thebird RESPONSIVE PERFECTION layer (desk / tablet / mobile).
|
|
1384
|
-
* Appended LAST so .ds-247420-scoped rules here win
|
|
1385
|
-
*
|
|
1386
|
-
*
|
|
1387
|
-
*
|
|
1388
|
-
*
|
|
1389
|
-
*
|
|
1438
|
+
* Appended LAST so the .ds-247420-scoped rules here win by SOURCE ORDER at
|
|
1439
|
+
* equal (0,2,0) specificity over the earlier brand overrides
|
|
1440
|
+
* (.ds-247420 .wm-root{inset:0} at the "bars overlay" block,
|
|
1441
|
+
* .ds-247420 .wm-bar{height:34px}, the unconditional
|
|
1442
|
+
* .ds-247420 .os-instances{display:flex}) that were silently defeating the
|
|
1443
|
+
* @media(max-width:767px)/(768-1023px) contracts. Every rule below is a
|
|
1444
|
+
* measured fix for a confirmed responsive-audit finding.
|
|
1445
|
+
*
|
|
1446
|
+
* Because every competing rule is now equally scoped, source order alone
|
|
1447
|
+
* decides — so this layer needs no !important except where it must beat
|
|
1448
|
+
* wm.css's own !important declarations or wm.js's inline styles.
|
|
1390
1449
|
*
|
|
1391
1450
|
* View classes: desktop >1023px (free-float windows, full menubar);
|
|
1392
1451
|
* tablet 768..1023px (side-rail, wm-root left-offset); mobile <=767px AND
|
|
@@ -1399,6 +1458,9 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1399
1458
|
* layer pinned --os-bar-h-mobile to 34px which left no room for 44px tap
|
|
1400
1459
|
* targets in the bar. Restore 52px on mobile/touch. --- */
|
|
1401
1460
|
@media (max-width: 767px), (max-height: 500px) and (orientation: landscape) {
|
|
1461
|
+
/* LOAD-BEARING !important: same reason as the brand block's --os-bar-h —
|
|
1462
|
+
* `:root[data-density="…"]` redefines --os-bar-h at (0,2,0), higher than
|
|
1463
|
+
* this (0,1,0) class rule on the same <html> element. */
|
|
1402
1464
|
.ds-247420 { --os-bar-h-mobile: 52px !important; --os-bar-h: 52px !important; }
|
|
1403
1465
|
}
|
|
1404
1466
|
|
|
@@ -1409,55 +1471,68 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1409
1471
|
* specificity so windows sit BETWEEN the bars. --- */
|
|
1410
1472
|
@media (max-width: 767px), (max-height: 500px) and (orientation: landscape) {
|
|
1411
1473
|
.ds-247420 .wm-root {
|
|
1412
|
-
top: calc(var(--os-bar-h) + env(safe-area-inset-top, 0px)) !important;
|
|
1413
|
-
bottom: calc(var(--os-bar-h) + env(safe-area-inset-bottom, 0px)) !important;
|
|
1414
1474
|
inset: calc(var(--os-bar-h) + env(safe-area-inset-top, 0px)) 0
|
|
1415
|
-
calc(var(--os-bar-h) + env(safe-area-inset-bottom, 0px)) 0
|
|
1475
|
+
calc(var(--os-bar-h) + env(safe-area-inset-bottom, 0px)) 0;
|
|
1416
1476
|
}
|
|
1477
|
+
/* LOAD-BEARING !important on the geometry four: wm.css's mobile band
|
|
1478
|
+
* (wm.css:157-165) declares left/top/width/height with !important, and
|
|
1479
|
+
* wm.js writes left/top/width/height as INLINE styles during drag/resize.
|
|
1480
|
+
* Neither can be beaten by specificity — only by !important. The remaining
|
|
1481
|
+
* properties here need no flag. */
|
|
1417
1482
|
.ds-247420 .wm-win {
|
|
1418
|
-
position: absolute
|
|
1483
|
+
position: absolute;
|
|
1419
1484
|
left: 0 !important; top: 0 !important;
|
|
1420
1485
|
width: 100% !important; height: 100% !important;
|
|
1421
|
-
border: none
|
|
1486
|
+
border: none;
|
|
1487
|
+
/* bare 0: full-screen window has square corners (not --r-0's 4px) */
|
|
1488
|
+
border-radius: 0;
|
|
1489
|
+
box-shadow: none;
|
|
1422
1490
|
}
|
|
1423
|
-
/* titlebar must host a 44px close button -> 44px bar (beats the 34px brand
|
|
1491
|
+
/* titlebar must host a 44px close button -> 44px bar (beats the 34px brand
|
|
1492
|
+
* clamp by later source order at equal specificity) */
|
|
1424
1493
|
.ds-247420 .wm-bar {
|
|
1425
|
-
height: 44px
|
|
1426
|
-
padding: 0
|
|
1494
|
+
height: 44px; min-height: 44px;
|
|
1495
|
+
padding: 0 var(--space-2-5); align-items: center;
|
|
1427
1496
|
pointer-events: none;
|
|
1428
1497
|
}
|
|
1429
1498
|
.ds-247420 .wm-bar .wm-title { pointer-events: auto; }
|
|
1430
1499
|
.ds-247420 .wm-bar .wm-btns { pointer-events: auto; }
|
|
1431
1500
|
/* hide min+max on mobile full-screen; keep close at 44x44 fully inside the bar */
|
|
1432
1501
|
.ds-247420 .wm-btns .wm-btn:nth-child(1),
|
|
1433
|
-
.ds-247420 .wm-btns .wm-btn:nth-child(2) { display: none
|
|
1502
|
+
.ds-247420 .wm-btns .wm-btn:nth-child(2) { display: none; }
|
|
1503
|
+
/* LOAD-BEARING !important on width/height: wm.css's `@media (pointer:coarse)`
|
|
1504
|
+
* sets `.wm-btn{min-width:44px;min-height:44px}` and this must also beat the
|
|
1505
|
+
* (0,3,0) `.ds-247420 .wm-btns .wm-btn` coarse-pointer rule below, which is
|
|
1506
|
+
* later in source order. Colors/radius need no flag. */
|
|
1434
1507
|
.ds-247420 .wm-btns .wm-btn:nth-child(3) {
|
|
1435
1508
|
width: 44px !important; height: 44px !important;
|
|
1436
|
-
border-radius: var(--r-1
|
|
1437
|
-
background: var(--os-bg-3)
|
|
1509
|
+
border-radius: var(--r-1);
|
|
1510
|
+
background: var(--os-bg-3); color: var(--os-fg);
|
|
1438
1511
|
}
|
|
1439
|
-
.ds-247420 .wm-resize, .ds-247420 .wm-edge { display: none
|
|
1440
|
-
/* collapse the menubar workspace cluster on mobile
|
|
1441
|
-
* .
|
|
1512
|
+
.ds-247420 .wm-resize, .ds-247420 .wm-edge { display: none; }
|
|
1513
|
+
/* collapse the menubar workspace cluster on mobile. `.os-menubar
|
|
1514
|
+
* .os-instances` is (0,3,0) here, beating the unconditional (0,2,0)
|
|
1515
|
+
* `.ds-247420 .os-instances{display:flex}` on specificity. */
|
|
1442
1516
|
.ds-247420 .os-menubar .os-instances,
|
|
1443
|
-
.ds-247420 .os-instances { display: none
|
|
1517
|
+
.ds-247420 .os-instances { display: none; }
|
|
1444
1518
|
.ds-247420 .os-menubar [data-role="add"],
|
|
1445
|
-
.ds-247420 .tb-sess-add { display: none
|
|
1519
|
+
.ds-247420 .tb-sess-add { display: none; }
|
|
1446
1520
|
}
|
|
1447
1521
|
|
|
1448
1522
|
/* --- landscape-phone (short + wide + touch): also hide the side-rail that the
|
|
1449
1523
|
* 768-1023 tablet band would otherwise show, and force the mobile menubar. --- */
|
|
1450
1524
|
@media (max-height: 500px) and (orientation: landscape) and (pointer: coarse) {
|
|
1451
|
-
.ds-247420 .os-side-rail { display: none
|
|
1525
|
+
.ds-247420 .os-side-rail { display: none; }
|
|
1452
1526
|
}
|
|
1453
1527
|
|
|
1454
1528
|
/* --- tablet (768..1023): the side-rail offset for .wm-root was defeated by
|
|
1455
|
-
* the scoped inset:0; re-
|
|
1456
|
-
*
|
|
1529
|
+
* the scoped inset:0; re-asserted here at equal (0,2,0) specificity but later
|
|
1530
|
+
* source order, which is enough now that the earlier rule is also scoped.
|
|
1531
|
+
* `inset` alone carries the left offset — the separate `left` declaration it
|
|
1532
|
+
* used to be paired with was redundant with this shorthand. --- */
|
|
1457
1533
|
@media (min-width: 768px) and (max-width: 1023px) {
|
|
1458
1534
|
.ds-247420 .wm-root {
|
|
1459
|
-
|
|
1460
|
-
inset: 0 0 0 var(--os-rail-w) !important;
|
|
1535
|
+
inset: 0 0 0 var(--os-rail-w);
|
|
1461
1536
|
}
|
|
1462
1537
|
}
|
|
1463
1538
|
|
|
@@ -1471,7 +1546,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1471
1546
|
/* taskbar tasks (also widen and snap on the whole touch band, not mobile-only) */
|
|
1472
1547
|
.ds-247420 .os-task {
|
|
1473
1548
|
min-height: var(--os-tap, 44px); min-width: 120px;
|
|
1474
|
-
padding:
|
|
1549
|
+
padding: var(--space-2-5) 14px; scroll-snap-align: start;
|
|
1475
1550
|
}
|
|
1476
1551
|
.ds-247420 .os-taskbar { scroll-snap-type: x proximity; }
|
|
1477
1552
|
/* menubar workspace controls (when shown on tablet) */
|
|
@@ -1513,4 +1588,5 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1513
1588
|
|
|
1514
1589
|
/* --- browser-pane: the generic .app-pane 16px prose padding stranded the
|
|
1515
1590
|
* iframe 16px on every side; the browser pane is full-bleed. --- */
|
|
1516
|
-
|
|
1591
|
+
/* (0,3,0) beats the generic `.app-pane` (0,1,0) prose padding on specificity. */
|
|
1592
|
+
.ds-247420 .app-pane.browser-app { padding: 0; }
|