@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,122 @@
1
+ .fanui-alert{position:relative;display:flex;align-items:flex-start;gap:var(--fanui-space-3);padding:var(--fanui-space-3) var(--fanui-space-4);font-size:var(--fanui-font-size-base);line-height:1.6;color:var(--fanui-color-text);background-color:var(--fanui-color-surface-sunken);border:1px solid var(--fanui-color-border);border-inline-start:3px solid var(--fanui-color-text-subtle);border-radius:var(--fanui-radius-md);box-sizing:border-box;transition:opacity 200ms cubic-bezier(0.4,0,0.2,1) 0s,transform 200ms cubic-bezier(0.4,0,0.2,1) 0s}
2
+ .fanui-alert.is-hidden,.fanui-alert[hidden]{display:none}
3
+ .fanui-alert__icon{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:20px;height:20px;margin-top:1px;font-size:16px;line-height:1}
4
+ .fanui-alert__content{flex:1 1 auto;min-width:0}
5
+ .fanui-alert__title{margin:0 0 2px;font-size:var(--fanui-font-size-base);font-weight:600;line-height:1.5;color:var(--fanui-color-text-strong)}
6
+ .fanui-alert__desc{margin:0;font-size:var(--fanui-font-size-base);color:var(--fanui-color-text-muted);word-break:break-word}
7
+ .fanui-alert__actions{margin-top:var(--fanui-space-3);display:flex;align-items:center;gap:var(--fanui-space-2)}
8
+ .fanui-alert__close{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin:-2px -4px 0 0;padding:0;font-size:14px;line-height:1;color:inherit;opacity:0.6;background:none;border:0;border-radius:var(--fanui-radius-sm);cursor:pointer;transition:opacity 150ms cubic-bezier(0.4,0,0.2,1) 0s,background-color 150ms cubic-bezier(0.4,0,0.2,1) 0s}
9
+ .fanui-alert__close:hover{opacity:1;background-color:rgba(15,23,42,0.08)}
10
+ .fanui-alert__close:focus-visible{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-alert__close:focus-visible{outline:2px solid transparent;outline-offset:2px}}
11
+ .fanui-alert ul,.fanui-alert ol{margin:var(--fanui-space-2) 0 0;padding-inline-start:1.25em;color:var(--fanui-color-text-muted)}
12
+ .fanui-alert--primary{background-color:var(--fanui-primary-soft,rgba(14,116,144,0.1));border-color:var(--fanui-primary-border,rgba(14,116,144,0.28));border-left-color:var(--fanui-primary,#0e7490)}
13
+ .fanui-alert--primary .fanui-alert__icon{color:var(--fanui-primary,#0e7490)}
14
+ .fanui-alert--primary .fanui-alert__title{color:rgb(4.062745098%,33.662745098%,41.7882352941%)}
15
+ .fanui-alert--primary .fanui-alert__desc{color:rgb(4.831372549%,40.031372549%,49.6941176471%)}
16
+ [data-fanui-theme=dark] .fanui-alert--primary{background-color:rgba(14,116,144,0.16);border-color:rgba(14,116,144,0.34)}
17
+ [data-fanui-theme=dark] .fanui-alert--primary .fanui-alert__title{color:var(--fanui-primary-ink,rgb(35.7333333333%,62.9333333333%,70.4%))}
18
+ [data-fanui-theme=dark] .fanui-alert--primary .fanui-alert__desc{color:var(--fanui-primary,rgb(16.831372549%,52.031372549%,61.6941176471%))}
19
+ .fanui-alert--solid.fanui-alert--primary{background-color:var(--fanui-primary,#0e7490);border-color:var(--fanui-primary,#0e7490);border-left-color:rgb(4.1176470588%,34.1176470588%,42.3529411765%);color:var(--fanui-primary-fg,#ffffff)}
20
+ .fanui-alert--solid.fanui-alert--primary .fanui-alert__title,.fanui-alert--solid.fanui-alert--primary .fanui-alert__desc,.fanui-alert--solid.fanui-alert--primary .fanui-alert__icon{color:inherit}
21
+ .fanui-alert--solid.fanui-alert--primary .fanui-alert__desc{opacity:0.88}
22
+ .fanui-alert--outline.fanui-alert--primary{background-color:transparent;border-color:rgba(14,116,144,0.45);border-left-color:var(--fanui-primary,#0e7490)}
23
+ .fanui-alert--outline.fanui-alert--primary .fanui-alert__icon{color:var(--fanui-primary,#0e7490)}
24
+ .fanui-alert--accent{background-color:var(--fanui-accent-soft,rgba(124,58,237,0.1));border-color:var(--fanui-accent-border,rgba(124,58,237,0.28));border-left-color:var(--fanui-accent,#7c3aed)}
25
+ .fanui-alert--accent .fanui-alert__icon{color:var(--fanui-accent,#7c3aed)}
26
+ .fanui-alert--accent .fanui-alert__title{color:rgb(35.9843137255%,16.831372549%,68.7764705882%)}
27
+ .fanui-alert--accent .fanui-alert__desc{color:rgb(42.7921568627%,20.0156862745%,81.7882352941%)}
28
+ [data-fanui-theme=dark] .fanui-alert--accent{background-color:rgba(124,58,237,0.16);border-color:rgba(124,58,237,0.34)}
29
+ [data-fanui-theme=dark] .fanui-alert--accent .fanui-alert__title{color:var(--fanui-accent-ink,rgb(65.0666666667%,47.4666666667%,95.2%))}
30
+ [data-fanui-theme=dark] .fanui-alert--accent .fanui-alert__desc{color:var(--fanui-accent,rgb(54.7921568627%,32.0156862745%,93.7882352941%))}
31
+ .fanui-alert--solid.fanui-alert--accent{background-color:var(--fanui-accent,#7c3aed);border-color:var(--fanui-accent,#7c3aed);border-left-color:rgb(36.4705882353%,17.0588235294%,69.7058823529%);color:var(--fanui-accent-fg,#ffffff)}
32
+ .fanui-alert--solid.fanui-alert--accent .fanui-alert__title,.fanui-alert--solid.fanui-alert--accent .fanui-alert__desc,.fanui-alert--solid.fanui-alert--accent .fanui-alert__icon{color:inherit}
33
+ .fanui-alert--solid.fanui-alert--accent .fanui-alert__desc{opacity:0.88}
34
+ .fanui-alert--outline.fanui-alert--accent{background-color:transparent;border-color:rgba(124,58,237,0.45);border-left-color:var(--fanui-accent,#7c3aed)}
35
+ .fanui-alert--outline.fanui-alert--accent .fanui-alert__icon{color:var(--fanui-accent,#7c3aed)}
36
+ .fanui-alert--success{background-color:var(--fanui-success-soft,rgba(4,120,87,0.1));border-color:var(--fanui-success-border,rgba(4,120,87,0.28));border-left-color:var(--fanui-success,#047857)}
37
+ .fanui-alert--success .fanui-alert__icon{color:var(--fanui-success,#047857)}
38
+ .fanui-alert--success .fanui-alert__title{color:rgb(1.1607843137%,34.8235294118%,25.2470588235%)}
39
+ .fanui-alert--success .fanui-alert__desc{color:rgb(1.3803921569%,41.4117647059%,30.0235294118%)}
40
+ [data-fanui-theme=dark] .fanui-alert--success{background-color:rgba(4,120,87,0.16);border-color:rgba(4,120,87,0.34)}
41
+ [data-fanui-theme=dark] .fanui-alert--success .fanui-alert__title{color:var(--fanui-success-ink,rgb(33.0666666667%,64%,55.2%))}
42
+ [data-fanui-theme=dark] .fanui-alert--success .fanui-alert__desc{color:var(--fanui-success,rgb(13.3803921569%,53.4117647059%,42.0235294118%))}
43
+ .fanui-alert--solid.fanui-alert--success{background-color:var(--fanui-success,#047857);border-color:var(--fanui-success,#047857);border-left-color:rgb(1.1764705882%,35.2941176471%,25.5882352941%);color:var(--fanui-success-fg,#ffffff)}
44
+ .fanui-alert--solid.fanui-alert--success .fanui-alert__title,.fanui-alert--solid.fanui-alert--success .fanui-alert__desc,.fanui-alert--solid.fanui-alert--success .fanui-alert__icon{color:inherit}
45
+ .fanui-alert--solid.fanui-alert--success .fanui-alert__desc{opacity:0.88}
46
+ .fanui-alert--outline.fanui-alert--success{background-color:transparent;border-color:rgba(4,120,87,0.45);border-left-color:var(--fanui-success,#047857)}
47
+ .fanui-alert--outline.fanui-alert--success .fanui-alert__icon{color:var(--fanui-success,#047857)}
48
+ .fanui-alert--warning{background-color:var(--fanui-warning-soft,rgba(180,83,9,0.1));border-color:var(--fanui-warning-border,rgba(180,83,9,0.28));border-left-color:var(--fanui-warning,#b45309)}
49
+ .fanui-alert--warning .fanui-alert__icon{color:var(--fanui-warning,#b45309)}
50
+ .fanui-alert--warning .fanui-alert__title{color:rgb(52.2352941176%,24.0862745098%,2.6117647059%)}
51
+ .fanui-alert--warning .fanui-alert__desc{color:rgb(62.1176470588%,28.6431372549%,3.1058823529%)}
52
+ [data-fanui-theme=dark] .fanui-alert--warning{background-color:rgba(180,83,9,0.16);border-color:rgba(180,83,9,0.34)}
53
+ [data-fanui-theme=dark] .fanui-alert--warning .fanui-alert__title{color:var(--fanui-warning-ink,rgb(80%,54.1333333333%,34.4%))}
54
+ [data-fanui-theme=dark] .fanui-alert--warning .fanui-alert__desc{color:var(--fanui-warning,rgb(74.1176470588%,40.6431372549%,15.1058823529%))}
55
+ .fanui-alert--solid.fanui-alert--warning{background-color:var(--fanui-warning,#b45309);border-color:var(--fanui-warning,#b45309);border-left-color:rgb(52.9411764706%,24.4117647059%,2.6470588235%);color:var(--fanui-warning-fg,#ffffff)}
56
+ .fanui-alert--solid.fanui-alert--warning .fanui-alert__title,.fanui-alert--solid.fanui-alert--warning .fanui-alert__desc,.fanui-alert--solid.fanui-alert--warning .fanui-alert__icon{color:inherit}
57
+ .fanui-alert--solid.fanui-alert--warning .fanui-alert__desc{opacity:0.88}
58
+ .fanui-alert--outline.fanui-alert--warning{background-color:transparent;border-color:rgba(180,83,9,0.45);border-left-color:var(--fanui-warning,#b45309)}
59
+ .fanui-alert--outline.fanui-alert--warning .fanui-alert__icon{color:var(--fanui-warning,#b45309)}
60
+ .fanui-alert--danger{background-color:var(--fanui-danger-soft,rgba(185,28,28,0.1));border-color:var(--fanui-danger-border,rgba(185,28,28,0.28));border-left-color:var(--fanui-danger,#b91c1c)}
61
+ .fanui-alert--danger .fanui-alert__icon{color:var(--fanui-danger,#b91c1c)}
62
+ .fanui-alert--danger .fanui-alert__title{color:rgb(53.6862745098%,8.1254901961%,8.1254901961%)}
63
+ .fanui-alert--danger .fanui-alert__desc{color:rgb(63.8431372549%,9.662745098%,9.662745098%)}
64
+ [data-fanui-theme=dark] .fanui-alert--danger{background-color:rgba(185,28,28,0.16);border-color:rgba(185,28,28,0.34)}
65
+ [data-fanui-theme=dark] .fanui-alert--danger .fanui-alert__title{color:var(--fanui-danger-ink,rgb(81.3333333333%,39.4666666667%,39.4666666667%))}
66
+ [data-fanui-theme=dark] .fanui-alert--danger .fanui-alert__desc{color:var(--fanui-danger,rgb(75.8431372549%,21.662745098%,21.662745098%))}
67
+ .fanui-alert--solid.fanui-alert--danger{background-color:var(--fanui-danger,#b91c1c);border-color:var(--fanui-danger,#b91c1c);border-left-color:rgb(54.4117647059%,8.2352941176%,8.2352941176%);color:var(--fanui-danger-fg,#ffffff)}
68
+ .fanui-alert--solid.fanui-alert--danger .fanui-alert__title,.fanui-alert--solid.fanui-alert--danger .fanui-alert__desc,.fanui-alert--solid.fanui-alert--danger .fanui-alert__icon{color:inherit}
69
+ .fanui-alert--solid.fanui-alert--danger .fanui-alert__desc{opacity:0.88}
70
+ .fanui-alert--outline.fanui-alert--danger{background-color:transparent;border-color:rgba(185,28,28,0.45);border-left-color:var(--fanui-danger,#b91c1c)}
71
+ .fanui-alert--outline.fanui-alert--danger .fanui-alert__icon{color:var(--fanui-danger,#b91c1c)}
72
+ .fanui-alert--info{background-color:var(--fanui-info-soft,rgba(3,105,161,0.1));border-color:var(--fanui-info-border,rgba(3,105,161,0.28));border-left-color:var(--fanui-info,#0369a1)}
73
+ .fanui-alert--info .fanui-alert__icon{color:var(--fanui-info,#0369a1)}
74
+ .fanui-alert--info .fanui-alert__title{color:rgb(0.8705882353%,30.4705882353%,46.7215686275%)}
75
+ .fanui-alert--info .fanui-alert__desc{color:rgb(1.0352941176%,36.2352941176%,55.5607843137%)}
76
+ [data-fanui-theme=dark] .fanui-alert--info{background-color:rgba(3,105,161,0.16);border-color:rgba(3,105,161,0.34)}
77
+ [data-fanui-theme=dark] .fanui-alert--info .fanui-alert__title{color:var(--fanui-info-ink,rgb(32.8%,60%,74.9333333333%))}
78
+ [data-fanui-theme=dark] .fanui-alert--info .fanui-alert__desc{color:var(--fanui-info,rgb(13.0352941176%,48.2352941176%,67.5607843137%))}
79
+ .fanui-alert--solid.fanui-alert--info{background-color:var(--fanui-info,#0369a1);border-color:var(--fanui-info,#0369a1);border-left-color:rgb(0.8823529412%,30.8823529412%,47.3529411765%);color:var(--fanui-info-fg,#ffffff)}
80
+ .fanui-alert--solid.fanui-alert--info .fanui-alert__title,.fanui-alert--solid.fanui-alert--info .fanui-alert__desc,.fanui-alert--solid.fanui-alert--info .fanui-alert__icon{color:inherit}
81
+ .fanui-alert--solid.fanui-alert--info .fanui-alert__desc{opacity:0.88}
82
+ .fanui-alert--outline.fanui-alert--info{background-color:transparent;border-color:rgba(3,105,161,0.45);border-left-color:var(--fanui-info,#0369a1)}
83
+ .fanui-alert--outline.fanui-alert--info .fanui-alert__icon{color:var(--fanui-info,#0369a1)}
84
+ .fanui-alert--sm{padding:var(--fanui-space-2) var(--fanui-space-3);font-size:var(--fanui-font-size-sm)}
85
+ .fanui-alert--sm .fanui-alert__icon{width:16px;height:16px;font-size:14px}
86
+ .fanui-alert--lg{padding:var(--fanui-space-4) var(--fanui-space-5)}
87
+ .fanui-alert--lg .fanui-alert__title{font-size:var(--fanui-font-size-md)}
88
+ .fanui-alert--center{align-items:center;text-align:center;flex-direction:column}
89
+ .fanui-alert--center .fanui-alert__icon{margin-top:0}
90
+ .fanui-alert--flat{border-radius:0;border-inline-start-width:0;border-top-width:0;border-inline-end-width:0}
91
+ .fanui-alert--bordered-all{border-inline-start-width:1px}
92
+ .fanui-alert--banner{border-radius:0;border-width:0 0 1px 0;border-inline-start-width:0;padding:var(--fanui-space-3) var(--fanui-container-px,16px);justify-content:center}
93
+ .fanui-alert--banner .fanui-alert__content{flex:0 1 auto;display:flex;align-items:center;gap:var(--fanui-space-2);flex-wrap:wrap}
94
+ .fanui-alert--inline{display:inline-flex;padding:4px 10px;font-size:var(--fanui-font-size-sm);border-radius:var(--fanui-radius-full);border-inline-start-width:1px}
95
+ .fanui-toast-region{position:fixed;top:var(--fanui-space-5);left:50%;transform:translateX(-50%);z-index:var(--fanui-z-toast,1090);display:flex;flex-direction:column;align-items:center;gap:var(--fanui-space-3);pointer-events:none;max-width:min(92vw,480px)}
96
+ .fanui-toast-region--top-right{left:auto;right:var(--fanui-space-5);transform:none;align-items:flex-end}
97
+ .fanui-toast-region--top-left{left:var(--fanui-space-5);transform:none;align-items:flex-start}
98
+ .fanui-toast-region--bottom{top:auto;bottom:var(--fanui-space-5)}
99
+ .fanui-toast-region--bottom-right{top:auto;bottom:var(--fanui-space-5);left:auto;right:var(--fanui-space-5);transform:none;align-items:flex-end}
100
+ .fanui-toast{display:flex;align-items:center;gap:var(--fanui-space-3);padding:var(--fanui-space-3) var(--fanui-space-4);min-width:220px;pointer-events:none;font-size:var(--fanui-font-size-base);color:var(--fanui-color-text);background-color:var(--fanui-color-surface);border:1px solid var(--fanui-color-border);border-radius:var(--fanui-radius-md);box-shadow:var(--fanui-shadow-lg);animation:fanui-toast-in 200ms cubic-bezier(0,0,0.2,1) both}
101
+ .fanui-toast--interactive{pointer-events:auto}
102
+ .fanui-toast__icon{flex:0 0 auto;display:flex;font-size:16px}
103
+ .fanui-toast__content{flex:1 1 auto;min-width:0}
104
+ .fanui-toast__title{font-weight:600;color:var(--fanui-color-text-strong)}
105
+ .fanui-toast__desc{font-size:var(--fanui-font-size-sm);color:var(--fanui-color-text-muted)}
106
+ .fanui-toast__actions{display:flex;gap:var(--fanui-space-2);margin-inline-start:var(--fanui-space-2);flex:0 0 auto}
107
+ .fanui-toast.is-leaving{animation:fanui-fade-out 200ms cubic-bezier(0.4,0,1,1) both}
108
+ .fanui-toast--primary{border-inline-start:3px solid var(--fanui-primary,#0e7490)}
109
+ .fanui-toast--primary .fanui-toast__icon{color:var(--fanui-primary,#0e7490)}
110
+ .fanui-toast--accent{border-inline-start:3px solid var(--fanui-accent,#7c3aed)}
111
+ .fanui-toast--accent .fanui-toast__icon{color:var(--fanui-accent,#7c3aed)}
112
+ .fanui-toast--success{border-inline-start:3px solid var(--fanui-success,#047857)}
113
+ .fanui-toast--success .fanui-toast__icon{color:var(--fanui-success,#047857)}
114
+ .fanui-toast--warning{border-inline-start:3px solid var(--fanui-warning,#b45309)}
115
+ .fanui-toast--warning .fanui-toast__icon{color:var(--fanui-warning,#b45309)}
116
+ .fanui-toast--danger{border-inline-start:3px solid var(--fanui-danger,#b91c1c)}
117
+ .fanui-toast--danger .fanui-toast__icon{color:var(--fanui-danger,#b91c1c)}
118
+ .fanui-toast--info{border-inline-start:3px solid var(--fanui-info,#0369a1)}
119
+ .fanui-toast--info .fanui-toast__icon{color:var(--fanui-info,#0369a1)}
120
+ .fanui-toast--solid{background-color:var(--fanui-color-text-strong);color:var(--fanui-color-surface);border-color:transparent}
121
+ .fanui-toast--solid .fanui-toast__title{color:inherit}
122
+ .fanui-toast--solid .fanui-toast__desc{color:rgba(255,255,255,0.72)}
@@ -0,0 +1,426 @@
1
+ /* fanUI v2.1.0 · module: badge(独立产物,自带令牌) */
2
+ .fanui-badge {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ gap: 4px;
7
+ height: 20px;
8
+ padding: 0 8px;
9
+ font-size: var(--fanui-font-size-xs);
10
+ font-weight: 500;
11
+ line-height: 1;
12
+ white-space: nowrap;
13
+ vertical-align: middle;
14
+ color: var(--fanui-color-text-inverse);
15
+ background-color: var(--fanui-color-text-muted);
16
+ border: 1px solid transparent;
17
+ border-radius: var(--fanui-radius-sm);
18
+ box-sizing: border-box;
19
+ }
20
+ .fanui-badge--pill {
21
+ border-radius: 9999px;
22
+ padding: 0 8px;
23
+ }
24
+ .fanui-badge--square {
25
+ border-radius: var(--fanui-radius-sm);
26
+ }
27
+ .fanui-badge--circle {
28
+ width: 20px;
29
+ padding: 0;
30
+ border-radius: 50%;
31
+ font-variant-numeric: tabular-nums;
32
+ }
33
+ .fanui-badge--xs {
34
+ height: 16px;
35
+ padding: 0 6px;
36
+ font-size: 10px;
37
+ }
38
+ .fanui-badge--sm {
39
+ height: 18px;
40
+ padding: 0 7px;
41
+ font-size: 11px;
42
+ }
43
+ .fanui-badge--md {
44
+ height: 22px;
45
+ padding: 0 9px;
46
+ font-size: var(--fanui-font-size-xs);
47
+ }
48
+ .fanui-badge--lg {
49
+ height: 26px;
50
+ padding: 0 11px;
51
+ font-size: var(--fanui-font-size-sm);
52
+ }
53
+ .fanui-badge__dot {
54
+ width: 6px;
55
+ height: 6px;
56
+ border-radius: 50%;
57
+ background-color: currentColor;
58
+ flex: 0 0 auto;
59
+ }
60
+ .fanui-badge__count {
61
+ font-variant-numeric: tabular-nums;
62
+ }
63
+
64
+ .fanui-badge--primary {
65
+ background-color: var(--fanui-primary, #0e7490);
66
+ color: var(--fanui-primary-fg, #ffffff);
67
+ border-color: transparent;
68
+ }
69
+
70
+ .fanui-badge--soft.fanui-badge--primary {
71
+ background-color: var(--fanui-primary-soft);
72
+ color: var(--fanui-primary);
73
+ border-color: var(--fanui-primary-border);
74
+ }
75
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--primary {
76
+ color: var(--fanui-primary-ink, rgb(33.8431372549%, 61.8431372549%, 69.5294117647%));
77
+ }
78
+
79
+ .fanui-badge--outline.fanui-badge--primary {
80
+ background-color: transparent;
81
+ color: var(--fanui-primary);
82
+ border-color: var(--fanui-primary);
83
+ }
84
+
85
+ .fanui-badge--dot.fanui-badge--primary {
86
+ background-color: var(--fanui-primary);
87
+ }
88
+
89
+ .fanui-badge--accent {
90
+ background-color: var(--fanui-accent, #7c3aed);
91
+ color: var(--fanui-accent-fg, #ffffff);
92
+ border-color: transparent;
93
+ }
94
+
95
+ .fanui-badge--soft.fanui-badge--accent {
96
+ background-color: var(--fanui-accent-soft);
97
+ color: var(--fanui-accent);
98
+ border-color: var(--fanui-accent-border);
99
+ }
100
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--accent {
101
+ color: var(--fanui-accent-ink, rgb(64.0392156863%, 45.9215686275%, 95.0588235294%));
102
+ }
103
+
104
+ .fanui-badge--outline.fanui-badge--accent {
105
+ background-color: transparent;
106
+ color: var(--fanui-accent);
107
+ border-color: var(--fanui-accent);
108
+ }
109
+
110
+ .fanui-badge--dot.fanui-badge--accent {
111
+ background-color: var(--fanui-accent);
112
+ }
113
+
114
+ .fanui-badge--success {
115
+ background-color: var(--fanui-success, #047857);
116
+ color: var(--fanui-success-fg, #ffffff);
117
+ border-color: transparent;
118
+ }
119
+
120
+ .fanui-badge--soft.fanui-badge--success {
121
+ background-color: var(--fanui-success-soft);
122
+ color: var(--fanui-success);
123
+ border-color: var(--fanui-success-border);
124
+ }
125
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--success {
126
+ color: var(--fanui-success-ink, rgb(31.0980392157%, 62.9411764706%, 53.8823529412%));
127
+ }
128
+
129
+ .fanui-badge--outline.fanui-badge--success {
130
+ background-color: transparent;
131
+ color: var(--fanui-success);
132
+ border-color: var(--fanui-success);
133
+ }
134
+
135
+ .fanui-badge--dot.fanui-badge--success {
136
+ background-color: var(--fanui-success);
137
+ }
138
+
139
+ .fanui-badge--warning {
140
+ background-color: var(--fanui-warning, #b45309);
141
+ color: var(--fanui-warning-fg, #ffffff);
142
+ border-color: transparent;
143
+ }
144
+
145
+ .fanui-badge--soft.fanui-badge--warning {
146
+ background-color: var(--fanui-warning-soft);
147
+ color: var(--fanui-warning);
148
+ border-color: var(--fanui-warning-border);
149
+ }
150
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--warning {
151
+ color: var(--fanui-warning-ink, rgb(79.4117647059%, 52.7843137255%, 32.4705882353%));
152
+ }
153
+
154
+ .fanui-badge--outline.fanui-badge--warning {
155
+ background-color: transparent;
156
+ color: var(--fanui-warning);
157
+ border-color: var(--fanui-warning);
158
+ }
159
+
160
+ .fanui-badge--dot.fanui-badge--warning {
161
+ background-color: var(--fanui-warning);
162
+ }
163
+
164
+ .fanui-badge--danger {
165
+ background-color: var(--fanui-danger, #b91c1c);
166
+ color: var(--fanui-danger-fg, #ffffff);
167
+ border-color: transparent;
168
+ }
169
+
170
+ .fanui-badge--soft.fanui-badge--danger {
171
+ background-color: var(--fanui-danger-soft);
172
+ color: var(--fanui-danger);
173
+ border-color: var(--fanui-danger-border);
174
+ }
175
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--danger {
176
+ color: var(--fanui-danger-ink, rgb(80.7843137255%, 37.6862745098%, 37.6862745098%));
177
+ }
178
+
179
+ .fanui-badge--outline.fanui-badge--danger {
180
+ background-color: transparent;
181
+ color: var(--fanui-danger);
182
+ border-color: var(--fanui-danger);
183
+ }
184
+
185
+ .fanui-badge--dot.fanui-badge--danger {
186
+ background-color: var(--fanui-danger);
187
+ }
188
+
189
+ .fanui-badge--info {
190
+ background-color: var(--fanui-info, #0369a1);
191
+ color: var(--fanui-info-fg, #ffffff);
192
+ border-color: transparent;
193
+ }
194
+
195
+ .fanui-badge--soft.fanui-badge--info {
196
+ background-color: var(--fanui-info-soft);
197
+ color: var(--fanui-info);
198
+ border-color: var(--fanui-info-border);
199
+ }
200
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--info {
201
+ color: var(--fanui-info-ink, rgb(30.8235294118%, 58.8235294118%, 74.1960784314%));
202
+ }
203
+
204
+ .fanui-badge--outline.fanui-badge--info {
205
+ background-color: transparent;
206
+ color: var(--fanui-info);
207
+ border-color: var(--fanui-info);
208
+ }
209
+
210
+ .fanui-badge--dot.fanui-badge--info {
211
+ background-color: var(--fanui-info);
212
+ }
213
+
214
+ .fanui-badge--neutral,
215
+ .fanui-badge--gray {
216
+ background-color: var(--fanui-color-text-muted);
217
+ color: var(--fanui-color-text-inverse);
218
+ border-color: transparent;
219
+ }
220
+
221
+ .fanui-badge--soft.fanui-badge--neutral,
222
+ .fanui-badge--soft.fanui-badge--gray {
223
+ background-color: var(--fanui-color-surface-sunken);
224
+ color: var(--fanui-color-text-muted);
225
+ border-color: var(--fanui-color-border);
226
+ }
227
+
228
+ .fanui-badge--dot {
229
+ width: 8px;
230
+ height: 8px;
231
+ min-width: 8px;
232
+ padding: 0;
233
+ border-radius: 50%;
234
+ background-color: var(--fanui-color-text-muted);
235
+ border: 0;
236
+ }
237
+ .fanui-badge--dot.fanui-badge--lg {
238
+ width: 10px;
239
+ height: 10px;
240
+ min-width: 10px;
241
+ }
242
+ .fanui-badge--dot.fanui-badge--sm {
243
+ width: 6px;
244
+ height: 6px;
245
+ min-width: 6px;
246
+ }
247
+ .fanui-badge--dot--pulse {
248
+ position: relative;
249
+ }
250
+ .fanui-badge--dot--pulse::after {
251
+ content: "";
252
+ position: absolute;
253
+ top: 0;
254
+ right: 0;
255
+ bottom: 0;
256
+ left: 0;
257
+ border-radius: 50%;
258
+ background-color: inherit;
259
+ animation: fanui-pulse 1.8s cubic-bezier(0.4, 0, 0.2, 1) infinite;
260
+ }
261
+
262
+ .fanui-badge-sup {
263
+ position: absolute;
264
+ top: 0;
265
+ right: 0;
266
+ transform: translate(50%, -50%);
267
+ z-index: 1;
268
+ transform-origin: 100% 0;
269
+ }
270
+ .fanui-badge-sup--dot {
271
+ width: 8px;
272
+ height: 8px;
273
+ padding: 0;
274
+ border-radius: 50%;
275
+ transform: translate(35%, -35%);
276
+ }
277
+ .fanui-badge-sup--bordered {
278
+ border: 2px solid var(--fanui-color-surface);
279
+ }
280
+
281
+ .fanui-badge-wrap {
282
+ position: relative;
283
+ display: inline-flex;
284
+ }
285
+
286
+ .fanui-tag {
287
+ display: inline-flex;
288
+ align-items: center;
289
+ gap: 6px;
290
+ height: 24px;
291
+ padding: 0 8px;
292
+ font-size: var(--fanui-font-size-sm);
293
+ line-height: 1;
294
+ color: var(--fanui-color-text);
295
+ background-color: var(--fanui-color-surface-sunken);
296
+ border: 1px solid var(--fanui-color-border);
297
+ border-radius: var(--fanui-radius-base);
298
+ box-sizing: border-box;
299
+ white-space: nowrap;
300
+ transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
301
+ }
302
+ .fanui-tag--pill {
303
+ border-radius: 9999px;
304
+ }
305
+ .fanui-tag--solid {
306
+ background-color: var(--fanui-color-text);
307
+ color: var(--fanui-color-surface);
308
+ border-color: transparent;
309
+ }
310
+ .fanui-tag--outline {
311
+ background-color: transparent;
312
+ }
313
+ .fanui-tag__close {
314
+ display: inline-flex;
315
+ align-items: center;
316
+ justify-content: center;
317
+ width: 14px;
318
+ height: 14px;
319
+ margin-inline-end: -2px;
320
+ padding: 0;
321
+ font-size: 12px;
322
+ line-height: 1;
323
+ color: var(--fanui-color-text-subtle);
324
+ background: none;
325
+ border: 0;
326
+ border-radius: 50%;
327
+ cursor: pointer;
328
+ transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
329
+ }
330
+ .fanui-tag__close:hover {
331
+ color: var(--fanui-color-text-strong);
332
+ background-color: rgba(15, 23, 42, 0.12);
333
+ }
334
+ .fanui-tag--interactive {
335
+ cursor: pointer;
336
+ }
337
+ .fanui-tag--interactive:hover {
338
+ border-color: var(--fanui-color-border-strong);
339
+ background-color: var(--fanui-color-hover);
340
+ }
341
+ .fanui-tag--selected {
342
+ background-color: var(--fanui-primary-soft);
343
+ border-color: var(--fanui-primary);
344
+ color: var(--fanui-primary);
345
+ }
346
+
347
+ .fanui-tag--primary {
348
+ background-color: var(--fanui-primary-soft);
349
+ border-color: var(--fanui-primary-border);
350
+ color: var(--fanui-primary);
351
+ }
352
+
353
+ .fanui-tag--accent {
354
+ background-color: var(--fanui-accent-soft);
355
+ border-color: var(--fanui-accent-border);
356
+ color: var(--fanui-accent);
357
+ }
358
+
359
+ .fanui-tag--success {
360
+ background-color: var(--fanui-success-soft);
361
+ border-color: var(--fanui-success-border);
362
+ color: var(--fanui-success);
363
+ }
364
+
365
+ .fanui-tag--warning {
366
+ background-color: var(--fanui-warning-soft);
367
+ border-color: var(--fanui-warning-border);
368
+ color: var(--fanui-warning);
369
+ }
370
+
371
+ .fanui-tag--danger {
372
+ background-color: var(--fanui-danger-soft);
373
+ border-color: var(--fanui-danger-border);
374
+ color: var(--fanui-danger);
375
+ }
376
+
377
+ .fanui-tag--info {
378
+ background-color: var(--fanui-info-soft);
379
+ border-color: var(--fanui-info-border);
380
+ color: var(--fanui-info);
381
+ }
382
+
383
+ .fanui-tag-list {
384
+ display: flex;
385
+ flex-wrap: wrap;
386
+ gap: var(--fanui-space-2);
387
+ }
388
+
389
+ .fanui-status {
390
+ display: inline-flex;
391
+ align-items: center;
392
+ gap: 6px;
393
+ font-size: var(--fanui-font-size-sm);
394
+ color: var(--fanui-color-text-muted);
395
+ }
396
+ .fanui-status__dot {
397
+ width: 6px;
398
+ height: 6px;
399
+ border-radius: 50%;
400
+ background-color: var(--fanui-color-text-muted);
401
+ flex: 0 0 auto;
402
+ }
403
+ .fanui-status--online {
404
+ color: var(--fanui-success);
405
+ }
406
+ .fanui-status--online .fanui-status__dot {
407
+ background-color: var(--fanui-success);
408
+ }
409
+ .fanui-status--offline {
410
+ color: var(--fanui-color-text-subtle);
411
+ }
412
+ .fanui-status--offline .fanui-status__dot {
413
+ background-color: var(--fanui-color-text-subtle);
414
+ }
415
+ .fanui-status--busy {
416
+ color: var(--fanui-danger);
417
+ }
418
+ .fanui-status--busy .fanui-status__dot {
419
+ background-color: var(--fanui-danger);
420
+ }
421
+ .fanui-status--away {
422
+ color: var(--fanui-warning);
423
+ }
424
+ .fanui-status--away .fanui-status__dot {
425
+ background-color: var(--fanui-warning);
426
+ }
@@ -0,0 +1,77 @@
1
+ .fanui-badge{display:inline-flex;align-items:center;justify-content:center;gap:4px;height:20px;padding:0 8px;font-size:var(--fanui-font-size-xs);font-weight:500;line-height:1;white-space:nowrap;vertical-align:middle;color:var(--fanui-color-text-inverse);background-color:var(--fanui-color-text-muted);border:1px solid transparent;border-radius:var(--fanui-radius-sm);box-sizing:border-box}
2
+ .fanui-badge--pill{border-radius:9999px;padding:0 8px}
3
+ .fanui-badge--square{border-radius:var(--fanui-radius-sm)}
4
+ .fanui-badge--circle{width:20px;padding:0;border-radius:50%;font-variant-numeric:tabular-nums}
5
+ .fanui-badge--xs{height:16px;padding:0 6px;font-size:10px}
6
+ .fanui-badge--sm{height:18px;padding:0 7px;font-size:11px}
7
+ .fanui-badge--md{height:22px;padding:0 9px;font-size:var(--fanui-font-size-xs)}
8
+ .fanui-badge--lg{height:26px;padding:0 11px;font-size:var(--fanui-font-size-sm)}
9
+ .fanui-badge__dot{width:6px;height:6px;border-radius:50%;background-color:currentColor;flex:0 0 auto}
10
+ .fanui-badge__count{font-variant-numeric:tabular-nums}
11
+ .fanui-badge--primary{background-color:var(--fanui-primary,#0e7490);color:var(--fanui-primary-fg,#ffffff);border-color:transparent}
12
+ .fanui-badge--soft.fanui-badge--primary{background-color:var(--fanui-primary-soft);color:var(--fanui-primary);border-color:var(--fanui-primary-border)}
13
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--primary{color:var(--fanui-primary-ink,rgb(33.8431372549%,61.8431372549%,69.5294117647%))}
14
+ .fanui-badge--outline.fanui-badge--primary{background-color:transparent;color:var(--fanui-primary);border-color:var(--fanui-primary)}
15
+ .fanui-badge--dot.fanui-badge--primary{background-color:var(--fanui-primary)}
16
+ .fanui-badge--accent{background-color:var(--fanui-accent,#7c3aed);color:var(--fanui-accent-fg,#ffffff);border-color:transparent}
17
+ .fanui-badge--soft.fanui-badge--accent{background-color:var(--fanui-accent-soft);color:var(--fanui-accent);border-color:var(--fanui-accent-border)}
18
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--accent{color:var(--fanui-accent-ink,rgb(64.0392156863%,45.9215686275%,95.0588235294%))}
19
+ .fanui-badge--outline.fanui-badge--accent{background-color:transparent;color:var(--fanui-accent);border-color:var(--fanui-accent)}
20
+ .fanui-badge--dot.fanui-badge--accent{background-color:var(--fanui-accent)}
21
+ .fanui-badge--success{background-color:var(--fanui-success,#047857);color:var(--fanui-success-fg,#ffffff);border-color:transparent}
22
+ .fanui-badge--soft.fanui-badge--success{background-color:var(--fanui-success-soft);color:var(--fanui-success);border-color:var(--fanui-success-border)}
23
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--success{color:var(--fanui-success-ink,rgb(31.0980392157%,62.9411764706%,53.8823529412%))}
24
+ .fanui-badge--outline.fanui-badge--success{background-color:transparent;color:var(--fanui-success);border-color:var(--fanui-success)}
25
+ .fanui-badge--dot.fanui-badge--success{background-color:var(--fanui-success)}
26
+ .fanui-badge--warning{background-color:var(--fanui-warning,#b45309);color:var(--fanui-warning-fg,#ffffff);border-color:transparent}
27
+ .fanui-badge--soft.fanui-badge--warning{background-color:var(--fanui-warning-soft);color:var(--fanui-warning);border-color:var(--fanui-warning-border)}
28
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--warning{color:var(--fanui-warning-ink,rgb(79.4117647059%,52.7843137255%,32.4705882353%))}
29
+ .fanui-badge--outline.fanui-badge--warning{background-color:transparent;color:var(--fanui-warning);border-color:var(--fanui-warning)}
30
+ .fanui-badge--dot.fanui-badge--warning{background-color:var(--fanui-warning)}
31
+ .fanui-badge--danger{background-color:var(--fanui-danger,#b91c1c);color:var(--fanui-danger-fg,#ffffff);border-color:transparent}
32
+ .fanui-badge--soft.fanui-badge--danger{background-color:var(--fanui-danger-soft);color:var(--fanui-danger);border-color:var(--fanui-danger-border)}
33
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--danger{color:var(--fanui-danger-ink,rgb(80.7843137255%,37.6862745098%,37.6862745098%))}
34
+ .fanui-badge--outline.fanui-badge--danger{background-color:transparent;color:var(--fanui-danger);border-color:var(--fanui-danger)}
35
+ .fanui-badge--dot.fanui-badge--danger{background-color:var(--fanui-danger)}
36
+ .fanui-badge--info{background-color:var(--fanui-info,#0369a1);color:var(--fanui-info-fg,#ffffff);border-color:transparent}
37
+ .fanui-badge--soft.fanui-badge--info{background-color:var(--fanui-info-soft);color:var(--fanui-info);border-color:var(--fanui-info-border)}
38
+ [data-fanui-theme=dark] .fanui-badge--soft.fanui-badge--info{color:var(--fanui-info-ink,rgb(30.8235294118%,58.8235294118%,74.1960784314%))}
39
+ .fanui-badge--outline.fanui-badge--info{background-color:transparent;color:var(--fanui-info);border-color:var(--fanui-info)}
40
+ .fanui-badge--dot.fanui-badge--info{background-color:var(--fanui-info)}
41
+ .fanui-badge--neutral,.fanui-badge--gray{background-color:var(--fanui-color-text-muted);color:var(--fanui-color-text-inverse);border-color:transparent}
42
+ .fanui-badge--soft.fanui-badge--neutral,.fanui-badge--soft.fanui-badge--gray{background-color:var(--fanui-color-surface-sunken);color:var(--fanui-color-text-muted);border-color:var(--fanui-color-border)}
43
+ .fanui-badge--dot{width:8px;height:8px;min-width:8px;padding:0;border-radius:50%;background-color:var(--fanui-color-text-muted);border:0}
44
+ .fanui-badge--dot.fanui-badge--lg{width:10px;height:10px;min-width:10px}
45
+ .fanui-badge--dot.fanui-badge--sm{width:6px;height:6px;min-width:6px}
46
+ .fanui-badge--dot--pulse{position:relative}
47
+ .fanui-badge--dot--pulse::after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background-color:inherit;animation:fanui-pulse 1.8s cubic-bezier(0.4,0,0.2,1) infinite}
48
+ .fanui-badge-sup{position:absolute;top:0;right:0;transform:translate(50%,-50%);z-index:1;transform-origin:100% 0}
49
+ .fanui-badge-sup--dot{width:8px;height:8px;padding:0;border-radius:50%;transform:translate(35%,-35%)}
50
+ .fanui-badge-sup--bordered{border:2px solid var(--fanui-color-surface)}
51
+ .fanui-badge-wrap{position:relative;display:inline-flex}
52
+ .fanui-tag{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 8px;font-size:var(--fanui-font-size-sm);line-height:1;color:var(--fanui-color-text);background-color:var(--fanui-color-surface-sunken);border:1px solid var(--fanui-color-border);border-radius:var(--fanui-radius-base);box-sizing:border-box;white-space:nowrap;transition:background-color 150ms cubic-bezier(0.4,0,0.2,1) 0s,border-color 150ms cubic-bezier(0.4,0,0.2,1) 0s,color 150ms cubic-bezier(0.4,0,0.2,1) 0s}
53
+ .fanui-tag--pill{border-radius:9999px}
54
+ .fanui-tag--solid{background-color:var(--fanui-color-text);color:var(--fanui-color-surface);border-color:transparent}
55
+ .fanui-tag--outline{background-color:transparent}
56
+ .fanui-tag__close{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;margin-inline-end:-2px;padding:0;font-size:12px;line-height:1;color:var(--fanui-color-text-subtle);background:none;border:0;border-radius:50%;cursor:pointer;transition:background-color 150ms cubic-bezier(0.4,0,0.2,1) 0s,color 150ms cubic-bezier(0.4,0,0.2,1) 0s}
57
+ .fanui-tag__close:hover{color:var(--fanui-color-text-strong);background-color:rgba(15,23,42,0.12)}
58
+ .fanui-tag--interactive{cursor:pointer}
59
+ .fanui-tag--interactive:hover{border-color:var(--fanui-color-border-strong);background-color:var(--fanui-color-hover)}
60
+ .fanui-tag--selected{background-color:var(--fanui-primary-soft);border-color:var(--fanui-primary);color:var(--fanui-primary)}
61
+ .fanui-tag--primary{background-color:var(--fanui-primary-soft);border-color:var(--fanui-primary-border);color:var(--fanui-primary)}
62
+ .fanui-tag--accent{background-color:var(--fanui-accent-soft);border-color:var(--fanui-accent-border);color:var(--fanui-accent)}
63
+ .fanui-tag--success{background-color:var(--fanui-success-soft);border-color:var(--fanui-success-border);color:var(--fanui-success)}
64
+ .fanui-tag--warning{background-color:var(--fanui-warning-soft);border-color:var(--fanui-warning-border);color:var(--fanui-warning)}
65
+ .fanui-tag--danger{background-color:var(--fanui-danger-soft);border-color:var(--fanui-danger-border);color:var(--fanui-danger)}
66
+ .fanui-tag--info{background-color:var(--fanui-info-soft);border-color:var(--fanui-info-border);color:var(--fanui-info)}
67
+ .fanui-tag-list{display:flex;flex-wrap:wrap;gap:var(--fanui-space-2)}
68
+ .fanui-status{display:inline-flex;align-items:center;gap:6px;font-size:var(--fanui-font-size-sm);color:var(--fanui-color-text-muted)}
69
+ .fanui-status__dot{width:6px;height:6px;border-radius:50%;background-color:var(--fanui-color-text-muted);flex:0 0 auto}
70
+ .fanui-status--online{color:var(--fanui-success)}
71
+ .fanui-status--online .fanui-status__dot{background-color:var(--fanui-success)}
72
+ .fanui-status--offline{color:var(--fanui-color-text-subtle)}
73
+ .fanui-status--offline .fanui-status__dot{background-color:var(--fanui-color-text-subtle)}
74
+ .fanui-status--busy{color:var(--fanui-danger)}
75
+ .fanui-status--busy .fanui-status__dot{background-color:var(--fanui-danger)}
76
+ .fanui-status--away{color:var(--fanui-warning)}
77
+ .fanui-status--away .fanui-status__dot{background-color:var(--fanui-warning)}