Aurora + Grain Radical Redesign — Design Document
Problem
The site looks flat: dark rectangles with barely-visible borders. Multiple CSS token tweaks have failed to produce a perceivable visual difference. The site needs texture, depth, movement, and visual interest.
Direction: Aurora + Grain
Three layered techniques that transform the entire visual feel:
- Animated aurora orbs in the hero (and optionally CTA section)
- SVG grain/noise texture overlaid site-wide
- Glassmorphic cards with real
backdrop-filterblur
Research Sources
- shadcn/ui v4: oklch dark tokens —
background: oklch(0.145 0 0),border: oklch(1 0 0 / 10%) - Tailwind CSS v4: zinc-950
oklch(14.1%), zinc-900oklch(21%)(via DeepWiki) - CSS-Tricks grainy gradients: SVG feTurbulence
baseFrequency=0.65,numOctaves=3,opacity: 0.10-0.12 - Aurora CSS technique (Dalton Walsh): 3 divs with
box-shadow: 0 0 45vmax 45vmax <color>, animated position + hue-rotate - MDN:
backdrop-filter,mix-blend-mode,@keyframes, SVG<feTurbulence> - 2026 trends: Dark glassmorphism, gradient mesh, micro-animations (SaaSFrame, DigitalUpward)
- Linear design system:
#121212base, Inter font, monochrome + single accent
1. Aurora Background (Hero + CTA)
Implementation
Three absolutely-positioned invisible divs behind hero content. Each has a huge colored box-shadow (45vmax blur radius) and animates position around the viewport on different timing cycles.
.aurora-orb {
position: absolute;
width: 1px;
height: 1px;
border-radius: 50%;
opacity: 0.6;
pointer-events: none;
}
.aurora-orb-1 {
box-shadow: 0 0 45vmax 45vmax rgba(99, 102, 241, 0.15); /* indigo */
animation: aurora-orbit-1 20s linear infinite, aurora-hue 15s linear infinite;
}
.aurora-orb-2 {
box-shadow: 0 0 45vmax 45vmax rgba(139, 92, 246, 0.12); /* violet */
animation: aurora-orbit-2 25s linear infinite, aurora-hue 20s linear infinite;
}
.aurora-orb-3 {
box-shadow: 0 0 45vmax 45vmax rgba(34, 197, 94, 0.08); /* emerald */
animation: aurora-orbit-3 18s linear infinite, aurora-hue 25s linear infinite;
}
@keyframes aurora-hue {
to { filter: hue-rotate(360deg); }
}
@keyframes aurora-orbit-1 {
0% { top: 20%; left: 30%; }
25% { top: 60%; left: 70%; }
50% { top: 80%; left: 20%; }
75% { top: 30%; left: 80%; }
100% { top: 20%; left: 30%; }
}
/* orbit-2 and orbit-3 similar but offset */
Where it appears
.herosection — full aurora effect.cta-finalsection — subtler version (lower opacity)- Dashboard pages — NO aurora (too distracting for app UI)
Performance
will-change: transform, filteron orbsprefers-reduced-motion: reduce→ disable animation, show static gradient instead- No JS required — pure CSS
2. SVG Grain Texture (Site-wide)
Implementation
An SVG feTurbulence noise filter applied as a ::after pseudo-element on body. Covers entire viewport, stays fixed, provides analog/film feel.
body::after {
content: "";
position: fixed;
inset: 0;
z-index: 9998;
pointer-events: none;
opacity: 0.10;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 600 600'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");
background-repeat: repeat;
background-size: 200px;
}
Key parameters
baseFrequency: 0.65— fine grain, not chunkynumOctaves: 3— enough detail without performance costopacity: 0.10— visible but not distracting on dark backgroundsz-index: 9998— above content but below toasts/modalspointer-events: none— doesn’t block interaction
Reduced motion
prefers-reduced-motion: reduce → keep grain (it’s static, not animated)
3. Glassmorphic Cards
All cards, modals, dropdowns
Replace solid var(--bg-surface) backgrounds with semi-transparent + blur:
.glass-surface {
background: rgba(255, 255, 255, 0.03);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border: 1px solid rgba(255, 255, 255, 0.08);
}
Applied to
.glass-card,.bento-card,.pricing-card,.waitlist-card.stat-card-v2,.dash-quick-tile.modal-content.auth-form-container.empty-state-illustrated- Navbar and topbar already have blur — increase transparency
Hover effect
Border brightens from 8% → 14% white opacity. No movement.
.glass-card:hover {
border-color: rgba(255, 255, 255, 0.14);
box-shadow: 0 0 1px rgba(255, 255, 255, 0.06);
}
Pricing featured card — gradient border
.pricing-card-featured {
position: relative;
border: none;
background: rgba(255, 255, 255, 0.04);
backdrop-filter: blur(16px);
}
.pricing-card-featured::before {
content: "";
position: absolute;
inset: 0;
border-radius: inherit;
padding: 1px;
background: conic-gradient(from 180deg, #6366f1, #8b5cf6, #a855f7, #6366f1);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
}
4. Button Updates
Primary button — gradient + glow
.btn-primary {
background: linear-gradient(135deg, #6366f1, #818cf8);
box-shadow: 0 2px 12px rgba(99, 102, 241, 0.25);
}
.btn-primary:hover {
box-shadow: 0 4px 20px rgba(99, 102, 241, 0.35);
}
CTA button — animated gradient
.btn-cta {
background: linear-gradient(135deg, #f97316, #fb923c, #f97316);
background-size: 200% 100%;
animation: cta-shimmer 3s ease-in-out infinite;
}
@keyframes cta-shimmer {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
5. Files Changed
| File | Changes |
|---|---|
docs/assets/css/style.css |
Aurora keyframes, grain overlay, glassmorphic card/modal/auth styles, button gradients, pricing gradient border |
docs/assets/js/toast.js |
Toast glassmorphic background update |
No HTML changes needed — aurora orbs for hero/CTA will be added via ::before/::after pseudo-elements on .hero and .cta-final (no new divs needed if we use pseudo-elements with box-shadows).
6. Accessibility & Performance
prefers-reduced-motion: reduce→ aurora animation disabled, shows static soft gradient- Grain is static (not animated) — no motion concern
backdrop-filterhas good browser support (97%+ per MDN)- Aurora uses
will-change: transformfor GPU compositing - No JS additions — everything is pure CSS
- Touch targets remain ≥ 44px
- Text contrast ratios preserved (grain at 10% opacity doesn’t affect text readability)
7. Verification Checklist
- Aurora orbs visible and slowly moving in hero section
- Grain texture visible (subtle film noise) across entire page
- Cards show glassmorphic blur — content partially visible through edges
- Pricing featured card has animated gradient border
- Primary buttons have gradient fill + glow shadow
- CTA has shimmer animation
prefers-reduced-motiondisables aurora and CTA animations- No horizontal scroll at 375px
- Jekyll build passes
- Dashboard pages work correctly (no aurora in app UI)