Restructure the standalone /projects route so the page entry only handles data preparation, composition, page-owned styles, and a thin client-script bootstrap.
Extract the hero/filter surface, atmosphere layers, and individual stack cards into dedicated Astro components under src/components/projects while preserving the existing route, copy, class names, data attributes, and stack-card markup contracts.
Move shared derived data and filter/depth constants into src/lib/projects-page.ts and centralize reveal, filtering, and pseudo-3D depth behavior in src/scripts/projects-page.ts so the interactive logic is isolated from the route template without changing current behavior.
Keep the standalone projects page styles owned by src/pages/projects/index.astro via a single global style block to avoid Astro scoping drift across cross-component selectors such as data-project hooks, reversed card layouts, focused states, and mobile callout resets.
Update projects page integration coverage to validate route plus component plus script contracts instead of a single oversized file snapshot, and add unit tests for derived page data, filter semantics, and exported interaction thresholds.