Skip to content
JFSN

Design System Showcase

Interactive demonstration of the JFSN Archive design system. Hover over components to see interactions in action. Read DESIGN-SYSTEM.md for full documentation.

Design Principles

Every design decision at JFSN flows from these five core principles. They guide component design, interaction timing, and visual hierarchy.

Artwork First

The image is the primary object. UI recedes. No gradients, filters, or overlays on artwork. Full color always. UI exists to serve the work, never to be decorative.

Clarity Through Restraint

No drop shadows on images. No rounded corners. No animations on artwork hover. Borders and outlines are sharp, flat, intentional. Every pixel has a purpose.

Intentional Motion

Animations signal affordance, connect state changes, give feedback. No animation is random. 200ms for feedback, 500ms for entrance. All animations respect prefers-reduced-motion.

Accessible by Default

WCAG AA contrast ratios. Keyboard navigation on all pages. Focus indicators always visible. Touch targets ≥44×44px. No color-only information. Screen-reader friendly.

Museum Grade

Precision in detail. Consistent easing curves. Warm archival colors. Typography that breathes. Layout that adapts. A feeling of care in every interaction.

Personal Record, Not Campaign

No calls to action. No engagement patterns. No promotional language. Just the work and the metadata. Spare, honest, built for people who care about the archive itself.

Color System

Stitch Light (Primary UI)

bone-white
bone-white
#fcf9f3
deep-ink
deep-ink
#0B0B0B
20:1 on #fcf9f3
archive-gray
archive-gray
#575757
8.59:1 on #fcf9f3
orange-ink
orange-ink
#B84700
5.07:1 on #fcf9f3 ✓
international-orange
international-orange
#FF6600
2.79:1 (fails on light) ✗
archival-outline
archival-outline
#8e7164
archival-outline-soft
archival-outline-soft
#e3bfb1
outline-variant
outline-variant
#c4c7c7

Key Principle

Use orange-ink (#B84700) for persistent text on light backgrounds.
International-orange (#FF6600) only for hover states, fills, and sections on dark backgrounds. Never persistent text on light.

Typography

Scale

Display Large
Five Decades
Playfair Display, 64px, weight 700, line-height 1, letter-spacing -0.02em
Heading 1
The Archive
Playfair Display, 40px, weight 700, line-height 1.2
Body Medium
This is the default body text used throughout the archive for essays, descriptions, and long-form content. It maintains excellent readability at all screen sizes.
Inter, 16px, weight 400, line-height 1.6
Label Medium
1990S · COLLAGE
Inter, 11px, weight 600, letter-spacing 0.08em, uppercase
Monospace (Metadata)
ART1234 · 1990S (EST.)
SF Mono, 10px, weight 400, letter-spacing 0.08em

Real Usage Examples

Why I Made Things

Something that still had a life left in it. I would see discarded materials—objects that had already served their purpose—and imagine what they could become. Not repair or restoration, but transformation. A broken cassette case becomes a sculptural element. A strip of fabric becomes the surface for a new composition.

Heading: Display 40px · Body: 16px / 1.6 line-height

Archive Grid Card title: 13px 600w | label: 11px 600w

Untitled (Cassette Torso)

2020 · COLLAGE

Pairs: heading + label, minimal spacing

1.

"Saw it out front waiting for the garbage men to take them all away."

Jeff, on early materials · from oral history

Components

Quote Card (Sidebar)

On Loss

"Saw it out front waiting for the garbage men to take them all away."

Warm-brown archival border, soft shadow, used for callouts and featured content.

Archive Card (Grid Thumbnail)

[Image]

Untitled

1990s (est.) | Collage

Full color at rest, saturation overlay fades on hover, title turns orange.

Buttons

CTA: orange background, white text. Secondary: transparent, gray border. Both transition smoothly on hover, focus outline always visible.

Links

Bracket link with orange-ink text, bottom border. Underline animates on hover via transform: scaleX.

Forms

Collage
Sculpture

Custom checkboxes with focus outline, no native browser styling.

Data Tables (for researchers)

Work ID Title Year Medium
art1010 Untitled (Cassette Torso) 2020 Collage
art0953 Guernica (Full Scale) 1990s Collage
art0380 Devo at WHK Auditorium 1977 Photography

Header: `#ebe8e2` background, warm-brown border. Rows: alternating white/light, 1px border-bottom. Monospace archive IDs, light text.

Breadcrumbs (URL-Inferred)

Clickable breadcrumbs that reflect current filters. Separator in warm-brown archival color.

Filter Chips

Collage 1990s

Active filters displayed as removable chips.

Component States Gallery

Every interactive component has multiple states. Hover/focus on elements below to see all states in action.

Buttons

Primary (CTA)

Opacity: 0.85

Orange outline

Opacity: 0.5

Secondary

Border + text orange

Links

Default Link

Orange-ink underline

Hover Link

Brighter orange on hover

Focus Link

Focus ring visible

Form Inputs

Cards / Tiles

Default Card

Soft shadow + border

Hover Card

Lifted + enhanced shadow

Focus Card

Focus outline + thicker border

Interactions & Animations

Entrance Animations (Staggered)

Hover over or reload the page to see entrance animations. Fade + slide-up with 50ms stagger between items.

Reduced motion: If you have "Prefer reduced motion" enabled in system settings, animations will be disabled automatically.

Hover States

Try hovering over elements above:

  • Buttons: Opacity transition, no scale
  • Links: Underline animates in via transform
  • Cards: Optional shadow intensification (not currently visible, can be added)

Focus States

Try tabbing to any button or link:

  • Outline: 2px solid #FF6600, offset 2px
  • Never hidden: Always visible, never removed
  • High contrast: Orange on bone-white background

Accessibility Checklist

Contrast ✓

  • Text: 8.59:1 (exceeds 4.5:1)
  • Orange-ink: 5.07:1 (WCAG AA)
  • International-orange: link-only or dark bg

Keyboard Nav ✓

  • Tab order logical
  • Focus always visible
  • Arrow keys on decades

Screen Readers ✓

  • Descriptive alt text
  • aria-current="page"
  • No color-only info

Motion ✓

  • Respects reduced-motion
  • No auto-play
  • User-controlled

Touch Targets ✓

  • Minimum 44×44px
  • Mobile-optimized
  • Adequate spacing

Responsive ✓

  • Mobile-first design
  • Fluid typography
  • Tested iPhone 15 Pro

Spacing & Grid System

All spacing follows an 8px baseline grid. This creates visual rhythm and makes layout predictable across all screen sizes.

Spacing Scale

$spacing-xs: 4px

Icon spacing, tight details

$spacing-sm: 8px

Form fields, button padding

$spacing-md: 12px

Element spacing, gaps

$spacing-lg: 16px

Card padding, sections

$spacing-xl: 24px

Layout blocks, major gaps

$spacing-2xl: 32px

Section separation

Layout Rules

  • Container max-width: 1200px (padding: 20px on mobile, 40px desktop)
  • Grid gap: 24px on desktop, 16px on tablet, 12px on mobile
  • Card padding: 16–24px (never less, never more)
  • Button padding: 12px vertical, 20px horizontal (minimum 44×44px target)
  • Form field height: 40px minimum (includes padding)

Real-World Patterns

How components work together in actual page layouts. These patterns solve recurring design problems.

Filter + Grid Pattern

Filters

Grid layout: 3 cols on desktop, sticky filters on left, cards stack on mobile

Breadcrumb + Title + Actions Pattern

Archive › Collage › 1990s

Untitled (Mixed Media)

Hierarchy: breadcrumb (11px label) → heading (40px) → action button (right-aligned)

Data Table Pattern

Work ID Title Year Medium
art0001 Untitled Study 1974 Collage
art0002 Reliquary 1990 Mixed Media
art0003 Threshold 2005 Sculpture

Zebra striping (alternating rows), monospace IDs, 12px responsive

Color Contrast & Accessibility Data

Complete WCAG 2.1 contrast matrix. All colors used on-site verified for AA compliance (minimum 4.5:1 for text, 3:1 for UI components).

Foreground Background Ratio AA AAA Usage
deep-ink #0B0B0B bone-white #fcf9f3 20:1 Primary text, headings
archive-gray #575757 bone-white #fcf9f3 8.59:1 Secondary text, labels
orange-ink #B84700 bone-white #fcf9f3 5.07:1 Persistent orange text
int-orange #FF6600 bone-white #fcf9f3 2.79:1 Hover only, NOT text
int-orange #FF6600 deep-ink #0B0B0B 6.7:1 On dark sections

Rule: All persistent text meets WCAG AA (4.5:1). International-orange (#FF6600) only used for hover states or text on dark backgrounds. No exceptions.

Responsive Breakpoints & Mobile-First Strategy

JFSN follows a mobile-first strategy. Design for 320px (iPhone SE), then enhance for tablet and desktop. All breakpoints tested on actual devices.

Mobile

320px–767px

  • Single column layout
  • Touch targets 44×44px min
  • Drawer navigation
  • Grid 1–2 columns
  • Padding: 16px

Tablet

768px–1023px

  • Two column layout
  • Sidebar on medium screens
  • Grid 2–3 columns
  • Touch-friendly spacing
  • Padding: 24px

Desktop

1024px+

  • Full-width with max 1200px
  • Horizontal nav visible
  • Grid 3–4 columns
  • Hover states active
  • Padding: 40px

Tested Devices

  • Mobile: iPhone 15 Pro (primary test device), iPhone SE (320px minimum)
  • Tablet: iPad (7th gen), iPad Air
  • Desktop: 1280px (typical), 1920px (larger screens), 2560px (ultra-wide)
  • Touch: All interactive elements tested with finger on actual devices
  • Browsers: Safari (iOS), Chrome, Firefox, Edge (latest 2 versions)

Session 57: Best-in-Class UX Complete ✅

27 improvements shipped: Phase A–D animations (17) + UX fixes (3) + style enhancements (7). All live at jfsn.com.

Phase A–D: Micro-Interactions & Animations (17 items)

Phase A (4): Filter chip removal pulse+slide, table row hover, loading state (progress bar+dots), artwork tooltip
Phase B (5): Page transitions fade-through, grid stagger, related works stagger, form input bounce, breadcrumb color shift
Phase C (5): Link underline draw, sort arrow rotate, search flash, modal entrance, mobile swipe gesture+haptics
Phase D (3): Custom scrollbar, focus ring pulse, toast slide-in/out

UX Fixes (3 items)

✅ Decade page discoverability (links in start-here nav)
✅ Filter loading state (upgraded to Phase A animations)
✅ Mobile breadcrumb truncation (fixed logic, works on <768px)

Style Enhancements (7 items)

Data table styling: Zebra striping, hover effects, mobile stacking
Related works sidebar: Card design, left border accent, hover transitions
Print styles: Enhanced page setup, heading hierarchy, URL display, table optimization
Scroll-reveal animations: IntersectionObserver fade-in with stagger
Button press feedback: Scale animation (1→0.95→1), success states
Custom scrollbar: Warm-brown + orange hover (desktop)
Skeleton placeholders: Shimmer animation, grid variants, size options

Interactive Features Showcase

Best-in-class interactions now live on every page. Try them out below, or press ? anywhere on the site to access keyboard shortcuts.

Keyboard Shortcuts Modal

Press ? anywhere on the site to open a full-screen modal with keyboard navigation help. Includes backdrop blur, fade-in animation, and ESC to close.

Includes: P/N (prev/next work) · ←→ (decade nav) · ? (help) · ESC (close)

Saved Filter Presets

On the archive page, save your filter combinations (medium, decade, series) as named presets. Presets persist across sessions using browser localStorage.

Workflow:
1. Select filters (Collage + 1970s decade)
2. Click "+ Save Filter"
3. Name your preset ("Retro Collages")
4. Click saved preset to restore filters instantly
5. Click × to delete a preset

Try on Archive Page

Toast Notifications

Feedback messages appear at the bottom-right with slide-in animation. Available types: success (green), error (red), info (blue).

Mobile Swipe Gestures

On decade pages (1970s–2020s), swipe left or right to navigate between decades. Includes haptic feedback on mobile devices.

Haptic Pattern: 10ms tap · 5ms pause · 10ms tap (tactile confirmation)
Works on: iPhone, Android, any device with vibration API

Page Transition Animation

When navigating from archive to individual artwork, a fade-through-color overlay connects the two states visually (200ms duration).

Visual Effect: Semi-transparent overlay fades in then out
Timing: 200ms total (smooth, not distracting)
Respects: prefers-reduced-motion (disabled if user preference set)

Micro-Interaction Timing Reference

Interaction Duration Easing Purpose
Hover state (button/link) 200ms ease Feedback
Page transition overlay 200ms ease Navigation
Entrance (fade-in) 500ms ease Load reveal
Stagger (per item) 50ms Sequential effect
Toast slide-in 300ms ease-out Notification
Focus ring pulse 600ms ease-in-out Keyboard nav
Button press (scale) 150ms cubic-bezier(0.4,0,0.2,1) Click feedback

Principle: Interactions ≤ 300ms feel instantaneous. Entrances 400–600ms feel elegant. All durations respect prefers-reduced-motion setting.

Easing Curves (Universal)

All site-wide animations use one of two easing curves for consistency and premium feel:

Hover / Feedback

ease (0.25, 0.46, 0.45, 0.94)

Quick + responsive

Entrance / Premium

cubic-bezier(0.4, 0, 0.2, 1)

Smooth + elegant

Animation Showcase: Live Demos

Watch these animations loop continuously to see the exact timing, easing, and feel. All respect prefers-reduced-motion settings.

Entrance Animations

Fade-In (500ms ease)
Simple opacity entrance. Used for all content reveals and grid items.
Slide-Up (500ms ease)
Y-axis movement + fade. Used for related works, sidebar cards, staggered grid.
Staggered Grid (5 items, 50ms each)
Sequential effect. Each item delays 50ms. Creates wave-like entrance across grids.

Micro-Interactions

Button Press (150ms cubic-bezier)
Scale 1.0 → 0.95 → 1.0. Gives tactile feedback on interaction.
Focus Ring Pulse (600ms ease-in-out)
Glow outward. Signals keyboard focus. Pulsing ring at 600ms interval.
Arrow Rotate (300ms ease)
Icon rotation. Used on sort/filter toggles to show open/close state.

Loading States

Loader Dots (600ms repeat, staggered)
Three dots pulsing in sequence. Used for loading indicators, filter state.
Progress Bar Fill (2s linear)
Indicates work in progress. Fills left-to-right at constant speed.

Toast Notifications

Success Toast Slide-In (300ms ease-out)
✓ Filter saved successfully!
Slides up from bottom. Auto-dismisses after 3s. Green success state.
Error Toast Slide-In (300ms ease-out)
✗ Something went wrong.
Red error state. Same timing, different context color.
Info Toast Slide-In (300ms ease-out)
ℹ Keyboard shortcuts: press ?
Blue info state. Consistent timing across all notification types.

Page Transitions

Fade-Through-Color (200ms ease)
Page 1
Page 2
Overlay fades in/out. Connects two pages visually. Used for archive → artwork navigation.

Note: All animations respect prefers-reduced-motion: reduce. If you have this setting enabled in your system, animations will be disabled. No animation should last longer than 600ms. All use cubic-bezier or ease for natural feeling.

Dark Mode Exploration

Optional dark mode for researchers working late nights. Design: light dark (charcoal, not pure black). Maintains full contrast and readability. Not production-ready — shown for reference only.

Dark Mode Color Palette

Background

#2a2a2a

Main canvas (dark charcoal)

Surface

#3a3a3a

Cards, containers

Text Primary

#f0f0f0

High contrast text

Text Secondary

#aaaaaa

Secondary labels

Accent (unchanged)

#FF6600

All hover, active states

Border

#555

Dividers, outlines

Component Examples in Dark Mode

Untitled Composition

1990s (est.) · Mixed Media · 48 × 36 in

Mixed assemblage of found materials including paper, fabric, and cardboard. The composition emphasizes layering and texture, with careful attention to balance and spatial relationships.

Status: Dark mode is a future enhancement. The light system is the current standard. If dark mode ships, it would: (1) apply automatically at 8 PM based on system preferences, (2) preserve all accessibility contrast ratios, (3) never dim artwork images with filters.

Design Vocabulary

Shared language for design, development, and product decisions. Using consistent terms prevents miscommunication and speeds implementation.

Saturation Overlay

The grey layer on top of artwork that fades out on hover. Uses `mix-blend-mode: saturation` to desaturate the top 40% of images. Full color revealed on interaction.

Card Frame

Orange border overlay on featured cards. A `div` with `position: absolute; inset: 0` inside the card image. Animates to orange on hover.

Stagger

Sequential entrance animation. Each item animates with a 50ms delay after the previous one. Creates wave-like effect across grids.

Focus Ring

Keyboard focus indicator. 2px solid #FF6600 outline, 2px offset. Always visible, never removed. Pulses gently on focus.

Toast

Notification message. Slides up from bottom (300ms), auto-dismisses after 3s. Types: success (green), error (red), info (blue).

Breadcrumb

URL hierarchy display. Format: "Archive › Collage › 1990s". Shows current location. Mobile truncates to last item only.

Voice & Tone: How to Write for JFSN

JFSN is a personal archive, not a marketing platform. Writing should be spare, honest, and focused on the work itself.

Core Principles

Spare

Not: "Discover the fascinating journey of artistic expression."
Do: "Collage, 1990, 36 × 48 in"

Honest

Never fabricate provenance, exhibitions, or credentials. If unknown, say so. "1970s (est.)" not "1974".

No Calls to Action

Never "Explore now" or "Sign up for updates." People are here for the archive, not to engage.

Technical

Monospace for metadata (art IDs, dates). Use exact dimensions when known. Precision over approximation.

Jeff's Voice

When using first-person, match interview recordings. Avoid over-interpretation. Let the work speak.

No Emoji

Clean, professional tone. No decorative characters. Let the typography breathe.

Writing Examples

Page Heading

The Archive

1,084 works by Jeffrey F. S. Neumann, spanning 1974 to the present. Collage, sculpture, photography.

Work Description (Meta)

ART1234 · 1990S (EST.) · COLLAGE · 36 × 48 IN

Body Paragraph (Essay/Bio)

"Something that still had a life left in it."

Jeff, on the materials he chose to work with. From the oral history archive.

Major Page Sections

Large-scale patterns that define homepage and archive page layouts.

Chromatic River (Color Timeline)

Canvas-based visualization of all 1,084 works by dominant color in chronological order (1974–present).

  • Canvas element (HiDPI aware)
  • Hover shows cursor line (1px white, 50% opacity)
  • Tooltip on hover: preview image (72px), work title, year
  • Click opens work detail page
  • Mobile: shorter height, full width
  • Desktop: full height, 1200px max
  • Data source: chromatic.json (color + year per work)

The Wall (Miniature Grid)

Dense grid of all 1,084 tiny tiles. Shows complete archive at a glance.

  • Grid: 12 columns on desktop, 6 on tablet, 4 on mobile
  • Tile: aspect-ratio 1:1, gap: 2px
  • Image: full-color AVIF, cover fit
  • Hover: outline color #FF6600, z-index lifts above neighbors
  • Click: opens work detail
  • No sibling dim (all images stay full color)

Featured Grid (Bento/Editorial Layout)

Large Cover (7 cols)
Medium Card (5 cols)
Medium Card (5 cols)

Editorial grid featuring 3 curated works: 1 large hero (7 cols × 6 rows) + 2 medium (5 cols × 3 rows each).

  • Desktop: 12-column grid, 80px rows, 32px gaps
  • Image lazy-load: `loading="lazy"` + fade-in on `.is-loaded`
  • Hover: shadow lifts, title turns #FF6600
  • Card Frame: orange border overlay on hover
  • Tablet/Mobile: stacks to single column

Lost Works Banner

The Void in the Record

An estimated 500–1,000 works lost to water damage.

A significant part of Jeff's early work was lost. What survived is here in full; what's gone is remembered on the Lost Works page.

Surviving fragment image (shown faded)

Stats Display (2×2 Grid)

Works Cataloged 1,084
Years Active 1974–present
Lost to Water Damage ~500–1,000
Location Cleveland, Ohio

Interactive UI Patterns

Complex interactions and stateful UI patterns used across the site.

Search / Command Palette (⌘K)

Backdrop blur modal

Results dropdown below...
  • Trigger: ⌘K (Mac) or Ctrl+K (Windows) or click search icon
  • Modal: Fixed position, backdrop blur (#fcf9f3 @ 80% opacity)
  • Input: 16px, placeholder text, auto-focus
  • Results: Dropdown below, 1084px max height, scroll
  • Result item: 40px height, hover bg #ebe8e2, click opens work
  • Close: ESC key or click backdrop
  • Animation: Fade-in (200ms ease)

Mobile Folio (Snap-Scroll Carousel)

Vertical snap-scroll carousel on mobile (320–767px). Shows featured works one at a time.

  • Sections: 1. Hero · 2. art0380 · 3. art0002 · 4. art0026 (4 total)
  • Container: `scroll-snap-type: y mandatory`, height: calc(100dvh - 4rem)
  • Section: `scroll-snap-align: start`, 100% viewport height
  • Folio Rail: Vertical dot indicators on right edge (44×44px buttons)
  • Dot: 5px filled circle, 1.5px border
  • Active dot: #FF6600, highlight when section in view
  • Animation: Smooth scroll behavior, dots update on scroll via IntersectionObserver
  • Desktop: Hidden (layout switches to grid)

View Transition (Cross-Page Image Morph)

CSS View Transition API: Artwork thumbnail morphs into detail page image.

  • Browser support: Chrome 111+, Edge 111+ (graceful fallback: standard navigation)
  • Rule: `@view-transition { navigation: auto; }` in CSS
  • Named element: Click handler sets `img.style.viewTransitionName = 'artwork-hero'`
  • Animation: Browser morphs thumbnail position/size to detail page position
  • Duration: ~300–400ms (automatic, browser-optimized)
  • Respects: `prefers-reduced-motion: reduce` (skips transition)

Component Reference & Details

Smaller interactive components and UI elements with detailed specs.

Icon System (Feather Icons)

Home

📝

Start Here

👤

About

🔍

Search

  • Source: Feather Icons (feathericons.com)
  • Size: 18px × 18px (base), 20px × 20px (buttons)
  • Stroke width: 1.8px
  • Color: Inherit from parent (current text color)
  • Hover: Color transitions to #FF6600 with 200ms ease
  • Used in: Mobile drawer (8 icons), buttons, headers
  • Format: Inline SVG (no external files)

Tooltips

Hover for tooltip
Jeffrey Francis Stanley Neumann
  • JFSN wordmark hover: "Jeffrey Francis Stanley Neumann" appears below
  • Chromatic River hover: Preview image (72×72px) + title + year
  • Position: Below trigger, centered, 10px offset
  • Background: #0B0B0B (deep-ink)
  • Text: 10px, white (#F3F0EA), no-wrap
  • Animation: Fade-in (200ms ease) on hover, fade-out on mouse-leave
  • z-index: Above all content

Audio Player

  • Element: HTML5 `<audio controls>`
  • Styling: Uses browser defaults (no custom CSS currently)
  • Width: 100% (responsive)
  • Height: 32px
  • Preload: `preload="none"` (lazy load)
  • Format: MP3 (supported across all browsers)
  • Used in: "In His Own Words" quote card on about.html

Ghost Tiles

  • Size: 20×20px squares
  • Border: 1px solid #c4c7c7
  • Background: Transparent
  • Hover: Border color changes to #FF6600 (200ms ease)
  • Used in: Lost Works banner section
  • Purpose: Represents lost/missing works (empty frames)

Counter Animation

1,084
  • Attribute: `data-counter="1084"`
  • Animation: Counts from 0 → 1,084 on page load
  • Duration: ~1.5 seconds
  • Timing: JavaScript counts up with easing
  • Used in: Stats display (Mobile "About This Archive" section)
  • Triggers: When stats section becomes visible (IntersectionObserver)

Filter Chips (All States)

Default Chip Hover Chip Focus Chip Removing...
  • Default: background #ebe8e2, border #8e7164, text #0B0B0B
  • Hover: border + text color → #FF6600 (200ms ease)
  • Focus: 2px #FF6600 outline, offset 1px
  • Removing: opacity 0.5, border fade to #c4c7c7
  • Remove animation: Slide-out (slide-left animation) + fade
  • Used in: Archive page filter UI
  • Haptic: Vibration feedback on remove (10ms tap)

Advanced Patterns & Technical Details

Implementation details, data attributes, CSS custom properties, and mobile transitions.

Data Attributes Reference

Attribute Value(s) Used For
data-counter 1084 (number) Count-up animation on stats
data-filter-type "medium", "decade", "series" Filter chip categorization (archive)
data-filter-val Filter value (e.g., "collage", "1970s") Filter data binding
data-page-label "1970s", "1980s", etc. Vertical "you are here" label on decade pages
data-kb="reveal" "reveal" (animation type) Hero slide reveal animation type

CSS Custom Properties (Variables)

Property Example Value Used For
--delay 0ms, 50ms, 100ms, 150ms Stagger animation delays (grid, related works)
--reveal-delay 0ms, 100ms, 200ms Scroll-reveal entrance delays
--mat #ebe8e2 (dominant color) Featured card background (average work color)
--mat-hover #d0c9c0 (darker variant) Featured card hover background

Mobile Layout Transitions

Component Mobile (<768px) Desktop (≥768px)
Featured Grid Single col, snap-scroll folio 12-col bento layout
Navigation Hamburger menu, drawer Top horizontal nav bar
Archive Grid 1 column 3–4 columns
Stats Display 2×2 grid (compact) 2×2 grid (wider)
Chromatic River Height: 56px Height: 120px

Error & Loading States

Loading State

Filter loading: 3 animated dots pulsing (600ms stagger)

Image loading: placeholder bg #f0f0f0, fade-in on .is-loaded

Error State

Network error: red toast notification "Something went wrong."

Empty State

No results: "Try adjusting your filters" (center-aligned, 14px body text)

Link Style Variants

Regular text link (persistent orange-ink)

Used in body copy, essays, prose

Underline link (secondary text)

Lighter styling for secondary links

[ Bracket link →]

CTA style, uppercase, prominent

Button Variants (Extended)

Future Enhancements

The design system is now museum-grade and production-ready. Below are truly optional enhancements for future iterations—not blocking any current work.

Optional Enhancements (Low Priority)

Dark Mode

Light dark mode palette documented. Would auto-apply 8 PM–8 AM. ~200 CSS variables needed. Preserve all contrast & never dim artwork.

Haptic Patterns Library

Extend beyond swipe (10-5-10ms). Add click (quick tap), hold (long duration), error (rapid bursts) patterns for richer feedback.

Advanced Gestures

Pinch-to-zoom on images, long-press for context menus, double-tap for fullscreen. Research user demand first.

Audio Cues

Optional subtle sounds for keyboard users: focus chime, notification ping, error buzz. Must respect preferences.

Print Optimization

Enhanced print styles for artwork pages. Show full metadata, hide navigation, optimize for A4/Letter paper.

Search Analytics

Track what users search for to improve discoverability. Privacy-first approach (no tracking IDs).

What's Complete

✅ Tier 1 Complete: Design Principles · Component States Gallery · Typography Specimens · Animation Showcase Looping
✅ Tier 2 Complete: Spacing & Grid System · Real-World Patterns · Color Contrast Data · Responsive Breakpoints
✅ Tier 3 Complete: Dark Mode Exploration · Design Vocabulary · Voice & Tone Guide
✅ Session 57 Complete: 30 UX/UI improvements shipped, style guide applied to all 40 pages

JFSN Archive Design System · Last updated 2026-06-17 (Session 57 complete)
Full Documentation