@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.
Files changed (80) hide show
  1. package/AGENTS.md +6 -29
  2. package/CHANGELOG.md +543 -2
  3. package/CLAUDE.md +193 -14
  4. package/GEMINI.md +6 -45
  5. package/README.md +17 -8
  6. package/assets/js/compare.js +77 -0
  7. package/assets/js/fit-text.js +103 -0
  8. package/assets/js/lightbox.js +153 -0
  9. package/assets/js/scroll-reveal.js +72 -0
  10. package/assets/js/toc-build.mjs +86 -0
  11. package/assets/js/toc.js +384 -0
  12. package/dist/fluid-1x.min.css +4 -0
  13. package/dist/fluid-fonts.min.css +2 -0
  14. package/dist/fluid-legacy-1x.css +3 -0
  15. package/dist/fluid-nav.min.css +3 -0
  16. package/dist/fluid-toc.min.css +3 -0
  17. package/dist/fluid-zero.min.css +3 -0
  18. package/dist/fluid.min.css +3 -2
  19. package/dist/fonts/OFL-newsreader.txt +93 -0
  20. package/dist/fonts/OFL-schibsted-grotesk.txt +93 -0
  21. package/dist/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
  22. package/dist/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
  23. package/dist/fonts/schibsted-grotesk-latin-wght-italic.woff2 +0 -0
  24. package/dist/fonts/schibsted-grotesk-latin-wght-normal.woff2 +0 -0
  25. package/fluid-agent-kit/README.md +1 -0
  26. package/fluid-agent-kit/skills/accessibility.md +3 -1
  27. package/fluid-agent-kit/skills/css-conventions.md +22 -5
  28. package/fluid-agent-kit/skills/image-optimization.md +2 -0
  29. package/fluid-agent-kit/skills/preset-composition.md +108 -0
  30. package/package.json +29 -3
  31. package/src/animations/scroll-reveal.css +75 -193
  32. package/src/components/accordion.css +6 -47
  33. package/src/components/alert.css +47 -88
  34. package/src/components/avatar.css +4 -20
  35. package/src/components/badge.css +25 -48
  36. package/src/components/button.css +69 -175
  37. package/src/components/card.css +146 -481
  38. package/src/components/chip.css +46 -12
  39. package/src/components/compare.css +234 -0
  40. package/src/components/dropdown.css +10 -67
  41. package/src/components/empty-state.css +4 -0
  42. package/src/components/form.css +113 -81
  43. package/src/components/gallery.css +252 -0
  44. package/src/components/hero.css +203 -88
  45. package/src/components/indicator.css +23 -117
  46. package/src/components/loading.css +7 -29
  47. package/src/components/modal.css +12 -65
  48. package/src/components/nav-modes.css +261 -0
  49. package/src/components/nav.css +324 -392
  50. package/src/components/search-input.css +4 -2
  51. package/src/components/step-indicator.css +26 -27
  52. package/src/components/table.css +64 -171
  53. package/src/components/toc.css +254 -0
  54. package/src/components/tooltip.css +5 -46
  55. package/src/core/base.css +393 -547
  56. package/src/core/reset.css +17 -5
  57. package/src/core/tokens.css +426 -2276
  58. package/src/fluid.css +258 -17
  59. package/src/fonts/OFL-newsreader.txt +93 -0
  60. package/src/fonts/OFL-schibsted-grotesk.txt +93 -0
  61. package/src/fonts/fluid-fonts.css +55 -0
  62. package/src/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
  63. package/src/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
  64. package/src/fonts/schibsted-grotesk-latin-wght-italic.woff2 +0 -0
  65. package/src/fonts/schibsted-grotesk-latin-wght-normal.woff2 +0 -0
  66. package/src/layouts/positioning.css +6 -3
  67. package/src/legacy-1x.css +61 -0
  68. package/src/sections/cta.css +33 -101
  69. package/src/sections/features.css +42 -219
  70. package/src/sections/footer.css +53 -134
  71. package/src/sections/stats.css +40 -153
  72. package/src/sections/team.css +24 -113
  73. package/src/sections/testimonials.css +34 -148
  74. package/src/zero/base.css +166 -0
  75. package/src/zero/tokens.css +64 -0
  76. package/src/zero.css +20 -0
  77. package/src/components/scroll-progress.css +0 -104
  78. package/src/components/settings-panel.css +0 -603
  79. package/src/components/themed-images.css +0 -229
  80. 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
- }