# Design Language for tsundere.studio

## Aesthetics and Tone

tsundere.studio is the portfolio site of a design studio that *refuses to flatter you* — and then, three scroll-lengths in, quietly admits it cares. The whole site is built around the **tsundere structural contradiction**: a hard, almost rude exterior shell (raw neubrutalism — black borders, brutal grids, shouting display type, error-red accents, a homepage that opens with the literal words **"Don't get the wrong idea."**) that progressively *cracks open* to reveal a soft, blush-warm, hand-set interior the further down you read. It is not a gimmick layered on top; it is the navigation logic, the color logic, and the type logic all at once.

The mood: think a vending machine that insults you, then gives you an extra can. A brutalist concrete stairwell with a hand-knitted blanket folded at the bottom step. The exterior is **cold high-contrast neubrutalism** — uncompromising, slightly hostile, deliberately under-designed in the "I didn't try" way. The interior — earned only by scrolling, never by clicking a "warm mode" button — is **honeyed, pastel, slightly shy**: cream paper, dusty rose, soft drop-shadows replacing hard ones, the type loosening from screaming caps to a gentle humanist whisper. The site's personality literally softens as it trusts you.

This is **edgy-rebellious tone resolving into warm-inviting tone** — a single emotional arc, not a palette swatch. No part of the site is neutral or "professional-calm." It is either prickly or fond; the journey is the point.

## Layout Motifs and Structure

A **split-screen spine that physically tilts as you descend.** The page is divided into a LEFT column (the "armor" — black-bordered brutalist blocks, system-font labels, hard 0px-radius rectangles, hairline-thin 1px rules that read as *cheavy*) and a RIGHT column (the "honesty" — warm cream cards, soft 16px radii, blushy fills, looser leading). At the top of the page the split is **95% armor / 5% honesty** — the right column is a thin sliver. As you scroll, the divider **migrates rightward in discrete, ratchet-like steps** (95/5 → 70/30 → 50/50 → 30/70 → 8/92), so the armor literally shrinks panel by panel and the warm side takes over the viewport by the end. Each ratchet step is a "section."

Sections, top to bottom:

1. **THE BRUSH-OFF** — full-bleed black, left-aligned, "Don't get the wrong idea." set in screaming condensed caps. The 5% right sliver shows a single cropped pixel of warm peach — a hint you're not even supposed to notice yet.
2. **WHAT THIS IS (RELUCTANTLY)** — the studio's actual description, but written grudgingly: short jabby sentences, em-dashes used like eye-rolls. Armor blocks dominate; the warm sliver widens to ~30% and shows the first soft card peeking from behind a brutalist block, as if hidden there.
3. **WORK (FINE, LOOK AT IT)** — the project showcase, presented as a 50/50 split: left side lists projects in cold mono labels (`PROJECT_01 / ROLE: EVERYTHING / YEAR: WHATEVER`), right side reveals each project's image on hover *with a soft blushy glow* the cold side never gets.
4. **THE QUIET PART** — split flips to 30/70 warm. The studio admits what it actually loves about the work. Type is now warm humanist, hard borders gone, replaced by feathered shadows. The leftover 30% armor strip is now just a thin black margin rule — vestigial, like the tsundere forgot to keep their guard up.
5. **OKAY, FINE — HELLO.** — 8/92 warm. Almost entirely the soft interior: cream field, a single warm hand-set line ("...you can come back if you want.") and a contact line presented plainly, no shouting. The 8% black strip on the left has shrunk to a single vertical hairline — the last sliver of armor, retained out of habit.

No top nav bar in the conventional sense — instead a **left-edge "tsun/dere meter"**: a vertical gauge, all the way up the page, that fills from cold-grey (top) to blush (bottom) as you scroll, with a tiny blinking marker. It IS the progress bar AND the emotional state indicator. Clicking it scrolls. There is no hamburger, no mega-menu, no sticky CTA, no footer link soup — the contact info appears once, at the bottom, when the site has finally decided you're worth it.

## Typography and Palette

**Type system — all Google Fonts:**

- **Armor display face:** **Anton** — a single-weight, ultra-condensed, ultra-heavy grotesque. Used for the hostile headlines: "DON'T GET THE WRONG IDEA.", section numbers, the brush-off. Set in ALL CAPS, tight `letter-spacing: -0.01em`, line-height crushed to `0.92`. Anton is the visual equivalent of a slammed door.
- **Armor label / mono face:** **Space Mono** — for the cold metadata, project labels, the tsun-meter readouts, timestamps, `ERROR:` style asides. Uppercase, `letter-spacing: 0.08em`. Reads like a terminal that's annoyed with you.
- **Interior warm face:** **Fraunces** (variable, optical sizes, soft italics available) — the studio's true voice. Used for everything in the warm sections: the confessions, "...you can come back if you want.", the gentle body copy. Set at relaxed `line-height: 1.6`, generous size, occasional soft italic for the most vulnerable lines. Fraunces has a wobbly, almost embarrassed warmth — old-style serif curves with a wonky personality. It is the blush made into letterforms.
- **Body utility (warm side, small text):** **Newsreader** for captions and small running text in the interior — a quiet, readable companion to Fraunces.

The type *transforms* down the page: caps → mixed case, condensed → optical-normal, heavy → light-italic, tight → loose. Same content, softening voice.

**Palette:**

Armor (cold exterior):
- `#0B0B0B` — near-black, the armor ground and border ink
- `#F2F2EF` — bone white, armor panel fill (slightly grubby, not pure white)
- `#E63329` — alarm red, the only accent on the cold side ("DON'T", error labels, the warning sliver) — aggressive, deliberately abrasive
- `#9A9A93` — dead grey, the cold half of the tsun-meter and disabled-looking labels

Interior (warm reveal):
- `#FBEFE3` — warm cream, the interior ground
- `#E9B7A8` — dusty rose / blush, soft fills and the warm half of the meter
- `#C7836E` — terracotta, the warm accent (links, the "...come back" line, hover glows)
- `#7A4A3A` — cocoa brown, warm body text ink (never pure black on the warm side — that would be too harsh)

The two sets never blend into a gradient — they meet at **hard vertical seams** that walk rightward. The drama is the *collision* of cold and warm, not their fusion.

## Imagery and Motifs

- **The crack motif:** thin jagged white "crack" lines (SVG paths) that appear across the big black armor blocks, more of them lower down the page — the facade visibly fissuring. By section 4, light (warm cream) leaks through the cracks.
- **Hidden warmth peeking:** in the early sections, fragments of the soft interior (a rounded card corner, a blush swatch, a curl of Fraunces italic) literally poke out from *behind* brutalist blocks — like the tsundere accidentally let something show, then "didn't mean to."
- **The tsun/dere meter:** left-edge vertical SVG gauge — a cold-grey-to-blush vertical bar with tick marks, a small `▮` marker, and tiny labels `[ TSUN ]` at top, `[ DERE ]` at bottom. It animates with scroll.
- **Brutalist UI honesty:** raw `<button>`-looking blocks with visible 2px black borders and a 4px hard offset-shadow on the cold side — that *same* component, in the warm sections, has the border removed and the hard shadow replaced by a 24px-blur soft blush shadow. Same skeleton, different temperament.
- **Project images:** presented stark and slightly desaturated on first paint (cold), then on hover/focus they regain full warm saturation and gain a soft `box-shadow` bloom in terracotta — the work "warming up" when you pay attention.
- **Punctuation as expression:** oversized em-dashes, ellipses, and a recurring "—!" mark rendered large in Anton, used like the tsundere's exclamation/stammer. The blinking text cursor `▮` reused as a held-breath beat between hostile and soft lines.
- **No photography of people, no logos wall, no stock smiles.** The only "faces" are typographic.

## Prompts for Implementation

Build tsundere.studio as a **single HTML page, one CSS file, one vanilla ES module** — no framework, no build step. The entire experience is one vertical scroll with a left-edge meter. The core mechanic to nail: **the split-divider position is driven by scroll progress and moves in 5 discrete ratchet steps**, and the *visual language of both columns transitions* (type, color, border-radius, shadow) as the divider moves.

Implementation notes:

- **The seam:** use a CSS custom property `--armor-width` (e.g. `95vw → 8vw`) updated on scroll via `IntersectionObserver` per section (not continuous `scroll` event jitter — snap between section thresholds with a `cubic-bezier(0.65, 0, 0.1, 1)` ~700ms ease so it *ratchets*). Left column `width: var(--armor-width)`; right column fills the rest.
- **The transition variables:** also drive `--radius` (`0px → 16px`), `--shadow` (hard `4px 4px 0 #0B0B0B` → soft `0 24px 48px rgba(199,131,110,.35)`), `--ink` (`#0B0B0B → #7A4A3A`), `--ground-warm-opacity`. Components read these so the *same* card markup hardens at top, softens at bottom.
- **Type morphing:** headlines start as Anton, all-caps, `letter-spacing:-0.01em`, `line-height:.92`; by section 4 the headline class swaps to Fraunces, mixed-case, italic, `line-height:1.4`. Animate `letter-spacing` and `font-stretch`/optical size where possible for an in-between "loosening" feel.
- **The tsun/dere meter:** fixed left, full-height SVG. A `<rect>` clip-path or gradient stop position tied to `scrollProgress` (0→1) interpolates fill from `#9A9A93` to `#E9B7A8`. A small marker translates down. Labels `TSUN` / `DERE` in Space Mono, tiny. Clicking a position smooth-scrolls there.
- **The cracks:** absolutely-positioned inline SVGs over the black blocks; use `stroke-dashoffset` path-draw on scroll-trigger so cracks *spread* as you descend. In section 4+, place a warm-cream-filled shape *behind* the cracked block so light leaks through.
- **Peeking warmth:** in sections 1–2, position soft warm cards/swatches with negative margins / `z-index` *behind* brutalist blocks so only an edge shows; on scroll-reveal let them nudge out ~8px then settle, with a tiny `transform` overshoot (the "tsk, fine" gesture).
- **Hover behavior on work items:** desaturated `filter: saturate(.4) contrast(1.1)` by default; on `:hover`/`:focus-within`, transition to `saturate(1)` plus a terracotta `box-shadow` bloom over ~400ms. The cold mono label beside it stays cold — only the *image* warms.
- **Copy voice:** hostile-then-fond. Section headers: "DON'T GET THE WRONG IDEA." / "WHAT THIS IS (RELUCTANTLY)" / "WORK — FINE, LOOK AT IT" / "the quiet part" / "okay, fine — hello." Microcopy uses em-dash eye-rolls, ellipses, and a held `▮` cursor between a barb and a confession.
- **Reduced motion:** if `prefers-reduced-motion`, drop the ratchet animation to instant section snaps and disable crack-draw/peek-overshoot, but KEEP the cold→warm color and type-face transitions (they carry the story).
- **AVOID:** pricing tables, stat grids ("200+ projects"), testimonial carousels, sticky "Hire us" CTAs, logo walls, hero-with-centered-button, newsletter modals, cookie banners. The contact line appears exactly once, plainly, in the final warm section — the site only "asks" once it's stopped pretending it doesn't care.

The site should feel like it's *withholding* at the top and *unable to hold it in* by the bottom — a 70-second emotional thaw rendered entirely in layout, type, and color.

## Uniqueness Notes

Differentiators from other designs in this codebase:

1. **The split-divider is the narrative engine, not decoration.** Across the corpus, split-screen is rare (~3%) and when used it's static. Here the seam *physically ratchets across the viewport in 5 steps* and the visual grammar of both halves morphs with it — neubrutalism on the left literally shrinking and bleeding warmth on the right. The layout *is* the story arc.
2. **Two complete, opposed design systems on one page that don't blend.** Most sites pick a vibe. This one runs cold high-contrast neubrutalism (Anton, `#0B0B0B`/`#E63329`, 0px radius, hard offset-shadows) AND honeyed warm-serif softness (Fraunces, `#FBEFE3`/`#C7836E`, 16px radius, blush blooms) — colliding at hard seams. The reader earns the warm system by scrolling; it's never a toggle.
3. **Personality-as-architecture: the "tsundere" emotional contradiction drives type-morphing, color migration, the meter, and the copy voice simultaneously.** Not a theme bolted on — the harsh-to-fond arc is encoded in `--armor-width`, the type-face swap, the cold→warm CSS variables, and the left-edge tsun/dere gauge all moving together.
4. **The tsun/dere meter replaces both the nav and the progress bar** with a single emotional-state gauge — no hamburger, no sticky nav, no footer soup. Contact info appears exactly once, at the very bottom, "reluctantly."
5. **Deliberately anti-CTA, anti-stat, anti-flattery** — opens by telling the visitor not to get the wrong idea, withholds warmth, and only "asks" at the end. Inverts the entire conversion-funnel grammar that dominates the corpus.

Chosen seed/style: custom composite — *aesthetic: neubrutalism (cold) → warm-serif soft reveal; layout: split-screen (ratcheting divider); typography: bebas-bold/condensed-display (Anton) morphing to serif-revival (Fraunces); palette: high-contrast cold (#0B0B0B/#E63329) colliding with honeyed-neutral warm (#FBEFE3/#C7836E); patterns: scroll-triggered + path-draw-svg + spring overshoot; imagery: minimal/typographic + crack-line SVG; motifs: sharp-angles cracking open; tone: edgy-rebellious resolving into warm-inviting.*

Avoided patterns from frequency analysis: no hand-drawn (94%), no glassmorphism (85%), no card-grid as primary layout (93%), no photography of people (98%), no cursor-follow/parallax-heavy treatment (88–89%), no warm-only or gradient-blend palette (98%/93%) — the warm here is *withheld and earned*, not the default, and the two palettes meet at hard seams, never gradients.
<!-- DESIGN STAMP
  timestamp: 2026-05-11T08:55:12
  domain: tsundere.studio
  seed: custom composite
  aesthetic: tsundere.studio is the portfolio site of a design studio that *refuses to flatte...
  content_hash: 0803e5d2c088
-->
