# Design Language for underdark.webcam

## Aesthetics and Tone

underdark.webcam is a **goblincore monitoring station** — the public web face of a single, half-broken, lovingly maintained camera that someone bolted to a stalactite somewhere deep beneath the world and never came back for. The premise is literal: this is a webcam. It points into the dark. The dark, it turns out, is not empty — it glows. Pale fungal light, drip-water shimmer, the slow drift of something with too many eyes just past the focal plane. The site frames itself as the *viewer interface* for that feed, the way an old wildlife-cam portal frames a osprey nest — except the wildlife here is mycelial, the timestamps are unreliable, and nobody is moderating the comments because nobody can get down there.

The tone is **mysterious-moody** with a streak of **grounded-earthy** goblin domesticity: this is a haunted place, but it's also somebody's *place* — there are personal touches, a hand-labeled clip archive, a "things I have collected" shelf rendered as a sidebar. The aesthetic vocabulary is goblincore — earthy chaos, hoarded textures, mismatched found objects, the beauty of rot and damp and shiny things pulled out of mud — pressed against the cold rectangular honesty of a **dark-mode** surveillance UI. Think: a chitin-and-amber jewelry box sitting on top of a 2003 IP-camera admin panel. The `.webcam` TLD is taken completely seriously and completely wrongly — yes, it is a webcam; no, you should not have found it.

Reference mood: the green-black of a night-vision feed; the specific orange of a cave glow-worm thread; the UI chrome of decommissioned `axis-cgi` camera firmware; a goblin's pocket contents tipped onto velvet; the patient, looping boredom of a livestream of nothing, occasionally interrupted by *something*.

## Layout Motifs and Structure

The page is built as a **HUD overlay on a full-bleed feed** — a layout pairing (`hud-overlay` at 2%, `full-bleed` common but rarely combined this way in the archive) that treats the entire viewport as a live camera image with interface furniture floating on top of it.

**The feed plate.** The `<body>` is the camera image: a near-black field (`#0B0E0A`) carrying a slow, generative bioluminescent canvas — soft drifting blobs of fungal light, a faint scanline drift, a timestamp burn-in in the bottom-left corner that ticks every second with a *plausible but wrong* date. A 1px vignette and a barely-visible CRT curvature shadow hug the edges. Everything else sits *over* this.

**HUD furniture, anchored to corners and edges — never centered:**

- **Top-left:** the station ident — `UNDERDARK.WEBCAM` in condensed mono, a tiny pulsing `● REC` dot, and a "signal strength" glyph that flickers between 2 and 3 bars. Below it, drift-down, the section nav rendered as channel buttons: `LIVE / ARCHIVE / THE SHELF / LOG / ABOUT`.
- **Top-right:** environmental telemetry stack — humidity, air temp (a stable cold 9°C), "lumens detected" (a number that creeps when a blob passes), depth estimate (`−?,??? m`, deliberately corrupted). Each is a label-colon-value mono row, right-aligned, with a hairline rule between.
- **Bottom-left:** the burn-in timestamp + a frame counter.
- **Bottom-right:** "viewers: 1" — always 1, you, alone — and a mute/unmute speaker icon for the (fake) ambient drip audio.
- **The Shelf** lives as a **right-edge drawer**: a vertical strip of "collected objects" thumbnails (an amber bead, a quartz shard, a beetle elytron, a coin, a tooth) that slides out on hover into a goblin's display case — uneven shelves, hand-written labels, each object on its own little plinth.
- **Content sections** (Archive, Log, About) don't replace the feed — they slide *up* over it as **semi-translucent dark panels** (`backdrop` darkened, not blurred — this is goblincore, not glassmorphism; the panel is more like greased glass smeared with cave-mud, a `rgba(11,14,10,0.82)` over a subtle noise texture). The feed keeps running behind every panel; you can always see the dark breathing.

No hero. No CTA band. No pricing. No stat-grid. The "stats" that exist are diegetic telemetry, wrong on purpose, and they are atmosphere, not metrics.

## Typography and Palette

**Typefaces (Google Fonts only):**

- **Sometype Mono** — the HUD face. All telemetry, timestamps, nav channel buttons, the station ident, the frame counter. Weight 400–500. Set tight, uppercase for labels, with `font-variant-numeric: tabular-nums` so the ticking numbers don't jitter. This is the "camera firmware" voice — slightly humane, not a cold pure DIN, because goblins touched it.
- **Fraunces** — the goblincore voice, used in its *soft, slightly weird optical-size* register (opsz low, "wonk" axis on, weight 300–500, italic for asides). Used only for: the running narration log ("Day 4: the white thing came back. It likes the corner."), the Shelf object labels, the About prose, and any pull-quote. Fraunces' soft serifs + wonky italics read as *handwritten field notes in a damp notebook* without being a literal handwriting font.
- **Big Shoulders Stencil Display** — used *sparingly*, large, for the single section title that crowns each slide-up panel (`ARCHIVE`, `THE SHELF`, `THE LOG`). Stencil because it reads like spray-paint stencilled onto cave rock or onto a piece of equipment, and it's heavy enough to anchor the panel against the moving feed behind it.

**Palette — `dark-neon` cave-bioluminescence, not the usual warm gradient:**

- `#0B0E0A` — **cave black**, the feed plate, almost-but-not-quite pure black, with a green undertone (like the inside of an eyelid in a dark room).
- `#11160F` — **damp stone**, panel fill before the noise/alpha, slightly lifted.
- `#7FE3A1` — **fox-fire green**, the primary bioluminescent glow — fungus light, the `REC` dot's healthy state, active nav channel, link hover. Used as light, often with a soft `box-shadow` halo, never as a flat fill block.
- `#E89B3B` — **glow-worm amber**, the secondary light — the timestamp burn-in, the Shelf's amber bead, "lumens detected" when it spikes, warm accents on collected objects.
- `#C8C2B0` — **bone / lichen white**, the default text color over the feed — a desaturated warm grey-white, the color of pale things underground, never `#fff`.
- `#5A6B57` — **moss grey-green**, hairline rules, inactive UI, secondary telemetry, the "signal" bars when weak.
- `#7A2A2A` — **rust red**, danger/anomaly state: when *something* enters frame, the `REC` dot, the vignette edge, and one telemetry row flush to this for a few seconds, then settle.

Contrast is high where it matters (bone text on cave black) and deliberately murky where the mood wants it (moss-grey rules nearly vanishing into stone).

## Imagery and Motifs

**Primary imagery is generative, not photographic** — which is itself a differentiator in an archive where 98% of designs reach for photography. The "feed" is a `<canvas>` composition:

- **Bioluminescent blobs** — 4–7 soft radial-gradient orbs in fox-fire green and glow-worm amber, drifting on slow Perlin noise paths, occasionally clustering (a "bloom") then dispersing. Each leaves a faint persistence trail.
- **Drip particles** — rare single bright pixels that fall, with a tiny ripple ring where they "land" at the bottom edge.
- **Scanline + grain** — a 1px horizontal band slowly scrolling top-to-bottom, plus animated film grain at ~6% opacity. The grain is the goblincore "texture hoard" rendered in motion.
- **The visitor** — every ~40–90 seconds, a dark shape with 2–4 faint glints (eyes) drifts in from one edge, pauses, and leaves. It is never fully resolved. When it appears, the HUD flips to its rust-red anomaly state and the "lumens detected" number drops.

**Iconography** is a small custom set of **goblin-hoard objects + camera-firmware glyphs**, all line-drawn at 1.5px in lichen-white or moss-grey: amber bead, quartz shard, beetle elytron, bent coin, single tooth, snail shell, rusted key, glass marble (the Shelf set); plus REC dot, signal bars, mute speaker, frame-corner brackets `⌐ ¬`, focus reticle, IR-mode toggle (the firmware set). No emoji. No stock icons.

**Decorative motifs:** corner crop-marks framing every panel and the viewport itself (`bubble-playful` energy from the Shelf objects offsetting the cold brackets); hand-scrawled underlines under Fraunces headings, drawn live as SVG paths; a thin "tape strip" texture where the Shelf labels are stuck on, slightly rotated, peeling at one corner.

## Prompts for Implementation

Build as a **single self-contained HTML document** — one `<style>` block, one `<script>`, a Google Fonts `<link>` for Sometype Mono / Fraunces / Big Shoulders Stencil Display. No framework, no build step. Target under ~70KB before fonts. The whole thing should *feel* like a webpage that has been quietly running, unattended, for a long time.

**The spine is "watching, not browsing."** The default state is just the feed + HUD. There is no scroll on the landing state — the feed fills the viewport and you sit with it. The "narrative" emerges by *waiting*: the timestamp ticks, telemetry drifts, and eventually the visitor passes through frame. Reward patience. The site is a `parallax-storytelling` experience where the "scroll" is replaced by *time* and *attention*.

**Interactions (pick from underused patterns; the archive overuses cursor-follow/parallax/spring — use them lightly and in-character):**

- **`scroll-triggered` reveal of panels:** clicking a nav channel slides the corresponding dark panel *up* over the feed with a slightly elastic settle (`bounce-enter`, used here as a panel that "drops into the slot" like a tape). Closing slides it back down. The feed never stops behind it.
- **The Shelf drawer:** `slide-reveal` from the right edge on hover/focus; each object inside does a tiny `tilt-3d` on hover as if you picked it up to the light, with its amber/quartz catching a `box-shadow` glint.
- **Telemetry:** `counter-animate` on the "lumens detected" value whenever a blob passes near the (virtual) lens; `pulse-attention` on the REC dot; the whole HUD does a brief `shake-error`-style 3px jitter + flip-to-rust when the visitor enters frame, then a slow `fade-reveal` back to green calm.
- **Headings:** `path-draw-svg` hand-scrawled underline that draws itself when a panel opens (`underline-draw`).
- **Cursor:** when the pointer is over the feed (not a panel), a faint focus reticle follows it — *lazily*, with heavy easing, like an old PTZ camera trying to track — and the nearest bioluminescent blob brightens slightly. This is the only cursor-follow, and it's deliberately sluggish.
- **Audio (optional, off by default, behind the bottom-right speaker toggle):** a loopable ambient bed — drip echo, low cave hum, occasional distant *tick*. Web Audio API, generated/looped, no large asset.

**Copy voice:** the Log panel is first-person field notes in Fraunces italic, dated with wrong timestamps, affectionate and a little unsettled. The About panel explains, deadpan, that this is a webcam, that it has been here a while, that the operator is "away," and that you are welcome to keep watching. The telemetry is terse all-caps mono. Never break character; never explain the joke.

**Reduced-motion:** if `prefers-reduced-motion`, freeze the blobs to a static glow, stop the scanline, keep the timestamp ticking, and let the visitor "appear" only on a panel interaction rather than on a timer.

**AVOID:** marketing CTA bands, pricing tiers, testimonial carousels, stat-grids, glassmorphic frosted cards (the panels are *mud-smeared*, not frosted), bright pure-white text, warm sunset gradients, hand-drawn doodle-everywhere maximalism. The chaos here is *hoarded and contained*, not splattered.

## Uniqueness Notes

Differentiators this design commits to — other CMassC sites should not duplicate these:

1. **The diegetic webcam framing.** The site *is* a camera viewer interface for a fictional 24/7 feed; "content" is telemetry, a clip archive, and a goblin's collected-objects shelf — not pages, not products. The narrative is delivered through *waiting* (a timed visitor event), not scrolling. No other site in the corpus is a fake livestream portal.
2. **`hud-overlay` + `full-bleed` generative feed.** `hud-overlay` sits at 2% in the frequency analysis; combining it with a full-screen generative bioluminescent `<canvas>` (rather than the archive-default photography, 98%) and never letting that feed stop — even behind content panels — is a structure no other design here uses.
3. **Goblincore (2%) pressed against dark-mode surveillance UI.** Earthy chitin-and-amber hoard aesthetics on top of cold 2003 IP-camera firmware chrome — mud-smeared panels instead of glassmorphism (85%), bone-white instead of pure white, wrong-on-purpose timestamps. The "stats" are atmosphere, not metrics.
4. **Restrained-motion in-character animation.** Deliberately *sluggish* cursor reticle (anti-pattern vs. the 89% cursor-follow norm), a panel that "drops into a tape slot," a HUD that flips to rust-red anomaly state — animations chosen from underused patterns (`hud`-style jitter, `slide-reveal`, `tilt-3d` on hoard objects, `counter-animate` on fake lumens) and motivated by the fiction, not by polish.
5. **Stencil + wonky-Fraunces + humane-mono typographic trio** — Big Shoulders Stencil Display as spray-stencilled equipment labels, Fraunces (low opsz, wonk axis, italic) as damp-notebook field notes, Sometype Mono as the only-slightly-human firmware voice. Not the mono+humanist default of the archive.

Chosen seed/style: **`goblincore earthy chaos shop`** — interpreted as `aesthetic: goblincore + dark-mode, layout: hud-overlay + full-bleed, typography: tech-mono + serif-revival + bebas-bold (stencil), palette: dark-neon, patterns: slide-reveal + tilt-3d + counter-animate, imagery: generative-art, motifs: candle-atmospheric (bioluminescent), tone: mysterious-moody + grounded-earthy`.

Avoided overused patterns from frequency analysis: photography imagery (98%), glassmorphism aesthetic (85%), warm/gradient palette (98%/93%), card-grid layout (93%), centered layout (79%), aggressive cursor-follow (89%), hand-drawn maximalism (95%), CTA/pricing/stat-grid blocks.
<!-- DESIGN STAMP
  timestamp: 2026-05-11T09:23:01
  seed: jitter,
  aesthetic: underdark.webcam is a **goblincore monitoring station** — the public web face of...
  content_hash: 2dff6601b995
-->
