create-smoodly-app 0.0.45 → 0.0.47

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 (395) hide show
  1. package/README.md +15 -10
  2. package/dist/index.js +75 -33
  3. package/package.json +2 -2
  4. package/templates/astro-blank/AGENTS.md +55 -0
  5. package/templates/astro-blank/CLAUDE.md +1 -0
  6. package/templates/astro-blank/README.md +88 -0
  7. package/templates/astro-blank/_gitignore +5 -0
  8. package/templates/astro-blank/astro.config.ts +15 -0
  9. package/templates/astro-blank/package.json +24 -0
  10. package/templates/astro-blank/scripts/seed.ts +80 -0
  11. package/templates/astro-blank/src/components/LocaleNav.astro +15 -0
  12. package/templates/astro-blank/src/components/elements/Button.schema.ts +22 -0
  13. package/templates/astro-blank/src/components/pages/Home.schema.ts +17 -0
  14. package/templates/astro-blank/src/components/pages/Page.schema.ts +14 -0
  15. package/templates/astro-blank/src/components/sections/Text.schema.ts +24 -0
  16. package/templates/astro-blank/src/elements/button.astro +10 -0
  17. package/templates/astro-blank/src/entry-pages/posts.astro +23 -0
  18. package/templates/astro-blank/src/layouts/Layout.astro +25 -0
  19. package/templates/astro-blank/src/live.config.ts +13 -0
  20. package/templates/astro-blank/src/page-types/home.astro +15 -0
  21. package/templates/astro-blank/src/page-types/page.astro +15 -0
  22. package/templates/astro-blank/src/pages/404.astro +7 -0
  23. package/templates/astro-blank/src/sections/text.astro +18 -0
  24. package/templates/astro-blank/src/smoodly/collections.ts +24 -0
  25. package/templates/astro-blank/src/smoodly/config.ts +28 -0
  26. package/templates/astro-blank/src/smoodly/elements.ts +5 -0
  27. package/templates/astro-blank/src/smoodly/globals.ts +18 -0
  28. package/templates/astro-blank/src/smoodly/sections.ts +5 -0
  29. package/templates/astro-blank/src/smoodly/toolsets.ts +14 -0
  30. package/templates/astro-blank/src/styles/global.css +57 -0
  31. package/templates/astro-blank/supabase/migrations/20260926120000_smoodly_v1.sql +535 -0
  32. package/templates/astro-blank/supabase/migrations/20260926130000_smoodly_v2.sql +26 -0
  33. package/templates/astro-blank/supabase/migrations/20260926140000_smoodly_v3.sql +38 -0
  34. package/templates/astro-blank/supabase/migrations/20260926150000_smoodly_v4.sql +41 -0
  35. package/templates/astro-blank/supabase/migrations/20260929120000_smoodly_v5.sql +56 -0
  36. package/templates/astro-blank/supabase/migrations/20260929135523_smoodly_v6.sql +200 -0
  37. package/templates/astro-blank/supabase/migrations/20260930040956_smoodly_v7.sql +84 -0
  38. package/templates/astro-blank/supabase/migrations/20261007120000_smoodly_v8.sql +154 -0
  39. package/templates/astro-blank/supabase/migrations/20261007200000_smoodly_v9.sql +30 -0
  40. package/templates/astro-blank/supabase/migrations/20261008120000_smoodly_v10.sql +47 -0
  41. package/templates/{blank/supabase/migrations/20260930041056_smoodly_views.sql → astro-blank/supabase/migrations/20261008120100_smoodly_views.sql} +1 -1
  42. package/templates/astro-blank/tsconfig.json +17 -0
  43. package/templates/astro-blank-intl/AGENTS.md +55 -0
  44. package/templates/astro-blank-intl/CLAUDE.md +1 -0
  45. package/templates/astro-blank-intl/README.md +89 -0
  46. package/templates/astro-blank-intl/_gitignore +5 -0
  47. package/templates/astro-blank-intl/astro.config.ts +17 -0
  48. package/templates/astro-blank-intl/package.json +24 -0
  49. package/templates/astro-blank-intl/scripts/seed.ts +80 -0
  50. package/templates/astro-blank-intl/src/components/LocaleNav.astro +15 -0
  51. package/templates/astro-blank-intl/src/components/elements/Button.schema.ts +22 -0
  52. package/templates/astro-blank-intl/src/components/pages/Home.schema.ts +17 -0
  53. package/templates/astro-blank-intl/src/components/pages/Page.schema.ts +14 -0
  54. package/templates/astro-blank-intl/src/components/sections/Text.schema.ts +24 -0
  55. package/templates/astro-blank-intl/src/elements/button.astro +10 -0
  56. package/templates/astro-blank-intl/src/entry-pages/posts.astro +23 -0
  57. package/templates/astro-blank-intl/src/layouts/Layout.astro +25 -0
  58. package/templates/astro-blank-intl/src/live.config.ts +13 -0
  59. package/templates/astro-blank-intl/src/page-types/home.astro +15 -0
  60. package/templates/astro-blank-intl/src/page-types/page.astro +15 -0
  61. package/templates/astro-blank-intl/src/pages/404.astro +7 -0
  62. package/templates/astro-blank-intl/src/sections/text.astro +18 -0
  63. package/templates/astro-blank-intl/src/smoodly/collections.ts +24 -0
  64. package/templates/astro-blank-intl/src/smoodly/config.ts +29 -0
  65. package/templates/astro-blank-intl/src/smoodly/elements.ts +5 -0
  66. package/templates/astro-blank-intl/src/smoodly/globals.ts +18 -0
  67. package/templates/astro-blank-intl/src/smoodly/sections.ts +5 -0
  68. package/templates/astro-blank-intl/src/smoodly/toolsets.ts +14 -0
  69. package/templates/astro-blank-intl/src/styles/global.css +57 -0
  70. package/templates/astro-blank-intl/supabase/migrations/20260926120000_smoodly_v1.sql +535 -0
  71. package/templates/astro-blank-intl/supabase/migrations/20260926130000_smoodly_v2.sql +26 -0
  72. package/templates/astro-blank-intl/supabase/migrations/20260926140000_smoodly_v3.sql +38 -0
  73. package/templates/astro-blank-intl/supabase/migrations/20260926150000_smoodly_v4.sql +41 -0
  74. package/templates/astro-blank-intl/supabase/migrations/20260929120000_smoodly_v5.sql +56 -0
  75. package/templates/astro-blank-intl/supabase/migrations/20260929135523_smoodly_v6.sql +200 -0
  76. package/templates/astro-blank-intl/supabase/migrations/20260930040956_smoodly_v7.sql +84 -0
  77. package/templates/astro-blank-intl/supabase/migrations/20261007120000_smoodly_v8.sql +154 -0
  78. package/templates/astro-blank-intl/supabase/migrations/20261007200000_smoodly_v9.sql +30 -0
  79. package/templates/astro-blank-intl/supabase/migrations/20261008120000_smoodly_v10.sql +47 -0
  80. package/templates/{blank-intl/supabase/migrations/20260930041056_smoodly_views.sql → astro-blank-intl/supabase/migrations/20261008120100_smoodly_views.sql} +1 -1
  81. package/templates/astro-blank-intl/tsconfig.json +17 -0
  82. package/templates/astro-blank-intl.tsconfig.json +24 -0
  83. package/templates/astro-blank.tsconfig.json +24 -0
  84. package/templates/astro-lorem/AGENTS.md +55 -0
  85. package/templates/astro-lorem/CLAUDE.md +1 -0
  86. package/templates/astro-lorem/README.md +60 -0
  87. package/templates/astro-lorem/_gitignore +5 -0
  88. package/templates/astro-lorem/astro.config.ts +15 -0
  89. package/templates/astro-lorem/package.json +24 -0
  90. package/templates/astro-lorem/public/images/about_main.jpg +0 -0
  91. package/templates/astro-lorem/public/images/article_photo.jpg +0 -0
  92. package/templates/astro-lorem/public/images/hero_image.jpg +0 -0
  93. package/templates/astro-lorem/public/images/home_section_2.jpg +0 -0
  94. package/templates/astro-lorem/scripts/seed.ts +405 -0
  95. package/templates/astro-lorem/src/components/ArticleCard.astro +19 -0
  96. package/templates/astro-lorem/src/components/articles.ts +42 -0
  97. package/templates/astro-lorem/src/components/elements/Callout.schema.ts +24 -0
  98. package/templates/astro-lorem/src/components/elements/Cta.schema.ts +21 -0
  99. package/templates/astro-lorem/src/components/news.ts +13 -0
  100. package/templates/astro-lorem/src/components/pages/Articles.schema.ts +20 -0
  101. package/templates/astro-lorem/src/components/pages/Home.schema.ts +26 -0
  102. package/templates/astro-lorem/src/components/pages/News.schema.ts +17 -0
  103. package/templates/astro-lorem/src/components/pages/Page.schema.ts +24 -0
  104. package/templates/astro-lorem/src/components/sections/FavouriteArticles.schema.ts +17 -0
  105. package/templates/astro-lorem/src/components/sections/Footer.schema.ts +31 -0
  106. package/templates/astro-lorem/src/components/sections/Header.schema.ts +21 -0
  107. package/templates/astro-lorem/src/components/sections/Hero.schema.ts +24 -0
  108. package/templates/astro-lorem/src/components/sections/ImageText.schema.ts +30 -0
  109. package/templates/astro-lorem/src/components/sections/PageHero.schema.ts +21 -0
  110. package/templates/astro-lorem/src/components/sections/People.schema.ts +15 -0
  111. package/templates/astro-lorem/src/components/sections/Points.schema.ts +21 -0
  112. package/templates/astro-lorem/src/components/sections/Quote.schema.ts +23 -0
  113. package/templates/astro-lorem/src/elements/callout.astro +13 -0
  114. package/templates/astro-lorem/src/elements/cta.astro +15 -0
  115. package/templates/astro-lorem/src/entry-pages/articles.astro +71 -0
  116. package/templates/astro-lorem/src/entry-pages/news.astro +29 -0
  117. package/templates/astro-lorem/src/layouts/Layout.astro +39 -0
  118. package/templates/astro-lorem/src/live.config.ts +20 -0
  119. package/templates/astro-lorem/src/messages/en.json +7 -0
  120. package/templates/astro-lorem/src/messages/fi.json +7 -0
  121. package/templates/astro-lorem/src/page-types/articlesIndex.astro +24 -0
  122. package/templates/astro-lorem/src/page-types/home.astro +14 -0
  123. package/templates/astro-lorem/src/page-types/newsIndex.astro +28 -0
  124. package/templates/astro-lorem/src/page-types/page.astro +27 -0
  125. package/templates/astro-lorem/src/pages/404.astro +7 -0
  126. package/templates/astro-lorem/src/sections/favouriteArticles.astro +26 -0
  127. package/templates/astro-lorem/src/sections/footer.astro +37 -0
  128. package/templates/astro-lorem/src/sections/header.astro +27 -0
  129. package/templates/astro-lorem/src/sections/hero.astro +28 -0
  130. package/templates/astro-lorem/src/sections/imageText.astro +22 -0
  131. package/templates/astro-lorem/src/sections/pageHero.astro +20 -0
  132. package/templates/astro-lorem/src/sections/peopleSection.astro +24 -0
  133. package/templates/astro-lorem/src/sections/points.astro +32 -0
  134. package/templates/astro-lorem/src/sections/quote.astro +16 -0
  135. package/templates/astro-lorem/src/smoodly/collections.ts +63 -0
  136. package/templates/astro-lorem/src/smoodly/config.ts +48 -0
  137. package/templates/astro-lorem/src/smoodly/elements.ts +6 -0
  138. package/templates/astro-lorem/src/smoodly/globals.ts +29 -0
  139. package/templates/astro-lorem/src/smoodly/sections.ts +18 -0
  140. package/templates/astro-lorem/src/smoodly/toolsets.ts +16 -0
  141. package/templates/astro-lorem/src/strings.ts +17 -0
  142. package/templates/astro-lorem/src/styles/global.css +228 -0
  143. package/templates/astro-lorem/supabase/migrations/20260926120000_smoodly_v1.sql +535 -0
  144. package/templates/astro-lorem/supabase/migrations/20260926130000_smoodly_v2.sql +26 -0
  145. package/templates/astro-lorem/supabase/migrations/20260926140000_smoodly_v3.sql +38 -0
  146. package/templates/astro-lorem/supabase/migrations/20260926150000_smoodly_v4.sql +41 -0
  147. package/templates/astro-lorem/supabase/migrations/20260929120000_smoodly_v5.sql +56 -0
  148. package/templates/astro-lorem/supabase/migrations/20260929135523_smoodly_v6.sql +200 -0
  149. package/templates/astro-lorem/supabase/migrations/20260930040956_smoodly_v7.sql +84 -0
  150. package/templates/astro-lorem/supabase/migrations/20261007120000_smoodly_v8.sql +154 -0
  151. package/templates/astro-lorem/supabase/migrations/20261007200000_smoodly_v9.sql +30 -0
  152. package/templates/astro-lorem/supabase/migrations/20261008120000_smoodly_v10.sql +47 -0
  153. package/templates/{lorem/supabase/migrations/20260930041056_smoodly_views.sql → astro-lorem/supabase/migrations/20261008120100_smoodly_views.sql} +1 -1
  154. package/templates/astro-lorem/tsconfig.json +17 -0
  155. package/templates/astro-lorem-intl/AGENTS.md +55 -0
  156. package/templates/astro-lorem-intl/CLAUDE.md +1 -0
  157. package/templates/astro-lorem-intl/README.md +62 -0
  158. package/templates/astro-lorem-intl/_gitignore +5 -0
  159. package/templates/astro-lorem-intl/astro.config.ts +17 -0
  160. package/templates/astro-lorem-intl/package.json +24 -0
  161. package/templates/astro-lorem-intl/public/images/about_main.jpg +0 -0
  162. package/templates/astro-lorem-intl/public/images/article_photo.jpg +0 -0
  163. package/templates/astro-lorem-intl/public/images/hero_image.jpg +0 -0
  164. package/templates/astro-lorem-intl/public/images/home_section_2.jpg +0 -0
  165. package/templates/astro-lorem-intl/scripts/seed.ts +405 -0
  166. package/templates/astro-lorem-intl/src/components/ArticleCard.astro +19 -0
  167. package/templates/astro-lorem-intl/src/components/articles.ts +42 -0
  168. package/templates/astro-lorem-intl/src/components/elements/Callout.schema.ts +24 -0
  169. package/templates/astro-lorem-intl/src/components/elements/Cta.schema.ts +21 -0
  170. package/templates/astro-lorem-intl/src/components/news.ts +13 -0
  171. package/templates/astro-lorem-intl/src/components/pages/Articles.schema.ts +20 -0
  172. package/templates/astro-lorem-intl/src/components/pages/Home.schema.ts +26 -0
  173. package/templates/astro-lorem-intl/src/components/pages/News.schema.ts +17 -0
  174. package/templates/astro-lorem-intl/src/components/pages/Page.schema.ts +24 -0
  175. package/templates/astro-lorem-intl/src/components/sections/FavouriteArticles.schema.ts +17 -0
  176. package/templates/astro-lorem-intl/src/components/sections/Footer.schema.ts +31 -0
  177. package/templates/astro-lorem-intl/src/components/sections/Header.schema.ts +21 -0
  178. package/templates/astro-lorem-intl/src/components/sections/Hero.schema.ts +24 -0
  179. package/templates/astro-lorem-intl/src/components/sections/ImageText.schema.ts +30 -0
  180. package/templates/astro-lorem-intl/src/components/sections/PageHero.schema.ts +21 -0
  181. package/templates/astro-lorem-intl/src/components/sections/People.schema.ts +15 -0
  182. package/templates/astro-lorem-intl/src/components/sections/Points.schema.ts +21 -0
  183. package/templates/astro-lorem-intl/src/components/sections/Quote.schema.ts +23 -0
  184. package/templates/astro-lorem-intl/src/elements/callout.astro +13 -0
  185. package/templates/astro-lorem-intl/src/elements/cta.astro +15 -0
  186. package/templates/astro-lorem-intl/src/entry-pages/articles.astro +71 -0
  187. package/templates/astro-lorem-intl/src/entry-pages/news.astro +29 -0
  188. package/templates/astro-lorem-intl/src/layouts/Layout.astro +39 -0
  189. package/templates/astro-lorem-intl/src/live.config.ts +20 -0
  190. package/templates/astro-lorem-intl/src/messages/en.json +7 -0
  191. package/templates/astro-lorem-intl/src/messages/fi.json +7 -0
  192. package/templates/astro-lorem-intl/src/page-types/articlesIndex.astro +24 -0
  193. package/templates/astro-lorem-intl/src/page-types/home.astro +14 -0
  194. package/templates/astro-lorem-intl/src/page-types/newsIndex.astro +28 -0
  195. package/templates/astro-lorem-intl/src/page-types/page.astro +27 -0
  196. package/templates/astro-lorem-intl/src/pages/404.astro +7 -0
  197. package/templates/astro-lorem-intl/src/sections/favouriteArticles.astro +26 -0
  198. package/templates/astro-lorem-intl/src/sections/footer.astro +37 -0
  199. package/templates/astro-lorem-intl/src/sections/header.astro +27 -0
  200. package/templates/astro-lorem-intl/src/sections/hero.astro +28 -0
  201. package/templates/astro-lorem-intl/src/sections/imageText.astro +22 -0
  202. package/templates/astro-lorem-intl/src/sections/pageHero.astro +20 -0
  203. package/templates/astro-lorem-intl/src/sections/peopleSection.astro +24 -0
  204. package/templates/astro-lorem-intl/src/sections/points.astro +32 -0
  205. package/templates/astro-lorem-intl/src/sections/quote.astro +16 -0
  206. package/templates/astro-lorem-intl/src/smoodly/collections.ts +63 -0
  207. package/templates/astro-lorem-intl/src/smoodly/config.ts +48 -0
  208. package/templates/astro-lorem-intl/src/smoodly/elements.ts +6 -0
  209. package/templates/astro-lorem-intl/src/smoodly/globals.ts +29 -0
  210. package/templates/astro-lorem-intl/src/smoodly/sections.ts +18 -0
  211. package/templates/astro-lorem-intl/src/smoodly/toolsets.ts +16 -0
  212. package/templates/astro-lorem-intl/src/strings.ts +17 -0
  213. package/templates/astro-lorem-intl/src/styles/global.css +228 -0
  214. package/templates/astro-lorem-intl/supabase/migrations/20260926120000_smoodly_v1.sql +535 -0
  215. package/templates/astro-lorem-intl/supabase/migrations/20260926130000_smoodly_v2.sql +26 -0
  216. package/templates/astro-lorem-intl/supabase/migrations/20260926140000_smoodly_v3.sql +38 -0
  217. package/templates/astro-lorem-intl/supabase/migrations/20260926150000_smoodly_v4.sql +41 -0
  218. package/templates/astro-lorem-intl/supabase/migrations/20260929120000_smoodly_v5.sql +56 -0
  219. package/templates/astro-lorem-intl/supabase/migrations/20260929135523_smoodly_v6.sql +200 -0
  220. package/templates/astro-lorem-intl/supabase/migrations/20260930040956_smoodly_v7.sql +84 -0
  221. package/templates/astro-lorem-intl/supabase/migrations/20261007120000_smoodly_v8.sql +154 -0
  222. package/templates/astro-lorem-intl/supabase/migrations/20261007200000_smoodly_v9.sql +30 -0
  223. package/templates/astro-lorem-intl/supabase/migrations/20261008120000_smoodly_v10.sql +47 -0
  224. package/templates/{lorem-intl/supabase/migrations/20260930041056_smoodly_views.sql → astro-lorem-intl/supabase/migrations/20261008120100_smoodly_views.sql} +1 -1
  225. package/templates/astro-lorem-intl/tsconfig.json +17 -0
  226. package/templates/astro-lorem-intl.tsconfig.json +24 -0
  227. package/templates/astro-lorem.tsconfig.json +24 -0
  228. package/templates/blank/AGENTS.md +23 -16
  229. package/templates/blank/README.md +20 -15
  230. package/templates/blank/app/(smoodly)/admin/[[...segments]]/route.ts +8 -0
  231. package/templates/blank/components/elements/Button.schema.ts +22 -0
  232. package/templates/blank/components/elements/Button.tsx +2 -20
  233. package/templates/blank/components/pages/Home.schema.ts +17 -0
  234. package/templates/blank/components/pages/Home.tsx +2 -16
  235. package/templates/blank/components/pages/Page.schema.ts +14 -0
  236. package/templates/blank/components/pages/Page.tsx +2 -14
  237. package/templates/blank/components/pages/Post.tsx +5 -4
  238. package/templates/blank/components/sections/Text.schema.ts +24 -0
  239. package/templates/blank/components/sections/Text.tsx +7 -27
  240. package/templates/blank/package.json +1 -1
  241. package/templates/blank/scripts/seed.ts +2 -2
  242. package/templates/blank/smoodly/config.ts +8 -7
  243. package/templates/blank/smoodly/elements.ts +4 -4
  244. package/templates/blank/smoodly/globals.ts +4 -2
  245. package/templates/blank/smoodly/richtext.tsx +4 -5
  246. package/templates/blank/smoodly/sections.ts +4 -4
  247. package/templates/blank/smoodly/server.ts +22 -44
  248. package/templates/blank/smoodly/toolsets.ts +2 -2
  249. package/templates/blank/smoodly/views.ts +15 -0
  250. package/templates/blank/supabase/migrations/20261007120000_smoodly_v8.sql +154 -0
  251. package/templates/blank/supabase/migrations/20261007200000_smoodly_v9.sql +30 -0
  252. package/templates/blank/supabase/migrations/20261008120000_smoodly_v10.sql +47 -0
  253. package/templates/blank/supabase/migrations/20261008120100_smoodly_views.sql +20 -0
  254. package/templates/blank-intl/AGENTS.md +23 -16
  255. package/templates/blank-intl/README.md +20 -15
  256. package/templates/blank-intl/app/(smoodly)/admin/[[...segments]]/route.ts +8 -0
  257. package/templates/blank-intl/components/elements/Button.schema.ts +22 -0
  258. package/templates/blank-intl/components/elements/Button.tsx +2 -20
  259. package/templates/blank-intl/components/pages/Home.schema.ts +17 -0
  260. package/templates/blank-intl/components/pages/Home.tsx +2 -16
  261. package/templates/blank-intl/components/pages/Page.schema.ts +14 -0
  262. package/templates/blank-intl/components/pages/Page.tsx +2 -14
  263. package/templates/blank-intl/components/pages/Post.tsx +5 -4
  264. package/templates/blank-intl/components/sections/Text.schema.ts +24 -0
  265. package/templates/blank-intl/components/sections/Text.tsx +7 -27
  266. package/templates/blank-intl/package.json +1 -1
  267. package/templates/blank-intl/scripts/seed.ts +2 -2
  268. package/templates/blank-intl/smoodly/config.ts +8 -7
  269. package/templates/blank-intl/smoodly/elements.ts +4 -4
  270. package/templates/blank-intl/smoodly/globals.ts +4 -2
  271. package/templates/blank-intl/smoodly/richtext.tsx +4 -5
  272. package/templates/blank-intl/smoodly/sections.ts +4 -4
  273. package/templates/blank-intl/smoodly/server.ts +22 -44
  274. package/templates/blank-intl/smoodly/toolsets.ts +2 -2
  275. package/templates/blank-intl/smoodly/views.ts +15 -0
  276. package/templates/blank-intl/supabase/migrations/20261007120000_smoodly_v8.sql +154 -0
  277. package/templates/blank-intl/supabase/migrations/20261007200000_smoodly_v9.sql +30 -0
  278. package/templates/blank-intl/supabase/migrations/20261008120000_smoodly_v10.sql +47 -0
  279. package/templates/blank-intl/supabase/migrations/20261008120100_smoodly_views.sql +20 -0
  280. package/templates/lorem/AGENTS.md +23 -16
  281. package/templates/lorem/README.md +3 -3
  282. package/templates/lorem/app/(smoodly)/admin/[[...segments]]/route.ts +8 -0
  283. package/templates/lorem/components/elements/Callout.schema.ts +24 -0
  284. package/templates/lorem/components/elements/Callout.tsx +2 -24
  285. package/templates/lorem/components/elements/Cta.schema.ts +21 -0
  286. package/templates/lorem/components/elements/Cta.tsx +2 -21
  287. package/templates/lorem/components/pages/Article.tsx +1 -1
  288. package/templates/lorem/components/pages/Articles.schema.ts +20 -0
  289. package/templates/lorem/components/pages/Articles.tsx +2 -20
  290. package/templates/lorem/components/pages/Home.schema.ts +26 -0
  291. package/templates/lorem/components/pages/Home.tsx +2 -26
  292. package/templates/lorem/components/pages/News.schema.ts +17 -0
  293. package/templates/lorem/components/pages/News.tsx +2 -17
  294. package/templates/lorem/components/pages/NewsPost.tsx +1 -1
  295. package/templates/lorem/components/pages/Page.schema.ts +24 -0
  296. package/templates/lorem/components/pages/Page.tsx +2 -24
  297. package/templates/lorem/components/sections/FavouriteArticles.schema.ts +17 -0
  298. package/templates/lorem/components/sections/FavouriteArticles.tsx +2 -17
  299. package/templates/lorem/components/sections/Footer.schema.ts +31 -0
  300. package/templates/lorem/components/sections/Footer.tsx +4 -32
  301. package/templates/lorem/components/sections/Header.schema.ts +21 -0
  302. package/templates/lorem/components/sections/Header.tsx +2 -21
  303. package/templates/lorem/components/sections/Hero.schema.ts +24 -0
  304. package/templates/lorem/components/sections/Hero.tsx +2 -24
  305. package/templates/lorem/components/sections/ImageText.schema.ts +30 -0
  306. package/templates/lorem/components/sections/ImageText.tsx +2 -30
  307. package/templates/lorem/components/sections/PageHero.schema.ts +21 -0
  308. package/templates/lorem/components/sections/PageHero.tsx +2 -21
  309. package/templates/lorem/components/sections/People.schema.ts +15 -0
  310. package/templates/lorem/components/sections/People.tsx +2 -14
  311. package/templates/lorem/components/sections/Points.schema.ts +21 -0
  312. package/templates/lorem/components/sections/Points.tsx +2 -21
  313. package/templates/lorem/components/sections/Quote.schema.ts +23 -0
  314. package/templates/lorem/components/sections/Quote.tsx +2 -23
  315. package/templates/lorem/package.json +1 -1
  316. package/templates/lorem/scripts/seed.ts +18 -18
  317. package/templates/lorem/smoodly/collections.ts +2 -2
  318. package/templates/lorem/smoodly/config.ts +14 -15
  319. package/templates/lorem/smoodly/elements.ts +5 -5
  320. package/templates/lorem/smoodly/globals.ts +10 -7
  321. package/templates/lorem/smoodly/richtext.tsx +5 -5
  322. package/templates/lorem/smoodly/sections.ts +12 -13
  323. package/templates/lorem/smoodly/server.ts +22 -44
  324. package/templates/lorem/smoodly/toolsets.ts +3 -3
  325. package/templates/lorem/smoodly/views.ts +33 -0
  326. package/templates/lorem/supabase/migrations/20261007120000_smoodly_v8.sql +154 -0
  327. package/templates/lorem/supabase/migrations/20261007200000_smoodly_v9.sql +30 -0
  328. package/templates/lorem/supabase/migrations/20261008120000_smoodly_v10.sql +47 -0
  329. package/templates/lorem/supabase/migrations/20261008120100_smoodly_views.sql +58 -0
  330. package/templates/lorem-intl/AGENTS.md +23 -16
  331. package/templates/lorem-intl/README.md +3 -3
  332. package/templates/lorem-intl/app/(smoodly)/admin/[[...segments]]/route.ts +8 -0
  333. package/templates/lorem-intl/components/elements/Callout.schema.ts +24 -0
  334. package/templates/lorem-intl/components/elements/Callout.tsx +2 -24
  335. package/templates/lorem-intl/components/elements/Cta.schema.ts +21 -0
  336. package/templates/lorem-intl/components/elements/Cta.tsx +2 -21
  337. package/templates/lorem-intl/components/pages/Article.tsx +1 -1
  338. package/templates/lorem-intl/components/pages/Articles.schema.ts +20 -0
  339. package/templates/lorem-intl/components/pages/Articles.tsx +2 -20
  340. package/templates/lorem-intl/components/pages/Home.schema.ts +26 -0
  341. package/templates/lorem-intl/components/pages/Home.tsx +2 -26
  342. package/templates/lorem-intl/components/pages/News.schema.ts +17 -0
  343. package/templates/lorem-intl/components/pages/News.tsx +2 -17
  344. package/templates/lorem-intl/components/pages/NewsPost.tsx +1 -1
  345. package/templates/lorem-intl/components/pages/Page.schema.ts +24 -0
  346. package/templates/lorem-intl/components/pages/Page.tsx +2 -24
  347. package/templates/lorem-intl/components/sections/FavouriteArticles.schema.ts +17 -0
  348. package/templates/lorem-intl/components/sections/FavouriteArticles.tsx +2 -17
  349. package/templates/lorem-intl/components/sections/Footer.schema.ts +31 -0
  350. package/templates/lorem-intl/components/sections/Footer.tsx +4 -32
  351. package/templates/lorem-intl/components/sections/Header.schema.ts +21 -0
  352. package/templates/lorem-intl/components/sections/Header.tsx +2 -21
  353. package/templates/lorem-intl/components/sections/Hero.schema.ts +24 -0
  354. package/templates/lorem-intl/components/sections/Hero.tsx +2 -24
  355. package/templates/lorem-intl/components/sections/ImageText.schema.ts +30 -0
  356. package/templates/lorem-intl/components/sections/ImageText.tsx +2 -30
  357. package/templates/lorem-intl/components/sections/PageHero.schema.ts +21 -0
  358. package/templates/lorem-intl/components/sections/PageHero.tsx +2 -21
  359. package/templates/lorem-intl/components/sections/People.schema.ts +15 -0
  360. package/templates/lorem-intl/components/sections/People.tsx +2 -14
  361. package/templates/lorem-intl/components/sections/Points.schema.ts +21 -0
  362. package/templates/lorem-intl/components/sections/Points.tsx +2 -21
  363. package/templates/lorem-intl/components/sections/Quote.schema.ts +23 -0
  364. package/templates/lorem-intl/components/sections/Quote.tsx +2 -23
  365. package/templates/lorem-intl/package.json +1 -1
  366. package/templates/lorem-intl/scripts/seed.ts +18 -18
  367. package/templates/lorem-intl/smoodly/collections.ts +2 -2
  368. package/templates/lorem-intl/smoodly/config.ts +14 -15
  369. package/templates/lorem-intl/smoodly/elements.ts +5 -5
  370. package/templates/lorem-intl/smoodly/globals.ts +10 -7
  371. package/templates/lorem-intl/smoodly/richtext.tsx +5 -5
  372. package/templates/lorem-intl/smoodly/sections.ts +12 -13
  373. package/templates/lorem-intl/smoodly/server.ts +22 -44
  374. package/templates/lorem-intl/smoodly/toolsets.ts +3 -3
  375. package/templates/lorem-intl/smoodly/views.ts +33 -0
  376. package/templates/lorem-intl/supabase/migrations/20261007120000_smoodly_v8.sql +154 -0
  377. package/templates/lorem-intl/supabase/migrations/20261007200000_smoodly_v9.sql +30 -0
  378. package/templates/lorem-intl/supabase/migrations/20261008120000_smoodly_v10.sql +47 -0
  379. package/templates/lorem-intl/supabase/migrations/20261008120100_smoodly_views.sql +58 -0
  380. package/templates/blank/app/(smoodly)/admin/[[...segments]]/page.tsx +0 -1
  381. package/templates/blank/app/(smoodly)/admin/layout.tsx +0 -15
  382. package/templates/blank/smoodly/admin.tsx +0 -6
  383. package/templates/blank/smoodly/ops.ts +0 -11
  384. package/templates/blank-intl/app/(smoodly)/admin/[[...segments]]/page.tsx +0 -1
  385. package/templates/blank-intl/app/(smoodly)/admin/layout.tsx +0 -15
  386. package/templates/blank-intl/smoodly/admin.tsx +0 -6
  387. package/templates/blank-intl/smoodly/ops.ts +0 -11
  388. package/templates/lorem/app/(smoodly)/admin/[[...segments]]/page.tsx +0 -1
  389. package/templates/lorem/app/(smoodly)/admin/layout.tsx +0 -15
  390. package/templates/lorem/smoodly/admin.tsx +0 -6
  391. package/templates/lorem/smoodly/ops.ts +0 -11
  392. package/templates/lorem-intl/app/(smoodly)/admin/[[...segments]]/page.tsx +0 -1
  393. package/templates/lorem-intl/app/(smoodly)/admin/layout.tsx +0 -15
  394. package/templates/lorem-intl/smoodly/admin.tsx +0 -6
  395. package/templates/lorem-intl/smoodly/ops.ts +0 -11
@@ -0,0 +1,228 @@
1
+ /* Lorem Co. — the starter's one stylesheet.
2
+ Tokens from the design, base rules, then one block per section and
3
+ page in page order. Each section carries its own padding; the editor's
4
+ Spacing & layout steps (Smoodly's styles set, smoodly/config.ts) render
5
+ inline through the section wrapper and read the --space-* / --width-*
6
+ variables below. A section's `background` setting is its own data
7
+ attribute. The site header and footer are global items rendered by
8
+ the layout. Photos crop with object-fit: cover at the design's aspect
9
+ ratios. */
10
+
11
+ :root {
12
+ /* Smoodly's styles set reads these (smoodly/config.ts): editor steps become padding, width, alignment. */
13
+ --space-sm: 24px; --space-md: 48px; --space-lg: 72px;
14
+ --width-narrow: 640px; --width-wide: 1440px;
15
+
16
+ --paper: #faf7f2;
17
+ --ink: #1f1b17;
18
+ --accent: #d9653a;
19
+ --muted: #6b6259;
20
+ --line: #e8e1d7;
21
+ --line-strong: #d6cdc1;
22
+ --body: #3a342e;
23
+ --radius: 6px;
24
+ --container: 1200px;
25
+ /* The custom section's rows share the container's side padding (spec 2026-09-14 §6). */
26
+ --smd-gutter: 32px;
27
+ --serif: var(--font-serif), Georgia, serif;
28
+ --sans: var(--font-sans), Helvetica, Arial, sans-serif;
29
+ }
30
+ @media (min-width: 768px) { :root { --space-sm: 32px; --space-md: 64px; --space-lg: 96px; } }
31
+
32
+ /* ---------- base ---------- */
33
+
34
+ * { box-sizing: border-box; }
35
+ html, body { margin: 0; padding: 0; }
36
+ body {
37
+ background: var(--paper);
38
+ color: var(--ink);
39
+ font-family: var(--sans);
40
+ -webkit-font-smoothing: antialiased;
41
+ min-height: 100vh;
42
+ display: flex;
43
+ flex-direction: column;
44
+ }
45
+ main { flex: 1; }
46
+ a { color: inherit; text-decoration: none; }
47
+ a:hover { color: var(--accent); }
48
+ img { display: block; max-width: 100%; }
49
+ h1, h2, h3, p, blockquote, address { margin: 0; }
50
+ address { font-style: normal; }
51
+
52
+ /* The container reads the editor's width step; without one, the design's width. */
53
+ .container { max-width: var(--smd-width, var(--container)); width: 100%; margin: 0 auto; padding-inline: 32px; }
54
+
55
+ .kicker { font-size: 13px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--accent); font-weight: 600; }
56
+ .h2 { font-family: var(--serif); font-weight: 400; font-size: clamp(30px, 3.5vw, 44px); line-height: 1.1; letter-spacing: -0.02em; text-wrap: balance; }
57
+ .link-accent { color: var(--accent); font-weight: 500; font-size: 15px; }
58
+ .link-accent:hover { color: var(--ink); }
59
+
60
+ .button { display: inline-block; background: var(--ink); color: var(--paper); padding: 14px 24px; border-radius: var(--radius); font-size: 15px; font-weight: 500; }
61
+ .button:hover { background: var(--accent); color: var(--paper); }
62
+ .button--outline { background: transparent; color: var(--ink); border: 1px solid var(--line-strong); }
63
+ .button--outline:hover { background: transparent; color: var(--ink); border-color: var(--ink); }
64
+
65
+ /* Richtext (RichText renders bare elements) */
66
+ /* The custom section's columns (.smd-col) read like prose (spec 2026-09-14 §6). */
67
+ .prose, .smd-col{ display: flex; flex-direction: column; gap: 20px; font-size: 17px; line-height: 1.65; color: var(--muted); }
68
+ .prose p, .smd-col p{ text-wrap: pretty; }
69
+ .prose h2, .prose h3, .smd-col h2, .smd-col h3 { font-family: var(--serif); font-weight: 500; color: var(--ink); line-height: 1.2; letter-spacing: -0.01em; }
70
+ .prose h2, .smd-col h2{ font-size: 32px; margin-top: 8px; }
71
+ .prose h3, .smd-col h3{ font-size: 24px; }
72
+ .prose ul, .prose ol, .smd-col ul, .smd-col ol { margin: 0; padding-left: 22px; display: flex; flex-direction: column; gap: 8px; }
73
+ .prose blockquote, .smd-col blockquote{ margin: 8px 0; padding-left: 24px; border-left: 2px solid var(--accent); font-family: var(--serif); font-style: italic; font-size: 24px; line-height: 1.4; color: var(--ink); }
74
+ .prose a, .smd-col a{ color: var(--accent); text-decoration: underline; }
75
+ .prose--lead { gap: 24px; font-size: 18px; line-height: 1.7; color: var(--body); }
76
+ .prose--lead > p:first-child { font-family: var(--serif); font-size: 24px; line-height: 1.45; color: var(--ink); }
77
+
78
+ /* ---------- richtext block nodes: images, callout, cta ---------- */
79
+ .prose figure, .smd-col figure{ margin: 8px 0; }
80
+ /* Inline, so the section's align step moves an image with the text around it. */
81
+ .prose figure img, .smd-col figure img{ display: inline-block; vertical-align: top; max-width: 100%; height: auto; border-radius: var(--radius); }
82
+ .prose figcaption, .smd-col figcaption{ margin-top: 8px; font-size: 14px; color: var(--muted); }
83
+ .prose .callout, .smd-col .callout{ margin: 8px 0; padding: 20px 24px; border-radius: var(--radius); border-left: 3px solid var(--accent); background: #fff; display: flex; flex-direction: column; gap: 8px; font-size: 16px; line-height: 1.6; }
84
+ .prose .callout[data-tone="success"], .smd-col .callout[data-tone="success"]{ border-left-color: #3a8f5c; }
85
+ .prose .callout[data-tone="warning"], .smd-col .callout[data-tone="warning"]{ border-left-color: #c9962b; background: #fff8e8; }
86
+ .prose .callout__title, .smd-col .callout__title{ color: var(--ink); font-size: 15px; letter-spacing: 0.02em; }
87
+ .prose .callout__body, .smd-col .callout__body{ display: flex; flex-direction: column; gap: 8px; }
88
+ .prose .cta, .smd-col .cta{ margin: 16px 0; padding: 28px 32px; border-radius: var(--radius); background: var(--ink); color: var(--paper); display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
89
+ .prose .cta[data-variant="outline"], .smd-col .cta[data-variant="outline"]{ background: transparent; color: var(--ink); border: 1px solid var(--line-strong); }
90
+ .prose .cta__heading, .smd-col .cta__heading{ font-family: var(--serif); font-size: 24px; font-weight: 500; line-height: 1.2; display: block; }
91
+ .prose .cta__text, .smd-col .cta__text{ margin: 6px 0 0; font-size: 15px; color: inherit; opacity: 0.8; }
92
+ .prose .cta .button, .smd-col .cta .button{ background: var(--paper); color: var(--ink); flex: none; }
93
+ .prose .cta[data-variant="outline"] .button, .smd-col .cta[data-variant="outline"] .button{ background: var(--ink); color: var(--paper); }
94
+
95
+ /* ---------- section background: the quote's own `background` setting (Paper / Ink) ---------- */
96
+
97
+ [data-background="ink"] { background: var(--ink); color: var(--paper); }
98
+ [data-background="ink"] .quote__attribution { color: var(--line); }
99
+ [data-background="ink"].quote { border-color: transparent; }
100
+
101
+ /* ---------- header ---------- */
102
+
103
+ .site-header__bar { display: flex; align-items: center; justify-content: space-between; gap: 24px; padding-block: 28px; }
104
+ .site-header__brand { font-family: var(--serif); font-size: 26px; font-weight: 500; letter-spacing: -0.01em; }
105
+ .site-header__nav { display: flex; gap: 32px; font-size: 15px; margin-left: auto; }
106
+ .site-header__locales { display: flex; gap: 12px; font-size: 13px; letter-spacing: 0.08em; color: var(--muted); }
107
+ .site-header__locales a[aria-current] { color: var(--ink); font-weight: 600; }
108
+
109
+ /* ---------- hero (home) ---------- */
110
+
111
+ .hero { padding-block: 56px; }
112
+ .hero__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 48px; align-items: center; }
113
+ .hero__copy { display: flex; flex-direction: column; gap: 24px; }
114
+ .hero__heading { font-family: var(--serif); font-weight: 400; font-size: clamp(40px, 5vw, 68px); line-height: 1.05; letter-spacing: -0.02em; text-wrap: balance; }
115
+ .hero__text { font-size: 18px; line-height: 1.6; color: var(--muted); max-width: 520px; text-wrap: pretty; }
116
+ .hero__buttons { display: flex; gap: 12px; flex-wrap: wrap; }
117
+ .hero__image { width: 100%; border-radius: var(--radius); }
118
+
119
+ /* ---------- page hero ---------- */
120
+
121
+ .page-hero { padding-block: 56px; }
122
+ .page-hero__inner { display: flex; flex-direction: column; gap: 40px; }
123
+ .page-hero__copy { display: flex; flex-direction: column; gap: 20px; max-width: 760px; }
124
+ .page-hero__heading { font-family: var(--serif); font-weight: 400; font-size: clamp(40px, 5vw, 64px); line-height: 1.05; letter-spacing: -0.02em; text-wrap: balance; }
125
+ .page-hero__text { font-size: 18px; line-height: 1.6; color: var(--muted); text-wrap: pretty; }
126
+ .page-hero__image { width: 100%; border-radius: var(--radius); }
127
+
128
+ /* ---------- image and text ---------- */
129
+
130
+ .image-text { padding-block: 56px; }
131
+ .image-text__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 48px; align-items: center; }
132
+ .image-text__image { width: 100%; border-radius: var(--radius); }
133
+ [data-image-side="right"] .image-text__image { order: 2; }
134
+ .image-text__copy { display: flex; flex-direction: column; gap: 20px; }
135
+ .image-text__grid > .h2 { align-self: start; }
136
+
137
+ /* ---------- quote ---------- */
138
+
139
+ .quote { padding-block: 56px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
140
+ .quote__inner { max-width: 880px; margin: 0 auto; padding-inline: 32px; text-align: center; display: flex; flex-direction: column; gap: 24px; align-items: center; }
141
+ .quote__text { font-family: var(--serif); font-style: italic; font-weight: 300; font-size: clamp(26px, 3vw, 38px); line-height: 1.3; letter-spacing: -0.01em; text-wrap: balance; }
142
+ .quote__attribution { font-size: 14px; color: var(--muted); letter-spacing: 0.04em; }
143
+
144
+ /* ---------- points ---------- */
145
+
146
+ .points { padding-block: 56px; }
147
+ .points .container { display: flex; flex-direction: column; gap: 48px; }
148
+ .points__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 40px; }
149
+ .point { display: flex; flex-direction: column; gap: 16px; }
150
+ .point__icon { color: var(--accent); }
151
+ .point__heading { font-family: var(--serif); font-weight: 500; font-size: 24px; }
152
+ .point__text { font-size: 16px; line-height: 1.6; color: var(--muted); text-wrap: pretty; }
153
+
154
+ /* ---------- article cards (favourites, index, related) ---------- */
155
+
156
+ .favourites { padding-block: 56px; }
157
+ .favourites .container, .related .container { display: flex; flex-direction: column; gap: 40px; }
158
+ .card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 40px 32px; }
159
+ .card-grid--3 { grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }
160
+ .card { display: flex; flex-direction: column; gap: 14px; color: inherit; }
161
+ .card:hover { color: inherit; }
162
+ .card:hover .card__title { color: var(--accent); }
163
+ .card__image { width: 100%; border-radius: var(--radius); }
164
+ .card__meta { display: flex; gap: 10px; font-size: 13px; color: var(--muted); }
165
+ .card__tag { color: var(--accent); font-weight: 600; }
166
+ .card__title { font-family: var(--serif); font-weight: 500; font-size: 26px; line-height: 1.2; letter-spacing: -0.01em; text-wrap: balance; }
167
+ h3.card__title { font-size: 24px; }
168
+ .card__excerpt { font-size: 15px; line-height: 1.6; color: var(--muted); text-wrap: pretty; }
169
+
170
+ /* ---------- people ---------- */
171
+
172
+ .people { padding-block: 56px; }
173
+ .people .container { display: flex; flex-direction: column; gap: 40px; }
174
+ .people__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 40px 32px; }
175
+ .person { display: flex; flex-direction: column; gap: 12px; }
176
+ .person__mark { width: 56px; height: 56px; border-radius: 50%; background: var(--line); color: var(--ink); display: inline-flex; align-items: center; justify-content: center; font-family: var(--serif); font-size: 24px; }
177
+ .person__name { font-family: var(--serif); font-size: 22px; font-weight: 500; }
178
+ .person__role { font-size: 14px; color: var(--muted); }
179
+
180
+ /* ---------- pages ---------- */
181
+
182
+ .breadcrumb { padding-top: 24px; font-size: 14px; color: var(--muted); }
183
+ .breadcrumb a:hover { color: var(--accent); }
184
+
185
+ .subnav { display: flex; flex-wrap: wrap; gap: 20px; padding-top: 12px; font-size: 14px; }
186
+ .subnav a { color: var(--muted); }
187
+ .subnav a:hover { color: var(--accent); }
188
+
189
+ .articles-index { padding-bottom: 96px; }
190
+
191
+ .news-index { padding-bottom: 96px; }
192
+ .news-list { list-style: none; margin: 0; padding: 0; max-width: 760px; display: flex; flex-direction: column; }
193
+ .news-list__item { display: flex; flex-direction: column; gap: 8px; padding-block: 28px; border-top: 1px solid var(--line); }
194
+ .news-list__item:last-child { border-bottom: 1px solid var(--line); }
195
+ .news-list__date { font-size: 13px; color: var(--muted); }
196
+ .news-list__title { font-family: var(--serif); font-weight: 500; font-size: 26px; line-height: 1.2; letter-spacing: -0.01em; color: inherit; text-wrap: balance; }
197
+ .news-list__title:hover { color: var(--accent); }
198
+ .news-list__excerpt { font-size: 15px; line-height: 1.6; color: var(--muted); text-wrap: pretty; }
199
+
200
+ .article { padding-top: 48px; display: flex; flex-direction: column; gap: 40px; }
201
+ .article__back { font-size: 14px; color: var(--muted); }
202
+ .article__head { max-width: 760px; display: flex; flex-direction: column; gap: 20px; }
203
+ .article__tags { display: flex; gap: 10px; flex-wrap: wrap; }
204
+ .tag { font-size: 13px; font-weight: 600; color: var(--muted); border: 1px solid var(--line-strong); border-radius: var(--radius); padding: 4px 10px; }
205
+ .tag--accent { color: var(--accent); border-color: var(--accent); }
206
+ .article__title { font-family: var(--serif); font-weight: 400; font-size: clamp(38px, 4.5vw, 60px); line-height: 1.08; letter-spacing: -0.02em; text-wrap: balance; }
207
+ .article__byline { display: flex; align-items: center; gap: 12px; font-size: 14px; color: var(--muted); }
208
+ .article__byline strong { color: var(--ink); font-weight: 500; }
209
+ .article__avatar { width: 36px; height: 36px; border-radius: 50%; background: var(--line); display: inline-block; flex: none; }
210
+ .article__image { width: 100%; border-radius: var(--radius); }
211
+ .article__body { max-width: 720px; margin: 16px auto 0; width: 100%; }
212
+
213
+ .related { border-top: 1px solid var(--line); margin-top: 88px; padding: 64px 0 96px; }
214
+ .related__head { display: flex; justify-content: space-between; align-items: baseline; gap: 24px; flex-wrap: wrap; }
215
+
216
+ /* ---------- footer ---------- */
217
+
218
+ .site-footer { border-top: 1px solid var(--line); margin-top: auto; }
219
+ .site-footer__grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 32px; padding: 56px 32px 40px; font-size: 14px; }
220
+ @media (max-width: 720px) { .site-footer__grid { grid-template-columns: 1fr 1fr; } }
221
+ .site-footer__about { display: flex; flex-direction: column; gap: 12px; }
222
+ .site-footer__tagline { color: var(--muted); line-height: 1.6; max-width: 300px; }
223
+ .site-footer__contact { display: flex; flex-direction: column; gap: 4px; color: var(--muted); }
224
+ .site-footer__column { display: flex; flex-direction: column; gap: 10px; }
225
+ .site-footer__column a { color: var(--muted); }
226
+ .site-footer__column a:hover { color: var(--accent); }
227
+ .site-footer__title { font-weight: 600; }
228
+ .site-footer__copyright { padding: 0 32px 32px; font-size: 13px; color: var(--muted); }