Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dyed-in-the-wool/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Layout is the root shell component rendered by React Router’s <Outlet>. Every page in the portfolio lives inside it. It composes five key features:
- Fixed navigation header — sits above all content with a
mix-blend-differenceblend mode - Framer Motion animated nav underline — a shared layout indicator that slides between active links
DyeDropCursor— the custom cursor trail, always mounted atz-[100]AnimatePresencepage transitions — blur-fade animations keyed on the current route path- Grain texture overlay — a subtle SVG noise layer fixed above all content
Navigation
The nav header isfixed top-0 left-0 right-0 z-50 with mix-blend-difference text-white. This blend mode makes the header text and logo visually invert against any background color beneath it — so they stay legible on both light and dark surfaces without any color switching logic.
Navigation items are defined in the Ip array in Layout.js:
NavLink. When a link is active, a motion.div underline is injected using Framer Motion’s shared layout system:
layoutId="nav-indicator" means Framer Motion tracks the element across nav items and animates its position automatically whenever the active route changes.
The
mix-blend-difference technique on the header means nav text appears to invert against whatever background color sits below it. On a dark background the text appears white; on a light background it flips to dark. This means the navigation is always readable without any explicit color-switching logic — but it also means the header’s text color is entirely determined by the page background, not by a CSS variable or theme setting.DyeDropCursor
DyeDropCursor is rendered unconditionally at the top of the Layout JSX, outside the main content area:
pointer-events-none fixed inset-0 z-[100] overflow-hidden, so it floats above everything — including the grain overlay — without blocking any clicks or touch events. See the DyeDropCursor docs for full details.
Page Transitions
Pages are wrapped inAnimatePresence mode="wait" so the exiting page fully finishes its animation before the entering page begins. Each page transition is a motion.div keyed on location.pathname:
Grain Texture Overlay
Adiv is fixed over the entire viewport to add a tactile noise texture:
opacity-[0.03]— nearly invisible; adds texture without obscuring contentmix-blend-overlay— the noise interacts with the colours beneath itpointer-events-none— completely non-interactivez-40— sits above page content but below the navigation header (z-50) and cursor (z-[100])
Customization
Changing navigation items
Edit thenavLinks array (named Ip in the compiled source) at the top of Layout.js. Add, remove, or reorder objects — the nav renders the array directly:
Adjusting transition timing
Change theduration value on the motion.div transition inside AnimatePresence:
Disabling the grain overlay
Remove or comment out the<div> with opacity-[0.03] mix-blend-overlay. The rest of Layout is unaffected:
opacity-[0.03] to something like opacity-[0.015].