kmcom-nuxt-layers 2.7.5 → 3.0.0

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 (772) hide show
  1. package/docs/FALLOW-COMPLEXITY-DUPLICATION-AUDIT.md +0 -1
  2. package/docs/LAYOUT.md +34 -61
  3. package/docs/MIGRATION.md +1 -1
  4. package/docs/UPAGE-GRID-INTEGRATION.md +6 -6
  5. package/docs/layout-shift-causes.md +1 -1
  6. package/docs/superpowers/plans/2026-09-03-layout-layer-fluid-rebuild.md +1850 -0
  7. package/docs/superpowers/plans/2026-09-03-vue-element-system.md +1019 -0
  8. package/docs/superpowers/plans/2026-09-04-grid-layer.md +977 -0
  9. package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-0-1-design.md +533 -0
  10. package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-2-design.md +154 -0
  11. package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-3-design.md +109 -0
  12. package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-4-design.md +124 -0
  13. package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-5-design.md +121 -0
  14. package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-6-design.md +77 -0
  15. package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-7-design.md +73 -0
  16. package/docs/superpowers/specs/2026-08-31-swiss-grid-layer-design.md +190 -0
  17. package/docs/superpowers/specs/2026-09-03-layout-layer-fluid-rebuild-design.md +312 -0
  18. package/docs/superpowers/specs/2026-09-03-vue-element-system-design.md +342 -0
  19. package/docs/superpowers/specs/2026-09-04-grid-layer-design.md +236 -0
  20. package/layers/content/app/app.config.ts +10 -2
  21. package/layers/content/app/components/Blog/ItemPage.vue +21 -0
  22. package/layers/content/app/components/Blog/Page.vue +25 -0
  23. package/layers/content/app/components/Gallery/ImagePage.vue +5 -1
  24. package/layers/content/app/components/Gallery/Page.vue +4 -1
  25. package/layers/content/app/components/Gallery/SlugPage.vue +5 -1
  26. package/layers/content/app/components/Portfolio/ItemPage.vue +4 -1
  27. package/layers/content/app/components/Portfolio/List.vue +14 -2
  28. package/layers/content/app/components/Portfolio/Page.vue +4 -1
  29. package/layers/content/app/composables/useBlogPosts.ts +6 -19
  30. package/layers/content/app/composables/useCollectionItems.ts +63 -0
  31. package/layers/content/app/composables/useGalleryItems.ts +1 -16
  32. package/layers/content/app/types/content.ts +9 -0
  33. package/layers/content/package.json +3 -0
  34. package/layers/core/app/app.config.ts +34 -17
  35. package/layers/core/app/app.vue +1 -0
  36. package/layers/core/app/assets/css/core.css +4 -1
  37. package/layers/core/app/assets/css/tokens/breakpoints.css +13 -0
  38. package/layers/core/app/assets/css/tokens/container.css +36 -0
  39. package/layers/core/app/assets/css/tokens/spacing-fluid.css +25 -0
  40. package/layers/core/app/components/AppContainer.vue +32 -0
  41. package/layers/core/app/components/Element.test.ts +90 -0
  42. package/layers/core/app/components/Element.vue +78 -0
  43. package/layers/core/app/components/ElementTw.test.ts +64 -0
  44. package/layers/core/app/components/ElementTw.vue +86 -0
  45. package/layers/core/app/components/LoadingScreen.vue +0 -15
  46. package/layers/core/app/composables/useElementGrid.test.ts +33 -0
  47. package/layers/core/app/composables/useElementGrid.ts +29 -0
  48. package/layers/core/app/composables/useElementInteraction.test.ts +27 -0
  49. package/layers/core/app/composables/useElementInteraction.ts +17 -0
  50. package/layers/core/app/composables/useElementLayout.test.ts +41 -0
  51. package/layers/core/app/composables/useElementLayout.ts +26 -0
  52. package/layers/core/app/composables/useElementSizing.test.ts +39 -0
  53. package/layers/core/app/composables/useElementSizing.ts +25 -0
  54. package/layers/core/app/composables/useElementStyle.ts +65 -0
  55. package/layers/core/app/composables/useElementSurface.test.ts +33 -0
  56. package/layers/core/app/composables/useElementSurface.ts +21 -0
  57. package/layers/core/app/composables/useErrorLog.ts +6 -4
  58. package/layers/core/app/composables/useLayoutAttrs.test.ts +47 -0
  59. package/layers/core/app/composables/useLayoutAttrs.ts +94 -0
  60. package/layers/core/app/composables/useLoading.ts +3 -1
  61. package/layers/core/app/error.vue +27 -57
  62. package/layers/core/app/pages/[...slug].vue +1 -29
  63. package/layers/core/app/plugins/loading.client.ts +0 -6
  64. package/layers/core/app/types/element.ts +25 -0
  65. package/layers/core/app/types/index.ts +0 -1
  66. package/layers/core/app/types/notFound.ts +24 -0
  67. package/layers/core/app/types/responsive.ts +15 -0
  68. package/layers/core/app/types/responsive.type-test.ts +22 -0
  69. package/layers/core/app/types/runtime-config.ts +1 -17
  70. package/layers/core/app/types/tokens.ts +29 -0
  71. package/layers/core/app/utils/index.ts +4 -2
  72. package/layers/core/app/utils/scrollGuardClamp.test.ts +36 -0
  73. package/layers/core/app/utils/scrollGuardClamp.ts +22 -0
  74. package/layers/core/app/utils/styleToTailwindClasses.test.ts +31 -0
  75. package/layers/core/app/utils/styleToTailwindClasses.ts +16 -0
  76. package/layers/core/nuxt.config.ts +15 -11
  77. package/layers/core/package.json +2 -1
  78. package/layers/{auth → data/auth}/nuxt.config.ts +1 -1
  79. package/layers/{auth → data/auth}/package.json +1 -1
  80. package/layers/{baseline → data/auth}/tsconfig.json +1 -1
  81. package/layers/{database → data/database}/nuxt.config.ts +1 -1
  82. package/layers/{database → data/database}/package.json +1 -1
  83. package/layers/{database → data/database}/tsconfig.json +1 -1
  84. package/layers/{forms/app/types/app-config.d.ts → data/forms/app/app.config.ts} +4 -0
  85. package/layers/{forms → data/forms}/package.json +1 -1
  86. package/layers/{forms → data/forms}/server/api/forms/status.get.ts +3 -1
  87. package/layers/{animations → data/forms}/tsconfig.json +1 -1
  88. package/layers/{mailer → data/mailer}/nuxt.config.ts +11 -1
  89. package/layers/{mailer → data/mailer}/package.json +1 -1
  90. package/layers/{auth → data/mailer}/tsconfig.json +1 -1
  91. package/layers/data/metadata/app/composables/useMetadataItem.ts +18 -0
  92. package/layers/data/metadata/app/composables/useMetadataSearch.ts +37 -0
  93. package/layers/{metadata → data/metadata}/nuxt.config.ts +1 -1
  94. package/layers/{metadata → data/metadata}/package.json +1 -1
  95. package/layers/{metadata → data/metadata}/providers/comicvine/nuxt.config.ts +1 -1
  96. package/layers/{metadata → data/metadata}/providers/comicvine/package.json +1 -1
  97. package/layers/data/metadata/providers/comicvine/tsconfig.json +7 -0
  98. package/layers/{metadata → data/metadata}/providers/google-books/nuxt.config.ts +1 -1
  99. package/layers/{metadata → data/metadata}/providers/google-books/package.json +1 -1
  100. package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/client.ts +10 -2
  101. package/layers/data/metadata/providers/google-books/tsconfig.json +7 -0
  102. package/layers/{metadata → data/metadata}/providers/openlibrary/package.json +1 -1
  103. package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/client.ts +23 -11
  104. package/layers/data/metadata/providers/openlibrary/tsconfig.json +7 -0
  105. package/layers/{metadata → data/metadata}/providers/themoviedb/nuxt.config.ts +1 -1
  106. package/layers/{metadata → data/metadata}/providers/themoviedb/package.json +1 -1
  107. package/layers/{metadata → data/metadata}/providers/themoviedb/tsconfig.json +1 -1
  108. package/layers/{metadata → data/metadata}/server/utils/metadata/search.ts +11 -4
  109. package/layers/data/metadata/tsconfig.json +7 -0
  110. package/layers/{feeds → delivery/feeds}/app/components/Feeds/Index.vue +6 -2
  111. package/layers/{feeds → delivery/feeds}/app/components/Feeds/RouteCard.vue +2 -0
  112. package/layers/{feeds → delivery/feeds}/app/plugins/feed-head.ts +6 -2
  113. package/layers/{feeds → delivery/feeds}/app/utils/feed-catalog.ts +8 -6
  114. package/layers/{feeds → delivery/feeds}/nuxt.config.ts +1 -1
  115. package/layers/{feeds → delivery/feeds}/package.json +1 -1
  116. package/layers/{feeds → delivery/feeds}/server/utils/feed-config.ts +1 -1
  117. package/layers/{feeds → delivery/feeds}/server/utils/feed-service.ts +2 -1
  118. package/layers/delivery/feeds/tsconfig.json +7 -0
  119. package/layers/{scripts → delivery/scripts}/app/composables/useAnalytics.ts +3 -1
  120. package/layers/{scripts → delivery/scripts}/app/composables/useGtm.ts +8 -2
  121. package/layers/{scripts → delivery/scripts}/app/composables/useScriptsConsent.ts +4 -1
  122. package/layers/{scripts → delivery/scripts}/app/utils/scriptClients.ts +19 -0
  123. package/layers/{scripts → delivery/scripts}/nuxt.config.ts +7 -2
  124. package/layers/{scripts → delivery/scripts}/package.json +3 -2
  125. package/layers/delivery/scripts/tsconfig.json +7 -0
  126. package/layers/delivery/seo/app/composables/useSeoConfig.ts +8 -0
  127. package/layers/{seo → delivery/seo}/app/utils/seoConfig.test.ts +2 -2
  128. package/layers/{seo → delivery/seo}/app/utils/seoConfig.ts +2 -2
  129. package/layers/{seo → delivery/seo}/nuxt.config.ts +1 -1
  130. package/layers/{seo → delivery/seo}/package.json +1 -1
  131. package/layers/delivery/seo/tsconfig.json +7 -0
  132. package/layers/design-system/theming/app/app.config.ts +35 -0
  133. package/layers/design-system/theming/app/assets/css/tokens.css +26 -0
  134. package/layers/{theme → design-system/theming}/app/components/ThemePicker/AccentButton.vue +3 -22
  135. package/layers/{theme → design-system/theming}/app/components/ThemePicker/Colors.vue +3 -4
  136. package/layers/{theme → design-system/theming}/app/composables/useAccentColor.ts +5 -2
  137. package/layers/{theme → design-system/theming}/app/composables/useThemeContrast.ts +1 -1
  138. package/layers/{theme → design-system/theming}/app/composables/useThemeMotion.ts +1 -1
  139. package/layers/{theme → design-system/theming}/app/composables/useThemeTransparency.ts +1 -1
  140. package/layers/{theme → design-system/theming}/app/plugins/theme.client.ts +2 -1
  141. package/layers/design-system/theming/app/types/designSystem.ts +102 -0
  142. package/layers/design-system/theming/app/types/semanticColor.ts +20 -0
  143. package/layers/design-system/theming/app/types/theme.ts +12 -0
  144. package/layers/design-system/theming/app/utils/accentPalette.ts +28 -0
  145. package/layers/design-system/theming/app/utils/themeAdapter.ts +20 -0
  146. package/layers/design-system/theming/nuxt.config.ts +49 -0
  147. package/layers/{ui → design-system/theming}/package.json +5 -6
  148. package/layers/{theme → design-system/theming}/server/plugins/theme-fouc.ts +2 -0
  149. package/layers/{theme → design-system/theming}/server/utils/accent-css.ts +2 -2
  150. package/layers/{theme → design-system/theming}/tsconfig.json +1 -1
  151. package/layers/{typography → design-system/typography}/app/assets/css/typography.css +9 -0
  152. package/layers/design-system/typography/app/components/Typography/CodeBlock.vue +65 -0
  153. package/layers/{typography → design-system/typography}/app/components/Typography/Headline.vue +16 -31
  154. package/layers/{typography/app/components/Typography/HeadlineScreen.vue → design-system/typography/app/components/Typography/QuoteBlock.vue} +27 -29
  155. package/layers/design-system/typography/app/components/Typography/RepeatText.vue +147 -0
  156. package/layers/{typography → design-system/typography}/app/components/Typography/index.vue +6 -4
  157. package/layers/design-system/typography/app/composables/repeatFill.ts +51 -0
  158. package/layers/{typography → design-system/typography}/app/composables/typography.ts +4 -0
  159. package/layers/{typography → design-system/typography}/app/types/typography.ts +8 -0
  160. package/layers/{typography → design-system/typography}/nuxt.config.ts +1 -1
  161. package/layers/design-system/typography/tsconfig.json +7 -0
  162. package/layers/{visual → design-system/visual}/app/app.config.ts +2 -2
  163. package/layers/{visual → design-system/visual}/app/components/Accent/Blob.vue +1 -1
  164. package/layers/{visual → design-system/visual}/app/components/Accent/Scene.vue +2 -3
  165. package/layers/{visual → design-system/visual}/app/components/Gradient/Background.vue +2 -2
  166. package/layers/{visual → design-system/visual}/app/components/Gradient/Text.vue +2 -2
  167. package/layers/{visual → design-system/visual}/app/composables/gradient.ts +1 -1
  168. package/layers/design-system/visual/app/types/breakpoints.ts +67 -0
  169. package/layers/{visual → design-system/visual}/app/types/media.ts +0 -11
  170. package/layers/{visual → design-system/visual}/nuxt.config.ts +1 -1
  171. package/layers/design-system/visual/tsconfig.json +7 -0
  172. package/layers/{animations → motion/animations}/app/components/Motion/Marquee.vue +0 -7
  173. package/layers/{animations → motion/animations}/app/components/Motion/Staggered.vue +4 -1
  174. package/layers/{animations → motion/animations}/nuxt.config.ts +1 -2
  175. package/layers/motion/animations/tsconfig.json +7 -0
  176. package/layers/motion/{package.json → motion/package.json} +1 -1
  177. package/layers/motion/{tsconfig.json → motion/tsconfig.json} +1 -1
  178. package/layers/motion/page-transitions/app/assets/css/page-transitions.css +30 -0
  179. package/layers/{page-transitions → motion/page-transitions}/app/composables/usePageTransition.ts +14 -2
  180. package/layers/{page-transitions → motion/page-transitions}/app/plugins/page-transitions.client.ts +5 -2
  181. package/layers/{page-transitions → motion/page-transitions}/nuxt.config.ts +3 -1
  182. package/layers/motion/page-transitions/tsconfig.json +7 -0
  183. package/layers/motion/scroll/app/app.config.ts +13 -0
  184. package/layers/{scroll → motion/scroll}/app/composables/useSmoothScroll.ts +2 -1
  185. package/layers/{scroll → motion/scroll}/app/plugins/locomotive-scroll.client.ts +2 -1
  186. package/layers/{scroll → motion/scroll}/nuxt.config.ts +1 -1
  187. package/layers/motion/scroll/tsconfig.json +7 -0
  188. package/layers/{transitions → motion/transitions}/nuxt.config.ts +1 -1
  189. package/layers/motion/transitions/tsconfig.json +7 -0
  190. package/layers/{canvas → render/canvas}/app/composables/useRendererCapabilities.ts +0 -8
  191. package/layers/{canvas → render/canvas}/app/composables/useShaderTime.ts +0 -12
  192. package/layers/{canvas → render/canvas}/nuxt.config.ts +1 -4
  193. package/layers/{canvas → render/canvas}/package.json +3 -2
  194. package/layers/{canvas → render/canvas}/tsconfig.json +1 -1
  195. package/layers/render/shader/app/app.config.ts +21 -0
  196. package/layers/{shader → render/shader}/app/shaders/layers/paperShading.ts +1 -1
  197. package/layers/{shader → render/shader}/package.json +1 -1
  198. package/layers/render/shader/tsconfig.json +7 -0
  199. package/layers/structure/grid/app/app.config.ts +92 -0
  200. package/layers/structure/grid/app/assets/css/grid.css +38 -0
  201. package/layers/structure/grid/app/composables/useGridTracks.test.ts +94 -0
  202. package/layers/structure/grid/app/composables/useGridTracks.ts +74 -0
  203. package/layers/structure/grid/app/types/tracks.test.ts +32 -0
  204. package/layers/structure/grid/app/types/tracks.ts +18 -0
  205. package/layers/structure/grid/app/utils/placement.test.ts +19 -0
  206. package/layers/structure/grid/app/utils/placement.ts +15 -0
  207. package/layers/structure/grid/nuxt.config.ts +22 -0
  208. package/layers/{theme → structure/grid}/package.json +3 -3
  209. package/layers/structure/layout/app/app.config.ts +116 -0
  210. package/layers/{layout → structure/layout}/app/assets/css/layout/grids.css +11 -6
  211. package/layers/structure/layout/app/assets/css/layout.css +1 -0
  212. package/layers/structure/layout/app/components/HStack.vue +41 -0
  213. package/layers/{layout → structure/layout}/app/components/Layout/Grid/Debug.vue +5 -3
  214. package/layers/{layout → structure/layout}/app/components/Layout/Grid/Item.vue +4 -10
  215. package/layers/{layout → structure/layout}/app/components/Layout/Main.vue +3 -3
  216. package/layers/{layout → structure/layout}/app/components/Layout/Page/Header.vue +1 -1
  217. package/layers/{layout → structure/layout}/app/components/Layout/Page/index.vue +3 -3
  218. package/layers/{layout → structure/layout}/app/components/Layout/Section/index.vue +1 -1
  219. package/layers/structure/layout/app/components/Spacer.vue +21 -0
  220. package/layers/structure/layout/app/components/VStack.vue +37 -0
  221. package/layers/structure/layout/app/components/ZStack.vue +28 -0
  222. package/layers/structure/layout/app/layouts/default.vue +5 -0
  223. package/layers/{layout → structure/layout}/app/types/layouts.ts +2 -3
  224. package/layers/{layout → structure/layout}/app/utils/gridPlacementStyle.test.ts +7 -42
  225. package/layers/{layout → structure/layout}/app/utils/gridPlacementStyle.ts +4 -18
  226. package/layers/{layout → structure/layout}/nuxt.config.ts +1 -1
  227. package/layers/{layout → structure/layout}/package.json +1 -1
  228. package/layers/structure/layout/tsconfig.json +7 -0
  229. package/layers/{navigation → structure/navigation}/app/app.config.ts +4 -6
  230. package/layers/structure/navigation/app/components/Mast/Header.vue +11 -0
  231. package/layers/{navigation → structure/navigation}/app/components/Mast/Nav.vue +1 -1
  232. package/layers/structure/navigation/app/composables/mastNav.ts +15 -0
  233. package/layers/{navigation → structure/navigation}/app/utils/createModal.ts +22 -3
  234. package/layers/{navigation → structure/navigation}/nuxt.config.ts +1 -1
  235. package/layers/structure/navigation/tsconfig.json +7 -0
  236. package/layers/{routing → structure/routing}/app/app.config.ts +11 -2
  237. package/layers/{routing → structure/routing}/nuxt.config.ts +1 -1
  238. package/layers/{routing → structure/routing}/package.json +1 -1
  239. package/layers/structure/routing/tsconfig.json +7 -0
  240. package/package.json +56 -56
  241. package/docs/fallow-refactor/layers-ui.md +0 -27
  242. package/layers/animations/app/types/animations.ts +0 -8
  243. package/layers/animations/app/types/index.ts +0 -1
  244. package/layers/baseline/nuxt.config.ts +0 -24
  245. package/layers/baseline/package.json +0 -14
  246. package/layers/content/app/components/Blog/Card.vue +0 -43
  247. package/layers/content/app/components/Gallery/AmbientImage.vue +0 -44
  248. package/layers/content/app/components/Gallery/Card.vue +0 -43
  249. package/layers/content/app/components/NuxtContent/Renderer.vue +0 -14
  250. package/layers/content/app/components/Portfolio/Card.vue +0 -43
  251. package/layers/content/app/composables/createPortfolioComposables.ts +0 -50
  252. package/layers/content/app/composables/useBlogPost.ts +0 -3
  253. package/layers/content/app/composables/useGalleryItem.ts +0 -3
  254. package/layers/content/app/composables/usePortfolioItem.ts +0 -3
  255. package/layers/content/app/composables/usePortfolioItems.ts +0 -26
  256. package/layers/content/app/types/app-config.d.ts +0 -14
  257. package/layers/core/app/assets/css-backup.zip +0 -0
  258. package/layers/core/app/composables/useEnv.ts +0 -23
  259. package/layers/core/app/composables/useScrollGuard.ts +0 -243
  260. package/layers/core/app/plugins/feature-detection.client.ts +0 -34
  261. package/layers/core/app/plugins/init.ts +0 -192
  262. package/layers/core/app/plugins/scroll-guard.client.ts +0 -56
  263. package/layers/core/app/types/app-config.d.ts +0 -63
  264. package/layers/core/app/types/scroll-guard.ts +0 -25
  265. package/layers/core/app/utils/helpers.test.ts +0 -55
  266. package/layers/core/app/utils/helpers.ts +0 -248
  267. package/layers/core/app/utils/regex.test.ts +0 -31
  268. package/layers/feeds/tsconfig.json +0 -7
  269. package/layers/forms/app/app.config.ts +0 -3
  270. package/layers/forms/tsconfig.json +0 -7
  271. package/layers/layout/app/app.config.ts +0 -180
  272. package/layers/layout/app/assets/css/layout/modes/fluid.css +0 -109
  273. package/layers/layout/app/assets/css/layout.css +0 -2
  274. package/layers/layout/app/components/Layout/Container.vue +0 -46
  275. package/layers/layout/app/components/Layout/Page/Container.vue +0 -103
  276. package/layers/layout/app/components/Layout/Section/Grid.vue +0 -46
  277. package/layers/layout/app/components/Layout/Section/Sidebar.vue +0 -84
  278. package/layers/layout/app/components/Layout/Section/Stack.vue +0 -63
  279. package/layers/layout/app/components/Layout/Section/Title.vue +0 -33
  280. package/layers/layout/app/composables/GridPlacement.ts +0 -31
  281. package/layers/layout/app/types/app-config.d.ts +0 -14
  282. package/layers/layout/tsconfig.json +0 -7
  283. package/layers/mailer/server/types.d.ts +0 -11
  284. package/layers/mailer/tsconfig.json +0 -7
  285. package/layers/metadata/app/composables/useMetadataItem.ts +0 -15
  286. package/layers/metadata/app/composables/useMetadataSearch.ts +0 -29
  287. package/layers/metadata/providers/comicvine/tsconfig.json +0 -7
  288. package/layers/metadata/providers/google-books/tsconfig.json +0 -7
  289. package/layers/metadata/providers/openlibrary/tsconfig.json +0 -7
  290. package/layers/metadata/tsconfig.json +0 -7
  291. package/layers/motion/app/components/Motion/index.vue +0 -16
  292. package/layers/navigation/app/components/Mast/Header.vue +0 -18
  293. package/layers/navigation/app/components/Mast/Main.vue +0 -7
  294. package/layers/navigation/app/composables/mastNav.ts +0 -26
  295. package/layers/navigation/app/utils/regex.ts +0 -6
  296. package/layers/navigation/tsconfig.json +0 -7
  297. package/layers/page-transitions/tsconfig.json +0 -7
  298. package/layers/routing/app/types/app-config.d.ts +0 -7
  299. package/layers/routing/tsconfig.json +0 -7
  300. package/layers/scripts/app/types/index.ts +0 -1
  301. package/layers/scripts/app/types/scripts.ts +0 -14
  302. package/layers/scripts/tsconfig.json +0 -7
  303. package/layers/scroll/app/app.config.ts +0 -31
  304. package/layers/scroll/tsconfig.json +0 -7
  305. package/layers/seo/app/composables/useSeoConfig.ts +0 -7
  306. package/layers/seo/tsconfig.json +0 -7
  307. package/layers/shader/app/app.config.ts +0 -9
  308. package/layers/shader/app/types/app-config.d.ts +0 -7
  309. package/layers/shader/tsconfig.json +0 -7
  310. package/layers/starter/app/app.config.ts +0 -10
  311. package/layers/starter/app/components/StarterDesignSystem.vue +0 -1913
  312. package/layers/starter/app/components/StarterHome.vue +0 -441
  313. package/layers/starter/nuxt.config.ts +0 -15
  314. package/layers/starter/package.json +0 -10
  315. package/layers/theme/app/app.config.ts +0 -3
  316. package/layers/theme/app/types/app-config.d.ts +0 -10
  317. package/layers/theme/app/types/theme.ts +0 -23
  318. package/layers/theme/nuxt.config.ts +0 -74
  319. package/layers/transitions/tsconfig.json +0 -7
  320. package/layers/typography/app/components/Typography/CodeBlock.vue +0 -41
  321. package/layers/typography/app/components/Typography/QuoteBlock.vue +0 -23
  322. package/layers/typography/tsconfig.json +0 -7
  323. package/layers/ui/app/assets/css/ui.css +0 -4
  324. package/layers/ui/app/layouts/default.vue +0 -8
  325. package/layers/ui/nuxt.config.ts +0 -22
  326. package/layers/ui/tsconfig.json +0 -7
  327. package/layers/visual/app/types/breakpoints.ts +0 -179
  328. package/layers/visual/tsconfig.json +0 -7
  329. /package/layers/{auth → data/auth}/app/middleware/auth.ts +0 -0
  330. /package/layers/{auth → data/auth}/server/routes/auth/github.get.ts +0 -0
  331. /package/layers/{database → data/database}/server/utils/drizzle.ts +0 -0
  332. /package/layers/{database → data/database}/server/utils/sql.ts +0 -0
  333. /package/layers/{forms → data/forms}/app/components/Form/Contact.vue +0 -0
  334. /package/layers/{forms → data/forms}/app/components/Form/Field.vue +0 -0
  335. /package/layers/{forms → data/forms}/app/composables/useFormSchema.ts +0 -0
  336. /package/layers/{forms → data/forms}/app/composables/useFormsFetch.ts +0 -0
  337. /package/layers/{forms → data/forms}/app/config/fields.ts +0 -0
  338. /package/layers/{forms → data/forms}/app/types/fields.ts +0 -0
  339. /package/layers/{forms → data/forms}/app/types/index.ts +0 -0
  340. /package/layers/{forms → data/forms}/app/utils/contact-schema.test.ts +0 -0
  341. /package/layers/{forms → data/forms}/app/utils/contact-schema.ts +0 -0
  342. /package/layers/{forms → data/forms}/app/utils/fieldProps.test.ts +0 -0
  343. /package/layers/{forms → data/forms}/app/utils/fieldProps.ts +0 -0
  344. /package/layers/{forms → data/forms}/nuxt.config.ts +0 -0
  345. /package/layers/{forms → data/forms}/server/api/contact.post.ts +0 -0
  346. /package/layers/{mailer → data/mailer}/app/types/index.ts +0 -0
  347. /package/layers/{mailer → data/mailer}/app/types/mailer.ts +0 -0
  348. /package/layers/{mailer → data/mailer}/server/utils/config.ts +0 -0
  349. /package/layers/{mailer → data/mailer}/server/utils/email.ts +0 -0
  350. /package/layers/{mailer → data/mailer}/server/utils/hooks.ts +0 -0
  351. /package/layers/{metadata → data/metadata}/providers/comicvine/server/plugins/comicvine-register.ts +0 -0
  352. /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/client.ts +0 -0
  353. /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/normalise.test.ts +0 -0
  354. /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/normalise.ts +0 -0
  355. /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/provider.ts +0 -0
  356. /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/types.ts +0 -0
  357. /package/layers/{metadata → data/metadata}/providers/google-books/server/plugins/google-books-register.ts +0 -0
  358. /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/client.test.ts +0 -0
  359. /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/normalise.test.ts +0 -0
  360. /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/normalise.ts +0 -0
  361. /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/provider.ts +0 -0
  362. /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/types.ts +0 -0
  363. /package/layers/{metadata → data/metadata}/providers/openlibrary/nuxt.config.ts +0 -0
  364. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/plugins/openlibrary-register.ts +0 -0
  365. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/client.test.ts +0 -0
  366. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/normalise.test.ts +0 -0
  367. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/normalise.ts +0 -0
  368. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/provider.ts +0 -0
  369. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/types.ts +0 -0
  370. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/plugins/tmdb-register.ts +0 -0
  371. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/client.test.ts +0 -0
  372. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/client.ts +0 -0
  373. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/normalise.test.ts +0 -0
  374. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/normalise.ts +0 -0
  375. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/provider.ts +0 -0
  376. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/types.ts +0 -0
  377. /package/layers/{metadata → data/metadata}/server/api/metadata/lookup.get.ts +0 -0
  378. /package/layers/{metadata → data/metadata}/server/api/metadata/providers.get.ts +0 -0
  379. /package/layers/{metadata → data/metadata}/server/api/metadata/search.get.ts +0 -0
  380. /package/layers/{metadata → data/metadata}/server/api/metadata/status.get.ts +0 -0
  381. /package/layers/{metadata → data/metadata}/server/api/metadata/sync.post.ts +0 -0
  382. /package/layers/{metadata → data/metadata}/server/utils/metadata/cache.test.ts +0 -0
  383. /package/layers/{metadata → data/metadata}/server/utils/metadata/cache.ts +0 -0
  384. /package/layers/{metadata → data/metadata}/server/utils/metadata/errors.ts +0 -0
  385. /package/layers/{metadata → data/metadata}/server/utils/metadata/provider-registry.test.ts +0 -0
  386. /package/layers/{metadata → data/metadata}/server/utils/metadata/provider-registry.ts +0 -0
  387. /package/layers/{metadata → data/metadata}/server/utils/metadata/search.test.ts +0 -0
  388. /package/layers/{feeds → delivery/feeds}/app/app.config.ts +0 -0
  389. /package/layers/{feeds → delivery/feeds}/app/assets/css/feeds.css +0 -0
  390. /package/layers/{feeds → delivery/feeds}/public/feed/style.css +0 -0
  391. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/atom/all.get.ts +0 -0
  392. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/atom.get.ts +0 -0
  393. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/json/all.get.ts +0 -0
  394. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/json.get.ts +0 -0
  395. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/rss/all.get.ts +0 -0
  396. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/rss.get.ts +0 -0
  397. /package/layers/{feeds → delivery/feeds}/server/routes/feed/atom/all.get.ts +0 -0
  398. /package/layers/{feeds → delivery/feeds}/server/routes/feed/atom.get.ts +0 -0
  399. /package/layers/{feeds → delivery/feeds}/server/routes/feed/demo.get.ts +0 -0
  400. /package/layers/{feeds → delivery/feeds}/server/routes/feed/index.get.ts +0 -0
  401. /package/layers/{feeds → delivery/feeds}/server/routes/feed/json/all.get.ts +0 -0
  402. /package/layers/{feeds → delivery/feeds}/server/routes/feed/json.get.ts +0 -0
  403. /package/layers/{feeds → delivery/feeds}/server/routes/feed/rss/all.get.ts +0 -0
  404. /package/layers/{feeds → delivery/feeds}/server/routes/feed/rss.get.ts +0 -0
  405. /package/layers/{feeds → delivery/feeds}/server/routes/feed/style.xsl.get.ts +0 -0
  406. /package/layers/{feeds → delivery/feeds}/server/utils/cache.ts +0 -0
  407. /package/layers/{feeds → delivery/feeds}/server/utils/content-adapter.test.ts +0 -0
  408. /package/layers/{feeds → delivery/feeds}/server/utils/content-adapter.ts +0 -0
  409. /package/layers/{feeds → delivery/feeds}/server/utils/feed-author.test.ts +0 -0
  410. /package/layers/{feeds → delivery/feeds}/server/utils/feed-author.ts +0 -0
  411. /package/layers/{feeds → delivery/feeds}/server/utils/feed-config.test.ts +0 -0
  412. /package/layers/{feeds → delivery/feeds}/server/utils/feed-xml.ts +0 -0
  413. /package/layers/{feeds → delivery/feeds}/server/utils/formats/atom.ts +0 -0
  414. /package/layers/{feeds → delivery/feeds}/server/utils/formats/json.ts +0 -0
  415. /package/layers/{feeds → delivery/feeds}/server/utils/formats/rss.ts +0 -0
  416. /package/layers/{feeds → delivery/feeds}/server/utils/formats.test.ts +0 -0
  417. /package/layers/{feeds → delivery/feeds}/server/utils/types.ts +0 -0
  418. /package/layers/{scripts → delivery/scripts}/app/app.config.ts +0 -0
  419. /package/layers/{baseline → delivery/scripts}/app/components/BaselineStatus.vue +0 -0
  420. /package/layers/{scripts → delivery/scripts}/app/composables/useScriptLoader.ts +0 -0
  421. /package/layers/{scripts → delivery/scripts}/app/composables/useYoutubeEmbed.ts +0 -0
  422. /package/layers/{baseline → delivery/scripts}/app/plugins/baseline-status.client.ts +0 -0
  423. /package/layers/{seo → delivery/seo}/app/app.config.ts +0 -0
  424. /package/layers/{theme → design-system/theming}/app/assets/css/theme.css +0 -0
  425. /package/layers/{theme → design-system/theming}/app/components/ThemePicker/Menu.vue +0 -0
  426. /package/layers/{theme → design-system/theming}/app/components/ThemePicker/MenuButton.vue +0 -0
  427. /package/layers/{theme → design-system/theming}/app/composables/useTheme.ts +0 -0
  428. /package/layers/{theme → design-system/theming}/app/composables/useThemePreferenceModels.ts +0 -0
  429. /package/layers/{theme → design-system/theming}/app/composables/useThemePreferences.ts +0 -0
  430. /package/layers/{theme → design-system/theming}/app/types/index.ts +0 -0
  431. /package/layers/{theme → design-system/theming}/server/utils/accent-css.test.ts +0 -0
  432. /package/layers/{theme → design-system/theming}/server/utils/fouc-config.test.ts +0 -0
  433. /package/layers/{theme → design-system/theming}/server/utils/fouc-config.ts +0 -0
  434. /package/layers/{typography → design-system/typography}/app/components/Typography/TextStroke.vue +0 -0
  435. /package/layers/{typography → design-system/typography}/app/composables/color.ts +0 -0
  436. /package/layers/{typography → design-system/typography}/app/types/colors.ts +0 -0
  437. /package/layers/{typography → design-system/typography}/app/types/index.ts +0 -0
  438. /package/layers/{typography → design-system/typography}/package.json +0 -0
  439. /package/layers/{visual → design-system/visual}/app/assets/css/visual.css +0 -0
  440. /package/layers/{visual → design-system/visual}/app/components/Base/Modal.vue +0 -0
  441. /package/layers/{visual → design-system/visual}/app/components/Media/Picture.vue +0 -0
  442. /package/layers/{visual → design-system/visual}/app/components/Progress/Bar.vue +0 -0
  443. /package/layers/{visual → design-system/visual}/app/components/Progress/Circular.vue +0 -0
  444. /package/layers/{visual → design-system/visual}/app/components/Tint/Overlay.vue +0 -0
  445. /package/layers/{visual → design-system/visual}/app/composables/accent.ts +0 -0
  446. /package/layers/{visual → design-system/visual}/app/composables/picture.ts +0 -0
  447. /package/layers/{visual → design-system/visual}/app/composables/tint.ts +0 -0
  448. /package/layers/{visual → design-system/visual}/app/types/accent.ts +0 -0
  449. /package/layers/{visual → design-system/visual}/app/types/gradient.ts +0 -0
  450. /package/layers/{visual → design-system/visual}/app/types/index.ts +0 -0
  451. /package/layers/{visual → design-system/visual}/app/types/tint.ts +0 -0
  452. /package/layers/{visual → design-system/visual}/app/utils/colorTokens.test.ts +0 -0
  453. /package/layers/{visual → design-system/visual}/app/utils/colorTokens.ts +0 -0
  454. /package/layers/{visual → design-system/visual}/app/utils/gradientStyle.test.ts +0 -0
  455. /package/layers/{visual → design-system/visual}/app/utils/gradientStyle.ts +0 -0
  456. /package/layers/{visual → design-system/visual}/app/utils/responsiveSizes.test.ts +0 -0
  457. /package/layers/{visual → design-system/visual}/app/utils/responsiveSizes.ts +0 -0
  458. /package/layers/{visual → design-system/visual}/package.json +0 -0
  459. /package/layers/{animations → motion/animations}/app/components/Motion/CountUp.vue +0 -0
  460. /package/layers/{animations → motion/animations}/app/components/Motion/Cursor.vue +0 -0
  461. /package/layers/{animations → motion/animations}/app/components/Motion/Magnetic.vue +0 -0
  462. /package/layers/{animations → motion/animations}/app/components/Motion/MarqueeText.vue +0 -0
  463. /package/layers/{animations → motion/animations}/app/components/Motion/TextReveal.vue +0 -0
  464. /package/layers/{animations → motion/animations}/app/components/Motion/Tilt.vue +0 -0
  465. /package/layers/{animations → motion/animations}/app/components/Motion/VelocityEffect.vue +0 -0
  466. /package/layers/{animations → motion/animations}/app/composables/useCountUp.ts +0 -0
  467. /package/layers/{animations → motion/animations}/app/composables/useCursorFollower.ts +0 -0
  468. /package/layers/{animations → motion/animations}/app/composables/useMagneticElement.ts +0 -0
  469. /package/layers/{animations → motion/animations}/app/composables/useMarqueeCopies.ts +0 -0
  470. /package/layers/{animations → motion/animations}/app/composables/useMarqueeVelocity.ts +0 -0
  471. /package/layers/{animations → motion/animations}/app/composables/useTiltEffect.ts +0 -0
  472. /package/layers/{animations → motion/animations}/app/utils/pointerMotion.ts +0 -0
  473. /package/layers/{animations → motion/animations}/package.json +0 -0
  474. /package/layers/motion/{nuxt.config.ts → motion/nuxt.config.ts} +0 -0
  475. /package/layers/{page-transitions → motion/page-transitions}/app/app.config.ts +0 -0
  476. /package/layers/{page-transitions → motion/page-transitions}/package.json +0 -0
  477. /package/layers/{scroll → motion/scroll}/app/components/Motion/HorizontalScroll.vue +0 -0
  478. /package/layers/{scroll → motion/scroll}/app/components/Motion/Parallax.vue +0 -0
  479. /package/layers/{scroll → motion/scroll}/app/components/Motion/PinnedSection.vue +0 -0
  480. /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollLink.vue +0 -0
  481. /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollProgress.vue +0 -0
  482. /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollScene.vue +0 -0
  483. /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollStats.vue +0 -0
  484. /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollStep.vue +0 -0
  485. /package/layers/{scroll → motion/scroll}/app/composables/useGsap.ts +0 -0
  486. /package/layers/{scroll → motion/scroll}/app/composables/useScrollSteps.ts +0 -0
  487. /package/layers/{scroll → motion/scroll}/app/composables/useSectionProgress.ts +0 -0
  488. /package/layers/{scroll → motion/scroll}/app/types/index.ts +0 -0
  489. /package/layers/{scroll → motion/scroll}/app/types/scroll.ts +0 -0
  490. /package/layers/{scroll → motion/scroll}/app/utils/scroll.ts +0 -0
  491. /package/layers/{scroll → motion/scroll}/package.json +0 -0
  492. /package/layers/{transitions → motion/transitions}/app/assets/css/transitions.css +0 -0
  493. /package/layers/{transitions → motion/transitions}/app/components/Motion/Transition.vue +0 -0
  494. /package/layers/{transitions → motion/transitions}/package.json +0 -0
  495. /package/layers/{canvas → render/canvas}/app/components/ShaderCanvas.vue +0 -0
  496. /package/layers/{canvas → render/canvas}/app/types/index.ts +0 -0
  497. /package/layers/{canvas → render/canvas}/app/types/renderer.ts +0 -0
  498. /package/layers/{shader → render/shader}/app/assets/css/shader.css +0 -0
  499. /package/layers/{shader → render/shader}/app/components/Effect/Bloom.vue +0 -0
  500. /package/layers/{shader → render/shader}/app/components/Effect/ChromaticAberration.vue +0 -0
  501. /package/layers/{shader → render/shader}/app/components/Effect/PostProcessing.vue +0 -0
  502. /package/layers/{shader → render/shader}/app/components/Material/AmbientAurora.client.vue +0 -0
  503. /package/layers/{shader → render/shader}/app/components/Material/AmbientFlow.client.vue +0 -0
  504. /package/layers/{shader → render/shader}/app/components/Material/AmbientGradientMesh.client.vue +0 -0
  505. /package/layers/{shader → render/shader}/app/components/Material/AmbientNebula.client.vue +0 -0
  506. /package/layers/{shader → render/shader}/app/components/Material/AmbientOcean.client.vue +0 -0
  507. /package/layers/{shader → render/shader}/app/components/Material/Fresnel.client.vue +0 -0
  508. /package/layers/{shader → render/shader}/app/components/Material/Gradient.client.vue +0 -0
  509. /package/layers/{shader → render/shader}/app/components/Material/Image.client.vue +0 -0
  510. /package/layers/{shader → render/shader}/app/components/Material/Node.client.vue +0 -0
  511. /package/layers/{shader → render/shader}/app/components/Material/Noise.client.vue +0 -0
  512. /package/layers/{shader → render/shader}/app/components/Mesh/Plane.vue +0 -0
  513. /package/layers/{shader → render/shader}/app/components/Node/Color.client.vue +0 -0
  514. /package/layers/{shader → render/shader}/app/components/Node/Fresnel.client.vue +0 -0
  515. /package/layers/{shader → render/shader}/app/components/Node/Gradient.client.vue +0 -0
  516. /package/layers/{shader → render/shader}/app/components/Node/Mix.client.vue +0 -0
  517. /package/layers/{shader → render/shader}/app/components/Node/Noise.client.vue +0 -0
  518. /package/layers/{shader → render/shader}/app/components/Pipeline/ACESTonemap.client.vue +0 -0
  519. /package/layers/{shader → render/shader}/app/components/Pipeline/AddBlend.client.vue +0 -0
  520. /package/layers/{shader → render/shader}/app/components/Pipeline/AgedFilm.client.vue +0 -0
  521. /package/layers/{shader → render/shader}/app/components/Pipeline/Aurora.client.vue +0 -0
  522. /package/layers/{shader → render/shader}/app/components/Pipeline/BilinearGradient.client.vue +0 -0
  523. /package/layers/{shader → render/shader}/app/components/Pipeline/BillowNoise.client.vue +0 -0
  524. /package/layers/{shader → render/shader}/app/components/Pipeline/BrightnessContrast.client.vue +0 -0
  525. /package/layers/{shader → render/shader}/app/components/Pipeline/CellularNoise.client.vue +0 -0
  526. /package/layers/{shader → render/shader}/app/components/Pipeline/ChannelMixer.client.vue +0 -0
  527. /package/layers/{shader → render/shader}/app/components/Pipeline/ChebyshevNoiseField.client.vue +0 -0
  528. /package/layers/{shader → render/shader}/app/components/Pipeline/Checkerboard.client.vue +0 -0
  529. /package/layers/{shader → render/shader}/app/components/Pipeline/ChromaticAberration.client.vue +0 -0
  530. /package/layers/{shader → render/shader}/app/components/Pipeline/ChromaticScreenWaves.client.vue +0 -0
  531. /package/layers/{shader → render/shader}/app/components/Pipeline/Circle.client.vue +0 -0
  532. /package/layers/{shader → render/shader}/app/components/Pipeline/Clouds.client.vue +0 -0
  533. /package/layers/{shader → render/shader}/app/components/Pipeline/ColorBurnBlend.client.vue +0 -0
  534. /package/layers/{shader → render/shader}/app/components/Pipeline/ColorDodgeBlend.client.vue +0 -0
  535. /package/layers/{shader → render/shader}/app/components/Pipeline/ColourRamp.client.vue +0 -0
  536. /package/layers/{shader → render/shader}/app/components/Pipeline/ComplexPlaneField.client.vue +0 -0
  537. /package/layers/{shader → render/shader}/app/components/Pipeline/ConicGradient.client.vue +0 -0
  538. /package/layers/{shader → render/shader}/app/components/Pipeline/CosinePalette.client.vue +0 -0
  539. /package/layers/{shader → render/shader}/app/components/Pipeline/CoverageAlpha.client.vue +0 -0
  540. /package/layers/{shader → render/shader}/app/components/Pipeline/Cross.client.vue +0 -0
  541. /package/layers/{shader → render/shader}/app/components/Pipeline/CurlNoise.client.vue +0 -0
  542. /package/layers/{shader → render/shader}/app/components/Pipeline/DarkenBlend.client.vue +0 -0
  543. /package/layers/{shader → render/shader}/app/components/Pipeline/DayNightCycle.client.vue +0 -0
  544. /package/layers/{shader → render/shader}/app/components/Pipeline/Desaturate.client.vue +0 -0
  545. /package/layers/{shader → render/shader}/app/components/Pipeline/DiagonalGradient.client.vue +0 -0
  546. /package/layers/{shader → render/shader}/app/components/Pipeline/DiamondGradient.client.vue +0 -0
  547. /package/layers/{shader → render/shader}/app/components/Pipeline/DifferenceBlend.client.vue +0 -0
  548. /package/layers/{shader → render/shader}/app/components/Pipeline/DivideBlend.client.vue +0 -0
  549. /package/layers/{shader → render/shader}/app/components/Pipeline/DomainWarpedNoise.client.vue +0 -0
  550. /package/layers/{shader → render/shader}/app/components/Pipeline/Dots.client.vue +0 -0
  551. /package/layers/{shader → render/shader}/app/components/Pipeline/DuoTone.client.vue +0 -0
  552. /package/layers/{shader → render/shader}/app/components/Pipeline/ExclusionBlend.client.vue +0 -0
  553. /package/layers/{shader → render/shader}/app/components/Pipeline/ExponentialFog.client.vue +0 -0
  554. /package/layers/{shader → render/shader}/app/components/Pipeline/Exposure.client.vue +0 -0
  555. /package/layers/{shader → render/shader}/app/components/Pipeline/FBMNoise.client.vue +0 -0
  556. /package/layers/{shader → render/shader}/app/components/Pipeline/FilmBurn.client.vue +0 -0
  557. /package/layers/{shader → render/shader}/app/components/Pipeline/FilmGrain.client.vue +0 -0
  558. /package/layers/{shader → render/shader}/app/components/Pipeline/FisheyeRay.client.vue +0 -0
  559. /package/layers/{shader → render/shader}/app/components/Pipeline/Flame.client.vue +0 -0
  560. /package/layers/{shader → render/shader}/app/components/Pipeline/FocalGradient.client.vue +0 -0
  561. /package/layers/{shader → render/shader}/app/components/Pipeline/Gamma.client.vue +0 -0
  562. /package/layers/{shader → render/shader}/app/components/Pipeline/GodRays.client.vue +0 -0
  563. /package/layers/{shader → render/shader}/app/components/Pipeline/GradientNoise.client.vue +0 -0
  564. /package/layers/{shader → render/shader}/app/components/Pipeline/Grain.client.vue +0 -0
  565. /package/layers/{shader → render/shader}/app/components/Pipeline/Grid.client.vue +0 -0
  566. /package/layers/{shader → render/shader}/app/components/Pipeline/Halation.client.vue +0 -0
  567. /package/layers/{shader → render/shader}/app/components/Pipeline/Halftone.client.vue +0 -0
  568. /package/layers/{shader → render/shader}/app/components/Pipeline/HardLightBlend.client.vue +0 -0
  569. /package/layers/{shader → render/shader}/app/components/Pipeline/Haze.client.vue +0 -0
  570. /package/layers/{shader → render/shader}/app/components/Pipeline/Hexagon.client.vue +0 -0
  571. /package/layers/{shader → render/shader}/app/components/Pipeline/Hue.client.vue +0 -0
  572. /package/layers/{shader → render/shader}/app/components/Pipeline/Invert.client.vue +0 -0
  573. /package/layers/{shader → render/shader}/app/components/Pipeline/LensFlare.client.vue +0 -0
  574. /package/layers/{shader → render/shader}/app/components/Pipeline/LightenBlend.client.vue +0 -0
  575. /package/layers/{shader → render/shader}/app/components/Pipeline/LinearGradient.client.vue +0 -0
  576. /package/layers/{shader → render/shader}/app/components/Pipeline/LinearGradient4.client.vue +0 -0
  577. /package/layers/{shader → render/shader}/app/components/Pipeline/LinearToSRGB.client.vue +0 -0
  578. /package/layers/{shader → render/shader}/app/components/Pipeline/Marble.client.vue +0 -0
  579. /package/layers/{shader → render/shader}/app/components/Pipeline/MixBlend.client.vue +0 -0
  580. /package/layers/{shader → render/shader}/app/components/Pipeline/MonochromeTint.client.vue +0 -0
  581. /package/layers/{shader → render/shader}/app/components/Pipeline/MultiplyBlend.client.vue +0 -0
  582. /package/layers/{shader → render/shader}/app/components/Pipeline/NoisyGradient.client.vue +0 -0
  583. /package/layers/{shader → render/shader}/app/components/Pipeline/NoisyGradientBlend.client.vue +0 -0
  584. /package/layers/{shader → render/shader}/app/components/Pipeline/OverlayBlend.client.vue +0 -0
  585. /package/layers/{shader → render/shader}/app/components/Pipeline/PaperTexture.client.vue +0 -0
  586. /package/layers/{shader → render/shader}/app/components/Pipeline/Polygon.client.vue +0 -0
  587. /package/layers/{shader → render/shader}/app/components/Pipeline/Posterise.client.vue +0 -0
  588. /package/layers/{shader → render/shader}/app/components/Pipeline/RadialGradient.client.vue +0 -0
  589. /package/layers/{shader → render/shader}/app/components/Pipeline/RayAutoOrbit.client.vue +0 -0
  590. /package/layers/{shader → render/shader}/app/components/Pipeline/RayMouseOrbit.client.vue +0 -0
  591. /package/layers/{shader → render/shader}/app/components/Pipeline/RayRotateX.client.vue +0 -0
  592. /package/layers/{shader → render/shader}/app/components/Pipeline/RayRotateY.client.vue +0 -0
  593. /package/layers/{shader → render/shader}/app/components/Pipeline/RayRotateZ.client.vue +0 -0
  594. /package/layers/{shader → render/shader}/app/components/Pipeline/RayTiltBasis.client.vue +0 -0
  595. /package/layers/{shader → render/shader}/app/components/Pipeline/RaymarchTunnel.client.vue +0 -0
  596. /package/layers/{shader → render/shader}/app/components/Pipeline/Rectangle.client.vue +0 -0
  597. /package/layers/{shader → render/shader}/app/components/Pipeline/ReinhardTonemap.client.vue +0 -0
  598. /package/layers/{shader → render/shader}/app/components/Pipeline/RidgedNoise.client.vue +0 -0
  599. /package/layers/{shader → render/shader}/app/components/Pipeline/Ring.client.vue +0 -0
  600. /package/layers/{shader → render/shader}/app/components/Pipeline/RingField.client.vue +0 -0
  601. /package/layers/{shader → render/shader}/app/components/Pipeline/RisographGrain.client.vue +0 -0
  602. /package/layers/{shader → render/shader}/app/components/Pipeline/RotatedGradientBlend.client.vue +0 -0
  603. /package/layers/{shader → render/shader}/app/components/Pipeline/SDFColourMask.client.vue +0 -0
  604. /package/layers/{shader → render/shader}/app/components/Pipeline/SDFRadialMask.client.vue +0 -0
  605. /package/layers/{shader → render/shader}/app/components/Pipeline/SRGBToLinear.client.vue +0 -0
  606. /package/layers/{shader → render/shader}/app/components/Pipeline/Saturation.client.vue +0 -0
  607. /package/layers/{shader → render/shader}/app/components/Pipeline/Scanlines.client.vue +0 -0
  608. /package/layers/{shader → render/shader}/app/components/Pipeline/ScreenBlend.client.vue +0 -0
  609. /package/layers/{shader → render/shader}/app/components/Pipeline/ShaderDebugger.client.vue +0 -0
  610. /package/layers/{shader → render/shader}/app/components/Pipeline/SimplexNoise.client.vue +0 -0
  611. /package/layers/{shader → render/shader}/app/components/Pipeline/SkyAtmosphere.client.vue +0 -0
  612. /package/layers/{shader → render/shader}/app/components/Pipeline/SoftLightBlend.client.vue +0 -0
  613. /package/layers/{shader → render/shader}/app/components/Pipeline/SolidColour.client.vue +0 -0
  614. /package/layers/{shader → render/shader}/app/components/Pipeline/SplitTone.client.vue +0 -0
  615. /package/layers/{shader → render/shader}/app/components/Pipeline/Star.client.vue +0 -0
  616. /package/layers/{shader → render/shader}/app/components/Pipeline/Starfield.client.vue +0 -0
  617. /package/layers/{shader → render/shader}/app/components/Pipeline/Stripes.client.vue +0 -0
  618. /package/layers/{shader → render/shader}/app/components/Pipeline/SubtractBlend.client.vue +0 -0
  619. /package/layers/{shader → render/shader}/app/components/Pipeline/TanhTonemap.client.vue +0 -0
  620. /package/layers/{shader → render/shader}/app/components/Pipeline/Threshold.client.vue +0 -0
  621. /package/layers/{shader → render/shader}/app/components/Pipeline/Tint.client.vue +0 -0
  622. /package/layers/{shader → render/shader}/app/components/Pipeline/Triangle.client.vue +0 -0
  623. /package/layers/{shader → render/shader}/app/components/Pipeline/UVAspectCorrect.client.vue +0 -0
  624. /package/layers/{shader → render/shader}/app/components/Pipeline/UVBreath.client.vue +0 -0
  625. /package/layers/{shader → render/shader}/app/components/Pipeline/UVBulge.client.vue +0 -0
  626. /package/layers/{shader → render/shader}/app/components/Pipeline/UVClamp.client.vue +0 -0
  627. /package/layers/{shader → render/shader}/app/components/Pipeline/UVColumnOffset.client.vue +0 -0
  628. /package/layers/{shader → render/shader}/app/components/Pipeline/UVFlipX.client.vue +0 -0
  629. /package/layers/{shader → render/shader}/app/components/Pipeline/UVFlipXY.client.vue +0 -0
  630. /package/layers/{shader → render/shader}/app/components/Pipeline/UVFlipY.client.vue +0 -0
  631. /package/layers/{shader → render/shader}/app/components/Pipeline/UVFractBand.client.vue +0 -0
  632. /package/layers/{shader → render/shader}/app/components/Pipeline/UVMousePull.client.vue +0 -0
  633. /package/layers/{shader → render/shader}/app/components/Pipeline/UVNoiseRotate.client.vue +0 -0
  634. /package/layers/{shader → render/shader}/app/components/Pipeline/UVNoiseWarp.client.vue +0 -0
  635. /package/layers/{shader → render/shader}/app/components/Pipeline/UVOrbit.client.vue +0 -0
  636. /package/layers/{shader → render/shader}/app/components/Pipeline/UVParallax.client.vue +0 -0
  637. /package/layers/{shader → render/shader}/app/components/Pipeline/UVPixelate.client.vue +0 -0
  638. /package/layers/{shader → render/shader}/app/components/Pipeline/UVPulse.client.vue +0 -0
  639. /package/layers/{shader → render/shader}/app/components/Pipeline/UVRipple.client.vue +0 -0
  640. /package/layers/{shader → render/shader}/app/components/Pipeline/UVRotate.client.vue +0 -0
  641. /package/layers/{shader → render/shader}/app/components/Pipeline/UVScale.client.vue +0 -0
  642. /package/layers/{shader → render/shader}/app/components/Pipeline/UVScroll.client.vue +0 -0
  643. /package/layers/{shader → render/shader}/app/components/Pipeline/UVScrollX.client.vue +0 -0
  644. /package/layers/{shader → render/shader}/app/components/Pipeline/UVScrollY.client.vue +0 -0
  645. /package/layers/{shader → render/shader}/app/components/Pipeline/UVShear.client.vue +0 -0
  646. /package/layers/{shader → render/shader}/app/components/Pipeline/UVSineWarpXY.client.vue +0 -0
  647. /package/layers/{shader → render/shader}/app/components/Pipeline/UVSwapAxes.client.vue +0 -0
  648. /package/layers/{shader → render/shader}/app/components/Pipeline/UVTile.client.vue +0 -0
  649. /package/layers/{shader → render/shader}/app/components/Pipeline/UVTwirl.client.vue +0 -0
  650. /package/layers/{shader → render/shader}/app/components/Pipeline/UVWarp.client.vue +0 -0
  651. /package/layers/{shader → render/shader}/app/components/Pipeline/VHSBleed.client.vue +0 -0
  652. /package/layers/{shader → render/shader}/app/components/Pipeline/ValueNoise.client.vue +0 -0
  653. /package/layers/{shader → render/shader}/app/components/Pipeline/Vibrance.client.vue +0 -0
  654. /package/layers/{shader → render/shader}/app/components/Pipeline/Vignette.client.vue +0 -0
  655. /package/layers/{shader → render/shader}/app/components/Pipeline/VoronoiEdges.client.vue +0 -0
  656. /package/layers/{shader → render/shader}/app/components/Pipeline/Water.client.vue +0 -0
  657. /package/layers/{shader → render/shader}/app/components/Pipeline/WaveBendLayer.client.vue +0 -0
  658. /package/layers/{shader → render/shader}/app/components/Pipeline/WaveColourLayer.client.vue +0 -0
  659. /package/layers/{shader → render/shader}/app/components/Pipeline/WhiteBalance.client.vue +0 -0
  660. /package/layers/{shader → render/shader}/app/components/Pipeline/Wood.client.vue +0 -0
  661. /package/layers/{shader → render/shader}/app/components/Preset/Aurora.client.vue +0 -0
  662. /package/layers/{shader → render/shader}/app/components/Preset/Flow.client.vue +0 -0
  663. /package/layers/{shader → render/shader}/app/components/Preset/GradientMesh.client.vue +0 -0
  664. /package/layers/{shader → render/shader}/app/components/Preset/Nebula.client.vue +0 -0
  665. /package/layers/{shader → render/shader}/app/components/Preset/Ocean.client.vue +0 -0
  666. /package/layers/{shader → render/shader}/app/components/Preset/ThemeAurora.client.vue +0 -0
  667. /package/layers/{shader → render/shader}/app/components/Preset/ThemeBubble.client.vue +0 -0
  668. /package/layers/{shader → render/shader}/app/components/Preset/ThemeFlow.client.vue +0 -0
  669. /package/layers/{shader → render/shader}/app/components/Preset/ThemeGradient.client.vue +0 -0
  670. /package/layers/{shader → render/shader}/app/components/Preset/ThemeLavaLamp.client.vue +0 -0
  671. /package/layers/{shader → render/shader}/app/components/Preset/ThemePlasma.client.vue +0 -0
  672. /package/layers/{shader → render/shader}/app/components/Preset/ThemeWave.client.vue +0 -0
  673. /package/layers/{shader → render/shader}/app/components/Shader/Background.client.vue +0 -0
  674. /package/layers/{shader → render/shader}/app/components/Shader/Debug.vue +0 -0
  675. /package/layers/{shader → render/shader}/app/components/Shader/Host.client.vue +0 -0
  676. /package/layers/{shader → render/shader}/app/components/Shader/Material.client.vue +0 -0
  677. /package/layers/{shader → render/shader}/app/components/Shader/Pipeline.client.vue +0 -0
  678. /package/layers/{shader → render/shader}/app/components/Shader/PipelineContext.vue +0 -0
  679. /package/layers/{shader → render/shader}/app/components/Shader/Runtime.client.vue +0 -0
  680. /package/layers/{shader → render/shader}/app/composables/useAmbientMaterials.ts +0 -0
  681. /package/layers/{shader → render/shader}/app/composables/useCSSColourUniform.ts +0 -0
  682. /package/layers/{shader → render/shader}/app/composables/useCSSFloatUniform.ts +0 -0
  683. /package/layers/{shader → render/shader}/app/composables/useMousePosition.ts +0 -0
  684. /package/layers/{shader → render/shader}/app/composables/useShader.ts +0 -0
  685. /package/layers/{shader → render/shader}/app/composables/useShaderColor.ts +0 -0
  686. /package/layers/{shader → render/shader}/app/composables/useShaderFloat.ts +0 -0
  687. /package/layers/{shader → render/shader}/app/composables/useShaderGraph.ts +0 -0
  688. /package/layers/{shader → render/shader}/app/composables/useShaderMixBlend.ts +0 -0
  689. /package/layers/{shader → render/shader}/app/composables/useShaderPerf.ts +0 -0
  690. /package/layers/{shader → render/shader}/app/composables/useShaderPipeline.ts +0 -0
  691. /package/layers/{shader → render/shader}/app/composables/useShaderRuntime.ts +0 -0
  692. /package/layers/{shader → render/shader}/app/composables/useShaderVec2.ts +0 -0
  693. /package/layers/{shader → render/shader}/app/composables/useSunDirectionUniform.ts +0 -0
  694. /package/layers/{shader → render/shader}/app/composables/useTSLNodes.ts +0 -0
  695. /package/layers/{shader → render/shader}/app/composables/useThemeColors.ts +0 -0
  696. /package/layers/{shader → render/shader}/app/composables/useThemePreset.ts +0 -0
  697. /package/layers/{shader → render/shader}/app/composables/useUniformWatchers.ts +0 -0
  698. /package/layers/{shader → render/shader}/app/composables/useUniforms.ts +0 -0
  699. /package/layers/{shader → render/shader}/app/plugins/shader.client.ts +0 -0
  700. /package/layers/{shader → render/shader}/app/shaders/common/blend.ts +0 -0
  701. /package/layers/{shader → render/shader}/app/shaders/common/complex.ts +0 -0
  702. /package/layers/{shader → render/shader}/app/shaders/common/effects.ts +0 -0
  703. /package/layers/{shader → render/shader}/app/shaders/common/grain.ts +0 -0
  704. /package/layers/{shader → render/shader}/app/shaders/common/index.ts +0 -0
  705. /package/layers/{shader → render/shader}/app/shaders/common/lighting.ts +0 -0
  706. /package/layers/{shader → render/shader}/app/shaders/common/math.ts +0 -0
  707. /package/layers/{shader → render/shader}/app/shaders/common/nodes.ts +0 -0
  708. /package/layers/{shader → render/shader}/app/shaders/common/noise.ts +0 -0
  709. /package/layers/{shader → render/shader}/app/shaders/common/noiseHelpers.ts +0 -0
  710. /package/layers/{shader → render/shader}/app/shaders/common/palette.ts +0 -0
  711. /package/layers/{shader → render/shader}/app/shaders/common/patterns.ts +0 -0
  712. /package/layers/{shader → render/shader}/app/shaders/common/sdf.ts +0 -0
  713. /package/layers/{shader → render/shader}/app/shaders/common/shapes.ts +0 -0
  714. /package/layers/{shader → render/shader}/app/shaders/common/tonemapping.ts +0 -0
  715. /package/layers/{shader → render/shader}/app/shaders/common/uv.ts +0 -0
  716. /package/layers/{shader → render/shader}/app/shaders/createMaterial.ts +0 -0
  717. /package/layers/{shader → render/shader}/app/shaders/index.ts +0 -0
  718. /package/layers/{shader → render/shader}/app/shaders/layers/aurora.ts +0 -0
  719. /package/layers/{shader → render/shader}/app/shaders/layers/index.ts +0 -0
  720. /package/layers/{shader → render/shader}/app/shaders/layers/meshGradient.ts +0 -0
  721. /package/layers/{shader → render/shader}/app/shaders/layers/shaderGradient.ts +0 -0
  722. /package/layers/{shader → render/shader}/app/shaders/layers/stripe.ts +0 -0
  723. /package/layers/{shader → render/shader}/app/shaders/types.ts +0 -0
  724. /package/layers/{shader → render/shader}/app/types/index.ts +0 -0
  725. /package/layers/{shader → render/shader}/app/types/materials.ts +0 -0
  726. /package/layers/{shader → render/shader}/app/types/renderer.ts +0 -0
  727. /package/layers/{shader → render/shader}/app/types/tsl.ts +0 -0
  728. /package/layers/{shader → render/shader}/app/types/uniforms.ts +0 -0
  729. /package/layers/{shader → render/shader}/app/utils/tsl/animation.ts +0 -0
  730. /package/layers/{shader → render/shader}/app/utils/tsl/color.ts +0 -0
  731. /package/layers/{shader → render/shader}/app/utils/tsl/index.ts +0 -0
  732. /package/layers/{shader → render/shader}/app/utils/tsl/math.ts +0 -0
  733. /package/layers/{shader → render/shader}/app/utils/tsl/noise.ts +0 -0
  734. /package/layers/{shader → render/shader}/app/utils/tsl/oklch.ts +0 -0
  735. /package/layers/{shader → render/shader}/app/utils/tsl/patterns.ts +0 -0
  736. /package/layers/{shader → render/shader}/app/utils/tsl/tween.ts +0 -0
  737. /package/layers/{shader → render/shader}/app/utils/tsl/uv.ts +0 -0
  738. /package/layers/{shader → render/shader}/nuxt.config.ts +0 -0
  739. /package/layers/{layout → structure/layout}/app/components/Layout/Section/Gallery.vue +0 -0
  740. /package/layers/{layout → structure/layout}/app/components/Layout/Section/Hero.vue +0 -0
  741. /package/layers/{layout → structure/layout}/app/components/Layout/Section/Split.vue +0 -0
  742. /package/layers/{layout → structure/layout}/app/composables/useGridConfig.ts +0 -0
  743. /package/layers/{layout → structure/layout}/app/types/index.ts +0 -0
  744. /package/layers/{layout → structure/layout}/tailwind.config.js +0 -0
  745. /package/layers/{navigation → structure/navigation}/app/assets/css/navigation.css +0 -0
  746. /package/layers/{navigation → structure/navigation}/app/components/Links/Group.vue +0 -0
  747. /package/layers/{navigation → structure/navigation}/app/components/Links/Named.vue +0 -0
  748. /package/layers/{navigation → structure/navigation}/app/components/Mast/Footer.vue +0 -0
  749. /package/layers/{navigation → structure/navigation}/app/components/Mast/NavModal.vue +0 -0
  750. /package/layers/{navigation → structure/navigation}/app/components/Site/Subtitle.vue +0 -0
  751. /package/layers/{navigation → structure/navigation}/app/components/Site/Title.vue +0 -0
  752. /package/layers/{navigation → structure/navigation}/app/composables/toast.ts +0 -0
  753. /package/layers/{navigation → structure/navigation}/app/composables/useSite.ts +0 -0
  754. /package/layers/{navigation → structure/navigation}/app/types/index.ts +0 -0
  755. /package/layers/{navigation → structure/navigation}/app/types/nav.ts +0 -0
  756. /package/layers/{core → structure/navigation}/app/utils/regex.ts +0 -0
  757. /package/layers/{navigation → structure/navigation}/app/utils/site.test.ts +0 -0
  758. /package/layers/{navigation → structure/navigation}/app/utils/site.ts +0 -0
  759. /package/layers/{navigation → structure/navigation}/package.json +0 -0
  760. /package/layers/{routing → structure/routing}/app/composables/useFeatureFlags.ts +0 -0
  761. /package/layers/{routing → structure/routing}/app/composables/useMaintenance.ts +0 -0
  762. /package/layers/{routing → structure/routing}/app/composables/useRoutingConfig.ts +0 -0
  763. /package/layers/{routing → structure/routing}/app/middleware/01.maintenance.global.ts +0 -0
  764. /package/layers/{routing → structure/routing}/app/middleware/02.governance.global.ts +0 -0
  765. /package/layers/{routing → structure/routing}/app/plugins/feature-flags.client.ts +0 -0
  766. /package/layers/{routing → structure/routing}/app/plugins/scroll-routing.client.ts +0 -0
  767. /package/layers/{routing → structure/routing}/app/types/index.ts +0 -0
  768. /package/layers/{routing → structure/routing}/app/types/route-meta.d.ts +0 -0
  769. /package/layers/{routing → structure/routing}/app/types/routing.ts +0 -0
  770. /package/layers/{routing → structure/routing}/app/utils/resolveRoute.test.ts +0 -0
  771. /package/layers/{routing → structure/routing}/app/utils/resolveRoute.ts +0 -0
  772. /package/layers/{routing → structure/routing}/server/api/feature-flags.get.ts +0 -0
@@ -0,0 +1,154 @@
1
+ # Layer Taxonomy Redesign — Part 2: Tier 2 (Structure)
2
+
3
+ ## Scope
4
+
5
+ Forensic audit of `layout`, `navigation`, `routing` — every real file read, every component/
6
+ composable/util traced to actual consumers via grep, decisions recorded below. Continues the
7
+ process established in `2026-08-30-layer-taxonomy-tier-0-1-design.md` (Tier 0/1). No
8
+ implementation yet — design-doc recording only, per the brainstorming skill's hard gate.
9
+
10
+ ## Tier 0 loose end — resolved
11
+
12
+ `core/app/assets/css/base.css` and `layout.css` (misleadingly named — lives in `core`, not
13
+ `layout`) were never actually read during the Tier 0 pass despite the doc claiming Tier 0 fully
14
+ closed. Read now: both are plain, correct CSS resets (`base.css` = typography/element defaults
15
+ under `@layer base`; `layout.css` = table/hr/media defaults under `@layer components`). Nothing
16
+ layout-specific, nothing that belongs in the `layout` tier. Correctly homed in `core`. No action.
17
+ Tier 0 is now genuinely fully closed.
18
+
19
+ ## Decisions
20
+
21
+ ### `layout`: delete `GridPlacement.ts` (dead code)
22
+
23
+ `app/composables/GridPlacement.ts` (`useGridPlacement`) — its own docstring admits it: "Currently
24
+ not used - BaseGridItem inlines this logic for better reactivity. Kept for reference or future
25
+ use." Confirmed via grep: zero consumers anywhere in the repo. `Grid/Item.vue` has its own
26
+ equivalent, more complete implementation in `utils/gridPlacementStyle.ts` (which **is** the real,
27
+ consumed implementation). Delete `GridPlacement.ts`.
28
+
29
+ ### `layout`: delete `Section/Title.vue` (`LayoutSectionTitle`) — exact duplicate of `LayoutPageHeader`
30
+
31
+ `Layout/Section/Title.vue`'s JSDoc header literally still reads "PageHeader - Standard page header
32
+ component... Used by PageContainer for visible page headers" — a copy-paste leftover from
33
+ `Layout/Page/Header.vue`. Confirmed via grep: `LayoutSectionTitle` has **zero** real consumers
34
+ anywhere in the repo; `LayoutPageHeader` is the real, consumed one (used by `LayoutPage`, two
35
+ playground pages, `StarterDesignSystem.vue`). Title.vue is also a strictly weaker variant — no
36
+ `back`-button variant, no `text-highlighted`/`text-muted` semantic color classes, wraps in
37
+ `LayoutGridItem` instead of being a plain block. Delete `Section/Title.vue`.
38
+
39
+ ### `layout`: `app.config.ts` — same defect pattern as `theme`/`routing`, fix identically
40
+
41
+ `layout/app/app.config.ts` uses a bare `export default {...}` (no `defineAppConfig()` wrapper),
42
+ and its `declare module '@nuxt/schema'` augmentation lives in a separate file
43
+ (`app/types/app-config.d.ts`) instead of the same file — both violate
44
+ `.claude/rules/nuxt-layers.md`'s documented rule (file must live in `app/`, use
45
+ `defineAppConfig()`, one `declare module` block, same file). This is the **same defect** already
46
+ found and fixed for `theme` in Tier 1, and independently found in `routing` here (see below).
47
+ Fix all three consistently: wrap in `defineAppConfig()`, merge the `declare module` block into
48
+ `app.config.ts` itself, delete the now-redundant `types/app-config.d.ts` files.
49
+
50
+ ### `routing`: `app.config.ts` — third instance of the same defect
51
+
52
+ `routing/app/app.config.ts` — bare `export default {...}` (no `defineAppConfig()`), augmentation
53
+ split into `app/types/app-config.d.ts`. Functionally fine defaults (`preset: 'simple'`, everything
54
+ off by default — sane), but same structural violation as `layout`/`theme`. Fold into the
55
+ consolidated fix above.
56
+
57
+ ### New finding while fixing the above: `core`'s own `app.config.ts` had the same defect
58
+
59
+ Not previously flagged — `core/app/app.config.ts` was also a bare `export default {...}` with its
60
+ `declare module` augmentation split into `core/app/types/app-config.d.ts`. Fixed identically
61
+ (`defineAppConfig()`, merged augmentation, deleted the `.d.ts`) while doing this batch. Also
62
+ dropped the `scrollGuard` config block and its type, now dead after `useScrollGuard`'s deletion.
63
+
64
+ ### `navigation`: `app.config.ts` — correct, no action
65
+
66
+ Uses `defineAppConfig()` + same-file `declare module` block correctly. This is the pattern the
67
+ other three layers should match. No changes needed.
68
+
69
+ ### `navigation`: `useMastNav` didn't use the `createModal` factory it sits next to — fixed
70
+
71
+ `app/utils/createModal.ts` is a well-designed generic factory (`createModal(Component)` →
72
+ `{ open, close, patch }`, wraps `createSharedComposable` + `useOverlay`) — real and consumed by
73
+ the playground's demo modals (`useConfirmModal`, `useInfoModal`, `useFormModal`) and documented in
74
+ `visual/Base/Modal.vue`'s own JSDoc as _the_ pattern to use. `useMastNav` (`mastNav.ts`) hand-rolled
75
+ the identical `overlay.create()` pattern manually instead of calling `createModal()`, plus wrapped
76
+ `open`/`close` with `useSmoothScroll().lockScrolling()`/`unlockScrolling()`.
77
+
78
+ **Resolved**: extended `createModal(component, options)` with optional `onOpen`/`onClose` hooks
79
+ (run before open / after close), and refactored `useMastNav` to `createModal(MastNavModal, {
80
+ onOpen, onClose })` — same 4 lines of scroll-lock logic, zero duplicated overlay wiring. Already
81
+ implemented in this pass (`createModal.ts`, `mastNav.ts`).
82
+
83
+ ### `navigation`/`routing`: `ResponsiveValue<T>` triplication — already-deliberate, no new action
84
+
85
+ Confirmed three separate `ResponsiveValue<T>` shapes exist: `core`'s canonical 5-key
86
+ (`default/sm/md/lg/xl`, documented as canonical for `core`+`ui`), `layout/types/layouts.ts`'s own
87
+ 5-key copy (explicitly documented in `core`'s own type file as intentionally _not_ migrated —
88
+ "stays as-is, used by GridConfig/GridPresetsItem"), and `gridPlacementStyle.ts`'s private
89
+ 3-key (`default/md/lg`, module-local, unexported, matches the Swiss Grid's own 3-tier column
90
+ system). All three are already-considered, deliberate divergences from prior sessions, not new
91
+ findings. No action — confirms Tier 0's summary was correct on this point.
92
+
93
+ ### `starter` layer — not in `.claude/rules/nuxt-layers.md`'s layer table, extends the dissolved `ui`
94
+
95
+ Found while grepping component usage: `layers/starter` (`extends: ['../core', '../ui', '../layout',
96
+ '../motion']`) exists on disk but is undocumented in the layer table, and depends on `ui`, which
97
+ Tier 1 decided to dissolve entirely. Out of scope for this Tier 2 pass (not `layout`/`navigation`/
98
+ `routing`), but flagging now since the `ui` dissolution will break its `extends` — needs its own
99
+ audit pass (either fold into a later tier or handle alongside the `ui` dissolution work item).
100
+
101
+ ## Confirmed correct, no action
102
+
103
+ - `layout`'s `Section/*` components (`Gallery`, `Grid`, `Hero`, `Sidebar`, `Split`, `Stack`) — all
104
+ real, distinct, pre-configured grid patterns with no overlap. `layout/CLAUDE.md`'s component
105
+ table is stale (missing `Grid.vue`, `Sidebar.vue`, `Stack.vue`, `Title.vue` from its listing) —
106
+ minor doc-drift, worth a pass when this tier's action items are implemented, not blocking.
107
+ - `Grid/Item.vue` (`LayoutGridItem`) — real, well-built, single canonical grid-placement
108
+ implementation (via `gridPlacementStyle.ts`), presets resolve correctly against
109
+ `app.config.ts`'s `layoutLayer.ui.grid.presets`.
110
+ - `Grid/Debug.vue` — real, Cmd/Ctrl+G toggle, correctly reads `core`'s `BREAKPOINT_PX` tokens.
111
+ - `Page/Header.vue`, `Page/index.vue` (`LayoutPage`) — real, canonical, correctly documented
112
+ (`LayoutPage` is a fragment, doesn't double up the grid root).
113
+ - `useGridConfig.ts` — real, clean, backwards-compat `enabled`→`mode` shim is intentional and
114
+ documented.
115
+ - `navigation`'s `Mast/Header.vue`, `Footer.vue`, `Nav.vue`, `NavModal.vue` — all real, all
116
+ consumed (verified via grep across playground + `starter`). `Header.vue` has a dead commented-out
117
+ `<template #toggle><MastNav /></template>` block — harmless doc cruft, can be deleted opportunistically.
118
+ - `Links/Group.vue`, `Links/Named.vue` — real, consumed.
119
+ - `Site/Title.vue`, `Site/Subtitle.vue`, `useSite.ts`, `utils/site.ts`, `utils/regex.ts`
120
+ (`splitSpaces`) — real, consumed chain (`useSite` → `resolveSiteConfig` → `splitSpaces`). Note:
121
+ `navigation` has its own `regex.ts` distinct from `core`'s now-deleted one — this one has a real
122
+ consumer, correctly kept.
123
+ - `useAppToast` (`toast.ts`) — real, thin wrapper over `useToast()`.
124
+ - `routing`'s entire composable/middleware/plugin/server chain (`useRoutingConfig`,
125
+ `useFeatureFlags`, `useMaintenance`, `resolveRoute`, both global middleware, both plugins, the
126
+ `feature-flags` API route) — genuinely well-built, self-consistent governance system. Presets
127
+ (`simple`/`marketing`/`product`/`enterprise`) are real and sane. No dead code found.
128
+ - `routing/app/middleware/02.governance.global.ts`'s `console.log` debug lines are gated behind
129
+ `config.debug` (default `false`) — not a leftover, intentional.
130
+ - `scroll-routing.client.ts`'s `fallow-ignore-next-line code-duplication` suppression — flags a
131
+ real near-duplicate of an `IntersectionObserver` pattern elsewhere (likely `scroll`/`motion`
132
+ tier). Out of scope for Tier 2; carry forward to the Tier 5 (Motion) pass.
133
+
134
+ ## Consolidated action list (Tier 2)
135
+
136
+ - [x] Delete `layout/app/composables/GridPlacement.ts` (dead, self-admitted unused)
137
+ - [x] Delete `layout/app/components/Layout/Section/Title.vue` (`LayoutSectionTitle`) — zero
138
+ consumers, exact-duplicate copy-paste of `LayoutPageHeader`
139
+ - [x] Fix `app.config.ts` structural defect in `layout` and `routing` (join `theme`/`core` from
140
+ Tier 0/1 — same 4th and 5th instance): wrapped in `defineAppConfig()`, merged
141
+ `declare module '@nuxt/schema'` into the same file, deleted the redundant
142
+ `app/types/app-config.d.ts` in each. `theme`'s own fix is still pending (Tier 1 item).
143
+ - [x] `useMastNav` refactored onto `createModal` with new `onOpen`/`onClose` hooks (implemented)
144
+ - [x] Delete dead commented-out `<template #toggle><MastNav /></template>` block in
145
+ `navigation/Mast/Header.vue`
146
+ - [x] Update `layout/CLAUDE.md`'s component table to list `Grid.vue`, `Sidebar.vue`, `Stack.vue`
147
+ (post `Title.vue` deletion, dropped from the listing)
148
+ - [ ] Separately audit `layers/starter` — extends the dissolved `ui` layer, needs its own decision
149
+ once `ui`'s dissolution is implemented
150
+
151
+ ## Not yet covered
152
+
153
+ Tiers 3 (Content), 4 (Data), 5 (Motion), 6 (Render), 7 (Delivery), and the Tier sub-layer/toggle
154
+ mechanism design are separate passes.
@@ -0,0 +1,109 @@
1
+ # Layer Taxonomy Redesign — Part 3: Tier 3 (Content)
2
+
3
+ ## Scope
4
+
5
+ Forensic audit of `content` (only member of Tier 3) — every real file read, every component/
6
+ composable traced to actual consumers via grep. Continues the process established in the Tier 0/1
7
+ and Tier 2 docs. Findings below were investigated, decided, and implemented in the same pass (user
8
+ explicitly asked to close the gaps rather than just record them).
9
+
10
+ ## Findings and resolution
11
+
12
+ ### Dead code — deleted
13
+
14
+ - `_jiti_test.ts` (layer root) — scratch diagnostic testing zod's `.def`/`._def` shape, leftover
15
+ from investigating the documented jiti/`moduleCache:false` bug. Zero consumers.
16
+ - `useBlogPost.ts`, `useGalleryItem.ts`, `usePortfolioItem.ts` (all singular) — zero consumers;
17
+ `NuxtContent/Detail.vue` calls the generic `useCollectionItem(collection, slug)` directly.
18
+ - `usePortfolioItems.ts` (plural) — zero consumers; superseded by the generic path below.
19
+ - `createPortfolioComposables.ts` — absorbed into the new generic composable (see below).
20
+ - `Gallery/Card.vue`, `Blog/Card.vue`, `Portfolio/Card.vue`, `Gallery/AmbientImage.vue` — all zero
21
+ consumers. Each was a complete, working component that got bypassed by an inline reimplementation
22
+ of the same markup in its real consumer (`Gallery/Grid.vue`, `Blog/List.vue` via `<UBlogPost>`,
23
+ `Portfolio/List.vue` via `<UPageCard>`, `Gallery/ImageDetail.vue`).
24
+ - `NuxtContent/Renderer.vue` — zero consumers; `NuxtContent/Detail.vue` uses `@nuxt/content`'s raw
25
+ `<ContentRenderer>` directly instead.
26
+
27
+ ### List-composable duplication — resolved with one generic composable
28
+
29
+ `docs/fallow-refactor/layers-content.md` (pre-existing repo doc) had already flagged
30
+ `useGalleryItems`/`usePortfolioItems` as near-duplicates. Confirmed broader than that doc knew:
31
+ `useBlogPosts`, `useGalleryItems`, and `createPortfolioComposables`'s `useItems` all reimplemented
32
+ the same sort → filter-by-tags → filter-by-boolean-field → limit pipeline, differing only in the
33
+ sort key (`date` vs `year`) and the boolean field (`draft` vs `featured`).
34
+
35
+ **Implemented**: one generic `useCollectionItems(collectionName, { tags, limit, sortKey,
36
+ sortDirection, filter })` (`composables/useCollectionItems.ts`) — `sortKey` and the boolean
37
+ `filter` predicate are duck-typed, so the same function serves both compile-time-known collections
38
+ and `Portfolio/List.vue`'s runtime `collection` prop. `useBlogPosts.ts`/`useGalleryItems.ts` are
39
+ now thin wrappers over it (per fallow's own recommendation); `Portfolio/List.vue` calls it directly
40
+ since it has no fixed domain to wrap. `createPortfolioComposables.ts` deleted, fully absorbed.
41
+
42
+ ### Missing `/blog` and `/portfolio` routes — resolved (design was misread, corrected by user)
43
+
44
+ Initial read: `content.vue`'s own demo page claimed _"the content layer provides default pages at
45
+ `/blog`, `/portfolio`, and `/gallery`... out of the box"_, but `layers/content` has no `app/pages/`
46
+ directory and the playground had no `/blog` or `/portfolio` routes — only `/gallery`.
47
+
48
+ **User correction**: the layer has never auto-registered routes — that was tried once and produced
49
+ stray unused pages, so it was deliberately rebuilt as components-only. "Out of the box with very
50
+ little coding" means each domain ships a `Page.vue` + `ItemPage.vue`/`SlugPage.vue` pair that the
51
+ consuming app copies into `app/pages/` as a 1–3 line wrapper — exactly what `gallery/index.vue` →
52
+ `<GalleryPage />` already does. The actual gap: `Portfolio` already had this `Page.vue`/
53
+ `ItemPage.vue` pair but the playground never copied the wrapper pages in; `Blog` didn't have the
54
+ pair built at all.
55
+
56
+ **Implemented**:
57
+
58
+ - Added `Blog/Page.vue` and `Blog/ItemPage.vue`, mirroring `Portfolio/Page.vue`/`ItemPage.vue`
59
+ exactly (`contentLayer.sections.blog` guard, `LayoutSection`/`LayoutGridItem` wrapper).
60
+ - Added the four thin playground route wrappers: `apps/playground/app/pages/blog/index.vue`,
61
+ `blog/[slug].vue`, `portfolio/index.vue`, `portfolio/[slug].vue` — same 1–3 line shape as the
62
+ existing `gallery/*` routes.
63
+ - Rewrote `content.vue`'s Architecture Note to describe the real, components-only/copy-in pattern
64
+ instead of the false "layer provides pages" claim.
65
+
66
+ ### `content`: `app.config.ts` structural defect — fixed (6th instance of the repo-wide pattern)
67
+
68
+ Same defect as `core`/`layout`/`routing` (Tiers 0-2): bare `export default {...}`, augmentation
69
+ split into a separate `app/types/app-config.d.ts`. Fixed identically: `defineAppConfig()`, merged
70
+ `declare module` into the same file, deleted the `.d.ts`. `theme`'s own instance of this (Tier 1)
71
+ is still pending — not touched here.
72
+
73
+ ## Confirmed correct, no action
74
+
75
+ - `content.config.ts` — all four collection schemas correctly mirrored into
76
+ `types/collections.d.ts`'s frontmatter augmentation, per the documented jiti constraint.
77
+ - `useContentData`, `useContentPage`, `useCollectionItem`, `useCollectionSurround` — real,
78
+ consumed, correctly layered.
79
+ - `NuxtContent/Detail.vue`, `NuxtContent/List.vue`, `NuxtContent/Surround.vue`, `NuxtContent/Toc.vue`
80
+ — real, well-built generic wrappers, correctly consumed by all three domains.
81
+ - `Gallery/Grid.vue`, `Gallery/Detail.vue`, `Gallery/ImageDetail.vue`, `Gallery/Lightbox.vue`,
82
+ `Gallery/Page.vue`, `Gallery/SlugPage.vue`, `Gallery/ImagePage.vue` — real, fully wired.
83
+ - `Portfolio/Detail.vue`, `Portfolio/ColorPalette.vue`, `Portfolio/Typography.vue`, `Blog/Article.vue`
84
+ — real, complete; now reachable via the routes added above.
85
+ - `content/Figure.vue` — MDC component invoked from markdown (`::figure`), not from Vue templates;
86
+ zero grep hits is expected and correct for this component category.
87
+ - `types/content.ts`, `types/collections.d.ts` — clean, kept in sync with `content.config.ts`.
88
+ - `nuxt-studio` conditional dev-only module load — real, deliberate optional peer dependency
89
+ pattern, correctly guarded.
90
+
91
+ ## Consolidated action list (Tier 3)
92
+
93
+ - [x] Delete `layers/content/_jiti_test.ts`
94
+ - [x] Fix `content/app/app.config.ts` structural defect
95
+ - [x] Delete `useBlogPost.ts`, `useGalleryItem.ts`, `usePortfolioItem.ts`, `usePortfolioItems.ts`,
96
+ `createPortfolioComposables.ts`
97
+ - [x] Delete `Gallery/Card.vue`, `Gallery/AmbientImage.vue`, `Blog/Card.vue`, `Portfolio/Card.vue`,
98
+ `NuxtContent/Renderer.vue`
99
+ - [x] Build generic `useCollectionItems`; migrate `useBlogPosts`/`useGalleryItems`/
100
+ `Portfolio/List.vue` onto it
101
+ - [x] Add `Blog/Page.vue` + `Blog/ItemPage.vue`; wire `/blog` + `/portfolio` playground routes
102
+ - [x] Fix `content.vue`'s stale "provides default pages... out of the box" claim
103
+
104
+ Tier 3 is fully closed — nothing left open.
105
+
106
+ ## Not yet covered
107
+
108
+ Tiers 4 (Data), 5 (Motion), 6 (Render), 7 (Delivery), and the Tier sub-layer/toggle mechanism
109
+ design are separate passes.
@@ -0,0 +1,124 @@
1
+ # Layer Taxonomy Redesign — Part 4: Tier 4 (Data)
2
+
3
+ ## Scope
4
+
5
+ Forensic audit of `database`, `auth`, `metadata` (+ 4 providers: `comicvine`, `openlibrary`,
6
+ `google-books`, `themoviedb`), `forms`, `mailer`. Every real file read, every composable/route
7
+ traced to actual consumers via grep.
8
+
9
+ ## Findings and resolution
10
+
11
+ ### `mailer`: runtime-config augmentation split + wrong module — fixed
12
+
13
+ `mailer/nuxt.config.ts` declared `runtimeConfig.mailerLayer` but had no `declare module
14
+ '@nuxt/schema'` block at all. Instead `server/types.d.ts` augmented `declare module 'nitropack' {
15
+ interface NitroRuntimeConfig }` — a different ambient module than every other layer uses, and
16
+ still split into a separate file. `database` (same tier) shows the correct pattern: augmentation
17
+ inline in `nuxt.config.ts` targeting `@nuxt/schema`.
18
+
19
+ **Fixed**: moved the augmentation into `mailer/nuxt.config.ts` as `declare module '@nuxt/schema' {
20
+ interface RuntimeConfig }`, deleted `server/types.d.ts`.
21
+
22
+ ### `forms`: app.config.ts structural defect — fixed (8th instance)
23
+
24
+ Same repeat defect as `core`/`layout`/`routing`/`content` (Tiers 0-3): bare `export default
25
+ {...}`, augmentation split into `app/types/app-config.d.ts`. Fixed identically:
26
+ `defineAppConfig()`, merged `declare module` into the same file, deleted the `.d.ts`.
27
+ `theme` and `shader`'s own instances of this are still pending — not this tier's layers.
28
+
29
+ ### `metadata` providers: `type RuntimeConfig` instead of `interface RuntimeConfig` — fixed (real bug)
30
+
31
+ `comicvine`, `google-books`, `themoviedb`'s `nuxt.config.ts` each declared:
32
+
33
+ ```ts
34
+ declare module '@nuxt/schema' {
35
+ type RuntimeConfig = { ... }
36
+ }
37
+ ```
38
+
39
+ A `type` alias inside a `declare module` block does not merge with the ambient `RuntimeConfig`
40
+ interface the way `interface RuntimeConfig { ... }` does — every other augmented `RuntimeConfig` in
41
+ the repo (`database`, `mailer`) uses `interface`. With `typeCheck: false` this was silently
42
+ masked, but it's wrong and would break under a real typecheck (duplicate/non-merging declaration
43
+ of the same global name three times). `openlibrary` has no runtime config (public API, no key) so
44
+ it was unaffected.
45
+
46
+ **Fixed**: `type RuntimeConfig` → `interface RuntimeConfig` in all three.
47
+
48
+ ## Confirmed correct, no action
49
+
50
+ - `database`: `useSql()`/`useDrizzle()` — minimal, correct, real. `nuxt.config.ts` augmentation
51
+ pattern is the reference example other layers should match.
52
+ - `auth`: `nuxt-auth-utils` + GitHub OAuth handler + opt-in `auth` middleware — real, correct,
53
+ appropriately thin (session/oauth runtimeConfig keys belong to the module, not custom, so no
54
+ augmentation needed).
55
+ - `metadata` core: `provider-registry.ts`, `cache.ts` (memory-storage `useStorage('metadata')`,
56
+ documented as non-persistent across restarts — acceptable for a demo/dev cache), `search.ts`
57
+ (parallel provider fan-out via `Promise.all` + per-provider try/catch + dedup + cache), all four
58
+ `server/api/metadata/*.get.ts`/`sync.post.ts` routes — real, correct, well-built.
59
+ - All four providers' `provider.ts`/`normalise.ts`/`types.ts` — real, correctly registered via
60
+ `server/plugins/*-register.ts`, correctly composed in the playground's `metadata.vue` (search,
61
+ provider registry list, live status check).
62
+ - `forms`: `useFormSchema`, `fieldConfigs` registry (`FieldType` derived from `keyof typeof`),
63
+ `Form/Contact.vue` + `Form/Field.vue`, `contact.post.ts` (rate-limited, hook-driven), all real
64
+ and correctly wired end to end (verified via the playground `/forms` and `/mailer` pages).
65
+ - `mailer`: `sendContactEmail`, `mailerLayerHooks` (hookable-based `contact:submitted/sent/failed`
66
+ hooks, consumed by `forms/server/api/contact.post.ts`) — real, correctly layered.
67
+
68
+ ## Resolved this pass (user decision)
69
+
70
+ ### `useMetadataSearch` — wired up, duplicate logic in the page deleted
71
+
72
+ User chose: wire the composable up rather than delete it. `useMetadataSearch` now takes
73
+ `mediaType`/`providers`/`limit` as `MaybeRef` and an optional `debounceMs` (default 300, via
74
+ `refDebounced` internally — closes the previously-flagged missing-debounce gap instead of leaving
75
+ it patched only at the call site). `metadata.vue` was migrated onto it: the manual
76
+ `refDebounced`/`$fetch`/loading/error state block is gone, replaced by
77
+ `useMetadataSearch(rawQuery, { mediaType, limit: 20 })` and `status`-derived `isLoading`/
78
+ `hasSearched`. Verified template usages (`results?.length`, `error.message`, `v-for="item in
79
+ results"`) still resolve correctly against the new `data`/`status`/`error` shape.
80
+
81
+ `useMetadataItem` remains unwired (no lookup/detail page exists) — user explicitly deferred that
82
+ decision (build a detail page vs. delete) rather than resolving it now. Still open.
83
+
84
+ ## Open — needs a decision, not implemented this pass
85
+
86
+ ### `useMetadataItem` — still no consumer
87
+
88
+ Deferred per above. Left in place, not deleted, pending a decision on whether a lookup/detail page
89
+ gets built for it.
90
+
91
+ ### Provider error-handling divergence (confirmed, pre-existing finding; deferred, low severity)
92
+
93
+ `comicvine` (`status_code !== 1` check) and `tmdb` (try/catch wrapper) throw `MetadataProviderError`
94
+ from their client layer. `openlibrary` and `google-books` let raw `$fetch` errors propagate
95
+ unwrapped (except `openlibrary`'s `lookupByIsbn`, which swallows to `null`). Harmless on the
96
+ `/search` path — `searchMetadata()` already catches per-provider and degrades gracefully — but
97
+ `/lookup` and `/sync` have no top-level try/catch, so an openlibrary/google-books failure surfaces
98
+ as an opaque Nitro fetch error instead of a clean `MetadataProviderError`-shaped one. Low severity,
99
+ cosmetic-on-error-message only. Left open — fixing means adding the same try/catch wrapper to two
100
+ more clients, a bounded fix but not done here pending direction on the composable question above
101
+ (same investigation pass, similar size).
102
+
103
+ ## Consolidated action list (Tier 4)
104
+
105
+ - [x] Fix `mailer/nuxt.config.ts` runtime-config augmentation (wrong module + split file)
106
+ - [x] Fix `forms/app/app.config.ts` structural defect (8th instance of the repeat pattern)
107
+ - [x] Fix `type RuntimeConfig` → `interface RuntimeConfig` in comicvine/google-books/tmdb
108
+ - [x] Wire `useMetadataSearch` into `metadata.vue` (with debounce fixed), delete duplicate logic
109
+ - [x] `useMetadataItem` — user decision: keep as-is, unwired. Intended as a standalone composable
110
+ for future projects to consume directly, not necessarily via a playground page. Not dead
111
+ code, not building a page for it.
112
+ - [x] Normalised openlibrary/google-books client error handling — wrapped `searchOpenLibrary`,
113
+ `lookupOpenLibraryWork`, `lookupOpenLibraryEdition`, `searchGoogleBooks`,
114
+ `fetchGoogleBooksVolume` in try/catch throwing `MetadataProviderError`, matching
115
+ comicvine/tmdb. Left `lookupByIsbn`'s swallow-to-null alone (deliberate not-found handling,
116
+ zero real callers either way).
117
+
118
+ ## Not yet covered
119
+
120
+ Tiers 5 (Motion), 6 (Render), 7 (Delivery). Also still pending from earlier tiers: `theme`'s and
121
+ `shader`'s app.config.ts structural defects, and the larger deferred Tier 0-2 structural items
122
+ (ui-layer dissolution, `.mastmain` rename, `theme`→`theming` rename, typography font-prop system,
123
+ breakpoint token consolidation, `AppContainer` clamp() conversion, `compatibilityVersion: 5` flip,
124
+ `error.vue` real implementation, `starter` layer audit).
@@ -0,0 +1,121 @@
1
+ # Layer Taxonomy Redesign — Part 5: Tier 5 (Motion)
2
+
3
+ ## Scope
4
+
5
+ Forensic audit of `scroll`, `animations`, `transitions`, `page-transitions`, `motion`. Every
6
+ real file read, every composable/component traced to actual consumers via grep.
7
+
8
+ ## Findings and resolution
9
+
10
+ ### `scroll` app.config: dead `lenis`/`gsapScrollTrigger` keys — fixed (user decision)
11
+
12
+ `app/app.config.ts` declared a `lenis` options block (duration, orientation, smoothWheel, etc.)
13
+ and a `gsapScrollTrigger` flag. `locomotive-scroll.client.ts` never read either — it hardcodes
14
+ its own `lenisOptions` (`lerp`, `smoothWheel`, `wheelMultiplier`) directly in the
15
+ `new LocomotiveScroll(...)` call and always calls `ScrollTrigger.update()` unconditionally.
16
+
17
+ User's call: Locomotive Scroll v5 already wraps Lenis internally, so a separate top-level
18
+ `lenis` config key is redundant. **Fixed**: stripped `lenis` and `gsapScrollTrigger` from
19
+ `app.config.ts`, keeping only `smoothScroll` (the one key actually read, by
20
+ `useSmoothScroll.ts` and the plugin).
21
+
22
+ ### `page-transitions`: reactive state never drove a real transition — fixed (user decision)
23
+
24
+ `usePageTransition()` / `page-transitions.client.ts` maintained a `page-transition:current`
25
+ `useState`, but nothing bound it to Nuxt's actual route-transition mechanism — no `:transition`
26
+ on `NuxtPage`, no `page-enter`/`page-leave` CSS. Real navigations never visually transitioned;
27
+ only the playground's `/page-transitions` demo page visualized the state via `MotionTransition`.
28
+
29
+ **Fixed**: added `layers/page-transitions/app/assets/css/page-transitions.css` (fade/slide/default
30
+ enter-leave classes, duration driven by a `--page-transition-duration` CSS custom property),
31
+ registered via `css:` in `nuxt.config.ts`. `usePageTransition()` now sets that CSS var reactively
32
+ via `watchEffect` (client-only). `apps/playground/app/app.vue` binds
33
+ `<NuxtPage :transition="{ name: transitionName, mode: 'out-in' }" />`, sourced from
34
+ `usePageTransition()`.
35
+
36
+ ### `animations` missing `transitions` layer dependency — fixed (real bug)
37
+
38
+ `Motion/Staggered.vue` applies `animate-${animation}` classes that are only defined in the
39
+ `transitions` layer's CSS (`animate-fade-in`, `animate-slide-in-up`, etc.), but
40
+ `animations/nuxt.config.ts` only declared `extends: ['../scroll']` — not `transitions`. Relying
41
+ on the playground's load order to happen to also load `transitions` is exactly the anti-pattern
42
+ the repo's own `nuxt-layers.md` rule warns against. **Fixed**: `extends: ['../scroll',
43
+ '../transitions']`.
44
+
45
+ ### `Motion/Staggered.vue`: `animation` prop default didn't match any real CSS class — fixed (real bug)
46
+
47
+ Default `animation = 'fadeIn'` produced class `animate-fadeIn`; the actual CSS (now confirmed
48
+ reachable per the fix above) only defines kebab-case classes (`animate-fade-in`,
49
+ `animate-slide-in-up`, ...). The mismatch was cosmetic in practice (the component's own
50
+ `.animated` rule unconditionally sets `opacity: 1` regardless of which named class matched), but
51
+ the specific keyframe animation silently never played. **Fixed**: default changed to `'fade-in'`,
52
+ prop doc comment clarifies it's a `transitions` layer `animate-*` suffix.
53
+
54
+ ### `Motion/Marquee.vue`: dead commented-out `<style>` block — fixed
55
+
56
+ Trailing HTML comment held a fully-commented-out, stale `<style scoped>` block (superseded by
57
+ Tailwind utility classes already on the template). **Fixed**: deleted.
58
+
59
+ ### `animations/app/types/` — dead duplicate type, unused alias — fixed
60
+
61
+ `types/animations.ts` exported `UseCountUpOptions`, but `useCountUp.ts` declares its own local
62
+ `UseCountUpOptions` and never imports the "shared" one — the exported type had zero consumers
63
+ anywhere in the repo (verified via grep), and the `#layers/animations/types` alias was also
64
+ unconsumed externally. **Fixed**: deleted `types/animations.ts` and `types/index.ts`, removed the
65
+ now-pointless alias entry from `nuxt.config.ts`. `useCountUp.ts`'s local type is untouched — one
66
+ producer, one consumer, no need for a shared export.
67
+
68
+ ### `motion` layer: fictional README + dead stub component — fixed (user decision)
69
+
70
+ `motion/README.md` documented an API that has never existed in this layer: `useMotion`,
71
+ `useTransition`, `useAnimation` composables, a `$motion` plugin, `<MotionTransition>` and
72
+ `<MotionStaggered>` described as if built here (they're real, but live in `transitions` and
73
+ `animations` respectively). `motion/app/components/Motion/index.vue` was a dead stub (just
74
+ wraps `<slot />`) with zero consumers anywhere. `TASKS.MD` was an unrelated stray to-do note.
75
+
76
+ **Fixed**: rewrote `README.md` to describe `motion` accurately — a pure orchestrator with no
77
+ components/composables of its own, just an `extends` list, plus a table pointing at which real
78
+ layer provides what. Deleted the dead stub component and `TASKS.MD`. Left
79
+ `docs/MarqueeText.md` as-is — it's accurate, and `motion` is a reasonable place for
80
+ orchestrator-level consumer docs even though the component itself lives in `animations`.
81
+
82
+ ## Confirmed correct, no action
83
+
84
+ - `scroll`: `useGsap`, `useSmoothScroll`, `useSectionProgress`, `useScrollSteps`,
85
+ `locomotive-scroll.client.ts`, `utils/scroll.ts` — all real, correctly cleaned up (GSAP
86
+ tweens/ScrollTriggers killed in `onUnmounted`, confirmed against prior-session fixes for the
87
+ HorizontalScroll/PinnedSection cleanup and FOUC bugs). All 8 `Motion/*` scroll components
88
+ (`HorizontalScroll`, `Parallax`, `PinnedSection`, `ScrollLink`, `ScrollProgress`,
89
+ `ScrollScene`, `ScrollStats`, `ScrollStep`) traced to real consumers in the playground
90
+ (`/scroll`, `/scrollytelling`, `/locomotive-scroll`, `/layout-blind-reveal`,
91
+ `/layout-stacking`, `/motion`).
92
+ - `animations`: `useMarqueeVelocity`, `useMarqueeCopies`, `useCountUp`, `useCursorFollower`,
93
+ `useMagneticElement`, `useTiltEffect`, `pointerMotion.ts` (shared spring-physics helper) — real,
94
+ correctly ticker-based (GSAP `gsap.ticker.add`/`remove` pairs, no leaks). All 9 `Motion/*`
95
+ components traced to consumers (`/animations`, `/motion`, `/motion-interactions`,
96
+ `/marquee-text`, `/locomotive-scroll`).
97
+ - `transitions`: `transitions.css` (transition/animation utility classes), `Motion/Transition.vue`
98
+ — real, consumed by `/transitions` and `/page-transitions`.
99
+ - `page-transitions`: `app.config.ts` structure already correct (colocated `declare module`,
100
+ 8th-tier-audit pattern holds here without needing a fix).
101
+ - `motion`: `nuxt.config.ts` — correct orchestrator `extends` list, no runtime code of its own
102
+ beyond what was fixed above.
103
+
104
+ ## Consolidated action list (Tier 5)
105
+
106
+ - [x] Strip dead `lenis`/`gsapScrollTrigger` keys from `scroll/app/app.config.ts`
107
+ - [x] Wire `usePageTransition` state to a real Nuxt page transition (CSS + `NuxtPage :transition`)
108
+ - [x] Add missing `transitions` dependency to `animations/nuxt.config.ts`
109
+ - [x] Fix `Motion/Staggered.vue`'s default `animation` prop to match real CSS class names
110
+ - [x] Delete dead commented-out `<style>` block in `Motion/Marquee.vue`
111
+ - [x] Delete unused `animations/app/types/` (dead duplicate type + unused alias)
112
+ - [x] Rewrite `motion/README.md`, delete dead `Motion/index.vue` stub and stray `TASKS.MD`
113
+
114
+ ## Not yet covered
115
+
116
+ Tiers 6 (Render: `canvas`, `shader`), 7 (Delivery). Also still pending from earlier tiers:
117
+ `theme`'s and `shader`'s `app.config.ts` structural defects, `useMetadataItem`'s fate, the
118
+ openlibrary/google-books provider error-handling divergence, and the larger deferred Tier 0-2
119
+ structural items (ui-layer dissolution, `.mastmain` rename, `theme`→`theming` rename, typography
120
+ font-prop system, breakpoint token consolidation, `AppContainer` clamp() conversion,
121
+ `compatibilityVersion: 5` flip, `error.vue` real implementation, `starter` layer audit).
@@ -0,0 +1,77 @@
1
+ # Layer Taxonomy Redesign — Part 6: Tier 6 (Render)
2
+
3
+ ## Scope
4
+
5
+ Forensic audit of `canvas`, `shader`. Cleanup-only pass (per user direction after Tier 5): fix
6
+ dead code, structural defects, and stale docs — no new feature wiring. `shader` is large (150+
7
+ `Pipeline/*.client.vue` effect components) — sampled several rather than reading all, since they
8
+ follow one consistent, correct pattern (`useShaderStage`/`useShaderPipelineContext`, TSL node
9
+ composition, reactive `watch` → `uniform.value` sync).
10
+
11
+ ## Findings and resolution
12
+
13
+ ### `shader` app.config.ts structural defect — fixed (9th instance, worst yet)
14
+
15
+ `app/app.config.ts` was a bare object export (no `defineAppConfig()`), and the split
16
+ `app/types/app-config.d.ts` augmented a phantom `shaderLayer?: { name?: string }` shape that
17
+ doesn't even match the real config key (`shader: { preferWebGPU, maxPixelRatio, defaultQuality,
18
+ debugPanel, toneMapping }`) — worse than prior instances of this repeat pattern, since the type
19
+ augmentation was augmenting the wrong shape entirely. **Fixed**: `defineAppConfig()` wrapper,
20
+ correct inline `declare module` matching the real `shader` key, deleted `app-config.d.ts`.
21
+
22
+ ### Two dead one-liner exports in `canvas` — deleted
23
+
24
+ `getQualitySettings()` and `useGlobalShaderTime()` (a global singleton wrapper around
25
+ `useShaderTime`) had zero consumers anywhere in the repo. **Fixed**: deleted both, removed the
26
+ now-unused `QualitySettings` type import from `useRendererCapabilities.ts`.
27
+
28
+ ### `shader/AGENTS.MD` — stale, describes a structure that doesn't exist — fixed
29
+
30
+ Documented a `.tsl`/GLSL file-based shader structure (`vertexPlane.tsl`, `noise3D.tsl`, etc.)
31
+ that was never built — the real system is TSL-function-based `.ts` modules
32
+ (`shaders/common/*.ts`, `shaders/layers/*.ts`, `three/tsl` node functions). **Fixed**: rewrote to
33
+ a short, accurate structure map of the real `app/` tree.
34
+
35
+ ## Left open (user decision — not implemented this pass)
36
+
37
+ ### 8 shader composables with zero consumers
38
+
39
+ `useShaderFloat`, `useShaderVec2`, `useCSSColourUniform`, `useCSSFloatUniform`,
40
+ `useSunDirectionUniform`, `useShaderPerf`, `useTSLNodes`, and the whole `useUniforms.ts` file
41
+ (`useUniforms`/`useUniform`/`useColorUniform`/`useVector2Uniform`/`useVector3Uniform`) — all
42
+ well-built, none wired into any component. Real, actively-used equivalents exist alongside some
43
+ of them (`useShaderColor`, `useAmbientMaterials`, `useShaderMixBlend`, `useThemeColors`), which
44
+ suggested some of these are superseded scaffolding — but given the size of the shader library
45
+ (150+ components still growing) this could equally be toolkit-ahead-of-use rather than dead code.
46
+ **User's call: leave them, don't delete.** Not touched.
47
+
48
+ ## Confirmed correct, no action
49
+
50
+ - `canvas`: `nuxt.config.ts` (Three.js WebGPU SSR stub via custom Vite plugin, TresJS module
51
+ config), `ShaderCanvas.vue`, `useRendererCapabilities` (renderer detection, `useAutoQuality`),
52
+ `useShaderTime`, `types/renderer.ts` — real, correctly consumed by `apps/playground/app/pages/canvas.vue`
53
+ and `shader.client.ts`.
54
+ - `shader`: `nuxt.config.ts`, `useShader`/`useBasicShader`/`useStandardShader` (node material
55
+ factory, cleanup-on-unmount), `useShaderRuntime`/`useShaderRuntimeContext` (provide/inject
56
+ global runtime), `useShaderPipeline`/`useShaderStage`/`useShaderPipelineContext` (provide/inject
57
+ stage registry, versioned for recompilation), `useUniformWatchers`'s `watchUniformProp`
58
+ (confirmed consumed by 7 `Material/*.client.vue` components), `useAmbientMaterials`,
59
+ `useShaderColor`/`useShaderMixBlend`/`useThemeColors`/`useThemePreset`/`useMousePosition` (all
60
+ confirmed real consumers), `shader.client.ts` plugin, `shader.css`, sampled `Pipeline/*`
61
+ components (`LinearGradient`, `UVRotate`) — consistent, correct pattern across the sample.
62
+
63
+ ## Consolidated action list (Tier 6)
64
+
65
+ - [x] Fix `shader/app/app.config.ts` structural defect (9th instance, was augmenting the wrong shape)
66
+ - [x] Delete dead `getQualitySettings()`/`useGlobalShaderTime()` from `canvas`
67
+ - [x] Rewrite stale `shader/AGENTS.MD`
68
+ - [ ] 8 zero-consumer shader composables — left open, user chose not to delete
69
+
70
+ ## Not yet covered
71
+
72
+ Tier 7 (Delivery). Also still pending from earlier tiers: `theme`'s `app.config.ts` structural
73
+ defect, `useMetadataItem`'s fate, openlibrary/google-books provider error-handling divergence,
74
+ and the larger deferred Tier 0-2 structural items (ui-layer dissolution, `.mastmain` rename,
75
+ `theme`→`theming` rename, typography font-prop system, breakpoint token consolidation,
76
+ `AppContainer` clamp() conversion, `compatibilityVersion: 5` flip, `error.vue` real
77
+ implementation, `starter` layer audit).