anentrypoint-design 1.0.33 → 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 +132 -27
- package/dist/247420.js +26 -26
- 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 +1 -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); }
|
|
@@ -5237,6 +5309,9 @@
|
|
|
5237
5309
|
border-radius: 50%;
|
|
5238
5310
|
animation: spinner-rotate 0.8s linear infinite;
|
|
5239
5311
|
}
|
|
5312
|
+
@media (prefers-reduced-motion: reduce) {
|
|
5313
|
+
.ds-247420 .loading::after { animation: none; }
|
|
5314
|
+
}
|
|
5240
5315
|
|
|
5241
5316
|
/* Error state.
|
|
5242
5317
|
No !important: the only rule in the kit that also resets a matching element's
|
|
@@ -5362,6 +5437,16 @@
|
|
|
5362
5437
|
.ds-247420 .list-item.drag-after::after { animation: pulse-line 0.6s ease-in-out infinite; }
|
|
5363
5438
|
}
|
|
5364
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
|
+
|
|
5365
5450
|
/* ------------------------------------------------------------
|
|
5366
5451
|
Context Menu Styles
|
|
5367
5452
|
-------------------------------------------------------------- */
|
|
@@ -5926,6 +6011,9 @@
|
|
|
5926
6011
|
animation: skeleton-load 1.5s infinite;
|
|
5927
6012
|
border-radius: var(--r-2);
|
|
5928
6013
|
}
|
|
6014
|
+
@media (prefers-reduced-motion: reduce) {
|
|
6015
|
+
.ds-247420 .skeleton { animation: none; }
|
|
6016
|
+
}
|
|
5929
6017
|
|
|
5930
6018
|
@keyframes skeleton-load {
|
|
5931
6019
|
0% { background-position: 200% 0; }
|
|
@@ -7404,7 +7492,18 @@
|
|
|
7404
7492
|
}
|
|
7405
7493
|
.ds-247420 .ds-prim-panel { padding: clamp(10px, 2.5vw, 14px) clamp(10px, 3vw, 18px); display: flex; flex-direction: column; gap: 18px; }
|
|
7406
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; }
|
|
7407
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; }
|
|
7408
7507
|
|
|
7409
7508
|
/* == appended: content-site == */
|
|
7410
7509
|
/* Home landing wrappers (site/theme.mjs) — replace banned inline styles. */
|
|
@@ -7491,8 +7590,8 @@
|
|
|
7491
7590
|
need a clearly larger interval between them than within them, or the whole
|
|
7492
7591
|
form reads as one undifferentiated column. Margin-collapse-free (flow root
|
|
7493
7592
|
siblings) — first/last are zeroed so the panel body sets the outer edge. */
|
|
7494
|
-
.ds-247420 .ds-field-block { display: flex; flex-direction: column; gap: var(--space-1-75); margin: calc(var(--space-4) * var(--density)) 0 0; }
|
|
7495
|
-
.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; }
|
|
7496
7595
|
/* Field width is a hint about expected input length. A name or handle stretched
|
|
7497
7596
|
across a 1000px desktop column tells the user to type a paragraph and leaves
|
|
7498
7597
|
the eye no left-to-right anchor; capping the control (not the row) keeps the
|
|
@@ -7571,7 +7670,7 @@
|
|
|
7571
7670
|
then has to scroll. `auto` collapses when the pane is short, centres when tall. */
|
|
7572
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; }
|
|
7573
7672
|
/* 18px ceiling: no tier between --space-3 (16) and --space-3-5 (20). */
|
|
7574
|
-
.ds-247420 .ds-auth-form {
|
|
7673
|
+
.ds-247420 .ds-auth-form { display: flex; flex-direction: column; gap: var(--space-2-5); }
|
|
7575
7674
|
.ds-247420 .ds-auth-sent { align-items: center; text-align: center; }
|
|
7576
7675
|
/* 32px is an ICON size, not a type size: this is the confirmation mark above
|
|
7577
7676
|
the "check your mail" copy, sized to the 440px auth column, and the --fs-*
|
|
@@ -7778,18 +7877,19 @@
|
|
|
7778
7877
|
/* min-height is a floor, not the intended size — .chat-kit-page's flex-column
|
|
7779
7878
|
splits leftover height between this (flex:1 1 0%, "leftover") and the
|
|
7780
7879
|
pattern-notes panel below it (flex:0 1 auto, i.e. sized to its own content
|
|
7781
|
-
first).
|
|
7782
|
-
|
|
7783
|
-
|
|
7784
|
-
|
|
7785
|
-
|
|
7786
|
-
|
|
7787
|
-
|
|
7788
|
-
|
|
7789
|
-
|
|
7790
|
-
|
|
7791
|
-
has room
|
|
7792
|
-
|
|
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); }
|
|
7793
7893
|
.ds-247420 .ds-chat-layout > .chat { min-width: 0; }
|
|
7794
7894
|
.ds-247420 .ds-chat-detail { display: none; }
|
|
7795
7895
|
@media (min-width: 1100px) {
|
|
@@ -7978,9 +8078,14 @@
|
|
|
7978
8078
|
color: var(--fg-3);
|
|
7979
8079
|
line-height: 1.3;
|
|
7980
8080
|
}
|
|
7981
|
-
/* 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. */
|
|
7982
8086
|
.ds-247420 .ds-community-msg-text {
|
|
7983
8087
|
flex: 1 0 100%;
|
|
8088
|
+
max-width: 70ch;
|
|
7984
8089
|
margin: 0;
|
|
7985
8090
|
min-width: 0;
|
|
7986
8091
|
color: var(--fg-2);
|