Skip to main content
Back to Examples

Anthozoa

Remix this template to create a similar design — same sections, layout, animations, colors, and typography.

Visit site

A landing page for a coral reef restoration nonprofit. Deep abyssal teal-black canvas, bioluminescent aqua and coral-flare accents, Fraunces and Inter.

19
core colors
3
typefaces
39
tokens
agent.kombai.com/kombai-inspiration-library/templates/anthozoa/index.html
01

Palette

bg-abyss
#0A1922
bg-surface
#10242E
bg-deep
#061119
bg-panel-1
#0D2029
bg-bone
#F2E8D6
card-bone
#FFFFFF
card-border-bone
#D8CAA9
lume
#3DF0D2
flare
#FF5A3D
rust
#7B3F22
ink-mist
#C4D6DA
ink-bone
#1A1410
text-muted
#8AA0A8
text-dim
#7A8C92
text-faint
#5A7480
text-cool
#3A5A68
text-bone-muted
#4A3F30
rule
#243944
dna-gradient
LINEAR-GRADIENT(90DEG, #3DF0D2, #FF5A3D)
02

Typography

displayThe quick brown fox jumps'Fraunces', serif
clamp(56px,7.2vw,108px)
section-headingThe quick brown fox jumps'Fraunces', serif
clamp(40px,4.4vw,72px)
display-italicThe quick brown fox jumps'Fraunces', serif
clamp(28px,3.6vw,56px)
manifestoThe quick brown fox jumps'Fraunces', serif
clamp(72px,14vw,220px)
stat-numberThe quick brown fox jumps'Fraunces', serif
64px
bodyThe quick brown fox jumps'Inter', sans-serif
16px
body-smThe quick brown fox jumps'Inter', sans-serif
14px
eyebrowThe quick brown fox jumps'JetBrains Mono', monospace
11px
mono-labelThe quick brown fox jumps'JetBrains Mono', monospace
11px
button-labelThe quick brown fox jumps'JetBrains Mono', monospace
12px
03

Spacing & Shape

TokenValuePreview
xs8px
sm14px
md24px
lg32px
xl56px
section-y120px
04

Border Radius

TokenValuePreview
none0
xs2px
pill999px
full9999px
05

design.md

design.mdreadable by AI agents
tokens (raw)
name: anthozoa-design
version: alpha
description: >
  A cinematic, scroll-driven marine-science nonprofit landing page set in deep-ocean
  darkness. The surface is an abyssal blue-black (`#0A1922`) lit by a single
  bioluminescent "lume" teal (`#3DF0D2`) with a coral-warning "flare" orange-red
  (`#FF5A3D`) as counter-voltage. The type story pairs an editorial optical Fraunces
  serif (light weight, italic accents, soft/wonk variation) for display against a
  JetBrains Mono lab/eyebrow voice and Inter for body. Signature moves: pinned split
  hero with swapping text panels, a scroll-driven theme inversion (dark→bone),
  sticky-stacked science panels, an SVG path that draws down a depth spine, and a
  mouse-spotlight reveal map. Geometry is near-flat and editorial — hairline rules,
  square image frames, and full-pill CTAs.
colors:
  # Surface
  bg-abyss: '#0A1922'      # primary page background (deep ocean)
  bg-surface: '#10242E'    # secondary panel/card surface (program img-wrap)
  bg-deep: '#061119'       # deepest well — hero/science media backgrounds, map base
  bg-panel-1: '#0d2029'    # science panel alt background
  bg-bone: '#F2E8D6'       # inverted "bone" surface (donate section, hero headline ink)
  card-bone: '#FFFFFF'     # white card fills in the bone/donate section
  card-border-bone: '#d8caa9'  # warm border on bone cards/inputs
  # Brand / Voltage
  lume: '#3DF0D2'          # bioluminescent teal — primary accent, CTAs, links, nodes
  flare: '#FF5A3D'         # coral-warning orange-red — secondary accent, stakes, crisis
  rust: '#7B3F22'          # warm rust eyebrow color on the bone section
  # Text
  ink-mist: '#C4D6DA'      # body text on dark surfaces
  ink-bone: '#1A1410'      # near-black heading/body text on bone surface
  text-muted: '#8aa0a8'    # muted captions/legend on dark
  text-dim: '#7a8c92'      # dimmer labels (stat lbl, scroll cue)
  text-faint: '#5a7480'    # faintest mono labels / footer base
  text-cool: '#3a5a68'     # depth gauge, planned-pin color
  text-bone-muted: '#4a3f30'  # muted body on bone surface
  # Hairlines
  rule: '#243944'          # 1px hairline rule / borders on dark
  # Gradient
  dna-gradient: 'linear-gradient(90deg, #3DF0D2, #FF5A3D)'  # SVG DNA helix stroke
typography:
  display:
    fontFamily: "'Fraunces', serif"
    fontSize: clamp(56px,7.2vw,108px)
    fontWeight: 300
    lineHeight: 0.94
    letterSpacing: -0.03em
  display-italic:
    fontFamily: "'Fraunces', serif"
    fontSize: clamp(28px,3.6vw,56px)
    fontWeight: 500
    lineHeight: 1.18
    letterSpacing: -0.02em
  section-heading:
    fontFamily: "'Fraunces', serif"
    fontSize: clamp(40px,4.4vw,72px)
    fontWeight: 300
    lineHeight: 0.96
    letterSpacing: -0.025em
  manifesto:
    fontFamily: "'Fraunces', serif"
    fontSize: clamp(72px,14vw,220px)
    fontWeight: 300
    lineHeight: 0.85
    letterSpacing: -0.04em
  stat-number:
    fontFamily: "'Fraunces', serif"
    fontSize: 64px
    fontWeight: 300
    lineHeight: 1
    letterSpacing: -0.03em
  body:
    fontFamily: "'Inter', sans-serif"
    fontSize: 16px
    fontWeight: 400
    lineHeight: 1.55
  body-sm:
    fontFamily: "'Inter', sans-serif"
    fontSize: 14px
    fontWeight: 400
    lineHeight: 1.6
  eyebrow:
    fontFamily: "'JetBrains Mono', monospace"
    fontSize: 11px
    fontWeight: 500
    lineHeight: 1.6
    letterSpacing: 0.22em
    textTransform: uppercase
  mono-label:
    fontFamily: "'JetBrains Mono', monospace"
    fontSize: 11px
    fontWeight: 400
    lineHeight: 1.5
    letterSpacing: 0.12em
    textTransform: uppercase
  button-label:
    fontFamily: "'JetBrains Mono', monospace"
    fontSize: 12px
    fontWeight: 500
    lineHeight: 1
    letterSpacing: 0.18em
    textTransform: uppercase
rounded:                  # near-flat editorial — square frames, pill CTAs only
  none: 0
  xs: 2px
  pill: 999px
  full: 9999px
spacing:                  # base unit 8px; section padding leans on 24/32/56px
  xs: 8px
  sm: 14px
  md: 24px
  lg: 32px
  xl: 56px
  section-y: 120px
components:
  nav:
    backgroundColor: 'rgba(6,17,25,.42)'
    textColor: '{colors.bg-bone}'
    typography: '{typography.mono-label}'
    backdropFilter: 'blur(14px) saturate(1.1)'
    borderBottom: '1px solid rgba(61,240,210,.08)'
    padding: '18px 32px'
  nav-cta:
    backgroundColor: 'transparent'
    textColor: '{colors.lume}'
    border: '1px solid {colors.lume}'
    rounded: '{rounded.pill}'
    padding: '9px 18px'
    typography: '{typography.mono-label}'
    # hover: fills with {colors.lume}, text {colors.bg-abyss}
  btn-primary:
    backgroundColor: '{colors.lume}'
    textColor: '{colors.bg-abyss}'
    typography: '{typography.button-label}'
    rounded: '{rounded.pill}'
    padding: '14px 28px'
    # hover: background {colors.bg-bone}, translateY(-2px)
  btn-secondary:
    backgroundColor: 'transparent'
    textColor: '{colors.ink-mist}'
    typography: '{typography.button-label}'
    borderBottom: '1px solid {colors.rule}'
    padding: '14px 22px'
    # hover: color + border-color → {colors.lume}
  tier-card:
    backgroundColor: '{colors.card-bone}'
    textColor: '{colors.ink-bone}'
    border: '1px solid {colors.card-border-bone}'
    rounded: '{rounded.none}'
    padding: '32px'
    # hover: box-shadow 0 24px 60px rgba(26,20,16,.15); 3D rotateX/rotateY tilt
  tier-card-reef:
    backgroundColor: '{colors.ink-bone}'
    textColor: '{colors.bg-bone}'
    rounded: '{rounded.none}'
    padding: '32px'
  tier-btn:
    backgroundColor: 'transparent'
    textColor: '{colors.ink-bone}'
    border: '1px solid {colors.ink-bone}'
    rounded: '{rounded.none}'
    padding: '14px'
    typography: '{typography.mono-label}'
    # hover: background {colors.ink-bone}, text {colors.bg-bone}
  image-frame:
    backgroundColor: '{colors.bg-deep}'
    border: '1px solid {colors.rule}'
    rounded: '{rounded.none}'
  data-cell:
    backgroundColor: '{colors.bg-abyss}'
    textColor: '{colors.ink-mist}'
    rounded: '{rounded.none}'
    padding: '24px 22px'
    # arranged in a 1px-gap grid over a {colors.rule} background → hairline divider grid
  stake-badge:
    backgroundColor: '{colors.flare}'
    textColor: '{colors.bg-bone}'
    typography: '{typography.mono-label}'
    rounded: '{rounded.none}'
    padding: '18px 22px'
    boxShadow: '0 12px 32px rgba(255,90,61,.25)'
    transform: 'rotate(-3deg)'
  map-pin:
    backgroundColor: '{colors.lume}'
    rounded: '{rounded.full}'
    # variants: .flare → {colors.flare}, .monitor/.planned → {colors.text-cool}; pulsing ring
  newsletter-input:
    backgroundColor: 'transparent'
    textColor: '{colors.bg-bone}'
    borderBottom: '1px solid {colors.rule}'
    typography: '{typography.body-sm}'
motion:
  hero-panel-swap: 'opacity + translateY(16px) .5s ease; panels switch by scroll progress slices'
  hero-line-rise: 'translateY(110%)→0 over .9s cubic-bezier(.2,.8,.2,1), staggered .05/.18/.32s'
  hero-img-scale: 'scale(1 → 1.08) tied to hero scroll progress'
  theme-inversion: 'color-mix oklab abyss→bone driven by --inv scroll var; .1s linear smoothing'
  science-stack: 'sticky panels translateY/scale + opacity .7s ease; h3 skewY(7deg)→0 .8s'
  program-path-draw: 'SVG strokeDashoffset down a depth spine; nodes activate sequentially'
  headline-reveal: 'is-in triggers — word stagger, clip-path inset wipe, letter-spacing collapse'
  pulse: '@keyframes pulse — dot opacity/scale 2s ease-in-out infinite'
  ring: '@keyframes ring — map pin ring scale(.5→4) fade 3s ease-out infinite'
  marquee: 'JS transform translateX, constant 32s full-loop, scroll-velocity aware'
  count-up: 'data-count numbers ease-out cubic over 1800ms on intersection'
  tilt: 'donate tiers rotateX/rotateY ±4deg following mouse, .4s cubic-bezier(.2,.8,.2,1)'
icons:
  library: 'Tabler icons webfont (linked) + game-icons (donate tier icons) + inline SVG (logo, DNA, waveform, map)'
  style: 'outline / line'
  stroke: 1.5px
  sizes: { sm: 18px, md: 24px, lg: 44px }
  color: '{colors.lume}'

Anthozoa

anthozoa-design · alpha

Design spec — version alpha. Source: static HTML (index.html); tokens read from inline styles + class rules. Fictional/sample product; described factually.

Overview

Anthozoa is a coral-restoration nonprofit landing page built as one long scroll-driven descent into the deep ocean. The dominant surface is an abyssal blue-black #0A1922 (--bg-abyss), deepening to #061119 in media wells and lifting to #10242E for panels. Against that darkness a single bioluminescent teal #3DF0D2 (--lume) carries every interactive accent — CTAs, links, map pins, the drawn depth spine — while a coral-warning orange-red #FF5A3D (--flare) acts as the counter-voltage for the crisis section, "stakes" badges, and danger callouts. The page's signature inversion flips the whole world to a warm "bone" #F2E8D6 for the donate section, recoloring eyebrows to rust #7B3F22. The type story is editorial and scientific at once: an optical Fraunces serif at light weight 300 with font-variation-settings:"opsz" 144 and SOFT/WONK tuning carries displays (including a 220px footer manifesto), its italic 500 used for poetic accents; JetBrains Mono voices every eyebrow, label, spec sheet and button in wide uppercase tracking; Inter handles body copy. The geometry is deliberately near-flat — hairline #243944 rules, square image frames, no card radius — with the only curves being 999px pill CTAs and round map pins.

Colors

Surface. --bg-abyss #0A1922 is the page background and the resting state of nav/hero/science/program/footer. --bg-surface #10242E fills the program image frame; #061119 (deepest well) backs hero/science media and the sites map; science panels alternate #0d2029 and #0a1922. The inversion surface is --bg-bone #F2E8D6 (donate section, hero/footer headline ink). Cards on the bone surface are pure white #FFFFFF with warm #d8caa9 borders.

Brand / Voltage. --lume #3DF0D2 is the one accent voltage — primary button fills, link hovers, the nav-CTA outline, program nodes and SVG spine, map reveal dots, and italic display accents. --flare #FF5A3D is the warning counter-voltage: crisis eyebrow, the rotated "stake" badge, the "MOST CHOSEN" stamp, method 03's tag, and the bone-section's accent. --rust #7B3F22 colors eyebrows and small labels on the bone surface.

Text. Body on dark is --ink-mist #C4D6DA; on bone it's near-black --ink-bone #1A1410 with #4a3f30 for muted bone body. A descending ladder of muted blues handles secondary type: #8aa0a8 (captions/legend), #7a8c92 (stat labels), #5a7480 (faint mono), #3a5a68 (depth gauge / planned pins).

Hairlines. --rule #243944 is the universal 1px hairline — section top-borders, image-frame borders, the data-cell divider grid, and footer rules.

Gradient. The only gradient as content is the DNA helix stroke linear-gradient(90deg, #3DF0D2, #FF5A3D) (lume→flare) in the assisted-gene-flow panel. Decorative overlays use abyss-to-transparent linear fades on media.

Typography

Three families, all loaded from Google Fonts. Fraunces (opsz 9..144, weights 300/500/600 + italics) is the display/editorial face — substitute any high-contrast optical serif if unavailable. Inter (400/500) is body. JetBrains Mono (400/500) is the lab/UI mono voice, always uppercase with wide tracking. Fraunces displays run light (300) with letterSpacing -0.03em and very tight line-heights (0.85–0.96); italic 500 marks accents and is frequently recolored to lume.

TokenSizeWeightLine-heightTrackingUsage
displayclamp(56,7.2vw,108)px3000.94-0.03emHero H1, donate H2
section-headingclamp(40,4.4vw,72)px3000.96-0.025emCrisis/sites/program H2
display-italicclamp(28,3.6vw,56)px5001.18-0.02emMission panel, method H3
manifestoclamp(72,14vw,220)px3000.85-0.04emFooter manifesto
stat-number64px (to 140px)3001-0.03emStats, prices, big numerals
body16px4001.55Hero/section body copy
body-sm14px4001.6Card descriptions, footer
eyebrow11px5001.60.22emSection eyebrows
mono-label11px4001.50.12emNav, captions, meta rails
button-label12px50010.18emPrimary/secondary buttons

Layout

Base spacing unit is 8px; section vertical padding leans on 56/80/120/140px and horizontal gutters on 24px (mobile) / 56px (desktop), inside a 1320px max-width .container. The page is a sequence of tall scroll-driven "outer" sections (height: 300vh/250vh/400vh) each pinning a 100vh position:sticky inner stage. Signature structural moves: the hero is a 1fr/1fr split — a sticky cinematic image left, stacked swapping text panels right; the crisis is a 7fr/5fr split with a clip-path before/after image and a scroll-driven dark→bone theme inversion; the science stack absolutely overlays panels that translate/scale as you scroll; the program is a 1fr/80px/1fr grid with a center SVG depth-spine that draws on scroll; sites is a 16/7 dotted-map with a radial mouse-spotlight mask and a 4-up hairline data grid; donate inverts to bone with a 3-up tilting card grid and a two-column numbered list. Whitespace is generous and editorial, with large numerals bleeding behind panels as texture.

Elevation & Depth

The system is largely flat and hairline-driven: borders (#243944) and 1px-gap grids stand in for shadows across dark sections. Depth comes from layering and blur, not boxes — the nav uses backdrop-filter: blur(14px) saturate(1.1) glass, and label chips on the map blur their abyss backgrounds. Real shadows appear only on warm/accent elements: the rotated flare "stake" badge (0 12px 32px rgba(255,90,61,.25)), the "MOST CHOSEN" stamp (0 4px 16px rgba(255,90,61,.3)), donate tier hover (0 24px 60px rgba(26,20,16,.15)), and glowing focus rings on active nodes/pins (0 0 0 8px rgba(61,240,210,.18)). Giant low-opacity Fraunces numerals (0.10–0.18 alpha) provide background depth in the science stack.

Shapes

Editorial near-flat geometry. Radius is essentially binary: square (0) for all image frames, cards, tiers, data cells, and badges; full pill (999px) for CTAs (primary button, nav-CTA) and round (50%) for dots, nodes, map pins, and the slider thumb. The only 2px softening is on the map label chips. Sharp right angles plus the rotated stake/stamp badges give the page its field-log, scientific-document character.

Components

  • Nav — fixed glass bar, rgba(6,17,25,.42) + blur(14px), mono-label type, bone text, 1px lume-tinted bottom border; flips to a translucent bone bar (.is-light) over the donate section.
  • Nav CTA — "Adopt a coral →", lume outline pill, fills lume on hover.
  • Primary button — "Dive in ↓", solid lume fill on abyss text, pill, 14px 28px, lifts -2px and turns bone on hover.
  • Secondary button — "Watch the 4-minute film", text + lume-on-hover underline (border-bottom rule).
  • Tier card — white fill, #d8caa9 border, square, 32px pad, 480px min, 3D mouse tilt; outline tier button fills ink-bone on hover.
  • Reef tier — inverted ink-bone card with bone text and lume accents.
  • Stake badge — flare fill, bone text, rotated -3deg, soft flare shadow ("50% gone since '50").
  • Data cell — abyss cells in a 1px-gap grid over --rule → hairline divider table of restoration sites.
  • Map pins — round lume dots (flare/monitor/planned variants) with pulsing rings and hover labels.
  • Slider — flare thumb on a #d8caa9 2px track, mono scale labels.
  • Newsletter input — transparent, bone text, rule underline, mono "Subscribe →" button.

Motion

Everything is scroll- and pointer-driven through a single rAF loop. Hero text panels cross-fade/slide as scroll progress crosses slice thresholds; the hero image scales 1→1.08; headline lines rise from translateY(110%) with staggered delays on a cubic-bezier(.2,.8,.2,1). The crisis section color-mixes abyss→bone in oklab via a --inv scroll variable (and clip-reveals the "alive" image). Science panels stack with translate/scale/opacity and h3s un-skew from skewY(7deg). The program SVG spine draws via strokeDashoffset while depth nodes activate sequentially and a depth counter ticks 3→12→28M. Headlines reveal on intersection via word stagger, clip-path wipes, and collapsing letter-spacing. The footer marquee is a constant 32s JS translate loop; counters count up ease-out over 1800ms; donate tiers tilt ±4deg with the mouse; the map runs a radial spotlight mask under the cursor. Ambient pulse and ring keyframes animate dots and pin rings.

Iconography

Mixed sources. The Tabler icons webfont is linked for UI glyphs; donate tier icons are game-icons SVGs (plant-seed, coral, tropical-fish) recolored via CSS filter to rust/flare/lume. Bespoke inline SVGs carry the brand: the logo (layered-polyp line mark, 1.5px stroke, lume), the DNA double-helix (lume→flare gradient stroke), the acoustic waveform (lume stroke), and the dotted-pattern world map. Style is consistently thin-line/outline at 1.5px, colored lume by default, flare for warnings. Sizes range 18px (UI) to 44px (tier icons). Icons are mostly decorative/diagrammatic rather than functional UI.

Do's and Don'ts

  • Do keep the surface abyssal and let a single lume accent carry interaction; reserve flare for danger/warning and "most chosen" emphasis.
  • Do pair light-weight Fraunces displays (italic accents in lume) with wide-tracked uppercase JetBrains Mono labels.
  • Do use hairline rules and 1px-gap grids instead of shadows on dark surfaces; keep image frames and cards square.
  • Do preserve the scroll-driven theatre — pinned stages, panel swaps, the depth-spine draw, the dark→bone inversion.
  • Don't introduce a third accent hue or recolor lume/flare away from their roles.
  • Don't round card/image corners or drop big soft shadows on dark sections — it breaks the field-log flatness.
  • Don't set Fraunces displays in heavy weights or wide tracking, or letter-space the body face; keep tracking negative on serifs and wide on mono only.

Known Gaps

  • The accent gradient on the DNA helix and the scroll-velocity marquee speed are read directly from markup; the perceived motion timing is described, not measured.
  • Numerous one-off muted blue text values (#8aa0a8, #7a8c92, #5a7480, #3a5a68, #a0b3b9, #5a7480, #1b2f3a) form an informal ladder; the spec captures the representative ones rather than every instance.
  • bg-deep #061119, bg-panel-1 #0d2029, and card-bone #FFFFFF are named here for the spec but appear as literal values in the HTML (not CSS variables).
  • Fraunces' SOFT/WONK axes and opsz 144 are applied via font-variation-settings and cannot be fully reproduced by a non-variable substitute; substitute a high-contrast optical serif and accept slight drift.