anentrypoint-design 0.0.470 → 0.0.471
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 +24 -301
- package/dist/247420.js +24 -24
- package/package.json +1 -1
- package/src/css/app-shell/base.css +10 -127
- package/src/css/app-shell/primitives.css +0 -78
- package/src/kits/flatspace-theme/index.js +0 -12
package/dist/247420.css
CHANGED
|
@@ -805,50 +805,26 @@
|
|
|
805
805
|
}
|
|
806
806
|
|
|
807
807
|
/* app-shell.css */
|
|
808
|
-
/* ============================================================
|
|
809
|
-
247420 design system — component sheet
|
|
810
|
-
shadcn-neutral: system-font display + body + mono, no custom web fonts.
|
|
811
|
-
Confident hierarchy, centered editorial stack, neutral grayscale accent.
|
|
812
|
-
Indicator rails over hairlines.
|
|
813
|
-
============================================================ */
|
|
814
|
-
|
|
815
|
-
/* ============================================================
|
|
816
|
-
Base
|
|
817
|
-
============================================================ */
|
|
818
808
|
.ds-247420 * { box-sizing: border-box; }
|
|
819
809
|
.ds-247420, .ds-247420 body { margin: 0; padding: 0; }
|
|
820
810
|
.ds-247420 button, .ds-247420 input, .ds-247420 select, .ds-247420 textarea { font: inherit; }
|
|
821
811
|
|
|
822
|
-
/* ============================================================
|
|
823
|
-
Accessibility — Skip Link
|
|
824
|
-
============================================================ */
|
|
825
812
|
.ds-247420 .skip-link {
|
|
813
|
+
--skip-link-preflight-translate-clear: -100%;
|
|
826
814
|
position: absolute;
|
|
827
|
-
/* -40px alone left the 44px-tall pill (padding + min-height floor below)
|
|
828
|
-
poking ~4px into every page pre-focus -- measured live via
|
|
829
|
-
getBoundingClientRect(). The offset must clear the full rendered height,
|
|
830
|
-
not a guessed constant, so translateY pushes it out by its own box. */
|
|
831
815
|
top: 0;
|
|
832
816
|
left: 0;
|
|
833
|
-
transform: translateY(-
|
|
817
|
+
transform: translateY(var(--skip-link-preflight-translate-clear));
|
|
834
818
|
background: var(--accent);
|
|
835
819
|
color: var(--accent-fg);
|
|
836
820
|
padding: var(--space-2) var(--space-3);
|
|
837
821
|
text-decoration: none;
|
|
838
|
-
/* Must outrank every layer of chrome once focused, or the first Tab press
|
|
839
|
-
lands on a control hidden behind the sticky header (was z-index:100,
|
|
840
|
-
which the header alone now matches). */
|
|
841
822
|
z-index: var(--z-top);
|
|
842
823
|
border-radius: var(--r-pill);
|
|
843
824
|
font-weight: 600;
|
|
844
825
|
font-size: var(--fs-sm);
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
it 39px tall -- measured live under coarse-pointer emulation on every kit.
|
|
848
|
-
Floored unconditionally rather than under a pointer:coarse query, because
|
|
849
|
-
switch and head-pointer users are not detected as coarse pointers and need
|
|
850
|
-
the larger target just as much. */
|
|
851
|
-
min-height: 44px;
|
|
826
|
+
--skip-link-min-touch-target: 44px;
|
|
827
|
+
min-height: var(--skip-link-min-touch-target);
|
|
852
828
|
display: inline-flex;
|
|
853
829
|
align-items: center;
|
|
854
830
|
}
|
|
@@ -858,23 +834,6 @@
|
|
|
858
834
|
outline: var(--focus-w) solid var(--focus-color);
|
|
859
835
|
outline-offset: var(--focus-offset);
|
|
860
836
|
}
|
|
861
|
-
/* Visually-hidden but still in the accessibility tree. Emitted by Row() (the
|
|
862
|
-
rail status word), FilterBar()/FileGrid() (aria-live result counts) and
|
|
863
|
-
form-primitives' required marker — all of which shipped BEFORE this rule
|
|
864
|
-
existed anywhere the app shell loads. The only other definitions live in
|
|
865
|
-
app-surfaces.css (pre-scoped to `.ds-247420`, so it never reaches a kit that
|
|
866
|
-
does not mount that root) and editor-primitives.css (a separate opt-in
|
|
867
|
-
<link>), which left every app-shell consumer rendering screen-reader-only
|
|
868
|
-
text VISIBLY the moment it passed `rail`/`resultCount`.
|
|
869
|
-
Deliberately NOT `display:none` / `visibility:hidden` / `width:0`: those
|
|
870
|
-
remove the node from the accessibility tree too, which defeats the entire
|
|
871
|
-
purpose — the text exists only for AT. The clip + 1px box is what keeps it
|
|
872
|
-
announced while occupying no visible area.
|
|
873
|
-
`margin: -1px` is OFF-SCALE ON PURPOSE — it is not rhythm, it is one half of
|
|
874
|
-
the canonical visually-hidden idiom: the negative margin cancels the 1px box
|
|
875
|
-
so the clipped element contributes zero layout. Snapping it to a --space-*
|
|
876
|
-
rung would reintroduce a measurable gap. `clip` is deprecated but retained
|
|
877
|
-
alongside `clip-path` for older AT/browser pairs that ignore the latter. */
|
|
878
837
|
.ds-247420 .sr-only {
|
|
879
838
|
position: absolute;
|
|
880
839
|
width: 1px;
|
|
@@ -888,11 +847,6 @@
|
|
|
888
847
|
border: 0;
|
|
889
848
|
}
|
|
890
849
|
|
|
891
|
-
/* .ds-aspect — generic aspect-ratio utility. Native `aspect-ratio` property
|
|
892
|
-
(broadly supported for years) rather than the padding-bottom hack: no
|
|
893
|
-
extra wrapper markup, no absolutely-positioned inner layer needed just to
|
|
894
|
-
fill the box. `--aspect` defaults to 16/9; a caller overrides it inline
|
|
895
|
-
(e.g. style="--aspect:1/1") or via a ratio-named modifier class below. */
|
|
896
850
|
.ds-247420 .ds-aspect {
|
|
897
851
|
aspect-ratio: var(--aspect, 16 / 9);
|
|
898
852
|
width: 100%;
|
|
@@ -912,14 +866,11 @@
|
|
|
912
866
|
-webkit-font-smoothing: antialiased;
|
|
913
867
|
text-rendering: optimizeLegibility;
|
|
914
868
|
}
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
scoping a value per theme rather than sharing one across both). */
|
|
920
|
-
.ds-247420 ::selection { background: color-mix(in oklab, var(--accent) 46%, var(--bg-2)); color: var(--fg); }
|
|
869
|
+
.ds-247420 {
|
|
870
|
+
--selection-tint-paper-share: 46%;
|
|
871
|
+
}
|
|
872
|
+
.ds-247420 ::selection { background: color-mix(in oklab, var(--accent) var(--selection-tint-paper-share), var(--bg-2)); color: var(--fg); }
|
|
921
873
|
|
|
922
|
-
/* Every root has a CQ container so fluid type can resolve to a meaningful inline-size. */
|
|
923
874
|
.ds-247420 .app, .ds-247420 .ds-stage {
|
|
924
875
|
container-type: inline-size;
|
|
925
876
|
overflow-x: clip;
|
|
@@ -927,29 +878,16 @@
|
|
|
927
878
|
}
|
|
928
879
|
.ds-247420 .app * { min-width: 0; }
|
|
929
880
|
|
|
930
|
-
/* Scrollbar treatment, applied once at the root rather than per-component.
|
|
931
|
-
chat.css already styled its own thread and code blocks this way, but every
|
|
932
|
-
other scroll container (.app-side-shell, .app-main, .ds-scroll-x,
|
|
933
|
-
.ds-table-wrap, .ds-live-log) fell back to the UA default -- measured live,
|
|
934
|
-
4 of 4 containers on dashboard and 7 of 7 on gm_inspector were unstyled while
|
|
935
|
-
chat's two were not. A default scrollbar reads as a bright seam against a
|
|
936
|
-
near-black panel in the ink and dark themes, and inconsistently between two
|
|
937
|
-
panels on the same page. Tokens mean the thumb follows the active theme.
|
|
938
|
-
Inheriting from the container also covers scrollers added later. */
|
|
939
881
|
.ds-247420 .app, .ds-247420 .ds-stage, .ds-247420 .app *, .ds-247420 .ds-stage * {
|
|
940
882
|
scrollbar-width: thin;
|
|
941
883
|
scrollbar-color: var(--bg-3) transparent;
|
|
942
884
|
}
|
|
943
885
|
|
|
944
|
-
/* ============================================================
|
|
945
|
-
Typography
|
|
946
|
-
============================================================ */
|
|
947
886
|
.ds-247420 h1, .ds-247420 .t-h1 { font-family: var(--ff-display); font-size: var(--fs-h1); line-height: var(--lh-snug); letter-spacing: var(--tr-tight); font-weight: 600; margin: 0; }
|
|
948
887
|
.ds-247420 h2, .ds-247420 .t-h2 { font-family: var(--ff-display); font-size: var(--fs-h2); line-height: var(--lh-snug); letter-spacing: var(--tr-tight); font-weight: 600; margin: 0; }
|
|
949
888
|
.ds-247420 h3, .ds-247420 .t-h3 { font-family: var(--ff-display); font-size: var(--fs-h3); line-height: var(--lh-snug); letter-spacing: -0.01em; font-weight: 600; margin: 0; }
|
|
950
889
|
.ds-247420 h4, .ds-247420 .t-h4 { font-family: var(--ff-display); font-size: var(--fs-h4); line-height: var(--lh-snug); font-weight: 600; margin: 0; }
|
|
951
890
|
|
|
952
|
-
/* App/chrome typescale opt-in: compact heading ceiling for application UIs. */
|
|
953
891
|
.ds-247420[data-typescale="app"] h1, .ds-247420[data-typescale="app"] .t-h1 { font-size: var(--fs-h1-app); line-height: 1.15; }
|
|
954
892
|
.ds-247420[data-typescale="app"] h2, .ds-247420[data-typescale="app"] .t-h2 { font-size: var(--fs-h2-app); }
|
|
955
893
|
.ds-247420[data-typescale="app"] h3, .ds-247420[data-typescale="app"] .t-h3 { font-size: var(--fs-h3-app); }
|
|
@@ -959,21 +897,9 @@
|
|
|
959
897
|
.ds-247420 .t-mega { font-family: var(--ff-display); font-size: var(--fs-mega); line-height: 0.92; letter-spacing: var(--tr-tighter); font-weight: 700; margin: 0; }
|
|
960
898
|
|
|
961
899
|
.ds-247420 .t-display { font-family: var(--ff-display); font-weight: 600; letter-spacing: var(--tr-tight); }
|
|
962
|
-
/* Explicit weight, not relying on inherited normal: --ff-mono's stack (Menlo,
|
|
963
|
-
Consolas, ui-monospace) can resolve to a variable-font fallback on some
|
|
964
|
-
platforms whose default instance isn't the 400 weight, rendering "body ·
|
|
965
|
-
16px regular" visibly bold despite its own label -- pin the weight so the
|
|
966
|
-
sample matches what it claims regardless of which font in the stack loads. */
|
|
967
900
|
.ds-247420 .t-mono { font-family: var(--ff-mono); font-weight: 400; }
|
|
968
901
|
.ds-247420 .t-body { font-family: var(--ff-body); }
|
|
969
902
|
|
|
970
|
-
/* House small-label voice, in two sizes. Every declaration here is sourced
|
|
971
|
-
from a token, so a sheet that cannot join these selector lists (community.css
|
|
972
|
-
and gm-prose.css ship as separate <link>-able exports and must not depend on
|
|
973
|
-
app-shell.css being present) still composes the same voice by referencing the
|
|
974
|
-
same four tokens — --ff-mono / --fs-* / uppercase / --tr-label. That token
|
|
975
|
-
set, not this rule, is the single source of truth; a selector that restates a
|
|
976
|
-
literal instead of the token is the drift this pairing exists to prevent. */
|
|
977
903
|
.ds-247420 .t-label { font-family: var(--ff-mono); font-size: var(--fs-tiny); text-transform: uppercase; letter-spacing: var(--tr-label); font-weight: 500; }
|
|
978
904
|
.ds-247420 .t-micro { font-family: var(--ff-mono); font-size: var(--fs-micro); text-transform: uppercase; letter-spacing: var(--tr-label); color: var(--fg-3); }
|
|
979
905
|
.ds-247420 .t-meta { font-family: var(--ff-body); font-size: var(--fs-sm); color: var(--fg-3); }
|
|
@@ -984,35 +910,14 @@
|
|
|
984
910
|
margin: 0;
|
|
985
911
|
}
|
|
986
912
|
|
|
987
|
-
/* h1/h2/h3/h4 and .lede/.t-lede are both margin:0 primitives by design (a
|
|
988
|
-
heading used standalone must not force space its context doesn't want).
|
|
989
|
-
But a heading immediately followed by a lede is a named pairing, not two
|
|
990
|
-
independent primitives that happen to be adjacent -- it needs its own gap
|
|
991
|
-
regardless of whether the surrounding shell opts into .ds-app-surface
|
|
992
|
-
(which only adds this spacing on landing/marketing surfaces, leaving every
|
|
993
|
-
Operate-mode kit that skips that class with a zero-gap heading+subtitle). */
|
|
994
913
|
.ds-247420 h1 + .lede, .ds-247420 h1 + .t-lede, .ds-247420 h2 + .lede, .ds-247420 h2 + .t-lede, .ds-247420 h3 + .lede, .ds-247420 h3 + .t-lede, .ds-247420 .t-h1 + .lede, .ds-247420 .t-h1 + .t-lede {
|
|
995
914
|
margin-top: var(--space-2);
|
|
996
915
|
}
|
|
997
916
|
|
|
998
|
-
/* A lede immediately followed by the article body is a named pairing too --
|
|
999
|
-
same rationale as the heading+lede gap above. Without this, .lede's
|
|
1000
|
-
margin:0 leaves zero space above the first paragraph while every
|
|
1001
|
-
paragraph-to-paragraph gap below it uses --space-4 (.ds-prose p), so the
|
|
1002
|
-
dek reads as glued to the body it introduces. */
|
|
1003
917
|
.ds-247420 .lede + .post-body, .ds-247420 .t-lede + .post-body, .ds-247420 .lede + .ds-prose, .ds-247420 .t-lede + .ds-prose {
|
|
1004
918
|
margin-top: var(--space-4);
|
|
1005
919
|
}
|
|
1006
920
|
|
|
1007
|
-
/* Same gap-ownership problem again for .ds-section (hero-content.css):
|
|
1008
|
-
`* + .ds-section { margin-top: 0 }` deliberately relies on the PRECEDING
|
|
1009
|
-
sibling supplying the lead-in space, so two spacing primitives can
|
|
1010
|
-
coordinate into one gap instead of stacking. .lede supplies none (margin:0
|
|
1011
|
-
by design), so a lede-then-section pairing (e.g. project_page's h1 -> lede
|
|
1012
|
-
-> "install" section) collapses to a flush 0px gap instead of inheriting
|
|
1013
|
-
.ds-section's own --space-8 lead. Measured live on project_page: the
|
|
1014
|
-
"install" h3 sat ~4px from the lede above it (padding only) vs the
|
|
1015
|
-
intended --space-8/2 gap other section-adjacent siblings get. */
|
|
1016
921
|
.ds-247420 .lede + .ds-section, .ds-247420 .t-lede + .ds-section {
|
|
1017
922
|
margin-top: var(--space-8);
|
|
1018
923
|
}
|
|
@@ -1026,7 +931,6 @@
|
|
|
1026
931
|
color: var(--accent-ink);
|
|
1027
932
|
display: inline-flex; align-items: center; gap: 12px;
|
|
1028
933
|
}
|
|
1029
|
-
/* Editorial kicker mark — a short solid ink rule, the print-byline tell. */
|
|
1030
934
|
.ds-247420 .eyebrow::before {
|
|
1031
935
|
content: '';
|
|
1032
936
|
width: 28px; height: 3px; background: currentColor;
|
|
@@ -1055,21 +959,6 @@
|
|
|
1055
959
|
font-family: var(--ff-body);
|
|
1056
960
|
}
|
|
1057
961
|
.ds-247420 .ds-prose blockquote p:last-child { margin-bottom: 0; }
|
|
1058
|
-
/* Closing line of an article ("end. reply by opening a pr."), set off from the
|
|
1059
|
-
body it terminates. Quieter and smaller than the prose around it: it takes
|
|
1060
|
-
the mono face and the --fg-3 tone the house uses for ancillary voices
|
|
1061
|
-
(.t-micro, .dim), so the endnote reads as chrome around the article rather
|
|
1062
|
-
than a final paragraph of it. The --space-5 lead does the "set off" — it
|
|
1063
|
-
breaks the paragraph rhythm so the eye registers the piece has ended before
|
|
1064
|
-
reading the words; margin-bottom:0 overrides .ds-prose p's --space-4 so the
|
|
1065
|
-
article does not end on dead space.
|
|
1066
|
-
Lives here, beside the rest of the .ds-prose family, NOT in gm-prose.css:
|
|
1067
|
-
the blog kit that uses this class links only colors_and_type.css +
|
|
1068
|
-
app-shell.css, so a rule in that separately-<link>-ed export would be exactly
|
|
1069
|
-
as undefined as the class was before. Sized at --fs-xs, not the --fs-micro
|
|
1070
|
-
label rung: this is a readable sentence with a link in it, not a micro-label.
|
|
1071
|
-
The link inherits .ds-prose a's --accent-ink treatment (a readable TEXT tone;
|
|
1072
|
-
the bare --accent fill is ~1.07:1 on paper) — deliberately not re-stated. */
|
|
1073
962
|
.ds-247420 .ds-prose .ds-prose-endnote,
|
|
1074
963
|
.ds-247420 .ds-prose-endnote {
|
|
1075
964
|
margin-top: var(--space-5);
|
|
@@ -1082,7 +971,6 @@
|
|
|
1082
971
|
|
|
1083
972
|
.ds-247420 .dim { color: var(--fg-3); }
|
|
1084
973
|
|
|
1085
|
-
/* Links */
|
|
1086
974
|
.ds-247420 a { color: inherit; text-decoration: none; }
|
|
1087
975
|
.ds-247420 a.ds-link-accent, .ds-247420 .ds-prose a {
|
|
1088
976
|
color: var(--accent-ink);
|
|
@@ -1099,15 +987,10 @@
|
|
|
1099
987
|
background: var(--bg-2); padding: 2px 6px; border-radius: var(--r-1);
|
|
1100
988
|
}
|
|
1101
989
|
|
|
1102
|
-
/* --bg-3 (not --bg-2): an inline code pill needs to read as a distinct
|
|
1103
|
-
surface against the page background, not just against adjacent text — at
|
|
1104
|
-
--bg-2 the pill measured 1.39:1 background-to-background contrast in dark
|
|
1105
|
-
theme (barely distinguishable from the page itself). --bg-3 is the same
|
|
1106
|
-
tier-3 surface step .chip.tone-dim already uses for the same reason,
|
|
1107
|
-
bringing the pill to 2.07:1, consistent with the rest of the tier-3 ramp. */
|
|
1108
990
|
.ds-247420 code {
|
|
991
|
+
--code-pill-tier3-surface: var(--bg-3);
|
|
1109
992
|
font-family: var(--ff-mono); font-size: 0.92em;
|
|
1110
|
-
background: var(--
|
|
993
|
+
background: var(--code-pill-tier3-surface); padding: 0.15em 0.5em; border-radius: var(--r-1);
|
|
1111
994
|
}
|
|
1112
995
|
|
|
1113
996
|
.ds-247420 pre {
|
|
@@ -1521,15 +1404,8 @@
|
|
|
1521
1404
|
border-bottom: var(--bw-hair, 1px) dotted var(--rule-strong);
|
|
1522
1405
|
}
|
|
1523
1406
|
|
|
1524
|
-
/* ============================================================
|
|
1525
|
-
Primitives
|
|
1526
|
-
============================================================ */
|
|
1527
1407
|
.ds-247420 .btn, .ds-247420 .btn-primary, .ds-247420 .btn-ghost {
|
|
1528
1408
|
display: inline-flex; align-items: center; justify-content: center; gap: 6px;
|
|
1529
|
-
/* Fixed height + horizontal-only padding: the control height is exact and
|
|
1530
|
-
alignable (flex centres the label vertically), the way webgeist snaps every
|
|
1531
|
-
control to a height ladder. Default is the --ctl-md rung; --btn-sm/--btn-lg
|
|
1532
|
-
retune height + h-padding + font per size. Density scales the ladder. */
|
|
1533
1409
|
height: var(--ctl-md); min-height: var(--ctl-md);
|
|
1534
1410
|
padding: 0 var(--space-2-75);
|
|
1535
1411
|
font-family: var(--ff-body);
|
|
@@ -1537,30 +1413,15 @@
|
|
|
1537
1413
|
text-decoration: none;
|
|
1538
1414
|
white-space: nowrap;
|
|
1539
1415
|
cursor: pointer;
|
|
1540
|
-
/* Rounded-rect app chrome, not a marketing-page stadium CTA.
|
|
1541
|
-
Shape vocabulary: r-1/r-2 = actionable buttons, icon-buttons, and
|
|
1542
|
-
containers; r-pill = reserved for status/input/chip/badge/progress
|
|
1543
|
-
surfaces (composer input, chips, badges, progress bars, theme-toggle
|
|
1544
|
-
segments) - never for actions. */
|
|
1545
1416
|
border-radius: var(--r-1);
|
|
1546
1417
|
border: var(--bw-hair) solid transparent;
|
|
1547
1418
|
box-shadow: none;
|
|
1548
|
-
/* Restrained hover-lift: a 1px rise + hairline shadow reads as a crisp,
|
|
1549
|
-
confident affordance rather than a soft glow-card float. */
|
|
1550
1419
|
transition: transform var(--dur-base) var(--ease-spring), background var(--dur-snap) var(--ease),
|
|
1551
1420
|
color var(--dur-snap) var(--ease), box-shadow var(--dur-base) var(--ease-spring),
|
|
1552
1421
|
border-color var(--dur-snap) var(--ease);
|
|
1553
1422
|
}
|
|
1554
1423
|
.ds-247420 .btn { background: var(--bg-2); color: var(--fg); border-color: var(--rule); }
|
|
1555
1424
|
.ds-247420 .btn:hover { background: var(--bg-3); color: var(--fg); transform: translateY(-1px); box-shadow: var(--shadow-1); }
|
|
1556
|
-
/* Primary CTA — the brand green as a solid editorial block; hover inverts to
|
|
1557
|
-
an ink block with green text, a confident two-tone flip. Uses --green
|
|
1558
|
-
(the site's own #247420 identity color, dark-mode-retuned to --green's
|
|
1559
|
-
ink-safe #5CBF52 rather than --accent/--acid, which a prior contrast-driven
|
|
1560
|
-
restyle deliberately flattened to a neutral gray for --accent's OTHER
|
|
1561
|
-
consumers (nav active state, focus rings, etc) -- .btn-primary needed the
|
|
1562
|
-
brand color back for click-hierarchy without undoing that restyle
|
|
1563
|
-
elsewhere. --on-color (#fff) clears AA on both light and dark --green. */
|
|
1564
1425
|
.ds-247420 .btn-primary {
|
|
1565
1426
|
background: var(--green); color: var(--on-color);
|
|
1566
1427
|
font-weight: 700;
|
|
@@ -1574,10 +1435,6 @@
|
|
|
1574
1435
|
outline-offset: var(--focus-offset);
|
|
1575
1436
|
}
|
|
1576
1437
|
|
|
1577
|
-
/* Button size ladder — the size prop on Btn() (sm | md | lg). md is the base
|
|
1578
|
-
rule above; sm/lg retune height (off the --ctl-* ladder), horizontal padding,
|
|
1579
|
-
and font-size so a size swap is one class, never inline padding overrides
|
|
1580
|
-
(the old preview faked sizes with style=). Applies to every variant. */
|
|
1581
1438
|
.ds-247420 .btn-sm, .ds-247420 .btn-sm.btn-primary, .ds-247420 .btn-sm.btn-ghost {
|
|
1582
1439
|
height: var(--ctl-sm); min-height: var(--ctl-sm);
|
|
1583
1440
|
padding: 0 var(--space-2); font-size: var(--fs-tiny); gap: var(--space-1);
|
|
@@ -1587,10 +1444,6 @@
|
|
|
1587
1444
|
padding: 0 var(--space-4); font-size: var(--fs-body); gap: var(--space-2);
|
|
1588
1445
|
}
|
|
1589
1446
|
|
|
1590
|
-
/* App-mode quiet interactions — the marketing hover-lift (translateY + shadow)
|
|
1591
|
-
and the .row .meta slide read as decorative float on a dense working surface.
|
|
1592
|
-
Under [data-typescale="app"], state changes are background/border-only: crisp,
|
|
1593
|
-
no motion, no elevation. Marketing surfaces (no data-typescale) keep the lift. */
|
|
1594
1447
|
.ds-247420[data-typescale="app"] .btn:hover,
|
|
1595
1448
|
.ds-247420[data-typescale="app"] .btn-primary:hover,
|
|
1596
1449
|
.ds-247420[data-typescale="app"] .btn-ghost:hover { transform: none; box-shadow: none; }
|
|
@@ -1601,9 +1454,6 @@
|
|
|
1601
1454
|
.ds-247420[data-typescale="app"] a.row:hover .meta,
|
|
1602
1455
|
.ds-247420[data-typescale="app"] .row[role="button"]:hover .meta { transform: none; }
|
|
1603
1456
|
|
|
1604
|
-
/* ============================================================
|
|
1605
|
-
IconButton — square icon-only button
|
|
1606
|
-
============================================================ */
|
|
1607
1457
|
.ds-247420 .ds-icon-btn {
|
|
1608
1458
|
display: inline-flex; align-items: center; justify-content: center;
|
|
1609
1459
|
padding: 0; border: none; cursor: pointer;
|
|
@@ -1620,7 +1470,6 @@
|
|
|
1620
1470
|
.ds-247420 .ds-icon-btn-ghost:hover { background: var(--fg); color: var(--bg); }
|
|
1621
1471
|
.ds-247420 .ds-icon-btn-primary { background: var(--accent); color: var(--accent-fg); }
|
|
1622
1472
|
.ds-247420 .ds-icon-btn-primary:hover { background: var(--fg); color: var(--accent-ink); }
|
|
1623
|
-
/* warn = destructive ACTION tone; flame stays exclusively error STATUS. */
|
|
1624
1473
|
.ds-247420 .ds-icon-btn-danger { background: var(--warn); color: var(--on-color); }
|
|
1625
1474
|
.ds-247420 .ds-icon-btn-danger:hover { filter: brightness(0.92); }
|
|
1626
1475
|
.ds-247420 .ds-icon-btn:active { transform: translateY(1px); }
|
|
@@ -1628,9 +1477,6 @@
|
|
|
1628
1477
|
opacity: 0.5; cursor: not-allowed; pointer-events: none;
|
|
1629
1478
|
}
|
|
1630
1479
|
|
|
1631
|
-
/* ============================================================
|
|
1632
|
-
Badge — small inline count/status pill
|
|
1633
|
-
============================================================ */
|
|
1634
1480
|
.ds-247420 .ds-badge {
|
|
1635
1481
|
display: inline-flex; align-items: center; justify-content: center;
|
|
1636
1482
|
min-width: 18px; height: 18px; padding: 0 6px;
|
|
@@ -1638,15 +1484,8 @@
|
|
|
1638
1484
|
border-radius: var(--r-pill);
|
|
1639
1485
|
background: var(--bg-3); color: var(--fg-2);
|
|
1640
1486
|
}
|
|
1641
|
-
/* Badge size ladder — sm for dense inline counts, lg for prominent markers.
|
|
1642
|
-
Base (above) stays the 18px default. */
|
|
1643
1487
|
.ds-247420 .ds-badge.ds-badge--sm { min-width: 14px; height: 14px; padding: 0 var(--space-1); font-size: 10px; }
|
|
1644
1488
|
.ds-247420 .ds-badge.ds-badge--lg { min-width: 22px; height: 22px; padding: 0 var(--space-2); font-size: var(--fs-tiny); }
|
|
1645
|
-
/* Canonical tone names are tone-success / tone-error / tone-neutral. Every
|
|
1646
|
-
other tone name grouped into the same rule below (tone-green/tone-live,
|
|
1647
|
-
tone-flame, tone-wip, tone-sun/tone-yellow, tone-ok/tone-miss) is a
|
|
1648
|
-
true-synonym legacy alias, kept working but sharing one declaration so the
|
|
1649
|
-
tone-family colors can't drift apart across names. */
|
|
1650
1489
|
.ds-247420 .ds-badge.tone-green, .ds-247420 .ds-badge.tone-live, .ds-247420 .ds-badge.tone-success {
|
|
1651
1490
|
background: var(--green-tint); color: var(--green-deep);
|
|
1652
1491
|
}
|
|
@@ -1673,18 +1512,12 @@
|
|
|
1673
1512
|
letter-spacing: var(--tr-caps); text-transform: uppercase;
|
|
1674
1513
|
border-radius: var(--r-pill);
|
|
1675
1514
|
}
|
|
1676
|
-
/* Chip size ladder — sm for dense toolbars/table cells, lg for prominent
|
|
1677
|
-
status. tone-* colouring (below) is orthogonal to size. */
|
|
1678
1515
|
.ds-247420 .chip.chip--sm { padding: var(--space-half) var(--space-2); font-size: var(--fs-micro); gap: var(--space-1); }
|
|
1679
1516
|
.ds-247420 .chip.chip--lg { padding: var(--space-1-75) var(--space-2-75); font-size: var(--fs-xs); }
|
|
1680
|
-
/* Tag variant — a rectangular, sentence-case chip for dense data (table cells,
|
|
1681
|
-
inline labels) where the all-caps pill reads too shouty and space-hungry.
|
|
1682
|
-
Keeps the tone-* palette; drops the caps + pill for a tight --r-0 corner. */
|
|
1683
1517
|
.ds-247420 .chip.chip--tag {
|
|
1684
1518
|
text-transform: none; letter-spacing: 0; font-weight: 500;
|
|
1685
1519
|
border-radius: var(--r-0); padding: var(--space-half) var(--space-2);
|
|
1686
1520
|
}
|
|
1687
|
-
/* Same canonical/legacy-alias grouping as .ds-badge above. */
|
|
1688
1521
|
.ds-247420 .chip.tone-green, .ds-247420 .chip.tone-live, .ds-247420 .chip.tone-success, .ds-247420 .chip.tone-ok {
|
|
1689
1522
|
background: var(--green-tint); color: var(--green-deep);
|
|
1690
1523
|
}
|
|
@@ -1694,21 +1527,9 @@
|
|
|
1694
1527
|
.ds-247420 .chip.tone-wip, .ds-247420 .chip.tone-neutral {
|
|
1695
1528
|
background: var(--bg-3); color: var(--fg-2);
|
|
1696
1529
|
}
|
|
1697
|
-
/* `.chip.accent` is the bare-adjective spelling of tone-accent (ui_kits/blog
|
|
1698
|
-
uses it for a "draft" chip). It had no rule anywhere, so an accented chip
|
|
1699
|
-
rendered byte-identical to a plain one. Folded into the alias grouping rather
|
|
1700
|
-
than given its own block, so the two spellings cannot drift apart. --accent
|
|
1701
|
-
is the FILL and --accent-ink the readable text tone (AGENTS.md) — the bare
|
|
1702
|
-
lead is ~1.07:1 on paper and unreadable as text. */
|
|
1703
1530
|
.ds-247420 .chip.accent, .ds-247420 .chip.tone-accent {
|
|
1704
1531
|
background: var(--accent-tint); color: var(--accent-ink);
|
|
1705
1532
|
}
|
|
1706
|
-
/* tone-dim was applied by five kits (aicat, project_page, signin, system_primer,
|
|
1707
|
-
terminal) with no rule anywhere, so a "dim" chip rendered byte-identical to a
|
|
1708
|
-
plain one — measured at rgb(234,230,218) on rgb(31,31,38), same opacity. It is
|
|
1709
|
-
the recede-into-the-row tone: the tier-3 foreground on the same recessed
|
|
1710
|
-
surface tone-wip uses, which is quieter than the default --fg-2 without
|
|
1711
|
-
dropping to an opacity fade that would take the border and background with it. */
|
|
1712
1533
|
.ds-247420 .chip.tone-dim {
|
|
1713
1534
|
background: var(--bg-3); color: var(--fg-3);
|
|
1714
1535
|
}
|
|
@@ -1722,10 +1543,6 @@
|
|
|
1722
1543
|
.ds-247420 .chip.tone-orange { background: color-mix(in oklab, var(--flame) 30%, var(--sun) 70%); color: var(--ink); }
|
|
1723
1544
|
.ds-247420 .chip.tone-yellow { background: var(--sun); color: var(--ink); }
|
|
1724
1545
|
|
|
1725
|
-
/* Removable chip — a trailing dismiss (x) button for editable tag/filter
|
|
1726
|
-
chip lists (session tags, saved-search chips). Reuses the chip's own
|
|
1727
|
-
tone/size; the button itself stays neutral-at-rest, per the standing
|
|
1728
|
-
color-reserved-for-meaning convention, tinting only on hover/focus. */
|
|
1729
1546
|
.ds-247420 .chip.ds-chip-removable { padding-right: var(--space-1); }
|
|
1730
1547
|
.ds-247420 .ds-chip-remove-btn {
|
|
1731
1548
|
display: inline-flex; align-items: center; justify-content: center;
|
|
@@ -1741,8 +1558,6 @@
|
|
|
1741
1558
|
.ds-247420 .ds-chip-remove-btn svg { width: 12px; height: 12px; }
|
|
1742
1559
|
}
|
|
1743
1560
|
|
|
1744
|
-
/* ds-pill — plain neutral chip, distinct from the toned .ds-badge/.chip family
|
|
1745
|
-
(gmsniff's .pill: a bare rounded label with no semantic tone). */
|
|
1746
1561
|
.ds-247420 .ds-pill {
|
|
1747
1562
|
display: inline-block;
|
|
1748
1563
|
padding: 1px 7px;
|
|
@@ -1760,16 +1575,6 @@
|
|
|
1760
1575
|
font-family: var(--ff-mono); font-size: var(--fs-tiny);
|
|
1761
1576
|
opacity: 0.8;
|
|
1762
1577
|
}
|
|
1763
|
-
/* Glyph() (src/components/shell/atoms.js) emits `glyph glyph-{size}` and an
|
|
1764
|
-
inline `font-size: var(--glyph-size-{size}, <literal>)`. The custom property
|
|
1765
|
-
is the documented theming hook — it is what lets a theme retune glyph scale
|
|
1766
|
-
without touching the component — but nothing declared it, so every glyph fell
|
|
1767
|
-
through to the hard-coded inline literal and the hook was inert. Declaring
|
|
1768
|
-
the three rungs on the scale makes the hook real; the sm/lg classes also give
|
|
1769
|
-
the box a matching footprint instead of the one-size 18px square. */
|
|
1770
|
-
/* Values mirror Glyph()'s own inline fallbacks exactly (11 / 13 / 16px), so
|
|
1771
|
-
declaring the hook changes nothing visually — it only makes the property
|
|
1772
|
-
themeable, which is what it always claimed to be. */
|
|
1773
1578
|
.ds-247420 .glyph { --glyph-size-sm: var(--fs-nano); --glyph-size-base: var(--fs-tiny); --glyph-size-lg: var(--fs-body); }
|
|
1774
1579
|
.ds-247420 .glyph-sm { width: 14px; height: 14px; }
|
|
1775
1580
|
.ds-247420 .glyph-lg { width: 22px; height: 22px; }
|
|
@@ -13350,25 +13155,10 @@
|
|
|
13350
13155
|
.ds-247420 .fd-page-error { max-height: 60vh; overflow: auto; white-space: pre-wrap; word-break: break-all; }
|
|
13351
13156
|
|
|
13352
13157
|
/* gm-prose.css */
|
|
13353
|
-
/* ============================================================
|
|
13354
|
-
gm-prose -- long-form article + doc-site prose surfaces
|
|
13355
|
-
Extracted-article host, sticky table-of-contents rail, CLI
|
|
13356
|
-
transcript block, definition-panel rows, repo cards, tag
|
|
13357
|
-
chips, and attributed callouts. Consumed pro-rata by doc
|
|
13358
|
-
sites (the gm paper) that mount the SDK and inject a flatspace
|
|
13359
|
-
article into #ds-article-host. Every color is a token from
|
|
13360
|
-
colors_and_type.css; no raw literals.
|
|
13361
|
-
============================================================ */
|
|
13362
|
-
|
|
13363
13158
|
.ds-247420 .ds-prose { line-height: 1.65; }
|
|
13364
13159
|
.ds-247420 .ds-prose a { color: var(--panel-accent); }
|
|
13365
13160
|
.ds-247420 .ds-prose a:hover { background: none; color: var(--panel-accent); text-decoration-color: transparent; }
|
|
13366
13161
|
.ds-247420 .ds-prose pre, .ds-247420 .ds-prose table { overflow-x: auto; max-width: 100%; }
|
|
13367
|
-
/* Mermaid diagrams render with an explicit width/height mermaid.js computes
|
|
13368
|
-
from the source graph, not the column it's mounted in — without this, a
|
|
13369
|
-
wide diagram overflows a narrow article-col and a narrow one leaves dead
|
|
13370
|
-
space rather than filling it. cursor:zoom-in signals the click-to-enlarge
|
|
13371
|
-
wiring theme.mjs adds after mermaid.run() finishes. */
|
|
13372
13162
|
.ds-247420 .ds-prose .mermaid { max-width: 100%; }
|
|
13373
13163
|
.ds-247420 .ds-prose .mermaid svg { max-width: 100%; height: auto; cursor: zoom-in; }
|
|
13374
13164
|
.ds-247420 .ds-prose canvas {
|
|
@@ -13386,23 +13176,17 @@
|
|
|
13386
13176
|
min-height: 0;
|
|
13387
13177
|
}
|
|
13388
13178
|
|
|
13389
|
-
|
|
13390
|
-
|
|
13391
|
-
|
|
13392
|
-
|
|
13393
|
-
|
|
13394
|
-
the ch-unit token for its own article-col width. */
|
|
13179
|
+
.ds-247420 {
|
|
13180
|
+
--article-toc-rail-w: 256px;
|
|
13181
|
+
--article-toc-gutter-nonrhythm: 44px;
|
|
13182
|
+
--article-toc-header-gap: 16px;
|
|
13183
|
+
}
|
|
13395
13184
|
.ds-247420 #ds-article-host.has-toc {
|
|
13396
13185
|
display: flex;
|
|
13397
13186
|
align-items: flex-start;
|
|
13398
|
-
|
|
13399
|
-
|
|
13400
|
-
|
|
13401
|
-
would silently change the host's computed max-width unless the calc were
|
|
13402
|
-
re-derived, so the literal and the calc stay coupled and explicit. */
|
|
13403
|
-
column-gap: 44px;
|
|
13404
|
-
gap: 44px;
|
|
13405
|
-
max-width: calc(256px + 44px + var(--measure));
|
|
13187
|
+
column-gap: var(--article-toc-gutter-nonrhythm);
|
|
13188
|
+
gap: var(--article-toc-gutter-nonrhythm);
|
|
13189
|
+
max-width: calc(var(--article-toc-rail-w) + var(--article-toc-gutter-nonrhythm) + var(--measure));
|
|
13406
13190
|
margin-left: auto;
|
|
13407
13191
|
margin-right: auto;
|
|
13408
13192
|
}
|
|
@@ -13411,21 +13195,11 @@
|
|
|
13411
13195
|
min-width: 0;
|
|
13412
13196
|
max-width: var(--measure);
|
|
13413
13197
|
}
|
|
13414
|
-
/* Sticky offset accounts for the page's own sticky header band (.app-chrome,
|
|
13415
|
-
which stacks --app-topbar-h + --app-crumb-h when both Topbar and Crumb are
|
|
13416
|
-
present — the gm paper page always renders both) plus a visual gap, so the
|
|
13417
|
-
TOC's own sticky rail settles just below the header instead of the header
|
|
13418
|
-
painting over its top rows. The 16px gap between header and TOC/max-height
|
|
13419
|
-
ceiling below is a small breathing margin, not a rhythm token — this sheet
|
|
13420
|
-
has no other layout depending on it. */
|
|
13421
13198
|
.ds-247420 #ds-article-host.has-toc > .toc {
|
|
13422
|
-
flex: 0 0
|
|
13199
|
+
flex: 0 0 var(--article-toc-rail-w);
|
|
13423
13200
|
align-self: flex-start;
|
|
13424
13201
|
position: sticky;
|
|
13425
|
-
|
|
13426
|
-
rect after layout+fonts settle), is the accurate figure; the calc()
|
|
13427
|
-
fallback covers a consumer that never sets it. */
|
|
13428
|
-
top: calc(var(--article-header-h, calc(var(--app-topbar-h, 0px) + var(--app-crumb-h, 0px))) + 16px);
|
|
13202
|
+
top: calc(var(--article-header-h, calc(var(--app-topbar-h, 0px) + var(--app-crumb-h, 0px))) + var(--article-toc-header-gap));
|
|
13429
13203
|
align-self: start;
|
|
13430
13204
|
max-height: calc(100vh - var(--article-header-h, calc(var(--app-topbar-h, 0px) + var(--app-crumb-h, 0px))) - 32px);
|
|
13431
13205
|
max-height: calc(100dvh - var(--article-header-h, calc(var(--app-topbar-h, 0px) + var(--app-crumb-h, 0px))) - 32px);
|
|
@@ -13452,15 +13226,6 @@
|
|
|
13452
13226
|
background: var(--panel-text-3);
|
|
13453
13227
|
background-clip: padding-box;
|
|
13454
13228
|
}
|
|
13455
|
-
/* Small-label voice — the local composition of the house `.t-label` recipe
|
|
13456
|
-
(src/css/app-shell/base.css). This sheet is a standalone published export
|
|
13457
|
-
with its own <link>, so it cannot join the `.t-label` selector list; it
|
|
13458
|
-
composes by referencing the identical token set. Both members are gm-
|
|
13459
|
-
generated markup (injected into #ds-article-host), so the class list is not
|
|
13460
|
-
reachable from src/ — the rule, not the markup, does the composing.
|
|
13461
|
-
Deliberate override for both: --panel-text-2, because prose surfaces use the
|
|
13462
|
-
panel text ramp rather than the app --fg ramp. Sized at --fs-nano: these
|
|
13463
|
-
labels ride above dense article chrome, not UI text. */
|
|
13464
13229
|
.ds-247420 #ds-article-host .toc .toc-title,
|
|
13465
13230
|
.ds-247420 .ds-prose .gm-callout .who {
|
|
13466
13231
|
font-family: var(--ff-mono);
|
|
@@ -13474,13 +13239,6 @@
|
|
|
13474
13239
|
margin: 0 0 var(--space-3) 0;
|
|
13475
13240
|
}
|
|
13476
13241
|
.ds-247420 #ds-article-host .toc ol { margin: 0; padding-left: var(--space-3-5); }
|
|
13477
|
-
/* Even wrap rhythm regardless of title length ("Fix on Sight" vs "In-Phase
|
|
13478
|
-
Quality: The Search and Code Discipline"): a fixed min-height per entry
|
|
13479
|
-
keeps one-line and two-line titles landing on the same row grid instead of
|
|
13480
|
-
the list visually concertina-ing between tight and loose rows, and a light
|
|
13481
|
-
separator every 5th entry breaks a long flat run (this TOC's source has no
|
|
13482
|
-
h3-level entries, so grouping is a typographic rhythm aid, not a fabricated
|
|
13483
|
-
semantic nesting the article doesn't declare). */
|
|
13484
13242
|
.ds-247420 #ds-article-host .toc li {
|
|
13485
13243
|
font-size: var(--fs-tiny);
|
|
13486
13244
|
line-height: 1.85;
|
|
@@ -13503,28 +13261,15 @@
|
|
|
13503
13261
|
}
|
|
13504
13262
|
}
|
|
13505
13263
|
|
|
13506
|
-
/* .ds-cli-block — the multi-row article/transcript container (CliBlock()'s
|
|
13507
|
-
outer wrapper holding stacked .ds-cli-row / .ds-cli-comment children).
|
|
13508
|
-
Distinct from the bare `.cli` single prompt+cmd row primitive owned by
|
|
13509
|
-
app-shell.css (Install(), HeroFromPageData(), terminal/site quickstart
|
|
13510
|
-
lines) — the two used to share the `.cli` selector with incompatible
|
|
13511
|
-
display models (flex row vs block transcript), so whichever stylesheet
|
|
13512
|
-
loaded last silently won for both consumers. Renamed here to remove the
|
|
13513
|
-
collision; see content.js CliBlock(). */
|
|
13514
13264
|
.ds-247420 .ds-cli-block {
|
|
13265
|
+
--ds-cli-block-fs-mono-halfrung: 12.5px;
|
|
13515
13266
|
display: block;
|
|
13516
13267
|
background: var(--panel-1);
|
|
13517
13268
|
border-radius: var(--r-0);
|
|
13518
13269
|
padding: var(--space-3) var(--space-3-5);
|
|
13519
13270
|
margin: var(--space-3) 0 var(--space-5) 0;
|
|
13520
13271
|
font-family: var(--ff-mono);
|
|
13521
|
-
|
|
13522
|
-
in the mono face, which runs optically ~1 rung larger than the system
|
|
13523
|
-
stack at the same px. --fs-micro (12) reads thin against the surrounding
|
|
13524
|
-
prose and --fs-tiny (13) reads heavy; 12.5 is the tuned midpoint. There is
|
|
13525
|
-
no half-rung on the --fs-* ladder and one must not be invented for a
|
|
13526
|
-
single block, so this literal stays. */
|
|
13527
|
-
font-size: 12.5px;
|
|
13272
|
+
font-size: var(--ds-cli-block-fs-mono-halfrung);
|
|
13528
13273
|
line-height: 1.6;
|
|
13529
13274
|
color: var(--panel-text);
|
|
13530
13275
|
box-shadow: var(--panel-shadow);
|
|
@@ -13597,18 +13342,11 @@
|
|
|
13597
13342
|
color: var(--panel-text-2);
|
|
13598
13343
|
border: 1px solid var(--panel-3);
|
|
13599
13344
|
font-size: 0.7rem;
|
|
13600
|
-
|
|
13601
|
-
|
|
13602
|
-
when a doc site scales root font-size. A px rung would decouple them. */
|
|
13603
|
-
padding: 0.15rem 0.5rem;
|
|
13345
|
+
--tag-inset-rem-coupled-to-root-fontsize: 0.15rem 0.5rem;
|
|
13346
|
+
padding: var(--tag-inset-rem-coupled-to-root-fontsize);
|
|
13604
13347
|
border-radius: var(--r-hair);
|
|
13605
13348
|
font-family: var(--ff-mono);
|
|
13606
13349
|
}
|
|
13607
|
-
/* Attributed callout — an editorial pull-quote (it carries a .who byline), so
|
|
13608
|
-
the left accent is DELIBERATE, not the generic alert stripe. Expressed via
|
|
13609
|
-
the house .panel-spine idiom (absolute ::before rail at --bw-chunk, squared
|
|
13610
|
-
leading corners) instead of a raw 3px border-left, so it stays on the border
|
|
13611
|
-
scale and matches the spine primitive in panel-row.css. */
|
|
13612
13350
|
.ds-247420 .ds-prose .gm-callout {
|
|
13613
13351
|
position: relative;
|
|
13614
13352
|
margin: var(--space-3-5) 0;
|
|
@@ -13623,23 +13361,11 @@
|
|
|
13623
13361
|
width: var(--bw-chunk); background: var(--panel-accent);
|
|
13624
13362
|
border-radius: var(--bw-chunk) 0 0 var(--bw-chunk);
|
|
13625
13363
|
}
|
|
13626
|
-
/* Joins the small-label voice above; only its own box properties here. */
|
|
13627
13364
|
.ds-247420 .ds-prose .gm-callout .who {
|
|
13628
13365
|
display: block;
|
|
13629
13366
|
margin-bottom: var(--space-1);
|
|
13630
13367
|
}
|
|
13631
13368
|
|
|
13632
|
-
/* .ds-prose-endnote — the closing line of an article ("end. reply by opening a
|
|
13633
|
-
pr."), set off from the body it terminates. Quieter and smaller than prose:
|
|
13634
|
-
it takes the mono face and the --panel-text-2 tone that this sheet's other
|
|
13635
|
-
ancillary voices use (.toc a, .gm-callout .who, .card .desc), so the endnote
|
|
13636
|
-
reads as chrome around the article rather than a final paragraph of it. The
|
|
13637
|
-
generous --space-5 lead is what does the "set off" — it breaks the paragraph
|
|
13638
|
-
rhythm so the eye registers the piece has ended before reading the words.
|
|
13639
|
-
Sized at --fs-xs rather than the --fs-nano label rung: this is a readable
|
|
13640
|
-
sentence with a link in it, not an uppercase micro-label.
|
|
13641
|
-
Replaces the inline style ui_kits/blog carried before the inline-style
|
|
13642
|
-
sweep, which named this class without ever defining it. */
|
|
13643
13369
|
.ds-247420 .ds-prose .ds-prose-endnote,
|
|
13644
13370
|
.ds-247420 .ds-prose-endnote {
|
|
13645
13371
|
margin-top: var(--space-5);
|
|
@@ -13649,9 +13375,6 @@
|
|
|
13649
13375
|
line-height: 1.6;
|
|
13650
13376
|
color: var(--panel-text-2);
|
|
13651
13377
|
}
|
|
13652
|
-
/* The endnote's link keeps the prose accent but stays in the quiet register —
|
|
13653
|
-
--panel-accent is the panel-ramp counterpart of --accent-ink (a readable
|
|
13654
|
-
TEXT tone), never the bare --accent fill, which is ~1.07:1 on paper. */
|
|
13655
13378
|
.ds-247420 .ds-prose-endnote a { color: var(--panel-accent); text-decoration: none; }
|
|
13656
13379
|
.ds-247420 .ds-prose-endnote a:hover { text-decoration: underline; }
|
|
13657
13380
|
|