@beknurakhmed/webforge-cli 0.1.1 → 0.1.2

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 (324) hide show
  1. package/README.md +226 -226
  2. package/package.json +63 -63
  3. package/templates/extras/typescript/deps.json +6 -0
  4. package/templates/extras/typescript/react/tsconfig.json +21 -0
  5. package/templates/extras/typescript/vanilla/tsconfig.json +19 -0
  6. package/templates/extras/typescript/vue/tsconfig.json +20 -0
  7. package/templates/overlays/blog/angular/src/app/app.component.ts +100 -0
  8. package/templates/overlays/blog/angular/src/app/app.routes.ts +12 -0
  9. package/templates/overlays/blog/angular/src/app/components/blog-sidebar.component.ts +115 -0
  10. package/templates/overlays/blog/angular/src/app/components/post-card.component.ts +94 -0
  11. package/templates/overlays/blog/angular/src/app/pages/about.component.ts +114 -0
  12. package/templates/overlays/blog/angular/src/app/pages/category.component.ts +141 -0
  13. package/templates/overlays/blog/angular/src/app/pages/home.component.ts +143 -0
  14. package/templates/overlays/blog/angular/src/app/pages/post-detail.component.ts +196 -0
  15. package/templates/overlays/blog/angular/src/main.ts +10 -0
  16. package/templates/overlays/blog/nextjs/src/app/about/page.tsx +55 -0
  17. package/templates/overlays/blog/nextjs/src/app/category/[slug]/page.tsx +52 -0
  18. package/templates/overlays/blog/nextjs/src/app/components/BlogFooter.tsx +46 -0
  19. package/templates/overlays/blog/nextjs/src/app/components/BlogHeader.tsx +37 -0
  20. package/templates/overlays/blog/nextjs/src/app/components/BlogSidebar.tsx +56 -0
  21. package/templates/overlays/blog/nextjs/src/app/components/PostCard.tsx +42 -0
  22. package/templates/overlays/blog/nextjs/src/app/globals.css +158 -0
  23. package/templates/overlays/blog/nextjs/src/app/layout.tsx +20 -0
  24. package/templates/overlays/blog/nextjs/src/app/page.tsx +36 -0
  25. package/templates/overlays/blog/nextjs/src/app/post/[id]/page.tsx +78 -0
  26. package/templates/overlays/blog/nuxt/app.vue +27 -0
  27. package/templates/overlays/blog/nuxt/components/BlogFooter.vue +48 -0
  28. package/templates/overlays/blog/nuxt/components/BlogHeader.vue +55 -0
  29. package/templates/overlays/blog/nuxt/components/BlogSidebar.vue +144 -0
  30. package/templates/overlays/blog/nuxt/components/PostCard.vue +125 -0
  31. package/templates/overlays/blog/nuxt/layouts/default.vue +25 -0
  32. package/templates/overlays/blog/nuxt/pages/about.vue +161 -0
  33. package/templates/overlays/blog/nuxt/pages/category/[slug].vue +80 -0
  34. package/templates/overlays/blog/nuxt/pages/index.vue +54 -0
  35. package/templates/overlays/blog/nuxt/pages/post/[id].vue +158 -0
  36. package/templates/overlays/blog/react/src/App.css +58 -18
  37. package/templates/overlays/blog/react/src/App.tsx +16 -31
  38. package/templates/overlays/blog/react/src/components/BlogFooter.tsx +4 -2
  39. package/templates/overlays/blog/react/src/components/BlogHeader.tsx +12 -6
  40. package/templates/overlays/blog/react/src/components/BlogSidebar.tsx +9 -8
  41. package/templates/overlays/blog/react/src/components/Layout.tsx +17 -0
  42. package/templates/overlays/blog/react/src/components/PostCard.tsx +30 -0
  43. package/templates/overlays/blog/react/src/data/posts.ts +22 -0
  44. package/templates/overlays/blog/react/src/pages/About.tsx +33 -0
  45. package/templates/overlays/blog/react/src/pages/Category.tsx +29 -0
  46. package/templates/overlays/blog/react/src/pages/Home.tsx +18 -0
  47. package/templates/overlays/blog/react/src/pages/PostDetail.tsx +38 -0
  48. package/templates/overlays/blog/vanilla/src/main.ts +112 -0
  49. package/templates/overlays/blog/vanilla/src/pages/about.ts +106 -0
  50. package/templates/overlays/blog/vanilla/src/pages/category.ts +86 -0
  51. package/templates/overlays/blog/vanilla/src/pages/home.ts +103 -0
  52. package/templates/overlays/blog/vanilla/src/pages/post-detail.ts +108 -0
  53. package/templates/overlays/blog/vanilla/src/router.ts +33 -0
  54. package/templates/overlays/blog/vanilla/src/style.css +677 -0
  55. package/templates/overlays/blog/vue/src/App.vue +29 -0
  56. package/templates/overlays/blog/vue/src/components/BlogFooter.vue +8 -0
  57. package/templates/overlays/blog/vue/src/components/BlogHeader.vue +14 -0
  58. package/templates/overlays/blog/vue/src/components/BlogSidebar.vue +31 -0
  59. package/templates/overlays/blog/vue/src/components/PostCard.vue +17 -0
  60. package/templates/overlays/blog/vue/src/data.ts +82 -0
  61. package/templates/overlays/blog/vue/src/main.ts +6 -0
  62. package/templates/overlays/blog/vue/src/pages/About.vue +17 -0
  63. package/templates/overlays/blog/vue/src/pages/Category.vue +32 -0
  64. package/templates/overlays/blog/vue/src/pages/Home.vue +14 -0
  65. package/templates/overlays/blog/vue/src/pages/PostDetail.vue +22 -0
  66. package/templates/overlays/blog/vue/src/router.ts +19 -0
  67. package/templates/overlays/blog/vue/src/style.css +288 -0
  68. package/templates/overlays/crm/angular/src/app/app.component.ts +110 -0
  69. package/templates/overlays/crm/angular/src/app/app.routes.ts +12 -0
  70. package/templates/overlays/crm/angular/src/app/components/contacts-table.component.ts +98 -0
  71. package/templates/overlays/crm/angular/src/app/components/stats-cards.component.ts +63 -0
  72. package/templates/overlays/crm/angular/src/app/pages/contacts.component.ts +70 -0
  73. package/templates/overlays/crm/angular/src/app/pages/dashboard-home.component.ts +38 -0
  74. package/templates/overlays/crm/angular/src/app/pages/deals.component.ts +145 -0
  75. package/templates/overlays/crm/angular/src/app/pages/settings.component.ts +103 -0
  76. package/templates/overlays/crm/angular/src/main.ts +8 -0
  77. package/templates/overlays/crm/nextjs/src/app/components/ContactsTable.tsx +69 -0
  78. package/templates/overlays/crm/nextjs/src/app/components/Sidebar.tsx +45 -0
  79. package/templates/overlays/crm/nextjs/src/app/components/StatsCards.tsx +31 -0
  80. package/templates/overlays/crm/nextjs/src/app/contacts/page.tsx +111 -0
  81. package/templates/overlays/crm/nextjs/src/app/deals/page.tsx +111 -0
  82. package/templates/overlays/crm/nextjs/src/app/globals.css +165 -0
  83. package/templates/overlays/crm/nextjs/src/app/layout.tsx +20 -0
  84. package/templates/overlays/crm/nextjs/src/app/page.tsx +43 -0
  85. package/templates/overlays/crm/nextjs/src/app/settings/page.tsx +91 -0
  86. package/templates/overlays/crm/nuxt/app.vue +27 -0
  87. package/templates/overlays/crm/nuxt/components/ContactsTable.vue +140 -0
  88. package/templates/overlays/crm/nuxt/components/CrmSidebar.vue +97 -0
  89. package/templates/overlays/crm/nuxt/components/StatsCards.vue +63 -0
  90. package/templates/overlays/crm/nuxt/layouts/default.vue +21 -0
  91. package/templates/overlays/crm/nuxt/pages/contacts.vue +79 -0
  92. package/templates/overlays/crm/nuxt/pages/deals.vue +229 -0
  93. package/templates/overlays/crm/nuxt/pages/index.vue +186 -0
  94. package/templates/overlays/crm/nuxt/pages/settings.vue +233 -0
  95. package/templates/overlays/crm/react/src/App.css +49 -20
  96. package/templates/overlays/crm/react/src/App.tsx +16 -41
  97. package/templates/overlays/crm/react/src/components/ContactsTable.tsx +8 -8
  98. package/templates/overlays/crm/react/src/components/Layout.tsx +15 -0
  99. package/templates/overlays/crm/react/src/components/Sidebar.tsx +20 -14
  100. package/templates/overlays/crm/react/src/components/StatsCards.tsx +10 -12
  101. package/templates/overlays/crm/react/src/data/contacts.ts +19 -0
  102. package/templates/overlays/crm/react/src/pages/Contacts.tsx +32 -0
  103. package/templates/overlays/crm/react/src/pages/DashboardHome.tsx +44 -0
  104. package/templates/overlays/crm/react/src/pages/Deals.tsx +48 -0
  105. package/templates/overlays/crm/react/src/pages/Settings.tsx +35 -0
  106. package/templates/overlays/crm/vanilla/src/main.ts +95 -0
  107. package/templates/overlays/crm/vanilla/src/pages/contacts.ts +87 -0
  108. package/templates/overlays/crm/vanilla/src/pages/dashboard-home.ts +121 -0
  109. package/templates/overlays/crm/vanilla/src/pages/deals.ts +116 -0
  110. package/templates/overlays/crm/vanilla/src/pages/settings.ts +129 -0
  111. package/templates/overlays/crm/vanilla/src/router.ts +33 -0
  112. package/templates/overlays/crm/vanilla/src/style.css +766 -0
  113. package/templates/overlays/crm/vue/src/App.vue +25 -0
  114. package/templates/overlays/crm/vue/src/components/ContactsTable.vue +30 -0
  115. package/templates/overlays/crm/vue/src/components/CrmSidebar.vue +14 -0
  116. package/templates/overlays/crm/vue/src/components/StatsCards.vue +23 -0
  117. package/templates/overlays/crm/vue/src/data.ts +38 -0
  118. package/templates/overlays/crm/vue/src/main.ts +6 -0
  119. package/templates/overlays/crm/vue/src/pages/Contacts.vue +25 -0
  120. package/templates/overlays/crm/vue/src/pages/DashboardHome.vue +19 -0
  121. package/templates/overlays/crm/vue/src/pages/Deals.vue +34 -0
  122. package/templates/overlays/crm/vue/src/pages/Settings.vue +33 -0
  123. package/templates/overlays/crm/vue/src/router.ts +19 -0
  124. package/templates/overlays/crm/vue/src/style.css +272 -0
  125. package/templates/overlays/dashboard/angular/src/app/app.component.ts +135 -0
  126. package/templates/overlays/dashboard/angular/src/app/app.routes.ts +24 -0
  127. package/templates/overlays/dashboard/angular/src/app/components/chart-placeholder.component.ts +86 -0
  128. package/templates/overlays/dashboard/angular/src/app/components/data-table.component.ts +140 -0
  129. package/templates/overlays/dashboard/angular/src/app/components/kpi-cards.component.ts +120 -0
  130. package/templates/overlays/dashboard/angular/src/app/pages/analytics.component.ts +138 -0
  131. package/templates/overlays/dashboard/angular/src/app/pages/overview.component.ts +58 -0
  132. package/templates/overlays/dashboard/angular/src/app/pages/settings.component.ts +128 -0
  133. package/templates/overlays/dashboard/angular/src/app/pages/users.component.ts +153 -0
  134. package/templates/overlays/dashboard/angular/src/main.ts +10 -0
  135. package/templates/overlays/dashboard/nextjs/src/app/analytics/page.tsx +76 -0
  136. package/templates/overlays/dashboard/nextjs/src/app/components/ChartPlaceholder.tsx +58 -0
  137. package/templates/overlays/dashboard/nextjs/src/app/components/DataTable.tsx +60 -0
  138. package/templates/overlays/dashboard/nextjs/src/app/components/KPICards.tsx +31 -0
  139. package/templates/overlays/dashboard/nextjs/src/app/components/Sidebar.tsx +45 -0
  140. package/templates/overlays/dashboard/nextjs/src/app/globals.css +150 -0
  141. package/templates/overlays/dashboard/nextjs/src/app/layout.tsx +20 -0
  142. package/templates/overlays/dashboard/nextjs/src/app/page.tsx +20 -0
  143. package/templates/overlays/dashboard/nextjs/src/app/settings/page.tsx +118 -0
  144. package/templates/overlays/dashboard/nextjs/src/app/users/page.tsx +99 -0
  145. package/templates/overlays/dashboard/nuxt/app.vue +27 -0
  146. package/templates/overlays/dashboard/nuxt/components/ChartPlaceholder.vue +73 -0
  147. package/templates/overlays/dashboard/nuxt/components/DashSidebar.vue +97 -0
  148. package/templates/overlays/dashboard/nuxt/components/DataTable.vue +126 -0
  149. package/templates/overlays/dashboard/nuxt/components/KPICards.vue +76 -0
  150. package/templates/overlays/dashboard/nuxt/layouts/default.vue +21 -0
  151. package/templates/overlays/dashboard/nuxt/pages/analytics.vue +94 -0
  152. package/templates/overlays/dashboard/nuxt/pages/index.vue +49 -0
  153. package/templates/overlays/dashboard/nuxt/pages/settings.vue +239 -0
  154. package/templates/overlays/dashboard/nuxt/pages/users.vue +227 -0
  155. package/templates/overlays/dashboard/react/src/App.css +50 -24
  156. package/templates/overlays/dashboard/react/src/App.tsx +16 -22
  157. package/templates/overlays/dashboard/react/src/components/ChartPlaceholder.tsx +5 -2
  158. package/templates/overlays/dashboard/react/src/components/DataTable.tsx +9 -1
  159. package/templates/overlays/dashboard/react/src/components/KPICards.tsx +4 -4
  160. package/templates/overlays/dashboard/react/src/components/Layout.tsx +13 -0
  161. package/templates/overlays/dashboard/react/src/components/Sidebar.tsx +15 -10
  162. package/templates/overlays/dashboard/react/src/pages/Analytics.tsx +33 -0
  163. package/templates/overlays/dashboard/react/src/pages/Overview.tsx +23 -0
  164. package/templates/overlays/dashboard/react/src/pages/Settings.tsx +41 -0
  165. package/templates/overlays/dashboard/react/src/pages/Users.tsx +57 -0
  166. package/templates/overlays/dashboard/vanilla/src/main.ts +101 -0
  167. package/templates/overlays/dashboard/vanilla/src/pages/analytics.ts +99 -0
  168. package/templates/overlays/dashboard/vanilla/src/pages/overview.ts +60 -0
  169. package/templates/overlays/dashboard/vanilla/src/pages/settings.ts +118 -0
  170. package/templates/overlays/dashboard/vanilla/src/pages/users.ts +80 -0
  171. package/templates/overlays/dashboard/vanilla/src/router.ts +33 -0
  172. package/templates/overlays/dashboard/vanilla/src/style.css +654 -0
  173. package/templates/overlays/dashboard/vue/src/App.vue +12 -0
  174. package/templates/overlays/dashboard/vue/src/components/ChartPlaceholder.vue +34 -0
  175. package/templates/overlays/dashboard/vue/src/components/DashSidebar.vue +19 -0
  176. package/templates/overlays/dashboard/vue/src/components/DataTable.vue +34 -0
  177. package/templates/overlays/dashboard/vue/src/components/KPICards.vue +18 -0
  178. package/templates/overlays/dashboard/vue/src/main.ts +6 -0
  179. package/templates/overlays/dashboard/vue/src/pages/Analytics.vue +32 -0
  180. package/templates/overlays/dashboard/vue/src/pages/Overview.vue +17 -0
  181. package/templates/overlays/dashboard/vue/src/pages/Settings.vue +65 -0
  182. package/templates/overlays/dashboard/vue/src/pages/Users.vue +44 -0
  183. package/templates/overlays/dashboard/vue/src/router.ts +15 -0
  184. package/templates/overlays/dashboard/vue/src/style.css +447 -0
  185. package/templates/overlays/ecommerce/angular/src/app/app.component.ts +147 -0
  186. package/templates/overlays/ecommerce/angular/src/app/app.routes.ts +10 -0
  187. package/templates/overlays/ecommerce/angular/src/app/components/product-card.component.ts +94 -0
  188. package/templates/overlays/ecommerce/angular/src/app/data/products.ts +75 -0
  189. package/templates/overlays/ecommerce/angular/src/app/pages/cart.component.ts +169 -0
  190. package/templates/overlays/ecommerce/angular/src/app/pages/home.component.ts +96 -0
  191. package/templates/overlays/ecommerce/angular/src/app/pages/product-detail.component.ts +124 -0
  192. package/templates/overlays/ecommerce/angular/src/main.ts +10 -0
  193. package/templates/overlays/ecommerce/nextjs/src/app/cart/page.tsx +74 -0
  194. package/templates/overlays/ecommerce/nextjs/src/app/components/CartProvider.tsx +80 -0
  195. package/templates/overlays/ecommerce/nextjs/src/app/components/Footer.tsx +44 -0
  196. package/templates/overlays/ecommerce/nextjs/src/app/components/Header.tsx +27 -0
  197. package/templates/overlays/ecommerce/nextjs/src/app/components/ProductCard.tsx +23 -0
  198. package/templates/overlays/ecommerce/nextjs/src/app/globals.css +144 -0
  199. package/templates/overlays/ecommerce/nextjs/src/app/layout.tsx +23 -0
  200. package/templates/overlays/ecommerce/nextjs/src/app/page.tsx +73 -0
  201. package/templates/overlays/ecommerce/nextjs/src/app/product/[id]/page.tsx +63 -0
  202. package/templates/overlays/ecommerce/nuxt/app.vue +27 -0
  203. package/templates/overlays/ecommerce/nuxt/components/ProductCard.vue +77 -0
  204. package/templates/overlays/ecommerce/nuxt/components/StoreFooter.vue +47 -0
  205. package/templates/overlays/ecommerce/nuxt/components/StoreHeader.vue +91 -0
  206. package/templates/overlays/ecommerce/nuxt/layouts/default.vue +43 -0
  207. package/templates/overlays/ecommerce/nuxt/pages/cart.vue +268 -0
  208. package/templates/overlays/ecommerce/nuxt/pages/index.vue +154 -0
  209. package/templates/overlays/ecommerce/nuxt/pages/product/[id].vue +211 -0
  210. package/templates/overlays/ecommerce/react/src/App.css +71 -59
  211. package/templates/overlays/ecommerce/react/src/App.tsx +18 -44
  212. package/templates/overlays/ecommerce/react/src/components/Footer.tsx +2 -2
  213. package/templates/overlays/ecommerce/react/src/components/Header.tsx +15 -14
  214. package/templates/overlays/ecommerce/react/src/components/Layout.tsx +20 -0
  215. package/templates/overlays/ecommerce/react/src/components/ProductCard.tsx +28 -0
  216. package/templates/overlays/ecommerce/react/src/data/products.ts +23 -0
  217. package/templates/overlays/ecommerce/react/src/pages/Cart.tsx +51 -0
  218. package/templates/overlays/ecommerce/react/src/pages/Home.tsx +37 -0
  219. package/templates/overlays/ecommerce/react/src/pages/ProductDetail.tsx +38 -0
  220. package/templates/overlays/ecommerce/vanilla/src/main.ts +73 -0
  221. package/templates/overlays/ecommerce/vanilla/src/pages/cart.ts +73 -0
  222. package/templates/overlays/ecommerce/vanilla/src/pages/home.ts +71 -0
  223. package/templates/overlays/ecommerce/vanilla/src/pages/product-detail.ts +81 -0
  224. package/templates/overlays/ecommerce/vanilla/src/router.ts +33 -0
  225. package/templates/overlays/ecommerce/vanilla/src/style.css +522 -0
  226. package/templates/overlays/ecommerce/vue/src/App.vue +17 -32
  227. package/templates/overlays/ecommerce/vue/src/components/ProductCard.vue +25 -0
  228. package/templates/overlays/ecommerce/vue/src/components/StoreFooter.vue +6 -12
  229. package/templates/overlays/ecommerce/vue/src/components/StoreHeader.vue +5 -23
  230. package/templates/overlays/ecommerce/vue/src/data.ts +23 -0
  231. package/templates/overlays/ecommerce/vue/src/main.ts +6 -0
  232. package/templates/overlays/ecommerce/vue/src/pages/Cart.vue +34 -0
  233. package/templates/overlays/ecommerce/vue/src/pages/Home.vue +27 -0
  234. package/templates/overlays/ecommerce/vue/src/pages/ProductDetail.vue +27 -0
  235. package/templates/overlays/ecommerce/vue/src/router.ts +13 -0
  236. package/templates/overlays/ecommerce/vue/src/style.css +359 -0
  237. package/templates/overlays/portfolio/angular/src/app/app.component.ts +102 -0
  238. package/templates/overlays/portfolio/angular/src/app/app.routes.ts +12 -0
  239. package/templates/overlays/portfolio/angular/src/app/components/project-card.component.ts +86 -0
  240. package/templates/overlays/portfolio/angular/src/app/components/skills-grid.component.ts +88 -0
  241. package/templates/overlays/portfolio/angular/src/app/pages/about.component.ts +122 -0
  242. package/templates/overlays/portfolio/angular/src/app/pages/contact.component.ts +131 -0
  243. package/templates/overlays/portfolio/angular/src/app/pages/home.component.ts +207 -0
  244. package/templates/overlays/portfolio/angular/src/app/pages/projects.component.ts +150 -0
  245. package/templates/overlays/portfolio/angular/src/main.ts +10 -0
  246. package/templates/overlays/portfolio/nextjs/src/app/about/page.tsx +70 -0
  247. package/templates/overlays/portfolio/nextjs/src/app/components/Footer.tsx +37 -0
  248. package/templates/overlays/portfolio/nextjs/src/app/components/Navbar.tsx +37 -0
  249. package/templates/overlays/portfolio/nextjs/src/app/components/ProjectCard.tsx +35 -0
  250. package/templates/overlays/portfolio/nextjs/src/app/components/SkillsGrid.tsx +45 -0
  251. package/templates/overlays/portfolio/nextjs/src/app/contact/page.tsx +138 -0
  252. package/templates/overlays/portfolio/nextjs/src/app/globals.css +197 -0
  253. package/templates/overlays/portfolio/nextjs/src/app/layout.tsx +20 -0
  254. package/templates/overlays/portfolio/nextjs/src/app/page.tsx +60 -0
  255. package/templates/overlays/portfolio/nextjs/src/app/projects/page.tsx +56 -0
  256. package/templates/overlays/portfolio/nuxt/app.vue +27 -0
  257. package/templates/overlays/portfolio/nuxt/components/PortfolioFooter.vue +49 -0
  258. package/templates/overlays/portfolio/nuxt/components/PortfolioNav.vue +77 -0
  259. package/templates/overlays/portfolio/nuxt/components/ProjectCard.vue +102 -0
  260. package/templates/overlays/portfolio/nuxt/components/SkillsGrid.vue +89 -0
  261. package/templates/overlays/portfolio/nuxt/layouts/default.vue +21 -0
  262. package/templates/overlays/portfolio/nuxt/pages/about.vue +179 -0
  263. package/templates/overlays/portfolio/nuxt/pages/contact.vue +278 -0
  264. package/templates/overlays/portfolio/nuxt/pages/index.vue +160 -0
  265. package/templates/overlays/portfolio/nuxt/pages/projects.vue +116 -0
  266. package/templates/overlays/portfolio/react/src/App.css +54 -27
  267. package/templates/overlays/portfolio/react/src/App.tsx +16 -12
  268. package/templates/overlays/portfolio/react/src/components/Layout.tsx +17 -0
  269. package/templates/overlays/portfolio/react/src/components/Navbar.tsx +30 -0
  270. package/templates/overlays/portfolio/react/src/components/PortfolioFooter.tsx +5 -3
  271. package/templates/overlays/portfolio/react/src/components/ProjectCard.tsx +24 -0
  272. package/templates/overlays/portfolio/react/src/components/SkillsGrid.tsx +20 -0
  273. package/templates/overlays/portfolio/react/src/data/projects.ts +25 -0
  274. package/templates/overlays/portfolio/react/src/pages/About.tsx +43 -0
  275. package/templates/overlays/portfolio/react/src/pages/Contact.tsx +48 -0
  276. package/templates/overlays/portfolio/react/src/pages/Home.tsx +44 -0
  277. package/templates/overlays/portfolio/react/src/pages/Projects.tsx +36 -0
  278. package/templates/overlays/portfolio/vanilla/src/main.ts +58 -0
  279. package/templates/overlays/portfolio/vanilla/src/pages/about.ts +146 -0
  280. package/templates/overlays/portfolio/vanilla/src/pages/contact.ts +159 -0
  281. package/templates/overlays/portfolio/vanilla/src/pages/home.ts +123 -0
  282. package/templates/overlays/portfolio/vanilla/src/pages/projects.ts +89 -0
  283. package/templates/overlays/portfolio/vanilla/src/router.ts +33 -0
  284. package/templates/overlays/portfolio/vanilla/src/style.css +909 -0
  285. package/templates/overlays/portfolio/vue/src/App.vue +25 -0
  286. package/templates/overlays/portfolio/vue/src/components/PortfolioFooter.vue +14 -0
  287. package/templates/overlays/portfolio/vue/src/components/PortfolioNav.vue +16 -0
  288. package/templates/overlays/portfolio/vue/src/components/ProjectCard.vue +18 -0
  289. package/templates/overlays/portfolio/vue/src/components/SkillsGrid.vue +14 -0
  290. package/templates/overlays/portfolio/vue/src/data.ts +78 -0
  291. package/templates/overlays/portfolio/vue/src/main.ts +6 -0
  292. package/templates/overlays/portfolio/vue/src/pages/About.vue +30 -0
  293. package/templates/overlays/portfolio/vue/src/pages/Contact.vue +47 -0
  294. package/templates/overlays/portfolio/vue/src/pages/Home.vue +27 -0
  295. package/templates/overlays/portfolio/vue/src/pages/Projects.vue +33 -0
  296. package/templates/overlays/portfolio/vue/src/router.ts +19 -0
  297. package/templates/overlays/portfolio/vue/src/style.css +404 -0
  298. package/templates/react/package.json +23 -19
  299. package/templates/react/tsconfig.json +20 -0
  300. package/templates/styling/tailwind/deps.json +7 -6
  301. package/templates/styling/tailwind/nextjs/postcss.config.mjs +7 -0
  302. package/templates/styling/tailwind/nextjs/src/app/globals.css +1 -0
  303. package/templates/styling/tailwind/react/src/index.css +1 -0
  304. package/templates/styling/tailwind/react/vite.config.ts +7 -0
  305. package/templates/styling/tailwind/vanilla/src/style.css +1 -0
  306. package/templates/styling/tailwind/vanilla/vite.config.ts +6 -0
  307. package/templates/styling/tailwind/vue/src/style.css +1 -0
  308. package/templates/styling/tailwind/vue/vite.config.ts +7 -0
  309. package/templates/vanilla/package.json +15 -14
  310. package/templates/vanilla/tsconfig.json +19 -0
  311. package/templates/vue/package.json +21 -18
  312. package/templates/vue/tsconfig.json +20 -0
  313. package/templates/overlays/blog/react/src/components/PostList.tsx +0 -27
  314. package/templates/overlays/crm/react/src/components/Filters.tsx +0 -22
  315. package/templates/overlays/ecommerce/react/src/components/Cart.tsx +0 -47
  316. package/templates/overlays/ecommerce/react/src/components/ProductGrid.tsx +0 -32
  317. package/templates/overlays/ecommerce/vue/src/components/CartPanel.vue +0 -46
  318. package/templates/overlays/ecommerce/vue/src/components/ProductGrid.vue +0 -40
  319. package/templates/overlays/portfolio/react/src/components/ContactForm.tsx +0 -29
  320. package/templates/overlays/portfolio/react/src/components/HeroSection.tsx +0 -24
  321. package/templates/overlays/portfolio/react/src/components/Projects.tsx +0 -33
  322. package/templates/overlays/portfolio/react/src/components/Skills.tsx +0 -27
  323. package/templates/styling/tailwind/config/postcss.config.js +0 -5
  324. package/templates/styling/tailwind/config/tailwind.config.js +0 -11
@@ -0,0 +1,34 @@
1
+ <script setup lang="ts">
2
+ const orders = [
3
+ { id: '#3210', customer: 'Sarah Johnson', amount: '$245.00', status: 'Completed', badge: 'badge-success' },
4
+ { id: '#3209', customer: 'Mike Peters', amount: '$129.50', status: 'Processing', badge: 'badge-warning' },
5
+ { id: '#3208', customer: 'Emily Chen', amount: '$89.99', status: 'Completed', badge: 'badge-success' },
6
+ { id: '#3207', customer: 'James Wilson', amount: '$312.00', status: 'Cancelled', badge: 'badge-danger' },
7
+ { id: '#3206', customer: 'Anna Lee', amount: '$175.25', status: 'Shipped', badge: 'badge-info' },
8
+ { id: '#3205', customer: 'Tom Davis', amount: '$98.00', status: 'Completed', badge: 'badge-success' },
9
+ ];
10
+ </script>
11
+
12
+ <template>
13
+ <div class="data-table-wrapper">
14
+ <div class="table-header">Recent Orders</div>
15
+ <table class="data-table">
16
+ <thead>
17
+ <tr>
18
+ <th>Order ID</th>
19
+ <th>Customer</th>
20
+ <th>Amount</th>
21
+ <th>Status</th>
22
+ </tr>
23
+ </thead>
24
+ <tbody>
25
+ <tr v-for="order in orders" :key="order.id">
26
+ <td>{{ order.id }}</td>
27
+ <td>{{ order.customer }}</td>
28
+ <td>{{ order.amount }}</td>
29
+ <td><span :class="['badge', order.badge]">{{ order.status }}</span></td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ </template>
@@ -0,0 +1,18 @@
1
+ <script setup lang="ts">
2
+ const kpis = [
3
+ { label: 'Total Revenue', value: '$48,250', change: '+12%', positive: true },
4
+ { label: 'Active Users', value: '2,420', change: '+8%', positive: true },
5
+ { label: 'Orders', value: '1,210', change: '-3%', positive: false },
6
+ { label: 'Conversion', value: '3.2%', change: '+0.5%', positive: true },
7
+ ];
8
+ </script>
9
+
10
+ <template>
11
+ <div class="kpi-grid">
12
+ <div v-for="kpi in kpis" :key="kpi.label" class="kpi-card">
13
+ <p class="kpi-label">{{ kpi.label }}</p>
14
+ <p class="kpi-value">{{ kpi.value }}</p>
15
+ <p :class="['kpi-change', kpi.positive ? 'positive' : 'negative']">{{ kpi.change }}</p>
16
+ </div>
17
+ </div>
18
+ </template>
@@ -0,0 +1,6 @@
1
+ import { createApp } from 'vue';
2
+ import App from './App.vue';
3
+ import { router } from './router';
4
+ import './style.css';
5
+
6
+ createApp(App).use(router).mount('#app');
@@ -0,0 +1,32 @@
1
+ <script setup lang="ts">
2
+ import ChartPlaceholder from '../components/ChartPlaceholder.vue';
3
+
4
+ const metrics = [
5
+ { label: 'Avg. Session', value: '4m 32s' },
6
+ { label: 'Bounce Rate', value: '32.1%' },
7
+ { label: 'Page Views', value: '18,420' },
8
+ { label: 'New Visitors', value: '1,105' },
9
+ { label: 'Top Channel', value: 'Organic' },
10
+ { label: 'Goal Completion', value: '68%' },
11
+ ];
12
+ </script>
13
+
14
+ <template>
15
+ <div>
16
+ <div class="page-header">
17
+ <h1 class="page-title">Analytics</h1>
18
+ <p class="page-subtitle">Detailed traffic and engagement metrics.</p>
19
+ </div>
20
+ <div class="metrics-row">
21
+ <div v-for="m in metrics" :key="m.label" class="metric-card">
22
+ <p class="metric-value">{{ m.value }}</p>
23
+ <p class="metric-label">{{ m.label }}</p>
24
+ </div>
25
+ </div>
26
+ <div class="charts-grid">
27
+ <ChartPlaceholder title="Traffic Sources" />
28
+ <ChartPlaceholder title="User Engagement" />
29
+ </div>
30
+ <ChartPlaceholder title="Weekly Active Users" />
31
+ </div>
32
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import KPICards from '../components/KPICards.vue';
3
+ import ChartPlaceholder from '../components/ChartPlaceholder.vue';
4
+ import DataTable from '../components/DataTable.vue';
5
+ </script>
6
+
7
+ <template>
8
+ <div>
9
+ <div class="page-header">
10
+ <h1 class="page-title">Overview</h1>
11
+ <p class="page-subtitle">Welcome back. Here is what is happening today.</p>
12
+ </div>
13
+ <KPICards />
14
+ <ChartPlaceholder title="Monthly Revenue" />
15
+ <DataTable />
16
+ </div>
17
+ </template>
@@ -0,0 +1,65 @@
1
+ <script setup lang="ts">
2
+ import { ref } from 'vue';
3
+
4
+ const siteName = ref('{{projectName}}');
5
+ const email = ref('admin@example.com');
6
+ const timezone = ref('UTC');
7
+ const notifications = ref(true);
8
+ const darkMode = ref(false);
9
+ const twoFactor = ref(true);
10
+ </script>
11
+
12
+ <template>
13
+ <div>
14
+ <div class="page-header">
15
+ <h1 class="page-title">Settings</h1>
16
+ <p class="page-subtitle">Manage your application preferences.</p>
17
+ </div>
18
+ <div class="settings-form">
19
+ <div class="form-group">
20
+ <label class="form-label">Site Name</label>
21
+ <input v-model="siteName" type="text" class="form-input" />
22
+ </div>
23
+ <div class="form-group">
24
+ <label class="form-label">Admin Email</label>
25
+ <input v-model="email" type="email" class="form-input" />
26
+ </div>
27
+ <div class="form-group">
28
+ <label class="form-label">Timezone</label>
29
+ <select v-model="timezone" class="form-select">
30
+ <option value="UTC">UTC</option>
31
+ <option value="EST">Eastern (EST)</option>
32
+ <option value="CST">Central (CST)</option>
33
+ <option value="PST">Pacific (PST)</option>
34
+ </select>
35
+ </div>
36
+ <div class="form-group">
37
+ <div class="form-toggle">
38
+ <div>
39
+ <p class="toggle-label">Email Notifications</p>
40
+ <p class="toggle-desc">Receive email alerts for important events</p>
41
+ </div>
42
+ <input v-model="notifications" type="checkbox" />
43
+ </div>
44
+ <div class="form-toggle">
45
+ <div>
46
+ <p class="toggle-label">Dark Mode</p>
47
+ <p class="toggle-desc">Use dark theme across the dashboard</p>
48
+ </div>
49
+ <input v-model="darkMode" type="checkbox" />
50
+ </div>
51
+ <div class="form-toggle">
52
+ <div>
53
+ <p class="toggle-label">Two-Factor Auth</p>
54
+ <p class="toggle-desc">Add an extra layer of security</p>
55
+ </div>
56
+ <input v-model="twoFactor" type="checkbox" />
57
+ </div>
58
+ </div>
59
+ <div class="form-actions">
60
+ <button class="btn-primary">Save Changes</button>
61
+ <button class="btn-secondary">Cancel</button>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </template>
@@ -0,0 +1,44 @@
1
+ <script setup lang="ts">
2
+ const users = [
3
+ { name: 'Sarah Johnson', email: 'sarah@example.com', role: 'Admin', status: 'Active', badge: 'badge-success', initials: 'SJ' },
4
+ { name: 'Mike Peters', email: 'mike@example.com', role: 'Editor', status: 'Active', badge: 'badge-success', initials: 'MP' },
5
+ { name: 'Emily Chen', email: 'emily@example.com', role: 'Viewer', status: 'Inactive', badge: 'badge-danger', initials: 'EC' },
6
+ { name: 'James Wilson', email: 'james@example.com', role: 'Editor', status: 'Active', badge: 'badge-success', initials: 'JW' },
7
+ { name: 'Anna Lee', email: 'anna@example.com', role: 'Admin', status: 'Active', badge: 'badge-success', initials: 'AL' },
8
+ { name: 'Tom Davis', email: 'tom@example.com', role: 'Viewer', status: 'Pending', badge: 'badge-warning', initials: 'TD' },
9
+ { name: 'Lisa Brown', email: 'lisa@example.com', role: 'Editor', status: 'Active', badge: 'badge-success', initials: 'LB' },
10
+ ];
11
+ </script>
12
+
13
+ <template>
14
+ <div>
15
+ <div class="page-header">
16
+ <h1 class="page-title">Users</h1>
17
+ <p class="page-subtitle">Manage your team members and their permissions.</p>
18
+ </div>
19
+ <div class="data-table-wrapper">
20
+ <div class="table-header">All Users</div>
21
+ <table class="data-table">
22
+ <thead>
23
+ <tr>
24
+ <th>User</th>
25
+ <th>Email</th>
26
+ <th>Role</th>
27
+ <th>Status</th>
28
+ </tr>
29
+ </thead>
30
+ <tbody>
31
+ <tr v-for="user in users" :key="user.email">
32
+ <td style="display:flex;align-items:center;gap:0.75rem;">
33
+ <span class="user-avatar">{{ user.initials }}</span>
34
+ {{ user.name }}
35
+ </td>
36
+ <td>{{ user.email }}</td>
37
+ <td>{{ user.role }}</td>
38
+ <td><span :class="['badge', user.badge]">{{ user.status }}</span></td>
39
+ </tr>
40
+ </tbody>
41
+ </table>
42
+ </div>
43
+ </div>
44
+ </template>
@@ -0,0 +1,15 @@
1
+ import { createRouter, createWebHistory } from 'vue-router';
2
+ import Overview from './pages/Overview.vue';
3
+ import Analytics from './pages/Analytics.vue';
4
+ import Users from './pages/Users.vue';
5
+ import Settings from './pages/Settings.vue';
6
+
7
+ export const router = createRouter({
8
+ history: createWebHistory(),
9
+ routes: [
10
+ { path: '/', component: Overview },
11
+ { path: '/analytics', component: Analytics },
12
+ { path: '/users', component: Users },
13
+ { path: '/settings', component: Settings },
14
+ ],
15
+ });
@@ -0,0 +1,447 @@
1
+ *,
2
+ *::before,
3
+ *::after {
4
+ box-sizing: border-box;
5
+ margin: 0;
6
+ padding: 0;
7
+ }
8
+
9
+ body {
10
+ font-family: 'Inter', system-ui, -apple-system, sans-serif;
11
+ color: #374151;
12
+ background: #f9fafb;
13
+ line-height: 1.6;
14
+ }
15
+
16
+ #app {
17
+ min-height: 100vh;
18
+ }
19
+
20
+ a {
21
+ color: inherit;
22
+ text-decoration: none;
23
+ }
24
+
25
+ button {
26
+ font-family: inherit;
27
+ cursor: pointer;
28
+ }
29
+
30
+ input, select, textarea {
31
+ font-family: inherit;
32
+ }
33
+
34
+ /* Dashboard Layout */
35
+ .dashboard-layout {
36
+ display: flex;
37
+ min-height: 100vh;
38
+ }
39
+
40
+ .dashboard-main {
41
+ flex: 1;
42
+ padding: 2rem;
43
+ overflow-y: auto;
44
+ }
45
+
46
+ /* Sidebar */
47
+ .sidebar {
48
+ width: 260px;
49
+ background: #111827;
50
+ color: #d1d5db;
51
+ display: flex;
52
+ flex-direction: column;
53
+ min-height: 100vh;
54
+ position: sticky;
55
+ top: 0;
56
+ }
57
+
58
+ .sidebar-brand {
59
+ padding: 1.5rem;
60
+ font-size: 1.25rem;
61
+ font-weight: 700;
62
+ color: #ffffff;
63
+ border-bottom: 1px solid #1f2937;
64
+ }
65
+
66
+ .sidebar-nav {
67
+ display: flex;
68
+ flex-direction: column;
69
+ padding: 1rem 0;
70
+ gap: 0.25rem;
71
+ }
72
+
73
+ .sidebar-link {
74
+ display: flex;
75
+ align-items: center;
76
+ gap: 0.75rem;
77
+ padding: 0.75rem 1.5rem;
78
+ color: #9ca3af;
79
+ font-weight: 500;
80
+ transition: all 0.2s;
81
+ }
82
+
83
+ .sidebar-link:hover {
84
+ background: #1f2937;
85
+ color: #ffffff;
86
+ }
87
+
88
+ .sidebar-link.router-link-exact-active {
89
+ background: #4f46e5;
90
+ color: #ffffff;
91
+ }
92
+
93
+ .sidebar-icon {
94
+ font-size: 1.2rem;
95
+ width: 24px;
96
+ text-align: center;
97
+ }
98
+
99
+ /* Page Header */
100
+ .page-header {
101
+ margin-bottom: 2rem;
102
+ }
103
+
104
+ .page-title {
105
+ font-size: 1.75rem;
106
+ font-weight: 700;
107
+ color: #111827;
108
+ }
109
+
110
+ .page-subtitle {
111
+ color: #6b7280;
112
+ margin-top: 0.25rem;
113
+ }
114
+
115
+ /* KPI Cards */
116
+ .kpi-grid {
117
+ display: grid;
118
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
119
+ gap: 1.5rem;
120
+ margin-bottom: 2rem;
121
+ }
122
+
123
+ .kpi-card {
124
+ background: #ffffff;
125
+ border: 1px solid #e5e7eb;
126
+ border-radius: 12px;
127
+ padding: 1.5rem;
128
+ }
129
+
130
+ .kpi-label {
131
+ font-size: 0.85rem;
132
+ color: #6b7280;
133
+ font-weight: 500;
134
+ margin-bottom: 0.5rem;
135
+ }
136
+
137
+ .kpi-value {
138
+ font-size: 1.75rem;
139
+ font-weight: 700;
140
+ color: #111827;
141
+ }
142
+
143
+ .kpi-change {
144
+ font-size: 0.85rem;
145
+ font-weight: 600;
146
+ margin-top: 0.25rem;
147
+ }
148
+
149
+ .kpi-change.positive {
150
+ color: #059669;
151
+ }
152
+
153
+ .kpi-change.negative {
154
+ color: #dc2626;
155
+ }
156
+
157
+ /* Chart Placeholder */
158
+ .chart-container {
159
+ background: #ffffff;
160
+ border: 1px solid #e5e7eb;
161
+ border-radius: 12px;
162
+ padding: 1.5rem;
163
+ margin-bottom: 2rem;
164
+ }
165
+
166
+ .chart-title {
167
+ font-size: 1rem;
168
+ font-weight: 600;
169
+ color: #111827;
170
+ margin-bottom: 1rem;
171
+ }
172
+
173
+ .chart-bars {
174
+ display: flex;
175
+ align-items: flex-end;
176
+ gap: 0.5rem;
177
+ height: 160px;
178
+ padding-top: 1rem;
179
+ }
180
+
181
+ .chart-bar {
182
+ flex: 1;
183
+ background: #4f46e5;
184
+ border-radius: 4px 4px 0 0;
185
+ min-width: 20px;
186
+ transition: opacity 0.2s;
187
+ position: relative;
188
+ }
189
+
190
+ .chart-bar:hover {
191
+ opacity: 0.8;
192
+ }
193
+
194
+ .chart-bar-label {
195
+ position: absolute;
196
+ bottom: -1.5rem;
197
+ left: 50%;
198
+ transform: translateX(-50%);
199
+ font-size: 0.7rem;
200
+ color: #6b7280;
201
+ white-space: nowrap;
202
+ }
203
+
204
+ /* Data Table */
205
+ .data-table-wrapper {
206
+ background: #ffffff;
207
+ border: 1px solid #e5e7eb;
208
+ border-radius: 12px;
209
+ overflow: hidden;
210
+ margin-bottom: 2rem;
211
+ }
212
+
213
+ .table-header {
214
+ padding: 1rem 1.5rem;
215
+ border-bottom: 1px solid #e5e7eb;
216
+ font-weight: 600;
217
+ color: #111827;
218
+ }
219
+
220
+ .data-table {
221
+ width: 100%;
222
+ border-collapse: collapse;
223
+ }
224
+
225
+ .data-table th {
226
+ text-align: left;
227
+ padding: 0.75rem 1.5rem;
228
+ font-size: 0.8rem;
229
+ font-weight: 600;
230
+ color: #6b7280;
231
+ text-transform: uppercase;
232
+ border-bottom: 1px solid #e5e7eb;
233
+ background: #f9fafb;
234
+ }
235
+
236
+ .data-table td {
237
+ padding: 0.75rem 1.5rem;
238
+ border-bottom: 1px solid #f3f4f6;
239
+ font-size: 0.9rem;
240
+ }
241
+
242
+ .data-table tr:last-child td {
243
+ border-bottom: none;
244
+ }
245
+
246
+ .data-table tr:hover {
247
+ background: #f9fafb;
248
+ }
249
+
250
+ /* Status Badges */
251
+ .badge {
252
+ display: inline-block;
253
+ padding: 0.2rem 0.75rem;
254
+ border-radius: 9999px;
255
+ font-size: 0.8rem;
256
+ font-weight: 600;
257
+ }
258
+
259
+ .badge-success {
260
+ background: #d1fae5;
261
+ color: #065f46;
262
+ }
263
+
264
+ .badge-warning {
265
+ background: #fef3c7;
266
+ color: #92400e;
267
+ }
268
+
269
+ .badge-danger {
270
+ background: #fee2e2;
271
+ color: #991b1b;
272
+ }
273
+
274
+ .badge-info {
275
+ background: #dbeafe;
276
+ color: #1e40af;
277
+ }
278
+
279
+ /* Charts Grid */
280
+ .charts-grid {
281
+ display: grid;
282
+ grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
283
+ gap: 1.5rem;
284
+ margin-bottom: 2rem;
285
+ }
286
+
287
+ /* Metric Row */
288
+ .metrics-row {
289
+ display: grid;
290
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
291
+ gap: 1rem;
292
+ margin-bottom: 2rem;
293
+ }
294
+
295
+ .metric-card {
296
+ background: #ffffff;
297
+ border: 1px solid #e5e7eb;
298
+ border-radius: 10px;
299
+ padding: 1.25rem;
300
+ text-align: center;
301
+ }
302
+
303
+ .metric-value {
304
+ font-size: 1.5rem;
305
+ font-weight: 700;
306
+ color: #4f46e5;
307
+ }
308
+
309
+ .metric-label {
310
+ font-size: 0.85rem;
311
+ color: #6b7280;
312
+ margin-top: 0.25rem;
313
+ }
314
+
315
+ /* Settings Form */
316
+ .settings-form {
317
+ background: #ffffff;
318
+ border: 1px solid #e5e7eb;
319
+ border-radius: 12px;
320
+ padding: 2rem;
321
+ max-width: 600px;
322
+ }
323
+
324
+ .form-group {
325
+ margin-bottom: 1.5rem;
326
+ }
327
+
328
+ .form-label {
329
+ display: block;
330
+ font-size: 0.9rem;
331
+ font-weight: 600;
332
+ color: #374151;
333
+ margin-bottom: 0.5rem;
334
+ }
335
+
336
+ .form-input {
337
+ width: 100%;
338
+ padding: 0.65rem 1rem;
339
+ border: 1px solid #d1d5db;
340
+ border-radius: 8px;
341
+ font-size: 0.95rem;
342
+ color: #374151;
343
+ }
344
+
345
+ .form-input:focus {
346
+ outline: none;
347
+ border-color: #4f46e5;
348
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
349
+ }
350
+
351
+ .form-select {
352
+ width: 100%;
353
+ padding: 0.65rem 1rem;
354
+ border: 1px solid #d1d5db;
355
+ border-radius: 8px;
356
+ font-size: 0.95rem;
357
+ color: #374151;
358
+ background: #ffffff;
359
+ }
360
+
361
+ .form-toggle {
362
+ display: flex;
363
+ align-items: center;
364
+ justify-content: space-between;
365
+ padding: 0.75rem 0;
366
+ border-bottom: 1px solid #f3f4f6;
367
+ }
368
+
369
+ .toggle-label {
370
+ font-weight: 500;
371
+ color: #374151;
372
+ }
373
+
374
+ .toggle-desc {
375
+ font-size: 0.85rem;
376
+ color: #6b7280;
377
+ }
378
+
379
+ .btn-primary {
380
+ background: #4f46e5;
381
+ color: #ffffff;
382
+ border: none;
383
+ padding: 0.65rem 1.5rem;
384
+ border-radius: 8px;
385
+ font-weight: 600;
386
+ transition: background 0.2s;
387
+ }
388
+
389
+ .btn-primary:hover {
390
+ background: #4338ca;
391
+ }
392
+
393
+ .btn-secondary {
394
+ background: #ffffff;
395
+ color: #374151;
396
+ border: 1px solid #d1d5db;
397
+ padding: 0.65rem 1.5rem;
398
+ border-radius: 8px;
399
+ font-weight: 500;
400
+ transition: background 0.2s;
401
+ }
402
+
403
+ .btn-secondary:hover {
404
+ background: #f9fafb;
405
+ }
406
+
407
+ .form-actions {
408
+ display: flex;
409
+ gap: 1rem;
410
+ margin-top: 2rem;
411
+ }
412
+
413
+ /* User avatar */
414
+ .user-avatar {
415
+ width: 36px;
416
+ height: 36px;
417
+ border-radius: 50%;
418
+ background: #4f46e5;
419
+ color: #ffffff;
420
+ display: inline-flex;
421
+ align-items: center;
422
+ justify-content: center;
423
+ font-weight: 600;
424
+ font-size: 0.85rem;
425
+ }
426
+
427
+ @media (max-width: 768px) {
428
+ .dashboard-layout {
429
+ flex-direction: column;
430
+ }
431
+ .sidebar {
432
+ width: 100%;
433
+ min-height: auto;
434
+ position: relative;
435
+ }
436
+ .sidebar-nav {
437
+ flex-direction: row;
438
+ overflow-x: auto;
439
+ padding: 0.5rem;
440
+ }
441
+ .sidebar-link {
442
+ padding: 0.5rem 1rem;
443
+ }
444
+ .charts-grid {
445
+ grid-template-columns: 1fr;
446
+ }
447
+ }