@luanthnh/cntt-ui 0.1.5

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 (255) hide show
  1. package/.storybook/globals.d.ts +1 -0
  2. package/.storybook/main.ts +29 -0
  3. package/.storybook/preview.ts +32 -0
  4. package/README.md +86 -0
  5. package/assets/fonts/Montserrat-Black.eot +0 -0
  6. package/assets/fonts/Montserrat-Black.ttf +0 -0
  7. package/assets/fonts/Montserrat-Black.woff +0 -0
  8. package/assets/fonts/Montserrat-Black.woff2 +0 -0
  9. package/assets/fonts/Montserrat-BlackItalic.eot +0 -0
  10. package/assets/fonts/Montserrat-BlackItalic.ttf +0 -0
  11. package/assets/fonts/Montserrat-BlackItalic.woff +0 -0
  12. package/assets/fonts/Montserrat-BlackItalic.woff2 +0 -0
  13. package/assets/fonts/Montserrat-Bold.eot +0 -0
  14. package/assets/fonts/Montserrat-Bold.ttf +0 -0
  15. package/assets/fonts/Montserrat-Bold.woff +0 -0
  16. package/assets/fonts/Montserrat-Bold.woff2 +0 -0
  17. package/assets/fonts/Montserrat-BoldItalic.eot +0 -0
  18. package/assets/fonts/Montserrat-BoldItalic.ttf +0 -0
  19. package/assets/fonts/Montserrat-BoldItalic.woff +0 -0
  20. package/assets/fonts/Montserrat-BoldItalic.woff2 +0 -0
  21. package/assets/fonts/Montserrat-ExtraBold.eot +0 -0
  22. package/assets/fonts/Montserrat-ExtraBold.ttf +0 -0
  23. package/assets/fonts/Montserrat-ExtraBold.woff +0 -0
  24. package/assets/fonts/Montserrat-ExtraBold.woff2 +0 -0
  25. package/assets/fonts/Montserrat-ExtraBoldItalic.eot +0 -0
  26. package/assets/fonts/Montserrat-ExtraBoldItalic.ttf +0 -0
  27. package/assets/fonts/Montserrat-ExtraBoldItalic.woff +0 -0
  28. package/assets/fonts/Montserrat-ExtraBoldItalic.woff2 +0 -0
  29. package/assets/fonts/Montserrat-ExtraLight.eot +0 -0
  30. package/assets/fonts/Montserrat-ExtraLight.ttf +0 -0
  31. package/assets/fonts/Montserrat-ExtraLight.woff +0 -0
  32. package/assets/fonts/Montserrat-ExtraLight.woff2 +0 -0
  33. package/assets/fonts/Montserrat-ExtraLightItalic.eot +0 -0
  34. package/assets/fonts/Montserrat-ExtraLightItalic.ttf +0 -0
  35. package/assets/fonts/Montserrat-ExtraLightItalic.woff +0 -0
  36. package/assets/fonts/Montserrat-ExtraLightItalic.woff2 +0 -0
  37. package/assets/fonts/Montserrat-Italic.eot +0 -0
  38. package/assets/fonts/Montserrat-Italic.ttf +0 -0
  39. package/assets/fonts/Montserrat-Italic.woff +0 -0
  40. package/assets/fonts/Montserrat-Italic.woff2 +0 -0
  41. package/assets/fonts/Montserrat-Light.eot +0 -0
  42. package/assets/fonts/Montserrat-Light.ttf +0 -0
  43. package/assets/fonts/Montserrat-Light.woff +0 -0
  44. package/assets/fonts/Montserrat-Light.woff2 +0 -0
  45. package/assets/fonts/Montserrat-LightItalic.eot +0 -0
  46. package/assets/fonts/Montserrat-LightItalic.ttf +0 -0
  47. package/assets/fonts/Montserrat-LightItalic.woff +0 -0
  48. package/assets/fonts/Montserrat-LightItalic.woff2 +0 -0
  49. package/assets/fonts/Montserrat-Medium.eot +0 -0
  50. package/assets/fonts/Montserrat-Medium.ttf +0 -0
  51. package/assets/fonts/Montserrat-Medium.woff +0 -0
  52. package/assets/fonts/Montserrat-Medium.woff2 +0 -0
  53. package/assets/fonts/Montserrat-MediumItalic.eot +0 -0
  54. package/assets/fonts/Montserrat-MediumItalic.ttf +0 -0
  55. package/assets/fonts/Montserrat-MediumItalic.woff +0 -0
  56. package/assets/fonts/Montserrat-MediumItalic.woff2 +0 -0
  57. package/assets/fonts/Montserrat-Regular.eot +0 -0
  58. package/assets/fonts/Montserrat-Regular.ttf +0 -0
  59. package/assets/fonts/Montserrat-Regular.woff +0 -0
  60. package/assets/fonts/Montserrat-Regular.woff2 +0 -0
  61. package/assets/fonts/Montserrat-SemiBold.eot +0 -0
  62. package/assets/fonts/Montserrat-SemiBold.ttf +0 -0
  63. package/assets/fonts/Montserrat-SemiBold.woff +0 -0
  64. package/assets/fonts/Montserrat-SemiBold.woff2 +0 -0
  65. package/assets/fonts/Montserrat-SemiBoldItalic.eot +0 -0
  66. package/assets/fonts/Montserrat-SemiBoldItalic.ttf +0 -0
  67. package/assets/fonts/Montserrat-SemiBoldItalic.woff +0 -0
  68. package/assets/fonts/Montserrat-SemiBoldItalic.woff2 +0 -0
  69. package/assets/fonts/Montserrat-Thin.eot +0 -0
  70. package/assets/fonts/Montserrat-Thin.ttf +0 -0
  71. package/assets/fonts/Montserrat-Thin.woff +0 -0
  72. package/assets/fonts/Montserrat-Thin.woff2 +0 -0
  73. package/assets/fonts/Montserrat-ThinItalic.eot +0 -0
  74. package/assets/fonts/Montserrat-ThinItalic.ttf +0 -0
  75. package/assets/fonts/Montserrat-ThinItalic.woff +0 -0
  76. package/assets/fonts/Montserrat-ThinItalic.woff2 +0 -0
  77. package/assets/fonts/Montserrat-Variable.eot +0 -0
  78. package/assets/fonts/Montserrat-Variable.ttf +0 -0
  79. package/assets/fonts/Montserrat-Variable.woff +0 -0
  80. package/assets/fonts/Montserrat-Variable.woff2 +0 -0
  81. package/assets/fonts/Montserrat-VariableItalic.eot +0 -0
  82. package/assets/fonts/Montserrat-VariableItalic.ttf +0 -0
  83. package/assets/fonts/Montserrat-VariableItalic.woff +0 -0
  84. package/assets/fonts/Montserrat-VariableItalic.woff2 +0 -0
  85. package/assets/icons/arrow-left.svg +1 -0
  86. package/assets/icons/file.svg +1 -0
  87. package/assets/icons/globe.svg +1 -0
  88. package/assets/icons/logo-line.svg +1 -0
  89. package/assets/icons/next.svg +1 -0
  90. package/assets/icons/panel-left-expand.svg +1 -0
  91. package/assets/icons/placeholder.svg +57 -0
  92. package/assets/icons/vercel.svg +1 -0
  93. package/assets/icons/window.svg +1 -0
  94. package/assets/lotties/error-404.json +19642 -0
  95. package/assets/lotties/error.json +2414 -0
  96. package/assets/lotties/loader.json +305 -0
  97. package/components/Welcome.mdx +74 -0
  98. package/components/lenis/index.tsx +48 -0
  99. package/components/motion/auto-height.tsx +56 -0
  100. package/components/motion/cursor.tsx +108 -0
  101. package/components/motion/highlight.tsx +605 -0
  102. package/components/motion/number-ticker.tsx +55 -0
  103. package/components/motion/slot.tsx +106 -0
  104. package/components/motion/waves.tsx +417 -0
  105. package/components/primitives/tabs.tsx +174 -0
  106. package/components/ui/Accordion/index.stories.tsx +39 -0
  107. package/components/ui/Accordion/index.tsx +170 -0
  108. package/components/ui/Alert/index.stories.tsx +39 -0
  109. package/components/ui/Alert/index.tsx +60 -0
  110. package/components/ui/AlertDialog/index.stories.tsx +47 -0
  111. package/components/ui/AlertDialog/index.tsx +172 -0
  112. package/components/ui/AspectRatio/index.stories.tsx +40 -0
  113. package/components/ui/AspectRatio/index.tsx +9 -0
  114. package/components/ui/Avatar/index.stories.tsx +39 -0
  115. package/components/ui/Avatar/index.tsx +44 -0
  116. package/components/ui/Badge/index.stories.tsx +64 -0
  117. package/components/ui/Badge/index.tsx +46 -0
  118. package/components/ui/Breadcrumb/index.stories.tsx +64 -0
  119. package/components/ui/Breadcrumb/index.tsx +102 -0
  120. package/components/ui/Button/index.stories.tsx +232 -0
  121. package/components/ui/Button/index.tsx +114 -0
  122. package/components/ui/Calendar/index.stories.tsx +20 -0
  123. package/components/ui/Calendar/index.tsx +149 -0
  124. package/components/ui/Card/index.stories.tsx +39 -0
  125. package/components/ui/Card/index.tsx +65 -0
  126. package/components/ui/Carousel/index.stories.tsx +37 -0
  127. package/components/ui/Carousel/index.tsx +242 -0
  128. package/components/ui/Chart/index.stories.tsx +53 -0
  129. package/components/ui/Chart/index.tsx +322 -0
  130. package/components/ui/Checkbox/index.stories.tsx +56 -0
  131. package/components/ui/Checkbox/index.tsx +167 -0
  132. package/components/ui/CircleProcess/index.stories.tsx +29 -0
  133. package/components/ui/CircleProcess/index.tsx +50 -0
  134. package/components/ui/Collapsible/index.stories.tsx +33 -0
  135. package/components/ui/Collapsible/index.tsx +124 -0
  136. package/components/ui/Command/index.stories.tsx +65 -0
  137. package/components/ui/Command/index.tsx +161 -0
  138. package/components/ui/Container/index.stories.tsx +22 -0
  139. package/components/ui/Container/index.tsx +30 -0
  140. package/components/ui/ContextMenu/index.stories.tsx +51 -0
  141. package/components/ui/ContextMenu/index.tsx +224 -0
  142. package/components/ui/Dialog/index.stories.tsx +44 -0
  143. package/components/ui/Dialog/index.tsx +156 -0
  144. package/components/ui/Drawer/index.stories.tsx +54 -0
  145. package/components/ui/Drawer/index.tsx +124 -0
  146. package/components/ui/DropdownMenu/index.stories.tsx +83 -0
  147. package/components/ui/DropdownMenu/index.tsx +231 -0
  148. package/components/ui/Dropzone/index.stories.tsx +18 -0
  149. package/components/ui/Dropzone/index.tsx +47 -0
  150. package/components/ui/Form/date-field.tsx +77 -0
  151. package/components/ui/Form/index.stories.tsx +67 -0
  152. package/components/ui/Form/index.tsx +188 -0
  153. package/components/ui/Form/select-field.tsx +55 -0
  154. package/components/ui/Form/text-area-field.tsx +37 -0
  155. package/components/ui/Form/text-field.tsx +72 -0
  156. package/components/ui/HStack/index.stories.tsx +48 -0
  157. package/components/ui/HStack/index.tsx +73 -0
  158. package/components/ui/HoverCard/index.stories.tsx +38 -0
  159. package/components/ui/HoverCard/index.tsx +38 -0
  160. package/components/ui/Icons/index.stories.tsx +27 -0
  161. package/components/ui/Icons/index.tsx +33 -0
  162. package/components/ui/ImageWithFallback/index.stories.tsx +32 -0
  163. package/components/ui/ImageWithFallback/index.tsx +34 -0
  164. package/components/ui/Input/index.stories.tsx +47 -0
  165. package/components/ui/Input/index.tsx +21 -0
  166. package/components/ui/InputOtp/index.stories.tsx +35 -0
  167. package/components/ui/InputOtp/index.tsx +70 -0
  168. package/components/ui/Label/index.stories.tsx +18 -0
  169. package/components/ui/Label/index.tsx +21 -0
  170. package/components/ui/Marquee/index.stories.tsx +71 -0
  171. package/components/ui/Marquee/index.tsx +65 -0
  172. package/components/ui/Menubar/index.stories.tsx +116 -0
  173. package/components/ui/Menubar/index.tsx +252 -0
  174. package/components/ui/NavigationMenu/index.stories.tsx +112 -0
  175. package/components/ui/NavigationMenu/index.tsx +185 -0
  176. package/components/ui/NoData/index.stories.tsx +24 -0
  177. package/components/ui/NoData/index.tsx +19 -0
  178. package/components/ui/Pagination/index.stories.tsx +53 -0
  179. package/components/ui/Pagination/index.tsx +114 -0
  180. package/components/ui/Popover/index.stories.tsx +31 -0
  181. package/components/ui/Popover/index.tsx +42 -0
  182. package/components/ui/Progress/index.stories.tsx +35 -0
  183. package/components/ui/Progress/index.tsx +28 -0
  184. package/components/ui/RadioGroup/index.stories.tsx +28 -0
  185. package/components/ui/RadioGroup/index.tsx +45 -0
  186. package/components/ui/Resizable/index.stories.tsx +44 -0
  187. package/components/ui/Resizable/index.tsx +54 -0
  188. package/components/ui/ScrollArea/index.stories.tsx +31 -0
  189. package/components/ui/ScrollArea/index.tsx +56 -0
  190. package/components/ui/Select/index.stories.tsx +64 -0
  191. package/components/ui/Select/index.tsx +170 -0
  192. package/components/ui/Separator/index.stories.tsx +31 -0
  193. package/components/ui/Separator/index.tsx +28 -0
  194. package/components/ui/Sheet/index.stories.tsx +45 -0
  195. package/components/ui/Sheet/index.tsx +130 -0
  196. package/components/ui/Sidebar/index.stories.tsx +82 -0
  197. package/components/ui/Sidebar/index.tsx +676 -0
  198. package/components/ui/Skeleton/index.stories.tsx +36 -0
  199. package/components/ui/Skeleton/index.tsx +13 -0
  200. package/components/ui/Slider/index.stories.tsx +48 -0
  201. package/components/ui/Slider/index.tsx +82 -0
  202. package/components/ui/Slot/index.stories.tsx +29 -0
  203. package/components/ui/Slot/index.tsx +106 -0
  204. package/components/ui/Sonner/index.stories.tsx +36 -0
  205. package/components/ui/Sonner/index.tsx +31 -0
  206. package/components/ui/Switch/index.stories.tsx +33 -0
  207. package/components/ui/Switch/index.tsx +28 -0
  208. package/components/ui/Table/index.stories.tsx +74 -0
  209. package/components/ui/Table/index.tsx +95 -0
  210. package/components/ui/Tabs/index.stories.tsx +38 -0
  211. package/components/ui/Tabs/index.tsx +78 -0
  212. package/components/ui/Text/index.stories.tsx +53 -0
  213. package/components/ui/Text/index.tsx +138 -0
  214. package/components/ui/Textarea/index.stories.tsx +25 -0
  215. package/components/ui/Textarea/index.tsx +18 -0
  216. package/components/ui/Toggle/index.stories.tsx +52 -0
  217. package/components/ui/Toggle/index.tsx +46 -0
  218. package/components/ui/ToggleGroup/index.stories.tsx +52 -0
  219. package/components/ui/ToggleGroup/index.tsx +69 -0
  220. package/components/ui/Tooltip/index.stories.tsx +29 -0
  221. package/components/ui/Tooltip/index.tsx +35 -0
  222. package/components/ui/VStack/index.stories.tsx +45 -0
  223. package/components/ui/VStack/index.tsx +69 -0
  224. package/components/ui/colors.stories.tsx +148 -0
  225. package/dist/arrow-left-46B4CAEY.svg +1 -0
  226. package/dist/file-4IXBJF4J.svg +1 -0
  227. package/dist/globe-KVAXBN2U.svg +1 -0
  228. package/dist/index.cjs +6001 -0
  229. package/dist/index.cjs.map +1 -0
  230. package/dist/index.d.cts +693 -0
  231. package/dist/index.d.ts +693 -0
  232. package/dist/index.js +5714 -0
  233. package/dist/index.js.map +1 -0
  234. package/dist/logo-line-QLUD5DAV.svg +1 -0
  235. package/dist/next-HOXZBJQP.svg +1 -0
  236. package/dist/panel-left-expand-SIPFBG4J.svg +1 -0
  237. package/dist/placeholder-H3V4XYVI.svg +57 -0
  238. package/dist/vercel-KFYFHF3A.svg +1 -0
  239. package/dist/window-JNUL4Q2E.svg +1 -0
  240. package/eslint.config.js +10 -0
  241. package/globals.css +994 -0
  242. package/hooks/index.ts +3 -0
  243. package/hooks/use-auto-height.tsx +99 -0
  244. package/hooks/use-controlled-state.tsx +32 -0
  245. package/hooks/use-mobile.ts +19 -0
  246. package/index.ts +58 -0
  247. package/lib/get-strict-context.ts +15 -0
  248. package/lib/utils.ts +10 -0
  249. package/package.json +107 -0
  250. package/scripts/generate-exports.ts +32 -0
  251. package/tsconfig.json +12 -0
  252. package/tsconfig.tsbuildinfo +1 -0
  253. package/tsup.config.ts +11 -0
  254. package/types/svg.d.ts +10 -0
  255. package/vercel.json +5 -0
package/globals.css ADDED
@@ -0,0 +1,994 @@
1
+ @import 'tailwindcss';
2
+ /* @import 'tw-animate-css'; */
3
+ @plugin '@tailwindcss/typography';
4
+
5
+ @custom-variant dark (&:is(.dark *));
6
+
7
+ @font-face {
8
+ font-family: 'Montserrat';
9
+ src:
10
+ url('./assets/fonts/Montserrat-Thin.woff2') format('woff2'),
11
+ url('./assets/fonts/Montserrat-Thin.woff') format('woff'),
12
+ url('./assets/fonts/Montserrat-Thin.ttf') format('truetype');
13
+ font-weight: 100;
14
+ font-display: swap;
15
+ font-style: normal;
16
+ }
17
+ @font-face {
18
+ font-family: 'Montserrat';
19
+ src:
20
+ url('./assets/fonts/Montserrat-ThinItalic.woff2') format('woff2'),
21
+ url('./assets/fonts/Montserrat-ThinItalic.woff') format('woff'),
22
+ url('./assets/fonts/Montserrat-ThinItalic.ttf') format('truetype');
23
+ font-weight: 100;
24
+ font-display: swap;
25
+ font-style: italic;
26
+ }
27
+ @font-face {
28
+ font-family: 'Montserrat';
29
+ src:
30
+ url('./assets/fonts/Montserrat-ExtraLight.woff2') format('woff2'),
31
+ url('./assets/fonts/Montserrat-ExtraLight.woff') format('woff'),
32
+ url('./assets/fonts/Montserrat-ExtraLight.ttf') format('truetype');
33
+ font-weight: 200;
34
+ font-display: swap;
35
+ font-style: normal;
36
+ }
37
+ @font-face {
38
+ font-family: 'Montserrat';
39
+ src:
40
+ url('./assets/fonts/Montserrat-ExtraLightItalic.woff2') format('woff2'),
41
+ url('./assets/fonts/Montserrat-ExtraLightItalic.woff') format('woff'),
42
+ url('./assets/fonts/Montserrat-ExtraLightItalic.ttf') format('truetype');
43
+ font-weight: 200;
44
+ font-display: swap;
45
+ font-style: italic;
46
+ }
47
+ @font-face {
48
+ font-family: 'Montserrat';
49
+ src:
50
+ url('./assets/fonts/Montserrat-Light.woff2') format('woff2'),
51
+ url('./assets/fonts/Montserrat-Light.woff') format('woff'),
52
+ url('./assets/fonts/Montserrat-Light.ttf') format('truetype');
53
+ font-weight: 300;
54
+ font-display: swap;
55
+ font-style: normal;
56
+ }
57
+ @font-face {
58
+ font-family: 'Montserrat';
59
+ src:
60
+ url('./assets/fonts/Montserrat-LightItalic.woff2') format('woff2'),
61
+ url('./assets/fonts/Montserrat-LightItalic.woff') format('woff'),
62
+ url('./assets/fonts/Montserrat-LightItalic.ttf') format('truetype');
63
+ font-weight: 300;
64
+ font-display: swap;
65
+ font-style: italic;
66
+ }
67
+ @font-face {
68
+ font-family: 'Montserrat';
69
+ src:
70
+ url('./assets/fonts/Montserrat-Regular.woff2') format('woff2'),
71
+ url('./assets/fonts/Montserrat-Regular.woff') format('woff'),
72
+ url('./assets/fonts/Montserrat-Regular.ttf') format('truetype');
73
+ font-weight: 400;
74
+ font-display: swap;
75
+ font-style: normal;
76
+ }
77
+ @font-face {
78
+ font-family: 'Montserrat';
79
+ src:
80
+ url('./assets/fonts/Montserrat-Italic.woff2') format('woff2'),
81
+ url('./assets/fonts/Montserrat-Italic.woff') format('woff'),
82
+ url('./assets/fonts/Montserrat-Italic.ttf') format('truetype');
83
+ font-weight: 400;
84
+ font-display: swap;
85
+ font-style: italic;
86
+ }
87
+ @font-face {
88
+ font-family: 'Montserrat';
89
+ src:
90
+ url('./assets/fonts/Montserrat-Medium.woff2') format('woff2'),
91
+ url('./assets/fonts/Montserrat-Medium.woff') format('woff'),
92
+ url('./assets/fonts/Montserrat-Medium.ttf') format('truetype');
93
+ font-weight: 500;
94
+ font-display: swap;
95
+ font-style: normal;
96
+ }
97
+ @font-face {
98
+ font-family: 'Montserrat';
99
+ src:
100
+ url('./assets/fonts/Montserrat-MediumItalic.woff2') format('woff2'),
101
+ url('./assets/fonts/Montserrat-MediumItalic.woff') format('woff'),
102
+ url('./assets/fonts/Montserrat-MediumItalic.ttf') format('truetype');
103
+ font-weight: 500;
104
+ font-display: swap;
105
+ font-style: italic;
106
+ }
107
+ @font-face {
108
+ font-family: 'Montserrat';
109
+ src:
110
+ url('./assets/fonts/Montserrat-SemiBold.woff2') format('woff2'),
111
+ url('./assets/fonts/Montserrat-SemiBold.woff') format('woff'),
112
+ url('./assets/fonts/Montserrat-SemiBold.ttf') format('truetype');
113
+ font-weight: 600;
114
+ font-display: swap;
115
+ font-style: normal;
116
+ }
117
+ @font-face {
118
+ font-family: 'Montserrat';
119
+ src:
120
+ url('./assets/fonts/Montserrat-SemiBoldItalic.woff2') format('woff2'),
121
+ url('./assets/fonts/Montserrat-SemiBoldItalic.woff') format('woff'),
122
+ url('./assets/fonts/Montserrat-SemiBoldItalic.ttf') format('truetype');
123
+ font-weight: 600;
124
+ font-display: swap;
125
+ font-style: italic;
126
+ }
127
+ @font-face {
128
+ font-family: 'Montserrat';
129
+ src:
130
+ url('./assets/fonts/Montserrat-Bold.woff2') format('woff2'),
131
+ url('./assets/fonts/Montserrat-Bold.woff') format('woff'),
132
+ url('./assets/fonts/Montserrat-Bold.ttf') format('truetype');
133
+ font-weight: 700;
134
+ font-display: swap;
135
+ font-style: normal;
136
+ }
137
+ @font-face {
138
+ font-family: 'Montserrat';
139
+ src:
140
+ url('./assets/fonts/Montserrat-BoldItalic.woff2') format('woff2'),
141
+ url('./assets/fonts/Montserrat-BoldItalic.woff') format('woff'),
142
+ url('./assets/fonts/Montserrat-BoldItalic.ttf') format('truetype');
143
+ font-weight: 700;
144
+ font-display: swap;
145
+ font-style: italic;
146
+ }
147
+ @font-face {
148
+ font-family: 'Montserrat';
149
+ src:
150
+ url('./assets/fonts/Montserrat-ExtraBold.woff2') format('woff2'),
151
+ url('./assets/fonts/Montserrat-ExtraBold.woff') format('woff'),
152
+ url('./assets/fonts/Montserrat-ExtraBold.ttf') format('truetype');
153
+ font-weight: 800;
154
+ font-display: swap;
155
+ font-style: normal;
156
+ }
157
+ @font-face {
158
+ font-family: 'Montserrat';
159
+ src:
160
+ url('./assets/fonts/Montserrat-ExtraBoldItalic.woff2') format('woff2'),
161
+ url('./assets/fonts/Montserrat-ExtraBoldItalic.woff') format('woff'),
162
+ url('./assets/fonts/Montserrat-ExtraBoldItalic.ttf') format('truetype');
163
+ font-weight: 800;
164
+ font-display: swap;
165
+ font-style: italic;
166
+ }
167
+ @font-face {
168
+ font-family: 'Montserrat';
169
+ src:
170
+ url('./assets/fonts/Montserrat-Black.woff2') format('woff2'),
171
+ url('./assets/fonts/Montserrat-Black.woff') format('woff'),
172
+ url('./assets/fonts/Montserrat-Black.ttf') format('truetype');
173
+ font-weight: 900;
174
+ font-display: swap;
175
+ font-style: normal;
176
+ }
177
+ @font-face {
178
+ font-family: 'Montserrat';
179
+ src:
180
+ url('./assets/fonts/Montserrat-BlackItalic.woff2') format('woff2'),
181
+ url('./assets/fonts/Montserrat-BlackItalic.woff') format('woff'),
182
+ url('./assets/fonts/Montserrat-BlackItalic.ttf') format('truetype');
183
+ font-weight: 900;
184
+ font-display: swap;
185
+ font-style: italic;
186
+ }
187
+
188
+ :root {
189
+ --font-size: 16px;
190
+ --font-sans: 'Montserrat', sans-serif;
191
+
192
+ /* Modern education-focused blue color scheme */
193
+ --background: #fafbff;
194
+ --foreground: #0a0e1a;
195
+ --card: #ffffff;
196
+ --card-background: #f6f6f6;
197
+ --card-foreground: #0a0e1a;
198
+ --popover: #ffffff;
199
+ --popover-foreground: #0a0e1a;
200
+
201
+ /* Primary: Beautiful blue */
202
+ --primary: #1053f3;
203
+ --primary-foreground: #ffffff;
204
+ --primary-50: #f2f3ff;
205
+ --primary-100: #e4e7ff;
206
+ --primary-200: #c9cffe;
207
+ --primary-300: #aab4fe;
208
+ --primary-400: #8d9cfd;
209
+ --primary-500: #6e84fd;
210
+ --primary-600: #4a6cfc;
211
+ --primary-700: #1053f3;
212
+ --primary-800: #0736a6;
213
+ --primary-900: #021c62;
214
+ --primary-950: #011042;
215
+
216
+ /* Secondary: Soft blue-gray */
217
+ --secondary: #f8f9ff;
218
+ --secondary-foreground: #1e2030;
219
+ --secondary-50: #f8f9ff;
220
+ --secondary-100: #f0f2ff;
221
+ --secondary-200: #e6e8ff;
222
+
223
+ /* Muted: Sophisticated grays with blue hint */
224
+ --muted: #f1f3f9;
225
+ --muted-foreground: #64748b;
226
+
227
+ /* Accent: Light blue */
228
+ --accent: #f2f3ff;
229
+ --accent-foreground: #1053f3;
230
+
231
+ /* Success: Emerald green */
232
+ --success: #10b981;
233
+ --success-foreground: #ffffff;
234
+
235
+ /* Warning: Amber */
236
+ --warning: #f59e0b;
237
+ --warning-foreground: #ffffff;
238
+
239
+ /* Destructive: Red */
240
+ --destructive: #ef4444;
241
+ --destructive-foreground: #ffffff;
242
+
243
+ /* Border and input */
244
+ --border: #eaeaec;
245
+ --input: #e3e4e6;
246
+ --input-background: #f8f9ff;
247
+ --switch-background: #c9cffe;
248
+
249
+ /* Typography */
250
+ --font-weight-medium: 500;
251
+ --font-weight-normal: 400;
252
+ --font-weight-semibold: 600;
253
+ --font-weight-bold: 700;
254
+
255
+ /* Focus ring */
256
+ --ring: #1053f3;
257
+
258
+ /* Chart colors - blue themed */
259
+ --chart-1: #1053f3; /* Blue */
260
+ --chart-2: #10b981; /* Emerald */
261
+ --chart-3: #f59e0b; /* Amber */
262
+ --chart-4: #8b5cf6; /* Purple */
263
+ --chart-5: #ef4444; /* Red */
264
+
265
+ /* Border radius */
266
+ --radius: 0.5rem;
267
+
268
+ /* Sidebar */
269
+ --sidebar: #ffffff;
270
+ --sidebar-foreground: #0f172a;
271
+ --sidebar-primary: #1053f3;
272
+ --sidebar-primary-foreground: #ffffff;
273
+ --sidebar-accent: #f2f3ff;
274
+ --sidebar-accent-foreground: #334155;
275
+ --sidebar-border: #e4e7ff;
276
+ --sidebar-ring: #1053f3;
277
+
278
+ /* Shadows */
279
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
280
+ --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
281
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
282
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
283
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
284
+
285
+ --animation-marquee-left: marquee-left var(--duration, 40s) linear infinite;
286
+ --animation-marquee-up: marquee-up var(--duration, 40s) linear infinite;
287
+ }
288
+
289
+ .dark {
290
+ --background: #0a0e1a;
291
+ --foreground: #f1f3f9;
292
+ --card: #151b2e;
293
+ --card-foreground: #f1f3f9;
294
+ --card-background: #151b2e;
295
+ --popover: #151b2e;
296
+ --popover-foreground: #f1f3f9;
297
+
298
+ /* Primary: Bright blue for dark mode */
299
+ --primary: #1053f3;
300
+ --primary-foreground: #ffffff;
301
+
302
+ /* Secondary: Dark blue-gray */
303
+ --secondary: #1e2b47;
304
+ --secondary-foreground: #f1f3f9;
305
+
306
+ /* Muted: Darker blue-grays */
307
+ --muted: #1e2b47;
308
+ --muted-foreground: #94a3b8;
309
+
310
+ /* Accent: Dark blue */
311
+ --accent: #021c62;
312
+ --accent-foreground: #f1f3f9;
313
+
314
+ /* Success: Green */
315
+ --success: #22c55e;
316
+ --success-foreground: #ffffff;
317
+
318
+ /* Warning: Amber */
319
+ --warning: #fbbf24;
320
+ --warning-foreground: #000000;
321
+
322
+ /* Destructive: Red */
323
+ --destructive: #f87171;
324
+ --destructive-foreground: #ffffff;
325
+
326
+ /* Border and input */
327
+ --border: #1e2b47;
328
+ --input: #151b2e;
329
+ --input-background: #151b2e;
330
+ --switch-background: #4a6cfc;
331
+
332
+ /* Typography */
333
+ --font-weight-medium: 500;
334
+ --font-weight-normal: 400;
335
+ --font-weight-semibold: 600;
336
+ --font-weight-bold: 700;
337
+
338
+ /* Focus ring */
339
+ --ring: #6e84fd;
340
+
341
+ /* Chart colors - dark mode */
342
+ --chart-1: #6e84fd; /* Blue */
343
+ --chart-2: #22c55e; /* Emerald */
344
+ --chart-3: #fbbf24; /* Amber */
345
+ --chart-4: #a855f7; /* Purple */
346
+ --chart-5: #f87171; /* Red */
347
+
348
+ /* Sidebar */
349
+ --sidebar: #151b2e;
350
+ --sidebar-foreground: #f1f3f9;
351
+ --sidebar-primary: #6e84fd;
352
+ --sidebar-primary-foreground: #ffffff;
353
+ --sidebar-accent: #1e2b47;
354
+ --sidebar-accent-foreground: #f1f3f9;
355
+ --sidebar-border: #1e2b47;
356
+ --sidebar-ring: #6e84fd;
357
+
358
+ /* Shadows for dark mode */
359
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);
360
+ --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.4), 0 1px 2px -1px rgb(0 0 0 / 0.4);
361
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.4);
362
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.4);
363
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.4), 0 8px 10px -6px rgb(0 0 0 / 0.4);
364
+ }
365
+
366
+ @theme inline {
367
+ --color-background: var(--background);
368
+ --color-foreground: var(--foreground);
369
+ --color-card: var(--card);
370
+ --color-card-background: var(--card-background);
371
+ --color-card-foreground: var(--card-foreground);
372
+ --color-popover: var(--popover);
373
+ --color-popover-foreground: var(--popover-foreground);
374
+ --color-primary: var(--primary);
375
+ --color-primary-50: var(--primary-50);
376
+ --color-primary-100: var(--primary-100);
377
+ --color-primary-200: var(--primary-200);
378
+ --color-primary-300: var(--primary-300);
379
+ --color-primary-400: var(--primary-400);
380
+ --color-primary-500: var(--primary-500);
381
+ --color-primary-600: var(--primary-600);
382
+ --color-primary-700: var(--primary-700);
383
+ --color-primary-800: var(--primary-800);
384
+ --color-primary-900: var(--primary-900);
385
+ --color-primary-950: var(--primary-950);
386
+ --color-primary-foreground: var(--primary-foreground);
387
+ --color-secondary: var(--secondary);
388
+ --color-secondary-foreground: var(--secondary-foreground);
389
+ --color-muted: var(--muted);
390
+ --color-muted-foreground: var(--muted-foreground);
391
+ --color-accent: var(--accent);
392
+ --color-accent-foreground: var(--accent-foreground);
393
+ --color-success: var(--success);
394
+ --color-success-foreground: var(--success-foreground);
395
+ --color-warning: var(--warning);
396
+ --color-warning-foreground: var(--warning-foreground);
397
+ --color-destructive: var(--destructive);
398
+ --color-destructive-foreground: var(--destructive-foreground);
399
+ --color-border: var(--border);
400
+ --color-input: var(--input);
401
+ --color-input-background: var(--input-background);
402
+ --color-switch-background: var(--switch-background);
403
+ --color-ring: var(--ring);
404
+ --color-chart-1: var(--chart-1);
405
+ --color-chart-2: var(--chart-2);
406
+ --color-chart-3: var(--chart-3);
407
+ --color-chart-4: var(--chart-4);
408
+ --color-chart-5: var(--chart-5);
409
+ --radius-sm: calc(var(--radius) - 2px);
410
+ --radius-md: var(--radius);
411
+ --radius-lg: calc(var(--radius) + 2px);
412
+ --radius-xl: calc(var(--radius) + 4px);
413
+ --color-sidebar: var(--sidebar);
414
+ --color-sidebar-foreground: var(--sidebar-foreground);
415
+ --color-sidebar-primary: var(--sidebar-primary);
416
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
417
+ --color-sidebar-accent: var(--sidebar-accent);
418
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
419
+ --color-sidebar-border: var(--sidebar-border);
420
+ --color-sidebar-ring: var(--sidebar-ring);
421
+
422
+ /* Custom education theme utilities - Solid colors */
423
+ --color-primary-solid: #1053f3;
424
+ --color-secondary-solid: #f8f9ff;
425
+ --color-success-solid: #10b981;
426
+ --color-warning-solid: #f59e0b;
427
+ --color-danger-solid: #ef4444;
428
+ --color-surface-solid: #ffffff;
429
+
430
+ /* Glass morphism with blue */
431
+ --glass-bg: rgba(16, 83, 243, 0.1);
432
+ --glass-border: rgba(16, 83, 243, 0.2);
433
+ --glass-shadow: 0 8px 32px 0 rgba(16, 83, 243, 0.15);
434
+
435
+ /* Enhanced shadows with blue */
436
+ --shadow-glow: 0 0 0 1px rgba(16, 83, 243, 0.1);
437
+ --shadow-glow-lg: 0 0 0 1px rgba(16, 83, 243, 0.2), 0 20px 25px -5px rgba(16, 83, 243, 0.1);
438
+
439
+ /* Animation variables */
440
+ --animation-duration-fast: 0.15s;
441
+ --animation-duration-normal: 0.3s;
442
+ --animation-duration-slow: 0.5s;
443
+ --animation-ease: cubic-bezier(0.4, 0, 0.2, 1);
444
+ --animation-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
445
+ --animation-marquee: cubic-bezier(0.4, 0, 0.2, 1);
446
+ --animation-marquee-left: marquee-left var(--duration, 40s) linear infinite;
447
+ --animation-marquee-up: marquee-up var(--duration, 40s) linear infinite;
448
+ --animation-ripple: ripple 2s linear infinite;
449
+ --font-sans: 'Montserrat', sans-serif;
450
+ }
451
+
452
+ @layer base {
453
+ * {
454
+ @apply border-border outline-ring/50;
455
+ }
456
+
457
+ body {
458
+ @apply text-foreground bg-gray-50 dark:bg-gray-900;
459
+ font-family: var(--font-sans);
460
+ }
461
+ }
462
+
463
+ /**
464
+ * Modern typography system for education platform
465
+ */
466
+ @layer base {
467
+ :where(:not(:has([class*=' text-']), :not(:has([class^='text-'])))) {
468
+ h1 {
469
+ font-size: 2.25rem; /* 36px */
470
+ font-weight: var(--font-weight-bold);
471
+ line-height: 1.2;
472
+ letter-spacing: -0.025em;
473
+ }
474
+
475
+ h2 {
476
+ font-size: 1.875rem; /* 30px */
477
+ font-weight: var(--font-weight-semibold);
478
+ line-height: 1.3;
479
+ letter-spacing: -0.025em;
480
+ }
481
+
482
+ h3 {
483
+ font-size: 1.5rem; /* 24px */
484
+ font-weight: var(--font-weight-semibold);
485
+ line-height: 1.4;
486
+ }
487
+
488
+ h4 {
489
+ font-size: 1.25rem; /* 20px */
490
+ font-weight: var(--font-weight-medium);
491
+ line-height: 1.4;
492
+ }
493
+
494
+ h5 {
495
+ font-size: 1.125rem; /* 18px */
496
+ font-weight: var(--font-weight-medium);
497
+ line-height: 1.5;
498
+ }
499
+
500
+ h6 {
501
+ font-size: 1rem; /* 16px */
502
+ font-weight: var(--font-weight-medium);
503
+ line-height: 1.5;
504
+ }
505
+
506
+ p {
507
+ font-size: 1rem; /* 16px */
508
+ font-weight: var(--font-weight-normal);
509
+ line-height: 1.6;
510
+ color: var(--muted-foreground);
511
+ }
512
+
513
+ label {
514
+ font-size: 1rem; /* 16px */
515
+ font-weight: var(--font-weight-medium);
516
+ line-height: 1.6;
517
+ color: var(--foreground);
518
+ }
519
+
520
+ button {
521
+ font-size: 1rem; /* 16px */
522
+ font-weight: var(--font-weight-medium);
523
+ line-height: 1.6;
524
+ }
525
+
526
+ input,
527
+ textarea,
528
+ select {
529
+ font-size: 0.875rem; /* 14px */
530
+ font-weight: var(--font-weight-normal);
531
+ line-height: 1.5;
532
+ }
533
+
534
+ small {
535
+ font-size: 0.75rem; /* 12px */
536
+ font-weight: var(--font-weight-normal);
537
+ line-height: 1.4;
538
+ color: var(--muted-foreground);
539
+ }
540
+ }
541
+ }
542
+
543
+ html {
544
+ font-size: var(--font-size);
545
+ scroll-behavior: smooth;
546
+ }
547
+
548
+ /* Custom utility classes for education platform */
549
+ @layer utilities {
550
+ .bg-primary-solid {
551
+ background: var(--color-primary-solid);
552
+ }
553
+
554
+ .bg-secondary-solid {
555
+ background: var(--color-secondary-solid);
556
+ }
557
+
558
+ .bg-success-solid {
559
+ background: var(--color-success-solid);
560
+ }
561
+
562
+ .text-primary-solid {
563
+ color: var(--color-primary-solid);
564
+ }
565
+
566
+ .shadow-elegant {
567
+ box-shadow:
568
+ 0 4px 6px -1px rgba(0, 0, 0, 0.1),
569
+ 0 2px 4px -1px rgba(0, 0, 0, 0.06);
570
+ }
571
+
572
+ .shadow-elegant-lg {
573
+ box-shadow:
574
+ 0 10px 15px -3px rgba(0, 0, 0, 0.1),
575
+ 0 4px 6px -2px rgba(0, 0, 0, 0.05);
576
+ }
577
+
578
+ .backdrop-blur-elegant {
579
+ backdrop-filter: blur(8px);
580
+ background-color: rgba(255, 255, 255, 0.8);
581
+ }
582
+
583
+ .dark .backdrop-blur-elegant {
584
+ background-color: rgba(15, 23, 42, 0.8);
585
+ }
586
+
587
+ /* Animated elements */
588
+ .animate-fade-in {
589
+ animation: fadeIn 0.6s ease-out;
590
+ }
591
+
592
+ .animate-slide-up {
593
+ animation: slideUp 0.6s ease-out;
594
+ }
595
+
596
+ .animate-scale-in {
597
+ animation: scaleIn 0.4s ease-out;
598
+ }
599
+
600
+ .marquee-left {
601
+ animation: marquee-left var(--duration, 40s) linear infinite;
602
+ }
603
+
604
+ .marquee-up {
605
+ animation: marquee-up var(--duration, 40s) linear infinite;
606
+ }
607
+ }
608
+
609
+ @keyframes ripple {
610
+ 0% {
611
+ transform: scale(0);
612
+ opacity: 0.6;
613
+ }
614
+ 100% {
615
+ transform: scale(2.5);
616
+ opacity: 0;
617
+ }
618
+ }
619
+
620
+ @keyframes fadeIn {
621
+ from {
622
+ opacity: 0;
623
+ }
624
+ to {
625
+ opacity: 1;
626
+ }
627
+ }
628
+
629
+ @keyframes slideUp {
630
+ from {
631
+ opacity: 0;
632
+ transform: translateY(20px);
633
+ }
634
+ to {
635
+ opacity: 1;
636
+ transform: translateY(0);
637
+ }
638
+ }
639
+
640
+ @keyframes scaleIn {
641
+ from {
642
+ opacity: 0;
643
+ transform: scale(0.95);
644
+ }
645
+ to {
646
+ opacity: 1;
647
+ transform: scale(1);
648
+ }
649
+ }
650
+
651
+ @keyframes shimmer {
652
+ 0% {
653
+ transform: translateX(-100%);
654
+ }
655
+ 100% {
656
+ transform: translateX(100%);
657
+ }
658
+ }
659
+
660
+ @keyframes float {
661
+ 0%,
662
+ 100% {
663
+ transform: translateY(0px);
664
+ }
665
+ 50% {
666
+ transform: translateY(-10px);
667
+ }
668
+ }
669
+
670
+ @keyframes bounce-subtle {
671
+ 0%,
672
+ 100% {
673
+ transform: translateY(0);
674
+ }
675
+ 50% {
676
+ transform: translateY(-2px);
677
+ }
678
+ }
679
+
680
+ @keyframes glow {
681
+ 0%,
682
+ 100% {
683
+ box-shadow: 0 0 5px rgba(16, 83, 243, 0.5);
684
+ }
685
+ 50% {
686
+ box-shadow:
687
+ 0 0 20px rgba(16, 83, 243, 0.8),
688
+ 0 0 30px rgba(16, 83, 243, 0.6);
689
+ }
690
+ }
691
+
692
+ @keyframes marquee-left {
693
+ from {
694
+ transform: translateX(0);
695
+ }
696
+ to {
697
+ transform: translateX(calc(-100% - var(--gap)));
698
+ }
699
+ }
700
+
701
+ @keyframes marquee-up {
702
+ from {
703
+ transform: translateY(0);
704
+ }
705
+ to {
706
+ transform: translateY(calc(-100% - var(--gap)));
707
+ }
708
+ }
709
+
710
+ /* Enhanced focus states */
711
+ @layer base {
712
+ /* Custom scrollbar */
713
+ ::-webkit-scrollbar {
714
+ width: 8px;
715
+ height: 8px;
716
+ }
717
+
718
+ ::-webkit-scrollbar-track {
719
+ background: transparent;
720
+ }
721
+
722
+ ::-webkit-scrollbar-thumb {
723
+ background: #c6d4ff;
724
+ border-radius: 4px;
725
+ }
726
+
727
+ ::-webkit-scrollbar-thumb:hover {
728
+ background: #acc1ff;
729
+ }
730
+
731
+ .dark ::-webkit-scrollbar-thumb {
732
+ background: #4a5568;
733
+ }
734
+
735
+ .dark ::-webkit-scrollbar-thumb:hover {
736
+ background: #5a6578;
737
+ }
738
+
739
+ /* Firefox scrollbar */
740
+ * {
741
+ scrollbar-width: thin;
742
+ scrollbar-color: #c6d4ff transparent;
743
+ }
744
+
745
+ .dark * {
746
+ scrollbar-color: #4a5568 transparent;
747
+ }
748
+
749
+ /* Error scrollbar - red theme */
750
+ .error-scrollbar::-webkit-scrollbar {
751
+ width: 8px;
752
+ height: 8px;
753
+ }
754
+
755
+ .error-scrollbar::-webkit-scrollbar-track {
756
+ background: transparent;
757
+ }
758
+
759
+ .error-scrollbar::-webkit-scrollbar-thumb {
760
+ background: #fca5a5;
761
+ border-radius: 4px;
762
+ }
763
+
764
+ .error-scrollbar::-webkit-scrollbar-thumb:hover {
765
+ background: #ef4444;
766
+ }
767
+
768
+ .dark .error-scrollbar::-webkit-scrollbar-thumb {
769
+ background: #dc2626;
770
+ }
771
+
772
+ .dark .error-scrollbar::-webkit-scrollbar-thumb:hover {
773
+ background: #b91c1c;
774
+ }
775
+
776
+ .error-scrollbar {
777
+ scrollbar-width: thin;
778
+ scrollbar-color: #fca5a5 transparent;
779
+ }
780
+
781
+ .dark .error-scrollbar {
782
+ scrollbar-color: #dc2626 transparent;
783
+ }
784
+ }
785
+
786
+ .quiz-container {
787
+ position: relative;
788
+ }
789
+
790
+ .quiz-container * {
791
+ -webkit-user-select: none !important;
792
+ -moz-user-select: none !important;
793
+ -ms-user-select: none !important;
794
+ user-select: none !important;
795
+ -webkit-touch-callout: none;
796
+ }
797
+
798
+ .quiz-container input,
799
+ .quiz-container textarea,
800
+ .quiz-container button,
801
+ .quiz-container [contenteditable] {
802
+ -webkit-user-select: auto !important;
803
+ -moz-user-select: auto !important;
804
+ -ms-user-select: auto !important;
805
+ user-select: auto !important;
806
+ }
807
+
808
+ /* Prevent text selection on double-click */
809
+ .quiz-container ::selection {
810
+ background: transparent;
811
+ }
812
+
813
+ .quiz-container ::-moz-selection {
814
+ background: transparent;
815
+ }
816
+
817
+ @layer base {
818
+ * {
819
+ @apply border-border outline-ring/50;
820
+ }
821
+ body {
822
+ @apply bg-background text-foreground;
823
+ }
824
+ }
825
+
826
+ .prose :where(p):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
827
+ margin-bottom: 16px;
828
+ }
829
+
830
+ .code-block {
831
+ position: relative;
832
+ }
833
+ .code-block select {
834
+ position: absolute;
835
+ background-color: rgba(90, 90, 90, 0.582);
836
+ color: white;
837
+ right: 0.5rem;
838
+ top: 0.5rem;
839
+ font-weight: 600;
840
+ border-radius: 6px;
841
+ padding: 0.2rem 0.5rem;
842
+ }
843
+
844
+ .tiptap :first-child {
845
+ margin-top: 0;
846
+ }
847
+
848
+ pre {
849
+ background: var(--foreground);
850
+ border-radius: 0.5rem;
851
+ color: var(--background);
852
+ font-family: 'JetBrainsMono', monospace;
853
+ margin: 1.5rem 0;
854
+ padding: 0.75rem 1rem;
855
+ }
856
+
857
+ code {
858
+ background: none;
859
+ color: inherit;
860
+ font-size: 14px;
861
+ font-weight: 500;
862
+ padding: 0;
863
+ }
864
+
865
+ /* Code styling */
866
+ .hljs-comment,
867
+ .hljs-quote {
868
+ color: #616161;
869
+ }
870
+
871
+ .hljs-variable,
872
+ .hljs-template-variable,
873
+ .hljs-attribute,
874
+ .hljs-tag,
875
+ .hljs-name,
876
+ .hljs-regexp,
877
+ .hljs-link,
878
+ .hljs-name,
879
+ .hljs-selector-id,
880
+ .hljs-selector-class {
881
+ color: #f98181;
882
+ }
883
+
884
+ .hljs-number,
885
+ .hljs-meta,
886
+ .hljs-built_in,
887
+ .hljs-builtin-name,
888
+ .hljs-literal,
889
+ .hljs-type,
890
+ .hljs-params {
891
+ color: #fbbc88;
892
+ }
893
+
894
+ .hljs-string,
895
+ .hljs-symbol,
896
+ .hljs-bullet {
897
+ color: #b9f18d;
898
+ }
899
+
900
+ .hljs-title,
901
+ .hljs-section {
902
+ color: #faf594;
903
+ }
904
+
905
+ .hljs-keyword,
906
+ .hljs-selector-tag {
907
+ color: #70cff8;
908
+ }
909
+
910
+ .hljs-emphasis {
911
+ font-style: italic;
912
+ }
913
+
914
+ .hljs-strong {
915
+ font-weight: 700;
916
+ }
917
+
918
+ :fullscreen .player-wrapper {
919
+ width: 100vw !important;
920
+ height: 100vh !important;
921
+ max-height: none !important;
922
+ }
923
+
924
+ .hl {
925
+ position: relative;
926
+ display: inline-block;
927
+ white-space: nowrap;
928
+ background: none;
929
+ }
930
+
931
+ /* Yellow trapezoid behind the text */
932
+ .hl::before {
933
+ content: '';
934
+ position: absolute;
935
+ z-index: -1;
936
+ left: -0.15em; /* left right bleed on the sides */
937
+ right: -0.1em;
938
+ bottom: 0em; /* how close to the baseline */
939
+ height: 0.6em; /* thickness of the highlight */
940
+ background: #4a6cfc;
941
+ color: #fff;
942
+ border-radius: 2px;
943
+ transform: skewX(-14deg); /* <— gives you the trapezoid look */
944
+ transform-origin: left bottom;
945
+ }
946
+
947
+ /* Toast (Sonner) */
948
+ .sonner-toast {
949
+ @apply border-border/20! text-foreground dark:bg-card/95! flex items-start gap-3 rounded-2xl! border bg-white/90! px-4 py-3 shadow-[0_1px_8px_rgba(0,0,0,0.1)] backdrop-blur-xl! transition-all duration-300 dark:shadow-[0_1px_8px_rgba(0,0,0,0.3)];
950
+ }
951
+
952
+ .sonner-icon {
953
+ @apply bg-muted/40 text-primary mt-0.5 flex size-5 items-center justify-center rounded-full;
954
+ }
955
+
956
+ .sonner-icon svg {
957
+ @apply size-5! text-current;
958
+ }
959
+
960
+ .sonner-title {
961
+ @apply text-base leading-tight font-semibold;
962
+ }
963
+
964
+ .sonner-description {
965
+ @apply text-muted-foreground text-sm;
966
+ }
967
+
968
+ .sonner-action {
969
+ @apply bg-primary text-primary-foreground hover:bg-primary/90 rounded-full px-3 py-1 text-sm font-medium shadow;
970
+ }
971
+
972
+ .sonner-close {
973
+ @apply text-muted-foreground hover:text-foreground transition-colors;
974
+ }
975
+
976
+ .sonner-toast[data-type='success'] .sonner-icon,
977
+ .sonner-toast[data-type='success'] .sonner-title {
978
+ @apply text-emerald-500! dark:text-emerald-300!;
979
+ }
980
+
981
+ .sonner-toast[data-type='error'] .sonner-icon,
982
+ .sonner-toast[data-type='error'] .sonner-title {
983
+ @apply text-red-500! dark:text-rose-300!;
984
+ }
985
+
986
+ .sonner-toast[data-type='warning'] .sonner-icon,
987
+ .sonner-toast[data-type='warning'] .sonner-title {
988
+ @apply text-amber-500! dark:text-amber-300!;
989
+ }
990
+
991
+ .sonner-toast[data-type='info'] .sonner-icon,
992
+ .sonner-toast[data-type='info'] .sonner-title {
993
+ @apply text-sky-500! dark:text-sky-300!;
994
+ }