kmcom-nuxt-layers 2.7.5 → 4.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 (773) 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 +30 -1
  37. package/layers/core/app/assets/css/layout.css +0 -7
  38. package/layers/core/app/assets/css/tokens/breakpoints.css +13 -0
  39. package/layers/core/app/assets/css/tokens/container.css +36 -0
  40. package/layers/core/app/assets/css/tokens/spacing-fluid.css +25 -0
  41. package/layers/core/app/components/AppContainer.vue +32 -0
  42. package/layers/core/app/components/Element.test.ts +90 -0
  43. package/layers/core/app/components/Element.vue +78 -0
  44. package/layers/core/app/components/ElementTw.test.ts +64 -0
  45. package/layers/core/app/components/ElementTw.vue +86 -0
  46. package/layers/core/app/components/LoadingScreen.vue +0 -15
  47. package/layers/core/app/composables/useElementGrid.test.ts +33 -0
  48. package/layers/core/app/composables/useElementGrid.ts +29 -0
  49. package/layers/core/app/composables/useElementInteraction.test.ts +27 -0
  50. package/layers/core/app/composables/useElementInteraction.ts +17 -0
  51. package/layers/core/app/composables/useElementLayout.test.ts +41 -0
  52. package/layers/core/app/composables/useElementLayout.ts +26 -0
  53. package/layers/core/app/composables/useElementSizing.test.ts +39 -0
  54. package/layers/core/app/composables/useElementSizing.ts +25 -0
  55. package/layers/core/app/composables/useElementStyle.ts +65 -0
  56. package/layers/core/app/composables/useElementSurface.test.ts +33 -0
  57. package/layers/core/app/composables/useElementSurface.ts +21 -0
  58. package/layers/core/app/composables/useErrorLog.ts +6 -4
  59. package/layers/core/app/composables/useLayoutAttrs.test.ts +47 -0
  60. package/layers/core/app/composables/useLayoutAttrs.ts +94 -0
  61. package/layers/core/app/composables/useLoading.ts +3 -1
  62. package/layers/core/app/error.vue +27 -57
  63. package/layers/core/app/pages/[...slug].vue +1 -29
  64. package/layers/core/app/plugins/loading.client.ts +0 -6
  65. package/layers/core/app/types/element.ts +25 -0
  66. package/layers/core/app/types/index.ts +0 -1
  67. package/layers/core/app/types/notFound.ts +24 -0
  68. package/layers/core/app/types/responsive.ts +15 -0
  69. package/layers/core/app/types/responsive.type-test.ts +22 -0
  70. package/layers/core/app/types/runtime-config.ts +1 -17
  71. package/layers/core/app/types/tokens.ts +29 -0
  72. package/layers/core/app/utils/index.ts +4 -2
  73. package/layers/core/app/utils/scrollGuardClamp.test.ts +36 -0
  74. package/layers/core/app/utils/scrollGuardClamp.ts +22 -0
  75. package/layers/core/app/utils/styleToTailwindClasses.test.ts +31 -0
  76. package/layers/core/app/utils/styleToTailwindClasses.ts +16 -0
  77. package/layers/core/nuxt.config.ts +15 -11
  78. package/layers/core/package.json +2 -1
  79. package/layers/{auth → data/auth}/nuxt.config.ts +1 -1
  80. package/layers/{auth → data/auth}/package.json +1 -1
  81. package/layers/{baseline → data/auth}/tsconfig.json +1 -1
  82. package/layers/{database → data/database}/nuxt.config.ts +1 -1
  83. package/layers/{database → data/database}/package.json +1 -1
  84. package/layers/{database → data/database}/tsconfig.json +1 -1
  85. package/layers/{forms/app/types/app-config.d.ts → data/forms/app/app.config.ts} +4 -0
  86. package/layers/{forms → data/forms}/package.json +1 -1
  87. package/layers/{forms → data/forms}/server/api/forms/status.get.ts +3 -1
  88. package/layers/{animations → data/forms}/tsconfig.json +1 -1
  89. package/layers/{mailer → data/mailer}/nuxt.config.ts +11 -1
  90. package/layers/{mailer → data/mailer}/package.json +1 -1
  91. package/layers/{auth → data/mailer}/tsconfig.json +1 -1
  92. package/layers/data/metadata/app/composables/useMetadataItem.ts +18 -0
  93. package/layers/data/metadata/app/composables/useMetadataSearch.ts +37 -0
  94. package/layers/{metadata → data/metadata}/nuxt.config.ts +1 -1
  95. package/layers/{metadata → data/metadata}/package.json +1 -1
  96. package/layers/{metadata → data/metadata}/providers/comicvine/nuxt.config.ts +1 -1
  97. package/layers/{metadata → data/metadata}/providers/comicvine/package.json +1 -1
  98. package/layers/data/metadata/providers/comicvine/tsconfig.json +7 -0
  99. package/layers/{metadata → data/metadata}/providers/google-books/nuxt.config.ts +1 -1
  100. package/layers/{metadata → data/metadata}/providers/google-books/package.json +1 -1
  101. package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/client.ts +10 -2
  102. package/layers/data/metadata/providers/google-books/tsconfig.json +7 -0
  103. package/layers/{metadata → data/metadata}/providers/openlibrary/package.json +1 -1
  104. package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/client.ts +23 -11
  105. package/layers/data/metadata/providers/openlibrary/tsconfig.json +7 -0
  106. package/layers/{metadata → data/metadata}/providers/themoviedb/nuxt.config.ts +1 -1
  107. package/layers/{metadata → data/metadata}/providers/themoviedb/package.json +1 -1
  108. package/layers/{metadata → data/metadata}/providers/themoviedb/tsconfig.json +1 -1
  109. package/layers/{metadata → data/metadata}/server/utils/metadata/search.ts +11 -4
  110. package/layers/data/metadata/tsconfig.json +7 -0
  111. package/layers/{feeds → delivery/feeds}/app/components/Feeds/Index.vue +6 -2
  112. package/layers/{feeds → delivery/feeds}/app/components/Feeds/RouteCard.vue +2 -0
  113. package/layers/{feeds → delivery/feeds}/app/plugins/feed-head.ts +6 -2
  114. package/layers/{feeds → delivery/feeds}/app/utils/feed-catalog.ts +8 -6
  115. package/layers/{feeds → delivery/feeds}/nuxt.config.ts +1 -1
  116. package/layers/{feeds → delivery/feeds}/package.json +1 -1
  117. package/layers/{feeds → delivery/feeds}/server/utils/feed-config.ts +1 -1
  118. package/layers/{feeds → delivery/feeds}/server/utils/feed-service.ts +2 -1
  119. package/layers/delivery/feeds/tsconfig.json +7 -0
  120. package/layers/{scripts → delivery/scripts}/app/composables/useAnalytics.ts +3 -1
  121. package/layers/{scripts → delivery/scripts}/app/composables/useGtm.ts +8 -2
  122. package/layers/{scripts → delivery/scripts}/app/composables/useScriptsConsent.ts +4 -1
  123. package/layers/{scripts → delivery/scripts}/app/utils/scriptClients.ts +19 -0
  124. package/layers/{scripts → delivery/scripts}/nuxt.config.ts +7 -2
  125. package/layers/{scripts → delivery/scripts}/package.json +3 -2
  126. package/layers/delivery/scripts/tsconfig.json +7 -0
  127. package/layers/delivery/seo/app/composables/useSeoConfig.ts +8 -0
  128. package/layers/{seo → delivery/seo}/app/utils/seoConfig.test.ts +2 -2
  129. package/layers/{seo → delivery/seo}/app/utils/seoConfig.ts +2 -2
  130. package/layers/{seo → delivery/seo}/nuxt.config.ts +1 -1
  131. package/layers/{seo → delivery/seo}/package.json +1 -1
  132. package/layers/delivery/seo/tsconfig.json +7 -0
  133. package/layers/design-system/theming/app/app.config.ts +35 -0
  134. package/layers/design-system/theming/app/assets/css/tokens.css +67 -0
  135. package/layers/{theme → design-system/theming}/app/components/ThemePicker/AccentButton.vue +3 -22
  136. package/layers/{theme → design-system/theming}/app/components/ThemePicker/Colors.vue +3 -4
  137. package/layers/{theme → design-system/theming}/app/composables/useAccentColor.ts +5 -2
  138. package/layers/{theme → design-system/theming}/app/composables/useThemeContrast.ts +1 -1
  139. package/layers/{theme → design-system/theming}/app/composables/useThemeMotion.ts +1 -1
  140. package/layers/{theme → design-system/theming}/app/composables/useThemeTransparency.ts +1 -1
  141. package/layers/{theme → design-system/theming}/app/plugins/theme.client.ts +2 -1
  142. package/layers/design-system/theming/app/types/designSystem.ts +102 -0
  143. package/layers/design-system/theming/app/types/semanticColor.ts +20 -0
  144. package/layers/design-system/theming/app/types/theme.ts +12 -0
  145. package/layers/design-system/theming/app/utils/accentPalette.ts +28 -0
  146. package/layers/design-system/theming/app/utils/themeAdapter.ts +20 -0
  147. package/layers/design-system/theming/nuxt.config.ts +52 -0
  148. package/layers/{ui → design-system/theming}/package.json +5 -6
  149. package/layers/{theme → design-system/theming}/server/plugins/theme-fouc.ts +2 -0
  150. package/layers/{theme → design-system/theming}/server/utils/accent-css.ts +2 -2
  151. package/layers/{theme → design-system/theming}/tsconfig.json +1 -1
  152. package/layers/{typography → design-system/typography}/app/assets/css/typography.css +9 -0
  153. package/layers/design-system/typography/app/components/Typography/CodeBlock.vue +65 -0
  154. package/layers/{typography → design-system/typography}/app/components/Typography/Headline.vue +16 -31
  155. package/layers/{typography/app/components/Typography/HeadlineScreen.vue → design-system/typography/app/components/Typography/QuoteBlock.vue} +27 -29
  156. package/layers/design-system/typography/app/components/Typography/RepeatText.vue +147 -0
  157. package/layers/{typography → design-system/typography}/app/components/Typography/index.vue +6 -4
  158. package/layers/design-system/typography/app/composables/repeatFill.ts +51 -0
  159. package/layers/{typography → design-system/typography}/app/composables/typography.ts +4 -0
  160. package/layers/{typography → design-system/typography}/app/types/typography.ts +8 -0
  161. package/layers/{typography → design-system/typography}/nuxt.config.ts +1 -1
  162. package/layers/design-system/typography/tsconfig.json +7 -0
  163. package/layers/{visual → design-system/visual}/app/app.config.ts +2 -2
  164. package/layers/{visual → design-system/visual}/app/components/Accent/Blob.vue +1 -1
  165. package/layers/{visual → design-system/visual}/app/components/Accent/Scene.vue +2 -3
  166. package/layers/{visual → design-system/visual}/app/components/Gradient/Background.vue +2 -2
  167. package/layers/{visual → design-system/visual}/app/components/Gradient/Text.vue +2 -2
  168. package/layers/{visual → design-system/visual}/app/composables/gradient.ts +1 -1
  169. package/layers/design-system/visual/app/types/breakpoints.ts +67 -0
  170. package/layers/{visual → design-system/visual}/app/types/media.ts +0 -11
  171. package/layers/{visual → design-system/visual}/nuxt.config.ts +1 -1
  172. package/layers/design-system/visual/tsconfig.json +7 -0
  173. package/layers/{animations → motion/animations}/app/components/Motion/Marquee.vue +0 -7
  174. package/layers/{animations → motion/animations}/app/components/Motion/Staggered.vue +4 -1
  175. package/layers/{animations → motion/animations}/nuxt.config.ts +1 -2
  176. package/layers/motion/animations/tsconfig.json +7 -0
  177. package/layers/motion/{package.json → motion/package.json} +1 -1
  178. package/layers/motion/{tsconfig.json → motion/tsconfig.json} +1 -1
  179. package/layers/motion/page-transitions/app/assets/css/page-transitions.css +30 -0
  180. package/layers/{page-transitions → motion/page-transitions}/app/composables/usePageTransition.ts +14 -2
  181. package/layers/{page-transitions → motion/page-transitions}/app/plugins/page-transitions.client.ts +5 -2
  182. package/layers/{page-transitions → motion/page-transitions}/nuxt.config.ts +3 -1
  183. package/layers/motion/page-transitions/tsconfig.json +7 -0
  184. package/layers/motion/scroll/app/app.config.ts +13 -0
  185. package/layers/{scroll → motion/scroll}/app/composables/useSmoothScroll.ts +2 -1
  186. package/layers/{scroll → motion/scroll}/app/plugins/locomotive-scroll.client.ts +2 -1
  187. package/layers/{scroll → motion/scroll}/nuxt.config.ts +1 -1
  188. package/layers/motion/scroll/tsconfig.json +7 -0
  189. package/layers/{transitions → motion/transitions}/nuxt.config.ts +1 -1
  190. package/layers/motion/transitions/tsconfig.json +7 -0
  191. package/layers/{canvas → render/canvas}/app/composables/useRendererCapabilities.ts +0 -8
  192. package/layers/{canvas → render/canvas}/app/composables/useShaderTime.ts +0 -12
  193. package/layers/{canvas → render/canvas}/nuxt.config.ts +1 -4
  194. package/layers/{canvas → render/canvas}/package.json +3 -2
  195. package/layers/{canvas → render/canvas}/tsconfig.json +1 -1
  196. package/layers/render/shader/app/app.config.ts +21 -0
  197. package/layers/{shader → render/shader}/app/shaders/layers/paperShading.ts +1 -1
  198. package/layers/{shader → render/shader}/package.json +1 -1
  199. package/layers/render/shader/tsconfig.json +7 -0
  200. package/layers/structure/grid/app/app.config.ts +92 -0
  201. package/layers/structure/grid/app/assets/css/grid.css +38 -0
  202. package/layers/structure/grid/app/composables/useGridTracks.test.ts +94 -0
  203. package/layers/structure/grid/app/composables/useGridTracks.ts +74 -0
  204. package/layers/structure/grid/app/types/tracks.test.ts +32 -0
  205. package/layers/structure/grid/app/types/tracks.ts +18 -0
  206. package/layers/structure/grid/app/utils/placement.test.ts +19 -0
  207. package/layers/structure/grid/app/utils/placement.ts +15 -0
  208. package/layers/structure/grid/nuxt.config.ts +22 -0
  209. package/layers/{theme → structure/grid}/package.json +3 -3
  210. package/layers/structure/layout/app/app.config.ts +116 -0
  211. package/layers/{layout → structure/layout}/app/assets/css/layout/grids.css +11 -6
  212. package/layers/structure/layout/app/assets/css/layout.css +1 -0
  213. package/layers/structure/layout/app/components/HStack.vue +41 -0
  214. package/layers/{layout → structure/layout}/app/components/Layout/Grid/Debug.vue +5 -3
  215. package/layers/{layout → structure/layout}/app/components/Layout/Grid/Item.vue +4 -10
  216. package/layers/{layout → structure/layout}/app/components/Layout/Main.vue +3 -3
  217. package/layers/{layout → structure/layout}/app/components/Layout/Page/Header.vue +1 -1
  218. package/layers/{layout → structure/layout}/app/components/Layout/Page/index.vue +3 -3
  219. package/layers/{layout → structure/layout}/app/components/Layout/Section/index.vue +1 -1
  220. package/layers/structure/layout/app/components/Spacer.vue +21 -0
  221. package/layers/structure/layout/app/components/VStack.vue +37 -0
  222. package/layers/structure/layout/app/components/ZStack.vue +28 -0
  223. package/layers/structure/layout/app/layouts/default.vue +5 -0
  224. package/layers/{layout → structure/layout}/app/types/layouts.ts +2 -3
  225. package/layers/{layout → structure/layout}/app/utils/gridPlacementStyle.test.ts +7 -42
  226. package/layers/{layout → structure/layout}/app/utils/gridPlacementStyle.ts +4 -18
  227. package/layers/{layout → structure/layout}/nuxt.config.ts +1 -1
  228. package/layers/{layout → structure/layout}/package.json +1 -1
  229. package/layers/structure/layout/tsconfig.json +7 -0
  230. package/layers/{navigation → structure/navigation}/app/app.config.ts +4 -6
  231. package/layers/structure/navigation/app/components/Mast/Header.vue +11 -0
  232. package/layers/{navigation → structure/navigation}/app/components/Mast/Nav.vue +1 -1
  233. package/layers/structure/navigation/app/composables/mastNav.ts +15 -0
  234. package/layers/{navigation → structure/navigation}/app/utils/createModal.ts +22 -3
  235. package/layers/{navigation → structure/navigation}/nuxt.config.ts +1 -1
  236. package/layers/structure/navigation/tsconfig.json +7 -0
  237. package/layers/{routing → structure/routing}/app/app.config.ts +11 -2
  238. package/layers/{routing → structure/routing}/nuxt.config.ts +1 -1
  239. package/layers/{routing → structure/routing}/package.json +1 -1
  240. package/layers/structure/routing/tsconfig.json +7 -0
  241. package/package.json +56 -56
  242. package/docs/fallow-refactor/layers-ui.md +0 -27
  243. package/layers/animations/app/types/animations.ts +0 -8
  244. package/layers/animations/app/types/index.ts +0 -1
  245. package/layers/baseline/nuxt.config.ts +0 -24
  246. package/layers/baseline/package.json +0 -14
  247. package/layers/content/app/components/Blog/Card.vue +0 -43
  248. package/layers/content/app/components/Gallery/AmbientImage.vue +0 -44
  249. package/layers/content/app/components/Gallery/Card.vue +0 -43
  250. package/layers/content/app/components/NuxtContent/Renderer.vue +0 -14
  251. package/layers/content/app/components/Portfolio/Card.vue +0 -43
  252. package/layers/content/app/composables/createPortfolioComposables.ts +0 -50
  253. package/layers/content/app/composables/useBlogPost.ts +0 -3
  254. package/layers/content/app/composables/useGalleryItem.ts +0 -3
  255. package/layers/content/app/composables/usePortfolioItem.ts +0 -3
  256. package/layers/content/app/composables/usePortfolioItems.ts +0 -26
  257. package/layers/content/app/types/app-config.d.ts +0 -14
  258. package/layers/core/app/assets/css-backup.zip +0 -0
  259. package/layers/core/app/composables/useEnv.ts +0 -23
  260. package/layers/core/app/composables/useScrollGuard.ts +0 -243
  261. package/layers/core/app/plugins/feature-detection.client.ts +0 -34
  262. package/layers/core/app/plugins/init.ts +0 -192
  263. package/layers/core/app/plugins/scroll-guard.client.ts +0 -56
  264. package/layers/core/app/types/app-config.d.ts +0 -63
  265. package/layers/core/app/types/scroll-guard.ts +0 -25
  266. package/layers/core/app/utils/helpers.test.ts +0 -55
  267. package/layers/core/app/utils/helpers.ts +0 -248
  268. package/layers/core/app/utils/regex.test.ts +0 -31
  269. package/layers/feeds/tsconfig.json +0 -7
  270. package/layers/forms/app/app.config.ts +0 -3
  271. package/layers/forms/tsconfig.json +0 -7
  272. package/layers/layout/app/app.config.ts +0 -180
  273. package/layers/layout/app/assets/css/layout/modes/fluid.css +0 -109
  274. package/layers/layout/app/assets/css/layout.css +0 -2
  275. package/layers/layout/app/components/Layout/Container.vue +0 -46
  276. package/layers/layout/app/components/Layout/Page/Container.vue +0 -103
  277. package/layers/layout/app/components/Layout/Section/Grid.vue +0 -46
  278. package/layers/layout/app/components/Layout/Section/Sidebar.vue +0 -84
  279. package/layers/layout/app/components/Layout/Section/Stack.vue +0 -63
  280. package/layers/layout/app/components/Layout/Section/Title.vue +0 -33
  281. package/layers/layout/app/composables/GridPlacement.ts +0 -31
  282. package/layers/layout/app/types/app-config.d.ts +0 -14
  283. package/layers/layout/tsconfig.json +0 -7
  284. package/layers/mailer/server/types.d.ts +0 -11
  285. package/layers/mailer/tsconfig.json +0 -7
  286. package/layers/metadata/app/composables/useMetadataItem.ts +0 -15
  287. package/layers/metadata/app/composables/useMetadataSearch.ts +0 -29
  288. package/layers/metadata/providers/comicvine/tsconfig.json +0 -7
  289. package/layers/metadata/providers/google-books/tsconfig.json +0 -7
  290. package/layers/metadata/providers/openlibrary/tsconfig.json +0 -7
  291. package/layers/metadata/tsconfig.json +0 -7
  292. package/layers/motion/app/components/Motion/index.vue +0 -16
  293. package/layers/navigation/app/components/Mast/Header.vue +0 -18
  294. package/layers/navigation/app/components/Mast/Main.vue +0 -7
  295. package/layers/navigation/app/composables/mastNav.ts +0 -26
  296. package/layers/navigation/app/utils/regex.ts +0 -6
  297. package/layers/navigation/tsconfig.json +0 -7
  298. package/layers/page-transitions/tsconfig.json +0 -7
  299. package/layers/routing/app/types/app-config.d.ts +0 -7
  300. package/layers/routing/tsconfig.json +0 -7
  301. package/layers/scripts/app/types/index.ts +0 -1
  302. package/layers/scripts/app/types/scripts.ts +0 -14
  303. package/layers/scripts/tsconfig.json +0 -7
  304. package/layers/scroll/app/app.config.ts +0 -31
  305. package/layers/scroll/tsconfig.json +0 -7
  306. package/layers/seo/app/composables/useSeoConfig.ts +0 -7
  307. package/layers/seo/tsconfig.json +0 -7
  308. package/layers/shader/app/app.config.ts +0 -9
  309. package/layers/shader/app/types/app-config.d.ts +0 -7
  310. package/layers/shader/tsconfig.json +0 -7
  311. package/layers/starter/app/app.config.ts +0 -10
  312. package/layers/starter/app/components/StarterDesignSystem.vue +0 -1913
  313. package/layers/starter/app/components/StarterHome.vue +0 -441
  314. package/layers/starter/nuxt.config.ts +0 -15
  315. package/layers/starter/package.json +0 -10
  316. package/layers/theme/app/app.config.ts +0 -3
  317. package/layers/theme/app/types/app-config.d.ts +0 -10
  318. package/layers/theme/app/types/theme.ts +0 -23
  319. package/layers/theme/nuxt.config.ts +0 -74
  320. package/layers/transitions/tsconfig.json +0 -7
  321. package/layers/typography/app/components/Typography/CodeBlock.vue +0 -41
  322. package/layers/typography/app/components/Typography/QuoteBlock.vue +0 -23
  323. package/layers/typography/tsconfig.json +0 -7
  324. package/layers/ui/app/assets/css/ui.css +0 -4
  325. package/layers/ui/app/layouts/default.vue +0 -8
  326. package/layers/ui/nuxt.config.ts +0 -22
  327. package/layers/ui/tsconfig.json +0 -7
  328. package/layers/visual/app/types/breakpoints.ts +0 -179
  329. package/layers/visual/tsconfig.json +0 -7
  330. /package/layers/{auth → data/auth}/app/middleware/auth.ts +0 -0
  331. /package/layers/{auth → data/auth}/server/routes/auth/github.get.ts +0 -0
  332. /package/layers/{database → data/database}/server/utils/drizzle.ts +0 -0
  333. /package/layers/{database → data/database}/server/utils/sql.ts +0 -0
  334. /package/layers/{forms → data/forms}/app/components/Form/Contact.vue +0 -0
  335. /package/layers/{forms → data/forms}/app/components/Form/Field.vue +0 -0
  336. /package/layers/{forms → data/forms}/app/composables/useFormSchema.ts +0 -0
  337. /package/layers/{forms → data/forms}/app/composables/useFormsFetch.ts +0 -0
  338. /package/layers/{forms → data/forms}/app/config/fields.ts +0 -0
  339. /package/layers/{forms → data/forms}/app/types/fields.ts +0 -0
  340. /package/layers/{forms → data/forms}/app/types/index.ts +0 -0
  341. /package/layers/{forms → data/forms}/app/utils/contact-schema.test.ts +0 -0
  342. /package/layers/{forms → data/forms}/app/utils/contact-schema.ts +0 -0
  343. /package/layers/{forms → data/forms}/app/utils/fieldProps.test.ts +0 -0
  344. /package/layers/{forms → data/forms}/app/utils/fieldProps.ts +0 -0
  345. /package/layers/{forms → data/forms}/nuxt.config.ts +0 -0
  346. /package/layers/{forms → data/forms}/server/api/contact.post.ts +0 -0
  347. /package/layers/{mailer → data/mailer}/app/types/index.ts +0 -0
  348. /package/layers/{mailer → data/mailer}/app/types/mailer.ts +0 -0
  349. /package/layers/{mailer → data/mailer}/server/utils/config.ts +0 -0
  350. /package/layers/{mailer → data/mailer}/server/utils/email.ts +0 -0
  351. /package/layers/{mailer → data/mailer}/server/utils/hooks.ts +0 -0
  352. /package/layers/{metadata → data/metadata}/providers/comicvine/server/plugins/comicvine-register.ts +0 -0
  353. /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/client.ts +0 -0
  354. /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/normalise.test.ts +0 -0
  355. /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/normalise.ts +0 -0
  356. /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/provider.ts +0 -0
  357. /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/types.ts +0 -0
  358. /package/layers/{metadata → data/metadata}/providers/google-books/server/plugins/google-books-register.ts +0 -0
  359. /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/client.test.ts +0 -0
  360. /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/normalise.test.ts +0 -0
  361. /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/normalise.ts +0 -0
  362. /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/provider.ts +0 -0
  363. /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/types.ts +0 -0
  364. /package/layers/{metadata → data/metadata}/providers/openlibrary/nuxt.config.ts +0 -0
  365. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/plugins/openlibrary-register.ts +0 -0
  366. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/client.test.ts +0 -0
  367. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/normalise.test.ts +0 -0
  368. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/normalise.ts +0 -0
  369. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/provider.ts +0 -0
  370. /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/types.ts +0 -0
  371. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/plugins/tmdb-register.ts +0 -0
  372. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/client.test.ts +0 -0
  373. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/client.ts +0 -0
  374. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/normalise.test.ts +0 -0
  375. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/normalise.ts +0 -0
  376. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/provider.ts +0 -0
  377. /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/types.ts +0 -0
  378. /package/layers/{metadata → data/metadata}/server/api/metadata/lookup.get.ts +0 -0
  379. /package/layers/{metadata → data/metadata}/server/api/metadata/providers.get.ts +0 -0
  380. /package/layers/{metadata → data/metadata}/server/api/metadata/search.get.ts +0 -0
  381. /package/layers/{metadata → data/metadata}/server/api/metadata/status.get.ts +0 -0
  382. /package/layers/{metadata → data/metadata}/server/api/metadata/sync.post.ts +0 -0
  383. /package/layers/{metadata → data/metadata}/server/utils/metadata/cache.test.ts +0 -0
  384. /package/layers/{metadata → data/metadata}/server/utils/metadata/cache.ts +0 -0
  385. /package/layers/{metadata → data/metadata}/server/utils/metadata/errors.ts +0 -0
  386. /package/layers/{metadata → data/metadata}/server/utils/metadata/provider-registry.test.ts +0 -0
  387. /package/layers/{metadata → data/metadata}/server/utils/metadata/provider-registry.ts +0 -0
  388. /package/layers/{metadata → data/metadata}/server/utils/metadata/search.test.ts +0 -0
  389. /package/layers/{feeds → delivery/feeds}/app/app.config.ts +0 -0
  390. /package/layers/{feeds → delivery/feeds}/app/assets/css/feeds.css +0 -0
  391. /package/layers/{feeds → delivery/feeds}/public/feed/style.css +0 -0
  392. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/atom/all.get.ts +0 -0
  393. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/atom.get.ts +0 -0
  394. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/json/all.get.ts +0 -0
  395. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/json.get.ts +0 -0
  396. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/rss/all.get.ts +0 -0
  397. /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/rss.get.ts +0 -0
  398. /package/layers/{feeds → delivery/feeds}/server/routes/feed/atom/all.get.ts +0 -0
  399. /package/layers/{feeds → delivery/feeds}/server/routes/feed/atom.get.ts +0 -0
  400. /package/layers/{feeds → delivery/feeds}/server/routes/feed/demo.get.ts +0 -0
  401. /package/layers/{feeds → delivery/feeds}/server/routes/feed/index.get.ts +0 -0
  402. /package/layers/{feeds → delivery/feeds}/server/routes/feed/json/all.get.ts +0 -0
  403. /package/layers/{feeds → delivery/feeds}/server/routes/feed/json.get.ts +0 -0
  404. /package/layers/{feeds → delivery/feeds}/server/routes/feed/rss/all.get.ts +0 -0
  405. /package/layers/{feeds → delivery/feeds}/server/routes/feed/rss.get.ts +0 -0
  406. /package/layers/{feeds → delivery/feeds}/server/routes/feed/style.xsl.get.ts +0 -0
  407. /package/layers/{feeds → delivery/feeds}/server/utils/cache.ts +0 -0
  408. /package/layers/{feeds → delivery/feeds}/server/utils/content-adapter.test.ts +0 -0
  409. /package/layers/{feeds → delivery/feeds}/server/utils/content-adapter.ts +0 -0
  410. /package/layers/{feeds → delivery/feeds}/server/utils/feed-author.test.ts +0 -0
  411. /package/layers/{feeds → delivery/feeds}/server/utils/feed-author.ts +0 -0
  412. /package/layers/{feeds → delivery/feeds}/server/utils/feed-config.test.ts +0 -0
  413. /package/layers/{feeds → delivery/feeds}/server/utils/feed-xml.ts +0 -0
  414. /package/layers/{feeds → delivery/feeds}/server/utils/formats/atom.ts +0 -0
  415. /package/layers/{feeds → delivery/feeds}/server/utils/formats/json.ts +0 -0
  416. /package/layers/{feeds → delivery/feeds}/server/utils/formats/rss.ts +0 -0
  417. /package/layers/{feeds → delivery/feeds}/server/utils/formats.test.ts +0 -0
  418. /package/layers/{feeds → delivery/feeds}/server/utils/types.ts +0 -0
  419. /package/layers/{scripts → delivery/scripts}/app/app.config.ts +0 -0
  420. /package/layers/{baseline → delivery/scripts}/app/components/BaselineStatus.vue +0 -0
  421. /package/layers/{scripts → delivery/scripts}/app/composables/useScriptLoader.ts +0 -0
  422. /package/layers/{scripts → delivery/scripts}/app/composables/useYoutubeEmbed.ts +0 -0
  423. /package/layers/{baseline → delivery/scripts}/app/plugins/baseline-status.client.ts +0 -0
  424. /package/layers/{seo → delivery/seo}/app/app.config.ts +0 -0
  425. /package/layers/{theme → design-system/theming}/app/assets/css/theme.css +0 -0
  426. /package/layers/{theme → design-system/theming}/app/components/ThemePicker/Menu.vue +0 -0
  427. /package/layers/{theme → design-system/theming}/app/components/ThemePicker/MenuButton.vue +0 -0
  428. /package/layers/{theme → design-system/theming}/app/composables/useTheme.ts +0 -0
  429. /package/layers/{theme → design-system/theming}/app/composables/useThemePreferenceModels.ts +0 -0
  430. /package/layers/{theme → design-system/theming}/app/composables/useThemePreferences.ts +0 -0
  431. /package/layers/{theme → design-system/theming}/app/types/index.ts +0 -0
  432. /package/layers/{theme → design-system/theming}/server/utils/accent-css.test.ts +0 -0
  433. /package/layers/{theme → design-system/theming}/server/utils/fouc-config.test.ts +0 -0
  434. /package/layers/{theme → design-system/theming}/server/utils/fouc-config.ts +0 -0
  435. /package/layers/{typography → design-system/typography}/app/components/Typography/TextStroke.vue +0 -0
  436. /package/layers/{typography → design-system/typography}/app/composables/color.ts +0 -0
  437. /package/layers/{typography → design-system/typography}/app/types/colors.ts +0 -0
  438. /package/layers/{typography → design-system/typography}/app/types/index.ts +0 -0
  439. /package/layers/{typography → design-system/typography}/package.json +0 -0
  440. /package/layers/{visual → design-system/visual}/app/assets/css/visual.css +0 -0
  441. /package/layers/{visual → design-system/visual}/app/components/Base/Modal.vue +0 -0
  442. /package/layers/{visual → design-system/visual}/app/components/Media/Picture.vue +0 -0
  443. /package/layers/{visual → design-system/visual}/app/components/Progress/Bar.vue +0 -0
  444. /package/layers/{visual → design-system/visual}/app/components/Progress/Circular.vue +0 -0
  445. /package/layers/{visual → design-system/visual}/app/components/Tint/Overlay.vue +0 -0
  446. /package/layers/{visual → design-system/visual}/app/composables/accent.ts +0 -0
  447. /package/layers/{visual → design-system/visual}/app/composables/picture.ts +0 -0
  448. /package/layers/{visual → design-system/visual}/app/composables/tint.ts +0 -0
  449. /package/layers/{visual → design-system/visual}/app/types/accent.ts +0 -0
  450. /package/layers/{visual → design-system/visual}/app/types/gradient.ts +0 -0
  451. /package/layers/{visual → design-system/visual}/app/types/index.ts +0 -0
  452. /package/layers/{visual → design-system/visual}/app/types/tint.ts +0 -0
  453. /package/layers/{visual → design-system/visual}/app/utils/colorTokens.test.ts +0 -0
  454. /package/layers/{visual → design-system/visual}/app/utils/colorTokens.ts +0 -0
  455. /package/layers/{visual → design-system/visual}/app/utils/gradientStyle.test.ts +0 -0
  456. /package/layers/{visual → design-system/visual}/app/utils/gradientStyle.ts +0 -0
  457. /package/layers/{visual → design-system/visual}/app/utils/responsiveSizes.test.ts +0 -0
  458. /package/layers/{visual → design-system/visual}/app/utils/responsiveSizes.ts +0 -0
  459. /package/layers/{visual → design-system/visual}/package.json +0 -0
  460. /package/layers/{animations → motion/animations}/app/components/Motion/CountUp.vue +0 -0
  461. /package/layers/{animations → motion/animations}/app/components/Motion/Cursor.vue +0 -0
  462. /package/layers/{animations → motion/animations}/app/components/Motion/Magnetic.vue +0 -0
  463. /package/layers/{animations → motion/animations}/app/components/Motion/MarqueeText.vue +0 -0
  464. /package/layers/{animations → motion/animations}/app/components/Motion/TextReveal.vue +0 -0
  465. /package/layers/{animations → motion/animations}/app/components/Motion/Tilt.vue +0 -0
  466. /package/layers/{animations → motion/animations}/app/components/Motion/VelocityEffect.vue +0 -0
  467. /package/layers/{animations → motion/animations}/app/composables/useCountUp.ts +0 -0
  468. /package/layers/{animations → motion/animations}/app/composables/useCursorFollower.ts +0 -0
  469. /package/layers/{animations → motion/animations}/app/composables/useMagneticElement.ts +0 -0
  470. /package/layers/{animations → motion/animations}/app/composables/useMarqueeCopies.ts +0 -0
  471. /package/layers/{animations → motion/animations}/app/composables/useMarqueeVelocity.ts +0 -0
  472. /package/layers/{animations → motion/animations}/app/composables/useTiltEffect.ts +0 -0
  473. /package/layers/{animations → motion/animations}/app/utils/pointerMotion.ts +0 -0
  474. /package/layers/{animations → motion/animations}/package.json +0 -0
  475. /package/layers/motion/{nuxt.config.ts → motion/nuxt.config.ts} +0 -0
  476. /package/layers/{page-transitions → motion/page-transitions}/app/app.config.ts +0 -0
  477. /package/layers/{page-transitions → motion/page-transitions}/package.json +0 -0
  478. /package/layers/{scroll → motion/scroll}/app/components/Motion/HorizontalScroll.vue +0 -0
  479. /package/layers/{scroll → motion/scroll}/app/components/Motion/Parallax.vue +0 -0
  480. /package/layers/{scroll → motion/scroll}/app/components/Motion/PinnedSection.vue +0 -0
  481. /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollLink.vue +0 -0
  482. /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollProgress.vue +0 -0
  483. /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollScene.vue +0 -0
  484. /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollStats.vue +0 -0
  485. /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollStep.vue +0 -0
  486. /package/layers/{scroll → motion/scroll}/app/composables/useGsap.ts +0 -0
  487. /package/layers/{scroll → motion/scroll}/app/composables/useScrollSteps.ts +0 -0
  488. /package/layers/{scroll → motion/scroll}/app/composables/useSectionProgress.ts +0 -0
  489. /package/layers/{scroll → motion/scroll}/app/types/index.ts +0 -0
  490. /package/layers/{scroll → motion/scroll}/app/types/scroll.ts +0 -0
  491. /package/layers/{scroll → motion/scroll}/app/utils/scroll.ts +0 -0
  492. /package/layers/{scroll → motion/scroll}/package.json +0 -0
  493. /package/layers/{transitions → motion/transitions}/app/assets/css/transitions.css +0 -0
  494. /package/layers/{transitions → motion/transitions}/app/components/Motion/Transition.vue +0 -0
  495. /package/layers/{transitions → motion/transitions}/package.json +0 -0
  496. /package/layers/{canvas → render/canvas}/app/components/ShaderCanvas.vue +0 -0
  497. /package/layers/{canvas → render/canvas}/app/types/index.ts +0 -0
  498. /package/layers/{canvas → render/canvas}/app/types/renderer.ts +0 -0
  499. /package/layers/{shader → render/shader}/app/assets/css/shader.css +0 -0
  500. /package/layers/{shader → render/shader}/app/components/Effect/Bloom.vue +0 -0
  501. /package/layers/{shader → render/shader}/app/components/Effect/ChromaticAberration.vue +0 -0
  502. /package/layers/{shader → render/shader}/app/components/Effect/PostProcessing.vue +0 -0
  503. /package/layers/{shader → render/shader}/app/components/Material/AmbientAurora.client.vue +0 -0
  504. /package/layers/{shader → render/shader}/app/components/Material/AmbientFlow.client.vue +0 -0
  505. /package/layers/{shader → render/shader}/app/components/Material/AmbientGradientMesh.client.vue +0 -0
  506. /package/layers/{shader → render/shader}/app/components/Material/AmbientNebula.client.vue +0 -0
  507. /package/layers/{shader → render/shader}/app/components/Material/AmbientOcean.client.vue +0 -0
  508. /package/layers/{shader → render/shader}/app/components/Material/Fresnel.client.vue +0 -0
  509. /package/layers/{shader → render/shader}/app/components/Material/Gradient.client.vue +0 -0
  510. /package/layers/{shader → render/shader}/app/components/Material/Image.client.vue +0 -0
  511. /package/layers/{shader → render/shader}/app/components/Material/Node.client.vue +0 -0
  512. /package/layers/{shader → render/shader}/app/components/Material/Noise.client.vue +0 -0
  513. /package/layers/{shader → render/shader}/app/components/Mesh/Plane.vue +0 -0
  514. /package/layers/{shader → render/shader}/app/components/Node/Color.client.vue +0 -0
  515. /package/layers/{shader → render/shader}/app/components/Node/Fresnel.client.vue +0 -0
  516. /package/layers/{shader → render/shader}/app/components/Node/Gradient.client.vue +0 -0
  517. /package/layers/{shader → render/shader}/app/components/Node/Mix.client.vue +0 -0
  518. /package/layers/{shader → render/shader}/app/components/Node/Noise.client.vue +0 -0
  519. /package/layers/{shader → render/shader}/app/components/Pipeline/ACESTonemap.client.vue +0 -0
  520. /package/layers/{shader → render/shader}/app/components/Pipeline/AddBlend.client.vue +0 -0
  521. /package/layers/{shader → render/shader}/app/components/Pipeline/AgedFilm.client.vue +0 -0
  522. /package/layers/{shader → render/shader}/app/components/Pipeline/Aurora.client.vue +0 -0
  523. /package/layers/{shader → render/shader}/app/components/Pipeline/BilinearGradient.client.vue +0 -0
  524. /package/layers/{shader → render/shader}/app/components/Pipeline/BillowNoise.client.vue +0 -0
  525. /package/layers/{shader → render/shader}/app/components/Pipeline/BrightnessContrast.client.vue +0 -0
  526. /package/layers/{shader → render/shader}/app/components/Pipeline/CellularNoise.client.vue +0 -0
  527. /package/layers/{shader → render/shader}/app/components/Pipeline/ChannelMixer.client.vue +0 -0
  528. /package/layers/{shader → render/shader}/app/components/Pipeline/ChebyshevNoiseField.client.vue +0 -0
  529. /package/layers/{shader → render/shader}/app/components/Pipeline/Checkerboard.client.vue +0 -0
  530. /package/layers/{shader → render/shader}/app/components/Pipeline/ChromaticAberration.client.vue +0 -0
  531. /package/layers/{shader → render/shader}/app/components/Pipeline/ChromaticScreenWaves.client.vue +0 -0
  532. /package/layers/{shader → render/shader}/app/components/Pipeline/Circle.client.vue +0 -0
  533. /package/layers/{shader → render/shader}/app/components/Pipeline/Clouds.client.vue +0 -0
  534. /package/layers/{shader → render/shader}/app/components/Pipeline/ColorBurnBlend.client.vue +0 -0
  535. /package/layers/{shader → render/shader}/app/components/Pipeline/ColorDodgeBlend.client.vue +0 -0
  536. /package/layers/{shader → render/shader}/app/components/Pipeline/ColourRamp.client.vue +0 -0
  537. /package/layers/{shader → render/shader}/app/components/Pipeline/ComplexPlaneField.client.vue +0 -0
  538. /package/layers/{shader → render/shader}/app/components/Pipeline/ConicGradient.client.vue +0 -0
  539. /package/layers/{shader → render/shader}/app/components/Pipeline/CosinePalette.client.vue +0 -0
  540. /package/layers/{shader → render/shader}/app/components/Pipeline/CoverageAlpha.client.vue +0 -0
  541. /package/layers/{shader → render/shader}/app/components/Pipeline/Cross.client.vue +0 -0
  542. /package/layers/{shader → render/shader}/app/components/Pipeline/CurlNoise.client.vue +0 -0
  543. /package/layers/{shader → render/shader}/app/components/Pipeline/DarkenBlend.client.vue +0 -0
  544. /package/layers/{shader → render/shader}/app/components/Pipeline/DayNightCycle.client.vue +0 -0
  545. /package/layers/{shader → render/shader}/app/components/Pipeline/Desaturate.client.vue +0 -0
  546. /package/layers/{shader → render/shader}/app/components/Pipeline/DiagonalGradient.client.vue +0 -0
  547. /package/layers/{shader → render/shader}/app/components/Pipeline/DiamondGradient.client.vue +0 -0
  548. /package/layers/{shader → render/shader}/app/components/Pipeline/DifferenceBlend.client.vue +0 -0
  549. /package/layers/{shader → render/shader}/app/components/Pipeline/DivideBlend.client.vue +0 -0
  550. /package/layers/{shader → render/shader}/app/components/Pipeline/DomainWarpedNoise.client.vue +0 -0
  551. /package/layers/{shader → render/shader}/app/components/Pipeline/Dots.client.vue +0 -0
  552. /package/layers/{shader → render/shader}/app/components/Pipeline/DuoTone.client.vue +0 -0
  553. /package/layers/{shader → render/shader}/app/components/Pipeline/ExclusionBlend.client.vue +0 -0
  554. /package/layers/{shader → render/shader}/app/components/Pipeline/ExponentialFog.client.vue +0 -0
  555. /package/layers/{shader → render/shader}/app/components/Pipeline/Exposure.client.vue +0 -0
  556. /package/layers/{shader → render/shader}/app/components/Pipeline/FBMNoise.client.vue +0 -0
  557. /package/layers/{shader → render/shader}/app/components/Pipeline/FilmBurn.client.vue +0 -0
  558. /package/layers/{shader → render/shader}/app/components/Pipeline/FilmGrain.client.vue +0 -0
  559. /package/layers/{shader → render/shader}/app/components/Pipeline/FisheyeRay.client.vue +0 -0
  560. /package/layers/{shader → render/shader}/app/components/Pipeline/Flame.client.vue +0 -0
  561. /package/layers/{shader → render/shader}/app/components/Pipeline/FocalGradient.client.vue +0 -0
  562. /package/layers/{shader → render/shader}/app/components/Pipeline/Gamma.client.vue +0 -0
  563. /package/layers/{shader → render/shader}/app/components/Pipeline/GodRays.client.vue +0 -0
  564. /package/layers/{shader → render/shader}/app/components/Pipeline/GradientNoise.client.vue +0 -0
  565. /package/layers/{shader → render/shader}/app/components/Pipeline/Grain.client.vue +0 -0
  566. /package/layers/{shader → render/shader}/app/components/Pipeline/Grid.client.vue +0 -0
  567. /package/layers/{shader → render/shader}/app/components/Pipeline/Halation.client.vue +0 -0
  568. /package/layers/{shader → render/shader}/app/components/Pipeline/Halftone.client.vue +0 -0
  569. /package/layers/{shader → render/shader}/app/components/Pipeline/HardLightBlend.client.vue +0 -0
  570. /package/layers/{shader → render/shader}/app/components/Pipeline/Haze.client.vue +0 -0
  571. /package/layers/{shader → render/shader}/app/components/Pipeline/Hexagon.client.vue +0 -0
  572. /package/layers/{shader → render/shader}/app/components/Pipeline/Hue.client.vue +0 -0
  573. /package/layers/{shader → render/shader}/app/components/Pipeline/Invert.client.vue +0 -0
  574. /package/layers/{shader → render/shader}/app/components/Pipeline/LensFlare.client.vue +0 -0
  575. /package/layers/{shader → render/shader}/app/components/Pipeline/LightenBlend.client.vue +0 -0
  576. /package/layers/{shader → render/shader}/app/components/Pipeline/LinearGradient.client.vue +0 -0
  577. /package/layers/{shader → render/shader}/app/components/Pipeline/LinearGradient4.client.vue +0 -0
  578. /package/layers/{shader → render/shader}/app/components/Pipeline/LinearToSRGB.client.vue +0 -0
  579. /package/layers/{shader → render/shader}/app/components/Pipeline/Marble.client.vue +0 -0
  580. /package/layers/{shader → render/shader}/app/components/Pipeline/MixBlend.client.vue +0 -0
  581. /package/layers/{shader → render/shader}/app/components/Pipeline/MonochromeTint.client.vue +0 -0
  582. /package/layers/{shader → render/shader}/app/components/Pipeline/MultiplyBlend.client.vue +0 -0
  583. /package/layers/{shader → render/shader}/app/components/Pipeline/NoisyGradient.client.vue +0 -0
  584. /package/layers/{shader → render/shader}/app/components/Pipeline/NoisyGradientBlend.client.vue +0 -0
  585. /package/layers/{shader → render/shader}/app/components/Pipeline/OverlayBlend.client.vue +0 -0
  586. /package/layers/{shader → render/shader}/app/components/Pipeline/PaperTexture.client.vue +0 -0
  587. /package/layers/{shader → render/shader}/app/components/Pipeline/Polygon.client.vue +0 -0
  588. /package/layers/{shader → render/shader}/app/components/Pipeline/Posterise.client.vue +0 -0
  589. /package/layers/{shader → render/shader}/app/components/Pipeline/RadialGradient.client.vue +0 -0
  590. /package/layers/{shader → render/shader}/app/components/Pipeline/RayAutoOrbit.client.vue +0 -0
  591. /package/layers/{shader → render/shader}/app/components/Pipeline/RayMouseOrbit.client.vue +0 -0
  592. /package/layers/{shader → render/shader}/app/components/Pipeline/RayRotateX.client.vue +0 -0
  593. /package/layers/{shader → render/shader}/app/components/Pipeline/RayRotateY.client.vue +0 -0
  594. /package/layers/{shader → render/shader}/app/components/Pipeline/RayRotateZ.client.vue +0 -0
  595. /package/layers/{shader → render/shader}/app/components/Pipeline/RayTiltBasis.client.vue +0 -0
  596. /package/layers/{shader → render/shader}/app/components/Pipeline/RaymarchTunnel.client.vue +0 -0
  597. /package/layers/{shader → render/shader}/app/components/Pipeline/Rectangle.client.vue +0 -0
  598. /package/layers/{shader → render/shader}/app/components/Pipeline/ReinhardTonemap.client.vue +0 -0
  599. /package/layers/{shader → render/shader}/app/components/Pipeline/RidgedNoise.client.vue +0 -0
  600. /package/layers/{shader → render/shader}/app/components/Pipeline/Ring.client.vue +0 -0
  601. /package/layers/{shader → render/shader}/app/components/Pipeline/RingField.client.vue +0 -0
  602. /package/layers/{shader → render/shader}/app/components/Pipeline/RisographGrain.client.vue +0 -0
  603. /package/layers/{shader → render/shader}/app/components/Pipeline/RotatedGradientBlend.client.vue +0 -0
  604. /package/layers/{shader → render/shader}/app/components/Pipeline/SDFColourMask.client.vue +0 -0
  605. /package/layers/{shader → render/shader}/app/components/Pipeline/SDFRadialMask.client.vue +0 -0
  606. /package/layers/{shader → render/shader}/app/components/Pipeline/SRGBToLinear.client.vue +0 -0
  607. /package/layers/{shader → render/shader}/app/components/Pipeline/Saturation.client.vue +0 -0
  608. /package/layers/{shader → render/shader}/app/components/Pipeline/Scanlines.client.vue +0 -0
  609. /package/layers/{shader → render/shader}/app/components/Pipeline/ScreenBlend.client.vue +0 -0
  610. /package/layers/{shader → render/shader}/app/components/Pipeline/ShaderDebugger.client.vue +0 -0
  611. /package/layers/{shader → render/shader}/app/components/Pipeline/SimplexNoise.client.vue +0 -0
  612. /package/layers/{shader → render/shader}/app/components/Pipeline/SkyAtmosphere.client.vue +0 -0
  613. /package/layers/{shader → render/shader}/app/components/Pipeline/SoftLightBlend.client.vue +0 -0
  614. /package/layers/{shader → render/shader}/app/components/Pipeline/SolidColour.client.vue +0 -0
  615. /package/layers/{shader → render/shader}/app/components/Pipeline/SplitTone.client.vue +0 -0
  616. /package/layers/{shader → render/shader}/app/components/Pipeline/Star.client.vue +0 -0
  617. /package/layers/{shader → render/shader}/app/components/Pipeline/Starfield.client.vue +0 -0
  618. /package/layers/{shader → render/shader}/app/components/Pipeline/Stripes.client.vue +0 -0
  619. /package/layers/{shader → render/shader}/app/components/Pipeline/SubtractBlend.client.vue +0 -0
  620. /package/layers/{shader → render/shader}/app/components/Pipeline/TanhTonemap.client.vue +0 -0
  621. /package/layers/{shader → render/shader}/app/components/Pipeline/Threshold.client.vue +0 -0
  622. /package/layers/{shader → render/shader}/app/components/Pipeline/Tint.client.vue +0 -0
  623. /package/layers/{shader → render/shader}/app/components/Pipeline/Triangle.client.vue +0 -0
  624. /package/layers/{shader → render/shader}/app/components/Pipeline/UVAspectCorrect.client.vue +0 -0
  625. /package/layers/{shader → render/shader}/app/components/Pipeline/UVBreath.client.vue +0 -0
  626. /package/layers/{shader → render/shader}/app/components/Pipeline/UVBulge.client.vue +0 -0
  627. /package/layers/{shader → render/shader}/app/components/Pipeline/UVClamp.client.vue +0 -0
  628. /package/layers/{shader → render/shader}/app/components/Pipeline/UVColumnOffset.client.vue +0 -0
  629. /package/layers/{shader → render/shader}/app/components/Pipeline/UVFlipX.client.vue +0 -0
  630. /package/layers/{shader → render/shader}/app/components/Pipeline/UVFlipXY.client.vue +0 -0
  631. /package/layers/{shader → render/shader}/app/components/Pipeline/UVFlipY.client.vue +0 -0
  632. /package/layers/{shader → render/shader}/app/components/Pipeline/UVFractBand.client.vue +0 -0
  633. /package/layers/{shader → render/shader}/app/components/Pipeline/UVMousePull.client.vue +0 -0
  634. /package/layers/{shader → render/shader}/app/components/Pipeline/UVNoiseRotate.client.vue +0 -0
  635. /package/layers/{shader → render/shader}/app/components/Pipeline/UVNoiseWarp.client.vue +0 -0
  636. /package/layers/{shader → render/shader}/app/components/Pipeline/UVOrbit.client.vue +0 -0
  637. /package/layers/{shader → render/shader}/app/components/Pipeline/UVParallax.client.vue +0 -0
  638. /package/layers/{shader → render/shader}/app/components/Pipeline/UVPixelate.client.vue +0 -0
  639. /package/layers/{shader → render/shader}/app/components/Pipeline/UVPulse.client.vue +0 -0
  640. /package/layers/{shader → render/shader}/app/components/Pipeline/UVRipple.client.vue +0 -0
  641. /package/layers/{shader → render/shader}/app/components/Pipeline/UVRotate.client.vue +0 -0
  642. /package/layers/{shader → render/shader}/app/components/Pipeline/UVScale.client.vue +0 -0
  643. /package/layers/{shader → render/shader}/app/components/Pipeline/UVScroll.client.vue +0 -0
  644. /package/layers/{shader → render/shader}/app/components/Pipeline/UVScrollX.client.vue +0 -0
  645. /package/layers/{shader → render/shader}/app/components/Pipeline/UVScrollY.client.vue +0 -0
  646. /package/layers/{shader → render/shader}/app/components/Pipeline/UVShear.client.vue +0 -0
  647. /package/layers/{shader → render/shader}/app/components/Pipeline/UVSineWarpXY.client.vue +0 -0
  648. /package/layers/{shader → render/shader}/app/components/Pipeline/UVSwapAxes.client.vue +0 -0
  649. /package/layers/{shader → render/shader}/app/components/Pipeline/UVTile.client.vue +0 -0
  650. /package/layers/{shader → render/shader}/app/components/Pipeline/UVTwirl.client.vue +0 -0
  651. /package/layers/{shader → render/shader}/app/components/Pipeline/UVWarp.client.vue +0 -0
  652. /package/layers/{shader → render/shader}/app/components/Pipeline/VHSBleed.client.vue +0 -0
  653. /package/layers/{shader → render/shader}/app/components/Pipeline/ValueNoise.client.vue +0 -0
  654. /package/layers/{shader → render/shader}/app/components/Pipeline/Vibrance.client.vue +0 -0
  655. /package/layers/{shader → render/shader}/app/components/Pipeline/Vignette.client.vue +0 -0
  656. /package/layers/{shader → render/shader}/app/components/Pipeline/VoronoiEdges.client.vue +0 -0
  657. /package/layers/{shader → render/shader}/app/components/Pipeline/Water.client.vue +0 -0
  658. /package/layers/{shader → render/shader}/app/components/Pipeline/WaveBendLayer.client.vue +0 -0
  659. /package/layers/{shader → render/shader}/app/components/Pipeline/WaveColourLayer.client.vue +0 -0
  660. /package/layers/{shader → render/shader}/app/components/Pipeline/WhiteBalance.client.vue +0 -0
  661. /package/layers/{shader → render/shader}/app/components/Pipeline/Wood.client.vue +0 -0
  662. /package/layers/{shader → render/shader}/app/components/Preset/Aurora.client.vue +0 -0
  663. /package/layers/{shader → render/shader}/app/components/Preset/Flow.client.vue +0 -0
  664. /package/layers/{shader → render/shader}/app/components/Preset/GradientMesh.client.vue +0 -0
  665. /package/layers/{shader → render/shader}/app/components/Preset/Nebula.client.vue +0 -0
  666. /package/layers/{shader → render/shader}/app/components/Preset/Ocean.client.vue +0 -0
  667. /package/layers/{shader → render/shader}/app/components/Preset/ThemeAurora.client.vue +0 -0
  668. /package/layers/{shader → render/shader}/app/components/Preset/ThemeBubble.client.vue +0 -0
  669. /package/layers/{shader → render/shader}/app/components/Preset/ThemeFlow.client.vue +0 -0
  670. /package/layers/{shader → render/shader}/app/components/Preset/ThemeGradient.client.vue +0 -0
  671. /package/layers/{shader → render/shader}/app/components/Preset/ThemeLavaLamp.client.vue +0 -0
  672. /package/layers/{shader → render/shader}/app/components/Preset/ThemePlasma.client.vue +0 -0
  673. /package/layers/{shader → render/shader}/app/components/Preset/ThemeWave.client.vue +0 -0
  674. /package/layers/{shader → render/shader}/app/components/Shader/Background.client.vue +0 -0
  675. /package/layers/{shader → render/shader}/app/components/Shader/Debug.vue +0 -0
  676. /package/layers/{shader → render/shader}/app/components/Shader/Host.client.vue +0 -0
  677. /package/layers/{shader → render/shader}/app/components/Shader/Material.client.vue +0 -0
  678. /package/layers/{shader → render/shader}/app/components/Shader/Pipeline.client.vue +0 -0
  679. /package/layers/{shader → render/shader}/app/components/Shader/PipelineContext.vue +0 -0
  680. /package/layers/{shader → render/shader}/app/components/Shader/Runtime.client.vue +0 -0
  681. /package/layers/{shader → render/shader}/app/composables/useAmbientMaterials.ts +0 -0
  682. /package/layers/{shader → render/shader}/app/composables/useCSSColourUniform.ts +0 -0
  683. /package/layers/{shader → render/shader}/app/composables/useCSSFloatUniform.ts +0 -0
  684. /package/layers/{shader → render/shader}/app/composables/useMousePosition.ts +0 -0
  685. /package/layers/{shader → render/shader}/app/composables/useShader.ts +0 -0
  686. /package/layers/{shader → render/shader}/app/composables/useShaderColor.ts +0 -0
  687. /package/layers/{shader → render/shader}/app/composables/useShaderFloat.ts +0 -0
  688. /package/layers/{shader → render/shader}/app/composables/useShaderGraph.ts +0 -0
  689. /package/layers/{shader → render/shader}/app/composables/useShaderMixBlend.ts +0 -0
  690. /package/layers/{shader → render/shader}/app/composables/useShaderPerf.ts +0 -0
  691. /package/layers/{shader → render/shader}/app/composables/useShaderPipeline.ts +0 -0
  692. /package/layers/{shader → render/shader}/app/composables/useShaderRuntime.ts +0 -0
  693. /package/layers/{shader → render/shader}/app/composables/useShaderVec2.ts +0 -0
  694. /package/layers/{shader → render/shader}/app/composables/useSunDirectionUniform.ts +0 -0
  695. /package/layers/{shader → render/shader}/app/composables/useTSLNodes.ts +0 -0
  696. /package/layers/{shader → render/shader}/app/composables/useThemeColors.ts +0 -0
  697. /package/layers/{shader → render/shader}/app/composables/useThemePreset.ts +0 -0
  698. /package/layers/{shader → render/shader}/app/composables/useUniformWatchers.ts +0 -0
  699. /package/layers/{shader → render/shader}/app/composables/useUniforms.ts +0 -0
  700. /package/layers/{shader → render/shader}/app/plugins/shader.client.ts +0 -0
  701. /package/layers/{shader → render/shader}/app/shaders/common/blend.ts +0 -0
  702. /package/layers/{shader → render/shader}/app/shaders/common/complex.ts +0 -0
  703. /package/layers/{shader → render/shader}/app/shaders/common/effects.ts +0 -0
  704. /package/layers/{shader → render/shader}/app/shaders/common/grain.ts +0 -0
  705. /package/layers/{shader → render/shader}/app/shaders/common/index.ts +0 -0
  706. /package/layers/{shader → render/shader}/app/shaders/common/lighting.ts +0 -0
  707. /package/layers/{shader → render/shader}/app/shaders/common/math.ts +0 -0
  708. /package/layers/{shader → render/shader}/app/shaders/common/nodes.ts +0 -0
  709. /package/layers/{shader → render/shader}/app/shaders/common/noise.ts +0 -0
  710. /package/layers/{shader → render/shader}/app/shaders/common/noiseHelpers.ts +0 -0
  711. /package/layers/{shader → render/shader}/app/shaders/common/palette.ts +0 -0
  712. /package/layers/{shader → render/shader}/app/shaders/common/patterns.ts +0 -0
  713. /package/layers/{shader → render/shader}/app/shaders/common/sdf.ts +0 -0
  714. /package/layers/{shader → render/shader}/app/shaders/common/shapes.ts +0 -0
  715. /package/layers/{shader → render/shader}/app/shaders/common/tonemapping.ts +0 -0
  716. /package/layers/{shader → render/shader}/app/shaders/common/uv.ts +0 -0
  717. /package/layers/{shader → render/shader}/app/shaders/createMaterial.ts +0 -0
  718. /package/layers/{shader → render/shader}/app/shaders/index.ts +0 -0
  719. /package/layers/{shader → render/shader}/app/shaders/layers/aurora.ts +0 -0
  720. /package/layers/{shader → render/shader}/app/shaders/layers/index.ts +0 -0
  721. /package/layers/{shader → render/shader}/app/shaders/layers/meshGradient.ts +0 -0
  722. /package/layers/{shader → render/shader}/app/shaders/layers/shaderGradient.ts +0 -0
  723. /package/layers/{shader → render/shader}/app/shaders/layers/stripe.ts +0 -0
  724. /package/layers/{shader → render/shader}/app/shaders/types.ts +0 -0
  725. /package/layers/{shader → render/shader}/app/types/index.ts +0 -0
  726. /package/layers/{shader → render/shader}/app/types/materials.ts +0 -0
  727. /package/layers/{shader → render/shader}/app/types/renderer.ts +0 -0
  728. /package/layers/{shader → render/shader}/app/types/tsl.ts +0 -0
  729. /package/layers/{shader → render/shader}/app/types/uniforms.ts +0 -0
  730. /package/layers/{shader → render/shader}/app/utils/tsl/animation.ts +0 -0
  731. /package/layers/{shader → render/shader}/app/utils/tsl/color.ts +0 -0
  732. /package/layers/{shader → render/shader}/app/utils/tsl/index.ts +0 -0
  733. /package/layers/{shader → render/shader}/app/utils/tsl/math.ts +0 -0
  734. /package/layers/{shader → render/shader}/app/utils/tsl/noise.ts +0 -0
  735. /package/layers/{shader → render/shader}/app/utils/tsl/oklch.ts +0 -0
  736. /package/layers/{shader → render/shader}/app/utils/tsl/patterns.ts +0 -0
  737. /package/layers/{shader → render/shader}/app/utils/tsl/tween.ts +0 -0
  738. /package/layers/{shader → render/shader}/app/utils/tsl/uv.ts +0 -0
  739. /package/layers/{shader → render/shader}/nuxt.config.ts +0 -0
  740. /package/layers/{layout → structure/layout}/app/components/Layout/Section/Gallery.vue +0 -0
  741. /package/layers/{layout → structure/layout}/app/components/Layout/Section/Hero.vue +0 -0
  742. /package/layers/{layout → structure/layout}/app/components/Layout/Section/Split.vue +0 -0
  743. /package/layers/{layout → structure/layout}/app/composables/useGridConfig.ts +0 -0
  744. /package/layers/{layout → structure/layout}/app/types/index.ts +0 -0
  745. /package/layers/{layout → structure/layout}/tailwind.config.js +0 -0
  746. /package/layers/{navigation → structure/navigation}/app/assets/css/navigation.css +0 -0
  747. /package/layers/{navigation → structure/navigation}/app/components/Links/Group.vue +0 -0
  748. /package/layers/{navigation → structure/navigation}/app/components/Links/Named.vue +0 -0
  749. /package/layers/{navigation → structure/navigation}/app/components/Mast/Footer.vue +0 -0
  750. /package/layers/{navigation → structure/navigation}/app/components/Mast/NavModal.vue +0 -0
  751. /package/layers/{navigation → structure/navigation}/app/components/Site/Subtitle.vue +0 -0
  752. /package/layers/{navigation → structure/navigation}/app/components/Site/Title.vue +0 -0
  753. /package/layers/{navigation → structure/navigation}/app/composables/toast.ts +0 -0
  754. /package/layers/{navigation → structure/navigation}/app/composables/useSite.ts +0 -0
  755. /package/layers/{navigation → structure/navigation}/app/types/index.ts +0 -0
  756. /package/layers/{navigation → structure/navigation}/app/types/nav.ts +0 -0
  757. /package/layers/{core → structure/navigation}/app/utils/regex.ts +0 -0
  758. /package/layers/{navigation → structure/navigation}/app/utils/site.test.ts +0 -0
  759. /package/layers/{navigation → structure/navigation}/app/utils/site.ts +0 -0
  760. /package/layers/{navigation → structure/navigation}/package.json +0 -0
  761. /package/layers/{routing → structure/routing}/app/composables/useFeatureFlags.ts +0 -0
  762. /package/layers/{routing → structure/routing}/app/composables/useMaintenance.ts +0 -0
  763. /package/layers/{routing → structure/routing}/app/composables/useRoutingConfig.ts +0 -0
  764. /package/layers/{routing → structure/routing}/app/middleware/01.maintenance.global.ts +0 -0
  765. /package/layers/{routing → structure/routing}/app/middleware/02.governance.global.ts +0 -0
  766. /package/layers/{routing → structure/routing}/app/plugins/feature-flags.client.ts +0 -0
  767. /package/layers/{routing → structure/routing}/app/plugins/scroll-routing.client.ts +0 -0
  768. /package/layers/{routing → structure/routing}/app/types/index.ts +0 -0
  769. /package/layers/{routing → structure/routing}/app/types/route-meta.d.ts +0 -0
  770. /package/layers/{routing → structure/routing}/app/types/routing.ts +0 -0
  771. /package/layers/{routing → structure/routing}/app/utils/resolveRoute.test.ts +0 -0
  772. /package/layers/{routing → structure/routing}/app/utils/resolveRoute.ts +0 -0
  773. /package/layers/{routing → structure/routing}/server/api/feature-flags.get.ts +0 -0
@@ -0,0 +1,533 @@
1
+ # Layer Taxonomy Redesign — Part 1: Tier 0 (Foundation) & Tier 1 (Design System)
2
+
3
+ ## Scope
4
+
5
+ This document covers the first two tiers of a full monorepo layer-taxonomy redesign that
6
+ reorganizes ~26 layers into 8 tiers ordered by build-workflow sequence (design system → structure
7
+ → content → data → motion → render → delivery) instead of flat domain buckets. Tiers 2–7
8
+ (Structure, Content, Data, Motion, Render, Delivery) are audited in follow-on documents. This
9
+ document is complete and actionable for Tier 0 and Tier 1 on their own — it does not depend on
10
+ later tiers being finished, except where explicitly noted.
11
+
12
+ Full 8-tier map, for reference:
13
+
14
+ | Tier | Name | Layers |
15
+ | ---- | ------------- | ---------------------------------------------------------------------------- |
16
+ | 0 | Foundation | `core` |
17
+ | 1 | Design System | `theming`, `typography`, `visual` (`ui` dissolved, see below) |
18
+ | 2 | Structure | `layout`, `navigation`, `routing` |
19
+ | 3 | Content | `content` |
20
+ | 4 | Data | `database`, `auth`, `metadata` (+ 4 provider sub-folders), `forms`, `mailer` |
21
+ | 5 | Motion | `scroll`, `animations`, `transitions` (absorbs `page-transitions`), `motion` |
22
+ | 6 | Render | `canvas`, `shader` |
23
+ | 7 | Delivery | `seo`, `scripts`, `feeds` |
24
+
25
+ `baseline` merges into `scripts` (Tier 7, Delivery) rather than `core` — corrected after full
26
+ audit: it's not just compiler config, it wraps a real third-party widget (`baseline-status` npm
27
+ package, web.dev's Baseline browser-support badge web component) via a `BaselineStatus.vue`
28
+ wrapper, a client plugin, and the `isCustomElement` allowlist. That's a third-party embed
29
+ integration, the same shape as `scripts`' existing analytics/GTM/embed facades — not a `core`
30
+ concern. `starter` relocates out of `layers/` into `apps/` (it's a demo app). Neither is a
31
+ standalone tier member. The per-tier sub-layer/toggle mechanism (extending the
32
+ `PLAYGROUND_LAYERS` pattern) referenced below is a separate, not-yet-designed piece of work —
33
+ tiers 0–1 do not depend on it existing yet.
34
+
35
+ ## Nuxt 5 readiness (cross-cutting, applies to every tier)
36
+
37
+ Verified against the official upgrade guide (nuxt.com/docs/5.x/getting-started/upgrade):
38
+
39
+ - `app.config.ts` is **unaffected** in Nuxt 5 — confirmed, not carried forward as a risk.
40
+ (Two blog posts disagreed on this; the official guide settles it. `app.config.ts` migration
41
+ to `runtimeConfig` is explicitly **out of scope** for this redesign.)
42
+ - `future.compatibilityVersion: 5` — flip in `core`'s `nuxt.config.ts` now. Available since
43
+ Nuxt 4.2, individually revertable, cheapest way to surface real breakage early.
44
+ - TypeScript `baseUrl` is removed in v5 — audit every layer's `tsconfig.json` for `baseUrl`
45
+ reliance (not yet done).
46
+ - Vue Options API disabled by default in v5 — repo convention is already `<script setup>`
47
+ everywhere (per root CLAUDE.md), expect zero findings, worth a confirming grep.
48
+ - Case-sensitive routing / normalized page names — relevant once the Content/Structure tiers
49
+ are audited (page file naming), not Tier 0/1.
50
+ - `giget` becomes an optional peer dep for remote layers — not applicable, this repo has no
51
+ remote `extends:`, all layers are local.
52
+
53
+ ## Tier 0 — Foundation (`core`)
54
+
55
+ **Charter:** the safe, minimal way to load a site. Zero layer dependencies — every other layer
56
+ extends `core`, `core` extends nothing.
57
+
58
+ **Current real contents** (junk paths `.playground/.output`, `.fallow`, `.turbo` excluded):
59
+
60
+ - Device/capability detection: `useDevice`, `useBrowser`, `useNetworkInfo`, `useScreen`,
61
+ `useRendering`, `useFeatures`, `usePWAInfo`, `useScrollGuard`, `feature-detection.client.ts`,
62
+ `scroll-guard.client.ts`, `browserInfo.ts`, `featureClasses.ts`
63
+ - Error/404: `ErrorBoundary.vue`, `error.vue`, `error-handler.ts` plugin, `useErrorLog`,
64
+ `[...slug].vue` catch-all
65
+ - Loading: `LoadingScreen.vue`, `useLoading`, `loading.client.ts`
66
+ - Design tokens (Phase 1–4 declarative layout work): `types/tokens.ts`, `types/responsive.ts`,
67
+ `useLayoutAttrs.ts`, `assets/css/tokens/{breakpoints,container,spacing-fluid}.css` — correctly
68
+ homed here per the earlier locked decision that shared tokens live in `core`
69
+ - Misc utils: `useCache`, `useEnv`, `helpers.ts`, `regex.ts`
70
+
71
+ Re-audited the device/capability-detection cluster individually — traced real consumers, not just
72
+ presence. Result: `useDevice`, `useBrowser`, `useNetworkInfo`, `useScreen` fit cleanly.
73
+ `useRendering`, `useFeatures`, `usePWAInfo`, `useScrollGuard` did not hold up — see decisions 5-8
74
+ below.
75
+
76
+ ### Decisions
77
+
78
+ 1. **`Container.vue` → `AppContainer.vue`.** Not a duplicate of `layout`'s containers (see Tier 2
79
+ note below) — it's the shared width-constraint primitive both `layout` and `ui`/`layout`
80
+ consumers build on. Renamed for clarity per direct request. `layout/Layout/Container.vue`
81
+ (`LayoutContainer`, a documented back-compat shim that just re-renders `<Container>`) needs its
82
+ internal reference updated to `<AppContainer>` alongside this rename.
83
+
84
+ 2. **`core.css`'s hard import of `typography.css` stays — do not remove.** This looked like a
85
+ layer-independence violation (`core` reaching into `typography`) but is the deliberate,
86
+ documented fix for a real production bug (see
87
+ `kmcom-nuxt-layers-typography-css-bug.md` at repo root): Tailwind v4 is CSS-first and only
88
+ tolerates **one** `@import 'tailwindcss/...'` build root per app. `typography.css` used to open
89
+ its own build root and silently broke `@nuxt/ui`'s `UNavigationMenu` padding in production
90
+ (nav stuck at 36px instead of 64px, no error, confirmed via isolation A/B test). The current
91
+ fix — `typography.css` has no Tailwind import of its own, `core.css` pulls its contents in via
92
+ relative path so everything rides `core`'s single build root — is correct and must be
93
+ preserved.
94
+
95
+ **New rule to codify** (candidate location: `.claude/rules/nuxt-layers.md`): any layer adding
96
+ Tailwind-consuming CSS (custom properties, `@utility` blocks) must fold into `core.css`'s
97
+ import chain via relative path and must never open its own `@import 'tailwindcss/...'` root.
98
+ This is a permanent, documented exception to "core has zero layer deps" — true for JS/TS,
99
+ not true for CSS build-root ownership.
100
+
101
+ 3. **Delete `assets/css-backup.zip`.** 3.9KB, zero references anywhere in the codebase, dead
102
+ leftover.
103
+
104
+ 4. **`assets/css/base.css` and `assets/css/layout.css` contents not yet audited.** Both are
105
+ loaded unconditionally by `core.css`. `core`'s `layout.css` shares a filename with
106
+ `layers/layout/app/assets/css/layout.css` (a different file, both real) — confusing at minimum.
107
+ Open item: read both files' actual contents and decide keep-in-core / move-to-`layout`-tier /
108
+ delete per content, before this tier is considered fully closed.
109
+
110
+ 5. **Types — mostly fine, one still-open.**
111
+ - `types/tokens.ts` (`Spacing`, `ContainerSize`, `BREAKPOINT_PX`, `Breakpoint`) — correctly
112
+ homed, deliberately cross-consumed by `layout`/`visual` via the `#layers/core/types` alias.
113
+ No action.
114
+ - `types/responsive.ts` (canonical `ResponsiveValue<T>`) — deliberately kept separate from
115
+ `layout`'s own `ResponsiveValue` per an explicit code comment. Same item as the "3 duplicate
116
+ `ResponsiveValue` types" flagged in the original pre-redesign audit — still open: permanent
117
+ split or future merge target, not decided.
118
+
119
+ 6. **`init.ts` — delete entirely.** 190 lines that call nearly every composable in `core`
120
+ (`useDevice`, `useBrowser`, `useScreen`, `useNetworkInfo`, `useFeatures`, `useCache`,
121
+ `useRendering`, `useEnv`) purely to `console.log` their output in dev mode. Zero production
122
+ behavior. Its one artifact — `provide: { $coreLayer: {...} } ` — is never read anywhere in the
123
+ repo. Duplicates `DiagnosticsPage.vue`. Confirmed leftover scaffolding from when the layer was
124
+ being built, not load-bearing.
125
+
126
+ 7. **Misc utils — three of four dead or near-dead, one folded into the PWA decision.**
127
+ - `useCache` — PWA-only (hardcoded `'workbox-precache-v2'`), only caller was `init.ts`. Folds
128
+ into decision 8 (PWA disabled, not deleted) rather than standing alone.
129
+ - `useEnv` — delete. 4-line pass-through of `useRuntimeConfig()`, adds nothing despite its doc
130
+ comment's claims. Only caller was `init.ts`. Consumers use `useRuntimeConfig()` directly.
131
+ - `helpers.ts` — delete. ~20-function grab-bag (`debounce`, `throttle`, `sleep`, `retry`,
132
+ `clamp`, `deepClone`, `pick`, `omit`, `groupBy`, etc). Confirmed zero real usage anywhere in
133
+ the repo outside its own test file and `useScrollGuard`'s `debounce` import (already being
134
+ deleted per decision 7) — checked specifically against the loading cluster too, no imports
135
+ there. Recoverable from git history if a real need appears later.
136
+ - `regex.ts` — delete. Dead duplicate: `navigation` has its own separate `regex.ts` with the
137
+ same `splitSpaces` job, actually consumed by `navigation/app/utils/site.ts`. `core`'s copy
138
+ has zero consumers.
139
+
140
+ 8. **Loading cluster — mostly fine, one real gap, minor cruft.**
141
+ - `LoadingScreen`/`useLoading`/`loading.client.ts` = app-level, one-time boot splash (runs
142
+ once via `app:mounted`). Confirmed intentional design, kept as-is. Progress is simulated
143
+ (random 3-8% increments every 150ms to 90%, not tied to real asset/network state) — expected
144
+ behavior for this kind of splash, not a bug, just worth knowing it's cosmetic.
145
+ - Remove dead commented-out `console.log` debug lines (3 spots across `LoadingScreen.vue` and
146
+ `loading.client.ts`).
147
+ - **Gap**: Nuxt's native `<NuxtLoadingIndicator>`/`useLoadingIndicator()` (page-level,
148
+ per-navigation progress bar, real state, zero config, ships free) is not used anywhere in the
149
+ repo — `core/app.vue` doesn't include it. Confirmed split: `LoadingScreen` = app-level boot
150
+ splash, `NuxtLoadingIndicator` = page-level per-navigation bar. Add
151
+ `<NuxtLoadingIndicator />` to `core/app.vue` alongside `<NuxtLayout>`/`<NuxtPage>`.
152
+
153
+ 9. **Error/404 cluster — one real production bug.**
154
+ - `[...slug].vue` (catch-all 404 route) is solid: config-driven, `setResponseStatus(404)`,
155
+ matches unmatched routes correctly.
156
+ - `error-handler.ts` (global Vue/Nuxt error hooks → `useErrorLog`) and `useErrorLog` itself
157
+ (console + optional external-service logging, app.config-driven) are both correctly wired
158
+ and fine.
159
+ - **`error.vue` — Nuxt's actual global error page, shown for any _thrown_ error (500s,
160
+ `createError()`, unhandled exceptions) — is a bare stub in production**: `<div><p>error</p>
161
+ </div>`, no message, no status code, no way back. Its full real implementation (same
162
+ UEmpty/actions/stack-trace pattern as the working 404 page) exists but is entirely commented
163
+ out. Confirmed: this was always meant as a fallback and the real version was never finished
164
+ — not a regression, an unfinished build. Ships broken today regardless. Open item: finish
165
+ it (the commented code is already written, needs uncommenting + wiring against the same
166
+ pattern `[...slug].vue` already proves out) — not yet scheduled, logged here so it isn't
167
+ lost.
168
+
169
+ 10. **`useRendering` — keep as-is.** Zero current consumers, but cheap: computed refs only, no
170
+ side effects, no auto-run plugin. Real use case documented (gate interactivity until
171
+ `isHydrated`, e.g. `:disabled="!isHydrated"`) even though nothing uses it yet. Not worth
172
+ cutting something inert on the chance it's needed.
173
+
174
+ 11. **`useFeatures` — keep the composable, delete the auto-run plugin.** Traced actual consumers:
175
+ zero outside the diagnostics demo page, despite the plugin (`feature-detection.client.ts`)
176
+ running CSS/JS-API/image-format detection, `sessionStorage` writes, and `<html>` classList
177
+ mutation on every single page load for every `core` consumer. Delete
178
+ `plugins/feature-detection.client.ts`. Composable itself stays, callable on-demand by whichever
179
+ future consumer actually needs it (candidate: `layout`'s subgrid fallback).
180
+
181
+ 12. **`useScrollGuard` — delete entirely** (composable, `plugins/scroll-guard.client.ts`,
182
+ `types/scroll-guard.ts`). Traced: auto-enabled on every page load, zero code anywhere calls its
183
+ exposed runtime controls (`enable`/`disable`/`toggle`), yet it walks the full DOM on load and
184
+ runs a `MutationObserver` on the entire `<body>` subtree indefinitely — real always-on perf
185
+ cost for a problem never confirmed to exist in practice. The clamping behavior it implements is
186
+ preserved as a vitest characterization test instead of shipped runtime code, so the logic isn't
187
+ lost, just no longer running live.
188
+
189
+ 13. **PWA — disabled, not deleted**, pending a separate decision on Nuxt's PWA direction. Comment
190
+ out (don't remove) `@vite-pwa/nuxt` from `core`'s conditional prod `modules` array and the
191
+ `pwa: { workbox: {...} }` config block in `core/nuxt.config.ts`. `usePWAInfo` composable stays
192
+ in place, dormant, same status as `useRendering` — unused but harmless.
193
+
194
+ ## Tier 1 — Design System (`theming`, `typography`, `visual`)
195
+
196
+ **Charter:** typed design primitives — typography, color, gradients/tints/accents, theming —
197
+ consumed by everything above it in the tier order.
198
+
199
+ ### `ui` is dissolved as a physical layer
200
+
201
+ Audited full contents of `ui`: `HStack.vue`, `VStack.vue`, `ZStack.vue`, `Spacer.vue`, one CSS
202
+ file, and `app/layouts/default.vue`. Everything `ui/CLAUDE.md` documents (Typography/, Links/,
203
+ Media/, Mast/, Site/, `breakpoints.ts`) has already migrated to `typography`, `navigation`, and
204
+ `visual` — confirmed those files live there now, `ui/CLAUDE.md` is stale and describes a
205
+ structure that no longer exists in this layer.
206
+
207
+ `ui`'s only two remaining jobs: (1) `extends: ['typography', 'navigation', 'visual']` as a
208
+ convenience bundle, and (2) own 4 unrelated stack/spacing primitives. Job 1 duplicates what the
209
+ Tier 1 sub-layer/toggle manifest (separate future work) will do natively. Job 2 doesn't belong in
210
+ a design-system layer — `HStack`/`VStack`/`ZStack`/`Spacer` are flexbox/positioning layout
211
+ primitives.
212
+
213
+ **Decision:** delete `ui` as a layer. Move `HStack.vue`, `VStack.vue`, `ZStack.vue`, `Spacer.vue`
214
+ into `layout` (Tier 2), next to `Container.vue`. Consumers that previously did
215
+ `extends: ['ui']` now either extend `['typography', 'navigation', 'visual']` directly, or use the
216
+ Tier 1 manifest once it exists.
217
+
218
+ ### `MastMain` / grid-root duplication (found while tracing `ui`'s dissolved `default.vue`)
219
+
220
+ Two competing implementations of the same grid-root DOM contract existed:
221
+
222
+ - `navigation/Mast/Main.vue` (`MastMain`) — naive stub: `<div class="mastmain"><slot/></div>`,
223
+ dead `<!-- <UMain> -->` comments, wrong element (`<div>` not `<main>`, loses the page's `<main>`
224
+ landmark — an accessibility regression), no grid-mode awareness, no disabled-mode fallback.
225
+ - `layout/Layout/Main.vue` (`LayoutMain`) — the real one: semantic `<main>` (configurable tag),
226
+ reads `useGridConfig()`, applies grid padding, has a `disabled`-mode escape hatch. This is what
227
+ `layout`'s own CLAUDE.md documents as canonical.
228
+
229
+ `ui`'s (now-dissolved) `default.vue` used the weak `navigation` stub, not the real `layout`
230
+ component. Not currently biting anyone — every current playground page sets `layout: false` or
231
+ points at its own `layouts/grid.vue` — but a silent trap for any future consumer using an
232
+ unmodified default layout.
233
+
234
+ **Decisions:**
235
+
236
+ - Delete `navigation/Mast/Main.vue` outright — not salvageable, the real implementation already
237
+ exists in `layout`.
238
+ - Grid-root ownership moves fully to `layout` (Tier 2, Structure) — it was never a Design System
239
+ concern. `layout` gets its own real default layout using `LayoutMain`; no design-system-tier
240
+ layer should ship a page-shell default layout again.
241
+ - Rename the `.mastmain` CSS class itself (not just the component) — the class string is threaded
242
+ through `grids.css`, `useGridConfig`, and `layout`'s CLAUDE.md, and a component-only rename
243
+ would leave the exact naming confusion that caused this bug. Component name `LayoutMain` stays
244
+ as-is (already consistent with `LayoutContainer`, `LayoutSection`, `LayoutGridItem` — not the
245
+ outdated part). Target CSS class name not yet chosen (candidate: `.grid-root`).
246
+
247
+ ### `theme` → `theming`
248
+
249
+ Confirmed rename. Functional scope (static tokens only vs. real multi-theme runtime switching) is
250
+ **not yet re-confirmed** — flagged early in the discussion, implicitly superseded by the rename
251
+ decision but never explicitly re-settled. Open item.
252
+
253
+ ### Other Tier 1 content, audited, no action needed yet
254
+
255
+ - `typography`: `Typography/*` components (`CodeBlock`, `Headline`, `HeadlineScreen`,
256
+ `QuoteBlock`, `RepeatText`, `TextStroke`, base `index.vue`), `useTypography`, `useColor`,
257
+ `repeatFill` composable, `colors.ts`/`typography.ts` types. Fits charter.
258
+ - `visual`: `Accent/{Blob,Scene}`, `Base/Modal`, `Gradient/{Background,Text}`, `Media/Picture`,
259
+ `Progress/{Bar,Circular}`, `Tint/Overlay`, matching composables, `colorTokens`/`gradientStyle`/
260
+ `responsiveSizes` utils (all with tests). Fits charter.
261
+
262
+ ### `typography` component audit + prop standardization
263
+
264
+ Traced real consumers per component (playground's `typography.vue`/`ui.vue` demo pages +
265
+ `starter`'s design-system showcase count as legitimate usage for a component-library monorepo,
266
+ unlike `core`'s debug-only diagnostics page).
267
+
268
+ - **`HeadlineScreen.vue` — delete.** Zero usages anywhere, including demos. Strictly a worse
269
+ subset of `Headline.vue`: `Headline` already supports everything `HeadlineScreen` does
270
+ (`fluidSize`) plus a fixed `size` option, with fluid defaults that scale per heading level
271
+ (`h1`→`6xl` … `h6`→`lg`) where `HeadlineScreen` flat-defaults every level to `2xl`. `Headline`
272
+ also renders through the shared `<Typography>` base; `HeadlineScreen` bypasses it, breaking
273
+ the delegation pattern every sibling follows.
274
+ - **`RepeatText`** — still in active development per direct confirmation, not audited this pass.
275
+
276
+ **Prop inconsistency found across the remaining semantic text components** (`TextStroke`
277
+ excluded — different domain, an SVG stroke-effect component with no typography props, not an
278
+ inconsistency to fix):
279
+
280
+ | Component | Props declared |
281
+ | ------------------- | ---------------------------------------------------------------------------------------- |
282
+ | `Typography` (base) | `tag, weight, width, slant, leading, tracking, align, transform, color, size, fluidSize` |
283
+ | `Headline` | same 11, via `level` instead of `tag`, + `class` |
284
+ | `CodeBlock` | only `language, color, size, class` |
285
+ | `QuoteBlock` | only `color, size` |
286
+
287
+ `CodeBlock`/`QuoteBlock` already render through `<Typography>` under the hood and forward
288
+ `$attrs` to it — so the other 9 axes technically work if passed, they're just untyped and
289
+ invisible to autocomplete on those two components. Confirmed: the delegation architecture the
290
+ user asked for already exists (`Typography/index.vue` is the one generic base component every
291
+ wrapper renders through); the actual fix is closing the gap between what already delegates at
292
+ runtime and what's typed, not building new architecture.
293
+
294
+ **Decisions:**
295
+
296
+ 1. Every wrapper component (`Headline`, `CodeBlock`, `QuoteBlock`) explicitly declares the full
297
+ canonical prop set in its own `defineProps` and calls `useTypography()`/`useColor()` directly
298
+ — see decision 4 (architecture refactor) below for why this is composable calls, not
299
+ `<Typography>` component wrapping.
300
+ 2. Drop the manual `class: classProp` destructure-and-remerge pattern (present in `Headline` and
301
+ `CodeBlock`, absent from `Typography` and `QuoteBlock`) — Vue's automatic `$attrs` class
302
+ merging already does this without the extra code. Standardize on the implicit pattern
303
+ everywhere.
304
+ 3. **New `font` prop**, replacing hardcoded utility classes like `CodeBlock`'s current
305
+ `class="font-mono"`. Requires new token infrastructure — none exists yet (confirmed: no
306
+ `@theme { --font-* }` block anywhere in `core`/`typography`/`visual`; `--font-mono` is
307
+ referenced defensively in `feeds`/`shader` CSS but the variable itself is never defined,
308
+ silently falling through to its fallback value).
309
+ - Define `--font-sans`, `--font-mono`, `--font-display` (or whatever set is chosen) in a
310
+ `@theme` block in `typography.css` — matches the existing pattern where every other
311
+ typography-axis type (`FontWeight`, `FontLeading`, `FontTracking`) already lives in the
312
+ `typography` layer, not `core`. Tailwind v4 auto-generates the `font-sans`/`font-mono`/
313
+ `font-display` utility classes from these.
314
+ - Add a `FontFamily` type to `typography/app/types/typography.ts`, typed directly off the
315
+ chosen token names so the prop and the CSS can't drift apart.
316
+ - Add `font` to the canonical prop set on `Typography/index.vue`, wired through
317
+ `useTypography` to emit `font-${font}`.
318
+ - Sensible per-component defaults: `Typography`/`Headline`/`QuoteBlock` default `font: 'sans'`;
319
+ `CodeBlock` defaults `font: 'mono'` (directly replacing its current hardcoded class).
320
+ - **Open item, not yet decided**: actual font families to use. No real webfont loading exists
321
+ in this design-system layer today (confirmed: no `@nuxt/fonts`/Google Fonts module in
322
+ `core`/`typography`; only the unrelated `visual-identity` app has one). Options: system-font
323
+ stacks for `sans`/`mono`/`display` now with real webfont loading as separate later work, or
324
+ specific fonts chosen now. Not resolved this pass.
325
+ 4. **Architecture refactor: stop wrapping the `<Typography>` component, call the composables
326
+ directly.** `useTypography()`/`useColor()` (`layers/typography/app/composables/typography.ts`,
327
+ `color.ts`) are already pure, headless, no-DOM functions — props in, class string out. That's
328
+ already the abstraction layer being asked for; it's just not used as the primary interface.
329
+ Right now `Headline`/`CodeBlock`/`QuoteBlock` reach it indirectly by wrapping the
330
+ `<Typography>` _component_, adding an extra nested-component hop in the render tree
331
+ (`<Headline>` → `<Typography>` → actual DOM tag) to reach logic that already sits one level
332
+ lower as a plain function.
333
+
334
+ Refactor: `Headline`/`CodeBlock`/`QuoteBlock` call `useTypography()`/`useColor()` directly and
335
+ render their own root element with the computed classes — the same pattern
336
+ `Typography/index.vue` itself already uses internally. `Typography/index.vue` becomes just one
337
+ more consumer of the composables (the generic "any tag, any axis" primitive for ad-hoc use),
338
+ not a mandatory pass-through for every other typography component. Side benefit: unlocks
339
+ components outside the typical semantic set — e.g. `TextStroke`, which currently has no
340
+ typography classes at all — to opt into consistent typography styling later without needing to
341
+ nest inside `<Typography>`.
342
+
343
+ ### `visual/app/types/breakpoints.ts` — resolved
344
+
345
+ Traced real consumers per vocabulary: every export except `ResponsiveBreakpoint`/
346
+ `BREAKPOINT_VALUES` (the Tailwind-matching one) has **zero** external references anywhere in the
347
+ repo — `DeviceBreakpoint`, `PhoneBreakpoint`, `TabletBreakpoint`, `DeviceOrientation`,
348
+ `ORIENTATION_BREAKPOINTS`, `AllBreakpoints` are only referenced inside their own file. Confirms
349
+ the original audit's ~15%-used figure precisely.
350
+
351
+ Also found: this design system currently runs **two half-overlapping breakpoint scales**.
352
+ `BREAKPOINT_VALUES` mirrors Tailwind's generic defaults (640/768/1024/1280/1536px), while
353
+ `layout`'s own Swiss Grid density breakpoints are `48rem`/`80rem` (per its CLAUDE.md) — those
354
+ only coincidentally match 2 of Tailwind's 4 values (`48rem`=768px=`md`, `80rem`=1280px=`xl`;
355
+ `sm`/`lg`/`2xl` correspond to nothing grid-related).
356
+
357
+ Separately, "container breakpoints" turned out to name two different things: `core`'s
358
+ `container.css` is max-width sizing classes (`.container-content/wide/fluid/full`), unrelated to
359
+ breakpoints. The actual container-_query_ breakpoints (`@container (width >= 30rem/44rem/52rem)`)
360
+ live hardcoded, ad-hoc, directly in `layout/fluid.css` — no shared token/type backs them.
361
+
362
+ **Decisions:**
363
+
364
+ 1. Delete `DeviceBreakpoint`, `PhoneBreakpoint`, `TabletBreakpoint`, `DeviceOrientation`,
365
+ `ORIENTATION_BREAKPOINTS`, `AllBreakpoints`, and their value objects — zero consumers, cut
366
+ outright, not rebuilt.
367
+ 2. Replace `BREAKPOINT_VALUES`'s Tailwind-derived sm/md/lg/xl/2xl with breakpoints derived from
368
+ `layout`'s actual grid thresholds (`48rem`/`80rem` plus whatever else the grid needs) — one
369
+ real scale instead of two overlapping ones.
370
+ 3. Formalize the 3 ad-hoc `layout/fluid.css` container-query values (`30rem`/`44rem`/`52rem`)
371
+ into named tokens.
372
+
373
+ ### Container responsiveness strategy — breakpoints + container queries combined
374
+
375
+ `AppContainer`'s CSS already sets `container-type: inline-size` on all four size variants
376
+ (`container.css`) — meaning every descendant already has a live container-query context, the same
377
+ mechanism `layout/fluid.css`'s `@container` breakpoints and `typography.css`'s `-cq` fluid text
378
+ variants already use. That half already ships, just not used as a deliberate strategy.
379
+ `AppContainer`'s own sizing (`content`=65ch, `wide`=90rem, `fluid`=100%, `full`=100vw), by
380
+ contrast, is one static value per variant — it doesn't itself respond to viewport width.
381
+
382
+ **Decision:** combine both deliberately, split by scope —
383
+
384
+ - **Viewport breakpoints** (the new custom scale from decision 2 above) decide macro/page-level
385
+ layout: which container size variant is active, grid-mode switches, nav collapse points,
386
+ structural decisions that need to know about the whole page/device.
387
+ - **Container queries** decide everything rendered inside `AppContainer` — since
388
+ `container-type: inline-size` is already there, any nested component responds to the
389
+ container's real width rather than the viewport's, which matters once a component can render
390
+ inside a sidebar, a modal, or a narrower section.
391
+ - `AppContainer`'s own max-width values become responsive across the new breakpoint tokens
392
+ (rather than one fixed value per size), while everything nested inside it uses `@container`
393
+ against `AppContainer`'s own box. Standard "outer responds to viewport, inner responds to its
394
+ own box" pattern, made deliberate instead of accidental.
395
+
396
+ **Third technique, combined with the two above**: fluid (`clamp()`) sizing for the size variants
397
+ themselves, extending the same pattern `typography.css`'s fluid type scale already proves out
398
+ (clamp scale + `-cq` container-relative variant + breakpoint-derived endpoints). Each technique
399
+ answers a different question:
400
+
401
+ - **Breakpoints** decide _which mode_ — which named size variant is active, when macro/structural
402
+ switches happen — and set the `clamp()` bounds themselves (the min/max endpoints).
403
+ - **`clamp()`** decides _how it moves within that mode_ — continuous scaling instead of an abrupt
404
+ jump at a hard breakpoint. E.g. `wide` becomes `clamp(65rem, 85vw, 90rem)` instead of a flat
405
+ `90rem`.
406
+ - **Container queries** decide how _descendants_ respond to `AppContainer`'s real rendered width,
407
+ independent of both of the above.
408
+
409
+ `AppContainer`'s size variants (`content`/`wide`/`fluid`/`full`) move from single fixed values to
410
+ `clamp()` expressions bounded by the new breakpoint tokens.
411
+
412
+ ### `theme`/`visual` app.config + theming scope — resolved
413
+
414
+ No actual conflict between the two config surfaces — each has its own separate, real defect
415
+ instead.
416
+
417
+ - **`visual`'s `app.config.ts` uses the `uiLayer` namespace** — leftover from before this
418
+ gradient/accent-scene config was split out of the (now-dissolved) `ui` layer. Now orphaned:
419
+ config that lives in `visual` is namespaced under a layer name that no longer exists.
420
+ - **`theme`'s `app.config.ts` is a broken stub**: `{ themeLayer: {} }`, not even using
421
+ `defineAppConfig()`. Real consumers exist and expect it populated —
422
+ `useAccentColor.ts` reads `themeLayer.defaultAccent` (falls back to a hardcoded `'blue'` since
423
+ config provides nothing), `ThemePicker/Colors.vue` reads `themeLayer.accents` (falls back to
424
+ `[]`, picker renders empty by default). The type augmentation also lives in a separate file
425
+ (`types/app-config.d.ts`) instead of inside `app.config.ts` itself, violating the repo's own
426
+ documented rule that both must live together.
427
+ - This also resolves **`theming`'s functional scope**, decisively: `useTheme()` composes
428
+ `useAccentColor` + `useThemeContrast` + `useThemeMotion` + `useThemeTransparency`, backed by a
429
+ `theme-fouc.ts` server plugin for flash-prevention and a real `ThemePicker` UI. Already a
430
+ genuine runtime accessibility-preference system (accent color, contrast, motion, transparency —
431
+ each with `system`/`on`/`off` override), confirmed via code — not tokens-only, no scope
432
+ decision needed, just the rename.
433
+
434
+ **Decisions:**
435
+
436
+ 1. Rename `visual`'s `uiLayer` config namespace → `visualLayer`.
437
+ 2. Fix `theme`'s `app.config.ts`: real defaults for `accents`/`defaultAccent`, use
438
+ `defineAppConfig()`, move the type augmentation into the same file per the repo's own rule.
439
+ 3. `theming` rename proceeds as previously confirmed — functional scope already correct as-is.
440
+
441
+ ### `LayoutContainer` shim — delete
442
+
443
+ This redesign is already a breaking pass everywhere else (renaming `Container`→`AppContainer`,
444
+ deleting `ui` as a layer, deleting `HeadlineScreen`) — keeping one back-compat shim is
445
+ inconsistent. Delete `layout/Layout/Container.vue`; migrate its one real usage (playground demo)
446
+ directly to `<AppContainer>`.
447
+
448
+ ### Font families for the `font` prop — resolved
449
+
450
+ No real webfont loading exists anywhere in the design system today. Default to system-font
451
+ stacks for `sans`/`mono`/`display` now — matches what `core/base.css` already does
452
+ (`font-family: system-ui, sans-serif`) — and defer real custom webfont choice to later,
453
+ non-blocking.
454
+
455
+ **Tier 0 and Tier 1 are both fully closed** — every open item above is resolved.
456
+
457
+ ## Consolidated action list (Tier 0 + Tier 1)
458
+
459
+ - [x] `core`: flip `future.compatibilityVersion: 5`
460
+ - [x] `core`: audit `tsconfig.json` files repo-wide for `baseUrl` reliance
461
+ - [x] `core`: grep repo-wide for Options API stragglers (expect zero)
462
+ - [x] `core`: rename `Container.vue` → `AppContainer.vue` (all consumers migrated, shims deleted)
463
+ - [x] `core`: delete `assets/css-backup.zip`
464
+ - [x] `core`: read `base.css` + `layout.css` contents — both clean resets, correctly homed, no
465
+ action needed (see Tier 2 doc)
466
+ - [x] `core`: keep `useRendering` as-is (no action, decision recorded for traceability)
467
+ - [x] `core`: delete `plugins/feature-detection.client.ts`; `useFeatures` composable kept on-demand
468
+ - [x] `core`: delete `useScrollGuard` composable, `plugins/scroll-guard.client.ts`,
469
+ `types/scroll-guard.ts`; clamping decision logic ported to
470
+ `utils/scrollGuardClamp.ts` + `.test.ts`
471
+ - [x] `core`: `@vite-pwa/nuxt` module entry + `pwa: { workbox: {...} }` config block commented out;
472
+ `usePWAInfo`/`useCache` left in place, dormant
473
+ - [x] `baseline`: merge into `scripts` (not `core`) — see scope note at top of document
474
+ - [x] `core`: delete `plugins/init.ts` (dev-only console-log scaffolding, zero production value)
475
+ - [x] `core`: delete `composables/useEnv.ts` (no-op pass-through, consumers use
476
+ `useRuntimeConfig()` directly)
477
+ - [x] `core`: delete `utils/helpers.ts` (zero real usage repo-wide once `useScrollGuard` is gone)
478
+ - [x] `core`: delete `utils/regex.ts` (dead duplicate of `navigation/app/utils/regex.ts`)
479
+ - [x] `core`: remove dead commented-out `console.log` debug lines from `LoadingScreen.vue` and
480
+ `plugins/loading.client.ts`
481
+ - [x] `core`: add `<NuxtLoadingIndicator />` to `app.vue` (page-level nav progress; `LoadingScreen`
482
+ stays as the separate app-level boot splash)
483
+ - [x] `core`: finish `error.vue`'s real implementation (currently commented out, bare stub ships
484
+ in production) — uncomment and wire against the same UEmpty/actions pattern `[...slug].vue`
485
+ already proves out
486
+ - [x] `.claude/rules/nuxt-layers.md`: add the CSS single-build-root rule
487
+ - [x] Delete `ui` as a layer
488
+ - [x] Move `HStack.vue`, `VStack.vue`, `ZStack.vue`, `Spacer.vue` from `ui` → `layout`
489
+ - [x] Update `LayoutContainer` shim's internal `<Container>` reference → `<AppContainer>`
490
+ - [x] Delete `navigation/Mast/Main.vue`
491
+ - [x] Give `layout` its own real default layout using `LayoutMain`
492
+ - [x] Rename `.mastmain` CSS class repo-wide (candidate: `.grid-root`)
493
+ - [x] Rename `theme` layer → `theming`
494
+ - [x] Delete `layout/Layout/Page/Container.vue` — playground demo card for it removed (nothing
495
+ migrated onto `LayoutPage`; the card was pure documentation text, not a live usage)
496
+ - [x] `typography`: delete `HeadlineScreen.vue`
497
+ - [x] `typography`: add `font` prop infrastructure — `@theme` font tokens in `typography.css`,
498
+ `FontFamily` type, wire into `Typography/index.vue` + `useTypography`
499
+ - [x] `typography`: refactor `Headline`/`CodeBlock`/`QuoteBlock` to call `useTypography()`/
500
+ `useColor()` directly (own root element) instead of wrapping the `<Typography>` component;
501
+ give each the full canonical prop set in the process
502
+ - [x] `typography`: drop the manual `class: classProp` destructure pattern from `Headline` and
503
+ `CodeBlock`; rely on implicit `$attrs` class merging everywhere
504
+ - [x] `CodeBlock`: replace hardcoded `class="font-mono"` with `font="mono"` prop
505
+ - [x] `visual`: **finding corrected, not blindly executed** — `DeviceBreakpoint`/`PhoneBreakpoint`/
506
+ `TabletBreakpoint`/`DeviceOrientation` and their `*_VALUES` consts are NOT dead: real
507
+ consumers exist (`responsiveSizes.ts`'s `buildResponsiveSizesQueries()`, tested, wired into
508
+ `usePicture`/`Picture.vue`). Kept those. Deleted only the genuinely zero-consumer parts:
509
+ `BreakpointValues`/`BreakpointKey`/`BreakpointValue`, `DeviceBreakpointValues`/`Key`/`Value`,
510
+ `PhoneBreakpointValues`/`Key`/`Value`, `TabletBreakpointValues`/`Key`/`Value`,
511
+ `ORIENTATION_BREAKPOINTS`, `OrientationBreakpoints`, `AllBreakpoints` — derived helper
512
+ types/consts nobody imported.
513
+ - [x] `visual`/`core`: `BREAKPOINT_VALUES` already resolved — `sm`/`md`/`lg`/`xl` repoint at core's
514
+ `BREAKPOINT_PX` (768/1280 = 48rem/80rem, exactly `layout`'s grid thresholds) from the earlier
515
+ Phase 3 breakpoint migration. Only `2xl` (1536, no grid equivalent) stays hand-written. No
516
+ further change needed.
517
+ - [x] `layout`: formalize the 3 ad-hoc `fluid.css` container-query values (`30rem`/`44rem`/`52rem`)
518
+ into named tokens
519
+ - [x] `core`: convert `AppContainer`'s size variants (`content`/`wide`/`fluid`/`full`) from fixed
520
+ max-width values to `clamp()` expressions bounded by the new breakpoint tokens
521
+ - [x] `visual`: rename `app.config.ts`'s `uiLayer` namespace → `visualLayer`
522
+ - [x] `theme`/`theming`: fix `app.config.ts` — real `accents`/`defaultAccent` defaults, use
523
+ `defineAppConfig()`, move the `types/app-config.d.ts` augmentation into the same file
524
+ - [x] Delete `layout/Layout/Container.vue` (`LayoutContainer` back-compat shim); playground's
525
+ back-compat comparison card removed, live `<Container>` usage migrated to `<AppContainer>`
526
+ - [x] `typography`: default `font` prop's `sans`/`mono`/`display` tokens to system-font stacks
527
+ (real webfont choice deferred, non-blocking)
528
+
529
+ ## Not yet covered
530
+
531
+ Tiers 2 (Structure), 3 (Content), 4 (Data), 5 (Motion), 6 (Render), 7 (Delivery), and the Tier
532
+ sub-layer/toggle mechanism design are separate passes, to be written up as follow-on sections or
533
+ documents.