# Design Language for tsundere.bar

## Aesthetics and Tone

tsundere.bar is a **neubrutalist after-hours bar that cannot admit it likes you.** The entire site is built around the *tsundere* trope — 「ツンデレ」, the character who is all spiky deflection and folded arms on the outside (*tsun-tsun*) but quietly, helplessly soft on the inside (*dere-dere*) — and the design treats that contradiction as a literal **two-state machine**, not a mood board.

State one, the **TSUN face**, is what you land on: harsh, over-saturated, defensive. Thick 4px black outlines on everything. Hard offset drop-shadows that look stamped, not blurred. A wall of clattering, slightly-too-large monospace type that says things like `IT'S NOT LIKE I BUILT THIS BAR FOR YOU OR ANYTHING` and `WE'RE NOT EVEN OPEN. (we're open.)`. The cursor is treated like an intruder — boxes flinch away from it, labels snap into place a beat too late, a little `// don't look at me like that` mutters in the corner. It is loud, geometric, almost rude. Classic raw-edges neubrutalism: ugly-on-purpose, system-font-energy, no gradients allowed in this state, everything a flat field of cream and ink and one scream of red.

State two, the **DERE face**, is what the bar actually is once you stay a while (scroll past 60%, or hover-hold any panel for ~900ms): the harsh red drains to a warm amber lamp-glow, the black outlines soften to a deep cocoa brown, the hard stamped shadows go diffuse and warm like candlelight on a counter, the monospace shouting relaxes into a humanist serif murmur, and the copy quietly changes underneath you — `IT'S NOT LIKE I BUILT THIS BAR FOR YOU` re-sets, letter by letter, into `...okay. fine. i kept your seat warm.` The whole page is one long confession it keeps almost taking back. **The contradiction is the structure.** Tone: edgy-rebellious on the surface, warm-inviting underneath, and the *transition between the two* is the entire emotional payload of the page.

## Layout Motifs and Structure

The skeleton is a deliberate **broken-grid neubrutalist stack** — a single column of big, blocky, slightly-misaligned panels that look like cork-board flyers nailed up by someone who pretends not to care. Only ~12% of the corpus uses broken-grid and ~1% uses neubrutalism, so this is open territory.

**The panels, top to bottom — read as one escalating non-apology:**

- **Panel 0 — "THE DOOR (slammed)":** Full-bleed. An oversized lowercase wordmark `tsundere.bar` set in a heavy condensed display face, sitting inside a 4px-outlined box that is rotated exactly **-3°** and clipped at the right edge so it reads as a flyer half-torn off the wall. Beneath it, a monospace sub-line that cycles every few seconds through tsun-mode taglines via a typewriter-effect. A single ❌-shaped "CLOSED" sticker covers part of the wordmark — clicking it peels it off (path-draw-svg curl) to reveal a tiny `(...we're open. obviously.)` underneath. No nav bar. The only nav is a stack of underline-draw links jammed in the bottom-left at a 2° tilt: `the bar` / `the drinks` / `the regulars` / `how to get me to talk`.
- **Panel 1 — "WHAT THIS IS (it's nothing)":** Two unequal blocks side by side, the left one wider and shoved 24px lower than the right so the grid visibly *fails to line up*. Left block: a defensive paragraph in mono. Right block: the same paragraph already half-faded into serif, as if it's leaking the truth. A magnetic ❌ button labeled `nevermind` sits between them; if you chase it, the serif version wins and stays.
- **Panel 2 — "THE BAR" (the room):** A flat, near-isometric line drawing of a tiny bar interior — one counter, three stools, a hanging lamp, a register — rendered entirely in 4px strokes, no fill. Each object is a hover target. Hover the lamp: the whole panel's `--warmth` ticks up and a hard shadow under the counter goes soft. Hover a stool: a speech-box appears — `that one's taken. ...no one's sitting there. it's just taken, okay.`
- **Panel 3 — "THE DRINKS" (the menu, grudgingly):** A broken masonry of outlined menu cards, each rotated ±2–4°, each with a stamped offset shadow. Card fronts are tsun (`"WHATEVER YOU WANT." — ¥whatever`); card-flip on click reveals dere (`...i remembered you don't like it too sweet. so. less syrup.`). Drink names are real-ish bar-menu poetry: *the cold shoulder* (a frozen negroni), *fine. ☆* (a sweet thing it denies making sweet), *not a date special* (two glasses, one bill).
- **Panel 4 — "THE REGULARS":** A row of blunt outlined "polaroid" boxes pinned at angles — but the photos are just flat color fields with mono captions: `you`, `you again`, `you (pretending it's the first time)`. Stagger-reveal on scroll. The last frame is empty with a dotted outline and the caption `(your seat)`.
- **Panel 5 — "HOW TO GET ME TO TALK":** The dere panel. By the time you reach it the page has fully crossed over: warm amber field, cocoa outlines, soft candle shadows, serif body. A long, low text block — no boxes, no shadows, just words — that finally drops the act: `look. i'm bad at this. but the lamp's on. and the seat's warm. and if you tell anyone i said that, we're done.` Below it, the only un-ironic element on the page: a single soft-outlined button, `pull up a stool`, that does nothing but glow warmer when you hover it.
- **Panel 6 — "LAST CALL" (footer):** Snaps *back* to tsun — hard outlines, cold red, mono — and says `WE'RE CLOSING. ...you can stay till you finish that, i guess.` A faint dotted line to a colophon: `built by someone who will deny building it · tsundere.bar`.

A persistent **TSUN ⇄ DERE toggle** lives pinned bottom-right inside a 4px box: a hard switch the visitor can flip manually to override the scroll-state, because forcing the bar to be honest is half the fun. Default is TSUN. The switch handle overshoots (elastic) and the label flickers between `tsun` and `...dere` before settling.

## Typography and Palette

**Typefaces (Google Fonts only — all real, all on Google Fonts):**

- **Archivo Black** — the heavy condensed-feeling display face for the `tsundere.bar` wordmark, panel headers, and the big tsun-mode shouting. Tight, blunt, immovable; set in lowercase for the wordmark, ALL-CAPS for headers, generous negative letter-spacing so it reads as a slammed-down block.
- **JetBrains Mono** — the **tech-mono** voice of the *tsun* state: all defensive copy, taglines, card fronts, captions, the toggle label, the colophon. Slightly oversized, line-height a touch loose so it clatters. This is the armor.
- **Spectral** — a warm, literary **serif-revival** face for the *dere* state: the confession paragraphs, the flipped card backs, the candle-lit footer line. When a block crosses from tsun to dere, the text doesn't just fade — it re-typesets glyph by glyph from JetBrains Mono into Spectral. This is the inside.

**Palette — high-contrast duotone that physically warms (only ~11% of the corpus is duotone, ~28% high-contrast, and almost none animate the swap):**

TSUN state:
- `--paper` `#F4EFE4` — a flat, slightly sour cream. The wall the flyers are pinned to.
- `--ink` `#15110D` — near-black, used for every 4px outline, every stamped shadow, all tsun text.
- `--tsun` `#E03A2F` — a loud, blunt vermilion. The ONE accent in tsun mode: the ❌ stickers, the active underline, the toggle's "tsun" side, the angry highlights. Used like a slap.
- `--tsun-shadow` `#15110D` — hard offset shadows are pure ink, no alpha, no blur (`6px 6px 0`).

DERE state (cross-faded via CSS custom properties):
- `--paper` warms to `#F6E8CF` — candlelit cream.
- `--ink` softens to `#3B2A1C` — deep cocoa brown; outlines thin perceptually and gain a faint inner glow.
- `--dere` `#E8A23D` — warm amber lamp-glow, replaces the vermilion as the single accent (the `pull up a stool` button, the warm underline, the soft highlights).
- `--dere-glow` `rgba(232,162,61,0.35)` — diffuse warm shadow that *replaces* the hard offset shadow during the transition.
- `--blush` `#D98C7A` — a muted dusty rose that only ever appears on the very last dere panel, on the word that gives the game away (`warm`). It's the actual blush. Used exactly once.

The signature move: `--mood` is a single 0→1 CSS variable driven by scroll progress + hover-hold + the manual toggle, and every color above is a `color-mix()` interpolation keyed to it. The page has no discrete "themes" — it's one continuous slide from armor to honesty.

## Imagery and Motifs

**Primary imagery: flat line-illustration (~17% of corpus) — everything drawn in uniform 4px outlined strokes, zero fill, like bar coasters doodled on with a marker.** The bar interior, the stools, the hanging lamp, the register, the menu glasses, the "polaroid" frames: all the same blunt, confident, slightly-wobbly hand. In tsun state strokes are pure `--ink` and dead straight; as `--mood` rises the strokes inherit `--ink`'s warming and pick up a 0.5px hand-drawn wobble (subtle `feTurbulence` displacement), as if the bar relaxes its posture.

**Recurring motifs:**

- **The folded-arms ❌:** A bold X — torn-sticker, button, the "CLOSED" sign, the `nevermind` button, the toggle's tsun-side glyph. It's the trope's body language. Peeling, flicking, or chasing an ❌ always reveals a softer truth beneath it (path-draw-svg curl).
- **The misaligned flyer:** Every panel and card is a 4px-outlined box rotated 2–4° with a hard stamped shadow — pinned-up notices by someone who insists they didn't fuss over the layout. On hover they *don't* straighten (that would be admitting effort); they flinch slightly the *other* way.
- **The hanging lamp:** The single warmth source. It appears as a literal drawn lamp in Panel 2 and as a glow-origin everywhere else. Proximity to "the lamp" (cursor, scroll-depth) is what drives `--mood` upward. The lamp never turns off — even in the tsun footer it's drawn lit, just ignored.
- **The empty stool / the kept seat:** A dotted-outline box captioned `(your seat)` that recurs — in the regulars row, near the dere button. It's the dere-dere admitted in negative space.
- **Strikethrough that doesn't commit:** Tsun copy frequently strikes a word and replaces it badly — `WE'RE ~~CLOSED~~ ...open` — the underline-draw animation drawing the strike, then a half-second later a second line crossing out the strike itself.

No photography. No icon sets. No gradients in tsun state. No stat grids. The only "data viz" is a tiny mood-meter built into the toggle box — a 4px-outlined bar that fills from vermilion to amber as `--mood` rises, labeled `tsun ▓▓▓░░░ dere`.

## Prompts for Implementation

Build as a **single self-contained HTML document** — one `<style>` block, one small `<script>`, one Google Fonts `<link>` (Archivo Black, JetBrains Mono, Spectral). No framework, no build step. Target ~70KB before fonts. Everything works as one long vertical scroll plus a manual toggle.

**The storytelling spine — "talking to someone who likes you and won't say it":**

The page IS the conversation. Drive **one master variable `--mood` (0 = full tsun, 1 = full dere)** from three inputs, take the max:
1. **Scroll progress** — maps 0→1 across the page, but eased so it stays near 0 through Panels 0–2, climbs through 3–4, and is fully 1 by Panel 5.
2. **Hover-hold** — holding the cursor still inside any panel for ~900ms locally nudges that panel's `--mood` upward (it "warms to you") and slowly decays when you leave. Frantic cursor movement does nothing — the bar only opens up if you *stay*.
3. **The manual TSUN⇄DERE switch** — hard-overrides to 0 or 1 with a spring/elastic settle; flipping it to dere makes the bar visibly *uncomfortable* (a one-shot shake on the nearest panel) before it complies.

Everything visual is a function of `--mood`:
- All colors via `color-mix(in oklab, var(--tsun-set) calc((1 - var(--mood)) * 100%), var(--dere-set))`.
- Box shadows interpolate from `6px 6px 0 var(--ink)` (hard) to `0 12px 40px var(--dere-glow)` (soft) — animate `box-shadow` plus a pseudo-element cross-fade so it doesn't pop.
- Outline width eases 4px → 2px; border-radius eases 0 → 10px (the bar literally softens its edges).
- Body text: render tsun copy in JetBrains Mono and dere copy in Spectral; as a block crosses `--mood` ≈ 0.5 it does a **glyph-by-glyph re-typeset** — wrap each word in a span, on crossover swap font-family with a tiny stagger and a 1-frame blur, and *swap the text content* from the tsun line to the dere line (data attributes hold both). The confession writes itself.
- Page rotation: at `--mood` 0, panels sit at their ±2–4° tilts; as mood rises they ease toward 0° (the bar stops performing nonchalance).

**Motion vocabulary:** typewriter-effect for cycling tsun taglines; underline-draw for the nav and the "strikethrough that doesn't commit"; path-draw-svg for peeling stickers and the line-drawn lamp/bar coming alive; card-flip for tsun→dere drink cards; magnetic + a *repelling* variant for the ❌ buttons (they dodge the cursor); stagger for the regulars row; spring/elastic for the toggle; one-shot shake when the bar is forced to be honest. Respect `prefers-reduced-motion`: keep the color/mood interpolation (it's the content), drop the dodging, shaking, and typewriter; show dere copy directly after a soft fade.

**Hero (Panel 0) opening beat:** Cold open on full tsun — sour cream wall, a slammed-down lowercase `tsundere.bar` in Archivo Black inside its torn -3° box, the vermilion `CLOSED` ❌ sticker over one corner, and the mono sub-line typing out `IT'S NOT LIKE I BUILT THIS BAR FOR YOU OR ANYTHING.` Three seconds later it backspaces `OR ANYTHING.` and types `...the lamp's on, though.` — and `--mood` ticks up just 0.05, just enough that the cream goes a hair warmer. The bar gave something away in the first ten seconds and will spend the rest of the page pretending it didn't.

**AVOID:** CTA-heavy layouts, pricing tables, hero→features→testimonials SaaS scaffolding, stat grids, glassmorphism, photography, hand-drawn-marker-everywhere cuteness. This is *blunt* on the outside on purpose. The warmth must be *earned* by scrolling, not handed over.

## Uniqueness Notes

Differentiators this design commits to (and that other CMassC sites should not duplicate):

1. **The site is a literal two-state emotional machine, not a theme.** A single `--mood` variable (0=tsun, 1=dere) interpolates *every* color, shadow, border-radius, rotation, and even the *font family and text content* — and it's driven by scroll depth + hover-*stillness* + a manual override switch. There's no "dark mode toggle" gimmick here; the contradiction at the heart of the tsundere trope IS the architecture. Nothing else in the corpus should be a continuous armor→honesty slide.
2. **Copy that rewrites itself glyph-by-glyph from monospace to serif.** As any text block crosses the mood midpoint, JetBrains Mono re-typesets word by word into Spectral *and the words themselves change* (defensive line → confession line, held in data attributes). The page literally takes back what it said. No other site uses re-typesetting-as-narrative.
3. **Repelling, not magnetic, interactions — and warmth you have to earn by staying still.** ❌ buttons dodge your cursor; panels flinch *away* from hover; the bar only "warms to you" if you hold the cursor still for ~900ms (frantic movement is ignored). It inverts the corpus-standard magnetic/cursor-follow flattery into deflection.
4. **Strict neubrutalism (1% of corpus) with a hard-shadow → candle-glow transition.** Pure flat fields, 4px ink outlines, stamped 6px-offset zero-blur shadows, system-font-energy mono — in the tsun state. The shadows *melt* into diffuse warm amber glow as mood rises. Almost no site animates the brutalist→soft transition.
5. **Duotone palette that physically warms (cream/ink/vermilion → candlelit-cream/cocoa/amber), with one single use of "blush" (#D98C7A) on exactly one word.** The blush appears once, on the word "warm," and never again.

Chosen seed/style: **neubrutalism raw edges blog + high contrast duotone brand** (maps to seeds.json "neubrutalism raw edges blog" and "high contrast duotone brand") — vocabulary: aesthetic: neubrutalism, layout: broken-grid, typography: tech-mono (+ serif-revival, display-bold), palette: duotone / high-contrast, patterns: typewriter-effect (+ card-flip, path-draw-svg, elastic, underline-draw), imagery: line-illustration, motifs: sharp-angles (+ candle-atmospheric), tone: edgy-rebellious (→ warm-inviting).

Avoided overused patterns from frequency analysis: no glassmorphism (85%), no hand-drawn aesthetic as primary (94%), no photography (98%), no card-grid (93%), no warm-everywhere palette default (98% — here warmth is the *destination*, withheld at first), no cursor-follow flattery / magnetic-as-attraction (89%/78% — inverted into repel), no centered-everything (80% — broken misaligned grid instead).
<!-- DESIGN STAMP
  timestamp: 2026-05-11T08:50:59
  domain: tsundere.bar
  seed: unspecified
  aesthetic: tsundere.bar is a **neubrutalist after-hours bar that cannot admit it likes you....
  content_hash: 1c0717ed25d3
-->
