anentrypoint-design 0.0.382 → 0.0.384

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/dist/247420.css CHANGED
@@ -681,7 +681,7 @@
681
681
  left: 0;
682
682
  background: var(--accent);
683
683
  color: var(--accent-fg);
684
- padding: 8px 16px;
684
+ padding: var(--space-2) var(--space-3);
685
685
  text-decoration: none;
686
686
  /* Must outrank every layer of chrome once focused, or the first Tab press
687
687
  lands on a control hidden behind the sticky header (was z-index:100,
@@ -696,6 +696,35 @@
696
696
  outline: var(--focus-w) solid var(--focus-color);
697
697
  outline-offset: var(--focus-offset);
698
698
  }
699
+ /* Visually-hidden but still in the accessibility tree. Emitted by Row() (the
700
+ rail status word), FilterBar()/FileGrid() (aria-live result counts) and
701
+ form-primitives' required marker — all of which shipped BEFORE this rule
702
+ existed anywhere the app shell loads. The only other definitions live in
703
+ app-surfaces.css (pre-scoped to `.ds-247420`, so it never reaches a kit that
704
+ does not mount that root) and editor-primitives.css (a separate opt-in
705
+ <link>), which left every app-shell consumer rendering screen-reader-only
706
+ text VISIBLY the moment it passed `rail`/`resultCount`.
707
+ Deliberately NOT `display:none` / `visibility:hidden` / `width:0`: those
708
+ remove the node from the accessibility tree too, which defeats the entire
709
+ purpose — the text exists only for AT. The clip + 1px box is what keeps it
710
+ announced while occupying no visible area.
711
+ `margin: -1px` is OFF-SCALE ON PURPOSE — it is not rhythm, it is one half of
712
+ the canonical visually-hidden idiom: the negative margin cancels the 1px box
713
+ so the clipped element contributes zero layout. Snapping it to a --space-*
714
+ rung would reintroduce a measurable gap. `clip` is deprecated but retained
715
+ alongside `clip-path` for older AT/browser pairs that ignore the latter. */
716
+ .ds-247420 .sr-only {
717
+ position: absolute;
718
+ width: 1px;
719
+ height: 1px;
720
+ padding: 0;
721
+ margin: -1px;
722
+ overflow: hidden;
723
+ clip: rect(0, 0, 0, 0);
724
+ clip-path: inset(50%);
725
+ white-space: nowrap;
726
+ border: 0;
727
+ }
699
728
  .ds-247420 body {
700
729
  background: var(--bg);
701
730
  color: var(--fg);
@@ -784,6 +813,30 @@
784
813
  .ds-247420 .ds-prose h1 { font-size: clamp(34px, 5.4cqi, 64px); margin-bottom: var(--space-3); }
785
814
  .ds-247420 .ds-prose h2 { margin: var(--space-6) 0 var(--space-3); }
786
815
  .ds-247420 .ds-prose h3 { margin: var(--space-5) 0 var(--space-2); font-size: var(--fs-lg); font-weight: 600; }
816
+ /* Closing line of an article ("end. reply by opening a pr."), set off from the
817
+ body it terminates. Quieter and smaller than the prose around it: it takes
818
+ the mono face and the --fg-3 tone the house uses for ancillary voices
819
+ (.t-micro, .dim), so the endnote reads as chrome around the article rather
820
+ than a final paragraph of it. The --space-5 lead does the "set off" — it
821
+ breaks the paragraph rhythm so the eye registers the piece has ended before
822
+ reading the words; margin-bottom:0 overrides .ds-prose p's --space-4 so the
823
+ article does not end on dead space.
824
+ Lives here, beside the rest of the .ds-prose family, NOT in gm-prose.css:
825
+ the blog kit that uses this class links only colors_and_type.css +
826
+ app-shell.css, so a rule in that separately-<link>-ed export would be exactly
827
+ as undefined as the class was before. Sized at --fs-xs, not the --fs-micro
828
+ label rung: this is a readable sentence with a link in it, not a micro-label.
829
+ The link inherits .ds-prose a's --accent-ink treatment (a readable TEXT tone;
830
+ the bare --accent fill is ~1.07:1 on paper) — deliberately not re-stated. */
831
+ .ds-247420 .ds-prose .ds-prose-endnote,
832
+ .ds-247420 .ds-prose-endnote {
833
+ margin-top: var(--space-5);
834
+ margin-bottom: 0;
835
+ font-family: var(--ff-mono);
836
+ font-size: var(--fs-xs);
837
+ line-height: var(--lh-base);
838
+ color: var(--fg-3);
839
+ }
787
840
 
788
841
  .ds-247420 .dim { color: var(--fg-3); }
789
842
 
@@ -1028,7 +1081,11 @@
1028
1081
  border-radius: var(--r-pill);
1029
1082
  }
1030
1083
  /* The lime active pill is the sidebar's one accent moment; its own count
1031
- chip rides the ink-on-accent pair instead of a second competing hue. */
1084
+ chip rides the ink-on-accent pair instead of a second competing hue.
1085
+ The bare --accent here is deliberate and is NOT the usual accent-as-text
1086
+ defect: the chip's own background is --accent-fg (ink), so this is the
1087
+ INVERTED pair -- lime on ink, which is the high-contrast direction. Only
1088
+ accent-coloured text on a normal background needs --accent-ink. */
1032
1089
  .ds-247420 .app-side a.active .count {
1033
1090
  background: color-mix(in oklab, var(--accent-fg) 82%, transparent);
1034
1091
  color: var(--accent);
@@ -1798,6 +1855,16 @@
1798
1855
  Changelog
1799
1856
  ============================================================ */
1800
1857
  .ds-247420 .ds-changelog-row {
1858
+ /* The !important is load-bearing and was empirically confirmed so -- do not
1859
+ remove it on a specificity argument. A changelog row carries three tracks
1860
+ (date, version, message) where a plain .row carries two, and the responsive
1861
+ blocks in responsive.css legitimately rewrite .row's template at several
1862
+ breakpoints. Those blocks are later in the cascade, so at tablet width the
1863
+ two-track override wins on source order and collapses the version column:
1864
+ measured live, removing this flag changes the computed template from
1865
+ "120.75px 77.625px 70.125px" to "103.5px 0px 165px" -- a zero-width column
1866
+ and the version silently gone. Scoping to .app does not help, because the
1867
+ competing rules would need to be scoped in lockstep. */
1801
1868
  grid-template-columns: minmax(110px, 14ch) minmax(60px, 9ch) minmax(0, 1fr) !important;
1802
1869
  }
1803
1870
  .ds-247420 .ds-changelog-ver {
@@ -2002,16 +2069,28 @@
2002
2069
  .ds-247420 .panel-body { padding: var(--space-2); overflow-x: auto; -webkit-overflow-scrolling: touch; }
2003
2070
  .ds-247420 .panel-body > table { min-width: 100%; }
2004
2071
 
2005
- .ds-247420 .row {
2006
- grid-template-columns: minmax(0, 1fr) auto !important;
2072
+ /* Scoped to the `.app` shell so this wins on SPECIFICITY (0,2,0) rather than
2073
+ on an !important flag. Three rules would otherwise beat a bare `.row`
2074
+ (0,1,0) here: `.row.row-nocode` (0,2,0, panel-row.css) out-specifies it,
2075
+ and the `@media(481-1024)` + `@media(max-width:768px)` `.row` rules later
2076
+ in THIS file win on source order (a media query adds no specificity).
2077
+ `.app` is safe to require: `.app-body`/`.row` only ever render inside it
2078
+ (single call site, shell.js AppShell). */
2079
+ .ds-247420 .app .row {
2080
+ grid-template-columns: minmax(0, 1fr) auto;
2007
2081
  gap: var(--space-2); padding: var(--space-2-75) var(--space-3);
2008
- row-gap: var(--space-1) !important;
2082
+ row-gap: var(--space-1);
2009
2083
  }
2010
2084
  .ds-247420 .row .sub { grid-column: 1 / -1; order: 3; }
2011
2085
  .ds-247420 .row .title { font-size: var(--fs-sm); }
2012
2086
  /* Changelog carries 3 children: give date+ver line one, message wraps below
2013
- (the generic 2-col .row override staggers it into an implicit row). */
2014
- .ds-247420 .ds-changelog-row { grid-template-columns: minmax(70px, 10ch) minmax(0, 1fr) !important; }
2087
+ (the generic 2-col .row override staggers it into an implicit row).
2088
+ Needs (0,3,0) to clear BOTH the `.app .row` rule directly above and
2089
+ `.ds-changelog-row`'s own !important base in hero-content.css — an
2090
+ !important base can only be beaten by another !important, so this one
2091
+ stays until that upstream flag is removed (hero-content.css is outside
2092
+ this change's scope). */
2093
+ .ds-247420 .app .row.ds-changelog-row { grid-template-columns: minmax(70px, 10ch) minmax(0, 1fr) !important; }
2015
2094
  .ds-247420 .ds-changelog-row .title { grid-column: 1 / -1; }
2016
2095
 
2017
2096
  /* Buttons */
@@ -2098,12 +2177,20 @@
2098
2177
  Container Query Responsive (720px and below)
2099
2178
  ---------------------------------------------------------------------- */
2100
2179
  @container (max-width: 760px) {
2101
- .ds-247420 .app-body { grid-template-columns: 1fr !important; }
2180
+ /* `.app`-scoped for specificity, not an !important flag: the bare `.app-body`
2181
+ (0,1,0) was out-specified by `.app-body.no-side` (0,2,0) in topbar.css, so
2182
+ a sidebar-less shell kept its base template. `.app .app-body` is (0,2,0)
2183
+ and lands later in source, beating both topbar.css rules on merit. */
2184
+ .ds-247420 .app .app-body { grid-template-columns: 1fr; }
2102
2185
  .ds-247420 .app-side-shell { border-right: 0; border-bottom: 1px solid var(--rule); }
2103
2186
  .ds-247420 .app-topbar nav { font-size: var(--fs-xs); gap: var(--space-2-75); }
2104
- .ds-247420 .row { grid-template-columns: minmax(0, 1fr) auto !important; row-gap: var(--space-1) !important; }
2187
+ /* Same (0,2,0) lift as the 480px block above — clears `.row.row-nocode` and
2188
+ the later `@media` `.row` rules in this file without a flag. */
2189
+ .ds-247420 .app .row { grid-template-columns: minmax(0, 1fr) auto; row-gap: var(--space-1); }
2105
2190
  .ds-247420 .row .sub { grid-column: 1 / -1; order: 3; }
2106
- .ds-247420 .ds-changelog-row { grid-template-columns: minmax(70px, 10ch) minmax(0, 1fr) !important; }
2191
+ /* (0,3,0) + !important: still required to beat `.ds-changelog-row`'s
2192
+ !important base in hero-content.css (see the 480px block). */
2193
+ .ds-247420 .app .row.ds-changelog-row { grid-template-columns: minmax(70px, 10ch) minmax(0, 1fr) !important; }
2107
2194
  .ds-247420 .ds-changelog-row .title { grid-column: 1 / -1; }
2108
2195
  }
2109
2196
 
@@ -3754,9 +3841,14 @@
3754
3841
  animation: spinner-rotate 0.8s linear infinite;
3755
3842
  }
3756
3843
 
3757
- /* Error state */
3844
+ /* Error state.
3845
+ No !important: the only rule in the kit that also resets a matching element's
3846
+ border-color is the bare-control base below (`textarea:where(:not(.input))`
3847
+ et al, which use the `border: 0` shorthand). Those selectors are (0,0,1) —
3848
+ the :where() guard adds nothing — so every selector in this list out-specifies
3849
+ them on merit, and specificity beats the later source position. */
3758
3850
  .ds-247420 .error, .ds-247420[data-state="error"], .ds-247420 .row.error, .ds-247420 input.error, .ds-247420 textarea.error {
3759
- border-color: var(--warn) !important;
3851
+ border-color: var(--warn);
3760
3852
  background-color: color-mix(in oklab, var(--warn) 6%, var(--bg));
3761
3853
  }
3762
3854
  .ds-247420 .error::placeholder { color: color-mix(in oklab, var(--warn) 60%, var(--fg-3)); }
@@ -4268,7 +4360,17 @@
4268
4360
  .ds-247420 .skip-to-main:focus { top: 10px; }
4269
4361
 
4270
4362
  /* Reduced motion preferences — scoped to the DS surface so it doesn't reach
4271
- into and neutralize the host document's own motion. */
4363
+ into and neutralize the host document's own motion.
4364
+ The !important flags here are LOAD-BEARING and must not be "cleaned up":
4365
+ `.ds-247420 *` / `.app *` is only (0,1,0) — the universal selector adds
4366
+ nothing — yet it has to defeat every animation/transition declaration in the
4367
+ kit, many of which are strictly more specific. Concrete rules it would
4368
+ otherwise lose to: `.ds-dropzone.dragover` (0,2,0, files.css),
4369
+ `.ds-upload-bar.indeterminate .ds-upload-fill` (0,3,0, files.css),
4370
+ `.list-item.drag-after::after` (0,2,1, this file). Raising this selector to
4371
+ out-specify an open-ended set of future component rules is not possible, so
4372
+ the flag is the only correct mechanism — this is a WCAG 2.3.3 guarantee,
4373
+ not a stylistic preference. */
4272
4374
  @media (prefers-reduced-motion: reduce) {
4273
4375
  .ds-247420 *, .ds-247420 .app * {
4274
4376
  animation-duration: 0.01ms !important;
@@ -4276,7 +4378,9 @@
4276
4378
  transition-duration: 0.01ms !important;
4277
4379
  }
4278
4380
  /* Kill the residual paint frame of looping skeleton/shimmer placeholders and
4279
- give reduced-motion users a steady placeholder fill instead. */
4381
+ give reduced-motion users a steady placeholder fill instead.
4382
+ Also load-bearing: `.skeleton` is (0,1,0) and must override
4383
+ `.ds-session-row-skeleton .ds-skel` (0,2,0), which sets its own shimmer. */
4280
4384
  .ds-247420 .skeleton, .ds-247420 .ds-skeleton, .ds-247420 .ds-session-row-skeleton .ds-skel {
4281
4385
  animation: none !important;
4282
4386
  background: var(--bg-2) !important;
@@ -4545,8 +4649,16 @@
4545
4649
  even on a wide desktop. Drawer/scrim/toggle are absolute (anchored to .app), so
4546
4650
  they overlay the window, not the page. */
4547
4651
  @container (max-width: 900px) {
4548
- .ds-247420 .app-body,
4549
- .ds-247420 .app-body.no-side { grid-template-columns: 1fr !important; }
4652
+ /* `.app`-scoped for specificity instead of an !important flag. The bare
4653
+ `.app-body` half of this list is (0,1,0) and was out-specified by
4654
+ `.app-body.no-side` (0,2,0) in topbar.css; scoping lifts both halves to
4655
+ (0,2,0)/(0,3,0), which also lands later in source than topbar.css, so the
4656
+ drawer collapse wins on merit. `.app` is guaranteed: `.app-body` is
4657
+ emitted only as a direct child of `.app` (single call site, shell.js
4658
+ AppShell), and this @container query already requires `.app` as its
4659
+ container ancestor. */
4660
+ .ds-247420 .app .app-body,
4661
+ .ds-247420 .app .app-body.no-side { grid-template-columns: 1fr; }
4550
4662
  .ds-247420 .app-side-shell {
4551
4663
  position: absolute;
4552
4664
  /* Full-height overlay drawer: the merged .app-chrome wraps and its real
@@ -4571,9 +4683,13 @@
4571
4683
  .ds-247420 .app-side-shell.open,
4572
4684
  .ds-247420 .app-side.open,
4573
4685
  .ds-247420 .app-body.side-open .app-side-shell { transform: translateX(0); }
4686
+ /* No flags needed: the ONLY other rule that touches these properties is the
4687
+ `.app-side` base in topbar.css, which already sets `flex-direction: column`
4688
+ and never sets `flex-wrap` (nowrap is the initial value anyway). This rule
4689
+ is equal-specificity and later in source, so it wins unaided. */
4574
4690
  .ds-247420 .app-side {
4575
- flex-direction: column !important;
4576
- flex-wrap: nowrap !important;
4691
+ flex-direction: column;
4692
+ flex-wrap: nowrap;
4577
4693
  gap: var(--space-2);
4578
4694
  padding: var(--space-3);
4579
4695
  font-size: var(--fs-sm);
@@ -6064,6 +6180,25 @@
6064
6180
  .ds-247420 .cursor-blink { animation: ds-cursor-blink 1s step-end infinite; }
6065
6181
  @keyframes ds-cursor-blink { 50% { opacity: 0; } }
6066
6182
  }
6183
+
6184
+ /* == appended: panel width modifier == */
6185
+ /* .panel.panel-inline-wide — a width-capped inline note panel. Companion to
6186
+ the .panel-inline / .panel-wide modifiers in panel-row.css: those two change
6187
+ the panel's SURFACE (tonal fill / chrome-stripped), this one changes only
6188
+ its MEASURE, so it composes with either. Introduced when ui_kits/docs's
6189
+ `[!] note` panel traded `style="max-width:640px"` for a class (the inline-
6190
+ style sweep) but never got a rule written, leaving that panel to run the
6191
+ full column width. 640px is the note measure, deliberately narrower than
6192
+ --measure-narrow (760px): the aside is meant to read as a set-aside block
6193
+ against the surrounding prose, not to match its column. It is a literal
6194
+ rather than a new token because it has exactly one consumer — promote it to
6195
+ --measure-note the moment a second surface wants the same cap.
6196
+ `margin-right: auto` (not `margin: 0 auto`) keeps the panel left-aligned to
6197
+ the prose it interrupts and preserves .panel's own --space-4 stack margin. */
6198
+ .ds-247420 .panel.panel-inline-wide {
6199
+ max-width: 640px;
6200
+ margin-right: auto;
6201
+ }
6067
6202
  /* ============================================================
6068
6203
  Git status panel + diff view — changed-file list, unified diff.
6069
6204
  ============================================================ */
@@ -9688,7 +9823,12 @@
9688
9823
  .ds-247420 .ds-ep-tab-close:hover { background: var(--panel-2); color: var(--panel-text-1); }
9689
9824
  .ds-247420 .ds-ep-tab-close:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; opacity: 1; }
9690
9825
  .ds-247420 .ds-ep-tab.active {
9691
- color: var(--accent);
9826
+ /* --accent-ink for the TEXT, bare --accent for the RULE. The lime fill
9827
+ measures 1.07:1 against paper, so as a text colour it is invisible in
9828
+ light theme; --accent-ink is 8.85:1. Both resolve to the same value in
9829
+ dark, which is exactly why this class of bug hides until someone opens
9830
+ the light theme. Borders are fills and keep the lead accent. */
9831
+ color: var(--accent-ink);
9692
9832
  border-bottom-color: var(--accent);
9693
9833
  }
9694
9834
  /* When the JS slider is active, the active tab's own static border is
@@ -9735,8 +9875,12 @@
9735
9875
  color: var(--panel-text);
9736
9876
  }
9737
9877
  .ds-247420 .ds-ep-tree-item.selected > .ds-ep-tree-row {
9878
+ /* The 22% accent wash is a FILL and stays on the lead accent; the label on
9879
+ top of it is text and takes --accent-ink (bare --accent is 1.07:1 on
9880
+ paper -- invisible in light theme, identical to --accent-ink in dark,
9881
+ which is why it reads fine until someone switches themes). */
9738
9882
  background: color-mix(in oklab, var(--accent) 22%, transparent);
9739
- color: var(--accent);
9883
+ color: var(--accent-ink);
9740
9884
  }
9741
9885
  .ds-247420 .ds-ep-tree-twist {
9742
9886
  width: 12px; flex-shrink: 0; text-align: center;
@@ -12001,6 +12145,32 @@
12001
12145
  margin-bottom: var(--space-1);
12002
12146
  }
12003
12147
 
12148
+ /* .ds-prose-endnote — the closing line of an article ("end. reply by opening a
12149
+ pr."), set off from the body it terminates. Quieter and smaller than prose:
12150
+ it takes the mono face and the --panel-text-2 tone that this sheet's other
12151
+ ancillary voices use (.toc a, .gm-callout .who, .card .desc), so the endnote
12152
+ reads as chrome around the article rather than a final paragraph of it. The
12153
+ generous --space-5 lead is what does the "set off" — it breaks the paragraph
12154
+ rhythm so the eye registers the piece has ended before reading the words.
12155
+ Sized at --fs-xs rather than the --fs-nano label rung: this is a readable
12156
+ sentence with a link in it, not an uppercase micro-label.
12157
+ Replaces the inline style ui_kits/blog carried before the inline-style
12158
+ sweep, which named this class without ever defining it. */
12159
+ .ds-247420 .ds-prose .ds-prose-endnote,
12160
+ .ds-247420 .ds-prose-endnote {
12161
+ margin-top: var(--space-5);
12162
+ margin-bottom: 0;
12163
+ font-family: var(--ff-mono);
12164
+ font-size: var(--fs-xs);
12165
+ line-height: 1.6;
12166
+ color: var(--panel-text-2);
12167
+ }
12168
+ /* The endnote's link keeps the prose accent but stays in the quiet register —
12169
+ --panel-accent is the panel-ramp counterpart of --accent-ink (a readable
12170
+ TEXT tone), never the bare --accent fill, which is ~1.07:1 on paper. */
12171
+ .ds-247420 .ds-prose-endnote a { color: var(--panel-accent); text-decoration: none; }
12172
+ .ds-247420 .ds-prose-endnote a:hover { text-decoration: underline; }
12173
+
12004
12174
  /* marketing.css */
12005
12175
  /* marketing.css — landing / docs site surface family (the agentgui flatspace
12006
12176
  * site renderer composes these instead of carrying inline style= props). Every