neon_sakura 0.1.4

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 (251) hide show
  1. checksums.yaml +7 -0
  2. data/.ai-reviewer/README.md +182 -0
  3. data/.ai-reviewer/ai-reviewer.sh +56 -0
  4. data/.ai-reviewer/build-system-prompt.sh +136 -0
  5. data/.ai-reviewer/extract-claude-sections.sh +32 -0
  6. data/.ai-reviewer/test-ai-reviewer.sh +40 -0
  7. data/.ai-reviewer-config.yml +190 -0
  8. data/.github/dependabot.yml +12 -0
  9. data/.github/settings.yml +70 -0
  10. data/.github/workflows/ai-pr-review-on-comment.yml +384 -0
  11. data/.github/workflows/ai-pr-review.yml +328 -0
  12. data/.github/workflows/license-check.yml +78 -0
  13. data/.github/workflows/lint.yml +79 -0
  14. data/.github/workflows/security.yml +131 -0
  15. data/.github/workflows/semgrep.yml +26 -0
  16. data/.github/workflows/test.yml +44 -0
  17. data/.gitignore +75 -0
  18. data/.rubocop.yml +33 -0
  19. data/.ruby-version +1 -0
  20. data/.simplecov +14 -0
  21. data/.stylelintignore +10 -0
  22. data/.stylelintrc.json +37 -0
  23. data/AGENTS.md +51 -0
  24. data/CHANGELOG.md +568 -0
  25. data/CLAUDE.md +632 -0
  26. data/Gemfile +8 -0
  27. data/Gemfile.lock +327 -0
  28. data/LICENSE +21 -0
  29. data/README.md +1209 -0
  30. data/Rakefile +25 -0
  31. data/app/assets/images/cherry_blossom.svg +1525 -0
  32. data/app/assets/images/cherry_blossom_tree.png +0 -0
  33. data/app/assets/images/prysm-icon.png +0 -0
  34. data/app/assets/stylesheets/base.css +29 -0
  35. data/app/assets/stylesheets/components.css +1652 -0
  36. data/app/assets/stylesheets/forms.css +152 -0
  37. data/app/assets/stylesheets/loading.css +145 -0
  38. data/app/assets/stylesheets/neon_sakura.css +40 -0
  39. data/app/assets/stylesheets/pagy-tailwind.css +120 -0
  40. data/app/assets/stylesheets/theme-default.css +40 -0
  41. data/app/assets/stylesheets/theme-green.css +84 -0
  42. data/app/assets/stylesheets/theme-purple.css +94 -0
  43. data/app/assets/stylesheets/theme-red.css +84 -0
  44. data/app/assets/stylesheets/utility-borders.css +29 -0
  45. data/app/assets/stylesheets/utility-colors.css +185 -0
  46. data/app/assets/stylesheets/utility-effects.css +123 -0
  47. data/app/assets/stylesheets/utility-gradients.css +158 -0
  48. data/app/assets/stylesheets/utility-layout.css +132 -0
  49. data/app/assets/stylesheets/utility-reset.css +13 -0
  50. data/app/assets/stylesheets/utility-responsive.css +145 -0
  51. data/app/assets/stylesheets/utility-sizing.css +99 -0
  52. data/app/assets/stylesheets/utility-spacing.css +174 -0
  53. data/app/assets/stylesheets/utility-typography.css +97 -0
  54. data/app/controllers/errors_controller.rb +120 -0
  55. data/app/controllers/style_guide_controller.rb +117 -0
  56. data/app/helpers/errors_helper.rb +12 -0
  57. data/app/helpers/neon_sakura/navbar_helper.rb +43 -0
  58. data/app/helpers/style_guide_helper.rb +36 -0
  59. data/app/javascript/neon_sakura/dropdown.js +22 -0
  60. data/app/javascript/neon_sakura/navbar.js +71 -0
  61. data/app/javascript/neon_sakura/theme_switcher.js +187 -0
  62. data/app/views/errors/show.html.erb +105 -0
  63. data/app/views/layouts/error.html.erb +19 -0
  64. data/app/views/layouts/mission_control/jobs/_application_selection.html.erb +14 -0
  65. data/app/views/layouts/mission_control/jobs/_navigation.html.erb +21 -0
  66. data/app/views/layouts/mission_control/jobs/application.html.erb +453 -0
  67. data/app/views/layouts/style_guide.html.erb +416 -0
  68. data/app/views/shared/_file_upload.html.erb +184 -0
  69. data/app/views/shared/_footer.html.erb +23 -0
  70. data/app/views/shared/_header.html.erb +42 -0
  71. data/app/views/shared/_navbar.html.erb +306 -0
  72. data/app/views/shared/_profile_image_selector.html.erb +165 -0
  73. data/app/views/shared/_theme_switcher.html.erb +64 -0
  74. data/app/views/shared/icons/_adjustments.html.erb +10 -0
  75. data/app/views/shared/icons/_alert_circle.html.erb +3 -0
  76. data/app/views/shared/icons/_alert_triangle.html.erb +3 -0
  77. data/app/views/shared/icons/_archive.html.erb +3 -0
  78. data/app/views/shared/icons/_arrow_down.html.erb +3 -0
  79. data/app/views/shared/icons/_arrow_left.html.erb +3 -0
  80. data/app/views/shared/icons/_arrow_up.html.erb +3 -0
  81. data/app/views/shared/icons/_arrows_pointing_in.html.erb +10 -0
  82. data/app/views/shared/icons/_arrows_pointing_out.html.erb +10 -0
  83. data/app/views/shared/icons/_artemis_logo.html.erb +26 -0
  84. data/app/views/shared/icons/_auth_banner.html.erb +1 -0
  85. data/app/views/shared/icons/_bars.html.erb +10 -0
  86. data/app/views/shared/icons/_bell.html.erb +3 -0
  87. data/app/views/shared/icons/_book.html.erb +3 -0
  88. data/app/views/shared/icons/_bookmark.html.erb +3 -0
  89. data/app/views/shared/icons/_box.html.erb +3 -0
  90. data/app/views/shared/icons/_brain.html.erb +3 -0
  91. data/app/views/shared/icons/_briefcase.html.erb +3 -0
  92. data/app/views/shared/icons/_calendar.html.erb +3 -0
  93. data/app/views/shared/icons/_camera.html.erb +4 -0
  94. data/app/views/shared/icons/_chart_bar.html.erb +3 -0
  95. data/app/views/shared/icons/_chart_line.html.erb +10 -0
  96. data/app/views/shared/icons/_chart_pie.html.erb +11 -0
  97. data/app/views/shared/icons/_chat.html.erb +3 -0
  98. data/app/views/shared/icons/_check.html.erb +3 -0
  99. data/app/views/shared/icons/_check_circle.html.erb +3 -0
  100. data/app/views/shared/icons/_cherry_blossom.html.erb +1516 -0
  101. data/app/views/shared/icons/_cherry_blossom_silhouette.html.erb +1016 -0
  102. data/app/views/shared/icons/_cherry_blossom_single_flower.html.erb +1125 -0
  103. data/app/views/shared/icons/_cherry_blossom_tree.html.erb +159 -0
  104. data/app/views/shared/icons/_chevron_down.html.erb +3 -0
  105. data/app/views/shared/icons/_chevron_right.html.erb +9 -0
  106. data/app/views/shared/icons/_clipboard.html.erb +3 -0
  107. data/app/views/shared/icons/_clock.html.erb +3 -0
  108. data/app/views/shared/icons/_close.html.erb +3 -0
  109. data/app/views/shared/icons/_cog.html.erb +4 -0
  110. data/app/views/shared/icons/_crop.html.erb +10 -0
  111. data/app/views/shared/icons/_crown.html.erb +3 -0
  112. data/app/views/shared/icons/_disc.html.erb +3 -0
  113. data/app/views/shared/icons/_download.html.erb +3 -0
  114. data/app/views/shared/icons/_dragonfly.html.erb +58 -0
  115. data/app/views/shared/icons/_duplicate.html.erb +4 -0
  116. data/app/views/shared/icons/_edit.html.erb +3 -0
  117. data/app/views/shared/icons/_envelope.html.erb +3 -0
  118. data/app/views/shared/icons/_eraser.html.erb +10 -0
  119. data/app/views/shared/icons/_external_link.html.erb +3 -0
  120. data/app/views/shared/icons/_eye.html.erb +4 -0
  121. data/app/views/shared/icons/_file_csv.html.erb +10 -0
  122. data/app/views/shared/icons/_file_export.html.erb +10 -0
  123. data/app/views/shared/icons/_file_image.html.erb +10 -0
  124. data/app/views/shared/icons/_file_import.html.erb +10 -0
  125. data/app/views/shared/icons/_file_question.html.erb +6 -0
  126. data/app/views/shared/icons/_film.html.erb +3 -0
  127. data/app/views/shared/icons/_filter.html.erb +3 -0
  128. data/app/views/shared/icons/_folder.html.erb +3 -0
  129. data/app/views/shared/icons/_folder_open.html.erb +3 -0
  130. data/app/views/shared/icons/_folder_plus.html.erb +3 -0
  131. data/app/views/shared/icons/_globe.html.erb +3 -0
  132. data/app/views/shared/icons/_google.html.erb +11 -0
  133. data/app/views/shared/icons/_heart.html.erb +3 -0
  134. data/app/views/shared/icons/_heart_broken.html.erb +11 -0
  135. data/app/views/shared/icons/_heart_pulse.html.erb +4 -0
  136. data/app/views/shared/icons/_history.html.erb +11 -0
  137. data/app/views/shared/icons/_home.html.erb +10 -0
  138. data/app/views/shared/icons/_image.html.erb +3 -0
  139. data/app/views/shared/icons/_inbox.html.erb +3 -0
  140. data/app/views/shared/icons/_info_circle.html.erb +10 -0
  141. data/app/views/shared/icons/_key.html.erb +3 -0
  142. data/app/views/shared/icons/_layers.html.erb +10 -0
  143. data/app/views/shared/icons/_lightbulb.html.erb +10 -0
  144. data/app/views/shared/icons/_lightning.html.erb +3 -0
  145. data/app/views/shared/icons/_list.html.erb +3 -0
  146. data/app/views/shared/icons/_lock.html.erb +3 -0
  147. data/app/views/shared/icons/_logout.html.erb +3 -0
  148. data/app/views/shared/icons/_magazine.html.erb +3 -0
  149. data/app/views/shared/icons/_magic.html.erb +3 -0
  150. data/app/views/shared/icons/_minus.html.erb +10 -0
  151. data/app/views/shared/icons/_mobile.html.erb +10 -0
  152. data/app/views/shared/icons/_moon.html.erb +3 -0
  153. data/app/views/shared/icons/_network.html.erb +10 -0
  154. data/app/views/shared/icons/_new_item_banner.html.erb +1 -0
  155. data/app/views/shared/icons/_ouroboros.html.erb +24 -0
  156. data/app/views/shared/icons/_package.html.erb +3 -0
  157. data/app/views/shared/icons/_palette.html.erb +3 -0
  158. data/app/views/shared/icons/_paper_plane.html.erb +10 -0
  159. data/app/views/shared/icons/_photo.html.erb +10 -0
  160. data/app/views/shared/icons/_play.html.erb +4 -0
  161. data/app/views/shared/icons/_plus.html.erb +3 -0
  162. data/app/views/shared/icons/_pocket.html.erb +11 -0
  163. data/app/views/shared/icons/_prysm-icon.html.erb +34 -0
  164. data/app/views/shared/icons/_prysm.html.erb +13 -0
  165. data/app/views/shared/icons/_pushbullet-1.html.erb +29 -0
  166. data/app/views/shared/icons/_pushbullet-2.html.erb +2 -0
  167. data/app/views/shared/icons/_puzzle.html.erb +10 -0
  168. data/app/views/shared/icons/_qrcode.html.erb +3 -0
  169. data/app/views/shared/icons/_question.html.erb +3 -0
  170. data/app/views/shared/icons/_receipt.html.erb +10 -0
  171. data/app/views/shared/icons/_redo.html.erb +3 -0
  172. data/app/views/shared/icons/_refresh.html.erb +3 -0
  173. data/app/views/shared/icons/_rocket.html.erb +10 -0
  174. data/app/views/shared/icons/_rss.html.erb +3 -0
  175. data/app/views/shared/icons/_save.html.erb +3 -0
  176. data/app/views/shared/icons/_search.html.erb +3 -0
  177. data/app/views/shared/icons/_search_minus.html.erb +10 -0
  178. data/app/views/shared/icons/_search_plus.html.erb +10 -0
  179. data/app/views/shared/icons/_server_error.html.erb +6 -0
  180. data/app/views/shared/icons/_share.html.erb +3 -0
  181. data/app/views/shared/icons/_shield_check.html.erb +3 -0
  182. data/app/views/shared/icons/_sign_in.html.erb +3 -0
  183. data/app/views/shared/icons/_spinner.html.erb +4 -0
  184. data/app/views/shared/icons/_star.html.erb +3 -0
  185. data/app/views/shared/icons/_store.html.erb +10 -0
  186. data/app/views/shared/icons/_sun.html.erb +3 -0
  187. data/app/views/shared/icons/_sync.html.erb +3 -0
  188. data/app/views/shared/icons/_table.html.erb +3 -0
  189. data/app/views/shared/icons/_tag.html.erb +3 -0
  190. data/app/views/shared/icons/_tags.html.erb +11 -0
  191. data/app/views/shared/icons/_tools.html.erb +4 -0
  192. data/app/views/shared/icons/_trash.html.erb +3 -0
  193. data/app/views/shared/icons/_undo.html.erb +3 -0
  194. data/app/views/shared/icons/_unlock.html.erb +3 -0
  195. data/app/views/shared/icons/_upload.html.erb +3 -0
  196. data/app/views/shared/icons/_user.html.erb +3 -0
  197. data/app/views/shared/icons/_user_circle.html.erb +10 -0
  198. data/app/views/shared/icons/_user_plus.html.erb +10 -0
  199. data/app/views/shared/icons/_video.html.erb +3 -0
  200. data/app/views/shared/icons/_wrench.html.erb +11 -0
  201. data/app/views/style_guide/index.html.erb +77 -0
  202. data/app/views/style_guide/sections/_alerts.html.erb +114 -0
  203. data/app/views/style_guide/sections/_badges.html.erb +78 -0
  204. data/app/views/style_guide/sections/_buttons.html.erb +130 -0
  205. data/app/views/style_guide/sections/_cards.html.erb +84 -0
  206. data/app/views/style_guide/sections/_colors.html.erb +106 -0
  207. data/app/views/style_guide/sections/_file_upload.html.erb +135 -0
  208. data/app/views/style_guide/sections/_forms.html.erb +129 -0
  209. data/app/views/style_guide/sections/_gradients.html.erb +253 -0
  210. data/app/views/style_guide/sections/_header.html.erb +12 -0
  211. data/app/views/style_guide/sections/_icons.html.erb +55 -0
  212. data/app/views/style_guide/sections/_images.html.erb +40 -0
  213. data/app/views/style_guide/sections/_loading.html.erb +242 -0
  214. data/app/views/style_guide/sections/_pagination.html.erb +212 -0
  215. data/app/views/style_guide/sections/_profile_components.html.erb +203 -0
  216. data/app/views/style_guide/sections/_theme_switcher.html.erb +72 -0
  217. data/app/views/style_guide/sections/_typography.html.erb +65 -0
  218. data/bin/ai-optimize-claude-md +540 -0
  219. data/bin/ai-review-local +345 -0
  220. data/bin/ai-security-review +585 -0
  221. data/bin/brakeman +9 -0
  222. data/bin/install-hooks +57 -0
  223. data/bin/rake +7 -0
  224. data/bin/rubocop +10 -0
  225. data/bin/verify_setup.rb +31 -0
  226. data/config/brakeman.ignore +28 -0
  227. data/config/initializers/neon_sakura.rb +15 -0
  228. data/config/license_overrides.yml +13 -0
  229. data/config/routes.rb +21 -0
  230. data/config/theme_mappings.yml +61 -0
  231. data/docs/PRYSM_ASSETS.md +210 -0
  232. data/docs/plans/extract_ai_reviewer_plan.md +151 -0
  233. data/docs/plans/neon_sakura_gem_plan.md +138 -0
  234. data/lib/neon_sakura/configuration.rb +94 -0
  235. data/lib/neon_sakura/engine.rb +48 -0
  236. data/lib/neon_sakura/icon_helper.rb +54 -0
  237. data/lib/neon_sakura/profile_helper.rb +24 -0
  238. data/lib/neon_sakura/stylesheet_helper.rb +40 -0
  239. data/lib/neon_sakura/theme_helper.rb +63 -0
  240. data/lib/neon_sakura/theme_importer.rb +112 -0
  241. data/lib/neon_sakura/version.rb +5 -0
  242. data/lib/neon_sakura.rb +13 -0
  243. data/neon_sakura.gemspec +50 -0
  244. data/package.json +18 -0
  245. data/scripts/git-hooks/post-merge +132 -0
  246. data/scripts/git-hooks/pre-commit +123 -0
  247. data/scripts/git-hooks/pre-push +127 -0
  248. data/scripts/license-check.rb +587 -0
  249. data/settings.local.json +12 -0
  250. data/yarn.lock +778 -0
  251. metadata +503 -0
@@ -0,0 +1,84 @@
1
+ /*
2
+ * Red Theme - Light and Dark Variants
3
+ * This file contains color definitions for both red light and red dark themes
4
+ */
5
+
6
+ /* Red Light Theme */
7
+ [data-theme-name="red"][data-theme-mode="light"] {
8
+ --color-text-primary: #374151;
9
+ --color-text-secondary: #6b7280;
10
+ --color-text-muted: #9ca3af;
11
+ --color-background: #FFF;
12
+ --color-surface: #f9fafb;
13
+ --color-accent: #dc2626;
14
+ --color-notification: #10b981;
15
+ --color-alert: #ef4444;
16
+ --color-warning: #f59e0b;
17
+ --color-border: #e5e7eb;
18
+ --color-white: #fff;
19
+
20
+ /* Red to orange gradients for light theme */
21
+ --gradient-from: #dc2626;
22
+ --gradient-to: #ea580c;
23
+ --gradient-from-hover: #b91c1c;
24
+ --gradient-to-hover: #c2410c;
25
+
26
+ /* Text gradient colors - red to orange for headings */
27
+ --text-gradient-from: #f87171;
28
+ --text-gradient-to: #fb923c;
29
+
30
+ /* Navbar gradient - accent to notification (red to green) */
31
+ --gradient-navbar-from: var(--color-accent);
32
+ --gradient-navbar-to: var(--color-notification);
33
+
34
+ /* Secondary blue gradient - cyan to blue (theme-independent) */
35
+ --gradient-secondary-blue-from: #0891b2;
36
+ --gradient-secondary-blue-to: #2563eb;
37
+
38
+ /* Navbar link colors - darker cyan for light mode */
39
+ --navbar-link-color: #0891b2;
40
+ --navbar-link-hover: #0e7490;
41
+
42
+ /* Button text color - white for good contrast on gradients */
43
+ --button-text-color: #fff;
44
+ }
45
+
46
+ /* Red Dark Theme */
47
+ [data-theme-name="red"][data-theme-mode="dark"] {
48
+ --color-text-primary: #fff;
49
+ --color-text-secondary: #cbd5e1;
50
+ --color-text-muted: #94a3b8;
51
+ --color-background: #111827;
52
+ --color-surface: #1f2937;
53
+ --color-accent: #ef4444;
54
+ --color-notification: #10b981;
55
+ --color-alert: #ef4444;
56
+ --color-warning: #f59e0b;
57
+ --color-border: #374151;
58
+ --color-white: #fff;
59
+
60
+ /* Red to orange gradients for dark theme */
61
+ --gradient-from: #dc2626;
62
+ --gradient-to: #f97316;
63
+ --gradient-from-hover: #b91c1c;
64
+ --gradient-to-hover: #ea580c;
65
+
66
+ /* Text gradient colors - red to orange for headings */
67
+ --text-gradient-from: #f87171;
68
+ --text-gradient-to: #fb923c;
69
+
70
+ /* Navbar gradient - accent to notification (red to green) */
71
+ --gradient-navbar-from: var(--color-accent);
72
+ --gradient-navbar-to: var(--color-notification);
73
+
74
+ /* Secondary blue gradient - cyan to blue (theme-independent) */
75
+ --gradient-secondary-blue-from: #0891b2;
76
+ --gradient-secondary-blue-to: #2563eb;
77
+
78
+ /* Navbar link colors - white for dark mode, cyan on hover */
79
+ --navbar-link-color: #fff;
80
+ --navbar-link-hover: #22d3ee;
81
+
82
+ /* Button text color - white for good contrast on gradients */
83
+ --button-text-color: #fff;
84
+ }
@@ -0,0 +1,29 @@
1
+ /*
2
+ * Border Utilities
3
+ * This file contains border and border-radius utility classes
4
+ */
5
+
6
+ /* Border utilities */
7
+ .border {
8
+ border-width: 1px;
9
+ }
10
+
11
+ .border-gray-700 {
12
+ border-color: var(--color-border);
13
+ }
14
+
15
+ .border-gray-600 {
16
+ border-color: color-mix(in srgb, var(--color-border) 80%, var(--color-text-muted) 20%);
17
+ }
18
+
19
+ .rounded-lg {
20
+ border-radius: 0.5rem;
21
+ }
22
+
23
+ .rounded-md {
24
+ border-radius: 0.375rem;
25
+ }
26
+
27
+ .rounded-full {
28
+ border-radius: 9999px;
29
+ }
@@ -0,0 +1,185 @@
1
+ /*
2
+ * Color Utilities
3
+ * This file contains background and text color utility classes
4
+ */
5
+
6
+ /* Background colors */
7
+ .bg-gray-900 {
8
+ background-color: var(--color-background);
9
+ }
10
+
11
+ .bg-gray-850 {
12
+ background-color: color-mix(in srgb, var(--color-background) 90%, var(--color-surface) 10%);
13
+ }
14
+
15
+ .bg-gray-800 {
16
+ background-color: var(--color-surface);
17
+ }
18
+
19
+ .bg-gray-800\/30 {
20
+ background-color: color-mix(in srgb, var(--color-surface) 30%, transparent);
21
+ }
22
+
23
+ .bg-gray-800\/20 {
24
+ background-color: color-mix(in srgb, var(--color-surface) 20%, transparent);
25
+ }
26
+
27
+ .bg-gray-700 {
28
+ background-color: var(--color-border);
29
+ }
30
+
31
+ .bg-gray-600 {
32
+ background-color: color-mix(in srgb, var(--color-border) 80%, var(--color-text-muted) 20%);
33
+ }
34
+
35
+ .bg-cyan-600 {
36
+ background-color: var(--color-accent);
37
+ }
38
+
39
+ /* Text colors */
40
+ .text-white {
41
+ color: var(--color-white);
42
+ }
43
+
44
+ .text-gray-200 {
45
+ color: var(--color-text-secondary);
46
+ }
47
+
48
+ .text-gray-300 {
49
+ color: color-mix(in srgb, var(--color-text-secondary) 70%, var(--color-text-muted) 30%);
50
+ }
51
+
52
+ .text-gray-400 {
53
+ color: var(--color-text-muted);
54
+ }
55
+
56
+ .text-gray-500 {
57
+ color: color-mix(in srgb, var(--color-text-muted) 70%, var(--color-border) 30%);
58
+ }
59
+
60
+ .text-gray-600 {
61
+ color: color-mix(in srgb, var(--color-text-muted) 50%, var(--color-border) 50%);
62
+ }
63
+
64
+ .text-cyan-200 {
65
+ color: color-mix(in srgb, var(--color-accent) 70%, var(--color-text-primary) 30%);
66
+ }
67
+
68
+ .text-cyan-300 {
69
+ color: color-mix(in srgb, var(--color-accent) 85%, var(--color-text-primary) 15%);
70
+ }
71
+
72
+ .text-cyan-400 {
73
+ color: var(--color-accent);
74
+ }
75
+
76
+ .text-cyan-500 {
77
+ color: color-mix(in srgb, var(--color-accent) 95%, var(--color-background) 5%);
78
+ }
79
+
80
+ .text-red-500 {
81
+ color: var(--color-alert);
82
+ }
83
+
84
+ /* Theme-aware semantic colors */
85
+
86
+ /* Background colors */
87
+ .bg-background {
88
+ background-color: var(--color-background);
89
+ }
90
+
91
+ .bg-surface {
92
+ background-color: var(--color-surface);
93
+ }
94
+
95
+ .bg-accent {
96
+ background-color: var(--color-accent);
97
+ }
98
+
99
+ .bg-notification {
100
+ background-color: var(--color-notification);
101
+ }
102
+
103
+ .bg-alert {
104
+ background-color: var(--color-alert);
105
+ }
106
+
107
+ .bg-warning {
108
+ background-color: var(--color-warning);
109
+ }
110
+
111
+ /* Background color utilities with opacity modifiers */
112
+ .bg-notification.bg-opacity-10 {
113
+ background-color: color-mix(in srgb, var(--color-notification) 10%, transparent);
114
+ }
115
+
116
+ .bg-alert.bg-opacity-10 {
117
+ background-color: color-mix(in srgb, var(--color-alert) 10%, transparent);
118
+ }
119
+
120
+ .bg-warning.bg-opacity-10 {
121
+ background-color: color-mix(in srgb, var(--color-warning) 10%, transparent);
122
+ }
123
+
124
+ .bg-accent.bg-opacity-10 {
125
+ background-color: color-mix(in srgb, var(--color-accent) 10%, transparent);
126
+ }
127
+
128
+ /* Text colors */
129
+ .text-text-primary {
130
+ color: var(--color-text-primary);
131
+ }
132
+
133
+ .text-text-secondary {
134
+ color: var(--color-text-secondary);
135
+ }
136
+
137
+ .text-text-muted {
138
+ color: var(--color-text-muted);
139
+ }
140
+
141
+ .text-accent {
142
+ color: var(--color-accent);
143
+ }
144
+
145
+ .text-notification {
146
+ color: var(--color-notification);
147
+ }
148
+
149
+ .text-alert {
150
+ color: var(--color-alert);
151
+ }
152
+
153
+ .text-warning {
154
+ color: var(--color-warning);
155
+ }
156
+
157
+ /* Border colors */
158
+ .border-border {
159
+ border-color: var(--color-border);
160
+ }
161
+
162
+ .border-accent {
163
+ border-color: var(--color-accent);
164
+ }
165
+
166
+ .border-notification {
167
+ border-color: var(--color-notification);
168
+ }
169
+
170
+ .border-alert {
171
+ border-color: var(--color-alert);
172
+ }
173
+
174
+ .border-warning {
175
+ border-color: var(--color-warning);
176
+ }
177
+
178
+ /* Navbar link colors - cyan for all themes */
179
+ .text-navbar-link {
180
+ color: var(--navbar-link-color);
181
+ }
182
+
183
+ .hover\:text-navbar-link:hover {
184
+ color: var(--navbar-link-hover);
185
+ }
@@ -0,0 +1,123 @@
1
+ /*
2
+ * Effects Utilities
3
+ * This file contains shadow, cursor, transition, hover, and focus state utility classes
4
+ */
5
+
6
+ /* Shadow utilities */
7
+ .shadow-sm {
8
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
9
+ }
10
+
11
+ .shadow-md {
12
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
13
+ }
14
+
15
+ .shadow-lg {
16
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
17
+ }
18
+
19
+ /* Cursor utilities */
20
+ .cursor-pointer {
21
+ cursor: pointer;
22
+ }
23
+
24
+ /* Transition utilities */
25
+ .transition-all {
26
+ transition-property: all;
27
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
28
+ transition-duration: 150ms;
29
+ }
30
+
31
+ .transition-colors {
32
+ transition-property: color, background-color, border-color;
33
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
34
+ transition-duration: 150ms;
35
+ }
36
+
37
+ .transition-transform {
38
+ transition-property: transform;
39
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
40
+ transition-duration: 150ms;
41
+ }
42
+
43
+ .duration-200 {
44
+ transition-duration: 200ms;
45
+ }
46
+
47
+ /* Hover states */
48
+ .hover\:bg-gray-600:hover {
49
+ background-color: color-mix(in srgb, var(--color-border) 80%, var(--color-text-muted) 20%);
50
+ }
51
+
52
+ .hover\:text-cyan-200:hover {
53
+ color: color-mix(in srgb, var(--color-accent) 70%, var(--color-text-primary) 30%);
54
+ }
55
+
56
+ .hover\:text-cyan-300:hover {
57
+ color: color-mix(in srgb, var(--color-accent) 85%, var(--color-text-primary) 15%);
58
+ }
59
+
60
+ .hover\:from-blue-700:hover {
61
+ --tw-gradient-from: var(--gradient-from-hover);
62
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
63
+ }
64
+
65
+ .hover\:from-cyan-700:hover {
66
+ --tw-gradient-from: var(--gradient-from-hover);
67
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
68
+ }
69
+
70
+ .hover\:to-purple-700:hover {
71
+ --tw-gradient-to: var(--gradient-to-hover);
72
+ }
73
+
74
+ .hover\:to-blue-700:hover {
75
+ --tw-gradient-to: var(--gradient-to-hover);
76
+ }
77
+
78
+ .hover\:scale-105:hover {
79
+ transform: scale(1.05);
80
+ }
81
+
82
+ /* Focus states */
83
+ .focus\:outline-none:focus {
84
+ outline: 2px solid transparent;
85
+ outline-offset: 2px;
86
+ }
87
+
88
+ .focus\:ring-2:focus {
89
+ box-shadow: 0 0 0 2px currentcolor;
90
+ }
91
+
92
+ .focus\:ring-blue-500:focus {
93
+ --tw-ring-color: var(--color-accent);
94
+
95
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent) 50%, transparent);
96
+ }
97
+
98
+ .focus\:ring-cyan-500:focus {
99
+ --tw-ring-color: var(--color-accent);
100
+
101
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent) 50%, transparent);
102
+ }
103
+
104
+ .focus\:border-transparent:focus {
105
+ border-color: transparent;
106
+ }
107
+
108
+ .focus\:border-cyan-500:focus {
109
+ border-color: var(--color-accent);
110
+ }
111
+
112
+ .focus\:ring-offset-2:focus {
113
+ box-shadow: 0 0 0 2px var(--color-background), 0 0 0 5px color-mix(in srgb, var(--color-accent) 50%, transparent);
114
+ }
115
+
116
+ .focus\:ring-offset-gray-900:focus {
117
+ --tw-ring-offset-color: var(--color-background);
118
+ }
119
+
120
+ /* Placeholder styles */
121
+ .placeholder-gray-500::placeholder {
122
+ color: var(--color-text-muted);
123
+ }
@@ -0,0 +1,158 @@
1
+ /*
2
+ * Gradient Utilities
3
+ * This file contains gradient utility classes
4
+ * NOTE: All gradient colors now use CSS variables for theme-aware gradients
5
+ */
6
+
7
+ /* Gradient utilities */
8
+ .bg-gradient-to-r {
9
+ background-image: linear-gradient(to right, var(--tw-gradient-stops));
10
+ }
11
+
12
+ .bg-gradient-to-l {
13
+ background-image: linear-gradient(to left, var(--tw-gradient-stops));
14
+ }
15
+
16
+ /* Secondary purple gradient (three-color gradient) */
17
+ .bg-gradient-secondary-purple {
18
+ background-image: linear-gradient(
19
+ to left,
20
+ var(--gradient-secondary-start),
21
+ var(--gradient-secondary-mid),
22
+ var(--gradient-secondary-end)
23
+ );
24
+ }
25
+
26
+ /* Navbar gradient (accent to notification - theme-aware) */
27
+ .bg-gradient-navbar {
28
+ background-image: linear-gradient(
29
+ to right,
30
+ var(--gradient-navbar-from),
31
+ var(--gradient-navbar-to)
32
+ );
33
+ }
34
+
35
+ /* Secondary blue gradient (cyan to blue - theme-independent) */
36
+ .bg-gradient-secondary-blue {
37
+ background-image: linear-gradient(
38
+ to right,
39
+ var(--gradient-secondary-blue-from),
40
+ var(--gradient-secondary-blue-to)
41
+ );
42
+ }
43
+
44
+ /* From colors - use theme variables for text gradients */
45
+ .from-text-gradient-from {
46
+ --tw-gradient-from: var(--text-gradient-from);
47
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
48
+ }
49
+
50
+ .from-accent {
51
+ --tw-gradient-from: var(--color-accent);
52
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
53
+ }
54
+
55
+ .from-blue-400 {
56
+ --tw-gradient-from: var(--text-gradient-from);
57
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
58
+ }
59
+
60
+ .from-blue-600 {
61
+ --tw-gradient-from: var(--gradient-from);
62
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
63
+ }
64
+
65
+ /* Theme-aware gradient - adapts to current theme */
66
+ .from-cyan-500 {
67
+ --tw-gradient-from: var(--gradient-from);
68
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
69
+ }
70
+
71
+ .from-cyan-600 {
72
+ --tw-gradient-from: var(--gradient-from);
73
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
74
+ }
75
+
76
+ .from-green-500 {
77
+ --tw-gradient-from: var(--gradient-from);
78
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
79
+ }
80
+
81
+ .from-red-500 {
82
+ --tw-gradient-from: var(--gradient-from);
83
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
84
+ }
85
+
86
+ .from-indigo-500 {
87
+ --tw-gradient-from: var(--gradient-from);
88
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
89
+ }
90
+
91
+ .from-pink-500 {
92
+ --tw-gradient-from: var(--gradient-from);
93
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
94
+ }
95
+
96
+ .from-purple-500 {
97
+ --tw-gradient-from: var(--gradient-from);
98
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
99
+ }
100
+
101
+ .from-violet-500 {
102
+ --tw-gradient-from: var(--gradient-from);
103
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent);
104
+ }
105
+
106
+ /* To colors - use theme variables */
107
+ .to-text-gradient-to {
108
+ --tw-gradient-to: var(--text-gradient-to);
109
+ }
110
+
111
+ .to-notification {
112
+ --tw-gradient-to: var(--color-notification);
113
+ }
114
+
115
+ .to-purple-500 {
116
+ --tw-gradient-to: var(--text-gradient-to);
117
+ }
118
+
119
+ .to-purple-600 {
120
+ --tw-gradient-to: var(--gradient-to);
121
+ }
122
+
123
+ .to-blue-500 {
124
+ --tw-gradient-to: var(--text-gradient-to);
125
+ }
126
+
127
+ .to-blue-600 {
128
+ --tw-gradient-to: var(--gradient-to);
129
+ }
130
+
131
+ .to-emerald-500 {
132
+ --tw-gradient-to: var(--gradient-to);
133
+ }
134
+
135
+ .to-orange-500 {
136
+ --tw-gradient-to: var(--gradient-to);
137
+ }
138
+
139
+ .to-indigo-500 {
140
+ --tw-gradient-to: var(--gradient-to);
141
+ }
142
+
143
+ .to-pink-500 {
144
+ --tw-gradient-to: var(--gradient-to);
145
+ }
146
+
147
+ .to-violet-500 {
148
+ --tw-gradient-to: var(--gradient-to);
149
+ }
150
+
151
+ .bg-clip-text {
152
+ -webkit-background-clip: text;
153
+ background-clip: text;
154
+ }
155
+
156
+ .text-transparent {
157
+ color: transparent;
158
+ }
@@ -0,0 +1,132 @@
1
+ /*
2
+ * Layout Utilities
3
+ * This file contains layout-related utility classes for display, flexbox, and grid
4
+ */
5
+
6
+ /* Layout utilities */
7
+ .min-h-screen {
8
+ min-height: 100vh;
9
+ }
10
+
11
+ .container {
12
+ max-width: 1200px;
13
+ margin: 0 auto;
14
+ }
15
+
16
+ .max-w-2xl {
17
+ max-width: 42rem;
18
+ }
19
+
20
+ .max-w-4xl {
21
+ max-width: 56rem;
22
+ }
23
+
24
+ .mx-auto {
25
+ margin-left: auto;
26
+ margin-right: auto;
27
+ }
28
+
29
+ /* Display utilities */
30
+ .block {
31
+ display: block;
32
+ }
33
+
34
+ .inline-flex {
35
+ display: inline-flex;
36
+ }
37
+
38
+ .flex {
39
+ display: flex;
40
+ }
41
+
42
+ .grid {
43
+ display: grid;
44
+ }
45
+
46
+ .hidden {
47
+ display: none;
48
+ }
49
+
50
+ /* Flexbox utilities */
51
+ .flex-col {
52
+ flex-direction: column;
53
+ }
54
+
55
+ .flex-wrap {
56
+ flex-wrap: wrap;
57
+ }
58
+
59
+ .items-center {
60
+ align-items: center;
61
+ }
62
+
63
+ .justify-center {
64
+ justify-content: center;
65
+ }
66
+
67
+ .justify-between {
68
+ justify-content: space-between;
69
+ }
70
+
71
+ /* Grid utilities */
72
+ .grid-cols-2 {
73
+ grid-template-columns: repeat(2, minmax(0, 1fr));
74
+ }
75
+
76
+ .grid-cols-3 {
77
+ grid-template-columns: repeat(3, minmax(0, 1fr));
78
+ }
79
+
80
+ .grid-cols-4 {
81
+ grid-template-columns: repeat(4, minmax(0, 1fr));
82
+ }
83
+
84
+ .grid-cols-5 {
85
+ grid-template-columns: repeat(5, minmax(0, 1fr));
86
+ }
87
+
88
+ .grid-cols-6 {
89
+ grid-template-columns: repeat(6, minmax(0, 1fr));
90
+ }
91
+
92
+ /* Position utilities */
93
+ .relative {
94
+ position: relative;
95
+ }
96
+
97
+ .absolute {
98
+ position: absolute;
99
+ }
100
+
101
+ .fixed {
102
+ position: fixed;
103
+ }
104
+
105
+ .sticky {
106
+ position: sticky;
107
+ }
108
+
109
+ .top-0 {
110
+ top: 0;
111
+ }
112
+
113
+ /* Z-index utilities */
114
+ .z-10 {
115
+ z-index: 10;
116
+ }
117
+
118
+ .z-20 {
119
+ z-index: 20;
120
+ }
121
+
122
+ .z-30 {
123
+ z-index: 30;
124
+ }
125
+
126
+ .z-40 {
127
+ z-index: 40;
128
+ }
129
+
130
+ .z-50 {
131
+ z-index: 50;
132
+ }
@@ -0,0 +1,13 @@
1
+ /*
2
+ * Reset and Base Styles
3
+ * This file contains the base body styling and reset
4
+ */
5
+
6
+ /* Reset and base styles */
7
+ body {
8
+ margin: 0;
9
+ padding: 0;
10
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
11
+ background-color: var(--color-background);
12
+ color: var(--color-text-primary);
13
+ }