@fluid-theme/core 0.4.3 → 2.0.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 +543 -2
- package/CLAUDE.md +193 -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.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-newsreader.txt +93 -0
- package/dist/fonts/OFL-schibsted-grotesk.txt +93 -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 +29 -3
- 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/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
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fluid Framework - Themed Images
|
|
3
|
-
* @layer components
|
|
4
|
-
*
|
|
5
|
-
* Apply theme-aware duotone filters to images sitewide.
|
|
6
|
-
* Uses CSS filters and pseudo-element overlays for the effect.
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* <figure class="themed-image">
|
|
10
|
-
* <img src="..." alt="...">
|
|
11
|
-
* </figure>
|
|
12
|
-
*
|
|
13
|
-
* Or apply to card images:
|
|
14
|
-
* <div class="card" data-themed-image>
|
|
15
|
-
* <img src="..." alt="...">
|
|
16
|
-
* </div>
|
|
17
|
-
*
|
|
18
|
-
* Disable with data-no-duotone attribute.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
@layer components {
|
|
22
|
-
/* ========================================
|
|
23
|
-
THEMED IMAGE CONTAINER
|
|
24
|
-
Applies duotone effect via overlay
|
|
25
|
-
======================================== */
|
|
26
|
-
|
|
27
|
-
.themed-image,
|
|
28
|
-
[data-themed-image] {
|
|
29
|
-
position: relative;
|
|
30
|
-
overflow: hidden;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.themed-image img,
|
|
34
|
-
[data-themed-image] img {
|
|
35
|
-
display: block;
|
|
36
|
-
inline-size: 100%;
|
|
37
|
-
block-size: auto;
|
|
38
|
-
/* Convert to grayscale as base for duotone */
|
|
39
|
-
filter: grayscale(100%) contrast(1.1);
|
|
40
|
-
transition: filter var(--duration-normal) var(--ease-fluid);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/* Duotone overlay using gradient */
|
|
44
|
-
.themed-image::after,
|
|
45
|
-
[data-themed-image]::after {
|
|
46
|
-
content: "";
|
|
47
|
-
position: absolute;
|
|
48
|
-
inset: 0;
|
|
49
|
-
background: linear-gradient(
|
|
50
|
-
135deg,
|
|
51
|
-
var(--duotone-dark, oklch(0.3 0.1 220)) 0%,
|
|
52
|
-
var(--duotone-light, oklch(0.7 0.1 200)) 100%
|
|
53
|
-
);
|
|
54
|
-
mix-blend-mode: multiply;
|
|
55
|
-
opacity: 0.85;
|
|
56
|
-
pointer-events: none;
|
|
57
|
-
transition: opacity var(--duration-normal) var(--ease-fluid);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/* Hover: reduce effect to show more of original */
|
|
61
|
-
.themed-image:hover::after,
|
|
62
|
-
[data-themed-image]:hover::after {
|
|
63
|
-
opacity: 0.6;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.themed-image:hover img,
|
|
67
|
-
[data-themed-image]:hover img {
|
|
68
|
-
filter: grayscale(50%) contrast(1.05);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/* Disable duotone */
|
|
72
|
-
[data-no-duotone] img {
|
|
73
|
-
filter: none !important;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
[data-no-duotone]::after {
|
|
77
|
-
display: none !important;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
/* ========================================
|
|
82
|
-
SITEWIDE IMAGE THEMING
|
|
83
|
-
Auto-apply to images in certain contexts
|
|
84
|
-
======================================== */
|
|
85
|
-
|
|
86
|
-
/* Apply to images in cards (opt-in) */
|
|
87
|
-
.card[data-themed-image] .card__image {
|
|
88
|
-
position: relative;
|
|
89
|
-
overflow: hidden;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.card[data-themed-image] .card__image img {
|
|
93
|
-
filter: grayscale(100%) contrast(1.1);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.card[data-themed-image] .card__image::after {
|
|
97
|
-
content: "";
|
|
98
|
-
position: absolute;
|
|
99
|
-
inset: 0;
|
|
100
|
-
background: linear-gradient(
|
|
101
|
-
135deg,
|
|
102
|
-
var(--duotone-dark) 0%,
|
|
103
|
-
var(--duotone-light) 100%
|
|
104
|
-
);
|
|
105
|
-
mix-blend-mode: multiply;
|
|
106
|
-
opacity: 0.85;
|
|
107
|
-
pointer-events: none;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
/* ========================================
|
|
112
|
-
HERO IMAGE THEMING
|
|
113
|
-
For hero sections with background images
|
|
114
|
-
======================================== */
|
|
115
|
-
|
|
116
|
-
.hero[data-themed-image] {
|
|
117
|
-
position: relative;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
.hero[data-themed-image]::before {
|
|
121
|
-
content: "";
|
|
122
|
-
position: absolute;
|
|
123
|
-
inset: 0;
|
|
124
|
-
background: linear-gradient(
|
|
125
|
-
135deg,
|
|
126
|
-
var(--duotone-dark) 0%,
|
|
127
|
-
var(--duotone-light) 100%
|
|
128
|
-
);
|
|
129
|
-
mix-blend-mode: multiply;
|
|
130
|
-
opacity: 0.75;
|
|
131
|
-
z-index: 1;
|
|
132
|
-
pointer-events: none;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.hero[data-themed-image] > * {
|
|
136
|
-
position: relative;
|
|
137
|
-
z-index: 2;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
/* ========================================
|
|
142
|
-
SECTION BACKGROUNDS
|
|
143
|
-
Alternating themed section colors
|
|
144
|
-
======================================== */
|
|
145
|
-
|
|
146
|
-
/* Tinted section background */
|
|
147
|
-
.section[data-bg="tinted"],
|
|
148
|
-
section[data-bg="tinted"] {
|
|
149
|
-
background-color: var(--surface-tinted, var(--section-2, var(--color-surface)));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/* Accent-tinted section */
|
|
153
|
-
.section[data-bg="accent"],
|
|
154
|
-
section[data-bg="accent"] {
|
|
155
|
-
background-color: var(--section-accent, var(--surface-accent, var(--accent-subtle)));
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/* Alternating sections (every other) */
|
|
159
|
-
.section[data-bg="alt"],
|
|
160
|
-
section[data-bg="alt"] {
|
|
161
|
-
background-color: var(--section-2, var(--section-alt, var(--color-surface)));
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/* Specific section color slots */
|
|
165
|
-
.section[data-bg="1"], section[data-bg="1"] { background-color: var(--section-1, var(--color-background)); }
|
|
166
|
-
.section[data-bg="2"], section[data-bg="2"] { background-color: var(--section-2, var(--color-surface)); }
|
|
167
|
-
.section[data-bg="3"], section[data-bg="3"] { background-color: var(--section-3, var(--surface-tinted)); }
|
|
168
|
-
|
|
169
|
-
/* Auto-alternating sections - 3-color rotation */
|
|
170
|
-
[data-alternating-sections] > .section:nth-child(3n+1),
|
|
171
|
-
[data-alternating-sections] > section:nth-child(3n+1) {
|
|
172
|
-
background-color: var(--section-1, var(--color-background));
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
[data-alternating-sections] > .section:nth-child(3n+2),
|
|
176
|
-
[data-alternating-sections] > section:nth-child(3n+2) {
|
|
177
|
-
background-color: var(--section-2, var(--color-surface));
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
[data-alternating-sections] > .section:nth-child(3n+3),
|
|
181
|
-
[data-alternating-sections] > section:nth-child(3n+3) {
|
|
182
|
-
background-color: var(--section-3, var(--surface-tinted));
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/* Simple 2-color alternation */
|
|
186
|
-
[data-alternating-sections="simple"] > .section:nth-child(odd),
|
|
187
|
-
[data-alternating-sections="simple"] > section:nth-child(odd) {
|
|
188
|
-
background-color: var(--section-1, var(--color-background));
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
[data-alternating-sections="simple"] > .section:nth-child(even),
|
|
192
|
-
[data-alternating-sections="simple"] > section:nth-child(even) {
|
|
193
|
-
background-color: var(--section-2, var(--color-surface));
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
/* ========================================
|
|
198
|
-
FULL-BLEED COLORED SECTIONS
|
|
199
|
-
Sections with strong theme presence
|
|
200
|
-
======================================== */
|
|
201
|
-
|
|
202
|
-
.section[data-bg="accent-solid"] {
|
|
203
|
-
background-color: var(--accent);
|
|
204
|
-
color: var(--white);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
.section[data-bg="accent-solid"] h1,
|
|
208
|
-
.section[data-bg="accent-solid"] h2,
|
|
209
|
-
.section[data-bg="accent-solid"] h3 {
|
|
210
|
-
color: var(--white);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
.section[data-bg="accent-solid"] a {
|
|
214
|
-
color: var(--white);
|
|
215
|
-
text-decoration: underline;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
.section[data-bg="accent-solid"] a:hover {
|
|
219
|
-
opacity: 0.8;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/* Accessibility: reduced motion */
|
|
223
|
-
@media (prefers-reduced-motion: reduce) {
|
|
224
|
-
[data-duotone] img,
|
|
225
|
-
[data-duotone]:hover img {
|
|
226
|
-
transition: none;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fluid Framework - Version Badge Component
|
|
3
|
-
* @layer components
|
|
4
|
-
*
|
|
5
|
-
* A small fixed-position badge showing the current version number.
|
|
6
|
-
* Subtle, semi-transparent, bottom-right corner.
|
|
7
|
-
*
|
|
8
|
-
* Toggled via data attribute on <html>:
|
|
9
|
-
* <html data-show-version="true"> — shows badge
|
|
10
|
-
* Default (no attribute) — hidden
|
|
11
|
-
*
|
|
12
|
-
* Usage:
|
|
13
|
-
* <span class="version-badge">v0.3.5</span>
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
@layer components {
|
|
17
|
-
|
|
18
|
-
.version-badge {
|
|
19
|
-
position: fixed;
|
|
20
|
-
inset-block-end: var(--space-3);
|
|
21
|
-
inset-inline-end: var(--space-3);
|
|
22
|
-
z-index: var(--z-sticky);
|
|
23
|
-
|
|
24
|
-
display: none;
|
|
25
|
-
align-items: center;
|
|
26
|
-
|
|
27
|
-
padding-block: var(--space-1);
|
|
28
|
-
padding-inline: var(--space-3);
|
|
29
|
-
border-radius: var(--radius-full);
|
|
30
|
-
|
|
31
|
-
font-size: var(--font-size-xs);
|
|
32
|
-
font-weight: var(--weight-medium, 500);
|
|
33
|
-
font-family: var(--font-mono);
|
|
34
|
-
line-height: 1;
|
|
35
|
-
letter-spacing: var(--tracking-wide);
|
|
36
|
-
|
|
37
|
-
color: var(--color-text-muted);
|
|
38
|
-
background-color: color-mix(in oklch, var(--color-surface) 85%, transparent);
|
|
39
|
-
border: var(--border-width) solid var(--color-border-subtle);
|
|
40
|
-
backdrop-filter: blur(8px);
|
|
41
|
-
|
|
42
|
-
opacity: 0.7;
|
|
43
|
-
transition: opacity var(--duration-fast) var(--ease-fluid);
|
|
44
|
-
pointer-events: none;
|
|
45
|
-
user-select: none;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/* Show when data attribute is set */
|
|
49
|
-
[data-show-version="true"] .version-badge {
|
|
50
|
-
display: flex;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.version-badge:hover {
|
|
54
|
-
opacity: 1;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/* Hide in print */
|
|
58
|
-
@media print {
|
|
59
|
-
.version-badge {
|
|
60
|
-
display: none;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/* Accessibility */
|
|
65
|
-
@media (prefers-reduced-motion: reduce) {
|
|
66
|
-
.version-badge {
|
|
67
|
-
transition: none;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|