@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,108 @@
1
+ .fanui-read-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--fanui-space-2);font-size:var(--fanui-font-size-sm);color:var(--fanui-color-text-subtle)}
2
+ .fanui-read-meta__dot{width:3px;height:3px;border-radius:var(--fanui-radius-full);background-color:currentColor;opacity:0.6}
3
+ .fanui-read-meta__author{display:inline-flex;align-items:center;gap:var(--fanui-space-2);color:var(--fanui-color-text-muted);font-weight:var(--fanui-font-weight-medium)}
4
+ .fanui-read-meta__badge{padding:1px 8px;font-size:var(--fanui-font-size-xs);font-weight:var(--fanui-font-weight-semibold);color:var(--fanui-primary-ink);background-color:var(--fanui-primary-soft-2);border-radius:var(--fanui-radius-full)}
5
+ .fanui-post-card{position:relative;display:flex;flex-direction:column;gap:var(--fanui-space-3);overflow:hidden;border:1px solid var(--fanui-color-border);border-radius:var(--fanui-radius-xl);background-color:var(--fanui-color-surface);text-decoration:none;color:inherit;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}
6
+ .fanui-post-card:hover{transform:translateY(-3px);border-color:var(--fanui-primary-border);box-shadow:var(--fanui-shadow-lg)}
7
+ .fanui-post-card:hover .fanui-post-card__cover img{transform:scale(1.04)}
8
+ .fanui-post-card:hover .fanui-post-card__title{color:var(--fanui-primary)}
9
+ .fanui-post-card__cover{position:relative;aspect-ratio:16/9;overflow:hidden;background-image:var(--fanui-brand-grad-soft)}
10
+ .fanui-post-card__cover img{width:100%;height:100%;object-fit:cover;transition:transform 500ms cubic-bezier(0.4,0,0.2,1) 0s}
11
+ .fanui-post-card__cover::after{content:"";position:absolute;inset:0;box-shadow:inset 0 -1px 0 rgba(2,6,23,0.06)}
12
+ .fanui-post-card__body{display:flex;flex-direction:column;gap:var(--fanui-space-2);padding:var(--fanui-space-5)}
13
+ .fanui-post-card__eyebrow{display:inline-flex;align-items:center;gap:var(--fanui-space-2);font-size:var(--fanui-font-size-xs);font-weight:var(--fanui-font-weight-semibold);letter-spacing:var(--fanui-tracking-wide);text-transform:uppercase;color:var(--fanui-primary)}
14
+ .fanui-post-card__title{margin:0;font-size:var(--fanui-font-size-lg);font-weight:var(--fanui-font-weight-semibold);line-height:var(--fanui-line-height-snug);color:var(--fanui-color-text-strong);transition:color 150ms cubic-bezier(0.4,0,0.2,1) 0s;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}
15
+ .fanui-post-card__excerpt{margin:0;font-size:var(--fanui-font-size-sm);line-height:var(--fanui-line-height-relaxed);color:var(--fanui-color-text-muted);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}
16
+ .fanui-post-card__foot{display:flex;align-items:center;justify-content:space-between;gap:var(--fanui-space-3);margin-top:auto;padding-top:var(--fanui-space-3);border-top:1px solid var(--fanui-color-border-subtle);font-size:var(--fanui-font-size-xs);color:var(--fanui-color-text-subtle)}
17
+ .fanui-post-card--horizontal{flex-direction:row;align-items:stretch}
18
+ .fanui-post-card--horizontal .fanui-post-card__cover{flex:0 0 38%;aspect-ratio:auto;min-height:132px}
19
+ .fanui-post-card--horizontal .fanui-post-card__body{justify-content:center}@media (max-width:575.95px){.fanui-post-card--horizontal{flex-direction:column}
20
+ .fanui-post-card--horizontal .fanui-post-card__cover{aspect-ratio:16/9;flex:none}}
21
+ .fanui-post-card--plain{border:0;border-radius:0;border-bottom:1px solid var(--fanui-color-border-subtle);background:transparent}
22
+ .fanui-post-card--plain:hover{transform:none;box-shadow:none}
23
+ .fanui-post-card--plain .fanui-post-card__body{padding:var(--fanui-space-4) 0}
24
+ .fanui-post-card--overlay{position:relative;border:0;justify-content:flex-end;min-height:260px;background:linear-gradient(180deg,transparent 30%,rgba(2,6,23,0.72) 100%)}
25
+ .fanui-post-card--overlay .fanui-post-card__cover{position:absolute;inset:0;aspect-ratio:auto}
26
+ .fanui-post-card--overlay .fanui-post-card__cover::after{background:linear-gradient(180deg,transparent 24%,rgba(2,6,23,0.78) 100%)}
27
+ .fanui-post-card--overlay .fanui-post-card__body{position:relative;z-index:1;color:#ffffff}
28
+ .fanui-post-card--overlay .fanui-post-card__title,.fanui-post-card--overlay .fanui-post-card__excerpt,.fanui-post-card--overlay .fanui-post-card__eyebrow{color:#ffffff}
29
+ .fanui-post-card--overlay .fanui-post-card__excerpt{opacity:0.85}
30
+ .fanui-post-card--overlay .fanui-post-card__foot{border-top-color:rgba(255,255,255,0.24);color:rgba(255,255,255,0.8)}
31
+ .fanui-article{max-width:var(--fanui-article-width,720px);margin-inline:auto}
32
+ .fanui-article__header{display:flex;flex-direction:column;gap:var(--fanui-space-4);padding-block:var(--fanui-space-8) var(--fanui-space-6);text-align:center;align-items:center}
33
+ .fanui-article__eyebrow{font-size:var(--fanui-font-size-sm);font-weight:var(--fanui-font-weight-semibold);letter-spacing:var(--fanui-tracking-wider);text-transform:uppercase;color:var(--fanui-primary)}
34
+ .fanui-article__title{margin:0;font-size:clamp(1.75rem,4vw,2.75rem);font-weight:var(--fanui-font-weight-extrabold);line-height:1.15;letter-spacing:var(--fanui-tracking-tight);color:var(--fanui-color-text-strong);text-wrap:balance}
35
+ .fanui-article__lead{margin:0;max-width:620px;font-size:var(--fanui-font-size-lg);line-height:var(--fanui-line-height-relaxed);color:var(--fanui-color-text-muted);text-wrap:pretty}
36
+ .fanui-article__cover{margin-block:var(--fanui-space-6);border-radius:var(--fanui-radius-2xl);overflow:hidden}
37
+ .fanui-article__cover img{display:block;width:100%;height:auto}
38
+ .fanui-article__footer{display:flex;flex-direction:column;gap:var(--fanui-space-6);margin-top:var(--fanui-space-10);padding-top:var(--fanui-space-8);border-top:1px solid var(--fanui-color-border)}
39
+ .fanui-article__callout{display:flex;gap:var(--fanui-space-3);margin-block:var(--fanui-space-6);padding:var(--fanui-space-4) var(--fanui-space-5);border-inline-start:3px solid var(--fanui-primary);border-radius:var(--fanui-radius-md);background-color:var(--fanui-primary-soft);color:var(--fanui-primary-ink);font-size:var(--fanui-font-size-sm);line-height:var(--fanui-line-height-relaxed)}
40
+ .fanui-article--with-toc{display:grid;grid-template-columns:minmax(0,1fr) 240px;gap:var(--fanui-space-12);max-width:1080px}@media (max-width:991.95px){.fanui-article--with-toc{grid-template-columns:minmax(0,1fr)}}
41
+ .fanui-toc{position:sticky;top:calc(var(--fanui-space-10) + 60px);align-self:start;max-height:calc(100vh - 140px);overflow-y:auto;padding-inline-start:var(--fanui-space-4);border-inline-start:1px solid var(--fanui-color-border);font-size:var(--fanui-font-size-sm);scrollbar-width:thin;scrollbar-color:rgba(100,116,139,0.45) transparent}
42
+ .fanui-toc::-webkit-scrollbar{width:6px;height:6px}
43
+ .fanui-toc::-webkit-scrollbar-track{background:transparent}
44
+ .fanui-toc::-webkit-scrollbar-thumb{background:rgba(100,116,139,0.45);border-radius:9999px}
45
+ .fanui-toc::-webkit-scrollbar-thumb:hover{background:rgba(100,116,139,0.7)}@media (max-width:991.95px){.fanui-toc{position:static;max-height:none;margin-bottom:var(--fanui-space-6)}}
46
+ .fanui-toc__title{margin-bottom:var(--fanui-space-3);font-size:var(--fanui-font-size-xs);font-weight:var(--fanui-font-weight-semibold);letter-spacing:var(--fanui-tracking-wider);text-transform:uppercase;color:var(--fanui-color-text-subtle)}
47
+ .fanui-toc__list{display:flex;flex-direction:column;gap:2px;margin:0;padding:0;list-style:none}
48
+ .fanui-toc__link{display:block;padding:5px 10px;border-radius:var(--fanui-radius-sm);color:var(--fanui-color-text-muted);text-decoration:none;line-height:var(--fanui-line-height-snug);border-inline-start:2px solid transparent;transition:color 150ms cubic-bezier(0.4,0,0.2,1) 0s,background-color 150ms cubic-bezier(0.4,0,0.2,1) 0s,border-color 150ms cubic-bezier(0.4,0,0.2,1) 0s}
49
+ .fanui-toc__link:hover{color:var(--fanui-color-text);background-color:var(--fanui-color-hover)}
50
+ .fanui-toc__link.is-active{color:var(--fanui-primary);border-inline-start-color:var(--fanui-primary);background-color:var(--fanui-primary-soft);font-weight:var(--fanui-font-weight-medium)}
51
+ .fanui-toc__list .fanui-toc__list{margin-inline-start:var(--fanui-space-3)}
52
+ .fanui-toc__progress{margin-top:var(--fanui-space-4);padding-top:var(--fanui-space-3);border-top:1px solid var(--fanui-color-border-subtle);font-size:var(--fanui-font-size-xs);color:var(--fanui-color-text-subtle);font-variant-numeric:tabular-nums}
53
+ .fanui-author{display:flex;gap:var(--fanui-space-4);padding:var(--fanui-space-5);border-radius:var(--fanui-radius-xl);position:relative;isolation:isolate;background-color:rgba(var(--fanui-glass-tint-rgb),calc(var(--fanui-glass-tint-base) + var(--fanui-glass-tint-k) * var(--fanui-glass-intensity)));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%);background-repeat:no-repeat;background-size:100% 100%;border:1px solid rgba(var(--fanui-glass-border-rgb),calc(var(--fanui-glass-border-a) + var(--fanui-glass-border-k) * var(--fanui-glass-intensity)));border-radius:var(--fanui-glass-radius,12px);color:var(--fanui-color-text);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)));-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)));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))));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}
54
+ .fanui-author::after{content:"";position:absolute;inset:0;z-index:1;border-radius:inherit;pointer-events:none;padding:var(--fanui-glass-edge-width,calc(1px + 0.5px * var(--fanui-glass-intensity)));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%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:var(--fanui-glass-edge-alpha,1)}@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.fanui-author{background-color:var(--fanui-glass-fallback-bg);background-image:none}}
55
+ .fanui-author__avatar{flex:0 0 auto;width:56px;height:56px;border-radius:var(--fanui-radius-full);overflow:hidden;background-image:var(--fanui-brand-grad);display:grid;place-items:center;color:#fff;font-weight:var(--fanui-font-weight-semibold)}
56
+ .fanui-author__avatar img{width:100%;height:100%;object-fit:cover}
57
+ .fanui-author__body{display:flex;flex-direction:column;gap:var(--fanui-space-1);min-width:0}
58
+ .fanui-author__name{font-size:var(--fanui-font-size-md);font-weight:var(--fanui-font-weight-semibold);color:var(--fanui-color-text-strong)}
59
+ .fanui-author__role{font-size:var(--fanui-font-size-xs);color:var(--fanui-color-text-subtle)}
60
+ .fanui-author__bio{margin:var(--fanui-space-1) 0 0;font-size:var(--fanui-font-size-sm);line-height:var(--fanui-line-height-relaxed);color:var(--fanui-color-text-muted)}
61
+ .fanui-author__links{display:flex;gap:var(--fanui-space-2);margin-top:var(--fanui-space-2)}
62
+ .fanui-author__links a{font-size:var(--fanui-font-size-xs);color:var(--fanui-primary);text-decoration:none}
63
+ .fanui-author__links a:hover{text-decoration:underline}
64
+ .fanui-share{display:flex;align-items:center;gap:var(--fanui-space-2)}
65
+ .fanui-share__label{font-size:var(--fanui-font-size-xs);color:var(--fanui-color-text-subtle);margin-inline-end:var(--fanui-space-1)}
66
+ .fanui-share__btn{display:grid;place-items:center;width:34px;height:34px;border:1px solid var(--fanui-color-border);border-radius:var(--fanui-radius-full);background-color:var(--fanui-color-surface);color:var(--fanui-color-text-muted);cursor:pointer;text-decoration:none;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,background-color 150ms cubic-bezier(0.4,0,0.2,1) 0s}
67
+ .fanui-share__btn:hover{color:var(--fanui-primary-fg);background-color:var(--fanui-primary);border-color:var(--fanui-primary);transform:translateY(-2px)}
68
+ .fanui-share--sticky{position:sticky;top:calc(var(--fanui-space-10) + 60px);flex-direction:column;align-self:start}
69
+ .fanui-share--sticky .fanui-share__label{writing-mode:vertical-rl;margin:0 0 var(--fanui-space-1)}@media (max-width:991.95px){.fanui-share--sticky{position:static;flex-direction:row}
70
+ .fanui-share--sticky .fanui-share__label{writing-mode:horizontal-tb;margin:0 var(--fanui-space-1) 0 0}}
71
+ .fanui-comment{display:flex;gap:var(--fanui-space-3)}
72
+ .fanui-comment__avatar{flex:0 0 auto;width:36px;height:36px;border-radius:var(--fanui-radius-full);overflow:hidden;display:grid;place-items:center;background-color:var(--fanui-primary-soft-2);color:var(--fanui-primary-ink);font-size:var(--fanui-font-size-sm);font-weight:var(--fanui-font-weight-semibold)}
73
+ .fanui-comment__body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:var(--fanui-space-1)}
74
+ .fanui-comment__head{display:flex;align-items:center;gap:var(--fanui-space-2);font-size:var(--fanui-font-size-sm)}
75
+ .fanui-comment__name{font-weight:var(--fanui-font-weight-semibold);color:var(--fanui-color-text-strong)}
76
+ .fanui-comment__time{font-size:var(--fanui-font-size-xs);color:var(--fanui-color-text-subtle)}
77
+ .fanui-comment__text{font-size:var(--fanui-font-size-sm);line-height:var(--fanui-line-height-relaxed);color:var(--fanui-color-text)}
78
+ .fanui-comment__actions{display:flex;gap:var(--fanui-space-3);margin-top:var(--fanui-space-1);font-size:var(--fanui-font-size-xs);color:var(--fanui-color-text-subtle)}
79
+ .fanui-comment__actions button{border:0;background:transparent;padding:0;font:inherit;color:inherit;cursor:pointer}
80
+ .fanui-comment__actions button:hover{color:var(--fanui-primary)}
81
+ .fanui-comment__replies{display:flex;flex-direction:column;gap:var(--fanui-space-4);margin-top:var(--fanui-space-4);padding-inline-start:var(--fanui-space-5);border-inline-start:2px solid var(--fanui-color-border-subtle)}
82
+ .fanui-comment--pinned{padding:var(--fanui-space-4);border-radius:var(--fanui-radius-lg);background-color:var(--fanui-primary-soft)}
83
+ .fanui-comment-list{display:flex;flex-direction:column;gap:var(--fanui-space-6);margin:0;padding:0;list-style:none}
84
+ .fanui-newsletter{display:flex;flex-direction:column;gap:var(--fanui-space-3);padding:var(--fanui-space-6);border-radius:var(--fanui-radius-2xl);position:relative;isolation:isolate;background-color:rgba(var(--fanui-glass-tint-rgb),calc(var(--fanui-glass-tint-base) + var(--fanui-glass-tint-k) * var(--fanui-glass-intensity)));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%);background-repeat:no-repeat;background-size:100% 100%;border:1px solid rgba(var(--fanui-glass-border-rgb),calc(var(--fanui-glass-border-a) + var(--fanui-glass-border-k) * var(--fanui-glass-intensity)));border-radius:var(--fanui-glass-radius,12px);color:var(--fanui-color-text);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)));-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)));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))));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}
85
+ .fanui-newsletter::after{content:"";position:absolute;inset:0;z-index:1;border-radius:inherit;pointer-events:none;padding:var(--fanui-glass-edge-width,calc(1px + 0.5px * var(--fanui-glass-intensity)));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%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:var(--fanui-glass-edge-alpha,1)}@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.fanui-newsletter{background-color:var(--fanui-glass-fallback-bg);background-image:none}}
86
+ .fanui-newsletter__title{margin:0;font-size:var(--fanui-font-size-lg);font-weight:var(--fanui-font-weight-semibold);color:var(--fanui-color-text-strong)}
87
+ .fanui-newsletter__desc{margin:0;font-size:var(--fanui-font-size-sm);line-height:var(--fanui-line-height-relaxed);color:var(--fanui-color-text-muted)}
88
+ .fanui-newsletter__form{display:flex;gap:var(--fanui-space-2)}@media (max-width:575.95px){.fanui-newsletter__form{flex-direction:column}}
89
+ .fanui-newsletter__input{display:block;width:100%;min-height:36px;padding:6.5px 14px;font-family:inherit;font-size:14px;line-height:1.5;color:var(--fanui-color-text);background-color:var(--fanui-color-surface);border:1px solid var(--fanui-color-border);border-radius:6px;box-sizing:border-box;appearance:none;-webkit-appearance:none;-moz-appearance:none;background-clip:padding-box;transition:border-color 150ms cubic-bezier(0.4,0,0.2,1) 0s,box-shadow 150ms cubic-bezier(0.4,0,0.2,1) 0s,background-color 150ms cubic-bezier(0.4,0,0.2,1) 0s}
90
+ .fanui-newsletter__input::placeholder{color:var(--fanui-color-text-subtle);opacity:1}
91
+ .fanui-newsletter__input::-webkit-input-placeholder{color:var(--fanui-color-text-subtle);opacity:1}
92
+ .fanui-newsletter__input::-moz-placeholder{color:var(--fanui-color-text-subtle);opacity:1}
93
+ .fanui-newsletter__input:-ms-input-placeholder{color:var(--fanui-color-text-subtle);opacity:1}
94
+ .fanui-newsletter__input:hover:not(:disabled):not(.is-disabled){border-color:var(--fanui-color-border-strong)}
95
+ .fanui-newsletter__input:focus,.fanui-newsletter__input:focus-visible{border-color:var(--fanui-primary);outline:0;box-shadow:0 0 0 var(--fanui-focus-ring-offset,1px) var(--fanui-color-surface,#fff),0 0 0 calc(var(--fanui-focus-ring-offset,1px) + var(--fanui-focus-ring-width,3px)) var(--fanui-focus-ring-color,rgba(14,116,144,0.3))}@media (forced-colors:active){.fanui-newsletter__input:focus,.fanui-newsletter__input:focus-visible{outline:2px solid transparent;outline-offset:2px}}
96
+ .fanui-newsletter__input:disabled,.fanui-newsletter__input.is-disabled{background-color:var(--fanui-color-disabled-bg);color:var(--fanui-color-disabled-text);cursor:not-allowed;resize:none}
97
+ .fanui-newsletter__input[readonly]{background-color:var(--fanui-color-surface-sunken)}
98
+ .fanui-newsletter__input{flex:1 1 auto}
99
+ .fanui-newsletter__note{font-size:var(--fanui-font-size-xs);color:var(--fanui-color-text-subtle)}
100
+ .fanui-newsletter--inline{flex-direction:row;align-items:center;justify-content:space-between;gap:var(--fanui-space-6);flex-wrap:wrap}
101
+ .fanui-newsletter--inline .fanui-newsletter__form{flex:1 1 320px}
102
+ .fanui-related{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--fanui-space-5)}
103
+ .fanui-related__title{grid-column:1/-1;margin:0 0 var(--fanui-space-2);font-size:var(--fanui-font-size-lg);font-weight:var(--fanui-font-weight-semibold);color:var(--fanui-color-text-strong)}
104
+ .fanui-tag-cloud{display:flex;flex-wrap:wrap;gap:var(--fanui-space-2)}
105
+ .fanui-tag-cloud__item{display:inline-flex;align-items:center;gap:var(--fanui-space-1);padding:4px 12px;font-size:var(--fanui-font-size-sm);color:var(--fanui-color-text-muted);background-color:var(--fanui-color-surface);border:1px solid var(--fanui-color-border);border-radius:var(--fanui-radius-full);text-decoration:none;transition:color 150ms cubic-bezier(0.4,0,0.2,1) 0s,border-color 150ms cubic-bezier(0.4,0,0.2,1) 0s,background-color 150ms cubic-bezier(0.4,0,0.2,1) 0s,transform 150ms cubic-bezier(0.4,0,0.2,1) 0s}
106
+ .fanui-tag-cloud__item:hover{color:var(--fanui-primary-ink);background-color:var(--fanui-primary-soft);border-color:var(--fanui-primary-border);transform:translateY(-1px)}
107
+ .fanui-tag-cloud__item--active{color:var(--fanui-primary-fg);background-color:var(--fanui-primary);border-color:var(--fanui-primary)}
108
+ .fanui-tag-cloud__count{font-size:var(--fanui-font-size-xs);opacity:0.7;font-variant-numeric:tabular-nums}
@@ -0,0 +1,526 @@
1
+ /* fanUI v2.1.0 · module: button(独立产物,自带令牌) */
2
+ .fanui-btn {
3
+ --fanui-btn-bg: var(--fanui-primary);
4
+ --fanui-btn-fg: var(--fanui-primary-fg, #fff);
5
+ --fanui-btn-border: var(--fanui-primary);
6
+ --fanui-btn-hover-bg: var(--fanui-primary-hover);
7
+ --fanui-btn-hover-fg: var(--fanui-primary-fg, #fff);
8
+ --fanui-btn-hover-border: var(--fanui-primary-hover);
9
+ --fanui-btn-active-bg: var(--fanui-primary-active);
10
+ --fanui-btn-active-fg: var(--fanui-primary-fg, #fff);
11
+ --fanui-btn-active-border: var(--fanui-primary-active);
12
+ --fanui-btn-ring: var(--fanui-primary-ring);
13
+ --fanui-btn-height: var(--fanui-control-h, 36px);
14
+ --fanui-btn-padding-x: var(--fanui-control-px, 14px);
15
+ --fanui-btn-font-size: var(--fanui-font-size-base);
16
+ --fanui-btn-radius: var(--fanui-radius-base);
17
+ --fanui-btn-gap: 6px;
18
+ position: relative;
19
+ display: inline-flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ gap: var(--fanui-btn-gap);
23
+ min-height: var(--fanui-btn-height);
24
+ padding: 0 var(--fanui-btn-padding-x);
25
+ font-family: inherit;
26
+ font-size: var(--fanui-btn-font-size);
27
+ font-weight: 500;
28
+ line-height: 1;
29
+ white-space: nowrap;
30
+ vertical-align: middle;
31
+ text-decoration: none;
32
+ text-align: center;
33
+ color: var(--fanui-btn-fg);
34
+ background-color: var(--fanui-btn-bg);
35
+ border: 1px solid var(--fanui-btn-border);
36
+ border-radius: var(--fanui-btn-radius);
37
+ cursor: pointer;
38
+ user-select: none;
39
+ box-sizing: border-box;
40
+ overflow: hidden;
41
+ transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, opacity 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
42
+ appearance: none;
43
+ -webkit-appearance: none;
44
+ -moz-appearance: none;
45
+ background-clip: padding-box;
46
+ }
47
+ .fanui-btn:hover:not(:disabled):not(.is-disabled) {
48
+ color: var(--fanui-btn-hover-fg);
49
+ background-color: var(--fanui-btn-hover-bg);
50
+ border-color: var(--fanui-btn-hover-border);
51
+ text-decoration: none;
52
+ }
53
+ .fanui-btn:active:not(:disabled):not(.is-disabled), .fanui-btn.is-active {
54
+ color: var(--fanui-btn-active-fg);
55
+ background-color: var(--fanui-btn-active-bg);
56
+ border-color: var(--fanui-btn-active-border);
57
+ }
58
+ .fanui-btn:focus-visible {
59
+ outline: 0;
60
+ box-shadow: 0 0 0 var(--fanui-btn-ring);
61
+ }
62
+ .fanui-btn > svg,
63
+ .fanui-btn .fanui-btn__icon {
64
+ flex: 0 0 auto;
65
+ width: 1em;
66
+ height: 1em;
67
+ font-size: 1.15em;
68
+ line-height: 1;
69
+ display: inline-flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ pointer-events: none;
73
+ }
74
+ .fanui-btn:disabled, .fanui-btn.is-disabled, .fanui-btn[aria-disabled=true] {
75
+ opacity: 0.55;
76
+ cursor: not-allowed;
77
+ pointer-events: none;
78
+ box-shadow: none;
79
+ }
80
+ .fanui-btn[aria-busy=true] {
81
+ pointer-events: none;
82
+ }
83
+
84
+ .fanui-btn--primary {
85
+ --fanui-btn-bg: var(--fanui-primary, #0e7490);
86
+ --fanui-btn-fg: var(--fanui-primary-fg, #ffffff);
87
+ --fanui-btn-border: var(--fanui-primary, #0e7490);
88
+ --fanui-btn-hover-bg: var(--fanui-primary-hover, rgb(4.9411764706%, 40.9411764706%, 50.8235294118%));
89
+ --fanui-btn-hover-fg: var(--fanui-primary-fg, #ffffff);
90
+ --fanui-btn-hover-border: var(--fanui-primary-hover, rgb(4.9411764706%, 40.9411764706%, 50.8235294118%));
91
+ --fanui-btn-active-bg: var(--fanui-primary-active, rgb(4.5019607843%, 37.3019607843%, 46.3058823529%));
92
+ --fanui-btn-active-fg: var(--fanui-primary-fg, #ffffff);
93
+ --fanui-btn-active-border: var(--fanui-primary-active, rgb(4.5019607843%, 37.3019607843%, 46.3058823529%));
94
+ --fanui-btn-ring: var(--fanui-primary-ring, rgba(14, 116, 144, 0.3));
95
+ }
96
+
97
+ .fanui-btn--accent {
98
+ --fanui-btn-bg: var(--fanui-accent, #7c3aed);
99
+ --fanui-btn-fg: var(--fanui-accent-fg, #ffffff);
100
+ --fanui-btn-border: var(--fanui-accent, #7c3aed);
101
+ --fanui-btn-hover-bg: var(--fanui-accent-hover, rgb(43.7647058824%, 20.4705882353%, 83.6470588235%));
102
+ --fanui-btn-hover-fg: var(--fanui-accent-fg, #ffffff);
103
+ --fanui-btn-hover-border: var(--fanui-accent-hover, rgb(43.7647058824%, 20.4705882353%, 83.6470588235%));
104
+ --fanui-btn-active-bg: var(--fanui-accent-active, rgb(39.8745098039%, 18.6509803922%, 76.2117647059%));
105
+ --fanui-btn-active-fg: var(--fanui-accent-fg, #ffffff);
106
+ --fanui-btn-active-border: var(--fanui-accent-active, rgb(39.8745098039%, 18.6509803922%, 76.2117647059%));
107
+ --fanui-btn-ring: var(--fanui-accent-ring, rgba(124, 58, 237, 0.3));
108
+ }
109
+
110
+ .fanui-btn--success {
111
+ --fanui-btn-bg: var(--fanui-success, #047857);
112
+ --fanui-btn-fg: var(--fanui-success-fg, #ffffff);
113
+ --fanui-btn-border: var(--fanui-success, #047857);
114
+ --fanui-btn-hover-bg: var(--fanui-success-hover, rgb(1.4117647059%, 42.3529411765%, 30.7058823529%));
115
+ --fanui-btn-hover-fg: var(--fanui-success-fg, #ffffff);
116
+ --fanui-btn-hover-border: var(--fanui-success-hover, rgb(1.4117647059%, 42.3529411765%, 30.7058823529%));
117
+ --fanui-btn-active-bg: var(--fanui-success-active, rgb(1.2862745098%, 38.5882352941%, 27.9764705882%));
118
+ --fanui-btn-active-fg: var(--fanui-success-fg, #ffffff);
119
+ --fanui-btn-active-border: var(--fanui-success-active, rgb(1.2862745098%, 38.5882352941%, 27.9764705882%));
120
+ --fanui-btn-ring: var(--fanui-success-ring, rgba(4, 120, 87, 0.3));
121
+ }
122
+
123
+ .fanui-btn--warning {
124
+ --fanui-btn-bg: var(--fanui-warning, #b45309);
125
+ --fanui-btn-fg: var(--fanui-warning-fg, #ffffff);
126
+ --fanui-btn-border: var(--fanui-warning, #b45309);
127
+ --fanui-btn-hover-bg: var(--fanui-warning-hover, rgb(63.5294117647%, 29.2941176471%, 3.1764705882%));
128
+ --fanui-btn-hover-fg: var(--fanui-warning-fg, #ffffff);
129
+ --fanui-btn-hover-border: var(--fanui-warning-hover, rgb(63.5294117647%, 29.2941176471%, 3.1764705882%));
130
+ --fanui-btn-active-bg: var(--fanui-warning-active, rgb(57.8823529412%, 26.6901960784%, 2.8941176471%));
131
+ --fanui-btn-active-fg: var(--fanui-warning-fg, #ffffff);
132
+ --fanui-btn-active-border: var(--fanui-warning-active, rgb(57.8823529412%, 26.6901960784%, 2.8941176471%));
133
+ --fanui-btn-ring: var(--fanui-warning-ring, rgba(180, 83, 9, 0.3));
134
+ }
135
+
136
+ .fanui-btn--danger {
137
+ --fanui-btn-bg: var(--fanui-danger, #b91c1c);
138
+ --fanui-btn-fg: var(--fanui-danger-fg, #ffffff);
139
+ --fanui-btn-border: var(--fanui-danger, #b91c1c);
140
+ --fanui-btn-hover-bg: var(--fanui-danger-hover, rgb(65.2941176471%, 9.8823529412%, 9.8823529412%));
141
+ --fanui-btn-hover-fg: var(--fanui-danger-fg, #ffffff);
142
+ --fanui-btn-hover-border: var(--fanui-danger-hover, rgb(65.2941176471%, 9.8823529412%, 9.8823529412%));
143
+ --fanui-btn-active-bg: var(--fanui-danger-active, rgb(59.4901960784%, 9.0039215686%, 9.0039215686%));
144
+ --fanui-btn-active-fg: var(--fanui-danger-fg, #ffffff);
145
+ --fanui-btn-active-border: var(--fanui-danger-active, rgb(59.4901960784%, 9.0039215686%, 9.0039215686%));
146
+ --fanui-btn-ring: var(--fanui-danger-ring, rgba(185, 28, 28, 0.3));
147
+ }
148
+
149
+ .fanui-btn--info {
150
+ --fanui-btn-bg: var(--fanui-info, #0369a1);
151
+ --fanui-btn-fg: var(--fanui-info-fg, #ffffff);
152
+ --fanui-btn-border: var(--fanui-info, #0369a1);
153
+ --fanui-btn-hover-bg: var(--fanui-info-hover, rgb(1.0588235294%, 37.0588235294%, 56.8235294118%));
154
+ --fanui-btn-hover-fg: var(--fanui-info-fg, #ffffff);
155
+ --fanui-btn-hover-border: var(--fanui-info-hover, rgb(1.0588235294%, 37.0588235294%, 56.8235294118%));
156
+ --fanui-btn-active-bg: var(--fanui-info-active, rgb(0.9647058824%, 33.7647058824%, 51.7725490196%));
157
+ --fanui-btn-active-fg: var(--fanui-info-fg, #ffffff);
158
+ --fanui-btn-active-border: var(--fanui-info-active, rgb(0.9647058824%, 33.7647058824%, 51.7725490196%));
159
+ --fanui-btn-ring: var(--fanui-info-ring, rgba(3, 105, 161, 0.3));
160
+ }
161
+
162
+ .fanui-btn--neutral,
163
+ .fanui-btn--default {
164
+ --fanui-btn-bg: var(--fanui-color-surface);
165
+ --fanui-btn-fg: var(--fanui-color-text);
166
+ --fanui-btn-border: var(--fanui-color-border-strong);
167
+ --fanui-btn-hover-bg: var(--fanui-color-hover);
168
+ --fanui-btn-hover-fg: var(--fanui-color-text-strong);
169
+ --fanui-btn-hover-border: var(--fanui-color-border-strong);
170
+ --fanui-btn-active-bg: var(--fanui-color-active);
171
+ --fanui-btn-active-fg: var(--fanui-color-text-strong);
172
+ --fanui-btn-active-border: var(--fanui-color-border-strong);
173
+ --fanui-btn-ring: rgba(14, 116, 144, 0.28);
174
+ }
175
+
176
+ .fanui-btn--white {
177
+ --fanui-btn-bg: #ffffff;
178
+ --fanui-btn-fg: var(--fanui-color-text-strong);
179
+ --fanui-btn-border: #ffffff;
180
+ --fanui-btn-hover-bg: rgb(90%, 90%, 90%);
181
+ --fanui-btn-hover-fg: var(--fanui-color-text-strong);
182
+ --fanui-btn-hover-border: rgb(90%, 90%, 90%);
183
+ --fanui-btn-active-bg: rgb(82%, 82%, 82%);
184
+ --fanui-btn-active-fg: var(--fanui-color-text-strong);
185
+ --fanui-btn-active-border: rgb(82%, 82%, 82%);
186
+ --fanui-btn-ring: rgba(255, 255, 255, 0.3);
187
+ }
188
+
189
+ .fanui-btn--outline.fanui-btn--primary {
190
+ --fanui-btn-bg: transparent;
191
+ --fanui-btn-fg: var(--fanui-primary, #0e7490);
192
+ --fanui-btn-border: var(--fanui-primary, #0e7490);
193
+ --fanui-btn-hover-bg: var(--fanui-primary, #0e7490);
194
+ --fanui-btn-hover-fg: var(--fanui-primary-fg, #ffffff);
195
+ --fanui-btn-hover-border: var(--fanui-primary, #0e7490);
196
+ --fanui-btn-active-bg: var(--fanui-primary-active, rgb(4.5019607843%, 37.3019607843%, 46.3058823529%));
197
+ --fanui-btn-active-fg: var(--fanui-primary-fg, #ffffff);
198
+ --fanui-btn-active-border: var(--fanui-primary-active, rgb(4.5019607843%, 37.3019607843%, 46.3058823529%));
199
+ --fanui-btn-ring: var(--fanui-primary-ring, rgba(14, 116, 144, 0.3));
200
+ }
201
+
202
+ .fanui-btn--outline.fanui-btn--accent {
203
+ --fanui-btn-bg: transparent;
204
+ --fanui-btn-fg: var(--fanui-accent, #7c3aed);
205
+ --fanui-btn-border: var(--fanui-accent, #7c3aed);
206
+ --fanui-btn-hover-bg: var(--fanui-accent, #7c3aed);
207
+ --fanui-btn-hover-fg: var(--fanui-accent-fg, #ffffff);
208
+ --fanui-btn-hover-border: var(--fanui-accent, #7c3aed);
209
+ --fanui-btn-active-bg: var(--fanui-accent-active, rgb(39.8745098039%, 18.6509803922%, 76.2117647059%));
210
+ --fanui-btn-active-fg: var(--fanui-accent-fg, #ffffff);
211
+ --fanui-btn-active-border: var(--fanui-accent-active, rgb(39.8745098039%, 18.6509803922%, 76.2117647059%));
212
+ --fanui-btn-ring: var(--fanui-accent-ring, rgba(124, 58, 237, 0.3));
213
+ }
214
+
215
+ .fanui-btn--outline.fanui-btn--success {
216
+ --fanui-btn-bg: transparent;
217
+ --fanui-btn-fg: var(--fanui-success, #047857);
218
+ --fanui-btn-border: var(--fanui-success, #047857);
219
+ --fanui-btn-hover-bg: var(--fanui-success, #047857);
220
+ --fanui-btn-hover-fg: var(--fanui-success-fg, #ffffff);
221
+ --fanui-btn-hover-border: var(--fanui-success, #047857);
222
+ --fanui-btn-active-bg: var(--fanui-success-active, rgb(1.2862745098%, 38.5882352941%, 27.9764705882%));
223
+ --fanui-btn-active-fg: var(--fanui-success-fg, #ffffff);
224
+ --fanui-btn-active-border: var(--fanui-success-active, rgb(1.2862745098%, 38.5882352941%, 27.9764705882%));
225
+ --fanui-btn-ring: var(--fanui-success-ring, rgba(4, 120, 87, 0.3));
226
+ }
227
+
228
+ .fanui-btn--outline.fanui-btn--warning {
229
+ --fanui-btn-bg: transparent;
230
+ --fanui-btn-fg: var(--fanui-warning, #b45309);
231
+ --fanui-btn-border: var(--fanui-warning, #b45309);
232
+ --fanui-btn-hover-bg: var(--fanui-warning, #b45309);
233
+ --fanui-btn-hover-fg: var(--fanui-warning-fg, #ffffff);
234
+ --fanui-btn-hover-border: var(--fanui-warning, #b45309);
235
+ --fanui-btn-active-bg: var(--fanui-warning-active, rgb(57.8823529412%, 26.6901960784%, 2.8941176471%));
236
+ --fanui-btn-active-fg: var(--fanui-warning-fg, #ffffff);
237
+ --fanui-btn-active-border: var(--fanui-warning-active, rgb(57.8823529412%, 26.6901960784%, 2.8941176471%));
238
+ --fanui-btn-ring: var(--fanui-warning-ring, rgba(180, 83, 9, 0.3));
239
+ }
240
+
241
+ .fanui-btn--outline.fanui-btn--danger {
242
+ --fanui-btn-bg: transparent;
243
+ --fanui-btn-fg: var(--fanui-danger, #b91c1c);
244
+ --fanui-btn-border: var(--fanui-danger, #b91c1c);
245
+ --fanui-btn-hover-bg: var(--fanui-danger, #b91c1c);
246
+ --fanui-btn-hover-fg: var(--fanui-danger-fg, #ffffff);
247
+ --fanui-btn-hover-border: var(--fanui-danger, #b91c1c);
248
+ --fanui-btn-active-bg: var(--fanui-danger-active, rgb(59.4901960784%, 9.0039215686%, 9.0039215686%));
249
+ --fanui-btn-active-fg: var(--fanui-danger-fg, #ffffff);
250
+ --fanui-btn-active-border: var(--fanui-danger-active, rgb(59.4901960784%, 9.0039215686%, 9.0039215686%));
251
+ --fanui-btn-ring: var(--fanui-danger-ring, rgba(185, 28, 28, 0.3));
252
+ }
253
+
254
+ .fanui-btn--outline.fanui-btn--info {
255
+ --fanui-btn-bg: transparent;
256
+ --fanui-btn-fg: var(--fanui-info, #0369a1);
257
+ --fanui-btn-border: var(--fanui-info, #0369a1);
258
+ --fanui-btn-hover-bg: var(--fanui-info, #0369a1);
259
+ --fanui-btn-hover-fg: var(--fanui-info-fg, #ffffff);
260
+ --fanui-btn-hover-border: var(--fanui-info, #0369a1);
261
+ --fanui-btn-active-bg: var(--fanui-info-active, rgb(0.9647058824%, 33.7647058824%, 51.7725490196%));
262
+ --fanui-btn-active-fg: var(--fanui-info-fg, #ffffff);
263
+ --fanui-btn-active-border: var(--fanui-info-active, rgb(0.9647058824%, 33.7647058824%, 51.7725490196%));
264
+ --fanui-btn-ring: var(--fanui-info-ring, rgba(3, 105, 161, 0.3));
265
+ }
266
+
267
+ .fanui-btn--ghost,
268
+ .fanui-btn--text {
269
+ --fanui-btn-bg: transparent;
270
+ --fanui-btn-fg: var(--fanui-color-text-muted);
271
+ --fanui-btn-border: transparent;
272
+ --fanui-btn-hover-bg: var(--fanui-color-hover);
273
+ --fanui-btn-hover-fg: var(--fanui-color-text);
274
+ --fanui-btn-hover-border: transparent;
275
+ --fanui-btn-active-bg: var(--fanui-color-active);
276
+ --fanui-btn-active-fg: var(--fanui-color-text-strong);
277
+ --fanui-btn-active-border: transparent;
278
+ --fanui-btn-ring: var(--fanui-primary-ring);
279
+ }
280
+
281
+ .fanui-btn--ghost.fanui-btn--primary,
282
+ .fanui-btn--text.fanui-btn--primary {
283
+ --fanui-btn-bg: transparent;
284
+ --fanui-btn-fg: var(--fanui-primary, #0e7490);
285
+ --fanui-btn-border: transparent;
286
+ --fanui-btn-hover-bg: var(--fanui-primary-soft, rgba(14, 116, 144, 0.1));
287
+ --fanui-btn-hover-fg: var(--fanui-primary-hover, rgb(5.0509803922%, 41.8509803922%, 51.9529411765%));
288
+ --fanui-btn-hover-border: transparent;
289
+ --fanui-btn-active-bg: rgba(14, 116, 144, 0.18);
290
+ --fanui-btn-active-fg: var(--fanui-primary-active, rgb(4.6117647059%, 38.2117647059%, 47.4352941176%));
291
+ --fanui-btn-active-border: transparent;
292
+ --fanui-btn-ring: var(--fanui-primary-ring, rgba(14, 116, 144, 0.3));
293
+ }
294
+
295
+ .fanui-btn--ghost.fanui-btn--accent,
296
+ .fanui-btn--text.fanui-btn--accent {
297
+ --fanui-btn-bg: transparent;
298
+ --fanui-btn-fg: var(--fanui-accent, #7c3aed);
299
+ --fanui-btn-border: transparent;
300
+ --fanui-btn-hover-bg: var(--fanui-accent-soft, rgba(124, 58, 237, 0.1));
301
+ --fanui-btn-hover-fg: var(--fanui-accent-hover, rgb(44.737254902%, 20.9254901961%, 85.5058823529%));
302
+ --fanui-btn-hover-border: transparent;
303
+ --fanui-btn-active-bg: rgba(124, 58, 237, 0.18);
304
+ --fanui-btn-active-fg: var(--fanui-accent-active, rgb(40.8470588235%, 19.1058823529%, 78.0705882353%));
305
+ --fanui-btn-active-border: transparent;
306
+ --fanui-btn-ring: var(--fanui-accent-ring, rgba(124, 58, 237, 0.3));
307
+ }
308
+
309
+ .fanui-btn--ghost.fanui-btn--success,
310
+ .fanui-btn--text.fanui-btn--success {
311
+ --fanui-btn-bg: transparent;
312
+ --fanui-btn-fg: var(--fanui-success, #047857);
313
+ --fanui-btn-border: transparent;
314
+ --fanui-btn-hover-bg: var(--fanui-success-soft, rgba(4, 120, 87, 0.1));
315
+ --fanui-btn-hover-fg: var(--fanui-success-hover, rgb(1.4431372549%, 43.2941176471%, 31.3882352941%));
316
+ --fanui-btn-hover-border: transparent;
317
+ --fanui-btn-active-bg: rgba(4, 120, 87, 0.18);
318
+ --fanui-btn-active-fg: var(--fanui-success-active, rgb(1.3176470588%, 39.5294117647%, 28.6588235294%));
319
+ --fanui-btn-active-border: transparent;
320
+ --fanui-btn-ring: var(--fanui-success-ring, rgba(4, 120, 87, 0.3));
321
+ }
322
+
323
+ .fanui-btn--ghost.fanui-btn--warning,
324
+ .fanui-btn--text.fanui-btn--warning {
325
+ --fanui-btn-bg: transparent;
326
+ --fanui-btn-fg: var(--fanui-warning, #b45309);
327
+ --fanui-btn-border: transparent;
328
+ --fanui-btn-hover-bg: var(--fanui-warning-soft, rgba(180, 83, 9, 0.1));
329
+ --fanui-btn-hover-fg: var(--fanui-warning-hover, rgb(64.9411764706%, 29.9450980392%, 3.2470588235%));
330
+ --fanui-btn-hover-border: transparent;
331
+ --fanui-btn-active-bg: rgba(180, 83, 9, 0.18);
332
+ --fanui-btn-active-fg: var(--fanui-warning-active, rgb(59.2941176471%, 27.3411764706%, 2.9647058824%));
333
+ --fanui-btn-active-border: transparent;
334
+ --fanui-btn-ring: var(--fanui-warning-ring, rgba(180, 83, 9, 0.3));
335
+ }
336
+
337
+ .fanui-btn--ghost.fanui-btn--danger,
338
+ .fanui-btn--text.fanui-btn--danger {
339
+ --fanui-btn-bg: transparent;
340
+ --fanui-btn-fg: var(--fanui-danger, #b91c1c);
341
+ --fanui-btn-border: transparent;
342
+ --fanui-btn-hover-bg: var(--fanui-danger-soft, rgba(185, 28, 28, 0.1));
343
+ --fanui-btn-hover-fg: var(--fanui-danger-hover, rgb(66.7450980392%, 10.1019607843%, 10.1019607843%));
344
+ --fanui-btn-hover-border: transparent;
345
+ --fanui-btn-active-bg: rgba(185, 28, 28, 0.18);
346
+ --fanui-btn-active-fg: var(--fanui-danger-active, rgb(60.9411764706%, 9.2235294118%, 9.2235294118%));
347
+ --fanui-btn-active-border: transparent;
348
+ --fanui-btn-ring: var(--fanui-danger-ring, rgba(185, 28, 28, 0.3));
349
+ }
350
+
351
+ .fanui-btn--ghost.fanui-btn--info,
352
+ .fanui-btn--text.fanui-btn--info {
353
+ --fanui-btn-bg: transparent;
354
+ --fanui-btn-fg: var(--fanui-info, #0369a1);
355
+ --fanui-btn-border: transparent;
356
+ --fanui-btn-hover-bg: var(--fanui-info-soft, rgba(3, 105, 161, 0.1));
357
+ --fanui-btn-hover-fg: var(--fanui-info-hover, rgb(1.0823529412%, 37.8823529412%, 58.0862745098%));
358
+ --fanui-btn-hover-border: transparent;
359
+ --fanui-btn-active-bg: rgba(3, 105, 161, 0.18);
360
+ --fanui-btn-active-fg: var(--fanui-info-active, rgb(0.9882352941%, 34.5882352941%, 53.0352941176%));
361
+ --fanui-btn-active-border: transparent;
362
+ --fanui-btn-ring: var(--fanui-info-ring, rgba(3, 105, 161, 0.3));
363
+ }
364
+
365
+ .fanui-btn--link {
366
+ --fanui-btn-bg: transparent;
367
+ --fanui-btn-fg: var(--fanui-primary);
368
+ --fanui-btn-border: transparent;
369
+ --fanui-btn-hover-bg: transparent;
370
+ --fanui-btn-hover-fg: var(--fanui-primary-hover);
371
+ --fanui-btn-hover-border: transparent;
372
+ --fanui-btn-active-bg: transparent;
373
+ --fanui-btn-active-fg: var(--fanui-primary-active);
374
+ --fanui-btn-active-border: transparent;
375
+ padding: 0;
376
+ min-height: auto;
377
+ text-decoration: none;
378
+ }
379
+ .fanui-btn--link:hover {
380
+ text-decoration: underline;
381
+ }
382
+
383
+ .fanui-btn--xs {
384
+ --fanui-btn-height: 24px;
385
+ --fanui-btn-padding-x: 8px;
386
+ --fanui-btn-font-size: var(--fanui-font-size-xs);
387
+ --fanui-btn-radius: var(--fanui-radius-sm);
388
+ --fanui-btn-gap: 4px;
389
+ }
390
+
391
+ .fanui-btn--sm {
392
+ --fanui-btn-height: 28px;
393
+ --fanui-btn-padding-x: 10px;
394
+ --fanui-btn-font-size: var(--fanui-font-size-sm);
395
+ --fanui-btn-gap: 4px;
396
+ }
397
+
398
+ .fanui-btn--md {
399
+ --fanui-btn-height: 32px;
400
+ --fanui-btn-padding-x: 12px;
401
+ --fanui-btn-font-size: var(--fanui-font-size-base);
402
+ }
403
+
404
+ .fanui-btn--base, .fanui-btn--lg {
405
+ --fanui-btn-height: 40px;
406
+ --fanui-btn-padding-x: 16px;
407
+ --fanui-btn-font-size: var(--fanui-font-size-md);
408
+ }
409
+
410
+ .fanui-btn--xl {
411
+ --fanui-btn-height: 48px;
412
+ --fanui-btn-padding-x: 22px;
413
+ --fanui-btn-font-size: var(--fanui-font-size-lg);
414
+ --fanui-btn-radius: var(--fanui-radius-md);
415
+ }
416
+
417
+ .fanui-btn--block {
418
+ display: flex;
419
+ width: 100%;
420
+ }
421
+
422
+ .fanui-btn--square {
423
+ --fanui-btn-padding-x: 0;
424
+ width: var(--fanui-btn-height);
425
+ padding: 0;
426
+ flex: 0 0 auto;
427
+ }
428
+
429
+ .fanui-btn--circle {
430
+ --fanui-btn-padding-x: 0;
431
+ width: var(--fanui-btn-height);
432
+ padding: 0;
433
+ border-radius: 9999px;
434
+ flex: 0 0 auto;
435
+ }
436
+
437
+ .fanui-btn--pill {
438
+ --fanui-btn-radius: 9999px;
439
+ }
440
+
441
+ .fanui-btn--sharp {
442
+ --fanui-btn-radius: 0;
443
+ }
444
+
445
+ .fanui-btn--icon-start {
446
+ flex-direction: row-reverse;
447
+ }
448
+
449
+ .fanui-btn--icon-end {
450
+ flex-direction: row;
451
+ }
452
+
453
+ .fanui-btn--loading,
454
+ .fanui-btn.is-loading {
455
+ pointer-events: none;
456
+ color: transparent !important;
457
+ }
458
+ .fanui-btn--loading::after,
459
+ .fanui-btn.is-loading::after {
460
+ content: "";
461
+ position: absolute;
462
+ top: 50%;
463
+ left: 50%;
464
+ width: 1em;
465
+ height: 1em;
466
+ margin: -0.5em 0 0 -0.5em;
467
+ border: 2px solid currentColor;
468
+ border-top-color: transparent;
469
+ border-radius: 50%;
470
+ color: var(--fanui-btn-fg);
471
+ animation: fanui-spin 700ms linear infinite;
472
+ }
473
+ .fanui-btn--loading > *,
474
+ .fanui-btn.is-loading > * {
475
+ visibility: hidden;
476
+ }
477
+
478
+ .fanui-btn-group {
479
+ display: inline-flex;
480
+ vertical-align: middle;
481
+ border-radius: var(--fanui-radius-base);
482
+ overflow: hidden;
483
+ }
484
+ .fanui-btn-group > .fanui-btn {
485
+ border-radius: 0;
486
+ margin-inline-start: -1px;
487
+ flex: 1 1 auto;
488
+ }
489
+ .fanui-btn-group > .fanui-btn:first-child {
490
+ margin-inline-start: 0;
491
+ border-start-start-radius: var(--fanui-radius-base);
492
+ border-end-start-radius: var(--fanui-radius-base);
493
+ }
494
+ .fanui-btn-group > .fanui-btn:last-child {
495
+ border-start-end-radius: var(--fanui-radius-base);
496
+ border-end-end-radius: var(--fanui-radius-base);
497
+ }
498
+ .fanui-btn-group > .fanui-btn:hover,
499
+ .fanui-btn-group > .fanui-btn:focus-visible,
500
+ .fanui-btn-group > .fanui-btn.is-active {
501
+ z-index: 1;
502
+ }
503
+ .fanui-btn-group--pill {
504
+ border-radius: 9999px;
505
+ }
506
+ .fanui-btn-group--vertical {
507
+ flex-direction: column;
508
+ }
509
+ .fanui-btn-group--vertical > .fanui-btn {
510
+ margin-inline-start: 0;
511
+ margin-top: -1px;
512
+ width: 100%;
513
+ }
514
+ .fanui-btn-group--vertical > .fanui-btn:first-child {
515
+ border-radius: var(--fanui-radius-base) var(--fanui-radius-base) 0 0;
516
+ }
517
+ .fanui-btn-group--vertical > .fanui-btn:last-child {
518
+ border-radius: 0 0 var(--fanui-radius-base) var(--fanui-radius-base);
519
+ }
520
+
521
+ .fanui-btn-toolbar {
522
+ display: flex;
523
+ flex-wrap: wrap;
524
+ align-items: center;
525
+ gap: var(--fanui-space-3);
526
+ }