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,4 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" width="16" height="16" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <rect x="9" y="9" width="13" height="13" rx="2" ry="2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></rect>
3
+ <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
4
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
3
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Eraser (clear/delete/erase) %>
2
+ <%# Source: Custom SVG - eraser tool %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0" />
10
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path>
3
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
3
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
4
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: CSV File (spreadsheet/data file) %>
2
+ <%# Source: https://heroicons.com/ - document-text %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z" />
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: File Export (download/export file) %>
2
+ <%# Source: https://heroicons.com/ %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3" />
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Image File (photo/picture file) %>
2
+ <%# Source: https://heroicons.com/ %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z" />
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: File Import (upload/import file) %>
2
+ <%# Source: https://heroicons.com/ %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5" />
10
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
3
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 2v6h6"></path>
4
+ <circle cx="12" cy="14" r="1" fill="currentColor"></circle>
5
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 11v-1"></path>
6
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 4v16M17 4v16M3 8h4m10 0h4M3 12h18M3 16h4m10 0h4M4 20h16a1 1 0 001-1V5a1 1 0 00-1-1H4a1 1 0 00-1 1v14a1 1 0 001 1z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 19a2 2 0 01-2-2V7a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1M5 19h14a2 2 0 002-2v-5a2 2 0 00-2-2H9a2 2 0 00-2 2v5a2 2 0 01-2 2z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
3
+ </svg>
@@ -0,0 +1,11 @@
1
+ <%# Icon: Google (Google service/OAuth) %>
2
+ <%# Source: Custom SVG - simplified Google icon (circle with G) %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <circle cx="12" cy="12" r="9" stroke-linecap="round" stroke-linejoin="round" />
10
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v8m0-4h4" />
11
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"></path>
3
+ </svg>
@@ -0,0 +1,11 @@
1
+ <%# Icon: Heart Broken (unfavorite/remove favorite) %>
2
+ <%# Source: Custom modification of heart icon %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 4.528a6 6 0 0 0-8.243 8.715l6.829 6.828a2 2 0 0 0 2.828 0l6.829-6.828A6 6 0 0 0 12 4.528Z" />
10
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v7l-2-2 2 5 2-5-2 2v-7" />
11
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"></path>
3
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4"></path>
4
+ </svg>
@@ -0,0 +1,11 @@
1
+ <%# Icon: History (Recent/Past) %>
2
+ <%# Source: https://heroicons.com/ (clock + arrow) %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z" />
10
+ <path stroke-linecap="round" stroke-linejoin="round" d="M9 3.75H6.912a2.25 2.25 0 00-2.15 1.588L2.35 13.177a2.25 2.25 0 00-.1.661V18a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18v-4.162c0-.224-.034-.447-.1-.661L19.24 5.338a2.25 2.25 0 00-2.15-1.588H15M2.25 13.5h3.86a2.25 2.25 0 012.012 1.244l.256.512a2.25 2.25 0 002.013 1.244h3.218a2.25 2.25 0 002.013-1.244l.256-.512a2.25 2.25 0 012.013-1.244h3.859" />
11
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Home (home/dashboard) %>
2
+ <%# Source: https://heroicons.com/ %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="m2.25 12 8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25" />
10
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"></path>
3
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Info Circle (Information) %>
2
+ <%# Source: https://heroicons.com/ (information-circle) %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z" />
10
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z"></path>
3
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Layers (layers/stack/group - similar to fa-layer-group) %>
2
+ <%# Source: https://heroicons.com/ %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="m7.875 14.25 1.214 1.942a2.25 2.25 0 0 0 1.908 1.058h2.006c.776 0 1.497-.4 1.908-1.058l1.214-1.942M2.41 9h4.636a2.25 2.25 0 0 1 1.872 1.002l.164.246a2.25 2.25 0 0 0 1.872 1.002h2.092a2.25 2.25 0 0 0 1.872-1.002l.164-.246A2.25 2.25 0 0 1 16.954 9h4.636M2.41 9a2.25 2.25 0 0 0-.16.832V12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 12V9.832c0-.287-.055-.57-.16-.832M2.41 9a2.25 2.25 0 0 1 .382-.632l3.285-3.832a2.25 2.25 0 0 1 1.708-.786h8.43c.657 0 1.281.287 1.709.786l3.284 3.832c.163.19.291.404.382.632M4.5 20.25h15A2.25 2.25 0 0 0 21.75 18v-2.625c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125V18a2.25 2.25 0 0 0 2.25 2.25Z" />
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Lightbulb (Ideas/Tips) %>
2
+ <%# Source: https://heroicons.com/ (light-bulb) %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 18v-5.25m0 0a6.01 6.01 0 001.5-.189m-1.5.189a6.01 6.01 0 01-1.5-.189m3.75 7.478a12.06 12.06 0 01-4.5 0m3.75 2.383a14.406 14.406 0 01-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 10-7.517 0c.85.493 1.509 1.333 1.509 2.316V18" />
10
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 10h16M4 14h16M4 18h16"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z"></path>
3
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Minus (subtract, zoom out) %>
2
+ <%# Source: https://heroicons.com/ %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M19.5 12h-15" />
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Mobile Device (smartphone/mobile device indicator) %>
2
+ <%# Source: https://heroicons.com/ %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M10.5 1.5H8.25A2.25 2.25 0 0 0 6 3.75v16.5a2.25 2.25 0 0 0 2.25 2.25h7.5A2.25 2.25 0 0 0 18 20.25V3.75a2.25 2.25 0 0 0-2.25-2.25H13.5m-3 0V3h3V1.5m-3 0h3m-3 18.75h3" />
10
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path>
3
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Network (connections/API/network connections) %>
2
+ <%# Source: Custom SVG - network topology %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m0 0 4.5-4.5M12 19.5 7.5 15M4.5 7.5h15M19.5 7.5 15 3m4.5 4.5L15 12m-6-4.5L4.5 3m4.5 4.5L4.5 12" />
10
+ </svg>
@@ -0,0 +1 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" id="b29e554b-093d-48c4-b1ea-ffb6ead99508" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="796.73899" height="610.28346" viewBox="0 0 796.73899 610.28346"><title>new_entries</title><ellipse cx="709.4198" cy="592.70019" rx="76.32487" ry="17.58327" fill="#e6e6e6"/><polygon points="708.42 143.137 708.42 166.137 720.42 196.137 739.42 162.137 739.42 136.137 708.42 143.137" fill="#a0616a"/><path d="M856.55031,466.49487l-3,22s-7,24,3,24,10-26,10-26l2-15Z" transform="translate(-201.63051 -144.85827)" fill="#a0616a"/><path d="M977.55031,463.49487l-3,22s-7,24,3,24,10-26,10-26l2-15Z" transform="translate(-201.63051 -144.85827)" fill="#a0616a"/><path d="M885.05031,440.99487l-4.706,1.2951s-12.294,79.7049-13.294,121.7049-3,148-3,148h32l21-180,10,180h34s14-236,5-255S885.05031,440.99487,885.05031,440.99487Z" transform="translate(-201.63051 -144.85827)" fill="#2f2e41"/><path d="M866.05031,709.99487l-9,14s-25,21-3,20,31-11,31-11v3l12-4-2-22Z" transform="translate(-201.63051 -144.85827)" fill="#2f2e41"/><path d="M958.05031,709.99487l9,14s25,21,3,20-31-11-31-11v3l-12-4,2-22Z" transform="translate(-201.63051 -144.85827)" fill="#2f2e41"/><circle cx="720.9198" cy="126.6366" r="22" fill="#a0616a"/><polygon points="719.42 181.137 708.42 158.613 703.42 170.137 701.42 269.137 747.42 166.137 739.42 157.29 719.42 181.137" fill="#575a89"/><path d="M982.05031,330.99487l-36.46363-23.83011s-2.53637,22.83011-25.53637,20.83011-12.24837-19.34176-12.24837-19.34176l-36.75163,20.34176,14,78-6,45s54-6,66,3a51.27727,51.27727,0,0,0,24,10l-2-77Z" transform="translate(-201.63051 -144.85827)" fill="#d0cde1"/><path d="M971.05031,334.99487l6.91791-6.66778,5.08209,3.66778s5,6,9,24,2,98,2,98l-22-3,1-33-9-44Z" transform="translate(-201.63051 -144.85827)" fill="#d0cde1"/><path d="M878.05031,327.99487l-3.77771-.78352-3.22229,1.78352s-9,12-9,23-9,105-9,105l20,9,14-71Z" transform="translate(-201.63051 -144.85827)" fill="#d0cde1"/><path d="M997.05031,455.99487s-20-12-27-4,4,16,4,16S1005.05031,479.99487,997.05031,455.99487Z" transform="translate(-201.63051 -144.85827)" fill="#575a89"/><path d="M875.05031,461.99487s-20-12-27-4,4,16,4,16S883.05031,485.99487,875.05031,461.99487Z" transform="translate(-201.63051 -144.85827)" fill="#575a89"/><path d="M941.817,255.36416s5.75423-11-6.90509-12c0,0-11.50847-7-20.71525,1,0,0-8.05593-2-10.35763,4,0,0-1.15085-3,2.3017-5,0,0-8.05594-2-8.05594,8,0,0-3.45254,10,0,19s4.60339,10,4.60339,10-5.67351-18.86929,8.13666-19.86929,29.26589-9.63071,30.41673,1.36929,3.45254,14,3.45254,14S955.05172,259.86416,941.817,255.36416Z" transform="translate(-201.63051 -144.85827)" fill="#2f2e41"/><path d="M462.07062,669.47826h-.1372c-5.11314,0-10.28858-.15231-15.3822-.45316l.07552-1.28647c5.06908.29959,10.21872.45064,15.30668.45064h.1372Zm15.52445-.46952-.07679-1.28647c5.1232-.30714,10.29991-.77415,15.38661-1.38843l.15482,1.27892C487.94721,668.23081,482.74407,668.70034,477.59507,669.00874Zm-46.51039-1.362c-5.12006-.61176-10.28669-1.38842-15.35576-2.30733l.23035-1.26884c5.04327.91387,10.1841,1.68676,15.279,2.29726Zm77.32828-2.35768-.23161-1.26884c5.04579-.92016,10.12871-2.009,15.10716-3.23379l.3084,1.25122C518.59328,663.26873,513.48456,664.36261,508.413,665.28906Zm-107.87239-3.18595c-5.00677-1.226-10.04186-2.62328-14.96429-4.15143l.38267-1.23108c4.89725,1.5206,9.90654,2.91028,14.88876,4.13129Zm138.015-4.23451-.38393-1.23108c4.8897-1.52437,9.80332-3.2212,14.60428-5.04516l.45819,1.2059C548.40794,654.62978,543.46978,656.33667,538.55553,657.8686Zm-167.69052-4.981c-4.82173-1.82648-9.65731-3.82793-14.37078-5.949l.52868-1.1757c4.69019,2.111,9.50122,4.10234,14.299,5.91875Zm196.68823-6.032-.52994-1.1757c4.66815-2.10466,9.3338-4.38178,13.86789-6.76716l.60044,1.14045C576.93424,642.45115,572.24469,644.7396,567.55324,646.8556Zm-225.03768-6.7294c-4.57186-2.40048-9.1261-4.97215-13.53684-7.64327l.66715-1.10268c4.38871,2.65727,8.92029,5.21635,13.46887,7.6055Zm252.48018-7.70746-.66715-1.10269c4.3843-2.656,8.74469-5.48069,12.95906-8.39475l.73261,1.05988C603.78575,626.91035,599.404,629.74888,594.99574,632.41874Zm-279.06356-8.37965c-4.24647-2.9342-8.45644-6.03456-12.51283-9.21422l.79554-1.01457c4.03563,3.16456,8.22482,6.24855,12.44989,9.1689Zm304.58391-9.26583-.79554-1.01457c4.04569-3.17462,8.03726-6.50407,11.86267-9.89647l.856.96422C628.59364,608.23646,624.58193,611.58228,620.51609,614.77326Zm-329.02991-9.89521c-3.86128-3.42008-7.66655-7.00129-11.31195-10.64418l.91135-.91135c3.62652,3.624,7.41354,7.18759,11.25531,10.59131Zm352.258-10.69579-.91135-.91135c3.63156-3.63156,7.19766-7.41668,10.59761-11.25091l.96421.856C650.97839,586.72907,647.39466,590.53308,643.74422,594.18226ZM269.52375,582.93387c-3.42386-3.85939-6.77157-7.86858-9.95122-11.918l1.01331-.79555c3.16392,4.02807,6.49526,8.01838,9.90213,11.85764Zm394.82532-11.98351-1.01457-.79554c3.17462-4.047,6.26113-8.23489,9.17393-12.44549l1.05989.73261C670.64167,562.67393,667.54006,566.88327,664.34907,570.95036Zm-413.992-12.42409c-2.93546-4.23954-5.7765-8.62007-8.44447-13.01822l1.10205-.66967c2.65475,4.378,5.482,8.73588,8.40231,12.95529Zm431.66392-13.129-1.10268-.66715c2.6623-4.39312,5.22265-8.92344,7.6118-13.46509l1.14044.59918C687.27006,536.42978,684.69587,540.98276,682.021,545.39728Zm-447.751-13.39082c-2.39985-4.55676-4.69082-9.24569-6.80933-13.93461l1.17444-.53121c2.10781,4.66627,4.38745,9.33128,6.77534,13.86412Zm462.21937-14.11462-1.1757-.52868c2.116-4.69648,4.10989-9.50625,5.9263-14.29714l1.20591.45819C700.61934,508.33776,698.61537,513.1727,696.48931,517.89184ZM221.50976,503.75457c-1.834-4.81984-3.54281-9.75675-5.07851-14.67477l1.22982-.38519c1.52878,4.89285,3.22875,9.80584,5.05334,14.60176ZM707.51993,488.8142l-1.23108-.38267c1.52437-4.89788,2.91657-9.90654,4.13884-14.88624l1.25122.30714C710.45035,478.85731,709.0506,483.89114,707.51993,488.8142ZM212.25527,474.1218c-1.2336-4.99858-2.33-10.10668-3.259-15.18331l1.26758-.23161c.92457,5.05019,2.01592,10.13186,3.2426,15.10527Zm502.6675-15.45646-1.26884-.23162c.91638-5.04264,1.69179-10.18221,2.30481-15.27646l1.27891.15357C716.62337,448.43026,715.84419,453.59626,714.92277,458.66534ZM206.66254,443.58776c-.61868-5.11187-1.09135-10.31438-1.4029-15.464l1.28647-.078c.31028,5.1232.78043,10.30053,1.3966,15.386Zm511.96228-15.74221-1.28647-.07552c.30337-5.1144.4582-10.30935.4582-15.44388v-.54505h1.289v.54505C719.08553,417.48585,718.9307,422.70724,718.62482,427.84555ZM206.07029,412.5993h-1.289v-.27315c0-5.071.14916-10.20047.44434-15.24626l1.28647.07553c-.2933,5.02061-.44183,10.12494-.44183,15.17073ZM717.30563,396.336c-.316-5.1295-.79177-10.30557-1.41235-15.38535l1.27892-.15609c.62435,5.105,1.10142,10.30683,1.41989,15.46214Zm-509.429-14.57029-1.28017-.15231c.60987-5.12006,1.38339-10.28669,2.3004-15.357l1.26885.2291C209.2531,371.53059,208.48273,376.67142,207.87663,381.76567Zm505.67785-16.08586c-.93275-5.05711-2.02914-10.13878-3.26022-15.10338l1.25122-.30966c1.23738,4.98978,2.3388,10.09662,3.27659,15.17891Zm-500.1789-14.30846-1.25248-.30588c1.22289-5.00488,2.617-10.04,4.14388-14.96618l1.23108.38141C215.97872,341.38236,214.59218,346.39164,213.37558,351.37135ZM706.124,335.699c-1.53319-4.89411-3.23882-9.80521-5.06782-14.5961l1.20339-.45945c1.83906,4.81481,3.55351,9.75108,5.09551,14.67037ZM222.53063,321.84117l-1.20591-.45567c1.82459-4.82362,3.82353-9.65982,5.942-14.37455l1.17569.52868C226.33464,312.23045,224.34578,317.0421,222.53063,321.84117ZM695.121,306.86493c-2.11222-4.66375-4.39689-9.32625-6.79108-13.85657l1.14045-.60169c2.40551,4.553,4.70152,9.23876,6.82381,13.92706ZM235.21024,293.62768l-1.1417-.59918c2.39229-4.56053,4.96145-9.11666,7.63571-13.54124l1.10269.66715C240.14652,284.557,237.59058,289.0898,235.21024,293.62768Zm445.50287-14.04539c-2.65979-4.37234-5.492-8.72832-8.41741-12.94521l1.05988-.73513c2.9405,4.23892,5.78532,8.6163,8.4577,13.01068ZM251.203,267.16828l-1.06115-.73261c2.926-4.23891,6.02386-8.45014,9.20729-12.5166l1.01457.79429C257.19659,258.75968,254.11449,262.95013,251.203,267.16828ZM663.113,254.218c-3.17588-4.03248-6.51163-8.01838-9.91535-11.84757l.96422-.856c3.42009,3.84744,6.7722,7.85348,9.96319,11.90673ZM270.25573,242.83558l-.96548-.85471c3.41631-3.86,6.99563-7.66781,10.63726-11.31636l.91261.91009C277.21611,235.20553,273.655,238.99443,270.25573,242.83558Zm372.3342-11.6984c-3.64163-3.62841-7.4318-7.18759-11.26728-10.57873l.85345-.96548c3.85436,3.4075,7.66467,6.98493,11.32266,10.6316ZM292.07907,220.97007l-.856-.96422c3.84744-3.41819,7.85537-6.76842,11.91176-9.95815l.79681,1.01331C299.89541,214.235,295.90762,217.56887,292.07907,220.97007Zm327.36077-10.29613c-4.0394-3.16015-8.23111-6.24036-12.46059-9.155l.73261-1.06115c4.24961,2.92917,8.46273,6.02512,12.521,9.20163Zm-303.08472-8.78812-.73386-1.05988c4.23577-2.93546,8.61441-5.779,13.01571-8.4514l.669,1.10142C324.92736,196.13512,320.57012,198.96484,316.35512,201.88582Zm277.633-8.75539c-4.39941-2.656-8.93351-5.20943-13.47642-7.5904l.59792-1.1417c4.5662,2.39292,9.12295,4.95893,13.545,7.62816Zm-251.25287-7.26438-.6017-1.14044c4.55487-2.40237,9.24191-4.69585,13.93084-6.81689l.5312,1.17444C351.92992,181.19349,347.2668,183.47565,342.73522,185.86605Zm223.86135-7.08689c-4.69081-2.10466-9.50373-4.091-14.30532-5.90427l.45568-1.2059c4.8255,1.82207,9.66234,3.81848,14.37707,5.93448ZM370.83668,173.155l-.45945-1.20465c4.82173-1.83717,9.75864-3.54848,14.67351-5.08607l.38519,1.22982C380.5456,169.62411,375.63387,171.3266,370.83668,173.155ZM537.648,167.85113c-4.90166-1.51619-9.9122-2.90084-14.89253-4.11493l.30588-1.25247c5.00488,1.22038,10.04123,2.61195,14.96806,4.13632Zm-137.33333-3.92045-.30966-1.25122c5.00614-1.238,10.11361-2.33691,15.1808-3.26714l.23287,1.26758C410.37724,161.6051,405.29558,162.699,400.31462,163.93068Zm107.32609-3.39616c-5.03824-.90947-10.17907-1.67669-15.28087-2.2809l.151-1.28017c5.12761.60736,10.29487,1.37836,15.35891,2.29222Zm-76.94877-2.18334-.15608-1.27955c5.10872-.62246,10.31123-1.097,15.46339-1.41171l.078,1.28647C440.95157,157.25919,435.77487,157.73186,430.69194,158.35118Zm46.27752-1.45389c-4.97782-.28826-10.0362-.43427-15.036-.43427h-.40973v-1.289h.40973c5.02439,0,10.10857.14665,15.1103.4368Z" transform="translate(-201.63051 -144.85827)" fill="#e6e6e6"/><rect x="366.79586" y="430.25559" width="152.813" height="114.60975" fill="#e6e6e6"/><rect x="385.89749" y="460.81819" width="114.60975" height="7.64065" fill="#fff"/><rect x="385.89749" y="483.74014" width="114.60975" height="7.64065" fill="#fff"/><rect x="385.89749" y="506.66209" width="114.60975" height="7.64065" fill="#fff"/><rect width="106.73857" height="80.05393" fill="#ccc"/><rect x="13.34232" y="21.34771" width="80.05393" height="5.33693" fill="#fff"/><rect x="13.34232" y="37.3585" width="80.05393" height="5.33693" fill="#fff"/><rect x="13.34232" y="53.36929" width="80.05393" height="5.33693" fill="#fff"/><rect x="45.36389" y="41.3612" width="106.73857" height="80.05393" fill="#e6e6e6"/><rect x="58.70621" y="62.70891" width="80.05393" height="5.33693" fill="#fff"/><rect x="58.70621" y="78.7197" width="80.05393" height="5.33693" fill="#fff"/><rect x="58.70621" y="94.73048" width="80.05393" height="5.33693" fill="#fff"/><rect x="92.02261" y="148.47246" width="332.84357" height="249.63267" fill="#3f3d56"/><circle cx="258.44439" cy="273.2888" r="83.21089" opacity="0.2"/><path d="M494.62922,411.16H466.33751V382.86832a6.65687,6.65687,0,0,0-6.65687-6.65687h0a6.65687,6.65687,0,0,0-6.65687,6.65687V411.16H424.73205a6.65686,6.65686,0,0,0-6.65686,6.65686v0a6.65686,6.65686,0,0,0,6.65686,6.65686h28.29171v28.29171a6.65687,6.65687,0,0,0,6.65687,6.65686h0a6.65687,6.65687,0,0,0,6.65687-6.65686V424.47377h28.29171a6.65686,6.65686,0,0,0,6.65686-6.65686v0A6.65686,6.65686,0,0,0,494.62922,411.16Z" transform="translate(-201.63051 -144.85827)" fill="#a9ff63"/></svg>
@@ -0,0 +1,24 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="currentColor" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <!-- Ouroboros - Serpent eating its own tail in a circle -->
3
+ <path d="M50,10 C28.4,10 10,28.4 10,50 C10,71.6 28.4,90 50,90 C71.6,90 90,71.6 90,50 C90,28.4 71.6,10 50,10 Z M50,15 C68.8,15 85,31.2 85,50 C85,68.8 68.8,85 50,85 C31.2,85 15,68.8 15,50 C15,31.2 31.2,15 50,15 Z"/>
4
+ <!-- Serpent body -->
5
+ <path d="M50,20 C33.4,20 20,33.4 20,50 C20,66.6 33.4,80 50,80 C66.6,80 80,66.6 80,50 C80,43.2 77.8,37 74.2,32 L70,35 C72.8,39.2 74.5,44.4 74.5,50 C74.5,63.5 63.5,74.5 50,74.5 C36.5,74.5 25.5,63.5 25.5,50 C25.5,36.5 36.5,25.5 50,25.5 C56.6,25.5 62.6,28 67,32 L70.5,29 C65.2,23.8 58,20 50,20 Z"/>
6
+ <!-- Serpent head -->
7
+ <circle cx="72" cy="32" r="6"/>
8
+ <circle cx="70" cy="30" r="1.5" fill="white"/>
9
+ <!-- Serpent tail in mouth -->
10
+ <path d="M68,28 L65,26 C63,25 61,26 60,28 L58,32 C57,34 58,36 60,37 L63,38"/>
11
+ <!-- Decorative scales -->
12
+ <circle cx="35" cy="35" r="2" opacity="0.3"/>
13
+ <circle cx="45" cy="30" r="2" opacity="0.3"/>
14
+ <circle cx="55" cy="28" r="2" opacity="0.3"/>
15
+ <circle cx="30" cy="45" r="2" opacity="0.3"/>
16
+ <circle cx="28" cy="55" r="2" opacity="0.3"/>
17
+ <circle cx="32" cy="65" r="2" opacity="0.3"/>
18
+ <circle cx="42" cy="72" r="2" opacity="0.3"/>
19
+ <circle cx="52" cy="75" r="2" opacity="0.3"/>
20
+ <circle cx="62" cy="72" r="2" opacity="0.3"/>
21
+ <circle cx="70" cy="65" r="2" opacity="0.3"/>
22
+ <circle cx="73" cy="55" r="2" opacity="0.3"/>
23
+ <circle cx="72" cy="45" r="2" opacity="0.3"/>
24
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" d="M4.098 19.902a3.75 3.75 0 0 0 5.304 0l6.401-6.402M6.75 21A3.75 3.75 0 0 1 3 17.25V4.125C3 3.504 3.504 3 4.125 3h5.25c.621 0 1.125.504 1.125 1.125v4.072M6.75 21a3.75 3.75 0 0 0 3.75-3.75V8.197M6.75 21h13.125c.621 0 1.125-.504 1.125-1.125v-5.25c0-.621-.504-1.125-1.125-1.125h-4.072M10.5 8.197l2.88-2.88c.438-.439 1.15-.439 1.59 0l3.712 3.713c.44.44.44 1.152 0 1.59l-2.879 2.88M6.75 17.25h.008v.008H6.75v-.008Z" />
3
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Paper Plane (Send/Submit) %>
2
+ <%# Source: https://heroicons.com/ (paper-airplane) %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M6 12L3.269 3.126A59.768 59.768 0 0121.485 12 59.77 59.77 0 013.27 20.876L5.999 12zm0 0h7.5" />
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Photo (image/picture) %>
2
+ <%# Source: https://heroicons.com/ %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z" />
10
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"></path>
3
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
4
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"></path>
3
+ </svg>
@@ -0,0 +1,11 @@
1
+ <%# Icon: Pocket (save to Pocket service) %>
2
+ <%# Source: Custom SVG - simplified pocket icon %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h18v9a9 9 0 1 1-18 0V3Z" />
10
+ <path stroke-linecap="round" stroke-linejoin="round" d="m9 11 3 3 3-3" />
11
+ </svg>
@@ -0,0 +1,34 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" width="512" height="512" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#009990;stop-opacity:1" />
5
+ <stop offset="100%" style="stop-color:#007a70;stop-opacity:1" />
6
+ </linearGradient>
7
+ </defs>
8
+
9
+ <!-- Background -->
10
+ <rect x="0" y="0" width="512" height="512" fill="url(#bg)" rx="64"/>
11
+
12
+ <!-- Magazine pages -->
13
+ <rect x="120" y="90" width="280" height="360" fill="#ffffff" rx="8" opacity="0.95"/>
14
+ <rect x="110" y="100" width="280" height="360" fill="#ffffff" rx="8" opacity="0.8"/>
15
+ <rect x="100" y="110" width="280" height="360" fill="#ffffff" rx="8"/>
16
+
17
+ <!-- Magazine content lines -->
18
+ <rect x="130" y="150" width="220" height="8" fill="#009990" rx="4"/>
19
+ <rect x="130" y="180" width="180" height="4" fill="#545E75" rx="2"/>
20
+ <rect x="130" y="200" width="200" height="4" fill="#545E75" rx="2"/>
21
+ <rect x="130" y="220" width="160" height="4" fill="#545E75" rx="2"/>
22
+
23
+ <rect x="130" y="260" width="220" height="6" fill="#009990" rx="3"/>
24
+ <rect x="130" y="285" width="190" height="4" fill="#545E75" rx="2"/>
25
+ <rect x="130" y="305" width="210" height="4" fill="#545E75" rx="2"/>
26
+ <rect x="130" y="325" width="170" height="4" fill="#545E75" rx="2"/>
27
+
28
+ <rect x="130" y="365" width="220" height="6" fill="#009990" rx="3"/>
29
+ <rect x="130" y="390" width="180" height="4" fill="#545E75" rx="2"/>
30
+ <rect x="130" y="410" width="200" height="4" fill="#545E75" rx="2"/>
31
+
32
+ <!-- Magazine bookmark -->
33
+ <polygon points="350,110 370,110 360,140 350,130" fill="#DE5959"/>
34
+ </svg>
@@ -0,0 +1,13 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" width="24" height="24" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Outer large thin triangle -->
3
+ <polygon points="150,50 250,200 50,200"
4
+ fill="none"
5
+ stroke="currentColor"
6
+ stroke-width="2"/>
7
+
8
+ <!-- Inner small thick triangle -->
9
+ <polygon points="150,100 200,180 100,180"
10
+ fill="none"
11
+ stroke="currentColor"
12
+ stroke-width="6"/>
13
+ </svg>
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" width="800px" height="800px" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
3
+ <defs>
4
+ <path id="path-1" d="M256,128 C256,198.692 198.692,256 128,256 C57.308,256 0,198.692 0,128 C0,57.308 57.308,0 128,0 C198.692,0 256,57.308 256,128">
5
+ </path>
6
+ <linearGradient x1="8.59001137%" y1="1.95448636%" x2="77.4705802%" y2="73.8962145%" id="linearGradient-3">
7
+ <stop stop-color="#4CB36B" offset="0%">
8
+ </stop>
9
+ <stop stop-color="#3EA16F" offset="100%">
10
+ </stop>
11
+ </linearGradient>
12
+ </defs>
13
+ <g>
14
+ <mask id="mask-2" fill="white">
15
+ <use xlink:href="#path-1">
16
+ </use>
17
+ </mask>
18
+ <use fill="#67BF79" xlink:href="#path-1">
19
+ </use>
20
+ <path d="M256,128 C256,198.692 198.692,256 128,256 C57.308,256 0,198.692 0,128 C0,57.308 57.308,0 128,0 C198.692,0 256,57.308 256,128" fill="#67BF79" mask="url(#mask-2)">
21
+ </path>
22
+ <path d="M63.111,187.022 L96.178,72 L160.711,132.978 L200,90.133 L287.533,176.422 L176.689,301.311 L63.111,187.022" fill="url(#linearGradient-3)" mask="url(#mask-2)">
23
+ </path>
24
+ <path d="M77,189.6 C60.267,189.6 60.267,189.6 60.267,172.867 L60.267,81 C60.267,64.267 60.267,64.267 77,64.267 L80.334,64.267 C97.0669992,64.267 97.0669992,64.267 97.067,81 L97.067,172.867 C97.0669992,189.6 97.0669992,189.6 80.334,189.6 L77,189.6 Z" fill="#FFFFFF" mask="url(#mask-2)">
25
+ </path>
26
+ <path d="M121.041,189.6 C115.342,189.6 112.533,186.791 112.533,181.092 L112.533,72.774 C112.533,67.076 115.342,64.267 121.041,64.267 L158.578,64.267 C190.756,64.267 211.206,96.54 211.206,127.292 C211.206,158.044 190.578,189.6 158.578,189.6 L121.041,189.6 Z" fill="#FFFFFF" mask="url(#mask-2)">
27
+ </path>
28
+ </g>
29
+ </svg>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" width="800px" height="800px" viewBox="0 0 192 192" xmlns="http://www.w3.org/2000/svg" fill="none"><path stroke="currentColor" stroke-width="12" d="M30 37a4 4 0 0 1 4-4h16a4 4 0 0 1 4 4v116a4 4 0 0 1-4 4H34a4 4 0 0 1-4-4V37Zm48 0a4 4 0 0 1 4-4h34c34.242 0 62 27.758 62 62 0 34.242-27.758 62-62 62H82a4 4 0 0 1-4-4V37Z"/></svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Puzzle Piece (extensions/plugins/integrations) %>
2
+ <%# Source: https://heroicons.com/ %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M14.25 6.087c0-.355.186-.676.401-.959.221-.29.349-.634.349-1.003 0-1.036-1.007-1.875-2.25-1.875s-2.25.84-2.25 1.875c0 .369.128.713.349 1.003.215.283.401.604.401.959v0a.64.64 0 0 1-.657.643 48.39 48.39 0 0 1-4.163-.3c.186 1.613.293 3.25.315 4.907a.656.656 0 0 1-.658.663v0c-.355 0-.676-.186-.959-.401a1.647 1.647 0 0 0-1.003-.349c-1.036 0-1.875 1.007-1.875 2.25s.84 2.25 1.875 2.25c.369 0 .713-.128 1.003-.349.283-.215.604-.401.959-.401v0c.31 0 .555.26.532.57a48.039 48.039 0 0 1-.642 5.056c1.518.19 3.058.309 4.616.354a.64.64 0 0 0 .657-.643v0c0-.355-.186-.676-.401-.959a1.647 1.647 0 0 1-.349-1.003c0-1.035 1.008-1.875 2.25-1.875 1.243 0 2.25.84 2.25 1.875 0 .369-.128.713-.349 1.003-.215.283-.4.604-.4.959v0c0 .333.277.599.61.58a48.1 48.1 0 0 0 5.427-.63 48.05 48.05 0 0 0 .582-4.717.532.532 0 0 0-.533-.57v0c-.355 0-.676.186-.959.401-.29.221-.634.349-1.003.349-1.035 0-1.875-1.007-1.875-2.25s.84-2.25 1.875-2.25c.37 0 .713.128 1.003.349.283.215.604.401.96.401v0a.656.656 0 0 0 .658-.663 48.422 48.422 0 0 0-.37-5.36c-1.886.342-3.81.574-5.766.689a.578.578 0 0 1-.61-.58v0Z" />
10
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
3
+ </svg>
@@ -0,0 +1,10 @@
1
+ <%# Icon: Receipt (bill/invoice) %>
2
+ <%# Source: https://heroicons.com/ %>
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ stroke-width="1.5"
7
+ stroke="currentColor"
8
+ class="<%= css_class %>">
9
+ <path stroke-linecap="round" stroke-linejoin="round" d="M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 0 0-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75 2.25 2.25 0 0 0-.1-.664m-5.8 0A2.251 2.251 0 0 1 13.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25ZM6.75 12h.008v.008H6.75V12Zm0 3h.008v.008H6.75V15Zm0 3h.008v.008H6.75V18Z" />
10
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 12v6a2 2 0 002 2h12a2 2 0 002-2v-6M16 8l4-4m0 0l-4-4m4 4H6a2 2 0 00-2 2v4"></path>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
3
+ </svg>