Blue Tides
Remix this template to create a similar design — same sections, layout, animations, colors, and typography.
A landing page for an ocean conservation nonprofit. Soft sand canvas, deep reef-teal and coral accents, Fraunces serif over Inter.
Palette
Typography
clamp(3.5rem,11vw,11rem)
clamp(3rem,12vw,11rem)
inherit
48px
16px
12px
Spacing & Shape
| Token | Value | Preview |
|---|---|---|
| xs | 4px | |
| sm | 8px | |
| md | 16px | |
| lg | 24px | |
| xl | 32px | |
| section-y | 112px |
Border Radius
| Token | Value | Preview |
|---|---|---|
| squircle | 28% | |
| droplet | 50% 50% 50% 50% / 30% 30% 70% 70% | |
| blob | 60% 40% 30% 70% / 60% 30% 70% 40% | |
| card-2xl | 32px | |
| xl | 12px | |
| full | 9999px |
design.md
tokens (raw)
name: blue-tides-design
version: alpha
description: >
An editorial ocean-restoration landing page built on a warm sand surface
(#F2EDE2) with a deep reef-teal (#2A4A5C) as the dominant immersive backdrop
and coral (#E87A68) as the single warm voltage. Fraunces (optical-size serif,
SOFT/WONK variation) carries oversized clamp-scaled display headlines with
italic species names; Inter handles body. The signature moves are organic
biomorphic blobs and "droplet"/"squircle" radii, a depth-descent gradient
timeline, a scroll-scrubbed before/after reef wipe, glassmorphic map pins, and
ambient drifting-fish / breathing-blob animations over a grainy caustic-lit
scene.
colors:
# Brand / Voltage
coral: '#E87A68' # primary warm voltage — accents, CTAs, pins, eyebrows, focus rings
algae: '#4A8A6A' # secondary green accent — featured tier, map dots, "monitoring", method 02
# Surface
sand: '#F2EDE2' # primary page surface; also light text on dark sections (var --sand)
reef: '#2A4A5C' # deep teal surface — hero base, sites section, stat tiles, bento card
ink: '#141210' # near-black — body text on sand, footer surface, dark accent cards
white: '#FFFFFF' # used at low opacity (white/40, white/60) for frosted stat/card fills
# Text
text-on-sand: '#141210' # ink — headings/body on sand surfaces
text-on-reef: '#F2EDE2' # sand — text on reef/ink dark surfaces
text-muted: 'rgba(20,18,16,0.8)' # ink/80 body copy in problem section
# Hairlines
hairline-dark: 'rgba(20,18,16,0.1)' # ink/10 section dividers, card borders on sand
hairline-light: 'rgba(242,237,226,0.15)' # sand/15 dividers/borders on reef
# Gradient
hero-radial: 'radial-gradient(ellipse at 50% -10%,#3b6577 0%,#2A4A5C 45%,#1a3340 100%)' # hero backdrop
depth-descent: 'linear-gradient(180deg,#F2EDE2 0%,#c8c6a8 30%,#5e7d7a 60%,#2A4A5C 100%)' # program section sand→reef
caustic: 'radial-gradient(ellipse at 50% 0%, rgba(240,232,210,.18), transparent 60%)' # hero light shimmer
typography:
display:
fontFamily: "'Fraunces', serif"
fontSize: clamp(3.5rem,11vw,11rem)
fontWeight: 300
lineHeight: 0.92
letterSpacing: -0.03em
display-section:
fontFamily: "'Fraunces', serif"
fontSize: clamp(3rem,12vw,11rem) # section H2 ~ text-5xl→text-7xl; footer giant uses this clamp
fontWeight: 300
lineHeight: 0.95
letterSpacing: -0.04em
italic-species:
fontFamily: "'Fraunces', serif"
fontStyle: italic
fontWeight: 500
stat-number:
fontFamily: "'Fraunces', serif"
fontSize: 48px # text-5xl stat figures
fontWeight: 300
body:
fontFamily: "'Inter', sans-serif"
fontSize: 16px
fontWeight: 400
lineHeight: 1.625
eyebrow:
fontFamily: "'Inter', sans-serif"
fontSize: 12px
fontWeight: 400
letterSpacing: 0.3em
textTransform: uppercase
rounded:
squircle: 28% # .squircle bento/tier cards
droplet: '50% 50% 50% 50% / 30% 30% 70% 70%' # .droplet / .blob-3 organic egg shape
blob: '60% 40% 30% 70% / 60% 30% 70% 40%' # .blob-1 freeform organic
card-2xl: 32px # rounded-[2rem] image/map frames
xl: 12px # rounded-xl glass pin tooltips
full: 9999px # rounded-full pills, chips, nav button, dots
spacing: # base unit 4px (Tailwind); common steps below
xs: 4px
sm: 8px
md: 16px
lg: 24px
xl: 32px
section-y: 112px # py-28 section rhythm (md:py-40 ~ 160px)
components:
nav-cta:
backgroundColor: transparent
textColor: '{colors.sand}'
border: '1px solid currentColor'
rounded: '{rounded.full}'
padding: '8px 16px'
note: 'border-current pill; hover fills with currentColor, text→reef'
hero-glass-cta:
backgroundColor: 'rgba(240,232,210,0.08)'
border: '1px solid rgba(240,232,210,0.25)'
textColor: '{colors.sand}'
rounded: '{rounded.full}'
padding: '16px 28px'
typography: '{typography.eyebrow}'
note: 'glass (backdrop-blur 14px); hover bg→coral'
stat-tile:
backgroundColor: '{colors.reef}'
textColor: '{colors.sand}'
typography: '{typography.stat-number}'
padding: '24px'
note: 'gap-px grid creates hairline grid lines via sand/15 background'
bento-card:
backgroundColor: '{colors.reef}'
rounded: '{rounded.squircle}'
note: 'biomorphic media cards; variants use algae/coral/ink fills and droplet/blob radii; hover-magnet lift'
tier-card:
backgroundColor: 'rgba(255,255,255,0.5)'
border: '1px solid {colors.hairline-dark}'
rounded: '{rounded.squircle}'
padding: '32px'
note: 'on hover a colored .fill rises from bottom (40%/12% radius→0), text→sand; featured tier solid algae'
tier-button:
backgroundColor: transparent
border: '1px solid currentColor'
rounded: '{rounded.full}'
padding: '12px 0'
typography: '{typography.eyebrow}'
note: 'full-width; hover fills currentColor'
chip:
backgroundColor: '{colors.coral}'
textColor: '{colors.ink}'
rounded: '{rounded.full}'
padding: '4px 12px'
typography: '{typography.eyebrow}'
note: 'e.g. "Most popular"; also algae/ink-70 timeline chips'
map-pin-tooltip:
backgroundColor: 'rgba(240,232,210,0.08)'
border: '1px solid rgba(240,232,210,0.25)'
textColor: '{colors.sand}'
rounded: '{rounded.xl}'
padding: '12px'
note: 'glass card; pin dot pulses via pin-glow + ripple-ring'
range-slider:
note: 'native input[type=range] with accent-color {colors.coral}; drives donate + before/after wipe'
motion:
breathe: 'scale(1)→scale(1.08) rotate(2deg), 7s ease-in-out infinite (breathe-slow 11s) — blobs'
drift: 'translateY(0→-18px), 14s ease-in-out infinite'
fish-swim: 'translateX(-10vw→110vw) linear 28s / reverse 36s — ambient drifting fish'
ripple: 'scale(.4→3) opacity .8→0, 3s ease-out infinite — map pin rings'
pin-glow: 'box-shadow ring 0→22px coral, 2.5s ease-out infinite (pinpulse)'
scroll-cue: 'translateY 0→8px + opacity, 2s ease-in-out infinite'
hover-magnet: 'translateY(-6px), .4s cubic-bezier(.2,.8,.2,1)'
tier-fill: 'bottom -100%→0, .7s cubic-bezier(.65,0,.35,1) + radius morph'
scroll-wipe: 'GSAP ScrollTrigger scrub: clip-path inset(0 100%→0% 0 0) before/after reef reveal'
count-up: 'GSAP power2.out 2s number counters (data-count)'
headline-reveal: 'h1 y+autoAlpha power3.out 1.2s; h2 blur(14px)→0 + y on scroll'
smooth-scroll: 'Lenis smooth scrolling synced to GSAP ticker'
icons:
library: 'Tabler icons-webfont (ti) for UI; game-icons (SVG, CSS-filter tinted) for decorative marine life'
style: outline
sizes: { sm: 16px, md: 24px, lg: 32px, xl: 56px }
color: '{colors.algae}'
note: 'Tabler UI icons (ti-dna-2, ti-wave-sine, ti-plant-2, ti-microscope, ti-school...); game-icons fish/coral/seed tinted via invert/sepia/hue-rotate filters'Blue Tides
blue-tides-design · alpha
Design spec — version alpha. Source: static HTML (
index.html); tokens read from inline styles + class rules. Fictional/sample product; described factually.
Overview
Blue Tides is the landing page for "Coralline," a fictional ocean-restoration
collective, and it reads like a printed nature monograph that learned to swim.
The base surface is a warm paper sand (#F2EDE2) carrying near-black ink
(#141210) text, but the page repeatedly submerges into deep reef teal
(#2A4A5C) — the hero is a radial-gradient(ellipse at 50% -10%,#3b6577,#2A4A5C,#1a3340)
seascape, and the "program" section literally descends from sand to reef via a
linear-gradient(180deg,#F2EDE2,#c8c6a8,#5e7d7a,#2A4A5C). Against this, a single
warm voltage of coral (#E87A68) lights every eyebrow, CTA, map pin and
emphasis, with algae green (#4A8A6A) as a secondary accent. The type story is
the centerpiece: Fraunces (an optical-size serif run with SOFT 100, WONK 1
variation settings) sets enormous clamp(3.5rem,11vw,11rem) light-weight
headlines with negative tracking and italic Latin species names (Montipora capitata), while Inter handles body and uppercase wide-tracked eyebrows.
Geometry is deliberately organic: nothing is a plain rectangle — cards are
squircle (border-radius 28%), droplet and freeform blob shapes, and the
scene breathes with animated coral blobs, drifting fish, rippling map pins and a
scroll-scrubbed before/after reef wipe.
Colors
Brand / voltage. coral #E87A68 is the one warm signal color: section
eyebrows ("01 · The Threat"), the nav "Sponsor a reef" hover, donate slider
accent, map pins, the featured-tier badge, and italic headline emphasis
(sea's). algae #4A8A6A is the secondary accent — the featured donation tier
fill, "Monitoring" map dots, method-02 card, and the Tabler UI icons.
Surface. sand #F2EDE2 (CSS --sand) is the page background and, inverted,
the text/foreground color on every dark section. reef #2A4A5C (--reef) is
the immersive deep surface — hero gradient base, the sites section, the stat
tiles, and the large bento media card. ink #141210 (--ink) is body text on
sand and the surface of the footer and dark accent cards. white appears only at
low opacity (white/40, white/50, white/60) to frost glassy stat/tier cards
over sand.
Text. On sand, headings and body are ink, with body often dropped to
ink/80. On reef/ink surfaces, text is sand, frequently at opacity-60–80
for secondary copy and opacity-50 for muted labels.
Hairlines. Borders are thin and translucent: ink/10–ink/20 on sand
(section dividers, card outlines), sand/15–sand/20 on reef (the footer rule,
map frame, stat-grid lines created by a gap-px background).
Gradients. Three named gradients do the heavy lifting: the hero seascape
radial, the sand→reef depth-descent linear on the program section, and the
subtle caustic light-from-above radial overlaid on the hero.
Typography
Two Google Fonts: Fraunces (ital,opsz,wght axes, weights 300–900) as the
display/serif voice and Inter (300–700) as the body/UI voice; Tabler
icons-webfont is loaded for icons. Fraunces is applied with
font-variation-settings:"SOFT" 100,"WONK" 1 for a soft, slightly quirky cut,
and italic species names use Fraunces italic 500. If substituting, Fraunces is
open-source (Google Fonts) so no fallback is needed; Inter likewise.
| Token | Size | Weight | Line-height | Tracking | Usage |
|---|---|---|---|---|---|
| display | clamp(3.5rem,11vw,11rem) | 300 | 0.92 | -0.03em | Hero H1 |
| display-section | text-5xl→7xl / clamp(3rem,12vw,11rem) | 300 | 0.95 | -0.03em→-0.04em | Section H2s, footer giant line |
| italic-species | inherits | 500 italic | — | — | Latin species names inline |
| stat-number | 48px (text-5xl), down to text-2xl/3xl | 300 | tight | — | Big figures (317,600 · 89%) |
| body | 15–20px | 400 | 1.625 | — | Paragraph copy |
| eyebrow | 10–12px | 400 | — | 0.3em (uppercase) | Section labels, kickers, button text |
Layout
Base unit is Tailwind's 4px scale. Content sits in max-w-7xl (program in
max-w-6xl) with px-6 md:px-12 gutters and a py-28 md:py-40 vertical rhythm.
The page is a long single-column scroll narrative with numbered sections
(01–05). Signature structural moves: a full-bleed min-h-screen hero with
absolutely-positioned floating blobs and fish over a photo; a 12-column
biomorphic bento grid mixing squircle, droplet and blob cards of varying
spans; a centered depth-descent timeline with a gradient vertical spine and
alternating left/right steps pinned by glowing circular markers; a dotted-SVG
world map with absolutely-positioned glass pins; and a footer anchored by a
giant clamp-scaled "Keep the tide-line rising." headline. Whitespace is generous
and editorial; the fixed header uses mix-blend-difference so it reads against
any section.
Elevation & Depth
Depth comes mostly from color, blur and organic shape rather than drop shadows.
Glass: .glass = rgba(240,232,210,.08) + backdrop-filter:blur(14px) +
1px sand/25 border (hero CTA, map tooltips); some cards use backdrop-blur over
white/60. Grain & caustics: a tiny radial-gradient dot pattern
(.grain, 3px tile) and the caustic light radial sit over the hero for an
underwater texture. Shadow is sparse — the featured donation tier carries
shadow-xl and slight scale/translate to pop forward; the pin-glow keyframe
animates an expanding coral box-shadow ring on map pins. Otherwise depth is
hairline borders and the breathing blurred blobs (filter:blur(1–4px)) layered
behind content.
Shapes
Roundness is the brand. Almost nothing is a plain rectangle: .squircle
(border-radius:28%) for bento and tier cards, .droplet / .blob-3
(50% 50% 50% 50% / 30% 30% 70% 70%) for egg-shaped tiles, freeform .blob-1/
.blob-2 for the ambient background organisms, rounded-[2rem] (32px) for image
and map frames, rounded-xl (12px) for glass tooltips, and rounded-full pills
for chips, the nav button, and tier buttons. The tier-card hover even morphs its
rising fill from a soft 40% 40% 0 0 / 12% 12% 0 0 arc to square.
Components
- Nav CTA — transparent pill,
1pxborder-current,rounded-full, px-4 py-2; hover inverts to filled withreeftext. Header is fixed withmix-blend-difference. - Hero glass CTA —
.glasspill, sand text, uppercase tracked label ("Explore ↓"); hover background →coral. - Stat tile —
reeffill, sand text,Fraunces48px light figure over a tiny uppercase label; tiles separated bygap-pxhairlines. - Bento card — biomorphic media cards on
reef/algae/coral/inkfills, squircle/droplet/blob radii,hover-magnetlift, video/photo backgrounds. - Tier card —
squircle,white/50fill +ink/15border (featured = solidalgae,shadow-xl, scaled up); hover raises a colored.fillfrom the bottom and flips text tosand. Buttons: full-width border-current pills. - Chip / badge —
rounded-fullcoral or algae pills, e.g. "Most popular," "2002 · thriving." - Map pin — coral/algae dot with
pin-glowpulse andripple-ring; selected pins show a glassrounded-xltooltip with species name. - Range sliders — native
input[type=range]withaccent-coral, driving the donate calculator and the before/after reef wipe. - Footer newsletter — borderless email input on a
sand/40bottom rule with a coral "Join →" button.
Motion
Heavily animated and ambient. CSS keyframes: breathe/breathe-slow (blobs
scale+rotate, 7s/11s), drift (vertical float, 14s), fish-swim-1/2 (fish
translate across viewport, 28s/36s/42s), ripple (pin rings expand+fade, 3s),
pinpulse (coral shadow ring, 2.5s), scrollcue (bounce, 2s). Transitions:
hover-magnet lift (.4s soft cubic-bezier), tier-card .fill rise (.7s
cubic-bezier with radius morph), tier text color (.5s). GSAP + ScrollTrigger +
Lenis power the scroll layer: a scrubbed before/after reef wipe
(clip-path inset) tied to the problem section, count-up number animations,
hero blob parallax (yPercent), an H1 reveal (y+fade, power3.out 1.2s),
and H2s that blur-in (blur(14px)→0) on scroll. Lenis provides smooth
scrolling synced to the GSAP ticker.
Iconography
Two icon systems. Tabler icons-webfont (ti ti-*, outline) for UI/meaning —
ti-dna-2, ti-wave-sine, ti-plant-2, ti-activity, ti-microscope,
ti-school, ti-scuba-mask, ti-flask, ti-speakerphone — typically tinted
algae or coral, sized text-2xl–4xl (24–36px). game-icons marine SVGs
(tropical-fish, school-of-fish, jellyfish, coral, plant-seed) used decoratively,
recolored via CSS filter:invert/sepia/saturate/hue-rotate to coral, algae or
sand tints; the small brand mark is an inline currentColor SVG. Sizes range
from 10–16px ambient fish up to 56px (w-14) tier-card glyphs.
Do's and Don'ts
- Do keep
coralas the single warm voltage andalgaeas the lone secondary accent; reserve them for eyebrows, CTAs, pins and emphasis. - Do use Fraunces light at large clamp sizes with negative tracking for display, and Fraunces italic 500 for Latin species names.
- Do keep shapes organic — squircle/droplet/blob and full pills — and let the blobs/fish breathe and drift behind content.
- Do alternate sand and reef surfaces, inverting text color accordingly.
- Don't introduce hard drop shadows or sharp rectangular cards; depth is glass, grain, hairlines and blurred blobs.
- Don't add new hues — stay within sand/reef/ink + coral/algae.
- Don't set body in the serif or run display in Inter; keep the two voices distinct.
Known Gaps
- Numeric design tokens (sizes, spacing) come from Tailwind utility classes
(
text-5xl≈ 48px,py-28≈ 112px,rounded-[2rem]= 32px) interpreted at Tailwind defaults; exact rendered pixels depend on the Tailwind v4 browser build. - The hero photo, fish SVGs, and tier/method imagery are remote CDN assets (Pexels/Unsplash/jsDelivr game-icons); only their roles and CSS filters are documented, not the image content.
- game-icon tint colors are produced by stacked CSS
filterchains that approximate coral/algae/sand rather than exact hex values. - Gradient color stops (e.g. hero
#3b6577/#1a3340, depth#c8c6a8/#5e7d7a) are one-off values read directly from inline styles, not part of the named token palette.