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.
@@ -795,7 +795,7 @@ select:focus-visible {
795
795
  }
796
796
 
797
797
  [data-theme="github-dark"] ::selection {
798
- background: #0d2847;
798
+ background: color-mix(in oklab, var(--accent) 24%, var(--bg-2));
799
799
  color: var(--fg);
800
800
  }
801
801
 
package/dist/247420.css CHANGED
@@ -797,7 +797,7 @@
797
797
  }
798
798
 
799
799
  .ds-247420[data-theme="github-dark"] ::selection {
800
- background: #0d2847;
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
- .ds-247420 .app-chrome > .app-topbar { order: 2; flex: 0 0 auto; }
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
- animation: chip-live-pulse 1.6s ease-in-out infinite;
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
- animation: ds-marquee-run 28s linear infinite;
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%); animation: ds-skel-shimmer 1.2s infinite;
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
- animation: ds-upload-marquee 1.1s ease-in-out infinite;
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 { padding: clamp(var(--space-2-75), 3vw, 18px); display: flex; flex-direction: column; gap: var(--space-2-5); }
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). On a short viewport the panel's natural content height can consume
7782
- the entire column budget, squeezing this flex-basis:0% sibling to a real,
7783
- rendered, fully-populated-with-messages 0px the thread is never empty,
7784
- it is invisible. Inside .chat itself, .chat-head and .chat-composer are
7785
- also flex:0-ish naturally-sized siblings of .chat-thread (flex:1 1 0%,
7786
- chat-polish.css), so the floor has to clear their combined natural height
7787
- (~55px head + ~78px composer, chrome + gap) with real room left for the
7788
- thread to still show at least a couple of message bubbles rather than
7789
- collapsing to a sliver between them 30vh was not enough on a short
7790
- viewport. It still grows past this floor via flex:1 whenever the column
7791
- has room. */
7792
- .ds-247420 .ds-chat-layout { display: flex; flex-direction: column; flex: 1; min-height: max(30vh, 420px); gap: var(--space-3); }
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);