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.
@@ -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); }
@@ -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 { 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); }
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). On a short viewport the panel's natural content height can consume
7765
- the entire column budget, squeezing this flex-basis:0% sibling to a real,
7766
- rendered, fully-populated-with-messages 0px the thread is never empty,
7767
- it is invisible. Inside .chat itself, .chat-head and .chat-composer are
7768
- also flex:0-ish naturally-sized siblings of .chat-thread (flex:1 1 0%,
7769
- chat-polish.css), so the floor has to clear their combined natural height
7770
- (~55px head + ~78px composer, chrome + gap) with real room left for the
7771
- thread to still show at least a couple of message bubbles rather than
7772
- collapsing to a sliver between them 30vh was not enough on a short
7773
- viewport. It still grows past this floor via flex:1 whenever the column
7774
- has room. */
7775
- .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); }
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);