anentrypoint-design 0.0.240 → 0.0.241
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 +85 -71
- package/chat.css +25 -22
- package/colors_and_type.css +17 -6
- package/community.css +63 -18
- package/dist/247420.css +216 -139
- package/dist/247420.js +23 -27
- package/package.json +1 -1
- package/src/components/community.js +46 -12
- package/src/components/content.js +8 -6
- package/src/components/shell.js +1 -1
- package/src/kits/os/freddie-dashboard.css +2 -2
- package/src/kits/os/icons.js +38 -16
- package/src/kits/os/theme.css +33 -33
- package/src/kits/spoint/loading-screen.css +1 -1
- package/src/page-html.js +9 -13
package/chat.css
CHANGED
|
@@ -144,13 +144,13 @@
|
|
|
144
144
|
position: absolute; right: 16px; bottom: 12px; z-index: 3;
|
|
145
145
|
display: none; align-items: center; gap: .35em;
|
|
146
146
|
padding: .4em .8em; font: inherit; font-size: var(--fs-tiny); cursor: pointer;
|
|
147
|
-
border-radius:
|
|
147
|
+
border-radius: var(--r-pill); border: var(--bw-hair) solid var(--rule);
|
|
148
148
|
background: var(--bg-2); color: var(--fg-2, var(--fg));
|
|
149
149
|
box-shadow: 0 2px 8px color-mix(in srgb, var(--fg) 14%, transparent);
|
|
150
150
|
}
|
|
151
151
|
.agentchat-jump.show { display: inline-flex; }
|
|
152
152
|
.agentchat-jump:hover { background: var(--bg-3); }
|
|
153
|
-
.agentchat-jump:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
153
|
+
.agentchat-jump:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
|
|
154
154
|
|
|
155
155
|
/* Streaming caret: a thin blinking bar at the live edge of an assistant turn. */
|
|
156
156
|
.chat-stream-caret {
|
|
@@ -172,7 +172,7 @@
|
|
|
172
172
|
}
|
|
173
173
|
.chat-msg-action-label { font-size: var(--fs-tiny); }
|
|
174
174
|
.chat-msg-action:hover { background: var(--bg-2); color: var(--fg); }
|
|
175
|
-
.chat-msg-action:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; opacity: 1; }
|
|
175
|
+
.chat-msg-action:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; opacity: 1; }
|
|
176
176
|
|
|
177
177
|
/* Empty state: a fresh thread is an invitation, not a void. */
|
|
178
178
|
.agentchat-empty {
|
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
font: inherit;
|
|
201
201
|
font-size: var(--fs-tiny);
|
|
202
202
|
padding: .4em .8em;
|
|
203
|
-
border-radius:
|
|
203
|
+
border-radius: var(--r-pill);
|
|
204
204
|
border: 1px solid color-mix(in srgb, var(--fg) 16%, transparent);
|
|
205
205
|
background: color-mix(in srgb, var(--fg) 5%, transparent);
|
|
206
206
|
color: var(--fg-2, var(--fg));
|
|
@@ -239,7 +239,7 @@
|
|
|
239
239
|
font-family: var(--ff-body); font-size: var(--fs-tiny);
|
|
240
240
|
}
|
|
241
241
|
.agentchat-install-copy:hover { background: var(--bg-3); color: var(--fg); }
|
|
242
|
-
.agentchat-install-copy:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
242
|
+
.agentchat-install-copy:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
|
|
243
243
|
.agentchat-install-actions { display: flex; justify-content: flex-start; }
|
|
244
244
|
|
|
245
245
|
/* Host-supplied transcript export actions riding the controls row. */
|
|
@@ -250,7 +250,7 @@
|
|
|
250
250
|
font-family: var(--ff-body); font-size: var(--fs-tiny);
|
|
251
251
|
}
|
|
252
252
|
.agentchat-export-act:hover { background: var(--bg-2); color: var(--fg); }
|
|
253
|
-
.agentchat-export-act:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
253
|
+
.agentchat-export-act:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
|
|
254
254
|
|
|
255
255
|
/* "working" tail: a long silent tool call shouldn't read as frozen. */
|
|
256
256
|
.agentchat-working {
|
|
@@ -381,7 +381,7 @@
|
|
|
381
381
|
/* Rail filter uses the shared .ds-search-input primitive (provides bg/border/
|
|
382
382
|
radius/focus-ring); only the rail layout + touch floor live here. */
|
|
383
383
|
.ds-session-head .ds-search-input { order: 1; flex: 1 1 auto; min-width: 0; min-height: 36px; padding: 0 10px; }
|
|
384
|
-
.ds-session-new:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
384
|
+
.ds-session-new:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
|
|
385
385
|
/* Touch floor (must FOLLOW the base rules - same specificity, order decides). */
|
|
386
386
|
@media (pointer: coarse) {
|
|
387
387
|
.ds-session-new { width: 44px; min-height: 44px; }
|
|
@@ -400,10 +400,10 @@
|
|
|
400
400
|
cursor: pointer; text-align: left; color: var(--fg);
|
|
401
401
|
}
|
|
402
402
|
.ds-session-row:hover { background: var(--bg-2); }
|
|
403
|
-
.ds-session-row:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
|
|
403
|
+
.ds-session-row:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
|
|
404
404
|
.ds-session-row.active { background: var(--accent-tint); box-shadow: inset 2px 0 0 var(--accent); }
|
|
405
405
|
.ds-session-row.rail-green::before, .ds-session-row.rail-purple::before, .ds-session-row.rail-flame::before {
|
|
406
|
-
content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius:
|
|
406
|
+
content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: var(--r-hair);
|
|
407
407
|
}
|
|
408
408
|
/* Rail tones MUST match .row.rail-* in app-shell.css so the same semantic state
|
|
409
409
|
reads as one colour across the conversation list and content rows. */
|
|
@@ -494,7 +494,7 @@
|
|
|
494
494
|
}
|
|
495
495
|
.chat-code-block:hover .chat-code-copy, .chat-code-block:focus-within .chat-code-copy { opacity: 1; }
|
|
496
496
|
.chat-code-copy.is-copied { color: var(--accent-ink); border-color: var(--accent); }
|
|
497
|
-
.chat-code-copy:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; opacity: 1; }
|
|
497
|
+
.chat-code-copy:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; opacity: 1; }
|
|
498
498
|
/* Head-placed copy (structured CodeNode + FilePreviewCode) is always visible. */
|
|
499
499
|
.chat-code-head .spread { flex: 1; }
|
|
500
500
|
.chat-code-copy-head { position: static; opacity: 1; }
|
|
@@ -583,7 +583,7 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
583
583
|
cursor: pointer; font-family: var(--ff-body); font-size: var(--fs-tiny);
|
|
584
584
|
}
|
|
585
585
|
.ds-dash-errors-toggle.active { background: var(--accent-tint); color: var(--fg); border-color: var(--accent); }
|
|
586
|
-
.ds-dash-errors-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
586
|
+
.ds-dash-errors-toggle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
|
|
587
587
|
|
|
588
588
|
/* --- C3: per-card select checkbox. --- */
|
|
589
589
|
.ds-dash-select {
|
|
@@ -593,7 +593,7 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
593
593
|
font-family: var(--ff-mono); font-size: var(--fs-sm);
|
|
594
594
|
}
|
|
595
595
|
.ds-dash-select[aria-checked="true"] { color: var(--accent-ink); }
|
|
596
|
-
.ds-dash-select:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
596
|
+
.ds-dash-select:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
|
|
597
597
|
|
|
598
598
|
/* --- C5: active dashboard card (current conversation). --- */
|
|
599
599
|
.ds-dash-card.is-active { box-shadow: inset 2px 0 0 var(--accent); }
|
|
@@ -615,7 +615,7 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
615
615
|
|
|
616
616
|
/* --- E1: inline file preview pane (split view, non-modal). --- */
|
|
617
617
|
.ds-preview-pane { display: flex; flex-direction: column; min-height: 0; height: 100%; overflow: hidden; }
|
|
618
|
-
.ds-preview-pane:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
|
|
618
|
+
.ds-preview-pane:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
|
|
619
619
|
.ds-preview-pane .ds-preview-body { flex: 1; min-height: 0; overflow: auto; }
|
|
620
620
|
.ds-preview-pane-empty { align-items: center; justify-content: center; color: var(--fg-3); font-size: var(--fs-sm); }
|
|
621
621
|
.ds-preview-code-wrap { display: flex; flex-direction: column; min-height: 0; }
|
|
@@ -632,7 +632,7 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
632
632
|
border-radius: var(--r-1); background: var(--bg-2); color: var(--fg-2); cursor: pointer;
|
|
633
633
|
font-family: var(--ff-body); font-size: var(--fs-tiny);
|
|
634
634
|
}
|
|
635
|
-
.ds-file-more-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
635
|
+
.ds-file-more-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
|
|
636
636
|
/* --- D3: locked/no-access file row. --- */
|
|
637
637
|
.ds-file-row.is-locked { opacity: .6; }
|
|
638
638
|
|
|
@@ -643,8 +643,9 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
643
643
|
background: none; color: var(--fg-3); cursor: pointer;
|
|
644
644
|
font-family: var(--ff-body); font-size: var(--fs-tiny);
|
|
645
645
|
}
|
|
646
|
+
.ds-roots-tab:hover { background: var(--bg-2); color: var(--fg); }
|
|
646
647
|
.ds-roots-tab.active { background: var(--bg); color: var(--fg); }
|
|
647
|
-
.ds-roots-tab:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
648
|
+
.ds-roots-tab:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
|
|
648
649
|
|
|
649
650
|
/* --- H4: touch targets. On a coarse pointer / narrow screen the hover-revealed
|
|
650
651
|
action rows are made permanently visible and small controls floor to 44px so
|
|
@@ -676,7 +677,7 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
676
677
|
color: var(--fg-3); font-family: var(--ff-body); font-size: var(--fs-micro);
|
|
677
678
|
}
|
|
678
679
|
.ds-session-meta-copy:hover { background: var(--bg-3); color: var(--fg); }
|
|
679
|
-
.ds-session-meta-copy:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
680
|
+
.ds-session-meta-copy:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
|
|
680
681
|
@media (pointer: coarse), (max-width: 640px) {
|
|
681
682
|
.ds-session-meta-copy { min-height: 44px; min-width: 44px; }
|
|
682
683
|
}
|
|
@@ -704,7 +705,7 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
704
705
|
}
|
|
705
706
|
|
|
706
707
|
/* Drag-over ring: token accent, never a hex. */
|
|
707
|
-
.chat-composer.dragover { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-2); }
|
|
708
|
+
.chat-composer.dragover { outline: 2px solid var(--accent-ink); outline-offset: -2px; border-radius: var(--r-2); }
|
|
708
709
|
|
|
709
710
|
/* Per-bit composer context: only the bit that owns a control is a button. */
|
|
710
711
|
.chat-composer-context-bit {
|
|
@@ -744,7 +745,8 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
744
745
|
border-radius: var(--r-1); background: var(--bg-2); color: var(--fg-2); cursor: pointer;
|
|
745
746
|
font-family: var(--ff-body); font-size: var(--fs-tiny);
|
|
746
747
|
}
|
|
747
|
-
.agentchat-earlier-btn:
|
|
748
|
+
.agentchat-earlier-btn:hover { background: var(--bg-2); color: var(--fg); }
|
|
749
|
+
.agentchat-earlier-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
|
|
748
750
|
@media (pointer: coarse) {
|
|
749
751
|
.agentchat-earlier-btn { min-height: 44px; }
|
|
750
752
|
}
|
|
@@ -852,7 +854,7 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
852
854
|
}
|
|
853
855
|
.chat-msg .chat-tool .chat-tool-head::-webkit-details-marker { display: none; }
|
|
854
856
|
.chat-msg .chat-tool .chat-tool-head:hover { background: var(--bg-2); }
|
|
855
|
-
.chat-msg .chat-tool .chat-tool-head:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
|
|
857
|
+
.chat-msg .chat-tool .chat-tool-head:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
|
|
856
858
|
.chat-tool-icon { display: inline-flex; color: var(--fg-3); }
|
|
857
859
|
.chat-tool-name { font-family: var(--ff-mono); font-weight: 600; color: var(--fg); }
|
|
858
860
|
.chat-tool-label { color: var(--fg-3); font-size: var(--fs-tiny); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
@@ -876,7 +878,7 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
876
878
|
.chat-tool-section-label { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); }
|
|
877
879
|
.chat-tool-copy { position: static; opacity: 0; }
|
|
878
880
|
.chat-tool-section:hover .chat-tool-copy, .chat-tool-section:focus-within .chat-tool-copy { opacity: 1; }
|
|
879
|
-
.chat-tool-copy:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; opacity: 1; }
|
|
881
|
+
.chat-tool-copy:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; opacity: 1; }
|
|
880
882
|
.chat-tool-pre { margin: 0; padding: var(--space-2); background: var(--bg-2); border-radius: var(--r-1); font-family: var(--ff-mono); font-size: var(--fs-tiny); line-height: 1.45; overflow-x: auto; max-height: 320px; overflow-y: auto; }
|
|
881
883
|
.chat-tool-pre.is-error { color: var(--flame); }
|
|
882
884
|
.chat-tool-pre.chat-tool-empty { color: var(--fg-3); }
|
|
@@ -939,10 +941,11 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
939
941
|
.ds-dash-breakdown .seg.is-idle::before { background: transparent; box-shadow: inset 0 0 0 1px var(--stale), inset 0 0 0 3px var(--bg); }
|
|
940
942
|
.ds-dash-stream-disc { display: inline-flex; align-items: center; gap: var(--space-1); }
|
|
941
943
|
.ds-dash-selectall { display: inline-flex; align-items: center; gap: var(--space-1); font-size: var(--fs-tiny); color: var(--fg-2); cursor: pointer; background: none; border: none; padding: var(--space-1); }
|
|
942
|
-
.ds-dash-selectall:
|
|
944
|
+
.ds-dash-selectall:hover { color: var(--fg); }
|
|
945
|
+
.ds-dash-selectall:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
|
|
943
946
|
.ds-dash-clear { background: none; border: none; color: var(--fg-3); cursor: pointer; font-size: var(--fs-tiny); text-decoration: underline dotted; padding: var(--space-1); }
|
|
944
947
|
.ds-dash-clear:hover { color: var(--fg); }
|
|
945
|
-
.ds-dash-clear:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; border-radius: var(--r-1); }
|
|
948
|
+
.ds-dash-clear:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; border-radius: var(--r-1); }
|
|
946
949
|
|
|
947
950
|
/* Conversation-rail loading skeleton (cold ccsniff walk). */
|
|
948
951
|
.ds-session-row-skeleton { display: flex; flex-direction: column; gap: 6px; padding: var(--space-2) var(--space-3); }
|
package/colors_and_type.css
CHANGED
|
@@ -200,10 +200,14 @@
|
|
|
200
200
|
--rule: color-mix(in oklab, currentColor 14%, transparent);
|
|
201
201
|
--rule-strong: color-mix(in oklab, currentColor 28%, transparent);
|
|
202
202
|
|
|
203
|
+
/* Micro rungs below --r-1 — chips, badges, scrollbar thumbs, tick marks
|
|
204
|
+
genuinely want a tighter corner than 10px; without these two tokens the
|
|
205
|
+
component sheets fell back to raw px literals bypassing the scale. */
|
|
206
|
+
--r-hair: 2px;
|
|
207
|
+
--r-0: 4px;
|
|
203
208
|
--r-1: 10px;
|
|
204
209
|
--r-2: 14px;
|
|
205
210
|
--r-3: 22px;
|
|
206
|
-
--r-4: 32px;
|
|
207
211
|
--r-pill: 999px;
|
|
208
212
|
|
|
209
213
|
--dur-snap: 80ms;
|
|
@@ -233,6 +237,10 @@
|
|
|
233
237
|
--measure: 68ch;
|
|
234
238
|
--measure-wide: 940px;
|
|
235
239
|
--measure-narrow: 760px;
|
|
240
|
+
/* Page-stage ceiling — independent of --measure-wide (which stays the
|
|
241
|
+
narrower editorial hero/prose measure). Fluid so ultra-wide viewports
|
|
242
|
+
actually gain real estate instead of flat-lining at a fixed px cap. */
|
|
243
|
+
--stage-wide: min(96vw, 1440px);
|
|
236
244
|
|
|
237
245
|
--sidebar-width: 220px;
|
|
238
246
|
--sidebar-width-collapsed: 64px;
|
|
@@ -247,8 +255,11 @@
|
|
|
247
255
|
/* Unified focus-ring tokens (single source for the design system). Outset
|
|
248
256
|
rings (the default) tokenize colour+width+offset; bordered text fields use
|
|
249
257
|
the inset variant. Deliberate negative offsets on edge-flush/clipping
|
|
250
|
-
containers stay literal.
|
|
251
|
-
|
|
258
|
+
containers stay literal. --focus-color uses --accent-ink (the readable
|
|
259
|
+
text/UI-boundary tone), never bare --accent (the lime FILL token, which
|
|
260
|
+
measures ~1.07:1 against --paper and is nearly invisible as an outline —
|
|
261
|
+
see AGENTS.md token-split rule). */
|
|
262
|
+
--focus-color: var(--accent-ink);
|
|
252
263
|
--focus-w: 2px;
|
|
253
264
|
--focus-offset: 2px;
|
|
254
265
|
--focus-ring-inset: inset 0 0 0 var(--focus-w) var(--focus-color);
|
|
@@ -273,7 +284,7 @@
|
|
|
273
284
|
/* Link focus-visible */
|
|
274
285
|
a:focus-visible,
|
|
275
286
|
[role="link"]:focus-visible {
|
|
276
|
-
outline: 2px solid var(--accent);
|
|
287
|
+
outline: 2px solid var(--accent-ink);
|
|
277
288
|
outline-offset: 2px;
|
|
278
289
|
}
|
|
279
290
|
|
|
@@ -281,13 +292,13 @@ a:focus-visible,
|
|
|
281
292
|
input:focus-visible,
|
|
282
293
|
textarea:focus-visible,
|
|
283
294
|
select:focus-visible {
|
|
284
|
-
outline: 2px solid var(--accent);
|
|
295
|
+
outline: 2px solid var(--accent-ink);
|
|
285
296
|
outline-offset: 2px;
|
|
286
297
|
}
|
|
287
298
|
|
|
288
299
|
/* Interactive element focus-visible */
|
|
289
300
|
[tabindex]:focus-visible {
|
|
290
|
-
outline: 2px solid var(--accent);
|
|
301
|
+
outline: 2px solid var(--accent-ink);
|
|
291
302
|
outline-offset: 2px;
|
|
292
303
|
}
|
|
293
304
|
|
package/community.css
CHANGED
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
width: 4px;
|
|
101
101
|
height: 8px;
|
|
102
102
|
background: var(--fg);
|
|
103
|
-
border-radius: 0
|
|
103
|
+
border-radius: 0 var(--r-0) var(--r-0) 0;
|
|
104
104
|
transition: height var(--dur-base) var(--ease);
|
|
105
105
|
}
|
|
106
106
|
.cm-server-icon:hover .cm-server-pill { height: 20px; }
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
width: 32px;
|
|
157
157
|
height: 2px;
|
|
158
158
|
background: color-mix(in oklab, var(--fg) 12%, transparent);
|
|
159
|
-
border-radius:
|
|
159
|
+
border-radius: var(--r-hair);
|
|
160
160
|
margin: 4px 0;
|
|
161
161
|
flex-shrink: 0;
|
|
162
162
|
}
|
|
@@ -217,7 +217,7 @@
|
|
|
217
217
|
.cm-channel-list::-webkit-scrollbar-track { background: transparent; }
|
|
218
218
|
.cm-channel-list::-webkit-scrollbar-thumb {
|
|
219
219
|
background: color-mix(in oklab, var(--fg) 18%, transparent);
|
|
220
|
-
border-radius:
|
|
220
|
+
border-radius: var(--r-0);
|
|
221
221
|
}
|
|
222
222
|
|
|
223
223
|
/* ============================================================
|
|
@@ -297,7 +297,7 @@
|
|
|
297
297
|
background: color-mix(in oklab, var(--fg) 8%, transparent);
|
|
298
298
|
}
|
|
299
299
|
.cm-cat-add:focus-visible {
|
|
300
|
-
outline: 2px solid var(--accent);
|
|
300
|
+
outline: 2px solid var(--accent-ink);
|
|
301
301
|
outline-offset: 2px;
|
|
302
302
|
}
|
|
303
303
|
|
|
@@ -349,7 +349,7 @@
|
|
|
349
349
|
bottom: 4px;
|
|
350
350
|
width: 3px;
|
|
351
351
|
background: var(--accent);
|
|
352
|
-
border-radius: 0
|
|
352
|
+
border-radius: 0 var(--r-hair) var(--r-hair) 0;
|
|
353
353
|
}
|
|
354
354
|
|
|
355
355
|
.cm-channel-item.voice-active {
|
|
@@ -478,7 +478,7 @@
|
|
|
478
478
|
background: color-mix(in oklab, var(--fg) 10%, transparent);
|
|
479
479
|
}
|
|
480
480
|
.cm-ch-action-btn:focus-visible {
|
|
481
|
-
outline: 2px solid var(--accent);
|
|
481
|
+
outline: 2px solid var(--accent-ink);
|
|
482
482
|
outline-offset: 2px;
|
|
483
483
|
}
|
|
484
484
|
|
|
@@ -817,7 +817,7 @@
|
|
|
817
817
|
.cm-member-list::-webkit-scrollbar { width: 8px; }
|
|
818
818
|
.cm-member-list::-webkit-scrollbar-thumb {
|
|
819
819
|
background: color-mix(in oklab, var(--fg) 18%, transparent);
|
|
820
|
-
border-radius:
|
|
820
|
+
border-radius: var(--r-0);
|
|
821
821
|
}
|
|
822
822
|
|
|
823
823
|
.cm-member-category {
|
|
@@ -1061,45 +1061,45 @@
|
|
|
1061
1061
|
.cm-server-icon:focus-visible,
|
|
1062
1062
|
.cm-server-back:focus-visible,
|
|
1063
1063
|
.cm-server-add:focus-visible {
|
|
1064
|
-
outline: 2px solid var(--accent);
|
|
1064
|
+
outline: 2px solid var(--accent-ink);
|
|
1065
1065
|
outline-offset: 2px;
|
|
1066
1066
|
border-radius: var(--r-2);
|
|
1067
1067
|
}
|
|
1068
1068
|
|
|
1069
1069
|
.cm-channel-item:focus-visible {
|
|
1070
|
-
outline: 2px solid var(--accent);
|
|
1070
|
+
outline: 2px solid var(--accent-ink);
|
|
1071
1071
|
outline-offset: -2px;
|
|
1072
1072
|
border-radius: var(--r-1);
|
|
1073
1073
|
}
|
|
1074
1074
|
|
|
1075
1075
|
.cm-server-header:focus-visible,
|
|
1076
1076
|
.cm-category-header:focus-visible {
|
|
1077
|
-
outline: 2px solid var(--accent);
|
|
1077
|
+
outline: 2px solid var(--accent-ink);
|
|
1078
1078
|
outline-offset: -2px;
|
|
1079
1079
|
}
|
|
1080
1080
|
|
|
1081
1081
|
.cm-member-item:focus-visible {
|
|
1082
|
-
outline: 2px solid var(--accent);
|
|
1082
|
+
outline: 2px solid var(--accent-ink);
|
|
1083
1083
|
outline-offset: -2px;
|
|
1084
1084
|
border-radius: var(--r-1);
|
|
1085
1085
|
}
|
|
1086
1086
|
|
|
1087
1087
|
.cm-vs-btn:focus-visible,
|
|
1088
1088
|
.cm-user-btn:focus-visible {
|
|
1089
|
-
outline: 2px solid var(--accent);
|
|
1089
|
+
outline: 2px solid var(--accent-ink);
|
|
1090
1090
|
outline-offset: 2px;
|
|
1091
1091
|
border-radius: var(--r-1);
|
|
1092
1092
|
}
|
|
1093
1093
|
|
|
1094
1094
|
/* ThreadPanel / Forum / Page interactive elements */
|
|
1095
1095
|
.cm-tp-item:focus-visible,
|
|
1096
|
-
.cm-forum-item:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-1); }
|
|
1096
|
+
.cm-forum-item:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; border-radius: var(--r-1); }
|
|
1097
1097
|
.cm-tp-new:focus-visible,
|
|
1098
1098
|
.cm-tp-close:focus-visible,
|
|
1099
1099
|
.cm-forum-new:focus-visible,
|
|
1100
1100
|
.cm-forum-sort:focus-visible,
|
|
1101
|
-
.cm-page-edit:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--r-1); }
|
|
1102
|
-
.cm-forum-search:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--accent); }
|
|
1101
|
+
.cm-page-edit:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; border-radius: var(--r-1); }
|
|
1102
|
+
.cm-forum-search:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--accent-ink); }
|
|
1103
1103
|
|
|
1104
1104
|
/* ---------- mobile header ---------- */
|
|
1105
1105
|
.cm-mobile-header {
|
|
@@ -1127,7 +1127,7 @@
|
|
|
1127
1127
|
border-radius: var(--r-1);
|
|
1128
1128
|
}
|
|
1129
1129
|
.cm-mh-btn:hover { background: var(--panel-3); }
|
|
1130
|
-
.cm-mh-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1130
|
+
.cm-mh-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
|
|
1131
1131
|
.cm-mh-title {
|
|
1132
1132
|
flex: 1 1 auto;
|
|
1133
1133
|
min-width: 0;
|
|
@@ -1172,7 +1172,7 @@
|
|
|
1172
1172
|
border-radius: var(--r-1);
|
|
1173
1173
|
}
|
|
1174
1174
|
.cm-rb-cancel:hover { background: var(--panel-3); color: var(--fg); }
|
|
1175
|
-
.cm-rb-cancel:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
1175
|
+
.cm-rb-cancel:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
|
|
1176
1176
|
|
|
1177
1177
|
/* ---------- banner ---------- */
|
|
1178
1178
|
.cm-banner {
|
|
@@ -1185,6 +1185,7 @@
|
|
|
1185
1185
|
font-weight: 500;
|
|
1186
1186
|
}
|
|
1187
1187
|
.cm-banner.clickable { cursor: pointer; }
|
|
1188
|
+
.cm-banner.clickable:hover { background: color-mix(in oklab, currentColor 10%, transparent); }
|
|
1188
1189
|
.cm-banner-msg { flex: 1 1 auto; min-width: 0; }
|
|
1189
1190
|
.cm-banner-action {
|
|
1190
1191
|
flex: none;
|
|
@@ -1261,6 +1262,7 @@
|
|
|
1261
1262
|
touch-action: none;
|
|
1262
1263
|
transition: background var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease), transform var(--dur-snap) var(--ease);
|
|
1263
1264
|
}
|
|
1265
|
+
.vx-ptt:hover { background: color-mix(in oklab, var(--fg) 8%, var(--bg-2)); }
|
|
1264
1266
|
.vx-ptt:active { transform: scale(0.97); }
|
|
1265
1267
|
.vx-ptt-icon { font-size: var(--fs-xl); line-height: 1; }
|
|
1266
1268
|
.vx-ptt-label { font-size: var(--fs-tiny); letter-spacing: var(--tr-label); text-transform: uppercase; }
|
|
@@ -1370,6 +1372,7 @@
|
|
|
1370
1372
|
cursor: pointer;
|
|
1371
1373
|
transition: background var(--dur-base) var(--ease);
|
|
1372
1374
|
}
|
|
1375
|
+
.vx-btn:hover { background: var(--bg-4, var(--bg-3)); }
|
|
1373
1376
|
.vx-btn-on, .vx-btn-primary { background: var(--accent); color: var(--accent-fg); border-color: var(--accent); }
|
|
1374
1377
|
|
|
1375
1378
|
.vx-modal-backdrop {
|
|
@@ -1400,6 +1403,7 @@
|
|
|
1400
1403
|
border: 0; background: transparent; color: var(--fg-3);
|
|
1401
1404
|
font-size: var(--fs-xl); line-height: 1; cursor: pointer; padding: 0 var(--space-1);
|
|
1402
1405
|
}
|
|
1406
|
+
.vx-modal-x:hover { color: var(--fg); }
|
|
1403
1407
|
.vx-modal-body { padding: var(--space-3); overflow-y: auto; display: flex; flex-direction: column; gap: var(--space-3); }
|
|
1404
1408
|
.vx-modal-foot {
|
|
1405
1409
|
display: flex; justify-content: flex-end; gap: var(--space-2);
|
|
@@ -1457,6 +1461,7 @@
|
|
|
1457
1461
|
cursor: pointer;
|
|
1458
1462
|
font-size: var(--fs-sm);
|
|
1459
1463
|
}
|
|
1464
|
+
.vx-queue-btn:hover { background: var(--bg-4, var(--bg-2)); }
|
|
1460
1465
|
.vx-queue-strip {
|
|
1461
1466
|
display: flex; gap: var(--space-2);
|
|
1462
1467
|
overflow-x: auto;
|
|
@@ -1474,6 +1479,7 @@
|
|
|
1474
1479
|
font-size: var(--fs-tiny);
|
|
1475
1480
|
cursor: pointer;
|
|
1476
1481
|
}
|
|
1482
|
+
.vx-chip:hover { background: var(--bg-4, var(--bg-2)); border-color: var(--rule-strong); }
|
|
1477
1483
|
.vx-chip-current { border-color: var(--accent); background: color-mix(in oklab, var(--accent) 16%, var(--bg-3)); }
|
|
1478
1484
|
.vx-chip-live { border-color: var(--green-2); }
|
|
1479
1485
|
.vx-chip-dot { width: 8px; height: 8px; border-radius: var(--r-pill); background: var(--fg-3); flex-shrink: 0; }
|
|
@@ -1550,7 +1556,46 @@
|
|
|
1550
1556
|
.cm-tp-item-title { font-size: var(--fs-1, 14px); }
|
|
1551
1557
|
.cm-tp-item-snippet { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .8; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1552
1558
|
.cm-tp-item-meta { display: flex; gap: var(--space-2); font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
|
|
1553
|
-
.cm-tp-empty, .cm-forum-empty, .cm-channel-empty, .cm-member-empty {
|
|
1559
|
+
.cm-tp-empty, .cm-forum-empty, .cm-channel-empty, .cm-member-empty {
|
|
1560
|
+
display: flex; flex-direction: column; align-items: center; gap: var(--space-2);
|
|
1561
|
+
padding: var(--space-4) var(--space-3); text-align: center;
|
|
1562
|
+
color: var(--fg-2, var(--fg)); opacity: .7; font-size: var(--fs-sm);
|
|
1563
|
+
}
|
|
1564
|
+
.cm-tp-empty svg, .cm-forum-empty svg, .cm-channel-empty svg, .cm-member-empty svg { opacity: .6; }
|
|
1565
|
+
|
|
1566
|
+
/* Loading skeletons — cold-load placeholders for channel/member/thread/forum
|
|
1567
|
+
lists. Same .ds-skel shimmer primitive as sessions.js/files.js so every
|
|
1568
|
+
list surface in the kit uses one shimmer language, never a bare spinner. */
|
|
1569
|
+
.cm-channel-item-skeleton, .cm-member-item-skeleton {
|
|
1570
|
+
display: flex; align-items: center; gap: var(--space-2);
|
|
1571
|
+
padding: var(--space-2); margin: 2px var(--space-1);
|
|
1572
|
+
}
|
|
1573
|
+
.cm-channel-item-skeleton .ds-skel-icon, .cm-member-item-skeleton .ds-skel-icon {
|
|
1574
|
+
width: 20px; height: 20px; border-radius: var(--r-round, 50%); flex: none; background: var(--bg-3);
|
|
1575
|
+
}
|
|
1576
|
+
.cm-channel-item-skeleton .ds-skel-title, .cm-member-item-skeleton .ds-skel-title {
|
|
1577
|
+
height: 12px; width: 60%; border-radius: var(--r-1); background: var(--bg-3);
|
|
1578
|
+
}
|
|
1579
|
+
.cm-list-item-skeleton {
|
|
1580
|
+
display: flex; flex-direction: column; gap: 6px;
|
|
1581
|
+
padding: var(--space-2) var(--space-3); border-bottom: var(--bw-hair) solid var(--rule);
|
|
1582
|
+
}
|
|
1583
|
+
.cm-list-item-skeleton .ds-skel-title { height: 12px; width: 55%; border-radius: var(--r-1); background: var(--bg-3); }
|
|
1584
|
+
.cm-list-item-skeleton .ds-skel-meta { height: 9px; width: 35%; border-radius: var(--r-1); background: var(--bg-3); }
|
|
1585
|
+
/* Self-contained shimmer keyframe: community.css ships standalone (the
|
|
1586
|
+
community-app kit does not also load chat.css), so this cannot depend on
|
|
1587
|
+
chat.css's ds-skel-shimmer definition even though the visual language and
|
|
1588
|
+
token vocabulary match it exactly. */
|
|
1589
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
1590
|
+
.cm-channel-item-skeleton .ds-skel-icon, .cm-channel-item-skeleton .ds-skel-title,
|
|
1591
|
+
.cm-member-item-skeleton .ds-skel-icon, .cm-member-item-skeleton .ds-skel-title,
|
|
1592
|
+
.cm-list-item-skeleton .ds-skel-title, .cm-list-item-skeleton .ds-skel-meta {
|
|
1593
|
+
animation: cm-skel-shimmer 1.3s ease-in-out infinite;
|
|
1594
|
+
background: linear-gradient(90deg, var(--bg-3) 0%, var(--bg-2) 50%, var(--bg-3) 100%);
|
|
1595
|
+
background-size: 200% 100%;
|
|
1596
|
+
}
|
|
1597
|
+
}
|
|
1598
|
+
@keyframes cm-skel-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
|
|
1554
1599
|
|
|
1555
1600
|
/* ForumView — cm-forum / cm-forum-* */
|
|
1556
1601
|
.cm-forum { display: flex; flex-direction: column; height: 100%; min-height: 0; background: var(--bg-1, var(--bg-2)); color: var(--fg); }
|