Curated visual styles for Frontend Slides. Each preset includes specific font choices, color palettes, and animation approaches to ensure distinctive, non-generic designs.
Vibe: Futuristic, techy, confident, cutting-edge
Typography:
Clash Display (700) — Bold, geometric, modernSatoshi (400/500) — Clean, technical, readableColors:
:root {
--bg-primary: #0a0f1c;
--bg-secondary: #111827;
--text-primary: #ffffff;
--text-secondary: #94a3b8;
--accent: #00ffcc;
--accent-secondary: #ff00aa;
--glow: rgba(0, 255, 204, 0.4);
}
Signature Elements:
Animation Style:
Vibe: Premium, trustworthy, sophisticated, corporate
Typography:
Libre Baskerville (700) — Classic, authoritativeSource Sans 3 (400/600) — Professional, highly readableColors:
:root {
--bg-primary: #0f172a;
--bg-secondary: #1e293b;
--text-primary: #f8fafc;
--text-secondary: #94a3b8;
--accent: #3b82f6;
--accent-secondary: #818cf8;
--gold: #fbbf24;
}
Signature Elements:
Animation Style:
Vibe: Inspiring, vast, contemplative, visionary
Typography:
Space Grotesk (700) — Geometric, space-ageDM Sans (400/500) — Modern, friendlyColors:
:root {
--bg-primary: #030712;
--bg-secondary: #111827;
--text-primary: #f9fafb;
--text-secondary: #6b7280;
--accent: #818cf8;
--accent-secondary: #c084fc;
--stars: rgba(255, 255, 255, 0.1);
}
Signature Elements:
Animation Style:
Vibe: Developer-focused, hacker aesthetic, retro-tech
Typography:
JetBrains Mono (700) — Monospace, code-likeJetBrains Mono (400) — Consistent monospaceColors:
:root {
--bg-primary: #0d1117;
--bg-secondary: #161b22;
--text-primary: #c9d1d9;
--text-secondary: #8b949e;
--accent: #39d353;
--accent-dim: rgba(57, 211, 83, 0.2);
--border: #30363d;
}
Signature Elements:
Animation Style:
Vibe: Editorial, literary, thoughtful, refined
Typography:
Cormorant Garamond (700) — Elegant, editorialSource Serif 4 (400) — Classic, readableColors:
:root {
--bg-primary: #faf9f7;
--bg-secondary: #f5f3ef;
--text-primary: #1a1a1a;
--text-secondary: #666666;
--accent: #c41e3a;
--border: #e5e2db;
}
Signature Elements:
Animation Style:
Vibe: Clean, precise, Bauhaus-inspired, geometric
Typography:
Archivo (800) — Strong, geometricNunito (400/600) — Friendly, roundedColors:
:root {
--bg-primary: #ffffff;
--bg-secondary: #f7f7f7;
--text-primary: #000000;
--text-secondary: #555555;
--accent: #ff3300;
--grid: rgba(0, 0, 0, 0.05);
}
Signature Elements:
Animation Style:
Vibe: Friendly, approachable, creative, playful
Typography:
Nunito (800) — Rounded, warmNunito (400/500) — Consistent warmthColors:
:root {
--bg-primary: #fef3f2;
--bg-secondary: #fef9f5;
--text-primary: #374151;
--text-secondary: #6b7280;
--accent: #f472b6;
--accent-secondary: #a78bfa;
--accent-tertiary: #34d399;
}
Signature Elements:
Animation Style:
Vibe: Human, storytelling, photographic, magazine
Typography:
Playfair Display (700) — Elegant, serif headlinesWork Sans (400) — Modern, readableColors:
:root {
--bg-primary: #fffbf5;
--bg-secondary: #f5efe6;
--text-primary: #2d2a24;
--text-secondary: #78716c;
--accent: #b45309;
--accent-secondary: #0369a1;
}
Signature Elements:
Animation Style:
Vibe: Raw, bold, unconventional, attention-grabbing
Typography:
Anton or Bebas Neue (900) — Massive, compressedIBM Plex Mono (400) — IndustrialColors:
:root {
--bg-primary: #ffffff;
--text-primary: #000000;
--accent: #ff0000;
--border: #000000;
}
Signature Elements:
Animation Style:
Vibe: Modern SaaS, energetic, approachable tech
Typography:
Cabinet Grotesk (800) — Modern, confidentInter (400/500) — Only allowed for this styleColors:
:root {
--bg-primary: #0f0f1a;
--gradient-1: #667eea;
--gradient-2: #764ba2;
--gradient-3: #f472b6;
--text-primary: #ffffff;
--text-secondary: #a1a1aa;
}
Signature Elements:
Animation Style:
| Vibe | Display Font | Body Font | Source |
|---|---|---|---|
| Techy/Modern | Clash Display | Satoshi | Fontshare |
| Professional | Libre Baskerville | Source Sans 3 | |
| Space/Future | Space Grotesk | DM Sans | |
| Developer | JetBrains Mono | JetBrains Mono | JetBrains |
| Editorial | Cormorant Garamond | Source Serif 4 | |
| Swiss/Minimal | Archivo | Nunito | |
| Playful | Nunito | Nunito | |
| Magazine | Playfair Display | Work Sans | |
| Brutalist | Anton | IBM Plex Mono | |
| SaaS Modern | Cabinet Grotesk | Inter | Fontshare/Google |
:root {
/* Standard curves */
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
--ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1);
--ease-out-cubic: cubic-bezier(0.33, 1, 0.68, 1);
/* Bouncy */
--ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
--ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275);
/* Smooth */
--ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);
/* Snappy */
--ease-snappy: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
class ParticleSystem {
constructor(canvas) {
this.canvas = canvas;
this.ctx = canvas.getContext('2d');
this.particles = [];
this.init();
}
init() {
this.resize();
for (let i = 0; i < 50; i++) {
this.particles.push({
x: Math.random() * this.canvas.width,
y: Math.random() * this.canvas.height,
vx: (Math.random() - 0.5) * 0.5,
vy: (Math.random() - 0.5) * 0.5,
radius: Math.random() * 2 + 1
});
}
this.animate();
}
animate() {
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
this.particles.forEach(p => {
p.x += p.vx;
p.y += p.vy;
// Wrap around edges
if (p.x < 0) p.x = this.canvas.width;
if (p.x > this.canvas.width) p.x = 0;
if (p.y < 0) p.y = this.canvas.height;
if (p.y > this.canvas.height) p.y = 0;
// Draw
this.ctx.beginPath();
this.ctx.arc(p.x, p.y, p.radius, 0, Math.PI * 2);
this.ctx.fillStyle = 'rgba(0, 255, 204, 0.5)';
this.ctx.fill();
});
requestAnimationFrame(() => this.animate());
}
}
.gradient-mesh {
background:
radial-gradient(at 40% 20%, hsla(280, 100%, 70%, 0.3) 0px, transparent 50%),
radial-gradient(at 80% 0%, hsla(200, 100%, 60%, 0.3) 0px, transparent 50%),
radial-gradient(at 0% 50%, hsla(340, 100%, 70%, 0.3) 0px, transparent 50%),
radial-gradient(at 80% 50%, hsla(180, 100%, 50%, 0.2) 0px, transparent 50%),
radial-gradient(at 0% 100%, hsla(250, 100%, 60%, 0.3) 0px, transparent 50%),
radial-gradient(at 80% 100%, hsla(20, 100%, 60%, 0.2) 0px, transparent 50%),
var(--bg-primary);
}
.starfield {
background-image:
radial-gradient(2px 2px at 20% 30%, white 0%, transparent 50%),
radial-gradient(2px 2px at 40% 70%, white 0%, transparent 50%),
radial-gradient(1px 1px at 50% 40%, white 0%, transparent 50%),
radial-gradient(1px 1px at 60% 60%, white 0%, transparent 50%),
radial-gradient(2px 2px at 90% 10%, white 0%, transparent 50%);
background-size: 200% 200%;
animation: twinkle 15s ease-in-out infinite;
}
@keyframes twinkle {
0%, 100% { background-position: 0% 0%; }
50% { background-position: 100% 100%; }
}
.noise {
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
opacity: 0.05;
}
Avoid these overused patterns that create "AI slop":
Fonts:
Colors:
#6366f1 (generic indigo)Layouts:
Animations:
Effects: