@fluid-theme/core 0.4.3
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 +32 -0
- package/CHANGELOG.md +159 -0
- package/CLAUDE.md +104 -0
- package/GEMINI.md +48 -0
- package/LICENSE +21 -0
- package/README.md +253 -0
- package/dist/fluid.min.css +2 -0
- package/fluid-agent-kit/README.md +57 -0
- package/fluid-agent-kit/skills/accessibility.md +41 -0
- package/fluid-agent-kit/skills/css-conventions.md +51 -0
- package/fluid-agent-kit/skills/image-optimization.md +115 -0
- package/fluid-agent-kit/skills/ux-rules.md +43 -0
- package/package.json +68 -0
- package/src/animations/scroll-reveal.css +224 -0
- package/src/components/accordion.css +250 -0
- package/src/components/alert.css +453 -0
- package/src/components/avatar.css +192 -0
- package/src/components/badge.css +182 -0
- package/src/components/button.css +387 -0
- package/src/components/card.css +650 -0
- package/src/components/chip.css +143 -0
- package/src/components/dropdown.css +335 -0
- package/src/components/empty-state.css +105 -0
- package/src/components/form.css +508 -0
- package/src/components/hero.css +293 -0
- package/src/components/indicator.css +455 -0
- package/src/components/loading.css +274 -0
- package/src/components/modal.css +364 -0
- package/src/components/nav.css +726 -0
- package/src/components/scroll-progress.css +104 -0
- package/src/components/search-input.css +125 -0
- package/src/components/settings-panel.css +603 -0
- package/src/components/step-indicator.css +188 -0
- package/src/components/table.css +350 -0
- package/src/components/themed-images.css +229 -0
- package/src/components/tooltip.css +247 -0
- package/src/components/version-badge.css +70 -0
- package/src/core/base.css +884 -0
- package/src/core/reset.css +159 -0
- package/src/core/tokens.css +2416 -0
- package/src/fluid.css +242 -0
- package/src/layouts/positioning.css +626 -0
- package/src/sections/cta.css +210 -0
- package/src/sections/features.css +356 -0
- package/src/sections/footer.css +283 -0
- package/src/sections/stats.css +234 -0
- package/src/sections/team.css +181 -0
- package/src/sections/testimonials.css +251 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluid Framework - Call-to-Action Sections
|
|
3
|
+
* @layer components
|
|
4
|
+
*
|
|
5
|
+
* Conversion-focused sections for signups, downloads, and engagement.
|
|
6
|
+
* Four layout variants via data-type attribute.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* <!-- Full-width banner (default) -->
|
|
10
|
+
* <section class="cta" aria-label="Call to action">
|
|
11
|
+
* <h2 class="cta__title">Ready to get started?</h2>
|
|
12
|
+
* <p class="cta__description">Join thousands of happy users today.</p>
|
|
13
|
+
* <div class="cta__actions">
|
|
14
|
+
* <a href="#" class="button" data-variant="primary">Start Free</a>
|
|
15
|
+
* <a href="#" class="button" data-variant="outline">Learn More</a>
|
|
16
|
+
* </div>
|
|
17
|
+
* </section>
|
|
18
|
+
*
|
|
19
|
+
* <!-- Split layout -->
|
|
20
|
+
* <section class="cta" data-type="split" aria-label="Call to action">
|
|
21
|
+
* <div class="cta__content">
|
|
22
|
+
* <h2 class="cta__title">Title</h2>
|
|
23
|
+
* <p class="cta__description">Description</p>
|
|
24
|
+
* </div>
|
|
25
|
+
* <div class="cta__aside">
|
|
26
|
+
* <img src="..." alt="...">
|
|
27
|
+
* </div>
|
|
28
|
+
* </section>
|
|
29
|
+
*
|
|
30
|
+
* <!-- Newsletter -->
|
|
31
|
+
* <section class="cta" data-type="newsletter" aria-label="Newsletter signup">
|
|
32
|
+
* <h2 class="cta__title">Stay in the loop</h2>
|
|
33
|
+
* <p class="cta__description">Get updates straight to your inbox.</p>
|
|
34
|
+
* <form class="cta__form">
|
|
35
|
+
* <input type="email" placeholder="you@example.com" required>
|
|
36
|
+
* <button type="submit" class="button">Subscribe</button>
|
|
37
|
+
* </form>
|
|
38
|
+
* </section>
|
|
39
|
+
*
|
|
40
|
+
* <!-- App download -->
|
|
41
|
+
* <section class="cta" data-type="download" aria-label="Download app">
|
|
42
|
+
* <h2 class="cta__title">Get the app</h2>
|
|
43
|
+
* <p class="cta__description">Available on all platforms.</p>
|
|
44
|
+
* <div class="cta__actions">
|
|
45
|
+
* <a href="#" class="button" data-size="lg">App Store</a>
|
|
46
|
+
* <a href="#" class="button" data-size="lg" data-variant="outline">Google Play</a>
|
|
47
|
+
* </div>
|
|
48
|
+
* </section>
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
@layer components {
|
|
52
|
+
|
|
53
|
+
/* ========================================
|
|
54
|
+
BASE CTA
|
|
55
|
+
Full-width banner (default)
|
|
56
|
+
======================================== */
|
|
57
|
+
|
|
58
|
+
.cta {
|
|
59
|
+
--_cta-bg: color-mix(in oklch, var(--accent) 8%, var(--color-surface));
|
|
60
|
+
--_cta-padding-block: var(--space-16);
|
|
61
|
+
--_cta-padding-inline: var(--space-5);
|
|
62
|
+
--_cta-radius: var(--radius-xl);
|
|
63
|
+
|
|
64
|
+
display: flex;
|
|
65
|
+
flex-direction: column;
|
|
66
|
+
align-items: center;
|
|
67
|
+
gap: var(--space-5);
|
|
68
|
+
padding-block: var(--_cta-padding-block);
|
|
69
|
+
padding-inline: var(--_cta-padding-inline);
|
|
70
|
+
background-color: var(--_cta-bg);
|
|
71
|
+
border-radius: var(--_cta-radius);
|
|
72
|
+
text-align: center;
|
|
73
|
+
max-inline-size: var(--container-xl);
|
|
74
|
+
margin-inline: auto;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.cta__title {
|
|
78
|
+
font-size: var(--font-size-3xl);
|
|
79
|
+
font-weight: var(--weight-bold);
|
|
80
|
+
color: var(--color-text);
|
|
81
|
+
margin: 0;
|
|
82
|
+
max-inline-size: var(--container-sm);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.cta__description {
|
|
86
|
+
font-size: var(--font-size-lg);
|
|
87
|
+
color: var(--color-text-muted);
|
|
88
|
+
line-height: var(--leading-relaxed);
|
|
89
|
+
margin: 0;
|
|
90
|
+
max-inline-size: var(--container-sm);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.cta__actions {
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-wrap: wrap;
|
|
96
|
+
gap: var(--space-3);
|
|
97
|
+
justify-content: center;
|
|
98
|
+
margin-block-start: var(--space-3);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
/* ========================================
|
|
103
|
+
SPLIT
|
|
104
|
+
Text + image/form side by side
|
|
105
|
+
======================================== */
|
|
106
|
+
|
|
107
|
+
.cta[data-type="split"] {
|
|
108
|
+
display: grid;
|
|
109
|
+
grid-template-columns: 1fr 1fr;
|
|
110
|
+
gap: var(--space-10);
|
|
111
|
+
text-align: start;
|
|
112
|
+
align-items: center;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.cta[data-type="split"] .cta__content {
|
|
116
|
+
display: flex;
|
|
117
|
+
flex-direction: column;
|
|
118
|
+
gap: var(--space-4);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.cta[data-type="split"] .cta__aside img {
|
|
122
|
+
inline-size: 100%;
|
|
123
|
+
block-size: auto;
|
|
124
|
+
border-radius: var(--radius-lg);
|
|
125
|
+
object-fit: cover;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@media (max-width: 48rem) {
|
|
129
|
+
.cta[data-type="split"] {
|
|
130
|
+
grid-template-columns: 1fr;
|
|
131
|
+
text-align: center;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.cta[data-type="split"] .cta__content {
|
|
135
|
+
align-items: center;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
/* ========================================
|
|
141
|
+
NEWSLETTER
|
|
142
|
+
Inline email + submit form
|
|
143
|
+
======================================== */
|
|
144
|
+
|
|
145
|
+
.cta__form {
|
|
146
|
+
display: flex;
|
|
147
|
+
gap: var(--space-3);
|
|
148
|
+
inline-size: 100%;
|
|
149
|
+
max-inline-size: 28rem;
|
|
150
|
+
margin-block-start: var(--space-3);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.cta__form input[type="email"] {
|
|
154
|
+
flex: 1;
|
|
155
|
+
min-inline-size: 0;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.cta__form .button {
|
|
159
|
+
flex-shrink: 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@media (max-width: 30rem) {
|
|
163
|
+
.cta__form {
|
|
164
|
+
flex-direction: column;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
/* ========================================
|
|
170
|
+
DOWNLOAD
|
|
171
|
+
App store badges / download buttons
|
|
172
|
+
======================================== */
|
|
173
|
+
|
|
174
|
+
.cta[data-type="download"] .cta__actions {
|
|
175
|
+
gap: var(--space-4);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.cta[data-type="download"] .cta__actions .button {
|
|
179
|
+
min-inline-size: 10rem;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
/* ========================================
|
|
184
|
+
ACCENT VARIANT
|
|
185
|
+
Stronger background for emphasis
|
|
186
|
+
======================================== */
|
|
187
|
+
|
|
188
|
+
.cta[data-accent] {
|
|
189
|
+
--_cta-bg: var(--accent);
|
|
190
|
+
color: var(--white);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.cta[data-accent] .cta__title {
|
|
194
|
+
color: var(--white);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.cta[data-accent] .cta__description {
|
|
198
|
+
color: color-mix(in oklch, var(--white) 80%, transparent);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.cta[data-accent] .button:not([data-variant]) {
|
|
202
|
+
background-color: var(--white);
|
|
203
|
+
color: var(--accent);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.cta[data-accent] .button[data-variant="outline"] {
|
|
207
|
+
border-color: var(--white);
|
|
208
|
+
color: var(--white);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluid Framework - Feature Sections
|
|
3
|
+
* @layer components
|
|
4
|
+
*
|
|
5
|
+
* Pre-built layouts for showcasing product features, service offerings,
|
|
6
|
+
* and key benefits. Four layout variants via data-type attribute.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* <!-- Icon Grid (default) -->
|
|
10
|
+
* <section class="features">
|
|
11
|
+
* <header class="features__header">
|
|
12
|
+
* <h2>Features</h2>
|
|
13
|
+
* <p>Why teams choose us</p>
|
|
14
|
+
* </header>
|
|
15
|
+
* <div class="features__grid">
|
|
16
|
+
* <article class="feature">
|
|
17
|
+
* <div class="feature__icon"><svg>...</svg></div>
|
|
18
|
+
* <h3 class="feature__title">Fast</h3>
|
|
19
|
+
* <p class="feature__description">Loads in milliseconds.</p>
|
|
20
|
+
* </article>
|
|
21
|
+
* </div>
|
|
22
|
+
* </section>
|
|
23
|
+
*
|
|
24
|
+
* <!-- Alternating rows -->
|
|
25
|
+
* <section class="features" data-type="alternating">
|
|
26
|
+
* <article class="feature">
|
|
27
|
+
* <div class="feature__content">
|
|
28
|
+
* <h3 class="feature__title">Title</h3>
|
|
29
|
+
* <p class="feature__description">Description</p>
|
|
30
|
+
* </div>
|
|
31
|
+
* <figure class="feature__media">
|
|
32
|
+
* <img src="..." alt="...">
|
|
33
|
+
* </figure>
|
|
34
|
+
* </article>
|
|
35
|
+
* </section>
|
|
36
|
+
*
|
|
37
|
+
* <!-- Centered showcase -->
|
|
38
|
+
* <section class="features" data-type="showcase">
|
|
39
|
+
* <figure class="feature__media">
|
|
40
|
+
* <img src="..." alt="...">
|
|
41
|
+
* </figure>
|
|
42
|
+
* <div class="feature__content">
|
|
43
|
+
* <h2>Feature Name</h2>
|
|
44
|
+
* <p>Details about the feature.</p>
|
|
45
|
+
* </div>
|
|
46
|
+
* </section>
|
|
47
|
+
*
|
|
48
|
+
* <!-- Comparison table -->
|
|
49
|
+
* <section class="features" data-type="comparison">
|
|
50
|
+
* <header class="features__header">
|
|
51
|
+
* <h2>Compare Plans</h2>
|
|
52
|
+
* </header>
|
|
53
|
+
* <table class="features__table">
|
|
54
|
+
* <thead><tr><th>Feature</th><th>Basic</th><th>Pro</th></tr></thead>
|
|
55
|
+
* <tbody><tr><td>Storage</td><td>5 GB</td><td>100 GB</td></tr></tbody>
|
|
56
|
+
* </table>
|
|
57
|
+
* </section>
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
@layer components {
|
|
61
|
+
|
|
62
|
+
/* ========================================
|
|
63
|
+
BASE FEATURES SECTION
|
|
64
|
+
======================================== */
|
|
65
|
+
|
|
66
|
+
.features {
|
|
67
|
+
padding-block: var(--space-16);
|
|
68
|
+
padding-inline: var(--space-5);
|
|
69
|
+
max-inline-size: var(--container-xl);
|
|
70
|
+
margin-inline: auto;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.features__header {
|
|
74
|
+
text-align: center;
|
|
75
|
+
max-inline-size: var(--container-md);
|
|
76
|
+
margin-inline: auto;
|
|
77
|
+
margin-block-end: var(--space-12);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.features__header h2 {
|
|
81
|
+
font-size: var(--font-size-3xl);
|
|
82
|
+
font-weight: var(--weight-bold);
|
|
83
|
+
color: var(--color-text);
|
|
84
|
+
margin-block-end: var(--space-3);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.features__header p {
|
|
88
|
+
font-size: var(--font-size-lg);
|
|
89
|
+
color: var(--color-text-muted);
|
|
90
|
+
line-height: var(--leading-relaxed);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
/* ========================================
|
|
95
|
+
ICON GRID (default)
|
|
96
|
+
3-4 column responsive grid of feature cards
|
|
97
|
+
======================================== */
|
|
98
|
+
|
|
99
|
+
.features__grid {
|
|
100
|
+
display: grid;
|
|
101
|
+
gap: var(--space-8);
|
|
102
|
+
grid-template-columns: repeat(
|
|
103
|
+
auto-fit,
|
|
104
|
+
minmax(min(100%, 16rem), 1fr)
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.feature {
|
|
109
|
+
--_feat-padding: var(--space-6);
|
|
110
|
+
--_feat-radius: var(--radius-lg);
|
|
111
|
+
--_feat-bg: var(--color-surface);
|
|
112
|
+
--_feat-border: var(--color-border-subtle);
|
|
113
|
+
|
|
114
|
+
display: flex;
|
|
115
|
+
flex-direction: column;
|
|
116
|
+
gap: var(--space-3);
|
|
117
|
+
padding: var(--_feat-padding);
|
|
118
|
+
background-color: var(--_feat-bg);
|
|
119
|
+
border: var(--border-width) solid var(--_feat-border);
|
|
120
|
+
border-radius: var(--_feat-radius);
|
|
121
|
+
transition:
|
|
122
|
+
box-shadow var(--duration-normal) var(--ease-fluid),
|
|
123
|
+
transform var(--duration-normal) var(--ease-settle);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.feature:hover {
|
|
127
|
+
box-shadow: var(--shadow-md);
|
|
128
|
+
transform: translateY(-2px);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.feature__icon {
|
|
132
|
+
display: flex;
|
|
133
|
+
align-items: center;
|
|
134
|
+
justify-content: center;
|
|
135
|
+
inline-size: var(--space-12);
|
|
136
|
+
block-size: var(--space-12);
|
|
137
|
+
border-radius: var(--radius-md);
|
|
138
|
+
background-color: color-mix(in oklch, var(--accent) 12%, transparent);
|
|
139
|
+
color: var(--accent);
|
|
140
|
+
font-size: var(--font-size-xl);
|
|
141
|
+
flex-shrink: 0;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.feature__icon svg {
|
|
145
|
+
inline-size: 1.5em;
|
|
146
|
+
block-size: 1.5em;
|
|
147
|
+
stroke: currentColor;
|
|
148
|
+
stroke-width: 2;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.feature__title {
|
|
152
|
+
font-size: var(--font-size-lg);
|
|
153
|
+
font-weight: var(--weight-semibold, 600);
|
|
154
|
+
color: var(--color-text);
|
|
155
|
+
margin: 0;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.feature__description {
|
|
159
|
+
font-size: var(--font-size-sm);
|
|
160
|
+
color: var(--color-text-muted);
|
|
161
|
+
line-height: var(--leading-relaxed);
|
|
162
|
+
margin: 0;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
/* ========================================
|
|
167
|
+
ALTERNATING
|
|
168
|
+
Image/text rows that swap sides
|
|
169
|
+
======================================== */
|
|
170
|
+
|
|
171
|
+
.features[data-type="alternating"] .features__grid {
|
|
172
|
+
display: flex;
|
|
173
|
+
flex-direction: column;
|
|
174
|
+
gap: var(--space-16);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.features[data-type="alternating"] .feature {
|
|
178
|
+
display: grid;
|
|
179
|
+
grid-template-columns: 1fr 1fr;
|
|
180
|
+
gap: var(--space-10);
|
|
181
|
+
align-items: center;
|
|
182
|
+
padding: 0;
|
|
183
|
+
background: none;
|
|
184
|
+
border: none;
|
|
185
|
+
border-radius: 0;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.features[data-type="alternating"] .feature:hover {
|
|
189
|
+
box-shadow: none;
|
|
190
|
+
transform: none;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.features[data-type="alternating"] .feature:nth-child(even) {
|
|
194
|
+
direction: rtl;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.features[data-type="alternating"] .feature:nth-child(even) > * {
|
|
198
|
+
direction: ltr;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.features[data-type="alternating"] .feature__content {
|
|
202
|
+
display: flex;
|
|
203
|
+
flex-direction: column;
|
|
204
|
+
gap: var(--space-4);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.features[data-type="alternating"] .feature__title {
|
|
208
|
+
font-size: var(--font-size-2xl);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.features[data-type="alternating"] .feature__description {
|
|
212
|
+
font-size: var(--font-size-base);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.features[data-type="alternating"] .feature__media {
|
|
216
|
+
margin: 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.features[data-type="alternating"] .feature__media img {
|
|
220
|
+
inline-size: 100%;
|
|
221
|
+
block-size: auto;
|
|
222
|
+
border-radius: var(--radius-lg);
|
|
223
|
+
object-fit: cover;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
@media (max-width: 48rem) {
|
|
227
|
+
.features[data-type="alternating"] .feature {
|
|
228
|
+
grid-template-columns: 1fr;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.features[data-type="alternating"] .feature:nth-child(even) {
|
|
232
|
+
direction: ltr;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
/* ========================================
|
|
238
|
+
CENTERED SHOWCASE
|
|
239
|
+
Single feature highlight with large image
|
|
240
|
+
======================================== */
|
|
241
|
+
|
|
242
|
+
.features[data-type="showcase"] {
|
|
243
|
+
text-align: center;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.features[data-type="showcase"] .feature__media {
|
|
247
|
+
margin-inline: auto;
|
|
248
|
+
margin-block-end: var(--space-8);
|
|
249
|
+
max-inline-size: var(--container-lg);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.features[data-type="showcase"] .feature__media img {
|
|
253
|
+
inline-size: 100%;
|
|
254
|
+
block-size: auto;
|
|
255
|
+
border-radius: var(--radius-xl);
|
|
256
|
+
box-shadow: var(--shadow-lg);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.features[data-type="showcase"] .feature__content {
|
|
260
|
+
max-inline-size: var(--container-md);
|
|
261
|
+
margin-inline: auto;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.features[data-type="showcase"] .feature__content h2,
|
|
265
|
+
.features[data-type="showcase"] .feature__content h3 {
|
|
266
|
+
font-size: var(--font-size-3xl);
|
|
267
|
+
font-weight: var(--weight-bold);
|
|
268
|
+
margin-block-end: var(--space-4);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.features[data-type="showcase"] .feature__content p {
|
|
272
|
+
font-size: var(--font-size-lg);
|
|
273
|
+
color: var(--color-text-muted);
|
|
274
|
+
line-height: var(--leading-relaxed);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
/* ========================================
|
|
279
|
+
COMPARISON TABLE
|
|
280
|
+
Feature comparison grid
|
|
281
|
+
======================================== */
|
|
282
|
+
|
|
283
|
+
.features__table {
|
|
284
|
+
inline-size: 100%;
|
|
285
|
+
border-collapse: collapse;
|
|
286
|
+
text-align: center;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.features__table th,
|
|
290
|
+
.features__table td {
|
|
291
|
+
padding: var(--space-4) var(--space-5);
|
|
292
|
+
border-block-end: var(--border-width) solid var(--color-border-subtle);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.features__table thead th {
|
|
296
|
+
font-size: var(--font-size-sm);
|
|
297
|
+
font-weight: var(--weight-semibold, 600);
|
|
298
|
+
color: var(--color-text-muted);
|
|
299
|
+
text-transform: uppercase;
|
|
300
|
+
letter-spacing: var(--tracking-wider);
|
|
301
|
+
padding-block-end: var(--space-4);
|
|
302
|
+
border-block-end-width: 2px;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.features__table tbody td:first-child {
|
|
306
|
+
text-align: start;
|
|
307
|
+
font-weight: var(--weight-medium, 500);
|
|
308
|
+
color: var(--color-text);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.features__table tbody td {
|
|
312
|
+
color: var(--color-text-muted);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.features__table tbody tr:hover {
|
|
316
|
+
background-color: var(--color-surface);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/* Highlighted column */
|
|
320
|
+
.features__table [data-featured] {
|
|
321
|
+
background-color: color-mix(in oklch, var(--accent) 8%, transparent);
|
|
322
|
+
font-weight: var(--weight-semibold, 600);
|
|
323
|
+
color: var(--accent);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.features__table thead [data-featured] {
|
|
327
|
+
color: var(--accent);
|
|
328
|
+
border-block-end-color: var(--accent);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
@media (max-width: 40rem) {
|
|
332
|
+
.features__table {
|
|
333
|
+
font-size: var(--font-size-sm);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.features__table th,
|
|
337
|
+
.features__table td {
|
|
338
|
+
padding: var(--space-3) var(--space-3);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
/* ========================================
|
|
344
|
+
ACCESSIBILITY
|
|
345
|
+
======================================== */
|
|
346
|
+
|
|
347
|
+
@media (prefers-reduced-motion: reduce) {
|
|
348
|
+
.feature {
|
|
349
|
+
transition: none;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.feature:hover {
|
|
353
|
+
transform: none;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|