@hraness/design-kit 0.40.3 → 0.41.1
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/HERO_FIELDS.md +3 -1
- package/LANDSCAPE.md +100 -0
- package/README.md +35 -2
- package/dist/{chunk-s96ppgkp.js → chunk-kgrbekna.js} +47 -8
- package/dist/react/index.js +43 -3
- package/dist/react/server.js +1 -1
- package/dist/stylex-manifest.json +1 -1
- package/dist/stylex.css +44 -6
- package/package.json +7 -4
- package/portfolio-inventory.json +1 -1
- package/src/compiler-foundation.css +1 -0
- package/src/design-gallery.css +35 -0
- package/src/product-landscape.css +202 -0
- package/src/product-marketing-foundation.css +5 -1
- package/src/product-marketing.css +55 -5
- package/src/react/design-gallery.tsx +18 -3
- package/src/react/product-marketing.stylex.ts +36 -4
- package/src/react/product-marketing.tsx +24 -5
- package/src/styles.css +1 -0
package/dist/stylex.css
CHANGED
|
@@ -85,6 +85,10 @@
|
|
|
85
85
|
padding: .5rem 1rem 4rem;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
.xrqs5gp {
|
|
89
|
+
padding: .5rem 1rem;
|
|
90
|
+
}
|
|
91
|
+
|
|
88
92
|
.x1i4hug3 {
|
|
89
93
|
padding: .65rem .8rem;
|
|
90
94
|
}
|
|
@@ -101,10 +105,6 @@
|
|
|
101
105
|
padding: .75rem .95rem;
|
|
102
106
|
}
|
|
103
107
|
|
|
104
|
-
.x86o7ao {
|
|
105
|
-
padding: .8rem 1rem;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
108
|
.x1717udv {
|
|
109
109
|
padding: 0;
|
|
110
110
|
}
|
|
@@ -864,6 +864,10 @@
|
|
|
864
864
|
padding-inline: var(--hraness-marketing-gutter);
|
|
865
865
|
}
|
|
866
866
|
|
|
867
|
+
.x18wjirm {
|
|
868
|
+
padding-inline: var(--hraness-marketing-question-inline-inset, 1.25rem);
|
|
869
|
+
}
|
|
870
|
+
|
|
867
871
|
.xfmotut {
|
|
868
872
|
padding-inline: var(--layout-chrome-inset);
|
|
869
873
|
}
|
|
@@ -2939,6 +2943,10 @@
|
|
|
2939
2943
|
margin-block-start: 1rem;
|
|
2940
2944
|
}
|
|
2941
2945
|
|
|
2946
|
+
.x1n5yk0f {
|
|
2947
|
+
margin-block-start: auto;
|
|
2948
|
+
}
|
|
2949
|
+
|
|
2942
2950
|
.xvc5jky {
|
|
2943
2951
|
margin-inline-start: auto;
|
|
2944
2952
|
}
|
|
@@ -3386,6 +3394,10 @@
|
|
|
3386
3394
|
text-align: center;
|
|
3387
3395
|
}
|
|
3388
3396
|
|
|
3397
|
+
.xp4054r {
|
|
3398
|
+
text-align: end;
|
|
3399
|
+
}
|
|
3400
|
+
|
|
3389
3401
|
.x1yc453h {
|
|
3390
3402
|
text-align: start;
|
|
3391
3403
|
}
|
|
@@ -3424,6 +3436,10 @@
|
|
|
3424
3436
|
text-transform: uppercase;
|
|
3425
3437
|
}
|
|
3426
3438
|
|
|
3439
|
+
.x5hzr90 {
|
|
3440
|
+
text-underline-offset: .18em;
|
|
3441
|
+
}
|
|
3442
|
+
|
|
3427
3443
|
.xdsgf93 {
|
|
3428
3444
|
text-underline-offset: .22em;
|
|
3429
3445
|
}
|
|
@@ -3709,6 +3725,10 @@
|
|
|
3709
3725
|
color: var(--hraness-appearance-accent-foreground, var(--hraness-material-ink, var(--ui-accent-foreground, ButtonText)));
|
|
3710
3726
|
}
|
|
3711
3727
|
|
|
3728
|
+
.x1eyr600:focus-visible {
|
|
3729
|
+
color: var(--hraness-marketing-ink);
|
|
3730
|
+
}
|
|
3731
|
+
|
|
3712
3732
|
.x89zja:is([data-hovered], :hover) {
|
|
3713
3733
|
color: var(--secondary-foreground);
|
|
3714
3734
|
}
|
|
@@ -4943,8 +4963,26 @@
|
|
|
4943
4963
|
transform: translate3d(0, -4vh, 0);
|
|
4944
4964
|
}
|
|
4945
4965
|
|
|
4946
|
-
.
|
|
4947
|
-
|
|
4966
|
+
.x78hkw1:after {
|
|
4967
|
+
transition-duration: .24s;
|
|
4968
|
+
}
|
|
4969
|
+
|
|
4970
|
+
.xjocvvi:after {
|
|
4971
|
+
transition-property: transform;
|
|
4972
|
+
}
|
|
4973
|
+
|
|
4974
|
+
.x15fj410:after {
|
|
4975
|
+
transition-timing-function: cubic-bezier(.16, 1, .3, 1);
|
|
4976
|
+
}
|
|
4977
|
+
|
|
4978
|
+
.xba5a1s.xba5a1s:where(.x1mw0dh9[open] *):after {
|
|
4979
|
+
transform: rotate(135deg);
|
|
4980
|
+
}
|
|
4981
|
+
|
|
4982
|
+
@media (prefers-reduced-motion: reduce) {
|
|
4983
|
+
.x4oqjru.x4oqjru:after {
|
|
4984
|
+
transition-duration: 0s;
|
|
4985
|
+
}
|
|
4948
4986
|
}
|
|
4949
4987
|
}
|
|
4950
4988
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hraness/design-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.41.1",
|
|
4
4
|
"description": "React components and CSS for Hraness apps and product sites: application shells, marketing sections, charts, themes, effects, and syntax highlighting. Built on @hraness/ui.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -129,7 +129,8 @@
|
|
|
129
129
|
},
|
|
130
130
|
"./marketing-comparison.css": "./src/marketing-comparison.css",
|
|
131
131
|
"./marketing-diagram.css": "./src/marketing-diagram.css",
|
|
132
|
-
"./marketing-marquee.css": "./src/marketing-marquee.css"
|
|
132
|
+
"./marketing-marquee.css": "./src/marketing-marquee.css",
|
|
133
|
+
"./product-landscape.css": "./src/product-landscape.css"
|
|
133
134
|
},
|
|
134
135
|
"main": "./dist/index.js",
|
|
135
136
|
"types": "./src/index.ts",
|
|
@@ -314,7 +315,9 @@
|
|
|
314
315
|
"src/marketing-diagram.css",
|
|
315
316
|
"src/marketing-marquee.ts",
|
|
316
317
|
"src/marketing-marquee.css",
|
|
317
|
-
"src/react/marketing-marquee.tsx"
|
|
318
|
+
"src/react/marketing-marquee.tsx",
|
|
319
|
+
"src/product-landscape.css",
|
|
320
|
+
"LANDSCAPE.md"
|
|
318
321
|
],
|
|
319
322
|
"scripts": {
|
|
320
323
|
"build": "bun run ./scripts/build.ts",
|
|
@@ -328,7 +331,7 @@
|
|
|
328
331
|
"browser:install": "bun ./node_modules/playwright-core/cli.js install chromium",
|
|
329
332
|
"test:browser": "bun run test:browser:marketing && bun run test:browser:rest",
|
|
330
333
|
"test:browser:marketing": "bun run ./scripts/product-marketing-browser.ts",
|
|
331
|
-
"test:browser:rest": "bun run ./scripts/marketing-header-browser.ts && bun run ./scripts/site-shell-browser.ts && bun run ./scripts/palette-browser.ts && bun run ./scripts/gallery-browser.ts && bun run ./scripts/global-error-browser.ts && bun run ./scripts/security-delivery-browser.ts && bun run ./scripts/paper-theme-browser.ts && bun run ./scripts/product-marketing-preset-browser.ts && bun run ./scripts/lantern-material-browser.ts && bun run ./scripts/foil-browser.ts && bun run ./scripts/hero-light-browser.ts && bun run ./scripts/status-page-browser.ts && bun run ./scripts/marketing-marquee-browser.ts && bun run ./scripts/platform-install-browser.ts && bun run ./scripts/mockups-browser.ts && bun run ./scripts/agent-setup-browser.ts",
|
|
334
|
+
"test:browser:rest": "bun run ./scripts/marketing-header-browser.ts && bun run ./scripts/site-shell-browser.ts && bun run ./scripts/palette-browser.ts && bun run ./scripts/gallery-browser.ts && bun run ./scripts/global-error-browser.ts && bun run ./scripts/security-delivery-browser.ts && bun run ./scripts/paper-theme-browser.ts && bun run ./scripts/product-marketing-preset-browser.ts && bun run ./scripts/lantern-material-browser.ts && bun run ./scripts/foil-browser.ts && bun run ./scripts/hero-light-browser.ts && bun run ./scripts/status-page-browser.ts && bun run ./scripts/marketing-marquee-browser.ts && bun run ./scripts/product-landscape-browser.ts && bun run ./scripts/platform-install-browser.ts && bun run ./scripts/mockups-browser.ts && bun run ./scripts/agent-setup-browser.ts",
|
|
332
335
|
"test:package": "bun run ./scripts/package-smoke.ts && bun run ./scripts/mockups-import.ts",
|
|
333
336
|
"kb:refresh": "bunx --bun --package https://github.com/hraness/wordcell/releases/download/v0.24.0/hraness-wordcell-0.24.0.tgz wordcell refresh --root kb",
|
|
334
337
|
"kb:check:lane": "bunx --bun --package https://github.com/hraness/wordcell/releases/download/v0.24.0/hraness-wordcell-0.24.0.tgz wordcell check --root kb --no-catalog",
|
package/portfolio-inventory.json
CHANGED
package/src/design-gallery.css
CHANGED
|
@@ -347,6 +347,41 @@
|
|
|
347
347
|
background: var(--background);
|
|
348
348
|
}
|
|
349
349
|
|
|
350
|
+
.design-gallery__landscape {
|
|
351
|
+
display: grid;
|
|
352
|
+
min-block-size: 22rem;
|
|
353
|
+
align-content: start;
|
|
354
|
+
gap: var(--space-4);
|
|
355
|
+
padding: var(--space-8);
|
|
356
|
+
overflow: clip;
|
|
357
|
+
border: 1px solid var(--line);
|
|
358
|
+
background: var(--background);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.design-gallery__landscape-copy {
|
|
362
|
+
display: grid;
|
|
363
|
+
max-inline-size: 38rem;
|
|
364
|
+
gap: var(--space-2);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.design-gallery__landscape-copy > :where(h3, p),
|
|
368
|
+
.design-gallery__landscape-code {
|
|
369
|
+
margin: 0;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.design-gallery__landscape-code {
|
|
373
|
+
justify-self: start;
|
|
374
|
+
padding: var(--space-3) var(--space-4);
|
|
375
|
+
font-family: var(--font-mono, ui-monospace, monospace);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.design-gallery__landscape-note {
|
|
379
|
+
justify-self: start;
|
|
380
|
+
margin: 0;
|
|
381
|
+
padding: var(--space-3) var(--space-4);
|
|
382
|
+
border: 1px solid var(--line);
|
|
383
|
+
}
|
|
384
|
+
|
|
350
385
|
.design-gallery__foil-deck {
|
|
351
386
|
display: grid;
|
|
352
387
|
grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/* Product landscape: one product-owned illustration drawn behind marketing,
|
|
2
|
+
* documentation, and blog pages. See LANDSCAPE.md.
|
|
3
|
+
*
|
|
4
|
+
* The product supplies a grayscale luminance mask (light drawing on black) and
|
|
5
|
+
* the kit tints it with the page's own text mixed into its background, so the
|
|
6
|
+
* drawing follows every palette and appearance without an accent colour. The
|
|
7
|
+
* mask tiles down the page, so long pages never run out of scenery.
|
|
8
|
+
*
|
|
9
|
+
* Hosts:
|
|
10
|
+
* - `data-hraness-landscape="page"` on <body> or on any element inside it paints
|
|
11
|
+
* the layer behind the whole document. `data-hraness-landscape="off"` anywhere
|
|
12
|
+
* on the page turns it off, for application routes under a shared layout.
|
|
13
|
+
* - `data-hraness-landscape="contained"` paints the layer behind one element.
|
|
14
|
+
*
|
|
15
|
+
* Products set `--hraness-landscape-image` (and optionally the narrow image,
|
|
16
|
+
* opacity, and strength) on :root with root-relative or absolute URLs. Without
|
|
17
|
+
* an image the mask is fully transparent, so an unconfigured host paints
|
|
18
|
+
* nothing. Forced colours and print never draw the layer. */
|
|
19
|
+
:is(
|
|
20
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
21
|
+
[data-hraness-landscape="contained"]
|
|
22
|
+
) {
|
|
23
|
+
--_hraness-landscape-ink: var(
|
|
24
|
+
--hraness-landscape-ink,
|
|
25
|
+
color-mix(
|
|
26
|
+
in oklch,
|
|
27
|
+
var(--foreground, var(--plain-foreground, CanvasText)) var(--hraness-landscape-strength, 30%),
|
|
28
|
+
var(--background, var(--plain-background, Canvas))
|
|
29
|
+
)
|
|
30
|
+
);
|
|
31
|
+
position: relative;
|
|
32
|
+
isolation: isolate;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@supports (mask-mode: luminance) or (-webkit-mask-source-type: luminance) {
|
|
36
|
+
:is(
|
|
37
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
38
|
+
[data-hraness-landscape="contained"]
|
|
39
|
+
)::before {
|
|
40
|
+
position: absolute;
|
|
41
|
+
inset: 0;
|
|
42
|
+
z-index: -1;
|
|
43
|
+
background: var(--_hraness-landscape-ink);
|
|
44
|
+
content: "";
|
|
45
|
+
opacity: var(--hraness-landscape-opacity, 0.5);
|
|
46
|
+
pointer-events: none;
|
|
47
|
+
-webkit-mask-image: var(--hraness-landscape-image, linear-gradient(transparent, transparent));
|
|
48
|
+
mask-image: var(--hraness-landscape-image, linear-gradient(transparent, transparent));
|
|
49
|
+
-webkit-mask-source-type: luminance;
|
|
50
|
+
mask-mode: luminance;
|
|
51
|
+
-webkit-mask-position: top center;
|
|
52
|
+
mask-position: top center;
|
|
53
|
+
-webkit-mask-repeat: repeat-y;
|
|
54
|
+
mask-repeat: repeat-y;
|
|
55
|
+
-webkit-mask-size: 100% auto;
|
|
56
|
+
mask-size: 100% auto;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@media (max-width: 48rem) {
|
|
60
|
+
:is(
|
|
61
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
62
|
+
[data-hraness-landscape="contained"]
|
|
63
|
+
)::before {
|
|
64
|
+
opacity: var(--hraness-landscape-opacity-narrow, 0.36);
|
|
65
|
+
-webkit-mask-image: var(--hraness-landscape-image-narrow, var(--hraness-landscape-image, linear-gradient(transparent, transparent)));
|
|
66
|
+
mask-image: var(--hraness-landscape-image-narrow, var(--hraness-landscape-image, linear-gradient(transparent, transparent)));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@media (forced-colors: active), print {
|
|
72
|
+
:is(
|
|
73
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
74
|
+
[data-hraness-landscape="contained"]
|
|
75
|
+
)::before {
|
|
76
|
+
display: none;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Page wrappers that repaint the page colour would hide the drawing behind a
|
|
81
|
+
* hard-edged slab. Over a landscape they let the identical body colour show. */
|
|
82
|
+
:is(
|
|
83
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
84
|
+
[data-hraness-landscape="contained"]
|
|
85
|
+
) :is(.hraness-marketing-page, .plain-site:not(body), .plain-footer, [data-hraness-landscape-surface="clear"]) {
|
|
86
|
+
background: transparent;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Reading surfaces stay opaque and gain rounded edges: code, tables, and any
|
|
90
|
+
* product element marked `data-hraness-landscape-surface="solid"`. */
|
|
91
|
+
:is(
|
|
92
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
93
|
+
[data-hraness-landscape="contained"]
|
|
94
|
+
) :is(.plain-publication__article-body pre, .plain-publication__table-scroll, [data-hraness-landscape-surface="solid"]) {
|
|
95
|
+
border-radius: var(--hraness-landscape-radius, 0.75rem);
|
|
96
|
+
background: var(--hraness-landscape-solid, var(--plain-surface, var(--hraness-marketing-surface, var(--background, Canvas))));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
:is(
|
|
100
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
101
|
+
[data-hraness-landscape="contained"]
|
|
102
|
+
) .plain-publication__article-body pre {
|
|
103
|
+
padding: 0.9rem 1.1rem;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
:is(
|
|
107
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
108
|
+
[data-hraness-landscape="contained"]
|
|
109
|
+
) .plain-publication__table-scroll {
|
|
110
|
+
border: 1px solid var(--plain-line, color-mix(in srgb, currentColor 14%, transparent));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Small cards and callouts become frosted panels over the drawing, using the
|
|
114
|
+
* sticky header's material. Without backdrop support, under reduced
|
|
115
|
+
* transparency, and in forced colours they keep their opaque surface. Keep the
|
|
116
|
+
* browser aliases in separate feature queries: CSS optimizers can collapse
|
|
117
|
+
* adjacent aliases to the prefixed property and lose Chromium blur. */
|
|
118
|
+
:is(
|
|
119
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
120
|
+
[data-hraness-landscape="contained"]
|
|
121
|
+
) :is(
|
|
122
|
+
.hraness-marketing-card,
|
|
123
|
+
.hraness-marketing-quote,
|
|
124
|
+
.hraness-marketing-plan,
|
|
125
|
+
.hraness-marketing-trust-item,
|
|
126
|
+
.hraness-marketing-interface,
|
|
127
|
+
.hraness-marketing-primitive,
|
|
128
|
+
.plain-publication__callout,
|
|
129
|
+
.plain-publication__social-kit-item,
|
|
130
|
+
[data-hraness-landscape-surface="glass"]
|
|
131
|
+
) {
|
|
132
|
+
--_hraness-landscape-glass-base: var(--hraness-landscape-glass, var(--hraness-marketing-surface, var(--plain-surface, var(--background, Canvas))));
|
|
133
|
+
background: var(--_hraness-landscape-glass-base);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
:is(
|
|
137
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
138
|
+
[data-hraness-landscape="contained"]
|
|
139
|
+
) [data-hraness-landscape-surface="glass"] {
|
|
140
|
+
border-radius: var(--hraness-landscape-radius, 0.75rem);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
@supports (-webkit-backdrop-filter: blur(1px)) {
|
|
144
|
+
:is(
|
|
145
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
146
|
+
[data-hraness-landscape="contained"]
|
|
147
|
+
) :is(
|
|
148
|
+
.hraness-marketing-card,
|
|
149
|
+
.hraness-marketing-quote,
|
|
150
|
+
.hraness-marketing-plan,
|
|
151
|
+
.hraness-marketing-trust-item,
|
|
152
|
+
.hraness-marketing-interface,
|
|
153
|
+
.hraness-marketing-primitive,
|
|
154
|
+
.plain-publication__callout,
|
|
155
|
+
.plain-publication__social-kit-item,
|
|
156
|
+
[data-hraness-landscape-surface="glass"]
|
|
157
|
+
) {
|
|
158
|
+
background: color-mix(in srgb, var(--_hraness-landscape-glass-base) 82%, transparent);
|
|
159
|
+
-webkit-backdrop-filter: blur(14px) saturate(1.4);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@supports (backdrop-filter: blur(1px)) {
|
|
164
|
+
:is(
|
|
165
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
166
|
+
[data-hraness-landscape="contained"]
|
|
167
|
+
) :is(
|
|
168
|
+
.hraness-marketing-card,
|
|
169
|
+
.hraness-marketing-quote,
|
|
170
|
+
.hraness-marketing-plan,
|
|
171
|
+
.hraness-marketing-trust-item,
|
|
172
|
+
.hraness-marketing-interface,
|
|
173
|
+
.hraness-marketing-primitive,
|
|
174
|
+
.plain-publication__callout,
|
|
175
|
+
.plain-publication__social-kit-item,
|
|
176
|
+
[data-hraness-landscape-surface="glass"]
|
|
177
|
+
) {
|
|
178
|
+
background: color-mix(in srgb, var(--_hraness-landscape-glass-base) 82%, transparent);
|
|
179
|
+
backdrop-filter: blur(14px) saturate(1.4);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@media (prefers-reduced-transparency: reduce), (forced-colors: active) {
|
|
184
|
+
:is(
|
|
185
|
+
body:is([data-hraness-landscape="page"], :has([data-hraness-landscape="page"])):not(:has([data-hraness-landscape="off"])),
|
|
186
|
+
[data-hraness-landscape="contained"]
|
|
187
|
+
) :is(
|
|
188
|
+
.hraness-marketing-card,
|
|
189
|
+
.hraness-marketing-quote,
|
|
190
|
+
.hraness-marketing-plan,
|
|
191
|
+
.hraness-marketing-trust-item,
|
|
192
|
+
.hraness-marketing-interface,
|
|
193
|
+
.hraness-marketing-primitive,
|
|
194
|
+
.plain-publication__callout,
|
|
195
|
+
.plain-publication__social-kit-item,
|
|
196
|
+
[data-hraness-landscape-surface="glass"]
|
|
197
|
+
) {
|
|
198
|
+
background: var(--_hraness-landscape-glass-base);
|
|
199
|
+
-webkit-backdrop-filter: none;
|
|
200
|
+
backdrop-filter: none;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -304,10 +304,14 @@
|
|
|
304
304
|
line-height: 1.5;
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
-
.hraness-marketing-interface pre {
|
|
307
|
+
.hraness-marketing-interface > :where(pre) {
|
|
308
308
|
margin-block-start: 0.5rem;
|
|
309
309
|
}
|
|
310
310
|
|
|
311
|
+
.hraness-marketing-interface :where(pre) {
|
|
312
|
+
font-size: 0.78rem;
|
|
313
|
+
}
|
|
314
|
+
|
|
311
315
|
.hraness-marketing-question__answer > :first-child {
|
|
312
316
|
margin-block-start: 0;
|
|
313
317
|
}
|
|
@@ -1081,7 +1081,7 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
1081
1081
|
display: flex;
|
|
1082
1082
|
align-items: center;
|
|
1083
1083
|
gap: 0.75rem;
|
|
1084
|
-
padding: 0.
|
|
1084
|
+
padding: 0.5rem 1rem;
|
|
1085
1085
|
background-image: var(--hraness-marketing-frame-chrome, none);
|
|
1086
1086
|
box-shadow: var(--hraness-marketing-chrome-shadow);
|
|
1087
1087
|
border-block-end: var(--hraness-marketing-chrome-rule);
|
|
@@ -1641,10 +1641,8 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
1641
1641
|
|
|
1642
1642
|
.hraness-marketing-interface,
|
|
1643
1643
|
.hraness-marketing-trust-item {
|
|
1644
|
-
display: grid;
|
|
1645
1644
|
min-inline-size: 0;
|
|
1646
1645
|
min-block-size: 100%;
|
|
1647
|
-
align-content: start;
|
|
1648
1646
|
gap: 0.5rem;
|
|
1649
1647
|
padding: clamp(1.25rem, 2.5vw, 1.75rem);
|
|
1650
1648
|
border: var(--hraness-marketing-surface-rule);
|
|
@@ -1653,6 +1651,17 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
1653
1651
|
box-shadow: var(--hraness-marketing-surface-shadow);
|
|
1654
1652
|
}
|
|
1655
1653
|
|
|
1654
|
+
/* A vertical column lets the optional action pin to the foot of the card. */
|
|
1655
|
+
.hraness-marketing-interface {
|
|
1656
|
+
display: flex;
|
|
1657
|
+
flex-direction: column;
|
|
1658
|
+
}
|
|
1659
|
+
|
|
1660
|
+
.hraness-marketing-trust-item {
|
|
1661
|
+
display: grid;
|
|
1662
|
+
align-content: start;
|
|
1663
|
+
}
|
|
1664
|
+
|
|
1656
1665
|
.hraness-marketing-interface :where(.hraness-marketing-interface__heading, p),
|
|
1657
1666
|
.hraness-marketing-trust-item :where(dt, dd) {
|
|
1658
1667
|
margin: 0;
|
|
@@ -1672,10 +1681,42 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
1672
1681
|
line-height: 1.5;
|
|
1673
1682
|
}
|
|
1674
1683
|
|
|
1675
|
-
.
|
|
1684
|
+
/* The card's reference link sits at the foot, quiet and end-aligned. */
|
|
1685
|
+
.hraness-marketing-interface .hraness-marketing-interface__action {
|
|
1686
|
+
margin-block-start: auto;
|
|
1687
|
+
font-size: 0.85rem;
|
|
1688
|
+
text-align: end;
|
|
1689
|
+
}
|
|
1690
|
+
|
|
1691
|
+
.hraness-marketing-interface__link {
|
|
1692
|
+
color: var(--hraness-marketing-muted);
|
|
1693
|
+
text-decoration-line: underline;
|
|
1694
|
+
text-decoration-style: dotted;
|
|
1695
|
+
text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
|
|
1696
|
+
text-decoration-thickness: 1px;
|
|
1697
|
+
text-underline-offset: 0.18em;
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1700
|
+
.hraness-marketing-interface__link:hover,
|
|
1701
|
+
.hraness-marketing-interface__link:focus-visible {
|
|
1702
|
+
color: var(--hraness-marketing-ink);
|
|
1703
|
+
text-decoration-color: currentColor;
|
|
1704
|
+
}
|
|
1705
|
+
|
|
1706
|
+
@media (forced-colors: active) {
|
|
1707
|
+
.hraness-marketing-interface__link {
|
|
1708
|
+
color: LinkText;
|
|
1709
|
+
}
|
|
1710
|
+
}
|
|
1711
|
+
|
|
1712
|
+
.hraness-marketing-interface > :where(pre) {
|
|
1676
1713
|
margin-block-start: 0.5rem;
|
|
1677
1714
|
}
|
|
1678
1715
|
|
|
1716
|
+
.hraness-marketing-interface :where(pre) {
|
|
1717
|
+
font-size: 0.78rem;
|
|
1718
|
+
}
|
|
1719
|
+
|
|
1679
1720
|
/* Equal-height product card rows. Direct children stretch to the tallest
|
|
1680
1721
|
* item. Meta occupies a reserved two-line block so one long blurb does not
|
|
1681
1722
|
* stagger the row. Titles wrap without clamping. Each card is a containing
|
|
@@ -2009,6 +2050,7 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
2009
2050
|
justify-content: space-between;
|
|
2010
2051
|
gap: 1rem;
|
|
2011
2052
|
padding-block: 1rem;
|
|
2053
|
+
padding-inline: var(--hraness-marketing-question-inline-inset, 1.25rem);
|
|
2012
2054
|
color: var(--hraness-marketing-ink);
|
|
2013
2055
|
cursor: pointer;
|
|
2014
2056
|
font-size: 1.05rem;
|
|
@@ -2027,10 +2069,11 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
2027
2069
|
font-size: 1.25rem;
|
|
2028
2070
|
font-weight: 400;
|
|
2029
2071
|
line-height: 1;
|
|
2072
|
+
transition: transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2030
2073
|
}
|
|
2031
2074
|
|
|
2032
2075
|
.hraness-marketing-question[open] summary::after {
|
|
2033
|
-
transform: rotate(
|
|
2076
|
+
transform: rotate(135deg);
|
|
2034
2077
|
}
|
|
2035
2078
|
|
|
2036
2079
|
.hraness-marketing-question summary:focus-visible {
|
|
@@ -2042,6 +2085,7 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
2042
2085
|
.hraness-marketing-question__answer {
|
|
2043
2086
|
max-inline-size: var(--hraness-marketing-prose-measure);
|
|
2044
2087
|
padding-block: 0 1.5rem;
|
|
2088
|
+
padding-inline: var(--hraness-marketing-question-inline-inset, 1.25rem);
|
|
2045
2089
|
color: var(--hraness-marketing-muted);
|
|
2046
2090
|
line-height: 1.6;
|
|
2047
2091
|
}
|
|
@@ -2259,6 +2303,12 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
2259
2303
|
}
|
|
2260
2304
|
}
|
|
2261
2305
|
|
|
2306
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2307
|
+
.hraness-marketing-question summary::after {
|
|
2308
|
+
transition: none;
|
|
2309
|
+
}
|
|
2310
|
+
}
|
|
2311
|
+
|
|
2262
2312
|
@media (forced-colors: active) {
|
|
2263
2313
|
.hraness-marketing-plan[data-emphasis="primary"] {
|
|
2264
2314
|
border-color: CanvasText;
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
WrappingRow,
|
|
22
22
|
} from "@hraness/ui";
|
|
23
23
|
import { Chart01Icon, CodeIcon, DashboardSquare01Icon } from "@hugeicons/core-free-icons";
|
|
24
|
-
import { useState } from "react";
|
|
24
|
+
import { type CSSProperties, useState } from "react";
|
|
25
25
|
|
|
26
26
|
import { BrowserFrame, SampleText } from "../mockups/index.js";
|
|
27
27
|
import { StepThrough } from "../mockups/client.js";
|
|
@@ -512,8 +512,8 @@ export function DesignSystemGallery({
|
|
|
512
512
|
<p>Consumer-owned content can include <a href="#gallery-install">links</a> and <code>inline code</code>.</p>
|
|
513
513
|
</MarketingSection>
|
|
514
514
|
<MarketingInterfaceGrid columns={2} heading="Choose your interface." headingId="gallery-marketing-interfaces" headingLevel={3} label="Interfaces" interfaces={[
|
|
515
|
-
{ label: "CLI", summary: "Run a named job.", example: <MarketingCodeBlock code="relay run job-01"
|
|
516
|
-
{ label: "SDK", summary: "Use typed application code." },
|
|
515
|
+
{ label: "CLI", summary: "Run a named job.", example: <MarketingCodeBlock code="relay run job-01" />, link: { href: "#gallery-install", label: "Read the CLI guide" } },
|
|
516
|
+
{ label: "SDK", summary: "Use typed application code.", link: { href: "#gallery-install", label: "Read the SDK guide" } },
|
|
517
517
|
]} />
|
|
518
518
|
<MarketingCardRow ariaLabel="Release radar" columns={2} cards={[
|
|
519
519
|
{ art: <svg aria-hidden="true" viewBox="0 0 24 24" width="24" height="24"><circle cx="12" cy="12" r="8" /></svg>, href: "#marketing", title: "Grok 4.7", meta: "First observed 21 September 2026." },
|
|
@@ -1062,6 +1062,21 @@ export function DesignSystemGallery({
|
|
|
1062
1062
|
<p>Decorative paint is pointer-transparent and removable in forced colors. Marketing actions use system button colors so their labels stay readable.</p>
|
|
1063
1063
|
</div>
|
|
1064
1064
|
</div>
|
|
1065
|
+
<div
|
|
1066
|
+
className="design-gallery__landscape"
|
|
1067
|
+
data-hraness-landscape="contained"
|
|
1068
|
+
style={{
|
|
1069
|
+
"--hraness-landscape-image":
|
|
1070
|
+
"url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 300'%3E%3Crect width='400' height='300'/%3E%3Cg fill='none' stroke='white' stroke-width='1.5'%3E%3Cpath d='M0 240 L40 190 L70 215 L110 150 L150 205 L170 185'/%3E%3Cpath d='M230 185 L260 150 L300 200 L340 140 L370 180 L400 160'/%3E%3Cpath d='M20 270 C60 250 100 262 150 250'/%3E%3Cpath d='M250 252 C300 262 340 248 390 262'/%3E%3Ccircle cx='340' cy='60' r='16'/%3E%3C/g%3E%3C/svg%3E\")",
|
|
1071
|
+
} as CSSProperties}
|
|
1072
|
+
>
|
|
1073
|
+
<div className="design-gallery__landscape-copy">
|
|
1074
|
+
<h3>Product landscape</h3>
|
|
1075
|
+
<p>One product drawing, tinted from the palette and tiled down the page. Code and tables stay solid with rounded edges; small cards and callouts frost over it.</p>
|
|
1076
|
+
</div>
|
|
1077
|
+
<pre className="design-gallery__landscape-code" data-hraness-landscape-surface="solid"><code>relay run job-01</code></pre>
|
|
1078
|
+
<p className="design-gallery__landscape-note" data-hraness-landscape-surface="glass">The log is written next to the job.</p>
|
|
1079
|
+
</div>
|
|
1065
1080
|
</section>
|
|
1066
1081
|
|
|
1067
1082
|
<section className="design-gallery__section" id="syntax">
|
|
@@ -1195,7 +1195,7 @@ export const marketingStyles = stylex.create({
|
|
|
1195
1195
|
"display": "flex",
|
|
1196
1196
|
"align-items": "center",
|
|
1197
1197
|
"gap": "0.75rem",
|
|
1198
|
-
"padding": "0.
|
|
1198
|
+
"padding": "0.5rem 1rem",
|
|
1199
1199
|
"background-image": { default: "var(--hraness-marketing-frame-chrome, none)", "@media (forced-colors: active)": "none" },
|
|
1200
1200
|
"box-shadow": { default: "var(--hraness-marketing-chrome-shadow)", "@media (forced-colors: active)": "none" },
|
|
1201
1201
|
"border-block-end": { "default": "var(--hraness-marketing-chrome-rule)", "@media (forced-colors: active)": "1px solid CanvasText" },
|
|
@@ -2216,10 +2216,10 @@ export const marketingStyles = stylex.create({
|
|
|
2216
2216
|
"grid-template-columns": "repeat(auto-fit, minmax(min(100%, var(--_hraness-marketing-grid-track, 16rem)), 1fr))"
|
|
2217
2217
|
},
|
|
2218
2218
|
"interface": {
|
|
2219
|
-
"display": "
|
|
2219
|
+
"display": "flex",
|
|
2220
|
+
"flex-direction": "column",
|
|
2220
2221
|
"min-inline-size": "0",
|
|
2221
2222
|
"min-block-size": "100%",
|
|
2222
|
-
"align-content": "start",
|
|
2223
2223
|
"gap": "0.5rem",
|
|
2224
2224
|
"padding": "clamp(1.25rem, 2.5vw, 1.75rem)",
|
|
2225
2225
|
"border-top": {
|
|
@@ -2395,6 +2395,28 @@ export const marketingStyles = stylex.create({
|
|
|
2395
2395
|
"font-size": "0.95rem",
|
|
2396
2396
|
"line-height": "1.5"
|
|
2397
2397
|
},
|
|
2398
|
+
"interface__action": {
|
|
2399
|
+
"margin-block-start": "auto",
|
|
2400
|
+
"font-size": "0.85rem",
|
|
2401
|
+
"text-align": "end"
|
|
2402
|
+
},
|
|
2403
|
+
"interface__link": {
|
|
2404
|
+
"color": {
|
|
2405
|
+
"default": "var(--hraness-marketing-muted)",
|
|
2406
|
+
":hover": "var(--hraness-marketing-ink)",
|
|
2407
|
+
":focus-visible": "var(--hraness-marketing-ink)",
|
|
2408
|
+
"@media (forced-colors: active)": "LinkText"
|
|
2409
|
+
},
|
|
2410
|
+
"text-decoration-line": "underline",
|
|
2411
|
+
"text-decoration-style": "dotted",
|
|
2412
|
+
"text-decoration-color": {
|
|
2413
|
+
"default": "color-mix(in srgb, currentColor 40%, transparent)",
|
|
2414
|
+
":hover": "currentColor",
|
|
2415
|
+
":focus-visible": "currentColor"
|
|
2416
|
+
},
|
|
2417
|
+
"text-decoration-thickness": "1px",
|
|
2418
|
+
"text-underline-offset": "0.18em"
|
|
2419
|
+
},
|
|
2398
2420
|
"trust_item__label": {
|
|
2399
2421
|
"margin": "0",
|
|
2400
2422
|
"font-size": "1.05rem",
|
|
@@ -3026,6 +3048,7 @@ export const marketingStyles = stylex.create({
|
|
|
3026
3048
|
"justify-content": "space-between",
|
|
3027
3049
|
"gap": "1rem",
|
|
3028
3050
|
"padding-block": "1rem",
|
|
3051
|
+
"padding-inline": "var(--hraness-marketing-question-inline-inset, 1.25rem)",
|
|
3029
3052
|
"color": "var(--hraness-marketing-ink)",
|
|
3030
3053
|
"cursor": "pointer",
|
|
3031
3054
|
"font-size": "1.05rem",
|
|
@@ -3041,15 +3064,22 @@ export const marketingStyles = stylex.create({
|
|
|
3041
3064
|
"font-size": "1.25rem",
|
|
3042
3065
|
"font-weight": "400",
|
|
3043
3066
|
"line-height": "1",
|
|
3067
|
+
"transition-duration": {
|
|
3068
|
+
"default": "240ms",
|
|
3069
|
+
"@media (prefers-reduced-motion: reduce)": "0ms"
|
|
3070
|
+
},
|
|
3071
|
+
"transition-property": "transform",
|
|
3072
|
+
"transition-timing-function": "cubic-bezier(0.16, 1, 0.3, 1)",
|
|
3044
3073
|
"transform": {
|
|
3045
3074
|
"default": null,
|
|
3046
|
-
[stylex.when.ancestor("[open]", questionMarker)]: "rotate(
|
|
3075
|
+
[stylex.when.ancestor("[open]", questionMarker)]: "rotate(135deg)"
|
|
3047
3076
|
}
|
|
3048
3077
|
}
|
|
3049
3078
|
},
|
|
3050
3079
|
"question__answer": {
|
|
3051
3080
|
"max-inline-size": "var(--hraness-marketing-prose-measure)",
|
|
3052
3081
|
"padding-block": "0 1.5rem",
|
|
3082
|
+
"padding-inline": "var(--hraness-marketing-question-inline-inset, 1.25rem)",
|
|
3053
3083
|
"color": "var(--hraness-marketing-muted)",
|
|
3054
3084
|
"line-height": "1.6"
|
|
3055
3085
|
},
|
|
@@ -4475,6 +4505,8 @@ const recipes = {
|
|
|
4475
4505
|
"hraness-marketing-trust-item": { "default": marketingStyles.trust_item },
|
|
4476
4506
|
"hraness-marketing-interface__heading": { "default": marketingStyles.interface__heading },
|
|
4477
4507
|
"hraness-marketing-interface__summary": { "default": marketingStyles.interface__summary },
|
|
4508
|
+
"hraness-marketing-interface__action": { "default": marketingStyles.interface__action },
|
|
4509
|
+
"hraness-marketing-interface__link": { "default": marketingStyles.interface__link },
|
|
4478
4510
|
"hraness-marketing-trust-item__label": { "default": marketingStyles.trust_item__label },
|
|
4479
4511
|
"hraness-marketing-trust-item__detail": { "default": marketingStyles.trust_item__detail },
|
|
4480
4512
|
"hraness-marketing-card-row": { "default": marketingStyles.card_row },
|