dev-mode layers two animation systems on top of each other to sell the retro-arcade illusion: a set of seven CSS keyframe utilities (registered as Tailwind classes) that handle ambient CRT effects and looping UI polish, and Framer Motion’sDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dev-mode/llms.txt
Use this file to discover all available pages before exploring further.
AnimatePresence which drives smooth page-to-page transitions. This page documents every animation class, its duration, and exactly where and how to modify or disable it.
CSS Keyframe Animations
All custom keyframes are defined insrc/assets/main.css and exposed as animate-* Tailwind utilities. Two of the seven (animate-pulse, animate-bounce) are Tailwind built-ins that dev-mode reuses without modification; the remaining five are fully custom.
| Class | Keyframe | Duration | Effect | Where used |
|---|---|---|---|---|
animate-flicker | flicker | 4s infinite | Subtle opacity oscillation (0.95 → 0.85 → 1) simulating CRT tube instability | Hero section overlay, logo |
animate-scanline | scanline-scroll | 8s linear infinite | A semi-transparent band sweeps from translateY(-100%) to translateY(100%) | ScanlineOverlay component |
animate-marquee | marquee | 20s linear infinite | Translates content from 100% to -100% for a horizontal ticker scroll | Tech-stack ticker bar |
animate-color-cycle | color-cycle | 6s infinite | Cycles text color through lime → magenta → cyan → lime with matching glow shadows | Animated accent headings |
animate-blink | blink | 1.5s infinite | Opacity 1 for first half, 0 for second half — hard cursor blink | Terminal cursor _ character |
animate-pulse | Tailwind built-in | 2s | Opacity drops to 0.5 at 50% of each cycle | Availability badge pulse dot |
animate-bounce | Tailwind built-in | 1s | Vertical translate bounce loop | Emoji/sprite decorations |
animate-flicker
The flicker animation mimics the imperceptible brightness variation of a CRT phosphor. It runs indefinitely at low intensity so it stays subliminal — the viewer feels the screen is “alive” without consciously noticing the flicker.tailwind.config.js:
animate-scanline
A single translucent horizontal band moves top-to-bottom across the screen on an 8-second linear loop. It is rendered inside theScanlineOverlay component (see CRT Overlay below) as a separate layer, so it never interferes with pointer events on the content beneath it.
animate-marquee
The marquee animation scrolls a continuous row of tech-stack badges from right to left across the full viewport width. Items are duplicated in the DOM so the loop appears seamless when the first copy exits the left edge.animate-color-cycle
This animation cycles a heading’s color and glow shadow through the three neon accents in sequence, creating an eye-catching rainbow-neon shimmer used sparingly on hero text.animate-blink
A hard on/off blink at 1.5-second intervals, identical to the cursor blink rate of a classic terminal. Used exclusively on the_ cursor character appended to typewriter-style text.
Framer Motion Page Transitions
Between every route change, dev-mode wraps the outgoing and incoming page in a Framer MotionAnimatePresence with mode="wait". The "wait" mode ensures the exit animation of the old page completes fully before the enter animation of the new page begins — this prevents two pages from being visible simultaneously and gives each transition a clean, discrete feel.
Transition Config
opacity, scale, filter) creates a zoom-and-defocus effect:
- Enter — the new page fades in, scales up from 98%, and snaps into focus from a 10 px blur.
- Exit — the old page fades out while slightly over-scaling to 102% and blurring out, giving the impression the content is receding into the screen.
Adjusting Duration
Change theduration value (in seconds) on the transition prop:
Disabling Transitions
To remove Framer Motion transitions entirely while keeping the component tree intact, replace themotion.div with a plain div and drop the AnimatePresence wrapper:
CRT Overlay — ScanlineOverlay
The ambient CRT effect seen across every page is rendered by aScanlineOverlay component that stacks three distinct layers, each assigned pointer-events-none and fixed inset-0 so they never capture clicks:
| Layer | CSS class | Effect |
|---|---|---|
| Static scanlines | scanlines | Repeating 4 px horizontal stripe pattern with 50% dark rows |
| Moving band | animate-scanline | Single translucent band sweeping top-to-bottom every 8 s |
| Edge vignette | crt-vignette | inset 0 0 100px rgba(0,0,0,0.9) box-shadow darkens all four screen edges |
opacity on the scanlines layer or increase the background-size to spread the lines further apart: