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