@cloudgrid-io/ui 0.24.0 → 0.25.0
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/blocks/avatar.d.ts +92 -0
- package/dist/blocks/avatar.d.ts.map +1 -0
- package/dist/blocks/avatar.js +107 -0
- package/dist/blocks/avatar.js.map +1 -0
- package/dist/blocks/entity-card.d.ts +26 -1
- package/dist/blocks/entity-card.d.ts.map +1 -1
- package/dist/blocks/entity-card.js +20 -4
- package/dist/blocks/entity-card.js.map +1 -1
- package/dist/blocks/feed-post.d.ts +98 -0
- package/dist/blocks/feed-post.d.ts.map +1 -0
- package/dist/blocks/feed-post.js +88 -0
- package/dist/blocks/feed-post.js.map +1 -0
- package/dist/blocks/icons.d.ts +38 -2
- package/dist/blocks/icons.d.ts.map +1 -1
- package/dist/blocks/icons.js +38 -2
- package/dist/blocks/icons.js.map +1 -1
- package/dist/blocks/phosphor-marks.d.ts +8 -2
- package/dist/blocks/phosphor-marks.d.ts.map +1 -1
- package/dist/blocks/phosphor-marks.js +12 -3
- package/dist/blocks/phosphor-marks.js.map +1 -1
- package/dist/fonts.css +17 -10
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/prose.css +7 -2
- package/dist/theme.css +9 -0
- package/dist/tokens/base.json +49 -21
- package/dist/tokens/surface-panel.json +4 -2
- package/dist/tokens.css +165 -31
- package/dist/tokens.json +12 -10
- package/package.json +1 -2
package/dist/tokens/base.json
CHANGED
|
@@ -37,6 +37,16 @@
|
|
|
37
37
|
"css": "--cg-tertiary"
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
+
},
|
|
41
|
+
"accent": {
|
|
42
|
+
"$value": "#0061f0",
|
|
43
|
+
"$type": "color",
|
|
44
|
+
"$description": "SOURCE: the founder's 2026-09-10 draft, \"Accent\", RETUNED. The draft value is\n#086FFF and this is #0061f0.\n\nThe blue is the fourth brand hue and it has one job the other three do not: the\ndraft spends it on WORDS. \"View All\", \"Explore All\", \"+ New\" are 15px links, so\nthe bar is 4.5:1 (WCAG 1.4.3) and not the 3:1 an indicator gets.\n\n #086FFF on the page ground #f1f1f6 : 3.94:1 <-- under the text floor\n #086FFF on the card #ffffff : 4.44:1 <-- also under it\n #0061f0 on the page ground : 4.70:1\n #0061f0 on the card : 5.29:1\n white on #0061f0 : 5.29:1\n\nDerived rather than picked: the draft value in OKLCH is L 0.581 C 0.230 h -1.749,\nand this is the same hue and chroma walked down in lightness until the page\nground clears the floor. The nearest passing value on that ray is #0064f4 at\n4.5089:1, which clears by 0.009 — a margin a later ground retune would erase in\nsilence — so it is taken one step further to 4.70:1. That margin practice is\n--cg-neutral-500's, which holds 3.27:1 against a 3:1 bar for the same reason.\n\nDECLARED AT :root ONLY, like every other value in this group. A brand hue is not\na semantic and does not flip; the semantics that SPEND it do. Measured, so the\nnext person does not have to:\n\n #0061f0 on the purple panel #5a47f0 : 1.10:1 invisible\n #0061f0 on ink #222222 : 3.00:1 an indicator, never a word\n\nwhich is why --cg-link is #ffffff inside both surface scopes rather than this\nvalue. On the ink surface --cg-text-accent is already the lime, and on the panel\nit is white; the accent role has an on-surface answer in both places and none of\nthem is this blue. Do not \"fix\" that by copying this value into a dark scope.",
|
|
45
|
+
"$extensions": {
|
|
46
|
+
"io.cloudgrid": {
|
|
47
|
+
"css": "--cg-accent"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
40
50
|
}
|
|
41
51
|
},
|
|
42
52
|
"danger": {
|
|
@@ -286,6 +296,16 @@
|
|
|
286
296
|
"css": "--cg-tertiary-press"
|
|
287
297
|
}
|
|
288
298
|
}
|
|
299
|
+
},
|
|
300
|
+
"accent-press": {
|
|
301
|
+
"$value": "#0052da",
|
|
302
|
+
"$type": "color",
|
|
303
|
+
"$description": "The pressed and hovered rung of the accent, and --cg-link-hover.\n\nDerived with the step --cg-primary-press takes from --cg-primary rather than\nchosen: OKLCH L -0.0494, C -0.0078, hue held. One recipe for all four brand\nhues means a retune of any one of them moves its press with it.\n\n5.79:1 on the page ground and 6.52:1 on the card, so a link that darkens on\nhover never crosses a floor on the way.",
|
|
304
|
+
"$extensions": {
|
|
305
|
+
"io.cloudgrid": {
|
|
306
|
+
"css": "--cg-accent-press"
|
|
307
|
+
}
|
|
308
|
+
}
|
|
289
309
|
}
|
|
290
310
|
},
|
|
291
311
|
"neutrals": {
|
|
@@ -576,32 +596,35 @@
|
|
|
576
596
|
},
|
|
577
597
|
"link": {
|
|
578
598
|
"link": {
|
|
579
|
-
"$value": "{
|
|
599
|
+
"$value": "{brand.accent}",
|
|
580
600
|
"$extensions": {
|
|
581
601
|
"io.cloudgrid": {
|
|
582
602
|
"css": "--cg-link"
|
|
583
603
|
}
|
|
584
|
-
}
|
|
604
|
+
},
|
|
605
|
+
"$description": "The blue, not the ink. The founder's 2026-09-10 draft paints \"View All\",\n\"Explore All\" and \"+ New\" in the accent, which is the role the fourth brand hue\nwas added for.\n\nWas {semantic-text.text-primary}: an ink link with a purple hover, which is a\nlink that is invisible as a link until the pointer is over it. 4.70:1 on the\npage ground.\n\nBoth surface scopes override it to #ffffff and keep the lime hover, unchanged by\nthis. The accent is a light-surface value and says so in its own note."
|
|
585
606
|
},
|
|
586
607
|
"link-hover": {
|
|
587
|
-
"$value": "{brand.
|
|
608
|
+
"$value": "{brand-derived.accent-press}",
|
|
588
609
|
"$extensions": {
|
|
589
610
|
"io.cloudgrid": {
|
|
590
611
|
"css": "--cg-link-hover"
|
|
591
612
|
}
|
|
592
|
-
}
|
|
613
|
+
},
|
|
614
|
+
"$description": "A darkening of the link's own hue rather than a jump to another one. Was\n{brand.primary}, which read as a visited-link colour change once the resting\nstate stopped being ink."
|
|
593
615
|
}
|
|
594
616
|
},
|
|
595
617
|
"type-families": {
|
|
596
|
-
"$description": "
|
|
618
|
+
"$description": "One face. The founder's 2026-09-10 draft (#197) is set in Manrope throughout —\nits only text styles are Manrope Medium 22, SemiBold 15 and Regular 13 — so the\ndisplay rung is Manrope too and the condensed face is retired.\n\nWhat that replaced: Futura Condensed Extra Bold where it was installed, with\nSaira Semi Condensed 800 self-hosted as the stand-in everywhere else. Neither is\nloaded any more. --cg-font-display is still its OWN stack rather than an alias of\nthe body one, so a future display face is a one-value edit here and not a\nre-plumbing.\n\nThe mono face is untouched: it is used only inside prompt and terminal surfaces\nand the draft says nothing about it.",
|
|
597
619
|
"font-display": {
|
|
598
|
-
"$value": "'
|
|
620
|
+
"$value": "'Manrope Variable', 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
599
621
|
"$type": "fontFamily",
|
|
600
622
|
"$extensions": {
|
|
601
623
|
"io.cloudgrid": {
|
|
602
624
|
"css": "--cg-font-display"
|
|
603
625
|
}
|
|
604
|
-
}
|
|
626
|
+
},
|
|
627
|
+
"$description": "The display rung, now Manrope (#197). Identical to --cg-font-body today and\ndeliberately still a separate token.\n\nA consumer that wants the licensed Futura back puts it in front of this stack in\nits own :root and changes nothing else. Note that the blocks reading this rung\nalso set `uppercase` and --cg-display-tracking, which were tuned for a condensed\n800; they still render, in Manrope, and whether the lockups keep the uppercase is\na block decision rather than a token one (#203)."
|
|
605
628
|
},
|
|
606
629
|
"font-body": {
|
|
607
630
|
"$value": "'Manrope Variable', 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
@@ -623,7 +646,7 @@
|
|
|
623
646
|
}
|
|
624
647
|
},
|
|
625
648
|
"weights": {
|
|
626
|
-
"$description": "weights
|
|
649
|
+
"$description": "weights. Manrope Variable carries the whole 200-800 axis; the brand uses four of\nthem — 400 / 500 / 600 / 700 (#197).",
|
|
627
650
|
"weight-regular": {
|
|
628
651
|
"$value": "400",
|
|
629
652
|
"$type": "fontWeight",
|
|
@@ -643,22 +666,24 @@
|
|
|
643
666
|
}
|
|
644
667
|
},
|
|
645
668
|
"weight-bold": {
|
|
646
|
-
"$value": "
|
|
669
|
+
"$value": "600",
|
|
647
670
|
"$type": "fontWeight",
|
|
648
671
|
"$extensions": {
|
|
649
672
|
"io.cloudgrid": {
|
|
650
673
|
"css": "--cg-weight-bold"
|
|
651
674
|
}
|
|
652
|
-
}
|
|
675
|
+
},
|
|
676
|
+
"$description": "SemiBold, not Bold. The draft's \"Body Bold\" style is Manrope SemiBold 600 at\n15/1.46, and 600 is what this rung has to be for `font-bold` to render it (#197).\n\nWas 700. Manrope at 700 next to the draft's 600 reads a weight heavier than the\ndesign everywhere the token is spent, and the alternative — a new\n--cg-weight-semibold that no component reads, beside a --cg-weight-bold that is\nnow wrong — would have left the wrong value reachable under the obvious name."
|
|
653
677
|
},
|
|
654
678
|
"weight-display": {
|
|
655
|
-
"$value": "
|
|
679
|
+
"$value": "700",
|
|
656
680
|
"$type": "fontWeight",
|
|
657
681
|
"$extensions": {
|
|
658
682
|
"io.cloudgrid": {
|
|
659
683
|
"css": "--cg-weight-display"
|
|
660
684
|
}
|
|
661
|
-
}
|
|
685
|
+
},
|
|
686
|
+
"$description": "The display rung, reachable as `font-heavy` (`font-display` is the family; see\ntheme.css). 700 rather than 800 since the face became Manrope (#197): the brand\nloads 400/500/600/700 and the 800 end of the axis belonged to the condensed\nface's own weight."
|
|
662
687
|
}
|
|
663
688
|
},
|
|
664
689
|
"h1-display-ramp": {
|
|
@@ -721,13 +746,14 @@
|
|
|
721
746
|
},
|
|
722
747
|
"manrope-ramp": {
|
|
723
748
|
"heading-lg": {
|
|
724
|
-
"$value": "
|
|
749
|
+
"$value": "22px",
|
|
725
750
|
"$type": "dimension",
|
|
726
751
|
"$extensions": {
|
|
727
752
|
"io.cloudgrid": {
|
|
728
753
|
"css": "--cg-heading-lg"
|
|
729
754
|
}
|
|
730
|
-
}
|
|
755
|
+
},
|
|
756
|
+
"$description": "SOURCE: the founder's 2026-09-10 draft, \"H4\" — Manrope Medium 22/1.2 (#197).\n\nWas 24px. This is the section-heading rung: CardGrid, Carousel and PricingTiers\neach render an h2 as `text-heading-lg font-medium text-ink`, which is the draft's\nH4 exactly (\"My Creations\", \"Most Popular\", \"On the Grid\")."
|
|
731
757
|
},
|
|
732
758
|
"heading-md": {
|
|
733
759
|
"$value": "20px",
|
|
@@ -750,13 +776,14 @@
|
|
|
750
776
|
}
|
|
751
777
|
},
|
|
752
778
|
"heading-line": {
|
|
753
|
-
"$value": "1.
|
|
779
|
+
"$value": "1.2",
|
|
754
780
|
"$type": "number",
|
|
755
781
|
"$extensions": {
|
|
756
782
|
"io.cloudgrid": {
|
|
757
783
|
"css": "--cg-heading-line"
|
|
758
784
|
}
|
|
759
|
-
}
|
|
785
|
+
},
|
|
786
|
+
"$description": "SOURCE: the draft's H4 line height (#197). Was 1.3.\n\nOne leading serves all three heading rungs, so the 17px and 20px rungs tighten\nwith the 22px one. That is the draft's own proportion rather than an\nextrapolation, and a heading is short enough that 1.2 does not cost a line its\ndescenders."
|
|
760
787
|
},
|
|
761
788
|
"body-lg": {
|
|
762
789
|
"$value": "19px",
|
|
@@ -799,13 +826,14 @@
|
|
|
799
826
|
}
|
|
800
827
|
},
|
|
801
828
|
"body-line": {
|
|
802
|
-
"$value": "1.
|
|
829
|
+
"$value": "1.46",
|
|
803
830
|
"$type": "number",
|
|
804
831
|
"$extensions": {
|
|
805
832
|
"io.cloudgrid": {
|
|
806
833
|
"css": "--cg-body-line"
|
|
807
834
|
}
|
|
808
|
-
}
|
|
835
|
+
},
|
|
836
|
+
"$description": "SOURCE: the draft's \"Body Bold\" and \"Small\" both carry 1.46 (#197). Was 1.5.\n\nIt serves every body rung and the caption, which is what makes the draft's two\nbody styles land whole: Body Bold is --cg-body-sm at 15/1.46 and Small is\n--cg-caption at 13/1.46, both already the right size."
|
|
809
837
|
},
|
|
810
838
|
"body-tracking": {
|
|
811
839
|
"$value": "0em",
|
|
@@ -1320,9 +1348,9 @@
|
|
|
1320
1348
|
"indicator": {
|
|
1321
1349
|
"$description": "indicator + chrome: taken from the Console so the system holds every value in\none place, 2026-08-24 (#96).\n\nPENDING A DESIGNER. These are adopted as-is, not designed. They are here so the\nConsole can stop carrying private copies and so there is a single thing to edit;\nthe values themselves are the Console's current ones and are expected to change.\nMeasurements are recorded beside each so the decision is informed rather than\ninherited.",
|
|
1322
1350
|
"volt": {
|
|
1323
|
-
"$value": "
|
|
1351
|
+
"$value": "{brand.secondary}",
|
|
1324
1352
|
"$type": "color",
|
|
1325
|
-
"$description": "The live/current INDICATOR — the dot in its halo, and the brand mark. Never\ndecorative, never a fill.\n\
|
|
1353
|
+
"$description": "The live/current INDICATOR — the dot in its halo, and the brand mark. Never\ndecorative, never a fill.\n\nAN ALIAS of --cg-secondary as of the 2026-09-10 re-skin (#197), which is the\nanswer to the question this note used to hold open. It was #b6ff2e, a SECOND\nlime 36 dE from the brand's own, and the note asked which one the brand owns.\nThe founder's draft carries exactly one lime, #b6de68, and it is --cg-secondary:\nthe Most Popular bars are painted in it and #b6ff2e appears nowhere.\n\nSo the hue is retired and the NAME is kept. Every surface that draws a live mark\nkeeps writing --cg-volt, --cg-live-halo follows through the color-mix it already\nhad, and nothing downstream has to know the value moved. The alias is deliberate\nin the same way --cg-pending's is: one value today, two names, so the mark and\nthe brand hue can part later with a one-line edit here.\n\nMeasured, on both sides of the move:\n\n #b6ff2e on white : 1.21:1 #b6de68 on white : 1.53:1\n --cg-volt-ink on it : 9.94:1 --cg-volt-ink on it : 7.82:1\n\nStill below every text bar on white, and still recorded rather than corrected:\nit reads because it is paired with --cg-volt-ink in a pill, it works on the panel\nand on ink, and darkening it would be a design decision rather than a contrast\nfix. The halo lightens with it, from #e8ffbc to #e8f4cf composited over white.\n\nIt is still a second LIVE beside state.online (#00a05c), and they are still not\ninterchangeable — online is 3.40:1 on white and this is 1.53:1. volt is the\nbrand mark; online is the entity's state.",
|
|
1326
1354
|
"$extensions": {
|
|
1327
1355
|
"io.cloudgrid": {
|
|
1328
1356
|
"css": "--cg-volt"
|
|
@@ -1332,7 +1360,7 @@
|
|
|
1332
1360
|
"volt-ink": {
|
|
1333
1361
|
"$value": "#243d00",
|
|
1334
1362
|
"$type": "color",
|
|
1335
|
-
"$description": "Text and glyphs ON volt.
|
|
1363
|
+
"$description": "Text and glyphs ON volt. 7.82:1 against it, re-measured for the 2026-09-10\nre-skin (#197) when volt became an alias of --cg-secondary: it was 9.94:1\nagainst the old #b6ff2e. Unchanged in value, because 7.82:1 is comfortably over\nthe 4.5:1 text floor and re-deriving a value that still holds would move a\ncolour for arithmetic's sake.\n\nThis is NOT the state -ink that EntityStatus (#116) says the library lacks. That\nnote wants a foreground for the WORD on a state chip, and the arrangement it\nshipped instead — dot carries the colour, word is text-ink — already measures\n14.33:1 on online-fill, against 10.86:1 for this olive. volt-ink is tuned to volt\nand belongs to volt. Adding a state -ink is still a brand decision and still\nopen.",
|
|
1336
1364
|
"$extensions": {
|
|
1337
1365
|
"io.cloudgrid": {
|
|
1338
1366
|
"css": "--cg-volt-ink"
|
|
@@ -86,12 +86,14 @@
|
|
|
86
86
|
}
|
|
87
87
|
},
|
|
88
88
|
"link-hover": {
|
|
89
|
-
"$value": "
|
|
89
|
+
"$value": "#caf37d",
|
|
90
90
|
"$extensions": {
|
|
91
91
|
"io.cloudgrid": {
|
|
92
92
|
"css": "--cg-link-hover"
|
|
93
93
|
}
|
|
94
|
-
}
|
|
94
|
+
},
|
|
95
|
+
"$type": "color",
|
|
96
|
+
"$description": "A lightened lime, not the brand one. #197 extended the contrast guardrail to the\nlink rungs and the panel is where it went red:\n\n {brand.secondary} #b6de68 on the panel #5a47f0 : 3.79:1 <-- under AA\n #caf37d on the panel : 4.62:1\n\nSame hue and chroma in OKLCH, lifted in lightness until a hovered link on purple\nis readable. A hover state is still normal text and gets no exemption, and the\npanel is the one surface where the lime is a foreground rather than a mark.\n\nThe rest rung above stays #ffffff, so hovering still moves the colour rather than\nonly adding the underline the block draws. On ink the brand lime is left alone:\nit measures 10.33:1 there and needs nothing."
|
|
95
97
|
}
|
|
96
98
|
},
|
|
97
99
|
"semantic-surfaces": {
|
package/dist/tokens.css
CHANGED
|
@@ -44,6 +44,39 @@
|
|
|
44
44
|
--cg-primary: #5a47f0;
|
|
45
45
|
--cg-secondary: #b6de68;
|
|
46
46
|
--cg-tertiary: #60e9f0;
|
|
47
|
+
/*
|
|
48
|
+
SOURCE: the founder's 2026-09-10 draft, "Accent", RETUNED. The draft value is
|
|
49
|
+
#086FFF and this is #0061f0.
|
|
50
|
+
|
|
51
|
+
The blue is the fourth brand hue and it has one job the other three do not: the
|
|
52
|
+
draft spends it on WORDS. "View All", "Explore All", "+ New" are 15px links, so
|
|
53
|
+
the bar is 4.5:1 (WCAG 1.4.3) and not the 3:1 an indicator gets.
|
|
54
|
+
|
|
55
|
+
#086FFF on the page ground #f1f1f6 : 3.94:1 <-- under the text floor
|
|
56
|
+
#086FFF on the card #ffffff : 4.44:1 <-- also under it
|
|
57
|
+
#0061f0 on the page ground : 4.70:1
|
|
58
|
+
#0061f0 on the card : 5.29:1
|
|
59
|
+
white on #0061f0 : 5.29:1
|
|
60
|
+
|
|
61
|
+
Derived rather than picked: the draft value in OKLCH is L 0.581 C 0.230 h -1.749,
|
|
62
|
+
and this is the same hue and chroma walked down in lightness until the page
|
|
63
|
+
ground clears the floor. The nearest passing value on that ray is #0064f4 at
|
|
64
|
+
4.5089:1, which clears by 0.009 — a margin a later ground retune would erase in
|
|
65
|
+
silence — so it is taken one step further to 4.70:1. That margin practice is
|
|
66
|
+
--cg-neutral-500's, which holds 3.27:1 against a 3:1 bar for the same reason.
|
|
67
|
+
|
|
68
|
+
DECLARED AT :root ONLY, like every other value in this group. A brand hue is not
|
|
69
|
+
a semantic and does not flip; the semantics that SPEND it do. Measured, so the
|
|
70
|
+
next person does not have to:
|
|
71
|
+
|
|
72
|
+
#0061f0 on the purple panel #5a47f0 : 1.10:1 invisible
|
|
73
|
+
#0061f0 on ink #222222 : 3.00:1 an indicator, never a word
|
|
74
|
+
|
|
75
|
+
which is why --cg-link is #ffffff inside both surface scopes rather than this
|
|
76
|
+
value. On the ink surface --cg-text-accent is already the lime, and on the panel
|
|
77
|
+
it is white; the accent role has an on-surface answer in both places and none of
|
|
78
|
+
them is this blue. Do not "fix" that by copying this value into a dark scope. */
|
|
79
|
+
--cg-accent: #0061f0;
|
|
47
80
|
|
|
48
81
|
/* ---- danger ----
|
|
49
82
|
danger (PLACEHOLDER, not a brand value)
|
|
@@ -356,6 +389,16 @@
|
|
|
356
389
|
--cg-primary-tint: #eeecfe;
|
|
357
390
|
--cg-secondary-press: #a6cf57;
|
|
358
391
|
--cg-tertiary-press: #4dd8e0;
|
|
392
|
+
/*
|
|
393
|
+
The pressed and hovered rung of the accent, and --cg-link-hover.
|
|
394
|
+
|
|
395
|
+
Derived with the step --cg-primary-press takes from --cg-primary rather than
|
|
396
|
+
chosen: OKLCH L -0.0494, C -0.0078, hue held. One recipe for all four brand
|
|
397
|
+
hues means a retune of any one of them moves its press with it.
|
|
398
|
+
|
|
399
|
+
5.79:1 on the page ground and 6.52:1 on the card, so a link that darkens on
|
|
400
|
+
hover never crosses a floor on the way. */
|
|
401
|
+
--cg-accent-press: #0052da;
|
|
359
402
|
|
|
360
403
|
/* ---- neutrals ---- */
|
|
361
404
|
--cg-neutral-0: #ffffff;
|
|
@@ -448,24 +491,70 @@
|
|
|
448
491
|
--cg-focus-ring: rgba(90, 71, 240, 0.28);
|
|
449
492
|
|
|
450
493
|
/* ---- link ---- */
|
|
451
|
-
|
|
452
|
-
|
|
494
|
+
/*
|
|
495
|
+
The blue, not the ink. The founder's 2026-09-10 draft paints "View All",
|
|
496
|
+
"Explore All" and "+ New" in the accent, which is the role the fourth brand hue
|
|
497
|
+
was added for.
|
|
498
|
+
|
|
499
|
+
Was {semantic-text.text-primary}: an ink link with a purple hover, which is a
|
|
500
|
+
link that is invisible as a link until the pointer is over it. 4.70:1 on the
|
|
501
|
+
page ground.
|
|
502
|
+
|
|
503
|
+
Both surface scopes override it to #ffffff and keep the lime hover, unchanged by
|
|
504
|
+
this. The accent is a light-surface value and says so in its own note. */
|
|
505
|
+
--cg-link: var(--cg-accent);
|
|
506
|
+
/*
|
|
507
|
+
A darkening of the link's own hue rather than a jump to another one. Was
|
|
508
|
+
{brand.primary}, which read as a visited-link colour change once the resting
|
|
509
|
+
state stopped being ink. */
|
|
510
|
+
--cg-link-hover: var(--cg-accent-press);
|
|
453
511
|
|
|
454
512
|
/* ---- type-families ----
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
513
|
+
One face. The founder's 2026-09-10 draft (#197) is set in Manrope throughout —
|
|
514
|
+
its only text styles are Manrope Medium 22, SemiBold 15 and Regular 13 — so the
|
|
515
|
+
display rung is Manrope too and the condensed face is retired.
|
|
516
|
+
|
|
517
|
+
What that replaced: Futura Condensed Extra Bold where it was installed, with
|
|
518
|
+
Saira Semi Condensed 800 self-hosted as the stand-in everywhere else. Neither is
|
|
519
|
+
loaded any more. --cg-font-display is still its OWN stack rather than an alias of
|
|
520
|
+
the body one, so a future display face is a one-value edit here and not a
|
|
521
|
+
re-plumbing.
|
|
522
|
+
|
|
523
|
+
The mono face is untouched: it is used only inside prompt and terminal surfaces
|
|
524
|
+
and the draft says nothing about it. */
|
|
525
|
+
/*
|
|
526
|
+
The display rung, now Manrope (#197). Identical to --cg-font-body today and
|
|
527
|
+
deliberately still a separate token.
|
|
528
|
+
|
|
529
|
+
A consumer that wants the licensed Futura back puts it in front of this stack in
|
|
530
|
+
its own :root and changes nothing else. Note that the blocks reading this rung
|
|
531
|
+
also set `uppercase` and --cg-display-tracking, which were tuned for a condensed
|
|
532
|
+
800; they still render, in Manrope, and whether the lockups keep the uppercase is
|
|
533
|
+
a block decision rather than a token one (#203). */
|
|
534
|
+
--cg-font-display: 'Manrope Variable', 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
460
535
|
--cg-font-body: 'Manrope Variable', 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
461
536
|
--cg-font-mono: 'JetBrains Mono Variable', 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
462
537
|
|
|
463
538
|
/* ---- weights ----
|
|
464
|
-
weights
|
|
539
|
+
weights. Manrope Variable carries the whole 200-800 axis; the brand uses four of
|
|
540
|
+
them — 400 / 500 / 600 / 700 (#197). */
|
|
465
541
|
--cg-weight-regular: 400;
|
|
466
542
|
--cg-weight-medium: 500;
|
|
467
|
-
|
|
468
|
-
|
|
543
|
+
/*
|
|
544
|
+
SemiBold, not Bold. The draft's "Body Bold" style is Manrope SemiBold 600 at
|
|
545
|
+
15/1.46, and 600 is what this rung has to be for `font-bold` to render it (#197).
|
|
546
|
+
|
|
547
|
+
Was 700. Manrope at 700 next to the draft's 600 reads a weight heavier than the
|
|
548
|
+
design everywhere the token is spent, and the alternative — a new
|
|
549
|
+
--cg-weight-semibold that no component reads, beside a --cg-weight-bold that is
|
|
550
|
+
now wrong — would have left the wrong value reachable under the obvious name. */
|
|
551
|
+
--cg-weight-bold: 600;
|
|
552
|
+
/*
|
|
553
|
+
The display rung, reachable as `font-heavy` (`font-display` is the family; see
|
|
554
|
+
theme.css). 700 rather than 800 since the face became Manrope (#197): the brand
|
|
555
|
+
loads 400/500/600/700 and the 800 end of the axis belonged to the condensed
|
|
556
|
+
face's own weight. */
|
|
557
|
+
--cg-weight-display: 700;
|
|
469
558
|
|
|
470
559
|
/* ---- h1-display-ramp ----
|
|
471
560
|
H1 display ramp: uppercase, condensed, Primary or white
|
|
@@ -481,12 +570,25 @@
|
|
|
481
570
|
--cg-display-tracking: 0.012em;
|
|
482
571
|
|
|
483
572
|
/* ---- manrope-ramp ---- */
|
|
484
|
-
|
|
573
|
+
/*
|
|
574
|
+
SOURCE: the founder's 2026-09-10 draft, "H4" — Manrope Medium 22/1.2 (#197).
|
|
575
|
+
|
|
576
|
+
Was 24px. This is the section-heading rung: CardGrid, Carousel and PricingTiers
|
|
577
|
+
each render an h2 as `text-heading-lg font-medium text-ink`, which is the draft's
|
|
578
|
+
H4 exactly ("My Creations", "Most Popular", "On the Grid"). */
|
|
579
|
+
--cg-heading-lg: 22px;
|
|
485
580
|
/* SOURCE: card title */
|
|
486
581
|
--cg-heading-md: 20px;
|
|
487
582
|
/* SOURCE: step title */
|
|
488
583
|
--cg-heading-sm: 17px;
|
|
489
|
-
|
|
584
|
+
/*
|
|
585
|
+
SOURCE: the draft's H4 line height (#197). Was 1.3.
|
|
586
|
+
|
|
587
|
+
One leading serves all three heading rungs, so the 17px and 20px rungs tighten
|
|
588
|
+
with the 22px one. That is the draft's own proportion rather than an
|
|
589
|
+
extrapolation, and a heading is short enough that 1.2 does not cost a line its
|
|
590
|
+
descenders. */
|
|
591
|
+
--cg-heading-line: 1.2;
|
|
490
592
|
/* SOURCE: H1 subline */
|
|
491
593
|
--cg-body-lg: 19px;
|
|
492
594
|
/* SOURCE: default UI text */
|
|
@@ -495,7 +597,13 @@
|
|
|
495
597
|
--cg-body-sm: 15px;
|
|
496
598
|
/* SOURCE: footer, helper */
|
|
497
599
|
--cg-caption: 13px;
|
|
498
|
-
|
|
600
|
+
/*
|
|
601
|
+
SOURCE: the draft's "Body Bold" and "Small" both carry 1.46 (#197). Was 1.5.
|
|
602
|
+
|
|
603
|
+
It serves every body rung and the caption, which is what makes the draft's two
|
|
604
|
+
body styles land whole: Body Bold is --cg-body-sm at 15/1.46 and Small is
|
|
605
|
+
--cg-caption at 13/1.46, both already the right size. */
|
|
606
|
+
--cg-body-line: 1.46;
|
|
499
607
|
--cg-body-tracking: 0em;
|
|
500
608
|
--cg-mono-size: 14px;
|
|
501
609
|
--cg-mono-line: 1.7;
|
|
@@ -611,26 +719,38 @@
|
|
|
611
719
|
The live/current INDICATOR — the dot in its halo, and the brand mark. Never
|
|
612
720
|
decorative, never a fill.
|
|
613
721
|
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
722
|
+
AN ALIAS of --cg-secondary as of the 2026-09-10 re-skin (#197), which is the
|
|
723
|
+
answer to the question this note used to hold open. It was #b6ff2e, a SECOND
|
|
724
|
+
lime 36 dE from the brand's own, and the note asked which one the brand owns.
|
|
725
|
+
The founder's draft carries exactly one lime, #b6de68, and it is --cg-secondary:
|
|
726
|
+
the Most Popular bars are painted in it and #b6ff2e appears nowhere.
|
|
727
|
+
|
|
728
|
+
So the hue is retired and the NAME is kept. Every surface that draws a live mark
|
|
729
|
+
keeps writing --cg-volt, --cg-live-halo follows through the color-mix it already
|
|
730
|
+
had, and nothing downstream has to know the value moved. The alias is deliberate
|
|
731
|
+
in the same way --cg-pending's is: one value today, two names, so the mark and
|
|
732
|
+
the brand hue can part later with a one-line edit here.
|
|
619
733
|
|
|
620
|
-
|
|
621
|
-
the brand owns is the open question here.
|
|
734
|
+
Measured, on both sides of the move:
|
|
622
735
|
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
and
|
|
629
|
-
|
|
630
|
-
|
|
736
|
+
#b6ff2e on white : 1.21:1 #b6de68 on white : 1.53:1
|
|
737
|
+
--cg-volt-ink on it : 9.94:1 --cg-volt-ink on it : 7.82:1
|
|
738
|
+
|
|
739
|
+
Still below every text bar on white, and still recorded rather than corrected:
|
|
740
|
+
it reads because it is paired with --cg-volt-ink in a pill, it works on the panel
|
|
741
|
+
and on ink, and darkening it would be a design decision rather than a contrast
|
|
742
|
+
fix. The halo lightens with it, from #e8ffbc to #e8f4cf composited over white.
|
|
743
|
+
|
|
744
|
+
It is still a second LIVE beside state.online (#00a05c), and they are still not
|
|
745
|
+
interchangeable — online is 3.40:1 on white and this is 1.53:1. volt is the
|
|
746
|
+
brand mark; online is the entity's state. */
|
|
747
|
+
--cg-volt: var(--cg-secondary);
|
|
631
748
|
/*
|
|
632
|
-
Text and glyphs ON volt.
|
|
633
|
-
|
|
749
|
+
Text and glyphs ON volt. 7.82:1 against it, re-measured for the 2026-09-10
|
|
750
|
+
re-skin (#197) when volt became an alias of --cg-secondary: it was 9.94:1
|
|
751
|
+
against the old #b6ff2e. Unchanged in value, because 7.82:1 is comfortably over
|
|
752
|
+
the 4.5:1 text floor and re-deriving a value that still holds would move a
|
|
753
|
+
colour for arithmetic's sake.
|
|
634
754
|
|
|
635
755
|
This is NOT the state -ink that EntityStatus (#116) says the library lacks. That
|
|
636
756
|
note wants a foreground for the WORD on a state chip, and the arrangement it
|
|
@@ -734,7 +854,21 @@
|
|
|
734
854
|
|
|
735
855
|
/* ---- link ---- */
|
|
736
856
|
--cg-link: #ffffff;
|
|
737
|
-
|
|
857
|
+
/*
|
|
858
|
+
A lightened lime, not the brand one. #197 extended the contrast guardrail to the
|
|
859
|
+
link rungs and the panel is where it went red:
|
|
860
|
+
|
|
861
|
+
{brand.secondary} #b6de68 on the panel #5a47f0 : 3.79:1 <-- under AA
|
|
862
|
+
#caf37d on the panel : 4.62:1
|
|
863
|
+
|
|
864
|
+
Same hue and chroma in OKLCH, lifted in lightness until a hovered link on purple
|
|
865
|
+
is readable. A hover state is still normal text and gets no exemption, and the
|
|
866
|
+
panel is the one surface where the lime is a foreground rather than a mark.
|
|
867
|
+
|
|
868
|
+
The rest rung above stays #ffffff, so hovering still moves the colour rather than
|
|
869
|
+
only adding the underline the block draws. On ink the brand lime is left alone:
|
|
870
|
+
it measures 10.33:1 there and needs nothing. */
|
|
871
|
+
--cg-link-hover: #caf37d;
|
|
738
872
|
|
|
739
873
|
/* ---- semantic-surfaces ---- */
|
|
740
874
|
--cg-surface-card: transparent;
|
package/dist/tokens.json
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
"--cg-primary": "#5a47f0",
|
|
8
8
|
"--cg-secondary": "#b6de68",
|
|
9
9
|
"--cg-tertiary": "#60e9f0",
|
|
10
|
+
"--cg-accent": "#0061f0",
|
|
10
11
|
"--cg-danger": "#E53935",
|
|
11
12
|
"--cg-online": "#00a05c",
|
|
12
13
|
"--cg-offline": "var(--cg-neutral-500)",
|
|
@@ -32,6 +33,7 @@
|
|
|
32
33
|
"--cg-primary-tint": "#eeecfe",
|
|
33
34
|
"--cg-secondary-press": "#a6cf57",
|
|
34
35
|
"--cg-tertiary-press": "#4dd8e0",
|
|
36
|
+
"--cg-accent-press": "#0052da",
|
|
35
37
|
"--cg-neutral-0": "#ffffff",
|
|
36
38
|
"--cg-neutral-25": "#f1f1f6",
|
|
37
39
|
"--cg-lavender-50": "#f2f1f7",
|
|
@@ -64,30 +66,30 @@
|
|
|
64
66
|
"--cg-border-strong": "var(--cg-ink)",
|
|
65
67
|
"--cg-border-accent": "var(--cg-primary)",
|
|
66
68
|
"--cg-focus-ring": "rgba(90, 71, 240, 0.28)",
|
|
67
|
-
"--cg-link": "var(--cg-
|
|
68
|
-
"--cg-link-hover": "var(--cg-
|
|
69
|
-
"--cg-font-display": "'
|
|
69
|
+
"--cg-link": "var(--cg-accent)",
|
|
70
|
+
"--cg-link-hover": "var(--cg-accent-press)",
|
|
71
|
+
"--cg-font-display": "'Manrope Variable', 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
70
72
|
"--cg-font-body": "'Manrope Variable', 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
71
73
|
"--cg-font-mono": "'JetBrains Mono Variable', 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
72
74
|
"--cg-weight-regular": "400",
|
|
73
75
|
"--cg-weight-medium": "500",
|
|
74
|
-
"--cg-weight-bold": "
|
|
75
|
-
"--cg-weight-display": "
|
|
76
|
+
"--cg-weight-bold": "600",
|
|
77
|
+
"--cg-weight-display": "700",
|
|
76
78
|
"--cg-display-xl": "56px",
|
|
77
79
|
"--cg-display-lg": "44px",
|
|
78
80
|
"--cg-display-md": "38px",
|
|
79
81
|
"--cg-display-sm": "30px",
|
|
80
82
|
"--cg-display-line": "1.06",
|
|
81
83
|
"--cg-display-tracking": "0.012em",
|
|
82
|
-
"--cg-heading-lg": "
|
|
84
|
+
"--cg-heading-lg": "22px",
|
|
83
85
|
"--cg-heading-md": "20px",
|
|
84
86
|
"--cg-heading-sm": "17px",
|
|
85
|
-
"--cg-heading-line": "1.
|
|
87
|
+
"--cg-heading-line": "1.2",
|
|
86
88
|
"--cg-body-lg": "19px",
|
|
87
89
|
"--cg-body-md": "16px",
|
|
88
90
|
"--cg-body-sm": "15px",
|
|
89
91
|
"--cg-caption": "13px",
|
|
90
|
-
"--cg-body-line": "1.
|
|
92
|
+
"--cg-body-line": "1.46",
|
|
91
93
|
"--cg-body-tracking": "0em",
|
|
92
94
|
"--cg-mono-size": "14px",
|
|
93
95
|
"--cg-mono-line": "1.7",
|
|
@@ -142,7 +144,7 @@
|
|
|
142
144
|
"--cg-transition-control": "background-color var(--cg-duration) var(--cg-ease-out), border-color var(--cg-duration) var(--cg-ease-out), color var(--cg-duration) var(--cg-ease-out), box-shadow var(--cg-duration) var(--cg-ease-out)",
|
|
143
145
|
"--cg-lift-hover": "translateY(-1px)",
|
|
144
146
|
"--cg-press-scale": "0.985",
|
|
145
|
-
"--cg-volt": "
|
|
147
|
+
"--cg-volt": "var(--cg-secondary)",
|
|
146
148
|
"--cg-volt-ink": "#243d00",
|
|
147
149
|
"--cg-live-halo": "color-mix(in srgb, var(--cg-volt) 32%, transparent)",
|
|
148
150
|
"--cg-scrim": "rgba(34, 34, 34, 0.4)",
|
|
@@ -162,7 +164,7 @@
|
|
|
162
164
|
"--cg-border-strong": "#ffffff",
|
|
163
165
|
"--cg-focus-ring": "rgba(255, 255, 255, 0.5)",
|
|
164
166
|
"--cg-link": "#ffffff",
|
|
165
|
-
"--cg-link-hover": "
|
|
167
|
+
"--cg-link-hover": "#caf37d",
|
|
166
168
|
"--cg-surface-card": "transparent",
|
|
167
169
|
"--cg-danger": "#FFDAD6",
|
|
168
170
|
"--cg-online": "#C8F5DC",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudgrid-io/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "CloudGrid design system: React components, brand design tokens, Tailwind theme, self-hosted fonts.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/",
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
"@base-ui/react": "^1.7.0",
|
|
33
33
|
"@fontsource-variable/jetbrains-mono": "^5.3.0",
|
|
34
34
|
"@fontsource-variable/manrope": "^5.3.0",
|
|
35
|
-
"@fontsource/saira-semi-condensed": "^5.3.0",
|
|
36
35
|
"class-variance-authority": "^0.7.1",
|
|
37
36
|
"clsx": "^2.1.1",
|
|
38
37
|
"sonner": "^2.0.8",
|