TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/sys-witch/llms.txt
Use this file to discover all available pages before exploring further.
Layout component is the root wrapper rendered for every route in Sys.Witch V2. It composes three distinct layers — the animated ParticleField canvas, the sticky PortalNav navigation bar, and the scrollable main content area — into a single full-screen flex column. A matching footer with a mono-font copyright line is appended on all non-home routes. Framer Motion’s AnimatePresence drives a blur-and-scale page transition whenever the route changes.
Structure
Layout renders a single outer div with min-h-screen flex flex-col relative and stacks three layers inside it:
| Layer | Element | z-index | Notes |
|---|---|---|---|
| Particle canvas | <ParticleField /> | z-0 | Sits behind everything |
| Navigation | <PortalNav /> | z-40 / z-50 | Suppressed on the home (/) route |
| Page content | <main> | z-10 | flex-grow, scrollable |
| Footer | <footer> | z-10 | Shown on all non-home routes |
pathname === "/") hides both PortalNav and the footer and removes the pt-24 pb-16 padding from main, leaving the full viewport available for the hero experience.
Page Transition
Layout uses Framer Motion’s AnimatePresence in "wait" mode, keyed to location.pathname, so each route unmounts before its successor mounts. The entering and exiting animation is:
Dark Background and Color Tokens
The page background is set onbody in main.css via the CSS custom property --bg-base: #050508. The corresponding Tailwind utility is bg-base. The full token palette used across the theme is:
body additionally sets font-family: Inter, sans-serif and -webkit-font-smoothing: antialiased / -moz-osx-font-smoothing: grayscale for crisp text rendering on dark backgrounds.
Footer
On non-home routes,Layout appends a footer with:
border-t border-neon-purple/20— a 1 px top border at 20 % neon-purple opacitybg-surface/50 backdrop-blur-sm— a semi-transparent frosted-glass surface- Monospaced copyright text:
© {year} // SYS.WITCH // NO ACTUAL SPELLS, JUST SUSPICIOUSLY ORGANIZED FILES. // SYS.WITCH // NO ACTUAL SPELLS, JUST SUSPICIOUSLY ORGANIZED FILES.
Usage
Wrap your page content withLayout at the router level. Because Layout already renders the <Outlet /> internally (via React Router’s <Outlet>), you only need to place it once at the root route:
Layout reads useLocation() internally to determine whether it is on the home route. Do not pass a pathname prop — the component sources it directly from the router context.Props
Layout accepts no props. All page content is injected through React Router’s <Outlet /> component rendered inside <main>.
Z-Index Reference
ParticleField
Rendered at z-0. Always beneath all other content. Uses
fixed inset-0 positioning so it never scrolls.PortalNav
The
<nav> element sits at z-40; the mobile hamburger button is at z-50 to remain clickable above the open menu overlay.Main + Footer
Page content and footer share z-10, placing them above the particle canvas but below the navigation.