twntyx-css 1.0.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 (228) hide show
  1. package/README.md +105 -0
  2. package/llm/CHANGELOG.md +7 -0
  3. package/llm/components/ai-background.json +90 -0
  4. package/llm/components/ai-orb.json +91 -0
  5. package/llm/components/ai-perl.json +91 -0
  6. package/llm/components/all-components.json +104 -0
  7. package/llm/components/animation-references.json +84 -0
  8. package/llm/components/avatar.json +149 -0
  9. package/llm/components/badge.json +263 -0
  10. package/llm/components/banner-marketplace.json +81 -0
  11. package/llm/components/banner.json +120 -0
  12. package/llm/components/breadcrumb.json +169 -0
  13. package/llm/components/button-container.json +150 -0
  14. package/llm/components/button-feedback.json +155 -0
  15. package/llm/components/button.json +290 -0
  16. package/llm/components/card-assessment.json +93 -0
  17. package/llm/components/card-test.json +83 -0
  18. package/llm/components/card.json +94 -0
  19. package/llm/components/chat.json +155 -0
  20. package/llm/components/checkbox.json +186 -0
  21. package/llm/components/checkmark.json +175 -0
  22. package/llm/components/collapsible.json +100 -0
  23. package/llm/components/color-palette.json +79 -0
  24. package/llm/components/color-usage.json +83 -0
  25. package/llm/components/combobox.json +143 -0
  26. package/llm/components/command-palette.json +159 -0
  27. package/llm/components/countdown.json +113 -0
  28. package/llm/components/datepicker.json +151 -0
  29. package/llm/components/divider.json +104 -0
  30. package/llm/components/empty-state.json +80 -0
  31. package/llm/components/field.json +123 -0
  32. package/llm/components/fieldset.json +78 -0
  33. package/llm/components/file-upload.json +163 -0
  34. package/llm/components/form-example.json +82 -0
  35. package/llm/components/getting-started.json +70 -0
  36. package/llm/components/icons-reference.json +78 -0
  37. package/llm/components/illustrations-library.json +78 -0
  38. package/llm/components/input-group.json +94 -0
  39. package/llm/components/introduction.json +71 -0
  40. package/llm/components/join.json +105 -0
  41. package/llm/components/kbd.json +139 -0
  42. package/llm/components/key-value.json +86 -0
  43. package/llm/components/link.json +120 -0
  44. package/llm/components/loader.json +117 -0
  45. package/llm/components/logotype.json +75 -0
  46. package/llm/components/menu.json +192 -0
  47. package/llm/components/modal.json +167 -0
  48. package/llm/components/navbar.json +158 -0
  49. package/llm/components/pagination.json +122 -0
  50. package/llm/components/pie-chart.json +94 -0
  51. package/llm/components/popover.json +174 -0
  52. package/llm/components/progress-bullet.json +203 -0
  53. package/llm/components/progress-linear.json +129 -0
  54. package/llm/components/progress-radial.json +125 -0
  55. package/llm/components/radio.json +162 -0
  56. package/llm/components/range-slider.json +125 -0
  57. package/llm/components/scrollbar.json +96 -0
  58. package/llm/components/select-input.json +224 -0
  59. package/llm/components/shadows.json +107 -0
  60. package/llm/components/skeleton.json +84 -0
  61. package/llm/components/stacked-chart.json +100 -0
  62. package/llm/components/state.json +138 -0
  63. package/llm/components/stepper.json +95 -0
  64. package/llm/components/steps.json +177 -0
  65. package/llm/components/surface.json +181 -0
  66. package/llm/components/table.json +223 -0
  67. package/llm/components/tabs.json +147 -0
  68. package/llm/components/template-ai.json +80 -0
  69. package/llm/components/template-login.json +88 -0
  70. package/llm/components/template-stats.json +76 -0
  71. package/llm/components/text-input.json +275 -0
  72. package/llm/components/textarea.json +183 -0
  73. package/llm/components/timeline.json +142 -0
  74. package/llm/components/toast.json +164 -0
  75. package/llm/components/toggle.json +158 -0
  76. package/llm/components/tool-svg-to-base64.json +78 -0
  77. package/llm/components/tool-svg-to-icon-data.json +81 -0
  78. package/llm/components/tooltip.json +90 -0
  79. package/llm/examples/ai-background.html +1 -0
  80. package/llm/examples/ai-orb.html +1 -0
  81. package/llm/examples/ai-perl.html +1 -0
  82. package/llm/examples/all-components.html +1 -0
  83. package/llm/examples/animation-references.html +1 -0
  84. package/llm/examples/avatar.html +1 -0
  85. package/llm/examples/badge.html +1 -0
  86. package/llm/examples/banner-marketplace.html +1 -0
  87. package/llm/examples/banner.html +1 -0
  88. package/llm/examples/breadcrumb.html +1 -0
  89. package/llm/examples/button-container.html +1 -0
  90. package/llm/examples/button-feedback.html +1 -0
  91. package/llm/examples/button.html +3 -0
  92. package/llm/examples/card-assessment.html +1 -0
  93. package/llm/examples/card-test.html +1 -0
  94. package/llm/examples/card.html +1 -0
  95. package/llm/examples/chat.html +1 -0
  96. package/llm/examples/checkbox.html +1 -0
  97. package/llm/examples/checkmark.html +1 -0
  98. package/llm/examples/collapsible.html +1 -0
  99. package/llm/examples/color-palette.html +1 -0
  100. package/llm/examples/color-usage.html +1 -0
  101. package/llm/examples/combobox.html +1 -0
  102. package/llm/examples/command-palette.html +1 -0
  103. package/llm/examples/countdown.html +1 -0
  104. package/llm/examples/datepicker.html +1 -0
  105. package/llm/examples/divider.html +1 -0
  106. package/llm/examples/empty-state.html +1 -0
  107. package/llm/examples/field.html +1 -0
  108. package/llm/examples/fieldset.html +1 -0
  109. package/llm/examples/file-upload.html +1 -0
  110. package/llm/examples/form-example.html +1 -0
  111. package/llm/examples/getting-started.html +1 -0
  112. package/llm/examples/icons-reference.html +1 -0
  113. package/llm/examples/illustrations-library.html +1 -0
  114. package/llm/examples/input-group.html +1 -0
  115. package/llm/examples/introduction.html +1 -0
  116. package/llm/examples/join.html +1 -0
  117. package/llm/examples/kbd.html +1 -0
  118. package/llm/examples/key-value.html +1 -0
  119. package/llm/examples/link.html +1 -0
  120. package/llm/examples/loader.html +1 -0
  121. package/llm/examples/logotype.html +1 -0
  122. package/llm/examples/menu.html +1 -0
  123. package/llm/examples/modal.html +16 -0
  124. package/llm/examples/navbar.html +1 -0
  125. package/llm/examples/pagination.html +1 -0
  126. package/llm/examples/pie-chart.html +1 -0
  127. package/llm/examples/popover.html +1 -0
  128. package/llm/examples/progress-bullet.html +1 -0
  129. package/llm/examples/progress-linear.html +1 -0
  130. package/llm/examples/progress-radial.html +1 -0
  131. package/llm/examples/radio.html +1 -0
  132. package/llm/examples/range-slider.html +1 -0
  133. package/llm/examples/scrollbar.html +1 -0
  134. package/llm/examples/select-input.html +1 -0
  135. package/llm/examples/shadows.html +1 -0
  136. package/llm/examples/skeleton.html +1 -0
  137. package/llm/examples/stacked-chart.html +1 -0
  138. package/llm/examples/state.html +1 -0
  139. package/llm/examples/stepper.html +1 -0
  140. package/llm/examples/steps.html +1 -0
  141. package/llm/examples/surface.html +1 -0
  142. package/llm/examples/table.html +16 -0
  143. package/llm/examples/tabs.html +1 -0
  144. package/llm/examples/template-ai.html +1 -0
  145. package/llm/examples/template-login.html +1 -0
  146. package/llm/examples/template-stats.html +1 -0
  147. package/llm/examples/text-input.html +10 -0
  148. package/llm/examples/textarea.html +1 -0
  149. package/llm/examples/timeline.html +1 -0
  150. package/llm/examples/toast.html +5 -0
  151. package/llm/examples/toggle.html +1 -0
  152. package/llm/examples/tool-svg-to-base64.html +1 -0
  153. package/llm/examples/tool-svg-to-icon-data.html +1 -0
  154. package/llm/examples/tooltip.html +1 -0
  155. package/llm/index.json +1615 -0
  156. package/llm/llms.txt +18 -0
  157. package/llm/patterns.json +111 -0
  158. package/llm/rules.json +47 -0
  159. package/llm/schema.json +804 -0
  160. package/llm/tokens.json +3629 -0
  161. package/package.json +30 -0
  162. package/styles/ai.css +114 -0
  163. package/styles/animation.css +2493 -0
  164. package/styles/avatar.css +101 -0
  165. package/styles/background-ai.css +118 -0
  166. package/styles/badge.css +274 -0
  167. package/styles/banner.css +98 -0
  168. package/styles/breadcrumb.css +72 -0
  169. package/styles/button.css +621 -0
  170. package/styles/card.css +27 -0
  171. package/styles/chart-pie.css +39 -0
  172. package/styles/chart-stacked.css +91 -0
  173. package/styles/chat.css +506 -0
  174. package/styles/checkmark.css +105 -0
  175. package/styles/code.css +264 -0
  176. package/styles/collapsible.css +93 -0
  177. package/styles/colors.css +536 -0
  178. package/styles/combobox.css +66 -0
  179. package/styles/command.css +81 -0
  180. package/styles/contest.css +227 -0
  181. package/styles/countdown.css +65 -0
  182. package/styles/datepicker.css +124 -0
  183. package/styles/divider.css +72 -0
  184. package/styles/drawer.css +142 -0
  185. package/styles/dropdown.css +22 -0
  186. package/styles/empty-state.css +48 -0
  187. package/styles/field.css +47 -0
  188. package/styles/fieldset.css +24 -0
  189. package/styles/form-checkbox-radio-toggle.css +233 -0
  190. package/styles/form-fileupload.css +146 -0
  191. package/styles/form-rangeslider.css +106 -0
  192. package/styles/form-shared.css +41 -0
  193. package/styles/form-text-select.css +411 -0
  194. package/styles/form.css +86 -0
  195. package/styles/globals.css +66 -0
  196. package/styles/input-group.css +63 -0
  197. package/styles/join.css +141 -0
  198. package/styles/kbd.css +55 -0
  199. package/styles/key-value.css +44 -0
  200. package/styles/link.css +48 -0
  201. package/styles/loader.css +183 -0
  202. package/styles/logotype.css +13 -0
  203. package/styles/menu.css +317 -0
  204. package/styles/modal.css +172 -0
  205. package/styles/navbar.css +48 -0
  206. package/styles/package-quill.css +1001 -0
  207. package/styles/pagination.css +147 -0
  208. package/styles/panel.css +113 -0
  209. package/styles/popover.css +303 -0
  210. package/styles/prism.css +60 -0
  211. package/styles/progress.css +209 -0
  212. package/styles/scrollbar.css +17 -0
  213. package/styles/shadow.css +25 -0
  214. package/styles/shared.css +226 -0
  215. package/styles/skeleton.css +34 -0
  216. package/styles/state.css +150 -0
  217. package/styles/stepper.css +72 -0
  218. package/styles/steps.css +98 -0
  219. package/styles/surface.css +252 -0
  220. package/styles/tab.css +286 -0
  221. package/styles/table.css +243 -0
  222. package/styles/theme.css +126 -0
  223. package/styles/timeline.css +193 -0
  224. package/styles/toast.css +150 -0
  225. package/styles/tooltip.css +8 -0
  226. package/styles/typography.css +160 -0
  227. package/styles/utility.css +20 -0
  228. package/tailwind.config.cjs +9 -0
@@ -0,0 +1,101 @@
1
+ /*----------------------------*/
2
+ /* AVATAR */
3
+ /*----------------------------*/
4
+
5
+ @utility avatar {
6
+ --badge-size: 25%;
7
+ --badge-border-width: 10%;
8
+ --badge-offset: 1%;
9
+
10
+ @apply inline-flex relative rounded-full;
11
+
12
+ /* Online/Offline indicators */
13
+ &.online,
14
+ &.offline {
15
+ .avatar-inner::before {
16
+ @apply content-[''] absolute z-10 block rounded-full size-(--badge-size) border border-[var(--badge-border-width)] border-background-surface right-(--badge-offset) bottom-(--badge-offset);
17
+ }
18
+ }
19
+
20
+ &.online .avatar-inner::before {
21
+ @apply bg-background-success-active;
22
+ }
23
+
24
+ &.offline .avatar-inner::before {
25
+ @apply bg-background-error-active;
26
+ }
27
+
28
+ &.avatar-hover {
29
+ @apply cursor-pointer include-interactive;
30
+ .avatar-inner {
31
+ @apply transition-all duration-300 ease-in-out;
32
+ img {
33
+ @apply transition-[filter] duration-300 ease-in-out brightness-100;
34
+ }
35
+ }
36
+
37
+ &:hover,
38
+ &:focus-visible {
39
+ .avatar-inner {
40
+ @apply bg-background-neutral-active shadow-elevation-low;
41
+ img {
42
+ @apply brightness-110;
43
+ }
44
+ }
45
+ }
46
+ &:active {
47
+ .avatar-inner {
48
+ @apply bg-background-neutral-active shadow-elevation-low;
49
+ img {
50
+ @apply brightness-100 duration-0;
51
+ }
52
+ }
53
+ }
54
+ }
55
+
56
+ /* Placeholder styling */
57
+ /* Placeholder styling */
58
+ &.placeholder {
59
+ .avatar-inner {
60
+ @apply flex justify-center items-center bg-background-neutral;
61
+
62
+ span {
63
+ @apply text-text-secondary;
64
+ }
65
+ }
66
+
67
+ &.avatar-hover:hover .avatar-inner {
68
+ @apply bg-core-ui-400;
69
+ }
70
+
71
+ &.alt {
72
+ .avatar-inner {
73
+ @apply bg-core-green-100;
74
+ }
75
+ &.avatar-hover:hover .avatar-inner {
76
+ @apply bg-core-green-300;
77
+ }
78
+ }
79
+ }
80
+ }
81
+
82
+ /* Base avatar image container */
83
+ @utility avatar-inner {
84
+ @apply flex relative rounded-full bg-background-surface-sunken;
85
+
86
+ /* Image styling */
87
+ img {
88
+ @apply object-cover rounded-full size-full;
89
+ }
90
+ }
91
+
92
+ /* Avatar group */
93
+ @utility avatar-group {
94
+ @apply flex -space-x-4;
95
+
96
+ .avatar {
97
+ .avatar-inner {
98
+ @apply border-2 border-background-surface hover:z-10;
99
+ }
100
+ }
101
+ }
@@ -0,0 +1,118 @@
1
+ /*----------------------------*/
2
+ /* BACKGROUND AI */
3
+ /*----------------------------*/
4
+
5
+ :root {
6
+ --light-gradient: repeating-linear-gradient(
7
+ 100deg,
8
+ color-mix(in srgb, var(--color-core-white) 100%, transparent 0%) 0%,
9
+ color-mix(in srgb, var(--color-core-white) 20%, transparent 80%) 7%,
10
+ transparent 10%,
11
+ transparent 12%,
12
+ color-mix(in srgb, var(--color-core-white) 100%, transparent 0%) 16%
13
+ );
14
+ --light-borealis: repeating-linear-gradient(
15
+ 100deg,
16
+ color-mix(in srgb, var(--color-brand-moderate) 100%, transparent 0%) 10%,
17
+ color-mix(in srgb, var(--color-brand-soft) 100%, transparent 0%) 15%,
18
+ color-mix(in srgb, var(--color-brand-soft) 100%, transparent 0%) 20%,
19
+ transparent 25%,
20
+ color-mix(in srgb, var(--color-brand-moderate) 100%, transparent 0%) 30%
21
+ );
22
+
23
+ }
24
+ :root.dark {
25
+ --light-gradient: repeating-linear-gradient(
26
+ 100deg,
27
+ color-mix(in srgb, var(--color-core-black) 100%, transparent 0%) 0%,
28
+ color-mix(in srgb, var(--color-core-black) 20%, transparent 80%) 7%,
29
+ transparent 10%,
30
+ transparent 12%,
31
+ color-mix(in srgb, var(--color-core-black) 100%, transparent 0%) 16%
32
+ );
33
+ --light-borealis: repeating-linear-gradient(
34
+ 100deg,
35
+ color-mix(in srgb, var(--color-brand-default) 100%, transparent 0%) 10%,
36
+ color-mix(in srgb, var(--color-brand-soft) 100%, transparent 0%) 15%,
37
+ color-mix(in srgb, var(--color-brand-soft) 100%, transparent 0%) 20%,
38
+ transparent 25%,
39
+ color-mix(in srgb, var(--color-brand-default) 100%, transparent 0%) 30%
40
+ );
41
+ }
42
+
43
+ @utility background-ai-silk{
44
+ @apply relative overflow-clip;
45
+
46
+ &::before,
47
+ &::after {
48
+ @apply content-[''] absolute inset-0 pointer-events-none will-change-transform animate-[borealis_60s_linear_infinite] bg-[image:var(--light-gradient),var(--light-borealis)];
49
+ ;
50
+ }
51
+
52
+
53
+
54
+ &::before {
55
+ @apply z-0 -inset-[10px] opacity-20 mix-blend-darken;
56
+ mask-image: radial-gradient(ellipse at 100% 0%, black 10%, transparent 70%);
57
+ background-size:
58
+ 300% 300%,
59
+ 200% 200%;
60
+ background-position:
61
+ 50% 50%,
62
+ 50% 50%;
63
+ /* filter: blur(10px); */
64
+ }
65
+
66
+ &::after {
67
+ @apply z-10 opacity-25 mix-blend-hard-light bg-size-[200%_200%,100%_100%] bg-fixed;
68
+ }
69
+
70
+ > * {
71
+ @apply relative z-20;
72
+ }
73
+
74
+ &:not(.light) {
75
+ @apply dark:bg-brand-soft/45;
76
+ &::before,
77
+ &::after {
78
+ @apply dark:opacity-10 dark:mix-blend-overlay;
79
+ }
80
+ }
81
+ }
82
+
83
+ @keyframes borealis {
84
+ 0% {
85
+ background-position:
86
+ 0% 50%,
87
+ 0% 50%;
88
+ }
89
+ 50% {
90
+ background-position:
91
+ 100% 50%,
92
+ 100% 50%;
93
+ }
94
+ 100% {
95
+ background-position:
96
+ 0% 50%,
97
+ 0% 50%;
98
+ }
99
+ }
100
+
101
+
102
+
103
+ @utility background-ai-circles {
104
+ @apply bg-core-white to-brand-light/50 from-brand-soft bg-size-[520px_100%] bg-repeat-x animate-[badge-ai-gradient_10s_linear_infinite] bg-[radial-gradient(520px_520px_at_50%_50%,_var(--tw-gradient-from)_0%,_var(--tw-gradient-to)_30%)];
105
+
106
+ &:not(.light) {
107
+ @apply dark:bg-core-black dark:to-brand-soft/50 dark:from-brand-moderate/40;
108
+ }
109
+ }
110
+
111
+ @keyframes badge-ai-gradient {
112
+ 0% {
113
+ background-position: 520px 50%;
114
+ }
115
+ 100% {
116
+ background-position: -520px 50%;
117
+ }
118
+ }
@@ -0,0 +1,274 @@
1
+ /*----------------------------*/
2
+ /* BADGE */
3
+ /*----------------------------*/
4
+
5
+ @utility badge {
6
+ @apply font-body inline-flex gap-1 justify-center items-center font-semibold rounded-full border cursor-default shrink-0;
7
+
8
+ &[role="status"] {
9
+ @apply cursor-default;
10
+ }
11
+
12
+ &:empty {
13
+ @apply px-0 min-w-0! min-h-0! rounded-full aspect-square;
14
+
15
+ &.badge-sm {
16
+ @apply px-0 size-2;
17
+ }
18
+
19
+ &.badge-md {
20
+ @apply px-0 size-3;
21
+ }
22
+
23
+ &.badge-lg {
24
+ @apply px-0 size-4;
25
+ }
26
+ }
27
+
28
+ /* Icon styles */
29
+ & > svg {
30
+ @apply fill-current;
31
+ }
32
+
33
+ .button.button-close {
34
+ @apply p-0 text-current!;
35
+ }
36
+
37
+ > * {
38
+ @apply whitespace-nowrap;
39
+ }
40
+
41
+ .button-close.button {
42
+ @apply border-none;
43
+ }
44
+
45
+ /* SIZES */
46
+
47
+ & {
48
+ @apply px-2 py-1 text-xs [&>svg]:size-4 min-h-[26px] min-w-[26px];
49
+ &:has(svg:first-child) {
50
+ @apply pl-1.5;
51
+ }
52
+ &:has(.button-close:last-child) {
53
+ @apply pr-1;
54
+ }
55
+ .button.button-close,
56
+ .button-close {
57
+ --close-size: calc(26px - 0.5rem - 2px) !important;
58
+ }
59
+ }
60
+
61
+ &.badge-sm {
62
+ @apply gap-0.5 px-1.5 py-0.5 text-[10px] [&>svg]:size-3 min-h-[22px] min-w-[22px];
63
+ &:has(svg:first-child) {
64
+ @apply pl-1;
65
+ }
66
+ &:has(.button-close:last-child) {
67
+ @apply pr-1;
68
+ }
69
+ .button.button-close,
70
+ .button-close {
71
+ --close-size: calc(22px - 0.25rem - 6px) !important;
72
+ }
73
+ }
74
+
75
+ &.badge-lg {
76
+ @apply gap-2 px-3 py-1 text-sm [&>svg]:size-5 min-h-[30px] min-w-[30px];
77
+ &:has(svg:first-child) {
78
+ @apply pl-2;
79
+ }
80
+ &:has(.button-close:last-child) {
81
+ @apply pr-1;
82
+ }
83
+ .button.button-close,
84
+ .button-close {
85
+ --close-size: calc(30px - 0.5rem - 2px) !important;
86
+ }
87
+ }
88
+
89
+ /* VARIANTS */
90
+
91
+ & {
92
+ @apply border-line-neutral bg-background-neutral text-text-neutral;
93
+ .button-close {
94
+ @apply text-current;
95
+ &::before {
96
+ @apply bg-current;
97
+ }
98
+ }
99
+
100
+ &[button],
101
+ &.badge-interactive {
102
+ @apply cursor-pointer surface-interactive-neutral;
103
+ }
104
+ &.badge-filled {
105
+ @apply bg-text-default border-text-default text-core-white dark:text-core-black;
106
+ .button-close.button::before {
107
+ @apply bg-core-white dark:bg-core-black;
108
+ }
109
+ &.badge-interactive {
110
+ @apply hover:bg-text-default/75 hover:border-text-default/90;
111
+ }
112
+ }
113
+ }
114
+
115
+ &.badge-placeholder {
116
+ @apply surface-placeholder;
117
+ &.badge-interactive {
118
+ @apply surface-interactive-placeholder;
119
+ }
120
+ &.badge-filled {
121
+ @apply bg-text-default/75 border-text-default text-core-white dark:text-core-black;
122
+ &.badge-interactive {
123
+ @apply hover:bg-text-default/60 hover:border-text-default/90;
124
+ }
125
+ }
126
+ }
127
+
128
+ &.badge-success {
129
+ @apply surface-success;
130
+ &.badge-interactive {
131
+ @apply surface-interactive-success;
132
+ }
133
+ &:empty {
134
+ @apply bg-text-success from-text-success to-text-success border-text-success text-core-white dark:text-core-black;
135
+ }
136
+ &.badge-filled {
137
+ @apply bg-text-success border-text-success text-core-white dark:text-core-black;
138
+ &.badge-interactive {
139
+ &:hover {
140
+ @apply from-text-success/75 to-text-success/75 border-text-success;
141
+ }
142
+ }
143
+ }
144
+ }
145
+
146
+ &.badge-error {
147
+ @apply surface-error;
148
+ &.badge-interactive {
149
+ @apply surface-interactive-error;
150
+ }
151
+ &:empty {
152
+ @apply bg-text-error from-text-error to-text-error border-text-error text-core-white dark:text-core-black;
153
+ }
154
+ &.badge-filled {
155
+ @apply bg-text-error border-text-error text-core-white dark:text-core-black;
156
+ &.badge-interactive {
157
+ &:hover {
158
+ @apply from-text-error/75 to-text-error/75 border-text-error;
159
+ }
160
+ }
161
+ }
162
+ }
163
+
164
+ &.badge-warning {
165
+ @apply surface-warning;
166
+ &.badge-interactive {
167
+ @apply surface-interactive-warning;
168
+ }
169
+ &:empty {
170
+ @apply bg-text-warning from-text-warning to-text-warning border-text-warning text-core-white dark:text-core-black;
171
+ }
172
+ &.badge-filled {
173
+ @apply bg-text-warning border-text-warning text-core-white dark:text-core-black;
174
+ &.badge-interactive {
175
+ &:hover {
176
+ @apply from-text-warning/75 to-text-warning/75 border-text-warning;
177
+ }
178
+ }
179
+ }
180
+ }
181
+
182
+ &.badge-info {
183
+ @apply surface-info;
184
+ &.badge-interactive {
185
+ @apply surface-interactive-info;
186
+ }
187
+ &:empty {
188
+ @apply bg-text-info from-text-info to-text-info border-text-info text-text-inverted;
189
+ }
190
+ &.badge-filled {
191
+ @apply bg-text-info border-text-info text-text-inverted;
192
+ &.badge-interactive {
193
+ &:hover {
194
+ @apply from-text-info/75 to-text-info/75 border-text-info;
195
+ }
196
+ }
197
+ }
198
+ }
199
+
200
+ &.badge-attention {
201
+ @apply surface-attention;
202
+ &.badge-interactive {
203
+ @apply surface-interactive-attention;
204
+ }
205
+ &:empty {
206
+ @apply bg-transparent from-background-attention-active to-background-attention-active border-background-attention-active;
207
+ }
208
+ &.badge-filled {
209
+ @apply bg-text-attention border-text-attention text-text-inverted;
210
+ &.badge-interactive {
211
+ &:hover {
212
+ @apply from-text-attention/75 to-text-attention/75 border-text-attention;
213
+ }
214
+ }
215
+ }
216
+ }
217
+
218
+ &.badge-brand {
219
+ @apply border-line-brand bg-background-brand/20 text-brand-default;
220
+ &.badge-interactive {
221
+ @apply surface-interactive-brand;
222
+ }
223
+ &.badge-filled,
224
+ &:empty {
225
+ @apply text-text-inverted surface-brand;
226
+ &.badge-interactive {
227
+ @apply hover:bg-background-brand/75 hover:border-background-brand/90 hover:!text-text-default;
228
+ }
229
+ }
230
+ }
231
+
232
+ &.badge-ai {
233
+ @apply border-none text-brand-default background-ai-circles;
234
+ &.badge-filled,
235
+ &:empty {
236
+ @apply text-text-inverted from-brand-moderate to-brand-default;
237
+ }
238
+ &.badge-interactive {
239
+ @apply surface-interactive-brand;
240
+ }
241
+ }
242
+
243
+ &.badge-interactive {
244
+ @apply include-interactive;
245
+ }
246
+
247
+ /* Role fit badges */
248
+
249
+ &[class*="-status-"].badge {
250
+ @apply font-medium rounded border-none;
251
+ }
252
+
253
+ &.badge-status-undefined {
254
+ @apply bg-core-ui-200 dark:bg-core-ui-700 text-core-ui-600 dark:text-core-ui-300;
255
+ }
256
+ &.badge-status-verylow {
257
+ @apply bg-core-red-100 text-core-red-700;
258
+ }
259
+ &.badge-status-low {
260
+ @apply bg-core-orange-100 text-core-orange-700;
261
+ }
262
+ &.badge-status-medium {
263
+ @apply bg-core-green-50 text-core-green-700;
264
+ }
265
+ &.badge-status-high {
266
+ @apply bg-core-green-100 text-core-green-800;
267
+ }
268
+ &.badge-status-veryhigh {
269
+ @apply relative bg-core-green-200 text-core-green-900;
270
+ &::after {
271
+ @apply content-[''] overflow-hidden rounded-[inherit] block absolute z-0 inset-0 bg-blend-color-dodge opacity-50 animate-shine bg-[linear-gradient(30deg,_rgba(255,255,255,0)_35%,_rgba(255,255,255,1)_50%,_rgba(255,255,255,0)_60%)] dark:opacity-20 bg-no-repeat pointer-events-none;
272
+ }
273
+ }
274
+ }
@@ -0,0 +1,98 @@
1
+ /*----------------------------*/
2
+ /* BANNER */
3
+ /*----------------------------*/
4
+
5
+ @utility banner {
6
+ @apply flex gap-4 items-start p-4 text-sm rounded-xl;
7
+
8
+ /* Icon container */
9
+ .banner-icon {
10
+ @apply flex-shrink-0;
11
+
12
+ &:empty {
13
+ @apply bg-core-black/10 dark:bg-core-white/10 size-6;
14
+ }
15
+
16
+ > svg {
17
+ @apply size-6;
18
+ }
19
+ }
20
+
21
+ /* Content area */
22
+ .banner-content {
23
+ @apply flex-1 py-0.5 min-w-0;
24
+
25
+ /* Title */
26
+ .banner-title {
27
+ @apply font-medium;
28
+ }
29
+
30
+ /* Description */
31
+ .banner-description {
32
+ @apply mt-1 text-text-secondary;
33
+ }
34
+ }
35
+
36
+ /* Actions container */
37
+ .banner-actions {
38
+ @apply flex flex-wrap gap-2 mt-3;
39
+ }
40
+
41
+ /* Variants */
42
+ &.banner-info {
43
+ @apply surface-info;
44
+ .banner-icon {
45
+ &:empty {
46
+ @apply bg-text-info mask-info;
47
+ }
48
+ }
49
+ }
50
+
51
+ &.banner-success {
52
+ @apply surface-success;
53
+ .banner-icon {
54
+ &:empty {
55
+ @apply bg-text-success mask-check-circle;
56
+ }
57
+ }
58
+ }
59
+
60
+ &.banner-error {
61
+ @apply surface-error;
62
+ .banner-icon {
63
+ &:empty {
64
+ @apply bg-text-error mask-report;
65
+ }
66
+ }
67
+ }
68
+
69
+ &.banner-warning {
70
+ @apply surface-warning;
71
+ .banner-icon {
72
+ &:empty {
73
+ @apply bg-text-warning mask-warning;
74
+ }
75
+ }
76
+ }
77
+
78
+ &.banner-attention {
79
+ @apply surface-attention;
80
+ .banner-icon {
81
+ &:empty {
82
+ @apply bg-text-attention mask-warning;
83
+ }
84
+ }
85
+ }
86
+
87
+ /* Without icon */
88
+ &:not(:has(.banner-icon)) {
89
+ @apply pl-4;
90
+ }
91
+
92
+ /* Without title */
93
+ &:not(:has(.banner-title)) {
94
+ .banner-description {
95
+ @apply mt-0;
96
+ }
97
+ }
98
+ }
@@ -0,0 +1,72 @@
1
+ /*----------------------------*/
2
+ /* BREADCRUMB */
3
+ /*----------------------------*/
4
+
5
+ @utility breadcrumb {
6
+ @apply flex flex-wrap gap-1 items-center text-sm;
7
+
8
+ > :where(li, .breadcrumb-item) {
9
+ @apply inline-flex gap-1.5 items-center;
10
+
11
+ &.is-active {
12
+ @apply text-text-brand;
13
+ }
14
+
15
+ &.is-current {
16
+ @apply text-text-default;
17
+ }
18
+
19
+ &:where(.is-current, .breadcrumb-ellipsis)
20
+ :where(a, button, .breadcrumb-link) {
21
+ @apply pointer-events-none cursor-default hover:text-inherit active:text-inherit;
22
+ }
23
+ }
24
+
25
+ :where(a, button, .breadcrumb-link) {
26
+ @apply inline-flex gap-1 items-center rounded include-interactive include-hover-primary text-text-link hover:text-text-link-hover active:text-text-link-active;
27
+ }
28
+
29
+ :where(svg, .breadcrumb-icon) {
30
+ @apply inline-flex shrink-0 size-4 fill-current;
31
+ }
32
+
33
+ :where(.breadcrumb-separator) {
34
+ @apply inline-flex opacity-70 select-none text-text-tertiary;
35
+ }
36
+
37
+ :where(.breadcrumb-ellipsis) {
38
+ @apply text-text-tertiary select-none pointer-events-none;
39
+ }
40
+
41
+ &:not(:has(.breadcrumb-separator)) {
42
+ > :where(li, .breadcrumb-item):not(:last-child)::after {
43
+ content: "/";
44
+ @apply inline-flex opacity-70 ml-1 text-text-tertiary select-none;
45
+ }
46
+ }
47
+ }
48
+
49
+ /* Compatibility aliases */
50
+ @utility breadcrumb-item {
51
+ @apply inline-flex gap-1.5 items-center;
52
+ }
53
+
54
+ @utility breadcrumb-link {
55
+ @apply inline-flex gap-1 items-center rounded include-interactive include-hover-primary text-text-link hover:text-text-link-hover active:text-text-link-active;
56
+ }
57
+
58
+ @utility breadcrumb-separator {
59
+ @apply inline-flex opacity-70 select-none text-text-tertiary;
60
+ }
61
+
62
+ @utility breadcrumb-icon {
63
+ @apply inline-flex shrink-0 size-4 fill-current;
64
+ }
65
+
66
+ @utility breadcrumb-ellipsis {
67
+ @apply text-text-tertiary select-none pointer-events-none;
68
+
69
+ .breadcrumb-link {
70
+ @apply pointer-events-none cursor-default text-text-tertiary;
71
+ }
72
+ }