anentrypoint-design 1.0.32 → 1.0.34
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/colors_and_type.css +1 -1
- package/dist/247420.css +149 -27
- package/dist/247420.js +25 -25
- package/package.json +1 -1
- package/src/community-app.js +1 -1
- package/src/components/chat/message.js +9 -1
- package/src/components/content/panel.js +1 -1
- package/src/components/shell/app-shell.js +2 -2
- package/src/components/shell/atoms.js +1 -1
- package/src/components/shell/workspace-shell.js +1 -1
- package/src/css/app-shell/base.css +9 -0
- package/src/css/app-shell/chat-polish.css +18 -1
- package/src/css/app-shell/files.css +10 -2
- package/src/css/app-shell/hero-content.css +16 -4
- package/src/css/app-shell/kits-appended.css +33 -16
- package/src/css/app-shell/primitives.css +33 -1
- package/src/css/app-shell/states-interactions.css +16 -0
- package/src/css/app-shell/topbar.css +14 -2
- package/src/kits/os/theme.css +1 -0
package/colors_and_type.css
CHANGED
package/dist/247420.css
CHANGED
|
@@ -797,7 +797,7 @@
|
|
|
797
797
|
}
|
|
798
798
|
|
|
799
799
|
.ds-247420[data-theme="github-dark"] ::selection {
|
|
800
|
-
background:
|
|
800
|
+
background: color-mix(in oklab, var(--accent) 24%, var(--bg-2));
|
|
801
801
|
color: var(--fg);
|
|
802
802
|
}
|
|
803
803
|
|
|
@@ -1050,6 +1050,14 @@
|
|
|
1050
1050
|
margin-top: var(--space-2);
|
|
1051
1051
|
}
|
|
1052
1052
|
|
|
1053
|
+
/* .app-main.narrow widens well past prose measure on wide no-sidebar
|
|
1054
|
+
viewports on purpose (topbar.css) so full-width siblings like .post-meta/
|
|
1055
|
+
h1/.post-index use the room. .lede/.ds-prose keep their reading-measure
|
|
1056
|
+
caps (38ch/--measure) but stayed left edge-anchored inside that wider
|
|
1057
|
+
column, turning the freed width into one-sided dead whitespace on the
|
|
1058
|
+
right of the article body instead of being absorbed as margin. */
|
|
1059
|
+
.ds-247420 .app-main.narrow > .lede, .ds-247420 .app-main.narrow > .t-lede, .ds-247420 .app-main.narrow > .ds-prose { margin-left: auto; margin-right: auto; }
|
|
1060
|
+
|
|
1053
1061
|
.ds-247420 .lede + .post-body, .ds-247420 .t-lede + .post-body, .ds-247420 .lede + .ds-prose, .ds-247420 .t-lede + .ds-prose {
|
|
1054
1062
|
margin-top: var(--space-4);
|
|
1055
1063
|
}
|
|
@@ -1226,8 +1234,19 @@
|
|
|
1226
1234
|
-webkit-backdrop-filter: none; padding: 0; min-height: 0;
|
|
1227
1235
|
flex: 1 1 auto;
|
|
1228
1236
|
}
|
|
1229
|
-
.ds-247420 .app-chrome > .app-crumb { order: 1; flex: 1 1 auto; }
|
|
1230
|
-
|
|
1237
|
+
.ds-247420 .app-chrome > .app-crumb { order: 1; flex: 1 1 auto; min-width: 0; }
|
|
1238
|
+
/* flex:1 1 auto + min-width:0 (not the previous 0 0 auto): a merged
|
|
1239
|
+
* chrome's topbar carries the search input, which has its own shrink
|
|
1240
|
+
* basis (.ds-topbar-search, kits-appended.css) meant to yield space before
|
|
1241
|
+
* the row wraps -- but a `0 0 auto` topbar box never shrinks itself, so the
|
|
1242
|
+
* search input's flexibility was inert and the whole topbar instead
|
|
1243
|
+
* dropped to a second line as one unit once combined crumb+topbar content
|
|
1244
|
+
* exceeded the row (witnessed live on the search kit at 1280px: crumb
|
|
1245
|
+
* 564px + topbar 596px overflowed a 1184px content box, wrapping the
|
|
1246
|
+
* topbar under the crumb and reading as a broken sticky header). Letting
|
|
1247
|
+
* the topbar itself shrink means the search input actually compresses
|
|
1248
|
+
* first, keeping both bars on one line at realistic content widths. */
|
|
1249
|
+
.ds-247420 .app-chrome > .app-topbar { order: 2; flex: 1 1 auto; min-width: 0; justify-content: flex-end; }
|
|
1231
1250
|
.ds-247420 .app-chrome > .app-topbar > .brand { display: none; }
|
|
1232
1251
|
.ds-247420 .app-chrome > .app-topbar > nav { margin-left: 0; }
|
|
1233
1252
|
.ds-247420 .app-chrome > .app-crumb > .crumb-right { margin-left: auto; }
|
|
@@ -1523,6 +1542,7 @@
|
|
|
1523
1542
|
/* Full-height route children fill the region instead of scrolling the page. */
|
|
1524
1543
|
.ds-247420 .app-main > .chat,
|
|
1525
1544
|
.ds-247420 .app-main > .chat-area,
|
|
1545
|
+
.ds-247420 .app-main > .chat-kit-page,
|
|
1526
1546
|
.ds-247420 .app-main > .ds-file-stage,
|
|
1527
1547
|
.ds-247420 .app-main > .ds-files-stack,
|
|
1528
1548
|
.ds-247420 .app-main > .grow { flex: 1 1 auto; min-height: 0; }
|
|
@@ -1864,7 +1884,11 @@
|
|
|
1864
1884
|
border-radius: 50%;
|
|
1865
1885
|
background: var(--sky);
|
|
1866
1886
|
transform: translateY(-50%);
|
|
1867
|
-
|
|
1887
|
+
}
|
|
1888
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
1889
|
+
.ds-247420 .chip.tone-live::before {
|
|
1890
|
+
animation: chip-live-pulse 1.6s ease-in-out infinite;
|
|
1891
|
+
}
|
|
1868
1892
|
}
|
|
1869
1893
|
@keyframes chip-live-pulse {
|
|
1870
1894
|
0%, 100% { opacity: 1; box-shadow: 0 0 0 0 color-mix(in oklab, var(--sky) 50%, transparent); }
|
|
@@ -1993,6 +2017,34 @@
|
|
|
1993
2017
|
.ds-247420 .ds-tooltip { transition: none; }
|
|
1994
2018
|
}
|
|
1995
2019
|
|
|
2020
|
+
/* -- Menubar -------------------------------------------------------------
|
|
2021
|
+
Row of closed triggers (mirrors .ds-dp-trigger's affordance); without
|
|
2022
|
+
this the wrapper and its item divs fall back to block-level UA defaults,
|
|
2023
|
+
stacking the triggers vertically and rendering them as filled buttons
|
|
2024
|
+
abutting any adjacent status text. */
|
|
2025
|
+
.ds-247420 .ds-menubar { display: inline-flex; align-items: center; gap: var(--space-1); }
|
|
2026
|
+
.ds-247420 .ds-menubar-item { display: inline-flex; }
|
|
2027
|
+
.ds-247420 .ds-menubar-trigger {
|
|
2028
|
+
display: inline-flex;
|
|
2029
|
+
align-items: center;
|
|
2030
|
+
min-height: 32px;
|
|
2031
|
+
padding: var(--space-1-5) var(--space-2-5);
|
|
2032
|
+
border: 0;
|
|
2033
|
+
border-radius: var(--r-2);
|
|
2034
|
+
background: var(--bg-2);
|
|
2035
|
+
color: var(--fg);
|
|
2036
|
+
font-family: inherit;
|
|
2037
|
+
font-size: var(--fs-sm);
|
|
2038
|
+
cursor: pointer;
|
|
2039
|
+
transition: background-color var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
|
|
2040
|
+
}
|
|
2041
|
+
.ds-247420 .ds-menubar-trigger:hover { background: var(--bg-3); }
|
|
2042
|
+
.ds-247420 .ds-menubar-trigger:focus-visible { box-shadow: var(--focus-ring-inset); outline: none; }
|
|
2043
|
+
.ds-247420 .ds-menubar-trigger.is-open { background: var(--bg-3); }
|
|
2044
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2045
|
+
.ds-247420 .ds-menubar-trigger { transition: none; }
|
|
2046
|
+
}
|
|
2047
|
+
|
|
1996
2048
|
/* ============================================================
|
|
1997
2049
|
Panel — soft tonal container, no border decoration
|
|
1998
2050
|
============================================================ */
|
|
@@ -2437,6 +2489,16 @@
|
|
|
2437
2489
|
@container (max-width: 900px) {
|
|
2438
2490
|
.ds-247420 .ds-hero { padding: var(--space-7) 0 var(--space-6); }
|
|
2439
2491
|
}
|
|
2492
|
+
/* .ds-hero already supplies its own --space-8 (96px) trailing padding, same
|
|
2493
|
+
"gap owned by one side only" pattern as * + .ds-section below. A .panel
|
|
2494
|
+
right after it still added its own --space-6-scaled top margin PLUS its
|
|
2495
|
+
panel-head top padding on top of that -- measured live, the stat block sat
|
|
2496
|
+
~138px from "currently shipping" (96 hero pad + panel's own lead) versus
|
|
2497
|
+
the ~42px any other block gets ahead of a .panel, and well past the 96px
|
|
2498
|
+
.ds-section itself uses for its "more space above than below" lead. Zero
|
|
2499
|
+
the panel's own top margin here so the hero's trailing padding is the only
|
|
2500
|
+
contributor, matching every other panel/section transition on the page. */
|
|
2501
|
+
.ds-247420 .ds-hero + .panel { margin-top: 0; }
|
|
2440
2502
|
.ds-247420 .ds-chat-title { margin: 0; font-size: inherit; }
|
|
2441
2503
|
|
|
2442
2504
|
/* ============================================================
|
|
@@ -2509,14 +2571,16 @@
|
|
|
2509
2571
|
.ds-247420 .ds-marquee-track {
|
|
2510
2572
|
display: inline-flex; gap: var(--space-5);
|
|
2511
2573
|
white-space: nowrap; will-change: transform;
|
|
2512
|
-
|
|
2574
|
+
}
|
|
2575
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
2576
|
+
.ds-247420 .ds-marquee-track { animation: ds-marquee-run 28s linear infinite; }
|
|
2577
|
+
.ds-247420 .ds-marquee:hover .ds-marquee-track,
|
|
2578
|
+
.ds-247420 .ds-marquee:focus-within .ds-marquee-track,
|
|
2579
|
+
.ds-247420 .ds-marquee:active .ds-marquee-track { animation-play-state: paused; }
|
|
2513
2580
|
}
|
|
2514
2581
|
.ds-247420 .ds-marquee-run { display: inline-flex; align-items: center; gap: var(--space-5); }
|
|
2515
2582
|
.ds-247420 .ds-marquee-item { display: inline-flex; align-items: center; gap: var(--space-5); }
|
|
2516
2583
|
.ds-247420 .ds-marquee-sep { color: var(--accent-ink); }
|
|
2517
|
-
.ds-247420 .ds-marquee:hover .ds-marquee-track,
|
|
2518
|
-
.ds-247420 .ds-marquee:focus-within .ds-marquee-track,
|
|
2519
|
-
.ds-247420 .ds-marquee:active .ds-marquee-track { animation-play-state: paused; }
|
|
2520
2584
|
@keyframes ds-marquee-run {
|
|
2521
2585
|
from { transform: translateX(0); }
|
|
2522
2586
|
to { transform: translateX(-50%); }
|
|
@@ -3319,7 +3383,10 @@
|
|
|
3319
3383
|
.ds-247420 .ds-skel::after {
|
|
3320
3384
|
content: ''; position: absolute; inset: 0;
|
|
3321
3385
|
background: linear-gradient(90deg, transparent, var(--bg-3), transparent);
|
|
3322
|
-
transform: translateX(-100%);
|
|
3386
|
+
transform: translateX(-100%);
|
|
3387
|
+
}
|
|
3388
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
3389
|
+
.ds-247420 .ds-skel::after { animation: ds-skel-shimmer 1.2s infinite; }
|
|
3323
3390
|
}
|
|
3324
3391
|
.ds-247420 .ds-skel-icon { width: 22px; height: 22px; }
|
|
3325
3392
|
.ds-247420 .ds-skel-title { height: 12px; width: 60%; }
|
|
@@ -3643,6 +3710,7 @@
|
|
|
3643
3710
|
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
3644
3711
|
}
|
|
3645
3712
|
.ds-247420 .ds-crumb-seg:hover { background: var(--bg-2); color: var(--fg); }
|
|
3713
|
+
.ds-247420 .ds-crumb-seg:focus-visible { outline: none; box-shadow: var(--focus-ring-inset); }
|
|
3646
3714
|
.ds-247420 .ds-crumb-seg.leaf { color: var(--fg); font-weight: 600; }
|
|
3647
3715
|
.ds-247420 .ds-crumb-sep { color: var(--fg-3); opacity: 0.6; user-select: none; }
|
|
3648
3716
|
|
|
@@ -3814,7 +3882,11 @@
|
|
|
3814
3882
|
progress) — a sliding marquee bar reads as "working", not stuck at 0%. */
|
|
3815
3883
|
.ds-247420 .ds-upload-bar.indeterminate .ds-upload-fill {
|
|
3816
3884
|
width: 40%; transition: none;
|
|
3817
|
-
|
|
3885
|
+
}
|
|
3886
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
3887
|
+
.ds-247420 .ds-upload-bar.indeterminate .ds-upload-fill {
|
|
3888
|
+
animation: ds-upload-marquee 1.1s ease-in-out infinite;
|
|
3889
|
+
}
|
|
3818
3890
|
}
|
|
3819
3891
|
@keyframes ds-upload-marquee {
|
|
3820
3892
|
0% { transform: translateX(-100%); }
|
|
@@ -4281,7 +4353,7 @@
|
|
|
4281
4353
|
.ds-247420 .chat-empty-title { font-size: var(--fs-sm); margin: 0 0 var(--space-1); }
|
|
4282
4354
|
.ds-247420 .chat-empty-sub { font-size: var(--fs-tiny); margin: 0; opacity: .82; } /* WCAG-verified 2026 restyle: .7 blended --fg-3 to 3.72:1 on dark --bg (#1a1a1a); .82 clears 4.53:1 */
|
|
4283
4355
|
|
|
4284
|
-
.ds-247420 .chat-msg { display: flex; gap: var(--space-2-75); align-items: flex-start; padding: var(--space-1-75) 0; position: relative; min-width: 0; }
|
|
4356
|
+
.ds-247420 .chat-msg { display: flex; flex-shrink: 0; gap: var(--space-2-75); align-items: flex-start; padding: var(--space-1-75) 0; position: relative; min-width: 0; }
|
|
4285
4357
|
.ds-247420 .chat-msg.you { flex-direction: row-reverse; }
|
|
4286
4358
|
.ds-247420 .chat-msg.you .chat-stack { align-items: flex-end; }
|
|
4287
4359
|
.ds-247420 .chat-msg:hover { background: color-mix(in oklab, var(--fg) 4%, transparent); padding: var(--space-1-75) 0; margin: 0; border-radius: var(--r-0); transition: background var(--dur-base) var(--ease); }
|
|
@@ -4847,6 +4919,23 @@
|
|
|
4847
4919
|
text-align: center;
|
|
4848
4920
|
margin: 0;
|
|
4849
4921
|
}
|
|
4922
|
+
/* Reference's Projects/General sidebar switcher: a two-pill row sitting
|
|
4923
|
+
above the tree, spaced off the tree below it like a real section header,
|
|
4924
|
+
not flush against it. Tighter side padding than --pad-x (round 4 widened
|
|
4925
|
+
that to 48px) -- two pills at natural width need more of the 256px rail
|
|
4926
|
+
than a 48px-each-side gutter leaves, so this row alone uses --space-3 to
|
|
4927
|
+
stay a single non-wrapping row like the reference, without touching the
|
|
4928
|
+
shared --pad-x token every other sidebar section still uses. */
|
|
4929
|
+
.ds-247420 .aicat-side-tabs {
|
|
4930
|
+
padding: var(--space-3) var(--space-3) var(--space-2);
|
|
4931
|
+
flex-wrap: nowrap;
|
|
4932
|
+
}
|
|
4933
|
+
.ds-247420 .ds-side-empty-note {
|
|
4934
|
+
padding: var(--space-2) var(--pad-x);
|
|
4935
|
+
color: var(--fg-3);
|
|
4936
|
+
font-size: var(--fs-sm);
|
|
4937
|
+
margin: 0;
|
|
4938
|
+
}
|
|
4850
4939
|
|
|
4851
4940
|
/* ============================================================
|
|
4852
4941
|
Composer attachment-detected badge, context line, hint, toolbar,
|
|
@@ -5220,6 +5309,9 @@
|
|
|
5220
5309
|
border-radius: 50%;
|
|
5221
5310
|
animation: spinner-rotate 0.8s linear infinite;
|
|
5222
5311
|
}
|
|
5312
|
+
@media (prefers-reduced-motion: reduce) {
|
|
5313
|
+
.ds-247420 .loading::after { animation: none; }
|
|
5314
|
+
}
|
|
5223
5315
|
|
|
5224
5316
|
/* Error state.
|
|
5225
5317
|
No !important: the only rule in the kit that also resets a matching element's
|
|
@@ -5345,6 +5437,16 @@
|
|
|
5345
5437
|
.ds-247420 .list-item.drag-after::after { animation: pulse-line 0.6s ease-in-out infinite; }
|
|
5346
5438
|
}
|
|
5347
5439
|
|
|
5440
|
+
/* ------------------------------------------------------------
|
|
5441
|
+
Focus-visible for controls with no other component sheet
|
|
5442
|
+
-------------------------------------------------------------- */
|
|
5443
|
+
|
|
5444
|
+
.ds-247420 .ds-session-new:focus-visible,
|
|
5445
|
+
.ds-247420 .agentchat-cwd-btn:focus-visible {
|
|
5446
|
+
outline: none;
|
|
5447
|
+
box-shadow: var(--focus-ring-inset);
|
|
5448
|
+
}
|
|
5449
|
+
|
|
5348
5450
|
/* ------------------------------------------------------------
|
|
5349
5451
|
Context Menu Styles
|
|
5350
5452
|
-------------------------------------------------------------- */
|
|
@@ -5909,6 +6011,9 @@
|
|
|
5909
6011
|
animation: skeleton-load 1.5s infinite;
|
|
5910
6012
|
border-radius: var(--r-2);
|
|
5911
6013
|
}
|
|
6014
|
+
@media (prefers-reduced-motion: reduce) {
|
|
6015
|
+
.ds-247420 .skeleton { animation: none; }
|
|
6016
|
+
}
|
|
5912
6017
|
|
|
5913
6018
|
@keyframes skeleton-load {
|
|
5914
6019
|
0% { background-position: 200% 0; }
|
|
@@ -7387,7 +7492,18 @@
|
|
|
7387
7492
|
}
|
|
7388
7493
|
.ds-247420 .ds-prim-panel { padding: clamp(10px, 2.5vw, 14px) clamp(10px, 3vw, 18px); display: flex; flex-direction: column; gap: 18px; }
|
|
7389
7494
|
.ds-247420 .ds-prim-row { display: flex; gap: var(--space-2-5); flex-wrap: wrap; align-items: center; }
|
|
7495
|
+
/* collab overlay specimens (LiveCursorOverlay/RemoteSelectionRings/
|
|
7496
|
+
RecentEditHighlightFlash) are `position:absolute; inset:0`, meant to
|
|
7497
|
+
overlay their own demo row -- without a positioned ancestor closer than
|
|
7498
|
+
the ancestor `.panel` (panel-row.css), they escape to cover the whole
|
|
7499
|
+
panel including its title. Scope them to this row. */
|
|
7500
|
+
.ds-247420 .ds-prim-row-collab { position: relative; min-height: 64px; }
|
|
7390
7501
|
.ds-247420 .ds-prim-label { flex: 0 0 64px; font-family: var(--ff-mono); font-size: var(--fs-nano); color: var(--fg-3); }
|
|
7502
|
+
/* Trailing status readouts (e.g. "none pressed yet") share .ds-prim-label's
|
|
7503
|
+
type/color but are free-length prose, not the fixed-width leading row
|
|
7504
|
+
label -- the shared 64px flex-basis wrapped them into a cramped 3-line
|
|
7505
|
+
stack. Give status text room to sit on one line instead. */
|
|
7506
|
+
.ds-247420 .ds-prim-label-status { flex: 0 1 auto; white-space: nowrap; }
|
|
7391
7507
|
|
|
7392
7508
|
/* == appended: content-site == */
|
|
7393
7509
|
/* Home landing wrappers (site/theme.mjs) — replace banned inline styles. */
|
|
@@ -7474,8 +7590,8 @@
|
|
|
7474
7590
|
need a clearly larger interval between them than within them, or the whole
|
|
7475
7591
|
form reads as one undifferentiated column. Margin-collapse-free (flow root
|
|
7476
7592
|
siblings) — first/last are zeroed so the panel body sets the outer edge. */
|
|
7477
|
-
.ds-247420 .ds-field-block { display: flex; flex-direction: column; gap: var(--space-1-75); margin: calc(var(--space-4) * var(--density)) 0 0; }
|
|
7478
|
-
.ds-247420 .ds-settings-body > .ds-field-block:first-child { margin-top: 0; }
|
|
7593
|
+
.ds-247420 .ds-field-block, .ds-247420 .ds-field-wrap { display: flex; flex-direction: column; gap: var(--space-1-75); margin: calc(var(--space-4) * var(--density)) 0 0; }
|
|
7594
|
+
.ds-247420 .ds-settings-body > .ds-field-block:first-child, .ds-247420 .ds-settings-body > .ds-field-wrap:first-child { margin-top: 0; }
|
|
7479
7595
|
/* Field width is a hint about expected input length. A name or handle stretched
|
|
7480
7596
|
across a 1000px desktop column tells the user to type a paragraph and leaves
|
|
7481
7597
|
the eye no left-to-right anchor; capping the control (not the row) keeps the
|
|
@@ -7554,7 +7670,7 @@
|
|
|
7554
7670
|
then has to scroll. `auto` collapses when the pane is short, centres when tall. */
|
|
7555
7671
|
.ds-247420 .ds-auth-col { width: 100%; max-width: 440px; display: flex; flex-direction: column; gap: var(--space-2); margin: auto 0; min-width: 0; }
|
|
7556
7672
|
/* 18px ceiling: no tier between --space-3 (16) and --space-3-5 (20). */
|
|
7557
|
-
.ds-247420 .ds-auth-form {
|
|
7673
|
+
.ds-247420 .ds-auth-form { display: flex; flex-direction: column; gap: var(--space-2-5); }
|
|
7558
7674
|
.ds-247420 .ds-auth-sent { align-items: center; text-align: center; }
|
|
7559
7675
|
/* 32px is an ICON size, not a type size: this is the confirmation mark above
|
|
7560
7676
|
the "check your mail" copy, sized to the 440px auth column, and the --fs-*
|
|
@@ -7761,18 +7877,19 @@
|
|
|
7761
7877
|
/* min-height is a floor, not the intended size — .chat-kit-page's flex-column
|
|
7762
7878
|
splits leftover height between this (flex:1 1 0%, "leftover") and the
|
|
7763
7879
|
pattern-notes panel below it (flex:0 1 auto, i.e. sized to its own content
|
|
7764
|
-
first).
|
|
7765
|
-
|
|
7766
|
-
|
|
7767
|
-
|
|
7768
|
-
|
|
7769
|
-
|
|
7770
|
-
|
|
7771
|
-
|
|
7772
|
-
|
|
7773
|
-
|
|
7774
|
-
has room
|
|
7775
|
-
|
|
7880
|
+
first). A hard px floor here (this used to read max(30vh, 420px)) can
|
|
7881
|
+
exceed .chat-kit-page's own available height on a short/laptop viewport —
|
|
7882
|
+
420px plus the panel's natural content height overflows the column
|
|
7883
|
+
instead of yielding to it, so .chat-thread's internal overflow-y:auto
|
|
7884
|
+
never engages and the last couple of messages are stranded below the
|
|
7885
|
+
fold with no reachable scroll region (the thread is never empty, it is
|
|
7886
|
+
invisible). min-height:0 here — same as .chat/.chat-thread already use —
|
|
7887
|
+
lets flex:1 actually shrink this to whatever .chat-kit-page has left,
|
|
7888
|
+
so .chat-thread (flex:1, min-height:0, overflow-y:auto) is the thing that
|
|
7889
|
+
scrolls, not the page. It still grows past 0 via flex:1 whenever the
|
|
7890
|
+
column has room, and 30vh remains the width->grid breakpoint's intent via
|
|
7891
|
+
plain flex growth, not a floor that can outgrow its container. */
|
|
7892
|
+
.ds-247420 .ds-chat-layout { display: flex; flex-direction: column; flex: 1; min-height: 0; gap: var(--space-3); }
|
|
7776
7893
|
.ds-247420 .ds-chat-layout > .chat { min-width: 0; }
|
|
7777
7894
|
.ds-247420 .ds-chat-detail { display: none; }
|
|
7778
7895
|
@media (min-width: 1100px) {
|
|
@@ -7961,9 +8078,14 @@
|
|
|
7961
8078
|
color: var(--fg-3);
|
|
7962
8079
|
line-height: 1.3;
|
|
7963
8080
|
}
|
|
7964
|
-
/* Message body claims the full second line of the wrapping body row.
|
|
8081
|
+
/* Message body claims the full second line of the wrapping body row. Capped
|
|
8082
|
+
to a readable measure -- unlike .chat-bubble this is a flat list row, not
|
|
8083
|
+
a two-sided bubble, but an uncapped prose line stretches the full pane
|
|
8084
|
+
width (~970px), which reads as dead paper beside every short message
|
|
8085
|
+
rather than an intentionally spacious flat list. */
|
|
7965
8086
|
.ds-247420 .ds-community-msg-text {
|
|
7966
8087
|
flex: 1 0 100%;
|
|
8088
|
+
max-width: 70ch;
|
|
7967
8089
|
margin: 0;
|
|
7968
8090
|
min-width: 0;
|
|
7969
8091
|
color: var(--fg-2);
|