@beknurakhmed/webforge-cli 0.1.1 → 0.1.3

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 (325) hide show
  1. package/README.md +226 -226
  2. package/package.json +63 -63
  3. package/templates/angular/angular.json +28 -2
  4. package/templates/extras/typescript/deps.json +6 -0
  5. package/templates/extras/typescript/react/tsconfig.json +21 -0
  6. package/templates/extras/typescript/vanilla/tsconfig.json +19 -0
  7. package/templates/extras/typescript/vue/tsconfig.json +20 -0
  8. package/templates/overlays/blog/angular/src/app/app.component.ts +100 -0
  9. package/templates/overlays/blog/angular/src/app/app.routes.ts +12 -0
  10. package/templates/overlays/blog/angular/src/app/components/blog-sidebar.component.ts +115 -0
  11. package/templates/overlays/blog/angular/src/app/components/post-card.component.ts +94 -0
  12. package/templates/overlays/blog/angular/src/app/pages/about.component.ts +114 -0
  13. package/templates/overlays/blog/angular/src/app/pages/category.component.ts +141 -0
  14. package/templates/overlays/blog/angular/src/app/pages/home.component.ts +143 -0
  15. package/templates/overlays/blog/angular/src/app/pages/post-detail.component.ts +196 -0
  16. package/templates/overlays/blog/angular/src/main.ts +10 -0
  17. package/templates/overlays/blog/nextjs/src/app/about/page.tsx +55 -0
  18. package/templates/overlays/blog/nextjs/src/app/category/[slug]/page.tsx +52 -0
  19. package/templates/overlays/blog/nextjs/src/app/components/BlogFooter.tsx +46 -0
  20. package/templates/overlays/blog/nextjs/src/app/components/BlogHeader.tsx +37 -0
  21. package/templates/overlays/blog/nextjs/src/app/components/BlogSidebar.tsx +56 -0
  22. package/templates/overlays/blog/nextjs/src/app/components/PostCard.tsx +42 -0
  23. package/templates/overlays/blog/nextjs/src/app/globals.css +158 -0
  24. package/templates/overlays/blog/nextjs/src/app/layout.tsx +20 -0
  25. package/templates/overlays/blog/nextjs/src/app/page.tsx +36 -0
  26. package/templates/overlays/blog/nextjs/src/app/post/[id]/page.tsx +78 -0
  27. package/templates/overlays/blog/nuxt/app.vue +27 -0
  28. package/templates/overlays/blog/nuxt/components/BlogFooter.vue +48 -0
  29. package/templates/overlays/blog/nuxt/components/BlogHeader.vue +55 -0
  30. package/templates/overlays/blog/nuxt/components/BlogSidebar.vue +144 -0
  31. package/templates/overlays/blog/nuxt/components/PostCard.vue +125 -0
  32. package/templates/overlays/blog/nuxt/layouts/default.vue +25 -0
  33. package/templates/overlays/blog/nuxt/pages/about.vue +161 -0
  34. package/templates/overlays/blog/nuxt/pages/category/[slug].vue +80 -0
  35. package/templates/overlays/blog/nuxt/pages/index.vue +54 -0
  36. package/templates/overlays/blog/nuxt/pages/post/[id].vue +158 -0
  37. package/templates/overlays/blog/react/src/App.css +58 -18
  38. package/templates/overlays/blog/react/src/App.tsx +16 -31
  39. package/templates/overlays/blog/react/src/components/BlogFooter.tsx +4 -2
  40. package/templates/overlays/blog/react/src/components/BlogHeader.tsx +12 -6
  41. package/templates/overlays/blog/react/src/components/BlogSidebar.tsx +9 -8
  42. package/templates/overlays/blog/react/src/components/Layout.tsx +17 -0
  43. package/templates/overlays/blog/react/src/components/PostCard.tsx +30 -0
  44. package/templates/overlays/blog/react/src/data/posts.ts +22 -0
  45. package/templates/overlays/blog/react/src/pages/About.tsx +33 -0
  46. package/templates/overlays/blog/react/src/pages/Category.tsx +29 -0
  47. package/templates/overlays/blog/react/src/pages/Home.tsx +18 -0
  48. package/templates/overlays/blog/react/src/pages/PostDetail.tsx +38 -0
  49. package/templates/overlays/blog/vanilla/src/main.ts +112 -0
  50. package/templates/overlays/blog/vanilla/src/pages/about.ts +106 -0
  51. package/templates/overlays/blog/vanilla/src/pages/category.ts +86 -0
  52. package/templates/overlays/blog/vanilla/src/pages/home.ts +103 -0
  53. package/templates/overlays/blog/vanilla/src/pages/post-detail.ts +108 -0
  54. package/templates/overlays/blog/vanilla/src/router.ts +33 -0
  55. package/templates/overlays/blog/vanilla/src/style.css +677 -0
  56. package/templates/overlays/blog/vue/src/App.vue +29 -0
  57. package/templates/overlays/blog/vue/src/components/BlogFooter.vue +8 -0
  58. package/templates/overlays/blog/vue/src/components/BlogHeader.vue +14 -0
  59. package/templates/overlays/blog/vue/src/components/BlogSidebar.vue +31 -0
  60. package/templates/overlays/blog/vue/src/components/PostCard.vue +17 -0
  61. package/templates/overlays/blog/vue/src/data.ts +82 -0
  62. package/templates/overlays/blog/vue/src/main.ts +6 -0
  63. package/templates/overlays/blog/vue/src/pages/About.vue +17 -0
  64. package/templates/overlays/blog/vue/src/pages/Category.vue +32 -0
  65. package/templates/overlays/blog/vue/src/pages/Home.vue +14 -0
  66. package/templates/overlays/blog/vue/src/pages/PostDetail.vue +22 -0
  67. package/templates/overlays/blog/vue/src/router.ts +19 -0
  68. package/templates/overlays/blog/vue/src/style.css +288 -0
  69. package/templates/overlays/crm/angular/src/app/app.component.ts +110 -0
  70. package/templates/overlays/crm/angular/src/app/app.routes.ts +12 -0
  71. package/templates/overlays/crm/angular/src/app/components/contacts-table.component.ts +98 -0
  72. package/templates/overlays/crm/angular/src/app/components/stats-cards.component.ts +63 -0
  73. package/templates/overlays/crm/angular/src/app/pages/contacts.component.ts +70 -0
  74. package/templates/overlays/crm/angular/src/app/pages/dashboard-home.component.ts +38 -0
  75. package/templates/overlays/crm/angular/src/app/pages/deals.component.ts +145 -0
  76. package/templates/overlays/crm/angular/src/app/pages/settings.component.ts +103 -0
  77. package/templates/overlays/crm/angular/src/main.ts +8 -0
  78. package/templates/overlays/crm/nextjs/src/app/components/ContactsTable.tsx +69 -0
  79. package/templates/overlays/crm/nextjs/src/app/components/Sidebar.tsx +45 -0
  80. package/templates/overlays/crm/nextjs/src/app/components/StatsCards.tsx +31 -0
  81. package/templates/overlays/crm/nextjs/src/app/contacts/page.tsx +111 -0
  82. package/templates/overlays/crm/nextjs/src/app/deals/page.tsx +111 -0
  83. package/templates/overlays/crm/nextjs/src/app/globals.css +165 -0
  84. package/templates/overlays/crm/nextjs/src/app/layout.tsx +20 -0
  85. package/templates/overlays/crm/nextjs/src/app/page.tsx +43 -0
  86. package/templates/overlays/crm/nextjs/src/app/settings/page.tsx +91 -0
  87. package/templates/overlays/crm/nuxt/app.vue +27 -0
  88. package/templates/overlays/crm/nuxt/components/ContactsTable.vue +140 -0
  89. package/templates/overlays/crm/nuxt/components/CrmSidebar.vue +97 -0
  90. package/templates/overlays/crm/nuxt/components/StatsCards.vue +63 -0
  91. package/templates/overlays/crm/nuxt/layouts/default.vue +21 -0
  92. package/templates/overlays/crm/nuxt/pages/contacts.vue +79 -0
  93. package/templates/overlays/crm/nuxt/pages/deals.vue +229 -0
  94. package/templates/overlays/crm/nuxt/pages/index.vue +186 -0
  95. package/templates/overlays/crm/nuxt/pages/settings.vue +233 -0
  96. package/templates/overlays/crm/react/src/App.css +49 -20
  97. package/templates/overlays/crm/react/src/App.tsx +16 -41
  98. package/templates/overlays/crm/react/src/components/ContactsTable.tsx +8 -8
  99. package/templates/overlays/crm/react/src/components/Layout.tsx +15 -0
  100. package/templates/overlays/crm/react/src/components/Sidebar.tsx +20 -14
  101. package/templates/overlays/crm/react/src/components/StatsCards.tsx +10 -12
  102. package/templates/overlays/crm/react/src/data/contacts.ts +19 -0
  103. package/templates/overlays/crm/react/src/pages/Contacts.tsx +32 -0
  104. package/templates/overlays/crm/react/src/pages/DashboardHome.tsx +44 -0
  105. package/templates/overlays/crm/react/src/pages/Deals.tsx +48 -0
  106. package/templates/overlays/crm/react/src/pages/Settings.tsx +35 -0
  107. package/templates/overlays/crm/vanilla/src/main.ts +95 -0
  108. package/templates/overlays/crm/vanilla/src/pages/contacts.ts +87 -0
  109. package/templates/overlays/crm/vanilla/src/pages/dashboard-home.ts +121 -0
  110. package/templates/overlays/crm/vanilla/src/pages/deals.ts +116 -0
  111. package/templates/overlays/crm/vanilla/src/pages/settings.ts +129 -0
  112. package/templates/overlays/crm/vanilla/src/router.ts +33 -0
  113. package/templates/overlays/crm/vanilla/src/style.css +766 -0
  114. package/templates/overlays/crm/vue/src/App.vue +25 -0
  115. package/templates/overlays/crm/vue/src/components/ContactsTable.vue +30 -0
  116. package/templates/overlays/crm/vue/src/components/CrmSidebar.vue +14 -0
  117. package/templates/overlays/crm/vue/src/components/StatsCards.vue +23 -0
  118. package/templates/overlays/crm/vue/src/data.ts +38 -0
  119. package/templates/overlays/crm/vue/src/main.ts +6 -0
  120. package/templates/overlays/crm/vue/src/pages/Contacts.vue +25 -0
  121. package/templates/overlays/crm/vue/src/pages/DashboardHome.vue +19 -0
  122. package/templates/overlays/crm/vue/src/pages/Deals.vue +34 -0
  123. package/templates/overlays/crm/vue/src/pages/Settings.vue +33 -0
  124. package/templates/overlays/crm/vue/src/router.ts +19 -0
  125. package/templates/overlays/crm/vue/src/style.css +272 -0
  126. package/templates/overlays/dashboard/angular/src/app/app.component.ts +135 -0
  127. package/templates/overlays/dashboard/angular/src/app/app.routes.ts +24 -0
  128. package/templates/overlays/dashboard/angular/src/app/components/chart-placeholder.component.ts +86 -0
  129. package/templates/overlays/dashboard/angular/src/app/components/data-table.component.ts +140 -0
  130. package/templates/overlays/dashboard/angular/src/app/components/kpi-cards.component.ts +120 -0
  131. package/templates/overlays/dashboard/angular/src/app/pages/analytics.component.ts +138 -0
  132. package/templates/overlays/dashboard/angular/src/app/pages/overview.component.ts +58 -0
  133. package/templates/overlays/dashboard/angular/src/app/pages/settings.component.ts +128 -0
  134. package/templates/overlays/dashboard/angular/src/app/pages/users.component.ts +153 -0
  135. package/templates/overlays/dashboard/angular/src/main.ts +10 -0
  136. package/templates/overlays/dashboard/nextjs/src/app/analytics/page.tsx +76 -0
  137. package/templates/overlays/dashboard/nextjs/src/app/components/ChartPlaceholder.tsx +58 -0
  138. package/templates/overlays/dashboard/nextjs/src/app/components/DataTable.tsx +60 -0
  139. package/templates/overlays/dashboard/nextjs/src/app/components/KPICards.tsx +31 -0
  140. package/templates/overlays/dashboard/nextjs/src/app/components/Sidebar.tsx +45 -0
  141. package/templates/overlays/dashboard/nextjs/src/app/globals.css +150 -0
  142. package/templates/overlays/dashboard/nextjs/src/app/layout.tsx +20 -0
  143. package/templates/overlays/dashboard/nextjs/src/app/page.tsx +20 -0
  144. package/templates/overlays/dashboard/nextjs/src/app/settings/page.tsx +118 -0
  145. package/templates/overlays/dashboard/nextjs/src/app/users/page.tsx +99 -0
  146. package/templates/overlays/dashboard/nuxt/app.vue +27 -0
  147. package/templates/overlays/dashboard/nuxt/components/ChartPlaceholder.vue +73 -0
  148. package/templates/overlays/dashboard/nuxt/components/DashSidebar.vue +97 -0
  149. package/templates/overlays/dashboard/nuxt/components/DataTable.vue +126 -0
  150. package/templates/overlays/dashboard/nuxt/components/KPICards.vue +76 -0
  151. package/templates/overlays/dashboard/nuxt/layouts/default.vue +21 -0
  152. package/templates/overlays/dashboard/nuxt/pages/analytics.vue +94 -0
  153. package/templates/overlays/dashboard/nuxt/pages/index.vue +49 -0
  154. package/templates/overlays/dashboard/nuxt/pages/settings.vue +239 -0
  155. package/templates/overlays/dashboard/nuxt/pages/users.vue +227 -0
  156. package/templates/overlays/dashboard/react/src/App.css +50 -24
  157. package/templates/overlays/dashboard/react/src/App.tsx +16 -22
  158. package/templates/overlays/dashboard/react/src/components/ChartPlaceholder.tsx +5 -2
  159. package/templates/overlays/dashboard/react/src/components/DataTable.tsx +9 -1
  160. package/templates/overlays/dashboard/react/src/components/KPICards.tsx +4 -4
  161. package/templates/overlays/dashboard/react/src/components/Layout.tsx +13 -0
  162. package/templates/overlays/dashboard/react/src/components/Sidebar.tsx +15 -10
  163. package/templates/overlays/dashboard/react/src/pages/Analytics.tsx +33 -0
  164. package/templates/overlays/dashboard/react/src/pages/Overview.tsx +23 -0
  165. package/templates/overlays/dashboard/react/src/pages/Settings.tsx +41 -0
  166. package/templates/overlays/dashboard/react/src/pages/Users.tsx +57 -0
  167. package/templates/overlays/dashboard/vanilla/src/main.ts +101 -0
  168. package/templates/overlays/dashboard/vanilla/src/pages/analytics.ts +99 -0
  169. package/templates/overlays/dashboard/vanilla/src/pages/overview.ts +60 -0
  170. package/templates/overlays/dashboard/vanilla/src/pages/settings.ts +118 -0
  171. package/templates/overlays/dashboard/vanilla/src/pages/users.ts +80 -0
  172. package/templates/overlays/dashboard/vanilla/src/router.ts +33 -0
  173. package/templates/overlays/dashboard/vanilla/src/style.css +654 -0
  174. package/templates/overlays/dashboard/vue/src/App.vue +12 -0
  175. package/templates/overlays/dashboard/vue/src/components/ChartPlaceholder.vue +34 -0
  176. package/templates/overlays/dashboard/vue/src/components/DashSidebar.vue +19 -0
  177. package/templates/overlays/dashboard/vue/src/components/DataTable.vue +34 -0
  178. package/templates/overlays/dashboard/vue/src/components/KPICards.vue +18 -0
  179. package/templates/overlays/dashboard/vue/src/main.ts +6 -0
  180. package/templates/overlays/dashboard/vue/src/pages/Analytics.vue +32 -0
  181. package/templates/overlays/dashboard/vue/src/pages/Overview.vue +17 -0
  182. package/templates/overlays/dashboard/vue/src/pages/Settings.vue +65 -0
  183. package/templates/overlays/dashboard/vue/src/pages/Users.vue +44 -0
  184. package/templates/overlays/dashboard/vue/src/router.ts +15 -0
  185. package/templates/overlays/dashboard/vue/src/style.css +447 -0
  186. package/templates/overlays/ecommerce/angular/src/app/app.component.ts +147 -0
  187. package/templates/overlays/ecommerce/angular/src/app/app.routes.ts +10 -0
  188. package/templates/overlays/ecommerce/angular/src/app/components/product-card.component.ts +94 -0
  189. package/templates/overlays/ecommerce/angular/src/app/data/products.ts +75 -0
  190. package/templates/overlays/ecommerce/angular/src/app/pages/cart.component.ts +169 -0
  191. package/templates/overlays/ecommerce/angular/src/app/pages/home.component.ts +96 -0
  192. package/templates/overlays/ecommerce/angular/src/app/pages/product-detail.component.ts +124 -0
  193. package/templates/overlays/ecommerce/angular/src/main.ts +10 -0
  194. package/templates/overlays/ecommerce/nextjs/src/app/cart/page.tsx +74 -0
  195. package/templates/overlays/ecommerce/nextjs/src/app/components/CartProvider.tsx +80 -0
  196. package/templates/overlays/ecommerce/nextjs/src/app/components/Footer.tsx +44 -0
  197. package/templates/overlays/ecommerce/nextjs/src/app/components/Header.tsx +27 -0
  198. package/templates/overlays/ecommerce/nextjs/src/app/components/ProductCard.tsx +23 -0
  199. package/templates/overlays/ecommerce/nextjs/src/app/globals.css +144 -0
  200. package/templates/overlays/ecommerce/nextjs/src/app/layout.tsx +23 -0
  201. package/templates/overlays/ecommerce/nextjs/src/app/page.tsx +73 -0
  202. package/templates/overlays/ecommerce/nextjs/src/app/product/[id]/page.tsx +63 -0
  203. package/templates/overlays/ecommerce/nuxt/app.vue +27 -0
  204. package/templates/overlays/ecommerce/nuxt/components/ProductCard.vue +77 -0
  205. package/templates/overlays/ecommerce/nuxt/components/StoreFooter.vue +47 -0
  206. package/templates/overlays/ecommerce/nuxt/components/StoreHeader.vue +91 -0
  207. package/templates/overlays/ecommerce/nuxt/layouts/default.vue +43 -0
  208. package/templates/overlays/ecommerce/nuxt/pages/cart.vue +268 -0
  209. package/templates/overlays/ecommerce/nuxt/pages/index.vue +154 -0
  210. package/templates/overlays/ecommerce/nuxt/pages/product/[id].vue +211 -0
  211. package/templates/overlays/ecommerce/react/src/App.css +71 -59
  212. package/templates/overlays/ecommerce/react/src/App.tsx +18 -44
  213. package/templates/overlays/ecommerce/react/src/components/Footer.tsx +2 -2
  214. package/templates/overlays/ecommerce/react/src/components/Header.tsx +15 -14
  215. package/templates/overlays/ecommerce/react/src/components/Layout.tsx +20 -0
  216. package/templates/overlays/ecommerce/react/src/components/ProductCard.tsx +28 -0
  217. package/templates/overlays/ecommerce/react/src/data/products.ts +23 -0
  218. package/templates/overlays/ecommerce/react/src/pages/Cart.tsx +51 -0
  219. package/templates/overlays/ecommerce/react/src/pages/Home.tsx +37 -0
  220. package/templates/overlays/ecommerce/react/src/pages/ProductDetail.tsx +38 -0
  221. package/templates/overlays/ecommerce/vanilla/src/main.ts +73 -0
  222. package/templates/overlays/ecommerce/vanilla/src/pages/cart.ts +73 -0
  223. package/templates/overlays/ecommerce/vanilla/src/pages/home.ts +71 -0
  224. package/templates/overlays/ecommerce/vanilla/src/pages/product-detail.ts +81 -0
  225. package/templates/overlays/ecommerce/vanilla/src/router.ts +33 -0
  226. package/templates/overlays/ecommerce/vanilla/src/style.css +522 -0
  227. package/templates/overlays/ecommerce/vue/src/App.vue +17 -32
  228. package/templates/overlays/ecommerce/vue/src/components/ProductCard.vue +25 -0
  229. package/templates/overlays/ecommerce/vue/src/components/StoreFooter.vue +6 -12
  230. package/templates/overlays/ecommerce/vue/src/components/StoreHeader.vue +5 -23
  231. package/templates/overlays/ecommerce/vue/src/data.ts +23 -0
  232. package/templates/overlays/ecommerce/vue/src/main.ts +6 -0
  233. package/templates/overlays/ecommerce/vue/src/pages/Cart.vue +34 -0
  234. package/templates/overlays/ecommerce/vue/src/pages/Home.vue +27 -0
  235. package/templates/overlays/ecommerce/vue/src/pages/ProductDetail.vue +27 -0
  236. package/templates/overlays/ecommerce/vue/src/router.ts +13 -0
  237. package/templates/overlays/ecommerce/vue/src/style.css +359 -0
  238. package/templates/overlays/portfolio/angular/src/app/app.component.ts +102 -0
  239. package/templates/overlays/portfolio/angular/src/app/app.routes.ts +12 -0
  240. package/templates/overlays/portfolio/angular/src/app/components/project-card.component.ts +86 -0
  241. package/templates/overlays/portfolio/angular/src/app/components/skills-grid.component.ts +88 -0
  242. package/templates/overlays/portfolio/angular/src/app/pages/about.component.ts +122 -0
  243. package/templates/overlays/portfolio/angular/src/app/pages/contact.component.ts +131 -0
  244. package/templates/overlays/portfolio/angular/src/app/pages/home.component.ts +207 -0
  245. package/templates/overlays/portfolio/angular/src/app/pages/projects.component.ts +150 -0
  246. package/templates/overlays/portfolio/angular/src/main.ts +10 -0
  247. package/templates/overlays/portfolio/nextjs/src/app/about/page.tsx +70 -0
  248. package/templates/overlays/portfolio/nextjs/src/app/components/Footer.tsx +37 -0
  249. package/templates/overlays/portfolio/nextjs/src/app/components/Navbar.tsx +37 -0
  250. package/templates/overlays/portfolio/nextjs/src/app/components/ProjectCard.tsx +35 -0
  251. package/templates/overlays/portfolio/nextjs/src/app/components/SkillsGrid.tsx +45 -0
  252. package/templates/overlays/portfolio/nextjs/src/app/contact/page.tsx +138 -0
  253. package/templates/overlays/portfolio/nextjs/src/app/globals.css +197 -0
  254. package/templates/overlays/portfolio/nextjs/src/app/layout.tsx +20 -0
  255. package/templates/overlays/portfolio/nextjs/src/app/page.tsx +60 -0
  256. package/templates/overlays/portfolio/nextjs/src/app/projects/page.tsx +56 -0
  257. package/templates/overlays/portfolio/nuxt/app.vue +27 -0
  258. package/templates/overlays/portfolio/nuxt/components/PortfolioFooter.vue +49 -0
  259. package/templates/overlays/portfolio/nuxt/components/PortfolioNav.vue +77 -0
  260. package/templates/overlays/portfolio/nuxt/components/ProjectCard.vue +102 -0
  261. package/templates/overlays/portfolio/nuxt/components/SkillsGrid.vue +89 -0
  262. package/templates/overlays/portfolio/nuxt/layouts/default.vue +21 -0
  263. package/templates/overlays/portfolio/nuxt/pages/about.vue +179 -0
  264. package/templates/overlays/portfolio/nuxt/pages/contact.vue +278 -0
  265. package/templates/overlays/portfolio/nuxt/pages/index.vue +160 -0
  266. package/templates/overlays/portfolio/nuxt/pages/projects.vue +116 -0
  267. package/templates/overlays/portfolio/react/src/App.css +54 -27
  268. package/templates/overlays/portfolio/react/src/App.tsx +16 -12
  269. package/templates/overlays/portfolio/react/src/components/Layout.tsx +17 -0
  270. package/templates/overlays/portfolio/react/src/components/Navbar.tsx +30 -0
  271. package/templates/overlays/portfolio/react/src/components/PortfolioFooter.tsx +5 -3
  272. package/templates/overlays/portfolio/react/src/components/ProjectCard.tsx +24 -0
  273. package/templates/overlays/portfolio/react/src/components/SkillsGrid.tsx +20 -0
  274. package/templates/overlays/portfolio/react/src/data/projects.ts +25 -0
  275. package/templates/overlays/portfolio/react/src/pages/About.tsx +43 -0
  276. package/templates/overlays/portfolio/react/src/pages/Contact.tsx +48 -0
  277. package/templates/overlays/portfolio/react/src/pages/Home.tsx +44 -0
  278. package/templates/overlays/portfolio/react/src/pages/Projects.tsx +36 -0
  279. package/templates/overlays/portfolio/vanilla/src/main.ts +58 -0
  280. package/templates/overlays/portfolio/vanilla/src/pages/about.ts +146 -0
  281. package/templates/overlays/portfolio/vanilla/src/pages/contact.ts +159 -0
  282. package/templates/overlays/portfolio/vanilla/src/pages/home.ts +123 -0
  283. package/templates/overlays/portfolio/vanilla/src/pages/projects.ts +89 -0
  284. package/templates/overlays/portfolio/vanilla/src/router.ts +33 -0
  285. package/templates/overlays/portfolio/vanilla/src/style.css +909 -0
  286. package/templates/overlays/portfolio/vue/src/App.vue +25 -0
  287. package/templates/overlays/portfolio/vue/src/components/PortfolioFooter.vue +14 -0
  288. package/templates/overlays/portfolio/vue/src/components/PortfolioNav.vue +16 -0
  289. package/templates/overlays/portfolio/vue/src/components/ProjectCard.vue +18 -0
  290. package/templates/overlays/portfolio/vue/src/components/SkillsGrid.vue +14 -0
  291. package/templates/overlays/portfolio/vue/src/data.ts +78 -0
  292. package/templates/overlays/portfolio/vue/src/main.ts +6 -0
  293. package/templates/overlays/portfolio/vue/src/pages/About.vue +30 -0
  294. package/templates/overlays/portfolio/vue/src/pages/Contact.vue +47 -0
  295. package/templates/overlays/portfolio/vue/src/pages/Home.vue +27 -0
  296. package/templates/overlays/portfolio/vue/src/pages/Projects.vue +33 -0
  297. package/templates/overlays/portfolio/vue/src/router.ts +19 -0
  298. package/templates/overlays/portfolio/vue/src/style.css +404 -0
  299. package/templates/react/package.json +23 -19
  300. package/templates/react/tsconfig.json +20 -0
  301. package/templates/styling/tailwind/deps.json +7 -6
  302. package/templates/styling/tailwind/nextjs/postcss.config.mjs +7 -0
  303. package/templates/styling/tailwind/nextjs/src/app/globals.css +1 -0
  304. package/templates/styling/tailwind/react/src/index.css +1 -0
  305. package/templates/styling/tailwind/react/vite.config.ts +7 -0
  306. package/templates/styling/tailwind/vanilla/src/style.css +1 -0
  307. package/templates/styling/tailwind/vanilla/vite.config.ts +6 -0
  308. package/templates/styling/tailwind/vue/src/style.css +1 -0
  309. package/templates/styling/tailwind/vue/vite.config.ts +7 -0
  310. package/templates/vanilla/package.json +15 -14
  311. package/templates/vanilla/tsconfig.json +19 -0
  312. package/templates/vue/package.json +21 -18
  313. package/templates/vue/tsconfig.json +20 -0
  314. package/templates/overlays/blog/react/src/components/PostList.tsx +0 -27
  315. package/templates/overlays/crm/react/src/components/Filters.tsx +0 -22
  316. package/templates/overlays/ecommerce/react/src/components/Cart.tsx +0 -47
  317. package/templates/overlays/ecommerce/react/src/components/ProductGrid.tsx +0 -32
  318. package/templates/overlays/ecommerce/vue/src/components/CartPanel.vue +0 -46
  319. package/templates/overlays/ecommerce/vue/src/components/ProductGrid.vue +0 -40
  320. package/templates/overlays/portfolio/react/src/components/ContactForm.tsx +0 -29
  321. package/templates/overlays/portfolio/react/src/components/HeroSection.tsx +0 -24
  322. package/templates/overlays/portfolio/react/src/components/Projects.tsx +0 -33
  323. package/templates/overlays/portfolio/react/src/components/Skills.tsx +0 -27
  324. package/templates/styling/tailwind/config/postcss.config.js +0 -5
  325. package/templates/styling/tailwind/config/tailwind.config.js +0 -11
@@ -0,0 +1,909 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ :root {
8
+ --primary: #4f46e5;
9
+ --primary-hover: #4338ca;
10
+ --dark: #111827;
11
+ --text: #374151;
12
+ --text-light: #6b7280;
13
+ --bg: #f9fafb;
14
+ --white: #ffffff;
15
+ --border: #e5e7eb;
16
+ --radius: 8px;
17
+ }
18
+
19
+ body {
20
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
21
+ color: var(--text);
22
+ background: var(--bg);
23
+ line-height: 1.6;
24
+ }
25
+
26
+ a {
27
+ text-decoration: none;
28
+ color: inherit;
29
+ }
30
+
31
+ /* Navbar */
32
+ .navbar {
33
+ background: var(--white);
34
+ border-bottom: 1px solid var(--border);
35
+ position: sticky;
36
+ top: 0;
37
+ z-index: 100;
38
+ }
39
+
40
+ .nav-container {
41
+ max-width: 1200px;
42
+ margin: 0 auto;
43
+ padding: 1rem 2rem;
44
+ display: flex;
45
+ justify-content: space-between;
46
+ align-items: center;
47
+ }
48
+
49
+ .nav-logo {
50
+ font-size: 1.5rem;
51
+ font-weight: 700;
52
+ color: var(--primary);
53
+ }
54
+
55
+ .nav-links {
56
+ display: flex;
57
+ gap: 1.5rem;
58
+ }
59
+
60
+ .nav-links a {
61
+ color: var(--text);
62
+ font-weight: 500;
63
+ transition: color 0.2s;
64
+ }
65
+
66
+ .nav-links a:hover,
67
+ .nav-links a.active {
68
+ color: var(--primary);
69
+ }
70
+
71
+ /* Buttons */
72
+ .btn {
73
+ display: inline-block;
74
+ padding: 0.6rem 1.5rem;
75
+ border-radius: var(--radius);
76
+ font-weight: 600;
77
+ font-size: 0.9rem;
78
+ cursor: pointer;
79
+ border: none;
80
+ transition: all 0.2s;
81
+ text-align: center;
82
+ }
83
+
84
+ .btn-primary {
85
+ background: var(--primary);
86
+ color: var(--white);
87
+ }
88
+
89
+ .btn-primary:hover {
90
+ background: var(--primary-hover);
91
+ }
92
+
93
+ .btn-secondary {
94
+ background: var(--white);
95
+ color: var(--primary);
96
+ border: 1px solid var(--primary);
97
+ }
98
+
99
+ .btn-secondary:hover {
100
+ background: #eef2ff;
101
+ }
102
+
103
+ .btn-small {
104
+ padding: 0.4rem 1rem;
105
+ font-size: 0.8rem;
106
+ }
107
+
108
+ .btn-full {
109
+ width: 100%;
110
+ }
111
+
112
+ /* Hero */
113
+ .hero {
114
+ max-width: 1200px;
115
+ margin: 0 auto;
116
+ padding: 4rem 2rem;
117
+ display: grid;
118
+ grid-template-columns: 1.2fr 0.8fr;
119
+ gap: 3rem;
120
+ align-items: center;
121
+ }
122
+
123
+ .hero-greeting {
124
+ color: var(--primary);
125
+ font-weight: 600;
126
+ font-size: 1.125rem;
127
+ margin-bottom: 0.5rem;
128
+ }
129
+
130
+ .hero-name {
131
+ font-size: 3rem;
132
+ color: var(--dark);
133
+ line-height: 1.2;
134
+ margin-bottom: 0.5rem;
135
+ }
136
+
137
+ .hero-title {
138
+ font-size: 1.5rem;
139
+ color: var(--primary);
140
+ font-weight: 600;
141
+ margin-bottom: 1rem;
142
+ }
143
+
144
+ .hero-description {
145
+ font-size: 1.0625rem;
146
+ color: var(--text-light);
147
+ margin-bottom: 2rem;
148
+ line-height: 1.7;
149
+ max-width: 550px;
150
+ }
151
+
152
+ .hero-actions {
153
+ display: flex;
154
+ gap: 1rem;
155
+ margin-bottom: 3rem;
156
+ }
157
+
158
+ .hero-stats {
159
+ display: flex;
160
+ gap: 2.5rem;
161
+ }
162
+
163
+ .hero-stat h3 {
164
+ font-size: 1.75rem;
165
+ color: var(--dark);
166
+ }
167
+
168
+ .hero-stat p {
169
+ font-size: 0.8rem;
170
+ color: var(--text-light);
171
+ }
172
+
173
+ .hero-visual {
174
+ display: flex;
175
+ justify-content: center;
176
+ align-items: center;
177
+ }
178
+
179
+ .hero-avatar {
180
+ font-size: 10rem;
181
+ width: 280px;
182
+ height: 280px;
183
+ display: flex;
184
+ align-items: center;
185
+ justify-content: center;
186
+ background: linear-gradient(135deg, #eef2ff, #e0e7ff);
187
+ border-radius: 50%;
188
+ }
189
+
190
+ /* Section */
191
+ .section {
192
+ max-width: 1200px;
193
+ margin: 0 auto;
194
+ padding: 3rem 2rem;
195
+ }
196
+
197
+ .section h2 {
198
+ font-size: 1.75rem;
199
+ color: var(--dark);
200
+ margin-bottom: 1.5rem;
201
+ }
202
+
203
+ .section-header {
204
+ display: flex;
205
+ justify-content: space-between;
206
+ align-items: center;
207
+ margin-bottom: 1.5rem;
208
+ }
209
+
210
+ .section-header h2 {
211
+ margin-bottom: 0;
212
+ }
213
+
214
+ .section-link {
215
+ color: var(--primary);
216
+ font-weight: 600;
217
+ }
218
+
219
+ .section-link:hover {
220
+ text-decoration: underline;
221
+ }
222
+
223
+ /* Page Header */
224
+ .page-header {
225
+ max-width: 1200px;
226
+ margin: 0 auto;
227
+ padding: 3rem 2rem 1rem;
228
+ text-align: center;
229
+ }
230
+
231
+ .page-header h1 {
232
+ font-size: 2.5rem;
233
+ color: var(--dark);
234
+ margin-bottom: 0.5rem;
235
+ }
236
+
237
+ .page-header p {
238
+ color: var(--text-light);
239
+ font-size: 1.0625rem;
240
+ }
241
+
242
+ /* Projects */
243
+ .projects-grid {
244
+ display: grid;
245
+ grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
246
+ gap: 1.5rem;
247
+ }
248
+
249
+ .project-card {
250
+ background: var(--white);
251
+ border: 1px solid var(--border);
252
+ border-radius: var(--radius);
253
+ overflow: hidden;
254
+ transition: all 0.2s;
255
+ }
256
+
257
+ .project-card:hover {
258
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
259
+ transform: translateY(-2px);
260
+ }
261
+
262
+ .project-image {
263
+ font-size: 3.5rem;
264
+ padding: 2rem;
265
+ text-align: center;
266
+ background: linear-gradient(135deg, #eef2ff, #e0e7ff);
267
+ }
268
+
269
+ .project-content {
270
+ padding: 1.5rem;
271
+ }
272
+
273
+ .project-meta {
274
+ display: flex;
275
+ justify-content: space-between;
276
+ align-items: center;
277
+ margin-bottom: 0.5rem;
278
+ }
279
+
280
+ .project-category {
281
+ display: inline-block;
282
+ font-size: 0.75rem;
283
+ color: var(--primary);
284
+ background: #eef2ff;
285
+ padding: 0.2rem 0.6rem;
286
+ border-radius: 100px;
287
+ font-weight: 600;
288
+ }
289
+
290
+ .project-year {
291
+ font-size: 0.75rem;
292
+ color: var(--text-light);
293
+ }
294
+
295
+ .project-content h3 {
296
+ font-size: 1.125rem;
297
+ color: var(--dark);
298
+ margin-bottom: 0.5rem;
299
+ }
300
+
301
+ .project-content p {
302
+ font-size: 0.875rem;
303
+ color: var(--text-light);
304
+ margin-bottom: 1rem;
305
+ line-height: 1.6;
306
+ }
307
+
308
+ .project-tags {
309
+ display: flex;
310
+ flex-wrap: wrap;
311
+ gap: 0.4rem;
312
+ margin-bottom: 1rem;
313
+ }
314
+
315
+ .tag {
316
+ padding: 0.2rem 0.6rem;
317
+ background: var(--bg);
318
+ border: 1px solid var(--border);
319
+ border-radius: 100px;
320
+ font-size: 0.7rem;
321
+ font-weight: 600;
322
+ color: var(--text-light);
323
+ }
324
+
325
+ .project-actions {
326
+ display: flex;
327
+ gap: 0.5rem;
328
+ }
329
+
330
+ /* Filter Bar */
331
+ .filter-bar {
332
+ display: flex;
333
+ gap: 0.5rem;
334
+ margin-bottom: 2rem;
335
+ justify-content: center;
336
+ }
337
+
338
+ .filter-btn {
339
+ padding: 0.4rem 1.25rem;
340
+ border-radius: 100px;
341
+ font-size: 0.85rem;
342
+ font-weight: 600;
343
+ color: var(--text-light);
344
+ background: var(--white);
345
+ border: 1px solid var(--border);
346
+ cursor: pointer;
347
+ transition: all 0.2s;
348
+ }
349
+
350
+ .filter-btn:hover,
351
+ .filter-btn.active {
352
+ background: var(--primary);
353
+ color: var(--white);
354
+ border-color: var(--primary);
355
+ }
356
+
357
+ /* Skills */
358
+ .skills-grid {
359
+ display: grid;
360
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
361
+ gap: 1rem;
362
+ }
363
+
364
+ .skill-card {
365
+ background: var(--white);
366
+ border: 1px solid var(--border);
367
+ border-radius: var(--radius);
368
+ padding: 1rem 1.25rem;
369
+ }
370
+
371
+ .skill-header {
372
+ display: flex;
373
+ align-items: center;
374
+ gap: 0.5rem;
375
+ margin-bottom: 0.5rem;
376
+ }
377
+
378
+ .skill-icon {
379
+ font-size: 1.25rem;
380
+ }
381
+
382
+ .skill-name {
383
+ flex: 1;
384
+ font-weight: 600;
385
+ font-size: 0.9rem;
386
+ color: var(--dark);
387
+ }
388
+
389
+ .skill-level {
390
+ font-size: 0.8rem;
391
+ color: var(--text-light);
392
+ font-weight: 600;
393
+ }
394
+
395
+ .skill-bar {
396
+ height: 6px;
397
+ background: var(--border);
398
+ border-radius: 100px;
399
+ overflow: hidden;
400
+ }
401
+
402
+ .skill-fill {
403
+ height: 100%;
404
+ background: linear-gradient(90deg, var(--primary), #818cf8);
405
+ border-radius: 100px;
406
+ transition: width 0.5s ease;
407
+ }
408
+
409
+ /* CTA Section */
410
+ .cta-section {
411
+ max-width: 1200px;
412
+ margin: 0 auto;
413
+ padding: 3rem 2rem;
414
+ text-align: center;
415
+ }
416
+
417
+ .cta-section > * {
418
+ max-width: 600px;
419
+ margin-left: auto;
420
+ margin-right: auto;
421
+ }
422
+
423
+ .cta-section h2 {
424
+ font-size: 1.75rem;
425
+ color: var(--dark);
426
+ margin-bottom: 0.5rem;
427
+ }
428
+
429
+ .cta-section p {
430
+ color: var(--text-light);
431
+ margin-bottom: 1.5rem;
432
+ }
433
+
434
+ /* About */
435
+ .about-grid {
436
+ display: grid;
437
+ grid-template-columns: 300px 1fr;
438
+ gap: 3rem;
439
+ }
440
+
441
+ .about-avatar-section {
442
+ text-align: center;
443
+ }
444
+
445
+ .about-avatar {
446
+ font-size: 6rem;
447
+ width: 180px;
448
+ height: 180px;
449
+ display: flex;
450
+ align-items: center;
451
+ justify-content: center;
452
+ background: linear-gradient(135deg, #eef2ff, #e0e7ff);
453
+ border-radius: 50%;
454
+ margin: 0 auto 1rem;
455
+ }
456
+
457
+ .about-avatar-section h2 {
458
+ font-size: 1.25rem;
459
+ color: var(--dark);
460
+ margin-bottom: 0.25rem;
461
+ }
462
+
463
+ .about-subtitle {
464
+ color: var(--primary);
465
+ font-weight: 600;
466
+ font-size: 0.9rem;
467
+ margin-bottom: 1rem;
468
+ }
469
+
470
+ .about-social {
471
+ display: flex;
472
+ justify-content: center;
473
+ gap: 0.75rem;
474
+ }
475
+
476
+ .social-link {
477
+ width: 40px;
478
+ height: 40px;
479
+ display: flex;
480
+ align-items: center;
481
+ justify-content: center;
482
+ background: var(--white);
483
+ border: 1px solid var(--border);
484
+ border-radius: 50%;
485
+ font-size: 1.25rem;
486
+ transition: all 0.2s;
487
+ }
488
+
489
+ .social-link:hover {
490
+ border-color: var(--primary);
491
+ background: #eef2ff;
492
+ }
493
+
494
+ .about-bio h3 {
495
+ font-size: 1.25rem;
496
+ color: var(--dark);
497
+ margin-bottom: 1rem;
498
+ }
499
+
500
+ .about-bio p {
501
+ margin-bottom: 1rem;
502
+ line-height: 1.8;
503
+ }
504
+
505
+ .about-details {
506
+ margin-top: 1.5rem;
507
+ display: flex;
508
+ flex-direction: column;
509
+ gap: 0.75rem;
510
+ }
511
+
512
+ .detail-item {
513
+ display: flex;
514
+ gap: 1rem;
515
+ padding: 0.5rem 0;
516
+ }
517
+
518
+ .detail-label {
519
+ font-weight: 600;
520
+ color: var(--dark);
521
+ min-width: 100px;
522
+ font-size: 0.875rem;
523
+ }
524
+
525
+ .detail-value {
526
+ color: var(--text-light);
527
+ font-size: 0.875rem;
528
+ }
529
+
530
+ /* Timeline */
531
+ .timeline {
532
+ position: relative;
533
+ padding-left: 2rem;
534
+ }
535
+
536
+ .timeline::before {
537
+ content: '';
538
+ position: absolute;
539
+ left: 7px;
540
+ top: 0;
541
+ bottom: 0;
542
+ width: 2px;
543
+ background: var(--border);
544
+ }
545
+
546
+ .timeline-item {
547
+ position: relative;
548
+ margin-bottom: 2rem;
549
+ }
550
+
551
+ .timeline-dot {
552
+ position: absolute;
553
+ left: -2rem;
554
+ top: 4px;
555
+ width: 16px;
556
+ height: 16px;
557
+ background: var(--primary);
558
+ border-radius: 50%;
559
+ border: 3px solid var(--white);
560
+ box-shadow: 0 0 0 2px var(--primary);
561
+ }
562
+
563
+ .timeline-content {
564
+ background: var(--white);
565
+ border: 1px solid var(--border);
566
+ border-radius: var(--radius);
567
+ padding: 1.25rem;
568
+ }
569
+
570
+ .timeline-header {
571
+ display: flex;
572
+ justify-content: space-between;
573
+ align-items: center;
574
+ margin-bottom: 0.25rem;
575
+ }
576
+
577
+ .timeline-header h3 {
578
+ font-size: 1rem;
579
+ color: var(--dark);
580
+ }
581
+
582
+ .timeline-period {
583
+ font-size: 0.8rem;
584
+ color: var(--primary);
585
+ font-weight: 600;
586
+ }
587
+
588
+ .timeline-company {
589
+ font-size: 0.875rem;
590
+ color: var(--primary);
591
+ font-weight: 600;
592
+ margin-bottom: 0.5rem;
593
+ }
594
+
595
+ .timeline-description {
596
+ font-size: 0.875rem;
597
+ color: var(--text-light);
598
+ line-height: 1.6;
599
+ }
600
+
601
+ /* Education */
602
+ .education-grid {
603
+ display: grid;
604
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
605
+ gap: 1.5rem;
606
+ }
607
+
608
+ .edu-card {
609
+ background: var(--white);
610
+ border: 1px solid var(--border);
611
+ border-radius: var(--radius);
612
+ padding: 1.5rem;
613
+ text-align: center;
614
+ }
615
+
616
+ .edu-icon {
617
+ font-size: 2.5rem;
618
+ margin-bottom: 0.75rem;
619
+ }
620
+
621
+ .edu-card h3 {
622
+ font-size: 1rem;
623
+ color: var(--dark);
624
+ margin-bottom: 0.25rem;
625
+ }
626
+
627
+ .edu-school {
628
+ color: var(--primary);
629
+ font-weight: 600;
630
+ font-size: 0.85rem;
631
+ }
632
+
633
+ .edu-year {
634
+ color: var(--text-light);
635
+ font-size: 0.8rem;
636
+ }
637
+
638
+ /* Contact */
639
+ .contact-grid {
640
+ display: grid;
641
+ grid-template-columns: 1.2fr 0.8fr;
642
+ gap: 2rem;
643
+ }
644
+
645
+ .contact-form-card,
646
+ .contact-info-card {
647
+ background: var(--white);
648
+ border: 1px solid var(--border);
649
+ border-radius: var(--radius);
650
+ padding: 2rem;
651
+ }
652
+
653
+ .contact-form-card h2,
654
+ .contact-info-card h2 {
655
+ font-size: 1.25rem;
656
+ color: var(--dark);
657
+ margin-bottom: 1.5rem;
658
+ }
659
+
660
+ .form-row {
661
+ display: grid;
662
+ grid-template-columns: 1fr 1fr;
663
+ gap: 1rem;
664
+ }
665
+
666
+ .form-group {
667
+ margin-bottom: 1.25rem;
668
+ }
669
+
670
+ .form-group label {
671
+ display: block;
672
+ font-size: 0.875rem;
673
+ font-weight: 600;
674
+ color: var(--dark);
675
+ margin-bottom: 0.35rem;
676
+ }
677
+
678
+ .form-input {
679
+ width: 100%;
680
+ padding: 0.6rem 0.75rem;
681
+ border: 1px solid var(--border);
682
+ border-radius: var(--radius);
683
+ font-size: 0.875rem;
684
+ color: var(--text);
685
+ background: var(--white);
686
+ font-family: inherit;
687
+ transition: border-color 0.2s;
688
+ }
689
+
690
+ .form-input:focus {
691
+ outline: none;
692
+ border-color: var(--primary);
693
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
694
+ }
695
+
696
+ .form-textarea {
697
+ resize: vertical;
698
+ min-height: 120px;
699
+ }
700
+
701
+ .contact-info-list {
702
+ display: flex;
703
+ flex-direction: column;
704
+ gap: 1.25rem;
705
+ margin-bottom: 2rem;
706
+ }
707
+
708
+ .contact-info-item {
709
+ display: flex;
710
+ gap: 1rem;
711
+ align-items: flex-start;
712
+ }
713
+
714
+ .contact-info-icon {
715
+ font-size: 1.5rem;
716
+ width: 40px;
717
+ height: 40px;
718
+ display: flex;
719
+ align-items: center;
720
+ justify-content: center;
721
+ background: #eef2ff;
722
+ border-radius: var(--radius);
723
+ flex-shrink: 0;
724
+ }
725
+
726
+ .contact-info-item h4 {
727
+ font-size: 0.875rem;
728
+ color: var(--dark);
729
+ }
730
+
731
+ .contact-info-item p {
732
+ font-size: 0.8rem;
733
+ color: var(--text-light);
734
+ }
735
+
736
+ .social-section {
737
+ margin-bottom: 2rem;
738
+ }
739
+
740
+ .social-section h3 {
741
+ font-size: 1rem;
742
+ color: var(--dark);
743
+ margin-bottom: 0.75rem;
744
+ }
745
+
746
+ .social-links {
747
+ display: grid;
748
+ grid-template-columns: 1fr 1fr;
749
+ gap: 0.5rem;
750
+ }
751
+
752
+ .social-card {
753
+ display: flex;
754
+ align-items: center;
755
+ gap: 0.5rem;
756
+ padding: 0.5rem 0.75rem;
757
+ background: var(--bg);
758
+ border-radius: var(--radius);
759
+ font-size: 0.85rem;
760
+ font-weight: 500;
761
+ transition: all 0.2s;
762
+ }
763
+
764
+ .social-card:hover {
765
+ background: #eef2ff;
766
+ color: var(--primary);
767
+ }
768
+
769
+ .faq-section h3 {
770
+ font-size: 1rem;
771
+ color: var(--dark);
772
+ margin-bottom: 0.75rem;
773
+ }
774
+
775
+ .faq-item {
776
+ padding: 0.75rem 0;
777
+ border-bottom: 1px solid var(--border);
778
+ }
779
+
780
+ .faq-item:last-child {
781
+ border-bottom: none;
782
+ }
783
+
784
+ .faq-item h4 {
785
+ font-size: 0.875rem;
786
+ color: var(--dark);
787
+ margin-bottom: 0.25rem;
788
+ }
789
+
790
+ .faq-item p {
791
+ font-size: 0.8rem;
792
+ color: var(--text-light);
793
+ }
794
+
795
+ /* Footer */
796
+ .footer {
797
+ background: var(--dark);
798
+ color: #9ca3af;
799
+ margin-top: 3rem;
800
+ }
801
+
802
+ .footer-content {
803
+ max-width: 1200px;
804
+ margin: 0 auto;
805
+ display: grid;
806
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
807
+ gap: 2rem;
808
+ padding: 3rem 2rem;
809
+ }
810
+
811
+ .footer-section h4 {
812
+ color: var(--white);
813
+ margin-bottom: 1rem;
814
+ }
815
+
816
+ .footer-section a {
817
+ display: block;
818
+ color: #9ca3af;
819
+ padding: 0.25rem 0;
820
+ transition: color 0.2s;
821
+ }
822
+
823
+ .footer-section a:hover {
824
+ color: var(--white);
825
+ }
826
+
827
+ .footer-bottom {
828
+ text-align: center;
829
+ padding: 1.5rem 2rem;
830
+ border-top: 1px solid #1f2937;
831
+ font-size: 0.875rem;
832
+ }
833
+
834
+ /* Responsive */
835
+ @media (max-width: 768px) {
836
+ .nav-container {
837
+ flex-direction: column;
838
+ gap: 1rem;
839
+ }
840
+
841
+ .nav-links {
842
+ flex-wrap: wrap;
843
+ justify-content: center;
844
+ }
845
+
846
+ .hero {
847
+ grid-template-columns: 1fr;
848
+ padding: 2rem;
849
+ text-align: center;
850
+ }
851
+
852
+ .hero-name {
853
+ font-size: 2rem;
854
+ }
855
+
856
+ .hero-description {
857
+ max-width: 100%;
858
+ }
859
+
860
+ .hero-actions {
861
+ justify-content: center;
862
+ }
863
+
864
+ .hero-stats {
865
+ justify-content: center;
866
+ }
867
+
868
+ .hero-avatar {
869
+ width: 200px;
870
+ height: 200px;
871
+ font-size: 7rem;
872
+ }
873
+
874
+ .projects-grid {
875
+ grid-template-columns: 1fr;
876
+ }
877
+
878
+ .about-grid {
879
+ grid-template-columns: 1fr;
880
+ }
881
+
882
+ .contact-grid {
883
+ grid-template-columns: 1fr;
884
+ }
885
+
886
+ .form-row {
887
+ grid-template-columns: 1fr;
888
+ }
889
+
890
+ .section {
891
+ padding: 2rem 1rem;
892
+ }
893
+
894
+ .page-header {
895
+ padding: 2rem 1rem 1rem;
896
+ }
897
+
898
+ .page-header h1 {
899
+ font-size: 2rem;
900
+ }
901
+
902
+ .filter-bar {
903
+ flex-wrap: wrap;
904
+ }
905
+
906
+ .skills-grid {
907
+ grid-template-columns: 1fr;
908
+ }
909
+ }