@hagicode/hagilight-docusaurus 0.10.1-dev.124.1.93cbe18 → 0.10.1-dev.125.1.c1264bb
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/client/promoto-markup.d.ts +1 -1
- package/dist/client/promoto-markup.js +1 -0
- package/dist/theme/Footer/FooterView.js +7 -1
- package/package.json +2 -2
- package/promoto.css +112 -3
- package/styles.css +224 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PROMOTO_SHELL_MARKUP = "\n <section class=\"hagilight-promoto__shell\" data-promoto-shell hidden aria-label=\"Featured promotion\">\n <div class=\"hagilight-promoto__viewport\">\n <div class=\"hagilight-promoto__track\" data-promoto-track></div>\n </div>\n <nav class=\"hagilight-promoto__controls\" data-promoto-controls aria-label=\"Promotion controls\" hidden>\n <button type=\"button\" class=\"hagilight-promoto__control\" data-promoto-previous aria-label=\"Previous promotion\">\n <svg class=\"hagilight-promoto__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 6l-6 6 6 6\" /></svg>\n </button>\n <span class=\"hagilight-promoto__count\" data-promoto-count aria-label=\"Promotion progress\"></span>\n <button type=\"button\" class=\"hagilight-promoto__control\" data-promoto-next aria-label=\"Next promotion\">\n <svg class=\"hagilight-promoto__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M9 6l6 6-6 6\" /></svg>\n </button>\n <button type=\"button\" class=\"hagilight-promoto__control\" data-promoto-pause aria-pressed=\"false\" aria-label=\"Pause automatic promotion rotation\">\n <svg class=\"hagilight-promoto__icon hagilight-promoto__icon--pause\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M9 6v12M15 6v12\" /></svg>\n <svg class=\"hagilight-promoto__icon hagilight-promoto__icon--play\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M8 5.5v13l11-6.5z\" /></svg>\n </button>\n </nav>\n <button type=\"button\" class=\"hagilight-promoto__dismiss\" data-promoto-dismiss aria-label=\"Dismiss promotion\">\n <svg class=\"hagilight-promoto__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6.5 6.5l11 11M17.5 6.5l-11 11\" /></svg>\n </button>\n <span class=\"hagilight-promoto__status\" data-promoto-status aria-live=\"polite\"></span>\n </section>\n";
|
|
1
|
+
export declare const PROMOTO_SHELL_MARKUP = "\n <section class=\"hagilight-promoto__shell\" data-promoto-shell hidden aria-label=\"Featured promotion\">\n <div class=\"hagilight-promoto__viewport\">\n <div class=\"hagilight-promoto__track\" data-promoto-track></div>\n </div>\n <nav class=\"hagilight-promoto__controls\" data-promoto-controls aria-label=\"Promotion controls\" hidden>\n <button type=\"button\" class=\"hagilight-promoto__control\" data-promoto-previous aria-label=\"Previous promotion\">\n <svg class=\"hagilight-promoto__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 6l-6 6 6 6\" /></svg>\n </button>\n <span class=\"hagilight-promoto__count\" data-promoto-count aria-label=\"Promotion progress\"></span>\n <button type=\"button\" class=\"hagilight-promoto__control\" data-promoto-next aria-label=\"Next promotion\">\n <svg class=\"hagilight-promoto__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M9 6l6 6-6 6\" /></svg>\n </button>\n <button type=\"button\" class=\"hagilight-promoto__control\" data-promoto-pause aria-pressed=\"false\" aria-label=\"Pause automatic promotion rotation\">\n <svg class=\"hagilight-promoto__icon hagilight-promoto__icon--pause\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M9 6v12M15 6v12\" /></svg>\n <svg class=\"hagilight-promoto__icon hagilight-promoto__icon--play\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M8 5.5v13l11-6.5z\" /></svg>\n </button>\n </nav>\n <button type=\"button\" class=\"hagilight-promoto__dismiss\" data-promoto-dismiss aria-label=\"Dismiss promotion\">\n <svg class=\"hagilight-promoto__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6.5 6.5l11 11M17.5 6.5l-11 11\" /></svg>\n </button>\n <span class=\"hagilight-promoto__progress\" data-promoto-progress aria-hidden=\"true\"></span>\n <span class=\"hagilight-promoto__status\" data-promoto-status aria-live=\"polite\"></span>\n </section>\n";
|
|
@@ -19,6 +19,7 @@ export const PROMOTO_SHELL_MARKUP = `
|
|
|
19
19
|
<button type="button" class="hagilight-promoto__dismiss" data-promoto-dismiss aria-label="Dismiss promotion">
|
|
20
20
|
<svg class="hagilight-promoto__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M6.5 6.5l11 11M17.5 6.5l-11 11" /></svg>
|
|
21
21
|
</button>
|
|
22
|
+
<span class="hagilight-promoto__progress" data-promoto-progress aria-hidden="true"></span>
|
|
22
23
|
<span class="hagilight-promoto__status" data-promoto-status aria-live="polite"></span>
|
|
23
24
|
</section>
|
|
24
25
|
`;
|
|
@@ -2,11 +2,17 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Fragment } from 'react';
|
|
3
3
|
import { siteLinkGaAttributes } from '@hagicode/hagilight-core/analytics-events';
|
|
4
4
|
import { buildInfoItems } from '@hagicode/hagilight-core/build-info';
|
|
5
|
+
import { pickFooterBrandLinks, resolveFooterBrand } from '@hagicode/hagilight-core/footer-brand';
|
|
5
6
|
function LinkSection({ heading, navLabel, links, tagged }) {
|
|
6
7
|
return (_jsxs("section", { children: [_jsx("h2", { children: heading }), _jsx("nav", { "aria-label": navLabel, children: _jsx("ul", { children: links.map((link) => (_jsx("li", { children: _jsx("a", { href: link.href, target: link.target, rel: link.rel, "aria-label": link.ariaLabel, ...(tagged ? siteLinkGaAttributes(link, 'footer') : {}), children: link.label }) }, link.id))) }) })] }));
|
|
7
8
|
}
|
|
9
|
+
function FooterBrand({ locale, links }) {
|
|
10
|
+
const brand = resolveFooterBrand(locale);
|
|
11
|
+
const { primary, secondary } = pickFooterBrandLinks(links);
|
|
12
|
+
return (_jsxs("section", { className: "hagilight-brand", lang: brand.locale, "aria-labelledby": "hagilight-brand-title", children: [_jsxs("div", { className: "hagilight-brand__lead", children: [_jsx("h2", { className: "hagilight-brand__headline", id: "hagilight-brand-title", children: brand.headline }), _jsxs("div", { className: "hagilight-brand__body", children: [_jsx("p", { className: "hagilight-brand__summary", children: brand.summary }), (primary || secondary) && (_jsxs("div", { className: "hagilight-brand__actions", children: [primary && (_jsxs("a", { className: "hagilight-brand__primary", href: primary.href, target: primary.target, rel: primary.rel, "aria-label": primary.ariaLabel, ...siteLinkGaAttributes(primary, 'footer_brand'), children: [_jsx("span", { children: primary.label }), _jsx("svg", { className: "hagilight-brand__arrow", viewBox: "0 0 16 16", width: "16", height: "16", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "M2.5 8h10M8.5 3.5 13 8l-4.5 4.5", fill: "none", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round" }) })] })), secondary && (_jsx("a", { className: "hagilight-brand__secondary", href: secondary.href, target: secondary.target, rel: secondary.rel, "aria-label": secondary.ariaLabel, ...siteLinkGaAttributes(secondary, 'footer_brand'), children: secondary.label }))] }))] })] }), _jsx("dl", { className: "hagilight-brand__pillars", children: brand.pillars.map((pillar, index) => (_jsxs("div", { className: "hagilight-brand__pillar", "data-pillar": pillar.id, style: { '--hagilight-brand-i': index }, children: [_jsx("dt", { children: pillar.label }), _jsx("dd", { children: pillar.description })] }, pillar.id))) })] }));
|
|
13
|
+
}
|
|
8
14
|
export function FooterView({ links, version, year, buildInfo }) {
|
|
9
15
|
const { labels } = links;
|
|
10
16
|
const buildItems = buildInfoItems(buildInfo);
|
|
11
|
-
return (_jsxs("footer", { className: "hagilight-footer", children: [_jsxs("div", { className: "hagilight-footer__sections", children: [links.relatedSites.length > 0 && (_jsxs("section", { children: [_jsx("h2", { children: labels.relatedSites }), _jsx("nav", { "aria-label": labels.navigation.relatedSites, children: _jsx("ul", { children: links.relatedSites.map((site) => (_jsx("li", { children: _jsx("a", { href: site.href, target: site.target, rel: site.rel, children: site.name }) }, site.id))) }) })] })), _jsx(LinkSection, { heading: labels.quickLinks, navLabel: labels.navigation.quickLinks, links: links.quick, tagged: true }), _jsx(LinkSection, { heading: labels.community, navLabel: labels.navigation.community, links: links.community, tagged: true })] }), links.filings.length > 0 && (_jsx("nav", { className: "hagilight-footer__filings", "aria-label": labels.navigation.filings, children: links.filings.map((link) => (_jsx("a", { href: link.href, target: link.target, rel: link.rel, "aria-label": link.ariaLabel, children: link.label }, link.id))) })), _jsxs("p", { className: "hagilight-footer__copyright", children: [_jsxs("span", { children: ["\u00A9 ", year, " HagiCode"] }), ' | ', _jsxs("span", { className: "hagilight-footer__attribution", children: ["Powered By hagilight-docusaurus@", version] }), buildItems.map((item) => (_jsxs(Fragment, { children: [' | ', _jsxs("span", { className: "hagilight-footer__build", "data-build-field": item.field, title: item.title, "data-build-commit": item.title, children: [item.label, ": ", item.datetime ? _jsx("time", { dateTime: item.datetime, children: item.text }) : item.text] })] }, item.field)))] })] }));
|
|
17
|
+
return (_jsxs("footer", { className: "hagilight-footer", children: [_jsx(FooterBrand, { locale: links.locale, links: links.quick }), _jsxs("div", { className: "hagilight-footer__sections", children: [links.relatedSites.length > 0 && (_jsxs("section", { children: [_jsx("h2", { children: labels.relatedSites }), _jsx("nav", { "aria-label": labels.navigation.relatedSites, children: _jsx("ul", { children: links.relatedSites.map((site) => (_jsx("li", { children: _jsx("a", { href: site.href, target: site.target, rel: site.rel, children: site.name }) }, site.id))) }) })] })), _jsx(LinkSection, { heading: labels.quickLinks, navLabel: labels.navigation.quickLinks, links: links.quick, tagged: true }), _jsx(LinkSection, { heading: labels.community, navLabel: labels.navigation.community, links: links.community, tagged: true })] }), links.filings.length > 0 && (_jsx("nav", { className: "hagilight-footer__filings", "aria-label": labels.navigation.filings, children: links.filings.map((link) => (_jsx("a", { href: link.href, target: link.target, rel: link.rel, "aria-label": link.ariaLabel, children: link.label }, link.id))) })), _jsxs("p", { className: "hagilight-footer__copyright", children: [_jsxs("span", { children: ["\u00A9 ", year, " HagiCode"] }), ' | ', _jsxs("span", { className: "hagilight-footer__attribution", children: ["Powered By hagilight-docusaurus@", version] }), buildItems.map((item) => (_jsxs(Fragment, { children: [' | ', _jsxs("span", { className: "hagilight-footer__build", "data-build-field": item.field, title: item.title, "data-build-commit": item.title, children: [item.label, ": ", item.datetime ? _jsx("time", { dateTime: item.datetime, children: item.text }) : item.text] })] }, item.field)))] })] }));
|
|
12
18
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hagicode/hagilight-docusaurus",
|
|
3
|
-
"version": "0.10.1-dev.
|
|
3
|
+
"version": "0.10.1-dev.125.1.c1264bb",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Docusaurus plugin for HagiCode site features: footer, analytics, promote card, locales, SEO, sitemap, robots.txt, and RSS",
|
|
6
6
|
"repository": {
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
],
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@docusaurus/types": "^3.9.2",
|
|
41
|
-
"@hagicode/hagilight-core": "0.10.1-dev.
|
|
41
|
+
"@hagicode/hagilight-core": "0.10.1-dev.125.1.c1264bb"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@docusaurus/core": "^3.9.2",
|
package/promoto.css
CHANGED
|
@@ -12,9 +12,23 @@
|
|
|
12
12
|
--promoto-pad: 0.875rem;
|
|
13
13
|
--promoto-pager-width: calc(3 * var(--promoto-control-size) + 2.25rem + 0.375rem);
|
|
14
14
|
--promoto-muted: var(--ifm-color-emphasis-700);
|
|
15
|
+
/* Motion: a damped spring where linear() exists, a long ease-out elsewhere. */
|
|
16
|
+
--promoto-ease: cubic-bezier(0.22, 1, 0.36, 1);
|
|
17
|
+
--promoto-rotation: 8000ms;
|
|
18
|
+
--promoto-shift: 1rem;
|
|
15
19
|
display: block;
|
|
16
20
|
}
|
|
17
21
|
|
|
22
|
+
@supports (transition-timing-function: linear(0, 1)) {
|
|
23
|
+
.hagilight-promoto {
|
|
24
|
+
--promoto-ease: linear(0, 0.066, 0.22, 0.409, 0.597, 0.761, 0.89, 0.983, 1.042, 1.073, 1.083, 1.079, 1.067, 1.052, 1.036, 1.022, 1.011, 1.002, 0.997, 0.994, 0.993, 0.993, 1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.hagilight-promoto[data-dir='prev'] {
|
|
29
|
+
--promoto-shift: -1rem;
|
|
30
|
+
}
|
|
31
|
+
|
|
18
32
|
.hagilight-promoto[hidden],
|
|
19
33
|
.hagilight-promoto__shell[hidden],
|
|
20
34
|
.hagilight-promoto__controls[hidden] {
|
|
@@ -38,7 +52,18 @@
|
|
|
38
52
|
color: var(--ifm-font-color-base);
|
|
39
53
|
opacity: 1;
|
|
40
54
|
visibility: visible;
|
|
41
|
-
|
|
55
|
+
transform: none;
|
|
56
|
+
transition: opacity 0.24s ease, transform 0.62s var(--promoto-ease), visibility 0s linear;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* Rises into place on first render and whenever it returns from the footer or the page top. */
|
|
60
|
+
.hagilight-promoto[data-state='ready'] .hagilight-promoto__shell {
|
|
61
|
+
animation: hagilight-promoto-rise 0.62s var(--promoto-ease) backwards;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@keyframes hagilight-promoto-rise {
|
|
65
|
+
from { opacity: 0; transform: translateY(1.25rem) scale(0.97); }
|
|
66
|
+
to { opacity: 1; transform: none; }
|
|
42
67
|
}
|
|
43
68
|
|
|
44
69
|
.hagilight-promoto[data-state='footer-hidden'] .hagilight-promoto__shell,
|
|
@@ -46,7 +71,58 @@
|
|
|
46
71
|
opacity: 0;
|
|
47
72
|
visibility: hidden;
|
|
48
73
|
pointer-events: none;
|
|
49
|
-
|
|
74
|
+
transform: translateY(1.25rem) scale(0.97);
|
|
75
|
+
/* Leaving is quick and does not bounce. */
|
|
76
|
+
transition: opacity 0.2s ease, transform 0.24s ease-in, visibility 0s linear 0.24s;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* Time until the next card, drawn along the bottom edge; hovering the card or tabbing into it holds it. */
|
|
80
|
+
.hagilight-promoto__progress {
|
|
81
|
+
position: absolute;
|
|
82
|
+
inset-block-end: 0;
|
|
83
|
+
inset-inline: 0;
|
|
84
|
+
block-size: 2px;
|
|
85
|
+
background: var(--ifm-color-primary);
|
|
86
|
+
opacity: 0;
|
|
87
|
+
pointer-events: none;
|
|
88
|
+
transform: scaleX(0);
|
|
89
|
+
transform-origin: left center;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.hagilight-promoto__progress:dir(rtl) {
|
|
93
|
+
transform-origin: right center;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.hagilight-promoto[data-rotating] .hagilight-promoto__progress {
|
|
97
|
+
opacity: 0.55;
|
|
98
|
+
animation-duration: var(--promoto-rotation);
|
|
99
|
+
animation-timing-function: linear;
|
|
100
|
+
animation-fill-mode: forwards;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* Two names for one keyframe set: flipping between them restarts the fill without a forced reflow. */
|
|
104
|
+
.hagilight-promoto[data-rotating][data-tick='0'] .hagilight-promoto__progress {
|
|
105
|
+
animation-name: hagilight-promoto-fill-a;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.hagilight-promoto[data-rotating][data-tick='1'] .hagilight-promoto__progress {
|
|
109
|
+
animation-name: hagilight-promoto-fill-b;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.hagilight-promoto[data-paused] .hagilight-promoto__progress,
|
|
113
|
+
.hagilight-promoto__shell:hover .hagilight-promoto__progress,
|
|
114
|
+
.hagilight-promoto__shell:has(:focus-visible) .hagilight-promoto__progress {
|
|
115
|
+
animation-play-state: paused;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@keyframes hagilight-promoto-fill-a {
|
|
119
|
+
from { transform: scaleX(0); }
|
|
120
|
+
to { transform: scaleX(1); }
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@keyframes hagilight-promoto-fill-b {
|
|
124
|
+
from { transform: scaleX(0); }
|
|
125
|
+
to { transform: scaleX(1); }
|
|
50
126
|
}
|
|
51
127
|
|
|
52
128
|
.hagilight-promoto__viewport {
|
|
@@ -57,7 +133,30 @@
|
|
|
57
133
|
display: flex;
|
|
58
134
|
align-items: stretch;
|
|
59
135
|
width: 100%;
|
|
60
|
-
transition: transform 0.
|
|
136
|
+
transition: transform 0.5s var(--promoto-ease);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/*
|
|
140
|
+
* Content settles after the track: the card being left fades out at once, the card
|
|
141
|
+
* arriving lands copy, then the action, each a beat behind the last. Pushes toward
|
|
142
|
+
* the direction of travel (--promoto-shift flips for Previous).
|
|
143
|
+
*/
|
|
144
|
+
.hagilight-promoto__slide > * {
|
|
145
|
+
transition: opacity 0.32s ease, transform 0.55s var(--promoto-ease);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.hagilight-promoto__slide[aria-hidden='true'] > * {
|
|
149
|
+
opacity: 0;
|
|
150
|
+
transform: translateX(var(--promoto-shift));
|
|
151
|
+
transition-duration: 0.18s, 0.18s;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.hagilight-promoto__slide[aria-hidden='false'] > .hagilight-promoto__copy {
|
|
155
|
+
transition-delay: 0.08s;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.hagilight-promoto__slide[aria-hidden='false'] > .hagilight-promoto__cta {
|
|
159
|
+
transition-delay: 0.14s;
|
|
61
160
|
}
|
|
62
161
|
|
|
63
162
|
.hagilight-promoto__slide {
|
|
@@ -392,8 +491,18 @@
|
|
|
392
491
|
@media (prefers-reduced-motion: reduce) {
|
|
393
492
|
.hagilight-promoto__shell,
|
|
394
493
|
.hagilight-promoto__track,
|
|
494
|
+
.hagilight-promoto__slide > *,
|
|
395
495
|
.hagilight-promoto__dismiss,
|
|
396
496
|
.hagilight-promoto__control {
|
|
397
497
|
transition: none;
|
|
398
498
|
}
|
|
499
|
+
|
|
500
|
+
.hagilight-promoto__shell {
|
|
501
|
+
transform: none !important;
|
|
502
|
+
animation: none !important;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
.hagilight-promoto__progress {
|
|
506
|
+
display: none;
|
|
507
|
+
}
|
|
399
508
|
}
|
package/styles.css
CHANGED
|
@@ -85,3 +85,227 @@
|
|
|
85
85
|
gap: 0.75rem 1rem;
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
+
|
|
89
|
+
/* Product statement: headline, summary, calls to action, and the three pillars. */
|
|
90
|
+
.hagilight-footer .hagilight-brand {
|
|
91
|
+
--_heading: var(--ifm-heading-color, currentColor);
|
|
92
|
+
--_muted: var(--hagilight-footer-muted, var(--ifm-color-emphasis-700, color-mix(in srgb, currentColor 72%, transparent)));
|
|
93
|
+
--_rule: var(--hagilight-footer-border, var(--ifm-color-emphasis-300));
|
|
94
|
+
container: hagilight-brand / inline-size;
|
|
95
|
+
display: grid;
|
|
96
|
+
gap: 2.25rem;
|
|
97
|
+
margin: 0 auto 2rem;
|
|
98
|
+
max-width: 72rem;
|
|
99
|
+
padding-block: 1rem 2.25rem;
|
|
100
|
+
border-bottom: 1px solid var(--_rule);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* Korean breaks between words, not inside them. */
|
|
104
|
+
.hagilight-footer .hagilight-brand:lang(ko) {
|
|
105
|
+
overflow-wrap: break-word;
|
|
106
|
+
word-break: keep-all;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.hagilight-footer .hagilight-brand__lead {
|
|
110
|
+
display: grid;
|
|
111
|
+
grid-template-columns: minmax(0, 1fr);
|
|
112
|
+
gap: 1.5rem 3.5rem;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.hagilight-footer .hagilight-brand__headline {
|
|
116
|
+
margin: 0;
|
|
117
|
+
color: var(--_heading);
|
|
118
|
+
font-size: clamp(1.75rem, 1.1rem + 2.6vw, 3rem);
|
|
119
|
+
font-size: clamp(1.75rem, 1rem + 3.2cqi, 3rem);
|
|
120
|
+
font-weight: 700;
|
|
121
|
+
letter-spacing: -0.02em;
|
|
122
|
+
line-height: 1.12;
|
|
123
|
+
text-wrap: balance;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.hagilight-footer .hagilight-brand__headline:lang(zh),
|
|
127
|
+
.hagilight-footer .hagilight-brand__headline:lang(ja),
|
|
128
|
+
.hagilight-footer .hagilight-brand__headline:lang(ko) {
|
|
129
|
+
letter-spacing: 0;
|
|
130
|
+
line-height: 1.25;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.hagilight-footer .hagilight-brand__body {
|
|
134
|
+
display: grid;
|
|
135
|
+
gap: 1.25rem;
|
|
136
|
+
justify-items: start;
|
|
137
|
+
min-width: 0;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.hagilight-footer .hagilight-brand__summary {
|
|
141
|
+
margin: 0;
|
|
142
|
+
max-width: 62ch;
|
|
143
|
+
color: var(--_muted);
|
|
144
|
+
font-size: 1rem;
|
|
145
|
+
line-height: 1.65;
|
|
146
|
+
text-wrap: pretty;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.hagilight-footer .hagilight-brand__actions {
|
|
150
|
+
display: flex;
|
|
151
|
+
flex-wrap: wrap;
|
|
152
|
+
align-items: center;
|
|
153
|
+
gap: 0.25rem 1.5rem;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.hagilight-footer .hagilight-brand__primary,
|
|
157
|
+
.hagilight-footer .hagilight-brand__secondary {
|
|
158
|
+
display: inline-flex;
|
|
159
|
+
align-items: center;
|
|
160
|
+
min-height: 2.75rem;
|
|
161
|
+
color: var(--_heading);
|
|
162
|
+
text-decoration: none;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.hagilight-footer .hagilight-brand__primary {
|
|
166
|
+
gap: 0.6rem;
|
|
167
|
+
border: 2px solid currentColor;
|
|
168
|
+
border-radius: 0.5rem;
|
|
169
|
+
padding-inline: 1.1rem;
|
|
170
|
+
font-weight: 650;
|
|
171
|
+
transition: background-color 180ms ease-out;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.hagilight-footer .hagilight-brand__primary:hover {
|
|
175
|
+
background-color: color-mix(in srgb, currentColor 10%, transparent);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.hagilight-footer .hagilight-brand__arrow {
|
|
179
|
+
flex: none;
|
|
180
|
+
transition: transform 280ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.hagilight-footer .hagilight-brand__primary:hover .hagilight-brand__arrow,
|
|
184
|
+
.hagilight-footer .hagilight-brand__primary:focus-visible .hagilight-brand__arrow {
|
|
185
|
+
transform: translateX(0.3rem);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.hagilight-footer .hagilight-brand__secondary {
|
|
189
|
+
text-decoration: underline;
|
|
190
|
+
text-decoration-thickness: 1px;
|
|
191
|
+
text-underline-offset: 0.3em;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.hagilight-footer .hagilight-brand__secondary:hover {
|
|
195
|
+
text-decoration-thickness: 2px;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.hagilight-footer .hagilight-brand a:focus-visible {
|
|
199
|
+
border-radius: 0.25rem;
|
|
200
|
+
outline: 2px solid currentColor;
|
|
201
|
+
outline-offset: 0.25rem;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.hagilight-footer .hagilight-brand__pillars {
|
|
205
|
+
display: grid;
|
|
206
|
+
grid-template-columns: minmax(0, 1fr);
|
|
207
|
+
gap: 1.25rem;
|
|
208
|
+
margin: 0;
|
|
209
|
+
padding: 0;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.hagilight-footer .hagilight-brand__pillar {
|
|
213
|
+
position: relative;
|
|
214
|
+
margin: 0;
|
|
215
|
+
padding-top: 1rem;
|
|
216
|
+
border-top: 1px solid var(--_rule);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* The heavy rule that the scroll-driven reveal draws over the hairline track. */
|
|
220
|
+
.hagilight-footer .hagilight-brand__pillar::before {
|
|
221
|
+
content: '';
|
|
222
|
+
position: absolute;
|
|
223
|
+
inset: -1px 0 auto;
|
|
224
|
+
height: 2px;
|
|
225
|
+
background: var(--_heading);
|
|
226
|
+
transform-origin: left center;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.hagilight-footer .hagilight-brand__pillar dt {
|
|
230
|
+
margin: 0 0 0.4rem;
|
|
231
|
+
color: var(--_heading);
|
|
232
|
+
font-size: 1.05rem;
|
|
233
|
+
font-weight: 650;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.hagilight-footer .hagilight-brand__pillar dd {
|
|
237
|
+
margin: 0;
|
|
238
|
+
max-width: none;
|
|
239
|
+
color: var(--_muted);
|
|
240
|
+
font-size: 0.9rem;
|
|
241
|
+
line-height: 1.6;
|
|
242
|
+
text-wrap: pretty;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/* Breakpoints follow the width the footer is given, not the viewport: Starlight's content pane is narrow. */
|
|
246
|
+
@container hagilight-brand (min-width: 40rem) {
|
|
247
|
+
.hagilight-footer .hagilight-brand__pillars {
|
|
248
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
249
|
+
gap: 1.5rem 2.5rem;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.hagilight-footer .hagilight-brand__pillar dd {
|
|
253
|
+
max-width: 34ch;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
@container hagilight-brand (min-width: 52rem) {
|
|
258
|
+
.hagilight-footer .hagilight-brand__lead {
|
|
259
|
+
grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
|
|
260
|
+
align-items: end;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/*
|
|
265
|
+
* The one authored moment: as the footer scrolls into view the headline is uncovered from
|
|
266
|
+
* its baseline and the three pillar rules draw in left to right, one after another.
|
|
267
|
+
* Without scroll-driven animation, or with reduced motion, everything is simply shown.
|
|
268
|
+
*/
|
|
269
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
270
|
+
@supports (animation-timeline: view()) {
|
|
271
|
+
.hagilight-footer .hagilight-brand__headline {
|
|
272
|
+
animation-name: hagilight-brand-uncover;
|
|
273
|
+
animation-timing-function: linear;
|
|
274
|
+
animation-fill-mode: both;
|
|
275
|
+
animation-timeline: view();
|
|
276
|
+
animation-range: entry 0% entry 80%;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.hagilight-footer .hagilight-brand__pillar::before {
|
|
280
|
+
animation-name: hagilight-brand-draw;
|
|
281
|
+
animation-timing-function: linear;
|
|
282
|
+
animation-fill-mode: both;
|
|
283
|
+
animation-timeline: view();
|
|
284
|
+
animation-range:
|
|
285
|
+
entry calc(10% + var(--hagilight-brand-i, 0) * 14%)
|
|
286
|
+
entry calc(70% + var(--hagilight-brand-i, 0) * 14%);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
@keyframes hagilight-brand-uncover {
|
|
292
|
+
from {
|
|
293
|
+
clip-path: inset(0 0 100% 0);
|
|
294
|
+
transform: translateY(0.4em);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
to {
|
|
298
|
+
clip-path: inset(0 0 -0.2em 0);
|
|
299
|
+
transform: none;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
@keyframes hagilight-brand-draw {
|
|
304
|
+
from {
|
|
305
|
+
transform: scaleX(0);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
to {
|
|
309
|
+
transform: scaleX(1);
|
|
310
|
+
}
|
|
311
|
+
}
|