@fluid-theme/core 0.4.3 → 2.1.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/AGENTS.md +6 -29
- package/CHANGELOG.md +564 -2
- package/CLAUDE.md +201 -14
- package/GEMINI.md +6 -45
- package/README.md +17 -8
- package/assets/js/compare.js +77 -0
- package/assets/js/fit-text.js +103 -0
- package/assets/js/lightbox.js +153 -0
- package/assets/js/scroll-reveal.js +72 -0
- package/assets/js/toc-build.mjs +86 -0
- package/assets/js/toc.js +384 -0
- package/dist/fluid-1x.min.css +4 -0
- package/dist/fluid-fonts-archivo.min.css +2 -0
- package/dist/fluid-fonts-bodoni.min.css +2 -0
- package/dist/fluid-fonts.min.css +2 -0
- package/dist/fluid-legacy-1x.css +3 -0
- package/dist/fluid-nav.min.css +3 -0
- package/dist/fluid-toc.min.css +3 -0
- package/dist/fluid-zero.min.css +3 -0
- package/dist/fluid.min.css +3 -2
- package/dist/fonts/OFL-archivo.txt +93 -0
- package/dist/fonts/OFL-bodoni-moda.txt +93 -0
- package/dist/fonts/OFL-hanken-grotesk.txt +93 -0
- package/dist/fonts/OFL-newsreader.txt +93 -0
- package/dist/fonts/OFL-schibsted-grotesk.txt +93 -0
- package/dist/fonts/archivo-latin-wdth-italic.woff2 +0 -0
- package/dist/fonts/archivo-latin-wdth-normal.woff2 +0 -0
- package/dist/fonts/bodoni-moda-latin-opsz-italic.woff2 +0 -0
- package/dist/fonts/bodoni-moda-latin-opsz-normal.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-latin-wght-italic.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-latin-wght-normal.woff2 +0 -0
- package/dist/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
- package/dist/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
- package/dist/fonts/schibsted-grotesk-latin-wght-italic.woff2 +0 -0
- package/dist/fonts/schibsted-grotesk-latin-wght-normal.woff2 +0 -0
- package/fluid-agent-kit/README.md +1 -0
- package/fluid-agent-kit/skills/accessibility.md +3 -1
- package/fluid-agent-kit/skills/css-conventions.md +22 -5
- package/fluid-agent-kit/skills/image-optimization.md +2 -0
- package/fluid-agent-kit/skills/preset-composition.md +108 -0
- package/package.json +36 -11
- package/src/animations/scroll-reveal.css +75 -193
- package/src/components/accordion.css +6 -47
- package/src/components/alert.css +47 -88
- package/src/components/avatar.css +4 -20
- package/src/components/badge.css +25 -48
- package/src/components/button.css +69 -175
- package/src/components/card.css +146 -481
- package/src/components/chip.css +46 -12
- package/src/components/compare.css +234 -0
- package/src/components/dropdown.css +10 -67
- package/src/components/empty-state.css +4 -0
- package/src/components/form.css +113 -81
- package/src/components/gallery.css +252 -0
- package/src/components/hero.css +203 -88
- package/src/components/indicator.css +23 -117
- package/src/components/loading.css +7 -29
- package/src/components/modal.css +12 -65
- package/src/components/nav-modes.css +261 -0
- package/src/components/nav.css +324 -392
- package/src/components/search-input.css +4 -2
- package/src/components/step-indicator.css +26 -27
- package/src/components/table.css +64 -171
- package/src/components/toc.css +254 -0
- package/src/components/tooltip.css +5 -46
- package/src/core/base.css +393 -547
- package/src/core/reset.css +17 -5
- package/src/core/tokens.css +426 -2276
- package/src/fluid.css +258 -17
- package/src/fonts/OFL-newsreader.txt +93 -0
- package/src/fonts/OFL-schibsted-grotesk.txt +93 -0
- package/src/fonts/fluid-fonts.css +55 -0
- package/src/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
- package/src/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
- package/src/fonts/schibsted-grotesk-latin-wght-italic.woff2 +0 -0
- package/src/fonts/schibsted-grotesk-latin-wght-normal.woff2 +0 -0
- package/src/layouts/positioning.css +6 -3
- package/src/legacy-1x.css +61 -0
- package/src/sections/cta.css +33 -101
- package/src/sections/features.css +42 -219
- package/src/sections/footer.css +53 -134
- package/src/sections/stats.css +40 -153
- package/src/sections/team.css +24 -113
- package/src/sections/testimonials.css +34 -148
- package/src/zero/base.css +166 -0
- package/src/zero/tokens.css +64 -0
- package/src/zero.css +20 -0
- package/starters/workflows/README.md +40 -0
- package/starters/workflows/dependabot.yml +21 -0
- package/starters/workflows/update-fluid-theme.yml +296 -0
- package/themes/fonts/OFL-archivo.txt +93 -0
- package/themes/fonts/OFL-bodoni-moda.txt +93 -0
- package/themes/fonts/OFL-hanken-grotesk.txt +93 -0
- package/themes/fonts/archivo-latin-wdth-italic.woff2 +0 -0
- package/themes/fonts/archivo-latin-wdth-normal.woff2 +0 -0
- package/themes/fonts/archivo.css +20 -0
- package/themes/fonts/bodoni-moda-latin-opsz-italic.woff2 +0 -0
- package/themes/fonts/bodoni-moda-latin-opsz-normal.woff2 +0 -0
- package/themes/fonts/bodoni.css +35 -0
- package/themes/fonts/hanken-grotesk-latin-wght-italic.woff2 +0 -0
- package/themes/fonts/hanken-grotesk-latin-wght-normal.woff2 +0 -0
- package/themes/gallery.css +105 -0
- package/themes/swiss.css +53 -0
- package/src/components/scroll-progress.css +0 -104
- package/src/components/settings-panel.css +0 -603
- package/src/components/themed-images.css +0 -229
- package/src/components/version-badge.css +0 -70
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* Bodoni Moda (opsz 6-96, wght 400-900) over Hanken Grotesk (wght 100-900),
|
|
2
|
+
latin, SIL OFL 1.1 (OFL-*.txt). The "gallery" pairing: spec
|
|
3
|
+
_docs/plans/base-v2.md §16. Italics load only when used. */
|
|
4
|
+
@font-face {
|
|
5
|
+
font-family: "Bodoni Moda Variable";
|
|
6
|
+
font-style: normal;
|
|
7
|
+
font-display: swap;
|
|
8
|
+
font-weight: 400 900;
|
|
9
|
+
src: url("./bodoni-moda-latin-opsz-normal.woff2") format("woff2-variations");
|
|
10
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
11
|
+
}
|
|
12
|
+
@font-face {
|
|
13
|
+
font-family: "Bodoni Moda Variable";
|
|
14
|
+
font-style: italic;
|
|
15
|
+
font-display: swap;
|
|
16
|
+
font-weight: 400 900;
|
|
17
|
+
src: url("./bodoni-moda-latin-opsz-italic.woff2") format("woff2-variations");
|
|
18
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
19
|
+
}
|
|
20
|
+
@font-face {
|
|
21
|
+
font-family: "Hanken Grotesk Variable";
|
|
22
|
+
font-style: normal;
|
|
23
|
+
font-display: swap;
|
|
24
|
+
font-weight: 100 900;
|
|
25
|
+
src: url("./hanken-grotesk-latin-wght-normal.woff2") format("woff2-variations");
|
|
26
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
27
|
+
}
|
|
28
|
+
@font-face {
|
|
29
|
+
font-family: "Hanken Grotesk Variable";
|
|
30
|
+
font-style: italic;
|
|
31
|
+
font-display: swap;
|
|
32
|
+
font-weight: 100 900;
|
|
33
|
+
src: url("./hanken-grotesk-latin-wght-italic.woff2") format("woff2-variations");
|
|
34
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
35
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/* "gallery": an alternate child theme on the Fluid base v2
|
|
2
|
+
(spec _docs/plans/base-v2.md §16). A Didone display over a quiet grotesk;
|
|
3
|
+
the images carry the colour, the accent is kept for actions. Fonts:
|
|
4
|
+
themes/fonts/bodoni.css (or dist/fluid-fonts-bodoni.min.css). Link after
|
|
5
|
+
the base: fluid.min.css, then this file. Dark mode adds 30 to heading
|
|
6
|
+
weights (base), but the lede's light weight (350) sits under Bodoni Moda's
|
|
7
|
+
400 floor, so it never reached the lede: the low-resolution rule at the end
|
|
8
|
+
sets it (680, a token). */
|
|
9
|
+
@layer reset, tokens, base, layouts, components, themes, utilities;
|
|
10
|
+
|
|
11
|
+
@layer themes {
|
|
12
|
+
:root {
|
|
13
|
+
--font-heading: "Bodoni Moda Variable", Didot, "Bodoni MT", "Noto Serif Display", P052, Georgia, serif;
|
|
14
|
+
--font-body: "Hanken Grotesk Variable", "Helvetica Neue", "Segoe UI Variable Text", "Segoe UI", Roboto, Arial, sans-serif;
|
|
15
|
+
--accent: oklch(46% 0.22 266); /* ultramarine (Klein); white on it ≈ 7.6:1 */
|
|
16
|
+
--neutral-tint: oklch(50% 0.006 85); /* gallery white: a breath of warmth so photos read true */
|
|
17
|
+
--display-max: 12rem;
|
|
18
|
+
--measure: 62ch;
|
|
19
|
+
--container-content: 90rem;
|
|
20
|
+
--space-section: clamp(5rem, 3rem + 8.889vi, 11rem); /* 80 → 176 */
|
|
21
|
+
--space-gutter: clamp(2.5rem, 0.667rem + 8.148vi, 8rem); /* both sides: 20 → 64px a side */
|
|
22
|
+
--toc-font: var(--font-body);
|
|
23
|
+
--toc-dock-font: var(--font-body);
|
|
24
|
+
/* Nav links tracked like the labels; on a narrow bar the base squeezes
|
|
25
|
+
the tracking down to the minimum before the links wrap. */
|
|
26
|
+
--nav-tracking: 0.12em;
|
|
27
|
+
--nav-tracking-min: 0.04em;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.eyebrow { color: var(--color-text-muted); } /* one label voice; the accent is kept for actions */
|
|
31
|
+
|
|
32
|
+
/* The label voice reaches the UI. */
|
|
33
|
+
:is(button, .button), :is(.nav__link, .nav__dropdown-link), .toc a {
|
|
34
|
+
font-size: var(--step--2);
|
|
35
|
+
font-weight: 600;
|
|
36
|
+
text-transform: uppercase;
|
|
37
|
+
}
|
|
38
|
+
:is(button, .button), .toc a { letter-spacing: 0.12em; } /* nav links: --nav-tracking above */
|
|
39
|
+
/* The compact nav's panel (fluid-nav.min.css) sets its links in the
|
|
40
|
+
reading size; this file's label size above would win over it. */
|
|
41
|
+
@supports selector(:popover-open) {
|
|
42
|
+
@container nav (max-width: 40rem) {
|
|
43
|
+
.nav[data-nav~="compact"] .nav__panel .nav__link { font-size: var(--step-1); }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
blockquote {
|
|
48
|
+
font: italic 400 var(--step-3) / 1.15 var(--font-display);
|
|
49
|
+
border: 0;
|
|
50
|
+
padding: 0;
|
|
51
|
+
text-indent: -0.42em;
|
|
52
|
+
}
|
|
53
|
+
/* The hanging open quote goes on the first paragraph, so it hangs in the
|
|
54
|
+
margin instead of standing on a line of its own; the testimonial adds
|
|
55
|
+
its own quote marks. */
|
|
56
|
+
blockquote:not(.testimonial__quote) > :first-child::before { content: "\201C"; }
|
|
57
|
+
|
|
58
|
+
.hero__headline, .display { line-height: 0.92; letter-spacing: -0.02em; }
|
|
59
|
+
/* Bodoni's long descender (~0.25em) hangs below a 0.92 line: room under it. */
|
|
60
|
+
.hero__headline, .display { padding-block-end: 0.12em; }
|
|
61
|
+
|
|
62
|
+
/* The dock's two rows differ by face and size, not only by position. */
|
|
63
|
+
.toc[data-toc-mode="dock"] .toc__fold > ol > li > a {
|
|
64
|
+
font: 400 var(--step-0) / 1.2 var(--font-display);
|
|
65
|
+
text-transform: none;
|
|
66
|
+
letter-spacing: 0;
|
|
67
|
+
}
|
|
68
|
+
figcaption { max-inline-size: 48ch; }
|
|
69
|
+
|
|
70
|
+
/* Bodoni Moda's display cut (opsz 72) loses its hairlines on 1x (non-Retina)
|
|
71
|
+
screens and at phone sizes: there, the font's own sturdier optical sizes
|
|
72
|
+
and heavier weights. Retina desktops keep the fine display cut. Neil,
|
|
73
|
+
2026-10-29, on a 27" 2560x1440 LED Cinema Display: two steps heavier than
|
|
74
|
+
the first fix ("err on the side of readable; a site can go lighter").
|
|
75
|
+
A site goes lighter by setting the two weights lower (floor 400). */
|
|
76
|
+
:root {
|
|
77
|
+
--gallery-lowres-weight: 650; /* headlines and section heads */
|
|
78
|
+
--gallery-lowres-lede-weight: 680; /* lede, pull quote, blockquote */
|
|
79
|
+
}
|
|
80
|
+
@media (max-resolution: 1.5dppx), (max-width: 40rem) {
|
|
81
|
+
:root { --weight-display: var(--gallery-lowres-weight); } /* h3 +100; +30 in dark */
|
|
82
|
+
.display, .hero__headline { font-variation-settings: "opsz" 14; }
|
|
83
|
+
h2, h3 { font-variation-settings: "opsz" 9; }
|
|
84
|
+
:is(.lede, .pullquote) {
|
|
85
|
+
font-weight: calc(var(--gallery-lowres-lede-weight) + var(--_dark-weight));
|
|
86
|
+
font-variation-settings: "opsz" 6;
|
|
87
|
+
}
|
|
88
|
+
blockquote {
|
|
89
|
+
font-weight: calc(var(--gallery-lowres-lede-weight) + var(--_dark-weight));
|
|
90
|
+
font-variation-settings: "opsz" 9;
|
|
91
|
+
}
|
|
92
|
+
/* The low optical sizes are spaced for small text: tighten them back
|
|
93
|
+
(Neil: "too much white space between the letters"). */
|
|
94
|
+
.display, .hero__headline { letter-spacing: -0.045em; }
|
|
95
|
+
h2 { letter-spacing: -0.035em; }
|
|
96
|
+
h3 { letter-spacing: -0.03em; }
|
|
97
|
+
:is(.lede, .pullquote), blockquote { letter-spacing: -0.03em; }
|
|
98
|
+
/* The wordmark set in the display face gets the same sturdier cut. */
|
|
99
|
+
.nav__brand {
|
|
100
|
+
font-weight: calc(var(--gallery-lowres-weight) + var(--_dark-weight));
|
|
101
|
+
font-variation-settings: "opsz" 9;
|
|
102
|
+
letter-spacing: -0.025em;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
package/themes/swiss.css
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/* "swiss": an alternate child theme on the Fluid base v2
|
|
2
|
+
(spec _docs/plans/base-v2.md §15). One grotesk family, a heavy display
|
|
3
|
+
over a light lede, an off-centre column with a start-side rail, ink
|
|
4
|
+
labels instead of accent eyebrows. Fonts: themes/fonts/archivo.css (or
|
|
5
|
+
dist/fluid-fonts-archivo.min.css). Link after the base: fluid.min.css,
|
|
6
|
+
then this file. */
|
|
7
|
+
@layer reset, tokens, base, layouts, components, themes, utilities;
|
|
8
|
+
|
|
9
|
+
@layer themes {
|
|
10
|
+
:root {
|
|
11
|
+
--font-heading: "Archivo Variable", "Helvetica Neue", "Nimbus Sans", Arial, sans-serif;
|
|
12
|
+
--font-body: var(--font-heading);
|
|
13
|
+
--accent: oklch(47% 0.21 264); /* ultramarine; white on it ≈ 6.8:1 */
|
|
14
|
+
--neutral-tint: oklch(50% 0.006 85);
|
|
15
|
+
--type-ratio: 1.5; /* h1 ≈ 5× body on desktop */
|
|
16
|
+
--weight-display: 760;
|
|
17
|
+
--display-max: 11rem;
|
|
18
|
+
--measure: 65ch;
|
|
19
|
+
--container-content: 90rem;
|
|
20
|
+
--space-section: clamp(4.5rem, 2.613rem + 8.387vi, 11rem); /* 72 → 176 */
|
|
21
|
+
--space-gutter: clamp(2.5rem, 0.9032rem + 7.097vi, 8rem); /* both sides: 20 → 64px a side */
|
|
22
|
+
--rail: 13rem; /* the column sits off-centre; the rail is free for labels */
|
|
23
|
+
--toc-marker: decimal-leading-zero;
|
|
24
|
+
--toc-dock-font: var(--font-body);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.display, .hero__headline {
|
|
28
|
+
line-height: 0.92;
|
|
29
|
+
letter-spacing: -0.045em;
|
|
30
|
+
font-variation-settings: "wdth" 92;
|
|
31
|
+
}
|
|
32
|
+
h1 { letter-spacing: -0.04em; }
|
|
33
|
+
h2 { font-weight: 700; letter-spacing: -0.03em; }
|
|
34
|
+
h3 { font-weight: 600; }
|
|
35
|
+
|
|
36
|
+
:is(.eyebrow, h5, h6, thead th, .toc__label) {
|
|
37
|
+
color: var(--color-text);
|
|
38
|
+
letter-spacing: 0.1em;
|
|
39
|
+
font-variation-settings: "wdth" 112;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.lede { font-family: var(--font-body); font-weight: 300; }
|
|
43
|
+
|
|
44
|
+
/* No italic in the display: emphasis by weight. */
|
|
45
|
+
blockquote, :is(h1, h2, h3, .display) em { font-style: normal; }
|
|
46
|
+
:is(h1, h2, h3, .display) em { font-weight: 400; }
|
|
47
|
+
|
|
48
|
+
.section__head { --section-rule: 3px; }
|
|
49
|
+
|
|
50
|
+
/* At ratio 1.5 step 4 is ~100px: heavy numerals that wide overrun a
|
|
51
|
+
four-column stats row, so they step down one. */
|
|
52
|
+
.stat__value { font-size: var(--step-3); }
|
|
53
|
+
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scroll Progress Indicator
|
|
3
|
-
*
|
|
4
|
-
* A thin bar showing page scroll position.
|
|
5
|
-
* Position and animation direction matches the motion style.
|
|
6
|
-
*
|
|
7
|
-
* Usage: Add {% include scroll-progress.html %} to your layout
|
|
8
|
-
*
|
|
9
|
-
* Data attributes:
|
|
10
|
-
* data-position="top" | "bottom" | "left" | "right"
|
|
11
|
-
* data-hidden - Hide the indicator
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
@layer components {
|
|
15
|
-
.scroll-progress {
|
|
16
|
-
--_progress: 0;
|
|
17
|
-
--_size: 3px;
|
|
18
|
-
|
|
19
|
-
position: fixed;
|
|
20
|
-
z-index: var(--z-sticky);
|
|
21
|
-
background-color: var(--accent);
|
|
22
|
-
pointer-events: none;
|
|
23
|
-
opacity: 0.8;
|
|
24
|
-
transition: opacity var(--duration-normal) var(--ease-fluid);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/* Hide when at top of page or when disabled */
|
|
28
|
-
.scroll-progress[data-hidden],
|
|
29
|
-
.scroll-progress[data-progress="0"] {
|
|
30
|
-
opacity: 0;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/* Top position (default) - horizontal bar */
|
|
34
|
-
.scroll-progress,
|
|
35
|
-
.scroll-progress[data-position="top"] {
|
|
36
|
-
inset-block-start: 0;
|
|
37
|
-
inset-inline-start: 0;
|
|
38
|
-
block-size: var(--_size);
|
|
39
|
-
inline-size: calc(var(--_progress) * 100%);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/* Bottom position - horizontal bar */
|
|
43
|
-
.scroll-progress[data-position="bottom"] {
|
|
44
|
-
inset-block-end: 0;
|
|
45
|
-
inset-block-start: auto;
|
|
46
|
-
inset-inline-start: 0;
|
|
47
|
-
block-size: var(--_size);
|
|
48
|
-
inline-size: calc(var(--_progress) * 100%);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/* Left position - vertical bar */
|
|
52
|
-
.scroll-progress[data-position="left"] {
|
|
53
|
-
inset-block-start: 0;
|
|
54
|
-
inset-inline-start: 0;
|
|
55
|
-
inline-size: var(--_size);
|
|
56
|
-
block-size: calc(var(--_progress) * 100%);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/* Right position - vertical bar */
|
|
60
|
-
.scroll-progress[data-position="right"] {
|
|
61
|
-
inset-block-start: 0;
|
|
62
|
-
inset-inline-end: 0;
|
|
63
|
-
inset-inline-start: auto;
|
|
64
|
-
inline-size: var(--_size);
|
|
65
|
-
block-size: calc(var(--_progress) * 100%);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/* Motion style adjustments */
|
|
69
|
-
/* Still: No progress bar by default */
|
|
70
|
-
[data-motion="still"] .scroll-progress {
|
|
71
|
-
display: none;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/* Serene/Stream: Very thin, subtle */
|
|
75
|
-
[data-motion="serene"] .scroll-progress,
|
|
76
|
-
[data-motion="stream"] .scroll-progress {
|
|
77
|
-
--_size: 2px;
|
|
78
|
-
opacity: 0.5;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/* Flowing: Standard */
|
|
82
|
-
[data-motion="flowing"] .scroll-progress {
|
|
83
|
-
--_size: 3px;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/* Cascade: Slightly thicker */
|
|
87
|
-
[data-motion="cascade"] .scroll-progress {
|
|
88
|
-
--_size: 4px;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/* Rapids/Tsunami: Bold */
|
|
92
|
-
[data-motion="rapids"] .scroll-progress,
|
|
93
|
-
[data-motion="tsunami"] .scroll-progress {
|
|
94
|
-
--_size: 5px;
|
|
95
|
-
opacity: 0.9;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/* Reduced motion: instant updates */
|
|
99
|
-
@media (prefers-reduced-motion: reduce) {
|
|
100
|
-
.scroll-progress {
|
|
101
|
-
transition: none;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|