design system · v1

nebula

nebula is the design system that powers bryanchasko.com — a cosmic palette of deep navy, lavender accent, and aws orange highlight. every page on this site is built from the tokens documented below. dark mode is the default voice; light mode is a courtesy.

palette

brand chips first, semantic mappings second. semantic vars are the right citation in component css — brand vars are the source

brand

dark navy --nebula-dark-navy #1C2230

dark theme app shell

card navy --nebula-card-navy #0e1324

dark theme card surface

deep space --nebula-deep-space #0b0e14

dark theme background

nebula purple --nebula-purple #5E41A2

primary brand, links, active states

lavender --nebula-lavender #8169C5

hover states, secondary brand

lavender chip --nebula-lavender-chip #d8b4fe

dark mode link, soft accents

aws orange --nebula-orange #FF9900

highlight, cta accent, aws affiliation

aws orange dark --nebula-orange-dark #E68A00

orange hover state

semantic

--color-primary --nebula-purple primary action color
--color-primary-hover --nebula-lavender primary hover state
--color-accent --nebula-orange highlight + cta accent
--color-link --nebula-purple anchor color (light)
--color-link-hover --nebula-lavender-chip anchor hover (light)
--color-border --gray-200 card + divider borders
--color-border-hover --nebula-lavender interactive border highlight

typography

system stack — defaulting to platform fonts means crisp render at every viewport, zero web-font cost, no flash of unstyled text

font stacks

body --font-body

the quick brown fox jumps over the lazy dog

ui + prose

mono --font-mono

the quick brown fox jumps over the lazy dog

code, terminal greeting, var names

type scale

--font-size-xs 12px · 0.75rem

cosmic chip caption

--font-size-sm 14px · 0.875rem

body-secondary, meta

--font-size-base 16px · 1rem

paragraph body

--font-size-lg 18px · 1.125rem

lead paragraph

--font-size-xl 20px · 1.25rem

card title

--font-size-2xl 24px · 1.5rem

section h3

--font-size-3xl 30px · 1.875rem

section h2

--font-size-4xl 36px · 2.25rem

page h1

line height

tight --line-height-tight 1.25

stacking lines at this rhythm. the cosmic ledger keeps its accounting clean even as it stretches across the viewport. each line earns its place

headings

base --line-height-base 1.6

stacking lines at this rhythm. the cosmic ledger keeps its accounting clean even as it stretches across the viewport. each line earns its place

body prose

relaxed --line-height-relaxed 1.75

stacking lines at this rhythm. the cosmic ledger keeps its accounting clean even as it stretches across the viewport. each line earns its place

long-form notes

spacing

a 4-based scale doubling at each step until the gutter takes over. measure twice, gap once

xs --space-xs 4px · 0.25rem
sm --space-sm 8px · 0.5rem
md --space-md 16px · 1rem
lg --space-lg 24px · 1.5rem
xl --space-xl 32px · 2rem
2xl --space-2xl 48px · 3rem
3xl --space-3xl 64px · 4rem

radius

chip → pill, the curve grows as the surface widens. nothing is ever fully square except code

sm --radius-sm 4px

chips, tag pills

md --radius-md 6px

inputs, code spans

lg --radius-lg 8px

cards, buttons

xl --radius-xl 12px

hero panels, feature cards

full --radius-full 9999px

pills, avatars

elevation

dark mode reads as depth; light mode reads as paper. the elevation stack is the same idea drawn twice

surface 0 --color-background

page canvas

surface 1 --color-background-secondary

subtle separation, code backgrounds

surface 2 --color-builder-card-bg

builder card section, dark callouts

card surface --nebula-card-navy

dark theme cards (lifted)

shadow

shadows do the work of suggesting depth without committing to it. small for separation, xl for modal weight

sm --shadow-sm

subtle separation

md --shadow-md

cards, dropdowns

lg --shadow-lg

floating panels

xl --shadow-xl

modals, hero overlays

motion

three transition durations. fast for attention, base for confirmation, slow for arrival. every easing is the same cubic-bezier — variation is duration, not curve

fast --transition-fast 150ms cubic-bezier(0.4, 0, 0.2, 1)

micro-interactions, hover color shifts

base --transition-base 200ms cubic-bezier(0.4, 0, 0.2, 1)

button press, link hover

slow --transition-slow 300ms cubic-bezier(0.4, 0, 0.2, 1)

card lift, panel entry

hover any swatch above to feel the timing

components

specimens of the most-used composed atoms — buttons, cards, code, callouts. each renders with the live theme css so this page stays honest

buttons

card

service card aws

cards use the glassmorphism gradient + nebula border. hover lifts via translate-Y and amplifies the corner glow

learn more →

callout / chip

tag aws hero --nebula-purple

code block

:root {
	--color-primary: var(--nebula-purple);
	--color-accent: var(--nebula-orange);
	--space-md: 1rem;
}

containers

three boundaries do all the layout work — page, prose, and gutter

max width --container-max-width 1200px

outer page bound

content width --content-max-width 65ch

prose column (45-75 char read-width)

container padding --container-padding var(--space-lg)

gutter on narrow screens

source

the canonical token file. this page renders from a curated mirror at data/theme.yaml. when the two diverge the css below wins. PRs welcome

themes/bryan-chasko-theme/assets/css/extended/nebula.css
/* =============================
   404 Cat Mascot Error State
   ============================= */
.cat-mascot {
	display: flex;
	justify-content: center;
	align-items: flex-end;
	margin: 0 auto var(--space-2xl) auto;
	width: 160px;
	height: 160px;
	position: relative;
	pointer-events: none;
}

.cat-head {
	position: relative;
	width: 120px;
	height: 110px;
	background: var(--secondary);
	border-radius: 100% / 120% 120% 80% 80%;
	box-shadow:
		0 4px 24px rgba(0, 0, 0, 0.1),
		0 1px 0 rgba(255, 255, 255, 0.1) inset;
	z-index: 2;
	transform-origin: bottom center;
	animation: head-tilt 4.5s cubic-bezier(0.7, -0.2, 0.3, 1.2) infinite;
}

.cat-ear {
	position: absolute;
	width: 38px;
	height: 48px;
	background: var(--secondary);
	top: -28px;
	z-index: 1;
	border-radius: 60% 60% 40% 40% / 100% 100% 60% 60%;
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.cat-ear--left {
	left: -10px;
	transform: rotate(-18deg) skewY(-8deg);
}
.cat-ear--right {
	right: -10px;
	transform: rotate(18deg) skewY(8deg);
}

.cat-face {
	position: absolute;
	top: 38px;
	left: 0;
	width: 100%;
	height: 60px;
	display: flex;
	justify-content: space-between;
	align-items: center;
	padding: 0 var(--space-lg);
}

.cat-eye {
	width: 28px;
	height: 28px;
	background: var(--theme);
	border-radius: 50%;
	position: relative;
	overflow: hidden;
	box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1) inset;
	display: flex;
	align-items: center;
	justify-content: center;
}
.cat-eye--left {
	margin-right: var(--space-sm);
}
.cat-eye--right {
	margin-left: var(--space-sm);
}

.cat-pupil {
	width: 12px;
	height: 12px;
	border-radius: 50%;
	background: radial-gradient(circle at 55% 55%, #222 60%, #444 100%);
	box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.18);
	position: absolute;
	left: 50%;
	top: 50%;
	transform: translate(-50%, -50%);
	animation: look-around 6.5s cubic-bezier(0.7, -0.2, 0.3, 1.2) infinite;
}

@keyframes look-around {
	0% {
		transform: translate(-50%, -50%) translate(0px, 0px);
	}
	8% {
		transform: translate(-50%, -50%) translate(4px, 2px);
	}
	16% {
		transform: translate(-50%, -50%) translate(-3px, 3px);
	}
	24% {
		transform: translate(-50%, -50%) translate(2px, -2px);
	}
	32% {
		transform: translate(-50%, -50%) translate(-2px, -3px);
	}
	40% {
		transform: translate(-50%, -50%) translate(3px, 1px);
	}
	48% {
		transform: translate(-50%, -50%) translate(-2px, 2px);
	}
	56% {
		transform: translate(-50%, -50%) translate(0px, 0px);
	}
	100% {
		transform: translate(-50%, -50%) translate(0px, 0px);
	}
}

@keyframes head-tilt {
	0%,
	90%,
	100% {
		transform: rotate(0deg);
	}
	10% {
		transform: rotate(-10deg);
	}
	20% {
		transform: rotate(8deg);
	}
	30% {
		transform: rotate(-6deg);
	}
	40% {
		transform: rotate(10deg);
	}
	50% {
		transform: rotate(-8deg);
	}
	60% {
		transform: rotate(6deg);
	}
	70% {
		transform: rotate(-10deg);
	}
	80% {
		transform: rotate(0deg);
	}
}

.error-title {
	text-align: center;
	font-size: 2.5rem;
	font-weight: 800;
	margin-top: var(--space-sm);
	margin-bottom: var(--space-sm);
	color: var(--color-primary);
}
.error-message {
	text-align: center;
	font-size: 1.25rem;
	color: var(--color-text-secondary);
	margin-bottom: var(--space-2xl);
}
.error-link {
	display: block;
	margin: 0 auto;
	width: fit-content;
	padding: var(--space-sm) var(--space-xl);
	font-size: 1.1rem;
	font-weight: 600;
	background: var(--color-primary);
	color: var(--white);
	border-radius: var(--radius-lg);
	text-decoration: none;
	box-shadow: 0 2px 8px rgba(94, 65, 162, 0.1);
	transition:
		background 0.2s,
		color 0.2s,
		transform 0.2s;
}
.error-link:hover {
	background: var(--color-primary-hover);
	color: var(--white);
	transform: translateY(-2px) scale(1.04);
}

@media (max-width: 600px) {
	.cat-mascot {
		width: 110px;
		height: 110px;
	}
	.cat-head {
		width: 80px;
		height: 70px;
	}
	.cat-ear {
		width: 24px;
		height: 30px;
		top: -16px;
	}
	.cat-face {
		top: 22px;
		height: 36px;
		padding: 0 10px;
	}
	.cat-eye {
		width: 16px;
		height: 16px;
	}
	.cat-pupil {
		width: 7px;
		height: 7px;
	}
	.error-title {
		font-size: 1.5rem;
	}
	.error-message {
		font-size: 1rem;
	}
	.error-link {
		font-size: 1rem;
		padding: var(--space-sm) var(--space-md);
	}
}
/* ============================================
   EXTENDED COLOR PALETTE SYSTEM
   
   Organization:
   1. Core Brand Colors (existing)
   2. WebGL Palette A: Vibrant Cosmic
   3. WebGL Palette B: Soft Tech
   4. Neutral Grays
   5. Syntax Highlighting (Catppuccin)
   6. Semantic Mappings (light/dark mode)
   ============================================ */

:root {
	/* ============================================
     CORE BRAND COLORS
     Primary identity colors used across all UI
     ============================================ */
	--brand-dark-navy: #1c2230;
	--brand-purple: #5e41a2;
	--brand-lavender: #8169c5;
	--brand-orange: #ff9900;
	--brand-orange-dark: #e68a00;
	--brand-lavender-light: #a78bfa;

	/* Legacy aliases (backwards compatibility) */
	--nebula-dark-navy: var(--brand-dark-navy);
	--nebula-purple: var(--brand-purple);
	--nebula-lavender: var(--brand-lavender);
	--nebula-orange: var(--brand-orange);
	--nebula-orange-dark: var(--brand-orange-dark);

	/* ============================================
     WEBGL PALETTE A: VIBRANT COSMIC
     Purple/Teal clash for dynamic energy effects
     Use for: Particle systems, active states, 
              high-energy animations
     ============================================ */
	--cosmic-base: #1c2230; /* Dark navy foundation */
	--cosmic-primary: #5e41a2; /* Deep purple */
	--cosmic-accent: #ff9900; /* Vibrant orange */
	--cosmic-energy: #00fa9a; /* Medium spring green - NEW */
	--cosmic-teal: #00ced1; /* Dark turquoise */
	--cosmic-purple-bright: #9d4edd; /* Bright purple highlight */

	/* ============================================
     WEBGL PALETTE B: SOFT TECH
     Clean, readable modern aesthetic
     Use for: UI overlays, tooltips, cards,
              professional/business contexts
     ============================================ */
	--tech-base: #f9fafb; /* Light gray foundation */
	--tech-primary: #8169c5; /* Lavender */
	--tech-accent: #a78bfa; /* Light lavender */
	--tech-gold: #ffd700; /* Gold - NEW (replaces orange) */
	--tech-slate: #475569; /* Slate gray for contrast */
	--tech-cyan: #06b6d4; /* Cyan for interactive elements */

	/* ============================================
     NEUTRAL GRAYS
     Systematic gray scale for backgrounds,
     borders, text hierarchy
     ============================================ */
	--white: #ffffff;
	--gray-50: #f9fafb;
	--gray-100: #f3f4f6;
	--gray-200: #e5e7eb;
	--gray-300: #d1d5db;
	--gray-400: #9ca3af;
	--gray-500: #6b7280;
	--gray-600: #4b5563;
	--gray-700: #374151;
	--gray-800: #2d3748;
	--gray-900: #1f2937;
	--gray-950: #111827;
	--black-light: #444;
	--black: #333;

	/* ============================================
     SYNTAX HIGHLIGHTING - CATPPUCCIN MACCHIATO
     Code editor theme colors
     ============================================ */
	--syntax-bg: #24273a;
	--syntax-text: #cad3f5;
	--syntax-error: #ed8796;
	--syntax-keyword: #c6a0f6;
	--syntax-constant: #f5a97f;
	--syntax-name: #8bd5ca;
	--syntax-function: #8aadf4;
	--syntax-builtin: #91d7e3;
	--syntax-class: #eed49f;
	--syntax-variable: #f4dbd6;
	--syntax-string: #a6da95;
	--syntax-comment: #6e738d;
	--syntax-highlight-bg: #474733;
	--syntax-line-number: #8087a2;
	--syntax-diff-bg: #363a4f;

	/* ============================================
     SEMANTIC COLOR MAPPINGS - LIGHT MODE
     Context-specific color assignments
     ============================================ */
	--color-primary: var(--brand-purple);
	--color-primary-hover: var(--brand-lavender);
	--color-accent: var(--brand-orange);
	--color-accent-dark: var(--brand-orange-dark);
	--color-dark: var(--brand-dark-navy);

	/* Light Theme Colors */
	--color-background: var(--white);
	--color-background-secondary: var(--gray-50);
	--color-text: var(--gray-900);
	--color-text-secondary: var(--gray-500);
	--color-text-muted: var(--black-light);
	--color-link: var(--brand-purple);
	--color-link-hover: var(--brand-lavender);
	--color-border: var(--gray-200);
	--color-border-hover: var(--brand-lavender);

	/* WebGL scene defaults (light mode) */
	--webgl-palette: vibrant-cosmic;
	--webgl-primary: var(--cosmic-primary);
	--webgl-accent: var(--cosmic-accent);
	--webgl-energy: var(--cosmic-energy);

	/* Spacing Scale */
	--space-xs: 0.25rem; /* 4px */
	--space-sm: 0.5rem; /* 8px */
	--space-md: 1rem; /* 16px */
	--space-lg: 1.5rem; /* 24px */
	--space-xl: 2rem; /* 32px */
	--space-2xl: 3rem; /* 48px */
	--space-3xl: 4rem; /* 64px */

	/* Typography */
	--font-body:
		-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu,
		Cantarell, sans-serif;
	--font-heading: var(--font-body);
	--font-mono:
		ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo,
		monospace;

	--font-size-xs: 0.75rem; /* 12px */
	--font-size-sm: 0.875rem; /* 14px */
	--font-size-base: 1rem; /* 16px */
	--font-size-lg: 1.125rem; /* 18px */
	--font-size-xl: 1.25rem; /* 20px */
	--font-size-2xl: 1.5rem; /* 24px */
	--font-size-3xl: 1.875rem; /* 30px */
	--font-size-4xl: 2.25rem; /* 36px */

	--line-height-tight: 1.25;
	--line-height-base: 1.6;
	--line-height-relaxed: 1.75;

	/* Border Radius */
	--radius-sm: 4px;
	--radius-md: 6px;
	--radius-lg: 8px;
	--radius-xl: 12px;
	--radius-full: 9999px;

	/* Shadows */
	--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
	--shadow-md:
		0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
	--shadow-lg:
		0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
	--shadow-xl:
		0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);

	/* Transitions */
	--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
	--transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
	--transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
}

/* Dark Theme Overrides */
[data-theme="dark"] {
	--color-background: var(--brand-dark-navy);
	--color-background-secondary: var(--gray-800);
	--color-text: var(--gray-100);
	--color-text-secondary: var(--gray-300);
	--color-text-muted: var(--gray-400);
	--color-link: var(--brand-lavender);
	--color-link-hover: var(--brand-lavender-light);
	--color-border: var(--gray-700);
	--color-border-hover: var(--brand-lavender);

	/* WebGL scene defaults (dark mode) */
	--webgl-primary: var(--cosmic-purple-bright);
	--webgl-accent: var(--cosmic-energy);
	--webgl-energy: var(--cosmic-teal);
}

/* Legacy PaperMod Variable Mappings for Compatibility */
:root {
	--theme: var(--color-background);
	--entry: var(--color-background-secondary);
	--primary: var(--color-text);
	--secondary: var(--color-text-secondary);
	--tertiary: var(--color-background-secondary);
	--content: var(--color-text);
	--hljs-bg: var(--gray-50);
	--code-bg: var(--gray-100);
	--border: var(--color-border);
}

[data-theme="dark"] {
	--theme: var(--color-background);
	--entry: var(--color-background-secondary);
	--primary: var(--color-text);
	--secondary: var(--color-text-secondary);
	--tertiary: var(--color-background-secondary);
	--content: var(--color-text);
	--hljs-bg: var(--gray-800);
	--code-bg: var(--gray-700);
	--border: var(--color-border);
}
/* Typography Styles */

body {
	font-family: var(--font-body);
	font-size: var(--font-size-base);
	line-height: var(--line-height-base);
	color: var(--color-text);
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	/* Light mode: Ethereal aurora mesh with dynamic color play */
	/* Primary aurora bands - large flowing gradients */
	background:
		radial-gradient(
			ellipse 120% 80% at 0% 0%,
			rgba(129, 105, 197, 0.28) 0%,
			transparent 50%
		),
		radial-gradient(
			ellipse 100% 70% at 100% 5%,
			rgba(255, 153, 0, 0.22) 0%,
			transparent 45%
		),
		radial-gradient(
			ellipse 90% 100% at 100% 100%,
			rgba(94, 65, 162, 0.25) 0%,
			transparent 55%
		),
		radial-gradient(
			ellipse 80% 70% at 0% 95%,
			rgba(255, 180, 100, 0.2) 0%,
			transparent 50%
		),
		/* Floating nebula clusters */
		radial-gradient(
			ellipse 50% 45% at 30% 20%,
			rgba(167, 139, 250, 0.18) 0%,
			transparent 45%
		),
		radial-gradient(
			ellipse 45% 50% at 75% 70%,
			rgba(255, 200, 100, 0.14) 0%,
			transparent 45%
		),
		radial-gradient(
			ellipse 40% 35% at 50% 50%,
			rgba(129, 105, 197, 0.12) 0%,
			transparent 40%
		),
		radial-gradient(
			ellipse 35% 40% at 20% 65%,
			rgba(255, 153, 0, 0.1) 0%,
			transparent 40%
		),
		radial-gradient(
			ellipse 30% 30% at 85% 25%,
			rgba(94, 65, 162, 0.08) 0%,
			transparent 35%
		),
		/* Luminous mesh base */
		linear-gradient(
			135deg,
			#faf8ff 0%,
			#fff9f5 6%,
			#f5f0ff 14%,
			#fffbf7 22%,
			#ede8ff 32%,
			#ffffff 42%,
			#fff7f0 52%,
			#f8f4ff 62%,
			#fffaf5 72%,
			#f0ebff 82%,
			#fff8f3 92%,
			#f8f5ff 100%
		);
	background-attachment: fixed;
}

/* ============================================
   LIGHT MODE ANIMATED BACKGROUND LAYERS
   ============================================ */

/* Layer 1: Primary aurora waves - slow majestic drift */
body::before {
	content: "";
	position: fixed;
	top: -50%;
	left: -50%;
	right: -50%;
	bottom: -50%;
	width: 200%;
	height: 200%;
	pointer-events: none;
	z-index: -3;
	/* Large aurora bands */
	background:
		radial-gradient(
			ellipse 80% 60% at 20% 30%,
			rgba(129, 105, 197, 0.2) 0%,
			transparent 50%
		),
		radial-gradient(
			ellipse 70% 50% at 80% 20%,
			rgba(255, 153, 0, 0.15) 0%,
			transparent 45%
		),
		radial-gradient(
			ellipse 60% 70% at 70% 80%,
			rgba(94, 65, 162, 0.18) 0%,
			transparent 50%
		),
		radial-gradient(
			ellipse 50% 60% at 25% 75%,
			rgba(255, 200, 120, 0.12) 0%,
			transparent 45%
		);
	animation: aurora-drift 35s ease-in-out infinite;
	transform-origin: center center;
}

/* Layer 2: Floating light orbs with parallax effect */
body::after {
	content: "";
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	pointer-events: none;
	z-index: -2;
	/* Bright highlight orbs */
	background:
		radial-gradient(
			circle 400px at 15% 20%,
			rgba(167, 139, 250, 0.15) 0%,
			transparent 60%
		),
		radial-gradient(
			circle 350px at 85% 15%,
			rgba(255, 180, 80, 0.12) 0%,
			transparent 55%
		),
		radial-gradient(
			circle 300px at 75% 85%,
			rgba(129, 105, 197, 0.14) 0%,
			transparent 55%
		),
		radial-gradient(
			circle 250px at 10% 80%,
			rgba(255, 153, 0, 0.1) 0%,
			transparent 50%
		),
		radial-gradient(
			circle 200px at 50% 45%,
			rgba(94, 65, 162, 0.08) 0%,
			transparent 50%
		),
		radial-gradient(
			circle 180px at 30% 60%,
			rgba(255, 200, 150, 0.06) 0%,
			transparent 45%
		);
	animation: orb-float 25s ease-in-out infinite;
}

/* Layer 3: Shimmer overlay - using a separate element */
.main::before {
	content: "";
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	pointer-events: none;
	z-index: -1;
	background: linear-gradient(
		45deg,
		transparent 0%,
		rgba(255, 255, 255, 0.5) 15%,
		transparent 30%,
		rgba(255, 255, 255, 0.4) 45%,
		transparent 60%,
		rgba(255, 255, 255, 0.3) 75%,
		transparent 90%,
		rgba(255, 255, 255, 0.2) 100%
	);
	background-size: 400% 400%;
	animation: prismatic-sweep 12s ease-in-out infinite;
	mix-blend-mode: overlay;
	opacity: 0.7;
}

/* Aurora drift - slow, majestic movement */
@keyframes aurora-drift {
	0% {
		transform: translate(0%, 0%) rotate(0deg) scale(1);
		opacity: 1;
	}
	25% {
		transform: translate(5%, -3%) rotate(2deg) scale(1.02);
		opacity: 0.95;
	}
	50% {
		transform: translate(-3%, 5%) rotate(-1deg) scale(0.98);
		opacity: 1;
	}
	75% {
		transform: translate(-5%, -2%) rotate(1deg) scale(1.01);
		opacity: 0.92;
	}
	100% {
		transform: translate(0%, 0%) rotate(0deg) scale(1);
		opacity: 1;
	}
}

/* Floating orbs - gentle bobbing motion */
@keyframes orb-float {
	0%,
	100% {
		transform: translateY(0) translateX(0);
		opacity: 1;
	}
	20% {
		transform: translateY(-20px) translateX(10px);
		opacity: 0.9;
	}
	40% {
		transform: translateY(15px) translateX(-15px);
		opacity: 0.95;
	}
	60% {
		transform: translateY(-10px) translateX(-8px);
		opacity: 0.88;
	}
	80% {
		transform: translateY(12px) translateX(12px);
		opacity: 0.92;
	}
}

/* Prismatic color sweep */
@keyframes prismatic-sweep {
	0%,
	100% {
		background-position: 0% 0%;
		filter: hue-rotate(0deg);
	}
	33% {
		background-position: 100% 50%;
		filter: hue-rotate(10deg);
	}
	66% {
		background-position: 50% 100%;
		filter: hue-rotate(-5deg);
	}
}

/* Subtle pulse for depth */
@keyframes ambient-pulse {
	0%,
	100% {
		opacity: 1;
		filter: brightness(1);
	}
	50% {
		opacity: 0.95;
		filter: brightness(1.02);
	}
}

/* Legacy keyframes for compatibility */
@keyframes ambient-drift-light {
	0%,
	100% {
		opacity: 1;
		transform: translateY(0) scale(1);
	}
	33% {
		opacity: 0.9;
		transform: translateY(-15px) scale(1.03);
	}
	66% {
		opacity: 0.95;
		transform: translateY(10px) scale(0.98);
	}
}

@keyframes shimmer-light {
	0%,
	100% {
		background-position: 0% 50%;
	}
	50% {
		background-position: 100% 50%;
	}
}

@keyframes ambient-drift {
	0%,
	100% {
		opacity: 1;
		transform: translateY(0) scale(1);
	}
	50% {
		opacity: 0.8;
		transform: translateY(-20px) scale(1.02);
	}
}

/* ============================================
   DARK MODE - DEEP SPACE NEBULA EFFECTS
   ============================================ */

[data-theme="dark"] body {
	/* Dark mode: immersive deep space with vibrant nebula clouds */
	/* Primary nebula clouds - purple/violet hues */
	background:
		radial-gradient(
			ellipse 120% 80% at 0% 0%,
			rgba(129, 105, 197, 0.25) 0%,
			transparent 50%
		),
		radial-gradient(
			ellipse 100% 70% at 100% 10%,
			rgba(94, 65, 162, 0.2) 0%,
			transparent 45%
		),
		radial-gradient(
			ellipse 90% 100% at 100% 100%,
			rgba(167, 139, 250, 0.18) 0%,
			transparent 55%
		),
		radial-gradient(
			ellipse 80% 70% at 0% 90%,
			rgba(129, 105, 197, 0.15) 0%,
			transparent 50%
		),
		/* Warm accent nebulae - orange/gold */
		radial-gradient(
			ellipse 50% 45% at 25% 30%,
			rgba(255, 153, 0, 0.12) 0%,
			transparent 45%
		),
		radial-gradient(
			ellipse 45% 50% at 80% 75%,
			rgba(255, 180, 100, 0.1) 0%,
			transparent 45%
		),
		radial-gradient(
			ellipse 40% 35% at 60% 40%,
			rgba(255, 153, 0, 0.08) 0%,
			transparent 40%
		),
		/* Deep space gradient base */
		linear-gradient(
			180deg,
			#080b12 0%,
			#0d1117 15%,
			#111827 35%,
			#0f1219 55%,
			#0d1117 75%,
			#080b12 100%
		);
	background-attachment: fixed;
}

/* Layer 1: Cosmic nebula drift - slow celestial movement */
[data-theme="dark"] body::before {
	content: "";
	position: fixed;
	top: -50%;
	left: -50%;
	right: -50%;
	bottom: -50%;
	width: 200%;
	height: 200%;
	pointer-events: none;
	z-index: -3;
	/* Large nebula clouds */
	background:
		radial-gradient(
			ellipse 80% 60% at 15% 25%,
			rgba(129, 105, 197, 0.2) 0%,
			transparent 50%
		),
		radial-gradient(
			ellipse 70% 50% at 85% 15%,
			rgba(167, 139, 250, 0.15) 0%,
			transparent 45%
		),
		radial-gradient(
			ellipse 60% 70% at 75% 85%,
			rgba(94, 65, 162, 0.18) 0%,
			transparent 50%
		),
		radial-gradient(
			ellipse 50% 60% at 20% 80%,
			rgba(255, 153, 0, 0.1) 0%,
			transparent 45%
		),
		/* Star clusters */
		radial-gradient(
			circle 3px at 10% 15%,
			rgba(255, 255, 255, 0.8) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 2px at 25% 35%,
			rgba(167, 139, 250, 0.9) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 4px at 80% 20%,
			rgba(255, 255, 255, 0.7) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 2px at 60% 60%,
			rgba(255, 200, 150, 0.8) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 3px at 90% 80%,
			rgba(255, 255, 255, 0.6) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 2px at 40% 90%,
			rgba(167, 139, 250, 0.7) 0%,
			transparent 100%
		);
	animation: nebula-drift 40s ease-in-out infinite;
	transform-origin: center center;
}

/* Layer 2: Floating cosmic orbs with parallax */
[data-theme="dark"] body::after {
	content: "";
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	pointer-events: none;
	z-index: -2;
	/* Glowing orbs */
	background:
		radial-gradient(
			circle 450px at 10% 20%,
			rgba(129, 105, 197, 0.15) 0%,
			transparent 60%
		),
		radial-gradient(
			circle 380px at 90% 15%,
			rgba(94, 65, 162, 0.12) 0%,
			transparent 55%
		),
		radial-gradient(
			circle 320px at 80% 85%,
			rgba(255, 153, 0, 0.1) 0%,
			transparent 55%
		),
		radial-gradient(
			circle 280px at 15% 75%,
			rgba(167, 139, 250, 0.12) 0%,
			transparent 50%
		),
		radial-gradient(
			circle 220px at 50% 50%,
			rgba(129, 105, 197, 0.08) 0%,
			transparent 50%
		),
		/* Twinkling stars */
		radial-gradient(
			circle 2px at 5% 10%,
			rgba(255, 255, 255, 0.9) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 1px at 15% 25%,
			rgba(255, 255, 255, 0.7) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 2px at 35% 8%,
			rgba(255, 220, 180, 0.8) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 1px at 55% 30%,
			rgba(255, 255, 255, 0.6) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 2px at 70% 45%,
			rgba(167, 139, 250, 0.9) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 1px at 85% 55%,
			rgba(255, 255, 255, 0.7) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 2px at 95% 70%,
			rgba(255, 200, 150, 0.8) 0%,
			transparent 100%
		),
		radial-gradient(
			circle 1px at 45% 85%,
			rgba(255, 255, 255, 0.6) 0%,
			transparent 100%
		);
	animation:
		cosmic-float 30s ease-in-out infinite,
		star-twinkle 4s ease-in-out infinite;
	background-size:
		100% 100%,
		100% 100%,
		100% 100%,
		100% 100%,
		100% 100%,
		100% 100%,
		100% 100%,
		100% 100%,
		100% 100%,
		100% 100%,
		100% 100%,
		100% 100%,
		100% 100%;
}

/* Layer 3: Dark mode aurora shimmer */
[data-theme="dark"] .main::before {
	content: "";
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	pointer-events: none;
	z-index: -1;
	background: linear-gradient(
		135deg,
		transparent 0%,
		rgba(129, 105, 197, 0.08) 20%,
		transparent 40%,
		rgba(255, 153, 0, 0.05) 60%,
		transparent 80%,
		rgba(167, 139, 250, 0.06) 100%
	);
	background-size: 300% 300%;
	animation: aurora-shimmer 20s ease-in-out infinite;
	opacity: 0.6;
}

/* Nebula drift - cosmic cloud movement */
@keyframes nebula-drift {
	0% {
		transform: translate(0%, 0%) rotate(0deg) scale(1);
		opacity: 1;
	}
	25% {
		transform: translate(3%, -4%) rotate(1deg) scale(1.03);
		opacity: 0.9;
	}
	50% {
		transform: translate(-4%, 3%) rotate(-1deg) scale(0.97);
		opacity: 1;
	}
	75% {
		transform: translate(-2%, -3%) rotate(0.5deg) scale(1.02);
		opacity: 0.95;
	}
	100% {
		transform: translate(0%, 0%) rotate(0deg) scale(1);
		opacity: 1;
	}
}

/* Cosmic float - gentle stellar motion */
@keyframes cosmic-float {
	0%,
	100% {
		transform: translateY(0) translateX(0);
		opacity: 1;
	}
	25% {
		transform: translateY(-15px) translateX(8px);
		opacity: 0.95;
	}
	50% {
		transform: translateY(10px) translateX(-12px);
		opacity: 0.9;
	}
	75% {
		transform: translateY(-8px) translateX(-5px);
		opacity: 0.95;
	}
}

/* Star twinkling effect */
@keyframes star-twinkle {
	0%,
	100% {
		opacity: 1;
	}
	25% {
		opacity: 0.7;
	}
	50% {
		opacity: 1;
	}
	75% {
		opacity: 0.8;
	}
}

/* Aurora shimmer for dark mode */
@keyframes aurora-shimmer {
	0%,
	100% {
		background-position: 0% 0%;
		filter: hue-rotate(0deg);
	}
	33% {
		background-position: 100% 100%;
		filter: hue-rotate(15deg);
	}
	66% {
		background-position: 50% 0%;
		filter: hue-rotate(-10deg);
	}
}

h1,
h2,
h3,
h4,
h5,
h6 {
	font-family: var(--font-heading);
	font-weight: 600;
	line-height: var(--line-height-tight);
	color: var(--color-text);
	margin-top: var(--space-xl);
	margin-bottom: var(--space-md);
}

h1 {
	font-size: var(--font-size-4xl);
}
h2 {
	font-size: var(--font-size-3xl);
}
h3 {
	font-size: var(--font-size-2xl);
}
h4 {
	font-size: var(--font-size-xl);
}
h5 {
	font-size: var(--font-size-lg);
}
h6 {
	font-size: var(--font-size-base);
}

p {
	margin-bottom: var(--space-md);
	color: var(--color-text);
}

a {
	color: var(--color-link);
	text-decoration: none;
	transition: color var(--transition-fast);
}

a:hover {
	color: var(--color-link-hover);
}

strong,
b {
	font-weight: 600;
	color: var(--color-text);
}

code {
	font-family: var(--font-mono);
	font-size: 0.875em;
	background: var(--code-bg);
	padding: 0.125rem 0.375rem;
	border-radius: var(--radius-sm);
}

pre code {
	background: none;
	padding: 0;
}

blockquote {
	border-left: 4px solid var(--color-primary);
	padding-left: var(--space-lg);
	margin: var(--space-lg) 0;
	font-style: italic;
	color: var(--color-text-secondary);
}
/* Layout Utilities */

/* Container */
.main,
.container {
	max-width: 1200px;
	margin: 0 auto;
	padding: 0 var(--space-lg);
}

/* Section Spacing */
section {
	margin-bottom: var(--space-3xl);
}

/* Grid Layouts */
.grid {
	display: grid;
	gap: var(--space-lg);
}

.grid-2 {
	grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}

.grid-3 {
	grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}

/* Flexbox Utilities */
.flex {
	display: flex;
}

.flex-col {
	flex-direction: column;
}

.flex-wrap {
	flex-wrap: wrap;
}

.items-center {
	align-items: center;
}

.justify-between {
	justify-content: space-between;
}

.gap-sm {
	gap: var(--space-sm);
}
.gap-md {
	gap: var(--space-md);
}
.gap-lg {
	gap: var(--space-lg);
}

/* Spacing Utilities */
.mt-xs {
	margin-top: var(--space-xs);
}
.mt-sm {
	margin-top: var(--space-sm);
}
.mt-md {
	margin-top: var(--space-md);
}
.mt-lg {
	margin-top: var(--space-lg);
}
.mt-xl {
	margin-top: var(--space-xl);
}

.mb-xs {
	margin-bottom: var(--space-xs);
}
.mb-sm {
	margin-bottom: var(--space-sm);
}
.mb-md {
	margin-bottom: var(--space-md);
}
.mb-lg {
	margin-bottom: var(--space-lg);
}
.mb-xl {
	margin-bottom: var(--space-xl);
}

.p-sm {
	padding: var(--space-sm);
}
.p-md {
	padding: var(--space-md);
}
.p-lg {
	padding: var(--space-lg);
}
.p-xl {
	padding: var(--space-xl);
}
/* Responsive Design Breakpoints */

/* Mobile First - Base styles above are mobile */

/* Tablet: 640px and up */
@media (min-width: 640px) {
	:root {
		--font-size-base: 1rem;
	}

	.container {
		padding: 0 var(--space-xl);
	}
}

/* Desktop Small: 768px and up */
@media (min-width: 768px) {
	:root {
		--font-size-base: 1.0625rem; /* 17px */
	}

	h1 {
		font-size: 2.5rem;
	}
	h2 {
		font-size: 2rem;
	}
	h3 {
		font-size: 1.75rem;
	}
}

/* Desktop: 1024px and up */
@media (min-width: 1024px) {
	.container {
		max-width: 1200px;
	}
}

/* Desktop Large: 1280px and up */
@media (min-width: 1280px) {
	.container {
		max-width: 1280px;
	}
}

/* Print Styles */
@media print {
	body {
		background: white;
		color: black;
	}

	.nav,
	.footer,
	.theme-toggle,
	.social-icons {
		display: none;
	}

	a {
		color: black;
		text-decoration: underline;
	}
}

/* Reduce Motion for Accessibility */
@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
}
/* Button Component Styles */

.cta-button,
.button,
button[type="submit"] {
	display: inline-block;
	padding: 0.625rem 1.25rem;
	font-size: var(--font-size-base);
	font-weight: 600;
	text-align: center;
	text-decoration: none;
	border: none;
	border-radius: var(--radius-md);
	cursor: pointer;
	transition: all var(--transition-base);
	line-height: 1.5;
}

/* Primary CTA - Nebula Purple */
.cta-button--primary,
.button--primary {
	background: var(--color-primary);
	color: var(--white);
	box-shadow: var(--shadow-sm);
}

.cta-button--primary:hover,
.button--primary:hover {
	background: var(--color-primary-hover);
	box-shadow: var(--shadow-md);
	transform: translateY(-1px);
	color: var(--white);
}

/* Secondary CTA - Gray */
.cta-button--secondary,
.button--secondary {
	background: var(--color-background-secondary);
	color: var(--color-text);
	border: 1px solid var(--color-border);
}

.cta-button--secondary:hover,
.button--secondary:hover {
	background: var(--color-background);
	border-color: var(--color-border-hover);
	box-shadow: var(--shadow-sm);
	color: var(--color-text);
}

/* Accent CTA - Orange (for high emphasis actions) */
.cta-button--accent,
.button--accent {
	background: var(--color-accent);
	color: var(--white);
	box-shadow: var(--shadow-sm);
}

.cta-button--accent:hover,
.button--accent:hover {
	background: var(--color-accent-dark);
	box-shadow: var(--shadow-md);
	transform: translateY(-1px);
	color: var(--white);
}

/* Button Sizes */
.button--small {
	padding: 0.375rem 0.875rem;
	font-size: var(--font-size-sm);
}

.button--large {
	padding: 0.875rem 1.75rem;
	font-size: var(--font-size-lg);
}

/* Disabled State */
.cta-button:disabled,
.button:disabled {
	opacity: 0.6;
	cursor: not-allowed;
	transform: none !important;
}

/* Focus States for Accessibility */
.cta-button:focus,
.button:focus {
	outline: 2px solid var(--color-primary);
	outline-offset: 2px;
}
/* Card Component Styles */

/* Service Cards */
.help-services-list {
	display: flex;
	flex-direction: column;
	gap: var(--space-md);
	margin: var(--space-md) 0 var(--space-xl) 0;
	padding: 0;
	list-style: none;
}

.help-service-card {
	display: flex;
	flex-direction: column;
	gap: var(--space-sm);
	padding: var(--space-lg);
	border-radius: var(--radius-lg);
	border: 1px solid var(--color-border);
	background: var(--color-background);
	transition: all var(--transition-base);
}

.help-service-card:hover {
	border-color: var(--color-primary);
	box-shadow: var(--shadow-md);
	transform: translateY(-2px);
}

.help-service-card h3 {
	margin: 0;
	font-size: var(--font-size-xl);
	color: var(--color-text);
}

.help-service-card p {
	margin: var(--space-xs) 0 var(--space-md) 0;
	color: var(--color-text-secondary);
	line-height: var(--line-height-relaxed);
}

/* Hero Card */
#help-hero {
	padding: var(--space-2xl);
	border-radius: var(--radius-lg);
	background: var(--color-background-secondary);
	box-shadow: var(--shadow-md);
	margin-bottom: var(--space-xl);
	border: 1px solid var(--color-border);
}

#help-hero h1 {
	font-size: var(--font-size-3xl);
	margin-bottom: var(--space-md);
	color: var(--color-text);
}

#help-hero p,
#help-hero strong,
#help-hero b {
	color: var(--color-text);
	line-height: var(--line-height-relaxed);
}

/* Blog Post Cards - Styles moved to components/cards.css */
/* Keeping only minimal overrides here */

.note-entry:hover {
	border-color: rgba(94, 65, 162, 0.25);
}

/* Responsive Card Grid */
@media (min-width: 720px) {
	.help-services-list {
		flex-direction: row;
		flex-wrap: wrap;
	}

	.help-service-card {
		flex: 1 1 calc(50% - var(--space-md));
	}
}

@media (min-width: 1024px) {
	.help-service-card {
		flex: 1 1 calc(33.333% - var(--space-md));
	}
}
/* Navigation Component Styles */

/* Header Navigation */
.nav {
	background: transparent;
	border-bottom: none;
}

.nav a {
	color: var(--color-text);
	font-weight: 500;
	transition: all var(--transition-base);
	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.3);
}

[data-theme="dark"] .nav a {
	text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}

.nav a:hover,
.nav a.active {
	color: var(--color-primary);
}

/* Logo */
.logo a {
	color: var(--color-text);
	font-weight: 700;
	font-size: var(--font-size-lg);
}

.logo a:hover {
	color: var(--color-primary);
}

/* Menu Items */
.menu a {
	padding: var(--space-sm) var(--space-md);
	border-radius: var(--radius-sm);
}

.menu a:hover {
	background: var(--color-background-secondary);
}

/* Breadcrumbs */
.breadcrumbs {
	display: flex;
	align-items: center;
	gap: var(--space-sm);
	margin: var(--space-md) 0;
	font-size: var(--font-size-sm);
	color: var(--color-text-secondary);
}

.breadcrumbs a {
	color: var(--color-link);
}

.breadcrumbs a:hover {
	color: var(--color-link-hover);
}

/* Footer */
footer {
	border-top: 1px solid var(--color-border);
	padding: var(--space-2xl) 0;
	margin-top: var(--space-3xl);
	color: var(--color-text-secondary);
}

footer a {
	color: var(--color-link);
}

footer a:hover {
	color: var(--color-link-hover);
}

/* Social Icons */
.social-icons a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: var(--space-xl);
	height: var(--space-xl);
	border-radius: var(--radius-full);
	background: var(--color-background-secondary);
	color: var(--color-text);
	transition: all var(--transition-base);
}

.social-icons a:hover {
	background: var(--color-primary);
	color: var(--white);
	transform: translateY(-2px);
	box-shadow: var(--shadow-md);
}
/* Home Page Responsive Styling */

/* Home Info Content - Responsive font sizing for two-line layout */
.home-info .entry-content {
	font-size: clamp(0.75rem, 2vw, 1.125rem);
	line-height: 2;
	text-align: center;
	word-spacing: 0.3em;
	letter-spacing: 0.02em;
}

/* Adjust for different screen sizes */
@media (max-width: 480px) {
	.home-info .entry-content {
		font-size: clamp(0.65rem, 3.5vw, 0.875rem);
		line-height: 1.8;
		word-spacing: 0.15em;
	}
}

@media (min-width: 481px) and (max-width: 768px) {
	.home-info .entry-content {
		font-size: clamp(0.75rem, 2.5vw, 1rem);
		line-height: 1.9;
		word-spacing: 0.2em;
	}
}

@media (min-width: 769px) and (max-width: 1024px) {
	.home-info .entry-content {
		font-size: clamp(0.875rem, 2vw, 1.125rem);
		line-height: 2;
		word-spacing: 0.25em;
	}
}

@media (min-width: 1025px) {
	.home-info .entry-content {
		font-size: clamp(0.95rem, 1.5vw, 1.125rem);
		line-height: 2;
		word-spacing: 0.3em;
	}
}

/* Ensure links are properly spaced */
.home-info .entry-content a {
	display: inline;
	margin: 0 0.1em;
}

/* Home Info Title */
.home-info .entry-header h1 {
	font-size: clamp(1.5rem, 4vw, 2.5rem);
	margin-bottom: var(--space-md);
}