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 +190 -20
- package/dist/247420.js +28 -28
- package/package.json +1 -1
- package/src/components/files-modals.js +1 -1
- package/src/components/overlay-primitives/menus.js +5 -1
- package/src/css/app-shell/base.css +54 -1
- package/src/css/app-shell/hero-content.css +10 -0
- package/src/css/app-shell/kits-appended.css +19 -0
- package/src/css/app-shell/responsive.css +28 -8
- package/src/css/app-shell/responsive2-workspace.css +16 -4
- package/src/css/app-shell/states-interactions.css +21 -4
- package/src/css/app-shell/topbar.css +5 -1
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:
|
|
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
|
-
|
|
2006
|
-
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)
|
|
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
|
-
.
|
|
4549
|
-
|
|
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
|
|
4576
|
-
flex-wrap: nowrap
|
|
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
|
-
|
|
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
|