@zhang_jifan/fanui 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 (127) hide show
  1. package/ACCESSIBILITY.md +61 -0
  2. package/CHANGELOG.md +112 -0
  3. package/COMMERCIAL-LICENSE.md +71 -0
  4. package/DESIGN-SYSTEM.md +294 -0
  5. package/LICENSE +661 -0
  6. package/README.md +348 -0
  7. package/USAGE.md +1926 -0
  8. package/_index.scss +20 -0
  9. package/dist/fanui.cjs +15 -0
  10. package/dist/fanui.css +28209 -0
  11. package/dist/fanui.d.ts +353 -0
  12. package/dist/fanui.esm.js +71 -0
  13. package/dist/fanui.js +4782 -0
  14. package/dist/fanui.min.css +1 -0
  15. package/dist/fanui.mjs +71 -0
  16. package/dist/modules/fanui-advanced.css +830 -0
  17. package/dist/modules/fanui-advanced.min.css +129 -0
  18. package/dist/modules/fanui-alert.css +575 -0
  19. package/dist/modules/fanui-alert.min.css +122 -0
  20. package/dist/modules/fanui-badge.css +426 -0
  21. package/dist/modules/fanui-badge.min.css +77 -0
  22. package/dist/modules/fanui-base.css +1394 -0
  23. package/dist/modules/fanui-base.min.css +236 -0
  24. package/dist/modules/fanui-blog.css +762 -0
  25. package/dist/modules/fanui-blog.min.css +108 -0
  26. package/dist/modules/fanui-button.css +526 -0
  27. package/dist/modules/fanui-button.min.css +56 -0
  28. package/dist/modules/fanui-card.css +291 -0
  29. package/dist/modules/fanui-card.min.css +52 -0
  30. package/dist/modules/fanui-choice.css +539 -0
  31. package/dist/modules/fanui-choice.min.css +83 -0
  32. package/dist/modules/fanui-dashboard.css +1057 -0
  33. package/dist/modules/fanui-dashboard.min.css +160 -0
  34. package/dist/modules/fanui-data.css +687 -0
  35. package/dist/modules/fanui-data.min.css +125 -0
  36. package/dist/modules/fanui-feedback.css +432 -0
  37. package/dist/modules/fanui-feedback.min.css +79 -0
  38. package/dist/modules/fanui-form.css +779 -0
  39. package/dist/modules/fanui-form.min.css +123 -0
  40. package/dist/modules/fanui-glass.css +497 -0
  41. package/dist/modules/fanui-glass.min.css +46 -0
  42. package/dist/modules/fanui-input-plus.css +799 -0
  43. package/dist/modules/fanui-input-plus.min.css +124 -0
  44. package/dist/modules/fanui-interactive.css +960 -0
  45. package/dist/modules/fanui-interactive.min.css +138 -0
  46. package/dist/modules/fanui-layout.css +4399 -0
  47. package/dist/modules/fanui-layout.min.css +1172 -0
  48. package/dist/modules/fanui-marketing.css +1125 -0
  49. package/dist/modules/fanui-marketing.min.css +144 -0
  50. package/dist/modules/fanui-nav.css +458 -0
  51. package/dist/modules/fanui-nav.min.css +76 -0
  52. package/dist/modules/fanui-overlay.css +547 -0
  53. package/dist/modules/fanui-overlay.min.css +91 -0
  54. package/dist/modules/fanui-table.css +290 -0
  55. package/dist/modules/fanui-table.min.css +62 -0
  56. package/dist/modules/fanui-tabs.css +333 -0
  57. package/dist/modules/fanui-tabs.min.css +58 -0
  58. package/dist/modules/fanui-themes.css +2728 -0
  59. package/dist/modules/fanui-themes.min.css +40 -0
  60. package/dist/modules/fanui-tokens.css +587 -0
  61. package/dist/modules/fanui-tokens.min.css +3 -0
  62. package/dist/modules/fanui-utilities.css +6557 -0
  63. package/dist/modules/fanui-utilities.min.css +1762 -0
  64. package/dist/modules/sizes.json +103 -0
  65. package/docs/MIGRATION-v2.md +179 -0
  66. package/examples/01-script-tag.html +149 -0
  67. package/examples/02-react/README.md +39 -0
  68. package/examples/02-react/index.html +12 -0
  69. package/examples/02-react/package.json +20 -0
  70. package/examples/02-react/src/App.jsx +108 -0
  71. package/examples/02-react/src/main.jsx +13 -0
  72. package/examples/02-react/src/useFanUI.js +87 -0
  73. package/examples/02-react/vite.config.js +6 -0
  74. package/examples/03-vue3/README.md +67 -0
  75. package/examples/03-vue3/index.html +12 -0
  76. package/examples/03-vue3/package.json +19 -0
  77. package/examples/03-vue3/src/App.vue +93 -0
  78. package/examples/03-vue3/src/main.js +8 -0
  79. package/examples/03-vue3/src/useFanUI.js +85 -0
  80. package/examples/03-vue3/vite.config.js +6 -0
  81. package/examples/04-vue2-cdn.html +93 -0
  82. package/examples/README.md +34 -0
  83. package/package.json +127 -0
  84. package/src/_functions.scss +319 -0
  85. package/src/_mixins.scss +1202 -0
  86. package/src/_tokens.scss +180 -0
  87. package/src/_variables.scss +491 -0
  88. package/src/base/_animations.scss +210 -0
  89. package/src/base/_reset.scss +359 -0
  90. package/src/base/_rtl.scss +133 -0
  91. package/src/base/_typography.scss +353 -0
  92. package/src/components/_advanced.scss +763 -0
  93. package/src/components/_alert.scss +322 -0
  94. package/src/components/_badge.scss +279 -0
  95. package/src/components/_blog.scss +693 -0
  96. package/src/components/_button.scss +351 -0
  97. package/src/components/_capabilities.scss +463 -0
  98. package/src/components/_card.scss +281 -0
  99. package/src/components/_choice.scss +444 -0
  100. package/src/components/_dashboard.scss +950 -0
  101. package/src/components/_data.scss +618 -0
  102. package/src/components/_feedback.scss +403 -0
  103. package/src/components/_form.scss +408 -0
  104. package/src/components/_glass.scss +374 -0
  105. package/src/components/_input-plus.scss +730 -0
  106. package/src/components/_interactive.scss +885 -0
  107. package/src/components/_marketing.scss +982 -0
  108. package/src/components/_nav.scss +480 -0
  109. package/src/components/_overlay.scss +517 -0
  110. package/src/components/_table.scss +276 -0
  111. package/src/components/_tabs.scss +338 -0
  112. package/src/fanui.d.ts +353 -0
  113. package/src/fanui.js +4782 -0
  114. package/src/fanui.scss +79 -0
  115. package/src/glass/_switches.scss +36 -0
  116. package/src/glass/_tokens.scss +259 -0
  117. package/src/layout/_container.scss +111 -0
  118. package/src/layout/_flex.scss +164 -0
  119. package/src/layout/_grid.scss +180 -0
  120. package/src/themes/_accents.scss +201 -0
  121. package/src/themes/_palettes.scss +180 -0
  122. package/src/utilities/_borders.scss +104 -0
  123. package/src/utilities/_display.scss +145 -0
  124. package/src/utilities/_effects.scss +210 -0
  125. package/src/utilities/_sizing.scss +123 -0
  126. package/src/utilities/_spacing.scss +118 -0
  127. package/src/utilities/_texture.scss +323 -0
@@ -0,0 +1,1125 @@
1
+ /* fanUI v2.1.0 · module: marketing(独立产物,自带令牌) */
2
+ @charset "UTF-8";
3
+ .fanui-announcement {
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ gap: var(--fanui-space-3);
8
+ padding: var(--fanui-space-2) var(--fanui-space-4);
9
+ font-size: var(--fanui-font-size-sm);
10
+ color: var(--fanui-primary-fg);
11
+ background-image: var(--fanui-brand-grad);
12
+ text-align: center;
13
+ }
14
+ .fanui-announcement a {
15
+ color: inherit;
16
+ text-decoration: underline;
17
+ text-underline-offset: 2px;
18
+ }
19
+ .fanui-announcement__badge {
20
+ padding: 1px 8px;
21
+ font-size: var(--fanui-font-size-xs);
22
+ font-weight: var(--fanui-font-weight-semibold);
23
+ border-radius: var(--fanui-radius-full);
24
+ background-color: rgba(255, 255, 255, 0.22);
25
+ color: #ffffff;
26
+ }
27
+ .fanui-announcement__close {
28
+ margin-inline-start: var(--fanui-space-2);
29
+ border: 0;
30
+ background: transparent;
31
+ color: inherit;
32
+ opacity: 0.7;
33
+ cursor: pointer;
34
+ }
35
+ .fanui-announcement__close:hover {
36
+ opacity: 1;
37
+ }
38
+ .fanui-announcement--soft {
39
+ background-image: none;
40
+ background-color: var(--fanui-primary-soft);
41
+ color: var(--fanui-primary-ink);
42
+ }
43
+ .fanui-announcement--soft .fanui-announcement__badge {
44
+ background-color: rgba(255, 255, 255, 0.7);
45
+ color: var(--fanui-primary-ink);
46
+ }
47
+
48
+ .fanui-hero {
49
+ position: relative;
50
+ isolation: isolate;
51
+ overflow: hidden;
52
+ padding-block: var(--fanui-space-24) var(--fanui-space-20);
53
+ text-align: center;
54
+ }
55
+ .fanui-hero__aurora {
56
+ position: absolute;
57
+ inset: -20% -10% auto -10%;
58
+ height: 140%;
59
+ z-index: -2;
60
+ pointer-events: none;
61
+ background: radial-gradient(42% 46% at 24% 26%, var(--fanui-brand-aura-a), transparent 62%), radial-gradient(38% 42% at 76% 22%, var(--fanui-brand-aura-b), transparent 60%), radial-gradient(52% 48% at 50% 84%, var(--fanui-primary-soft), transparent 68%);
62
+ filter: blur(28px);
63
+ opacity: 0.9;
64
+ }
65
+ .fanui-hero__grid {
66
+ position: absolute;
67
+ inset: 0;
68
+ z-index: -1;
69
+ pointer-events: none;
70
+ background-image: linear-gradient(rgba(100, 116, 139, 0.1) 1px, transparent 1px), linear-gradient(90deg, rgba(100, 116, 139, 0.1) 1px, transparent 1px);
71
+ background-size: 56px 56px;
72
+ -webkit-mask-image: radial-gradient(70% 60% at 50% 30%, #000 0%, transparent 100%);
73
+ mask-image: radial-gradient(70% 60% at 50% 30%, #000 0%, transparent 100%);
74
+ }
75
+ .fanui-hero__inner {
76
+ position: relative;
77
+ display: flex;
78
+ flex-direction: column;
79
+ align-items: center;
80
+ gap: var(--fanui-space-5);
81
+ max-width: 820px;
82
+ margin-inline: auto;
83
+ }
84
+ .fanui-hero__eyebrow {
85
+ display: inline-flex;
86
+ align-items: center;
87
+ gap: var(--fanui-space-2);
88
+ padding: 5px 12px 5px 6px;
89
+ font-size: var(--fanui-font-size-sm);
90
+ color: var(--fanui-color-text-muted);
91
+ border-radius: var(--fanui-radius-full);
92
+ position: relative;
93
+ isolation: isolate;
94
+ background-color: rgba(var(--fanui-glass-tint-rgb), calc(var(--fanui-glass-tint-base) + var(--fanui-glass-tint-k) * var(--fanui-glass-intensity)));
95
+ background-image: radial-gradient(calc(var(--fanui-glass-specular-size-base) + var(--fanui-glass-specular-size-k) * var(--fanui-glass-intensity)) circle at var(--fanui-glass-mx, 30%) var(--fanui-glass-my, 0%), rgba(var(--fanui-glass-specular-rgb), calc(var(--fanui-glass-specular-a) * var(--fanui-glass-intensity) * var(--fanui-glass-specular-alpha))), transparent 70%), linear-gradient(180deg, rgba(255, 255, 255, calc(var(--fanui-glass-sheen-a) * var(--fanui-glass-intensity))) 0%, rgba(255, 255, 255, 0) 46%);
96
+ background-repeat: no-repeat;
97
+ background-size: 100% 100%;
98
+ border: 1px solid rgba(var(--fanui-glass-border-rgb), calc(var(--fanui-glass-border-a) + var(--fanui-glass-border-k) * var(--fanui-glass-intensity)));
99
+ border-radius: var(--fanui-glass-radius, 12px);
100
+ color: var(--fanui-color-text);
101
+ backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
102
+ -webkit-backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
103
+ box-shadow: 0 calc(var(--fanui-glass-shadow-y-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-blur-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-spread-k) * var(--fanui-glass-intensity)) rgba(var(--fanui-glass-shadow-rgb), calc(var(--fanui-glass-shadow-a) + var(--fanui-glass-shadow-k) * var(--fanui-glass-intensity))), inset 0 1px 0 rgba(255, 255, 255, calc(var(--fanui-glass-inner-hi) * min(1, var(--fanui-glass-intensity))));
104
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
105
+ }
106
+ .fanui-hero__eyebrow::after {
107
+ content: "";
108
+ position: absolute;
109
+ inset: 0;
110
+ z-index: 1;
111
+ border-radius: inherit;
112
+ pointer-events: none;
113
+ padding: var(--fanui-glass-edge-width, calc(1px + 0.5px * var(--fanui-glass-intensity)));
114
+ background: linear-gradient(var(--fanui-glass-edge-angle, 150deg), rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 0%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 38%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 62%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 100%);
115
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
116
+ mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
117
+ -webkit-mask-composite: xor;
118
+ mask-composite: exclude;
119
+ opacity: var(--fanui-glass-edge-alpha, 1);
120
+ }
121
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
122
+ .fanui-hero__eyebrow {
123
+ background-color: var(--fanui-glass-fallback-bg);
124
+ background-image: none;
125
+ }
126
+ }
127
+ .fanui-hero__eyebrow {
128
+ --fanui-glass-radius: 9999px;
129
+ --fanui-glass-intensity: 0.6;
130
+ }
131
+ .fanui-hero__eyebrow-tag {
132
+ padding: 1px 8px;
133
+ font-size: var(--fanui-font-size-xs);
134
+ font-weight: var(--fanui-font-weight-semibold);
135
+ color: var(--fanui-primary-fg);
136
+ background-color: var(--fanui-primary);
137
+ border-radius: var(--fanui-radius-full);
138
+ }
139
+ .fanui-hero__title {
140
+ margin: 0;
141
+ font-size: clamp(2.25rem, 5.2vw, 4rem);
142
+ font-weight: var(--fanui-font-weight-extrabold);
143
+ line-height: 1.1;
144
+ letter-spacing: var(--fanui-tracking-tight);
145
+ color: var(--fanui-color-text-strong);
146
+ text-wrap: balance;
147
+ }
148
+ .fanui-hero__title em {
149
+ font-style: normal;
150
+ background-image: linear-gradient(100deg, var(--fanui-brand-grad-a), var(--fanui-brand-grad-b));
151
+ -webkit-background-clip: text;
152
+ background-clip: text;
153
+ color: transparent;
154
+ -webkit-text-fill-color: transparent;
155
+ }
156
+ .fanui-hero__lead {
157
+ max-width: 620px;
158
+ margin: 0;
159
+ font-size: clamp(1rem, 1.4vw, 1.1875rem);
160
+ line-height: var(--fanui-line-height-relaxed);
161
+ color: var(--fanui-color-text-muted);
162
+ text-wrap: pretty;
163
+ }
164
+ .fanui-hero__actions {
165
+ display: flex;
166
+ flex-wrap: wrap;
167
+ align-items: center;
168
+ justify-content: center;
169
+ gap: var(--fanui-space-3);
170
+ }
171
+ .fanui-hero__note {
172
+ font-size: var(--fanui-font-size-xs);
173
+ color: var(--fanui-color-text-subtle);
174
+ }
175
+ .fanui-hero__media {
176
+ position: relative;
177
+ width: 100%;
178
+ max-width: 1080px;
179
+ margin-top: var(--fanui-space-10);
180
+ border-radius: var(--fanui-radius-2xl);
181
+ overflow: hidden;
182
+ }
183
+ .fanui-hero__media img {
184
+ display: block;
185
+ width: 100%;
186
+ height: auto;
187
+ }
188
+ .fanui-hero__media::after {
189
+ content: "";
190
+ position: absolute;
191
+ inset: 0;
192
+ border-radius: inherit;
193
+ pointer-events: none;
194
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
195
+ }
196
+ .fanui-hero--split {
197
+ text-align: start;
198
+ }
199
+ .fanui-hero--split .fanui-hero__inner {
200
+ flex-direction: row;
201
+ align-items: center;
202
+ gap: var(--fanui-space-16);
203
+ max-width: 1200px;
204
+ text-align: start;
205
+ }
206
+ .fanui-hero--split .fanui-hero__copy {
207
+ flex: 1 1 46%;
208
+ display: flex;
209
+ flex-direction: column;
210
+ gap: var(--fanui-space-5);
211
+ align-items: flex-start;
212
+ }
213
+ .fanui-hero--split .fanui-hero__media {
214
+ flex: 1 1 54%;
215
+ margin-top: 0;
216
+ }
217
+ .fanui-hero--split .fanui-hero__actions {
218
+ justify-content: flex-start;
219
+ }
220
+ @media (max-width: 767.95px) {
221
+ .fanui-hero--split .fanui-hero__inner {
222
+ flex-direction: column;
223
+ gap: var(--fanui-space-10);
224
+ }
225
+ .fanui-hero--split .fanui-hero__copy {
226
+ align-items: center;
227
+ text-align: center;
228
+ }
229
+ .fanui-hero--split .fanui-hero__actions {
230
+ justify-content: center;
231
+ }
232
+ }
233
+ .fanui-hero--compact {
234
+ padding-block: var(--fanui-space-16) var(--fanui-space-12);
235
+ }
236
+
237
+ .fanui-section-head {
238
+ display: flex;
239
+ flex-direction: column;
240
+ gap: var(--fanui-space-3);
241
+ max-width: 680px;
242
+ margin-bottom: var(--fanui-space-10);
243
+ }
244
+ .fanui-section-head__eyebrow {
245
+ font-size: var(--fanui-font-size-sm);
246
+ font-weight: var(--fanui-font-weight-semibold);
247
+ letter-spacing: var(--fanui-tracking-wider);
248
+ text-transform: uppercase;
249
+ color: var(--fanui-primary);
250
+ }
251
+ .fanui-section-head__title {
252
+ margin: 0;
253
+ font-size: clamp(1.5rem, 3vw, 2.25rem);
254
+ font-weight: var(--fanui-font-weight-bold);
255
+ line-height: 1.2;
256
+ letter-spacing: var(--fanui-tracking-tight);
257
+ color: var(--fanui-color-text-strong);
258
+ text-wrap: balance;
259
+ }
260
+ .fanui-section-head__desc {
261
+ margin: 0;
262
+ font-size: var(--fanui-font-size-md);
263
+ line-height: var(--fanui-line-height-relaxed);
264
+ color: var(--fanui-color-text-muted);
265
+ }
266
+ .fanui-section-head--center {
267
+ align-items: center;
268
+ margin-inline: auto;
269
+ text-align: center;
270
+ }
271
+
272
+ .fanui-feature {
273
+ display: flex;
274
+ flex-direction: column;
275
+ gap: var(--fanui-space-3);
276
+ padding: var(--fanui-space-5);
277
+ border-radius: var(--fanui-radius-xl);
278
+ transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s, box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
279
+ }
280
+ .fanui-feature__icon {
281
+ display: grid;
282
+ place-items: center;
283
+ width: 40px;
284
+ height: 40px;
285
+ border-radius: var(--fanui-radius-lg);
286
+ color: var(--fanui-primary-fg);
287
+ background-image: var(--fanui-brand-grad);
288
+ font-size: var(--fanui-font-size-lg);
289
+ box-shadow: 0 6px 16px -8px var(--fanui-primary-glow);
290
+ }
291
+ .fanui-feature__title {
292
+ margin: 0;
293
+ font-size: var(--fanui-font-size-md);
294
+ font-weight: var(--fanui-font-weight-semibold);
295
+ color: var(--fanui-color-text-strong);
296
+ }
297
+ .fanui-feature__desc {
298
+ margin: 0;
299
+ font-size: var(--fanui-font-size-sm);
300
+ line-height: var(--fanui-line-height-relaxed);
301
+ color: var(--fanui-color-text-muted);
302
+ }
303
+ .fanui-feature__link {
304
+ margin-top: auto;
305
+ font-size: var(--fanui-font-size-sm);
306
+ color: var(--fanui-primary);
307
+ text-decoration: none;
308
+ }
309
+ .fanui-feature__link::after {
310
+ content: " →";
311
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
312
+ display: inline-block;
313
+ }
314
+ .fanui-feature__link:hover::after {
315
+ transform: translateX(3px);
316
+ }
317
+ .fanui-feature--plain {
318
+ padding: 0;
319
+ }
320
+ .fanui-feature--glass {
321
+ position: relative;
322
+ isolation: isolate;
323
+ background-color: rgba(var(--fanui-glass-tint-rgb), calc(var(--fanui-glass-tint-base) + var(--fanui-glass-tint-k) * var(--fanui-glass-intensity)));
324
+ background-image: radial-gradient(calc(var(--fanui-glass-specular-size-base) + var(--fanui-glass-specular-size-k) * var(--fanui-glass-intensity)) circle at var(--fanui-glass-mx, 30%) var(--fanui-glass-my, 0%), rgba(var(--fanui-glass-specular-rgb), calc(var(--fanui-glass-specular-a) * var(--fanui-glass-intensity) * var(--fanui-glass-specular-alpha))), transparent 70%), linear-gradient(180deg, rgba(255, 255, 255, calc(var(--fanui-glass-sheen-a) * var(--fanui-glass-intensity))) 0%, rgba(255, 255, 255, 0) 46%);
325
+ background-repeat: no-repeat;
326
+ background-size: 100% 100%;
327
+ border: 1px solid rgba(var(--fanui-glass-border-rgb), calc(var(--fanui-glass-border-a) + var(--fanui-glass-border-k) * var(--fanui-glass-intensity)));
328
+ border-radius: var(--fanui-glass-radius, 12px);
329
+ color: var(--fanui-color-text);
330
+ backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
331
+ -webkit-backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
332
+ box-shadow: 0 calc(var(--fanui-glass-shadow-y-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-blur-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-spread-k) * var(--fanui-glass-intensity)) rgba(var(--fanui-glass-shadow-rgb), calc(var(--fanui-glass-shadow-a) + var(--fanui-glass-shadow-k) * var(--fanui-glass-intensity))), inset 0 1px 0 rgba(255, 255, 255, calc(var(--fanui-glass-inner-hi) * min(1, var(--fanui-glass-intensity))));
333
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
334
+ }
335
+ .fanui-feature--glass::after {
336
+ content: "";
337
+ position: absolute;
338
+ inset: 0;
339
+ z-index: 1;
340
+ border-radius: inherit;
341
+ pointer-events: none;
342
+ padding: var(--fanui-glass-edge-width, calc(1px + 0.5px * var(--fanui-glass-intensity)));
343
+ background: linear-gradient(var(--fanui-glass-edge-angle, 150deg), rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 0%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 38%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 62%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 100%);
344
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
345
+ mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
346
+ -webkit-mask-composite: xor;
347
+ mask-composite: exclude;
348
+ opacity: var(--fanui-glass-edge-alpha, 1);
349
+ }
350
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
351
+ .fanui-feature--glass {
352
+ background-color: var(--fanui-glass-fallback-bg);
353
+ background-image: none;
354
+ }
355
+ }
356
+
357
+ .fanui-bento {
358
+ display: grid;
359
+ grid-template-columns: repeat(12, minmax(0, 1fr));
360
+ gap: var(--fanui-space-4);
361
+ }
362
+ .fanui-bento > * {
363
+ grid-column: span var(--fanui-bento-cols, 4);
364
+ grid-row: span var(--fanui-bento-rows, 1);
365
+ min-width: 0;
366
+ }
367
+ .fanui-bento__cell {
368
+ position: relative;
369
+ overflow: hidden;
370
+ display: flex;
371
+ flex-direction: column;
372
+ gap: var(--fanui-space-2);
373
+ padding: var(--fanui-space-5);
374
+ border-radius: var(--fanui-radius-xl);
375
+ position: relative;
376
+ isolation: isolate;
377
+ background-color: rgba(var(--fanui-glass-tint-rgb), calc(var(--fanui-glass-tint-base) + var(--fanui-glass-tint-k) * var(--fanui-glass-intensity)));
378
+ background-image: radial-gradient(calc(var(--fanui-glass-specular-size-base) + var(--fanui-glass-specular-size-k) * var(--fanui-glass-intensity)) circle at var(--fanui-glass-mx, 30%) var(--fanui-glass-my, 0%), rgba(var(--fanui-glass-specular-rgb), calc(var(--fanui-glass-specular-a) * var(--fanui-glass-intensity) * var(--fanui-glass-specular-alpha))), transparent 70%), linear-gradient(180deg, rgba(255, 255, 255, calc(var(--fanui-glass-sheen-a) * var(--fanui-glass-intensity))) 0%, rgba(255, 255, 255, 0) 46%);
379
+ background-repeat: no-repeat;
380
+ background-size: 100% 100%;
381
+ border: 1px solid rgba(var(--fanui-glass-border-rgb), calc(var(--fanui-glass-border-a) + var(--fanui-glass-border-k) * var(--fanui-glass-intensity)));
382
+ border-radius: var(--fanui-glass-radius, 12px);
383
+ color: var(--fanui-color-text);
384
+ backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
385
+ -webkit-backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
386
+ box-shadow: 0 calc(var(--fanui-glass-shadow-y-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-blur-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-spread-k) * var(--fanui-glass-intensity)) rgba(var(--fanui-glass-shadow-rgb), calc(var(--fanui-glass-shadow-a) + var(--fanui-glass-shadow-k) * var(--fanui-glass-intensity))), inset 0 1px 0 rgba(255, 255, 255, calc(var(--fanui-glass-inner-hi) * min(1, var(--fanui-glass-intensity))));
387
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
388
+ }
389
+ .fanui-bento__cell::after {
390
+ content: "";
391
+ position: absolute;
392
+ inset: 0;
393
+ z-index: 1;
394
+ border-radius: inherit;
395
+ pointer-events: none;
396
+ padding: var(--fanui-glass-edge-width, calc(1px + 0.5px * var(--fanui-glass-intensity)));
397
+ background: linear-gradient(var(--fanui-glass-edge-angle, 150deg), rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 0%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 38%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 62%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 100%);
398
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
399
+ mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
400
+ -webkit-mask-composite: xor;
401
+ mask-composite: exclude;
402
+ opacity: var(--fanui-glass-edge-alpha, 1);
403
+ }
404
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
405
+ .fanui-bento__cell {
406
+ background-color: var(--fanui-glass-fallback-bg);
407
+ background-image: none;
408
+ }
409
+ }
410
+ .fanui-bento__cell {
411
+ transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
412
+ }
413
+ .fanui-bento__cell:hover {
414
+ transform: translateY(-2px);
415
+ }
416
+ .fanui-bento__title {
417
+ margin: 0;
418
+ font-size: var(--fanui-font-size-lg);
419
+ font-weight: var(--fanui-font-weight-semibold);
420
+ color: var(--fanui-color-text-strong);
421
+ }
422
+ .fanui-bento__desc {
423
+ margin: 0;
424
+ font-size: var(--fanui-font-size-sm);
425
+ color: var(--fanui-color-text-muted);
426
+ }
427
+ .fanui-bento__media {
428
+ margin-top: auto;
429
+ border-radius: var(--fanui-radius-lg);
430
+ overflow: hidden;
431
+ }
432
+ .fanui-bento__media img {
433
+ display: block;
434
+ width: 100%;
435
+ height: 100%;
436
+ object-fit: cover;
437
+ }
438
+ .fanui-bento__cell--brand {
439
+ background-image: var(--fanui-brand-grad);
440
+ color: var(--fanui-primary-fg);
441
+ border-color: transparent;
442
+ }
443
+ .fanui-bento__cell--brand .fanui-bento__title,
444
+ .fanui-bento__cell--brand .fanui-bento__desc {
445
+ color: inherit;
446
+ }
447
+ .fanui-bento__cell--span-6 {
448
+ --fanui-bento-cols: 6;
449
+ }
450
+ .fanui-bento__cell--span-8 {
451
+ --fanui-bento-cols: 8;
452
+ }
453
+ .fanui-bento__cell--span-12 {
454
+ --fanui-bento-cols: 12;
455
+ }
456
+ .fanui-bento__cell--tall {
457
+ --fanui-bento-rows: 2;
458
+ }
459
+ @media (max-width: 991.95px) {
460
+ .fanui-bento > * {
461
+ --fanui-bento-cols: 6;
462
+ }
463
+ }
464
+ @media (max-width: 575.95px) {
465
+ .fanui-bento > * {
466
+ --fanui-bento-cols: 12;
467
+ }
468
+ }
469
+
470
+ .fanui-flow {
471
+ display: grid;
472
+ grid-template-columns: repeat(var(--fanui-flow-cols, 3), minmax(0, 1fr));
473
+ gap: var(--fanui-space-6);
474
+ counter-reset: fanui-flow;
475
+ }
476
+ @media (max-width: 767.95px) {
477
+ .fanui-flow {
478
+ grid-template-columns: 1fr;
479
+ }
480
+ }
481
+ .fanui-flow__step {
482
+ position: relative;
483
+ counter-increment: fanui-flow;
484
+ display: flex;
485
+ flex-direction: column;
486
+ gap: var(--fanui-space-2);
487
+ padding-top: var(--fanui-space-4);
488
+ }
489
+ .fanui-flow__step::before {
490
+ content: "";
491
+ position: absolute;
492
+ top: 0;
493
+ left: 0;
494
+ right: calc(var(--fanui-space-6) * -1 + 1px);
495
+ height: 2px;
496
+ background-image: linear-gradient(to right, var(--fanui-primary), var(--fanui-primary-vivid));
497
+ border-radius: var(--fanui-radius-full);
498
+ }
499
+ .fanui-flow__step:last-child::before {
500
+ right: 0;
501
+ }
502
+ .fanui-flow__index {
503
+ display: grid;
504
+ place-items: center;
505
+ width: 30px;
506
+ height: 30px;
507
+ font-size: var(--fanui-font-size-sm);
508
+ font-weight: var(--fanui-font-weight-semibold);
509
+ color: var(--fanui-primary-ink);
510
+ background-color: var(--fanui-primary-soft-2);
511
+ border-radius: var(--fanui-radius-full);
512
+ }
513
+ .fanui-flow__title {
514
+ margin: 0;
515
+ font-size: var(--fanui-font-size-md);
516
+ font-weight: var(--fanui-font-weight-semibold);
517
+ color: var(--fanui-color-text-strong);
518
+ }
519
+ .fanui-flow__desc {
520
+ margin: 0;
521
+ font-size: var(--fanui-font-size-sm);
522
+ line-height: var(--fanui-line-height-relaxed);
523
+ color: var(--fanui-color-text-muted);
524
+ }
525
+
526
+ .fanui-marquee {
527
+ display: flex;
528
+ overflow: hidden;
529
+ gap: var(--fanui-marquee-gap, var(--fanui-space-12));
530
+ -webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
531
+ mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
532
+ }
533
+ .fanui-marquee__track {
534
+ display: flex;
535
+ align-items: center;
536
+ gap: inherit;
537
+ flex: 0 0 auto;
538
+ min-width: 100%;
539
+ animation: fanui-marquee var(--fanui-marquee-duration, 36s) linear infinite;
540
+ }
541
+ .fanui-marquee:hover .fanui-marquee__track {
542
+ animation-play-state: paused;
543
+ }
544
+ .fanui-marquee__item {
545
+ display: grid;
546
+ place-items: center;
547
+ flex: 0 0 auto;
548
+ height: 40px;
549
+ color: var(--fanui-color-text-subtle);
550
+ font-size: var(--fanui-font-size-lg);
551
+ font-weight: var(--fanui-font-weight-semibold);
552
+ letter-spacing: var(--fanui-tracking-tight);
553
+ filter: grayscale(1);
554
+ opacity: 0.72;
555
+ transition: filter 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s, opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s, color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
556
+ }
557
+ .fanui-marquee__item:hover {
558
+ filter: none;
559
+ opacity: 1;
560
+ color: var(--fanui-color-text);
561
+ }
562
+ .fanui-marquee__item img {
563
+ max-height: 32px;
564
+ width: auto;
565
+ }
566
+ .fanui-marquee--reverse .fanui-marquee__track {
567
+ animation-direction: reverse;
568
+ }
569
+ @media (prefers-reduced-motion: reduce) {
570
+ .fanui-marquee__track {
571
+ animation: none;
572
+ }
573
+ }
574
+
575
+ @keyframes fanui-marquee {
576
+ from {
577
+ transform: translateX(0);
578
+ }
579
+ to {
580
+ transform: translateX(calc(-100% - var(--fanui-marquee-gap, 48px)));
581
+ }
582
+ }
583
+ .fanui-stat-band {
584
+ display: grid;
585
+ grid-template-columns: repeat(var(--fanui-stat-cols, 4), minmax(0, 1fr));
586
+ gap: var(--fanui-space-6);
587
+ padding: var(--fanui-space-8);
588
+ border-radius: var(--fanui-radius-2xl);
589
+ position: relative;
590
+ isolation: isolate;
591
+ background-color: rgba(var(--fanui-glass-tint-rgb), calc(var(--fanui-glass-tint-base) + var(--fanui-glass-tint-k) * var(--fanui-glass-intensity)));
592
+ background-image: radial-gradient(calc(var(--fanui-glass-specular-size-base) + var(--fanui-glass-specular-size-k) * var(--fanui-glass-intensity)) circle at var(--fanui-glass-mx, 30%) var(--fanui-glass-my, 0%), rgba(var(--fanui-glass-specular-rgb), calc(var(--fanui-glass-specular-a) * var(--fanui-glass-intensity) * var(--fanui-glass-specular-alpha))), transparent 70%), linear-gradient(180deg, rgba(255, 255, 255, calc(var(--fanui-glass-sheen-a) * var(--fanui-glass-intensity))) 0%, rgba(255, 255, 255, 0) 46%);
593
+ background-repeat: no-repeat;
594
+ background-size: 100% 100%;
595
+ border: 1px solid rgba(var(--fanui-glass-border-rgb), calc(var(--fanui-glass-border-a) + var(--fanui-glass-border-k) * var(--fanui-glass-intensity)));
596
+ border-radius: var(--fanui-glass-radius, 12px);
597
+ color: var(--fanui-color-text);
598
+ backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
599
+ -webkit-backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
600
+ box-shadow: 0 calc(var(--fanui-glass-shadow-y-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-blur-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-spread-k) * var(--fanui-glass-intensity)) rgba(var(--fanui-glass-shadow-rgb), calc(var(--fanui-glass-shadow-a) + var(--fanui-glass-shadow-k) * var(--fanui-glass-intensity))), inset 0 1px 0 rgba(255, 255, 255, calc(var(--fanui-glass-inner-hi) * min(1, var(--fanui-glass-intensity))));
601
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
602
+ }
603
+ .fanui-stat-band::after {
604
+ content: "";
605
+ position: absolute;
606
+ inset: 0;
607
+ z-index: 1;
608
+ border-radius: inherit;
609
+ pointer-events: none;
610
+ padding: var(--fanui-glass-edge-width, calc(1px + 0.5px * var(--fanui-glass-intensity)));
611
+ background: linear-gradient(var(--fanui-glass-edge-angle, 150deg), rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 0%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 38%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 62%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 100%);
612
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
613
+ mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
614
+ -webkit-mask-composite: xor;
615
+ mask-composite: exclude;
616
+ opacity: var(--fanui-glass-edge-alpha, 1);
617
+ }
618
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
619
+ .fanui-stat-band {
620
+ background-color: var(--fanui-glass-fallback-bg);
621
+ background-image: none;
622
+ }
623
+ }
624
+ @media (max-width: 767.95px) {
625
+ .fanui-stat-band {
626
+ grid-template-columns: repeat(2, minmax(0, 1fr));
627
+ }
628
+ }
629
+ .fanui-stat-band__item {
630
+ display: flex;
631
+ flex-direction: column;
632
+ gap: var(--fanui-space-1);
633
+ text-align: center;
634
+ }
635
+ .fanui-stat-band__value {
636
+ font-size: clamp(1.75rem, 3vw, 2.5rem);
637
+ font-weight: var(--fanui-font-weight-extrabold);
638
+ line-height: 1.1;
639
+ letter-spacing: var(--fanui-tracking-tight);
640
+ font-variant-numeric: tabular-nums;
641
+ background-image: linear-gradient(120deg, var(--fanui-brand-grad-a), var(--fanui-brand-grad-b));
642
+ -webkit-background-clip: text;
643
+ background-clip: text;
644
+ color: transparent;
645
+ -webkit-text-fill-color: transparent;
646
+ }
647
+ .fanui-stat-band__label {
648
+ font-size: var(--fanui-font-size-sm);
649
+ color: var(--fanui-color-text-muted);
650
+ }
651
+
652
+ .fanui-pricing__switch {
653
+ display: inline-flex;
654
+ align-items: center;
655
+ gap: var(--fanui-space-3);
656
+ margin: 0 auto var(--fanui-space-8);
657
+ }
658
+ .fanui-pricing__save {
659
+ padding: 2px 8px;
660
+ font-size: var(--fanui-font-size-xs);
661
+ color: var(--fanui-success-ink);
662
+ background-color: var(--fanui-success-soft);
663
+ border-radius: var(--fanui-radius-full);
664
+ }
665
+ .fanui-pricing__grid {
666
+ display: grid;
667
+ grid-template-columns: repeat(var(--fanui-pricing-cols, 3), minmax(0, 1fr));
668
+ gap: var(--fanui-space-5);
669
+ align-items: start;
670
+ }
671
+ @media (max-width: 991.95px) {
672
+ .fanui-pricing__grid {
673
+ grid-template-columns: 1fr;
674
+ max-width: 460px;
675
+ margin-inline: auto;
676
+ }
677
+ }
678
+ .fanui-pricing__plan {
679
+ position: relative;
680
+ display: flex;
681
+ flex-direction: column;
682
+ gap: var(--fanui-space-4);
683
+ padding: var(--fanui-space-6);
684
+ border-radius: var(--fanui-radius-2xl);
685
+ position: relative;
686
+ isolation: isolate;
687
+ background-color: rgba(var(--fanui-glass-tint-rgb), calc(var(--fanui-glass-tint-base) + var(--fanui-glass-tint-k) * var(--fanui-glass-intensity)));
688
+ background-image: radial-gradient(calc(var(--fanui-glass-specular-size-base) + var(--fanui-glass-specular-size-k) * var(--fanui-glass-intensity)) circle at var(--fanui-glass-mx, 30%) var(--fanui-glass-my, 0%), rgba(var(--fanui-glass-specular-rgb), calc(var(--fanui-glass-specular-a) * var(--fanui-glass-intensity) * var(--fanui-glass-specular-alpha))), transparent 70%), linear-gradient(180deg, rgba(255, 255, 255, calc(var(--fanui-glass-sheen-a) * var(--fanui-glass-intensity))) 0%, rgba(255, 255, 255, 0) 46%);
689
+ background-repeat: no-repeat;
690
+ background-size: 100% 100%;
691
+ border: 1px solid rgba(var(--fanui-glass-border-rgb), calc(var(--fanui-glass-border-a) + var(--fanui-glass-border-k) * var(--fanui-glass-intensity)));
692
+ border-radius: var(--fanui-glass-radius, 12px);
693
+ color: var(--fanui-color-text);
694
+ backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
695
+ -webkit-backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
696
+ box-shadow: 0 calc(var(--fanui-glass-shadow-y-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-blur-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-spread-k) * var(--fanui-glass-intensity)) rgba(var(--fanui-glass-shadow-rgb), calc(var(--fanui-glass-shadow-a) + var(--fanui-glass-shadow-k) * var(--fanui-glass-intensity))), inset 0 1px 0 rgba(255, 255, 255, calc(var(--fanui-glass-inner-hi) * min(1, var(--fanui-glass-intensity))));
697
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
698
+ }
699
+ .fanui-pricing__plan::after {
700
+ content: "";
701
+ position: absolute;
702
+ inset: 0;
703
+ z-index: 1;
704
+ border-radius: inherit;
705
+ pointer-events: none;
706
+ padding: var(--fanui-glass-edge-width, calc(1px + 0.5px * var(--fanui-glass-intensity)));
707
+ background: linear-gradient(var(--fanui-glass-edge-angle, 150deg), rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 0%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 38%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 62%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 100%);
708
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
709
+ mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
710
+ -webkit-mask-composite: xor;
711
+ mask-composite: exclude;
712
+ opacity: var(--fanui-glass-edge-alpha, 1);
713
+ }
714
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
715
+ .fanui-pricing__plan {
716
+ background-color: var(--fanui-glass-fallback-bg);
717
+ background-image: none;
718
+ }
719
+ }
720
+ .fanui-pricing__plan {
721
+ transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s, box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
722
+ }
723
+ .fanui-pricing__plan:hover {
724
+ transform: translateY(-3px);
725
+ }
726
+ .fanui-pricing__plan--featured {
727
+ border-color: transparent;
728
+ box-shadow: 0 0 0 2px var(--fanui-primary), var(--fanui-glass-shadow);
729
+ }
730
+ @media (min-width: 992px) {
731
+ .fanui-pricing__plan--featured {
732
+ transform: scale(1.03);
733
+ }
734
+ }
735
+ .fanui-pricing__plan--featured:hover {
736
+ transform: translateY(-3px) scale(1.03);
737
+ }
738
+ .fanui-pricing__tag {
739
+ position: absolute;
740
+ inset-block-start: -12px;
741
+ inset-inline-start: var(--fanui-space-6);
742
+ padding: 3px 10px;
743
+ font-size: var(--fanui-font-size-xs);
744
+ font-weight: var(--fanui-font-weight-semibold);
745
+ color: #fff;
746
+ background-image: var(--fanui-brand-grad);
747
+ border-radius: var(--fanui-radius-full);
748
+ }
749
+ .fanui-pricing__name {
750
+ font-size: var(--fanui-font-size-md);
751
+ font-weight: var(--fanui-font-weight-semibold);
752
+ color: var(--fanui-color-text-strong);
753
+ }
754
+ .fanui-pricing__desc {
755
+ font-size: var(--fanui-font-size-sm);
756
+ color: var(--fanui-color-text-muted);
757
+ }
758
+ .fanui-pricing__price {
759
+ display: flex;
760
+ align-items: flex-end;
761
+ gap: var(--fanui-space-1);
762
+ font-variant-numeric: tabular-nums;
763
+ }
764
+ .fanui-pricing__price strong {
765
+ font-size: clamp(2rem, 3.4vw, 2.75rem);
766
+ font-weight: var(--fanui-font-weight-extrabold);
767
+ line-height: 1;
768
+ letter-spacing: var(--fanui-tracking-tight);
769
+ color: var(--fanui-color-text-strong);
770
+ }
771
+ .fanui-pricing__price span {
772
+ font-size: var(--fanui-font-size-sm);
773
+ color: var(--fanui-color-text-subtle);
774
+ padding-bottom: 4px;
775
+ }
776
+ .fanui-pricing__features {
777
+ display: flex;
778
+ flex-direction: column;
779
+ gap: var(--fanui-space-2);
780
+ margin: 0;
781
+ padding: 0;
782
+ list-style: none;
783
+ font-size: var(--fanui-font-size-sm);
784
+ color: var(--fanui-color-text-muted);
785
+ }
786
+ .fanui-pricing__features li {
787
+ display: flex;
788
+ align-items: flex-start;
789
+ gap: var(--fanui-space-2);
790
+ }
791
+ .fanui-pricing__features li::before {
792
+ content: "✓";
793
+ flex: 0 0 auto;
794
+ font-size: var(--fanui-font-size-sm);
795
+ color: var(--fanui-primary);
796
+ font-weight: var(--fanui-font-weight-bold);
797
+ }
798
+ .fanui-pricing__features li.is-off {
799
+ opacity: 0.5;
800
+ text-decoration: line-through;
801
+ }
802
+ .fanui-pricing__features li.is-off::before {
803
+ content: "—";
804
+ color: var(--fanui-color-text-subtle);
805
+ }
806
+ .fanui-pricing__foot {
807
+ margin-top: auto;
808
+ }
809
+ .fanui-pricing .fanui-price--yearly {
810
+ display: none;
811
+ }
812
+ .fanui-pricing.is-yearly .fanui-price--monthly {
813
+ display: none;
814
+ }
815
+ .fanui-pricing.is-yearly .fanui-price--yearly {
816
+ display: flex;
817
+ }
818
+
819
+ .fanui-testimonial {
820
+ display: flex;
821
+ flex-direction: column;
822
+ gap: var(--fanui-space-4);
823
+ padding: var(--fanui-space-6);
824
+ border-radius: var(--fanui-radius-xl);
825
+ position: relative;
826
+ isolation: isolate;
827
+ background-color: rgba(var(--fanui-glass-tint-rgb), calc(var(--fanui-glass-tint-base) + var(--fanui-glass-tint-k) * var(--fanui-glass-intensity)));
828
+ background-image: radial-gradient(calc(var(--fanui-glass-specular-size-base) + var(--fanui-glass-specular-size-k) * var(--fanui-glass-intensity)) circle at var(--fanui-glass-mx, 30%) var(--fanui-glass-my, 0%), rgba(var(--fanui-glass-specular-rgb), calc(var(--fanui-glass-specular-a) * var(--fanui-glass-intensity) * var(--fanui-glass-specular-alpha))), transparent 70%), linear-gradient(180deg, rgba(255, 255, 255, calc(var(--fanui-glass-sheen-a) * var(--fanui-glass-intensity))) 0%, rgba(255, 255, 255, 0) 46%);
829
+ background-repeat: no-repeat;
830
+ background-size: 100% 100%;
831
+ border: 1px solid rgba(var(--fanui-glass-border-rgb), calc(var(--fanui-glass-border-a) + var(--fanui-glass-border-k) * var(--fanui-glass-intensity)));
832
+ border-radius: var(--fanui-glass-radius, 12px);
833
+ color: var(--fanui-color-text);
834
+ backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
835
+ -webkit-backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
836
+ box-shadow: 0 calc(var(--fanui-glass-shadow-y-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-blur-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-spread-k) * var(--fanui-glass-intensity)) rgba(var(--fanui-glass-shadow-rgb), calc(var(--fanui-glass-shadow-a) + var(--fanui-glass-shadow-k) * var(--fanui-glass-intensity))), inset 0 1px 0 rgba(255, 255, 255, calc(var(--fanui-glass-inner-hi) * min(1, var(--fanui-glass-intensity))));
837
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
838
+ }
839
+ .fanui-testimonial::after {
840
+ content: "";
841
+ position: absolute;
842
+ inset: 0;
843
+ z-index: 1;
844
+ border-radius: inherit;
845
+ pointer-events: none;
846
+ padding: var(--fanui-glass-edge-width, calc(1px + 0.5px * var(--fanui-glass-intensity)));
847
+ background: linear-gradient(var(--fanui-glass-edge-angle, 150deg), rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 0%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 38%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 62%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 100%);
848
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
849
+ mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
850
+ -webkit-mask-composite: xor;
851
+ mask-composite: exclude;
852
+ opacity: var(--fanui-glass-edge-alpha, 1);
853
+ }
854
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
855
+ .fanui-testimonial {
856
+ background-color: var(--fanui-glass-fallback-bg);
857
+ background-image: none;
858
+ }
859
+ }
860
+ .fanui-testimonial__quote {
861
+ margin: 0;
862
+ font-size: var(--fanui-font-size-md);
863
+ line-height: var(--fanui-line-height-relaxed);
864
+ color: var(--fanui-color-text);
865
+ text-wrap: pretty;
866
+ }
867
+ .fanui-testimonial__quote::before {
868
+ content: "“";
869
+ display: block;
870
+ font-size: 40px;
871
+ line-height: 0.6;
872
+ color: var(--fanui-primary);
873
+ opacity: 0.5;
874
+ }
875
+ .fanui-testimonial__person {
876
+ display: flex;
877
+ align-items: center;
878
+ gap: var(--fanui-space-3);
879
+ margin-top: auto;
880
+ padding-top: var(--fanui-space-3);
881
+ border-top: 1px solid var(--fanui-glass-divider);
882
+ }
883
+ .fanui-testimonial__name {
884
+ font-size: var(--fanui-font-size-sm);
885
+ font-weight: var(--fanui-font-weight-semibold);
886
+ color: var(--fanui-color-text-strong);
887
+ }
888
+ .fanui-testimonial__role {
889
+ font-size: var(--fanui-font-size-xs);
890
+ color: var(--fanui-color-text-subtle);
891
+ }
892
+ .fanui-testimonial--brand {
893
+ background-image: var(--fanui-brand-grad);
894
+ color: var(--fanui-primary-fg);
895
+ border-color: transparent;
896
+ }
897
+ .fanui-testimonial--brand .fanui-testimonial__quote,
898
+ .fanui-testimonial--brand .fanui-testimonial__name,
899
+ .fanui-testimonial--brand .fanui-testimonial__role {
900
+ color: inherit;
901
+ }
902
+ .fanui-testimonial--brand .fanui-testimonial__quote::before {
903
+ color: inherit;
904
+ opacity: 0.4;
905
+ }
906
+ .fanui-testimonial--brand .fanui-testimonial__person {
907
+ border-top-color: rgba(255, 255, 255, 0.25);
908
+ }
909
+
910
+ .fanui-cta {
911
+ position: relative;
912
+ isolation: isolate;
913
+ overflow: hidden;
914
+ display: flex;
915
+ flex-direction: column;
916
+ align-items: center;
917
+ gap: var(--fanui-space-4);
918
+ padding: var(--fanui-space-16) var(--fanui-space-6);
919
+ text-align: center;
920
+ border-radius: var(--fanui-radius-2xl);
921
+ position: relative;
922
+ isolation: isolate;
923
+ background-color: rgba(var(--fanui-glass-tint-rgb), calc(var(--fanui-glass-tint-base) + var(--fanui-glass-tint-k) * var(--fanui-glass-intensity)));
924
+ background-image: radial-gradient(calc(var(--fanui-glass-specular-size-base) + var(--fanui-glass-specular-size-k) * var(--fanui-glass-intensity)) circle at var(--fanui-glass-mx, 30%) var(--fanui-glass-my, 0%), rgba(var(--fanui-glass-specular-rgb), calc(var(--fanui-glass-specular-a) * var(--fanui-glass-intensity) * var(--fanui-glass-specular-alpha))), transparent 70%), linear-gradient(180deg, rgba(255, 255, 255, calc(var(--fanui-glass-sheen-a) * var(--fanui-glass-intensity))) 0%, rgba(255, 255, 255, 0) 46%);
925
+ background-repeat: no-repeat;
926
+ background-size: 100% 100%;
927
+ border: 1px solid rgba(var(--fanui-glass-border-rgb), calc(var(--fanui-glass-border-a) + var(--fanui-glass-border-k) * var(--fanui-glass-intensity)));
928
+ border-radius: var(--fanui-glass-radius, 12px);
929
+ color: var(--fanui-color-text);
930
+ backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
931
+ -webkit-backdrop-filter: blur(calc(var(--fanui-glass-blur-base) * var(--fanui-glass-intensity) * var(--fanui-glass-blur-mode-k, 1))) saturate(calc(100% + var(--fanui-glass-sat-k) * var(--fanui-glass-intensity))) brightness(calc(100% + var(--fanui-glass-bri-k) * var(--fanui-glass-intensity)));
932
+ box-shadow: 0 calc(var(--fanui-glass-shadow-y-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-blur-k) * var(--fanui-glass-intensity)) calc(var(--fanui-glass-shadow-spread-k) * var(--fanui-glass-intensity)) rgba(var(--fanui-glass-shadow-rgb), calc(var(--fanui-glass-shadow-a) + var(--fanui-glass-shadow-k) * var(--fanui-glass-intensity))), inset 0 1px 0 rgba(255, 255, 255, calc(var(--fanui-glass-inner-hi) * min(1, var(--fanui-glass-intensity))));
933
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
934
+ }
935
+ .fanui-cta::after {
936
+ content: "";
937
+ position: absolute;
938
+ inset: 0;
939
+ z-index: 1;
940
+ border-radius: inherit;
941
+ pointer-events: none;
942
+ padding: var(--fanui-glass-edge-width, calc(1px + 0.5px * var(--fanui-glass-intensity)));
943
+ background: linear-gradient(var(--fanui-glass-edge-angle, 150deg), rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 0%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 38%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-lo-a) * var(--fanui-glass-intensity))) 62%, rgba(255, 255, 255, calc(var(--fanui-glass-edge-hi-a) * min(1, var(--fanui-glass-intensity)))) 100%);
944
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
945
+ mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
946
+ -webkit-mask-composite: xor;
947
+ mask-composite: exclude;
948
+ opacity: var(--fanui-glass-edge-alpha, 1);
949
+ }
950
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
951
+ .fanui-cta {
952
+ background-color: var(--fanui-glass-fallback-bg);
953
+ background-image: none;
954
+ }
955
+ }
956
+ .fanui-cta__glow {
957
+ position: absolute;
958
+ inset: -30% -10%;
959
+ z-index: -1;
960
+ pointer-events: none;
961
+ background: radial-gradient(40% 44% at 20% 30%, var(--fanui-brand-aura-a), transparent 60%), radial-gradient(36% 40% at 80% 70%, var(--fanui-brand-aura-b), transparent 58%);
962
+ filter: blur(30px);
963
+ }
964
+ .fanui-cta__title {
965
+ margin: 0;
966
+ max-width: 640px;
967
+ font-size: clamp(1.5rem, 3vw, 2.25rem);
968
+ font-weight: var(--fanui-font-weight-bold);
969
+ letter-spacing: var(--fanui-tracking-tight);
970
+ color: var(--fanui-color-text-strong);
971
+ text-wrap: balance;
972
+ }
973
+ .fanui-cta__desc {
974
+ margin: 0;
975
+ max-width: 520px;
976
+ font-size: var(--fanui-font-size-md);
977
+ color: var(--fanui-color-text-muted);
978
+ }
979
+ .fanui-cta__actions {
980
+ display: flex;
981
+ flex-wrap: wrap;
982
+ gap: var(--fanui-space-3);
983
+ justify-content: center;
984
+ }
985
+
986
+ .fanui-faq {
987
+ display: flex;
988
+ flex-direction: column;
989
+ gap: var(--fanui-space-2);
990
+ }
991
+ .fanui-faq__item {
992
+ border: 1px solid var(--fanui-color-border);
993
+ border-radius: var(--fanui-radius-lg);
994
+ background-color: var(--fanui-color-surface);
995
+ overflow: hidden;
996
+ transition: border-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
997
+ }
998
+ .fanui-faq__item[open] {
999
+ border-color: var(--fanui-primary-border);
1000
+ background-color: var(--fanui-primary-soft);
1001
+ }
1002
+ .fanui-faq__q {
1003
+ display: flex;
1004
+ align-items: center;
1005
+ justify-content: space-between;
1006
+ gap: var(--fanui-space-3);
1007
+ padding: var(--fanui-space-4) var(--fanui-space-5);
1008
+ font-size: var(--fanui-font-size-sm);
1009
+ font-weight: var(--fanui-font-weight-semibold);
1010
+ color: var(--fanui-color-text-strong);
1011
+ cursor: pointer;
1012
+ list-style: none;
1013
+ }
1014
+ .fanui-faq__q::-webkit-details-marker {
1015
+ display: none;
1016
+ }
1017
+ .fanui-faq__q::after {
1018
+ content: "+";
1019
+ flex: 0 0 auto;
1020
+ font-size: 18px;
1021
+ font-weight: var(--fanui-font-weight-normal);
1022
+ color: var(--fanui-color-text-muted);
1023
+ transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
1024
+ }
1025
+ .fanui-faq__item[open] .fanui-faq__q::after {
1026
+ transform: rotate(45deg);
1027
+ }
1028
+ .fanui-faq__a {
1029
+ padding: 0 var(--fanui-space-5) var(--fanui-space-4);
1030
+ font-size: var(--fanui-font-size-sm);
1031
+ line-height: var(--fanui-line-height-relaxed);
1032
+ color: var(--fanui-color-text-muted);
1033
+ }
1034
+
1035
+ .fanui-footer {
1036
+ padding-block: var(--fanui-space-16) var(--fanui-space-8);
1037
+ border-top: 1px solid var(--fanui-color-border);
1038
+ background-color: var(--fanui-color-bg-subtle);
1039
+ font-size: var(--fanui-font-size-sm);
1040
+ }
1041
+ .fanui-footer__grid {
1042
+ display: grid;
1043
+ grid-template-columns: 1.6fr repeat(var(--fanui-footer-cols, 3), 1fr);
1044
+ gap: var(--fanui-space-8);
1045
+ }
1046
+ @media (max-width: 767.95px) {
1047
+ .fanui-footer__grid {
1048
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1049
+ }
1050
+ }
1051
+ .fanui-footer__brand {
1052
+ display: flex;
1053
+ flex-direction: column;
1054
+ gap: var(--fanui-space-3);
1055
+ max-width: 320px;
1056
+ }
1057
+ .fanui-footer__logo {
1058
+ display: inline-flex;
1059
+ align-items: center;
1060
+ gap: var(--fanui-space-2);
1061
+ font-size: var(--fanui-font-size-lg);
1062
+ font-weight: var(--fanui-font-weight-bold);
1063
+ color: var(--fanui-color-text-strong);
1064
+ text-decoration: none;
1065
+ }
1066
+ .fanui-footer__desc {
1067
+ margin: 0;
1068
+ line-height: var(--fanui-line-height-relaxed);
1069
+ color: var(--fanui-color-text-muted);
1070
+ }
1071
+ .fanui-footer__title {
1072
+ margin: 0 0 var(--fanui-space-3);
1073
+ font-size: var(--fanui-font-size-sm);
1074
+ font-weight: var(--fanui-font-weight-semibold);
1075
+ color: var(--fanui-color-text-strong);
1076
+ }
1077
+ .fanui-footer__list {
1078
+ display: flex;
1079
+ flex-direction: column;
1080
+ gap: var(--fanui-space-2);
1081
+ margin: 0;
1082
+ padding: 0;
1083
+ list-style: none;
1084
+ }
1085
+ .fanui-footer__list a {
1086
+ color: var(--fanui-color-text-muted);
1087
+ text-decoration: none;
1088
+ transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
1089
+ }
1090
+ .fanui-footer__list a:hover {
1091
+ color: var(--fanui-primary);
1092
+ }
1093
+ .fanui-footer__bottom {
1094
+ display: flex;
1095
+ flex-wrap: wrap;
1096
+ align-items: center;
1097
+ justify-content: space-between;
1098
+ gap: var(--fanui-space-3);
1099
+ margin-top: var(--fanui-space-10);
1100
+ padding-top: var(--fanui-space-5);
1101
+ border-top: 1px solid var(--fanui-color-border-subtle);
1102
+ font-size: var(--fanui-font-size-xs);
1103
+ color: var(--fanui-color-text-subtle);
1104
+ }
1105
+ .fanui-footer__social {
1106
+ display: flex;
1107
+ gap: var(--fanui-space-2);
1108
+ }
1109
+ .fanui-footer__social a {
1110
+ display: grid;
1111
+ place-items: center;
1112
+ width: 32px;
1113
+ height: 32px;
1114
+ border-radius: var(--fanui-radius-full);
1115
+ color: var(--fanui-color-text-muted);
1116
+ background-color: var(--fanui-color-surface);
1117
+ border: 1px solid var(--fanui-color-border);
1118
+ text-decoration: none;
1119
+ transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
1120
+ }
1121
+ .fanui-footer__social a:hover {
1122
+ color: var(--fanui-primary);
1123
+ border-color: var(--fanui-primary-border);
1124
+ transform: translateY(-2px);
1125
+ }