Design Catalog
Design tokens and component patterns reference.
Semantic Elements
Base styles for HTML semantic elements. These are defined in global.css @layer globals.
Headings
h1 - Page title
Heading Level 1 (1.5rem / 24px)
font-size: --font-size-2xl, margin-bottom: --space-baseh2 - Section heading
Heading Level 2 (1.25rem / 20px)
font-size: --font-size-xl, margin-bottom: --space-smh3 - Subsection heading
Heading Level 3 (1.125rem / 18px)
font-size: --font-size-lg, margin-bottom: --space-smh4 - Minor heading
Heading Level 4 (1rem / 16px)
font-size: --font-size-md, margin-bottom: --space-xsh5 - Small heading
Heading Level 5 (0.875rem / 14px)
font-size: --font-size-base, margin-bottom: --space-xsh6 - Minimal heading
Heading Level 6 (0.75rem / 12px)
font-size: --font-size-sm, margin-bottom: --space-xsParagraph & Text Elements
p - Paragraph
This is a paragraph element. It has font-size: --font-size-base (14px), line-height: 1.6, and margin-bottom: --space-sm (12px).
Multiple paragraphs will have consistent spacing.
small - Small text
Regular text for comparison.
This is small text (font-size: --font-size-sm / 12px).Links & Buttons
a - Link
Links are styled with navy color and underline. Hover them to see the effect.
button - Reset base
The button element has a reset base style (no background, no border, no padding). Use .btn classes for styled buttons (see Buttons section).
Interactive States
Global interactive state styles for accessibility and user feedback. All focusable elements have consistent :focus-visible styles for keyboard navigation.
Focus-Visible (Keyboard Navigation)
All focusable elements
Press Tab to navigate and see the aqua outline on keyboard focus.
outline: 2px solid var(--color-netsuki-aqua); outline-offset: 2px;Hover States
Links
Hover this link to see aqua color
a:hover - color: var(--color-netsuki-aqua)Buttons
Each button variant has its own hover color. See Buttons section for details.
Active State
Buttons
Click and hold to see the active state (slight downward shift).
.btn:active - transform: translateY(0.125rem)Disabled State
Form Elements
:disabled, [aria-disabled="true"] - cursor: not-allowed; opacity: 0.5;Buttons
See Buttons section for more disabled button examples.
Color Palette
Theme Colors
--color-netsuki-aqua#00ced1Secondary accent, links--color-netsuki-aqua-dark#0891b2Darker aqua (hover)--color-netsuki-blue#4dabf7Blue accent--color-netsuki-charcoal#1f2937Canvas border--color-netsuki-charcoal-dark#111827Canvas background--color-netsuki-charcoal-light#374151Button background--color-netsuki-cyan#22d3eeNormal game block--color-netsuki-gold#ffd700Primary accent--color-netsuki-gold-dark#facc15Darker gold (hover)--color-netsuki-green#0f0Success states--color-netsuki-green-vivid#22c55eVivid green--color-netsuki-green-dark#16a34aDarker green--color-netsuki-white#fffBackgrounds--color-netsuki-navy#000080Text, borders, headings--color-netsuki-black#000Strong emphasis--color-netsuki-red#ef4444Error, warning, danger--color-netsuki-red-dark#dc2626Darker red--color-netsuki-amber#f59e0bAmber accent--color-netsuki-yellow-light#fef9c3Light yellow--color-netsuki-yellow#fef08aYellow--color-netsuki-gray-light#f3f4f6Light gray (hover bg)--color-netsuki-gray-border#d1d5dbBorder and separator--color-netsuki-gray#6b7280Muted text--color-netsuki-gray-text#4b5563Darker muted text--color-netsuki-magenta#d946efHoming projectile, laser block--color-netsuki-orange#f97316Rain projectile--color-netsuki-pink#ec4899Puzzle completion text--color-netsuki-yellow-bright#fde047Laser gradient, completion borderChat Character Colors
--color-chat-author#ffe57fChat bubble (author)--color-chat-partner#87ceebChat bubble (partner)--color-chat-guest#e8a0a0Chat bubble (guest)Font Families
Font family CSS variables. Web fonts are downloaded at build time via Astro Fonts API (self-hosted, no CDN).
Typography
Spacing
Responsive Breakpoints
This project uses a mobile-first approach with two standard breakpoints. Resize your browser window to see the responsive behavior.
Breakpoint Values
| Name | Media Query | Description |
|---|---|---|
| Mobile | (default) | < 640px, mobile devices |
| Tablet | width >= 640px | ≥ 640px, tablets and above |
| Desktop | width >= 768px | ≥ 768px, desktop and laptops |
| Touch | hover: none | Touch-capable devices |
| Pointer | pointer: coarse | Coarse pointer input devices |
Responsive Behavior Demo
Only one indicator should be visible at a time based on your current viewport width.
Layout Example
Mobile: single column / Tablet: 2 columns / Desktop: 3 columns
Common Components
Section Box
.section-box.section-box--gold
Gold background section box. Used for primary emphasis.
.section-box.section-box--white
White background section box. Used for content areas.
.section-box.section-box--aqua
Aqua background section box. Used for secondary emphasis.
.section-box.section-box--white.section-box--border-gold
White section box with gold border.
.section-box.section-box--white.section-box--border-aqua
White section box with aqua border.
Inner Box
.inner-box
Inner box for nested content. 2px solid navy border with 1rem padding.
Section Title
.section-title
Section Title Example
Centered, bold, navy-colored heading. font-size: --font-size-lg.
Data Tables
Structured data display with header color variants.
.data-table .data-table--header-aqua
| Property | Value |
|---|---|
| Name | Netsuki |
| Species | Virtual Fox |
.data-table .data-table--header-gold
| Rank | Score |
|---|---|
| 1st | 9800 |
| 2nd | 7500 |
Form Elements
Styled form inputs used across pages (fortune form, etc.).
Decorative Effects
Text decoration patterns defined globally.
.blink (animation: blink)
Blinking Text
animation: blink (defined in global.css @keyframes).sparkle
Sparkling Text
color: var(--color-netsuki-gold); animation: sparkle-glow (defined in global.css @keyframes)Dividers
Decorative horizontal separators.
.divider-stars
★☆★☆★
.divider-starsBackground Patterns
CSS-only repeating background patterns for the body (frame area). Patterns use site CSS variables with opacity to stay visually receding per the 60-30-10 color rule, while offering character and color variety. Pick a favorite to apply to BaseLayout.astro.
Pattern Candidates
radial-gradient · aqua 22% · 20pxBright aqua dots. Matches the sidebar accent color.conic-gradient · gold 18% · 16pxClassic checkerboard in gold. Warm and playful.repeating-linear-gradient · aqua+gold+blue · -45degDiagonal stripes in three site colors. Festive and energetic.radial-gradient x3 · aqua+gold+red · offset positionsScattered multicolor dots. Lively and eye-catching.linear-gradient x4 · aqua · chevronChevron zigzag in aqua. Bold and directional.radial-gradient x3 · gold+amber · scatteredScattered gold and amber dots like twinkling stars.repeating-linear-gradient x2 · aqua · diamond gridDiamond lattice in aqua. Elegant and structured.radial-gradient + linear-gradient x2 · gold+amber gridGold dots on an amber grid. Warm and cozy.Base Color Variations
The same dot pattern reads very differently depending on the base background color. These candidates use color-mix() to create tinted bases, paired with a contrasting pattern color. Pick a base + pattern combination to apply to BaseLayout.astro.
aqua 10% base · aqua-dark 40% dotsAqua-tinted base with deeper aqua dots. Cool and cohesive.gold 8% base · gold 28% checkerIvory-cream base with gold checkerboard. Warm and inviting.gold 6% base · gold 18% dotsWarm cream base with subtle gold dots. Personal and approachable.blue 15% base · navy 35% dotsSoft lavender base with deep navy dots. Calm and refined.red 8% base · red 28% dotsBlush pink base with red dots. Soft yet lively.navy 22% base · aqua 60% dotsDark blue-gray base with bright aqua dots. Bold and dramatic.amber 12% base · amber 22% argyleWarm amber base with diamond lattice. Cozy and textured.60-30-10 Color Rule
The pattern fills the frame (Ground / 60%) and must visually recede behind the sidebar aqua (30%) and page content white (10% accent area). All patterns keep opacity below 30% so the frame remains background, not foreground.
color-mix() Patterns
Semi-transparent color patterns using color-mix(in srgb, COLOR %, transparent).
Gold 30%Gold 50%Gold 70%Aqua 20%Aqua 40%Aqua 60%Navy 10%Navy 20%Navy 40%Easing Tokens
Named cubic-bezier curves for consistent motion. Always use these tokens instead of raw cubic-bezier() or bare ease/ease-in-out keywords.
--ease-out (most UI transitions)
transition: transform 400ms var(--ease-out); /* cubic-bezier(0.215, 0.61, 0.355, 1) */--ease-in-out (modals, open/close panels)
transition: transform 400ms var(--ease-in-out); /* cubic-bezier(0.645, 0.045, 0.355, 1) */