Concept 01 · Postcards — "Mahjong, made portable"

Thesis

The homepage is a travelogue on a warm-white wall. Every section is a postcard from a place the cards have already been (the brand's own hand-fan series: beach, boat, Italy, Philadelphia, the kitchen table). The sweater is the first thing you pack, so it is the first postcard. The editions are destinations. Product details live on the backs of postcards (address side: vertical divider, dashed stamp box, ruled lines) in plain scannable type; photos live on the fronts. The page scrolls like the game night in the concepts doc: sit down, dress for it, set the table, pick your deck, cards not tiles, table talk, join the table. Each section carries a short sentence-case kicker naming that beat.

Type, colour, layout language

The single motion moment

On load the hero postcard stamps itself: the roundel lands (scale(1.8) rotate(-18deg)scale(1) rotate(-6deg), 500ms, slight overshoot) and the postmark inks in (opacity, 300ms, from 500ms). 800ms total, CSS keyframes, once. Under prefers-reduced-motion: reduce both animations are removed. Nothing else animates on scroll; hover transitions are 120ms; the ladder's rung buttons scroll the snap row (user-initiated, auto under reduced motion).

Section decisions

  1. Announcement bar: navy, two static messages, role="region" aria-label="Announcements". Stacked at 375px (bar + header ≈ 104px), one line on desktop.
  2. Header: real roundel (400px twin) + "Play Away" in Fredoka. Six nav items ≥1000px; search and cart (count 0); menu button on mobile. Sticky.
  3. Drawer: full screen, role="dialog", "Shop the sweater" postcard tile (lazy, loads only when opened), six items at 56px, close button, focus trap, Escape, focus restored, body scroll locked, auto-closes past 1000px.
  4. Hero: H1 "Mahjong, made portable." Copy first on mobile (H1, one line, button, text link) so the primary CTA sits at about 305–350px. Then a full-width postcard of the Green/Blush flat with a 76px paper band above the photo (100px on desktop) that carries the stamp and postmark, so nothing touches the collar or shoulder. The beach hand-fan postcard (30% wide, taped, tilted) sits over the bottom-right corner of the sweater card, below the hem and to the right of the caption (caption max-width:60%, beach card from 70%), so it covers neither product nor text. Desktop: copy left (5/12); sweater card 62% wide with the beach card beside it from 60%, overlapping only the paper margin. The sweater image is the only fetchpriority="high" image and is also preloaded.
  5. Shop by category: four straight postcards, 2×2 on mobile, 4 across on desktop: on-model storefront, boat hand-fan, two decks in a kraft gift box, racks with bag.
  6. Colorway wall (the bold spend): "One sweater, seven postcards." Seven straight postcards, each a real deep link /products/mahj-knit-sweater?variant=<id>. Flats for six, folded for Light Blue/White (the only image). Captions lead with the colour name (1.3rem Fredoka) with the travel line second at .8rem, muted. 2 columns on mobile with the seventh centred; 4 + 3 on desktop. "From $95 · Sizes S to XXL" and one CTA beneath.
  7. Complete your table: three postcard backs; Complete Set is default (2px navy border, real roundel stamp, "Most tables", scaled 1.04 on desktop). Cards only $62.95 · Complete Set $85 to $100 · Table Set $165 with struck $199.90 (hidden "was"). "What's in the box" lists on all three. Mobile: a three-cell price strip (all prices visible at once, tap to jump) above a snap row that lands on the Complete Set on load (instant scrollTo). Desktop: three columns.
  8. Choose your edition: Beach, Classic, Modern, Texas, Summit, open-tray series, 76vw with peek on mobile, five across on desktop, no arrows. Whole card is the link.
  9. Cards, not tiles: a real <table> on a postcard back with the five rows and a footnote; the three "Easy to…" benefits as H3 microcopy, no icons; then two Learn to play postcards with read times.
  10. Sent back from the table: six review postcard backs (data-placeholder="review") with stars (role="img"), a small postmark whose ring text is drawn from the quote, quote, name, product; three photo postcards (Italy, kitchen table, Philadelphia) interleaved. Two columns at 375px (postmark 66px, photo cards 4:5), three columns at 900px+. Aggregate "4.9 from 212 reviews" marked data-placeholder="aggregate".
  11. Join the table: a postcard back; message side "Get first access to the fall sweater drop", address side the labelled email input, "Send me the next postcard", roundel in the stamp box. Trust strip with ✓ glyphs.
  12. Footer: navy; five groups: brand, Shop (six categories + Gift cards), Help (Contact, Returns, Shipping, FAQ), Wholesale (its own group, one line and a link), Stay in touch (Instagram, second labelled newsletter form). Payment methods once as a text list. No raw URLs.

Interactions

Both forms preventDefault, console.log('[shopify] …') and show a 2s role="status" toast; an empty or invalid email focuses the field and toasts a nudge. Collection and product links are real hrefs.

Performance

Assumptions

Photography gaps and how they were handled

Revision (after CRITIQUE.md)

Changed in index.html:

  1. Straightened the page. Removed rotation from every .pc/.pcb (no --tilt variables remain), deleted the pin pseudo-element, scoped the tape rule to .hero .tape, and stripped tape/pin/pc--r/pcb--r/*--flat classes from all non-hero markup. Only the two hero postcards are tilted; only the beach card is taped. Removed the wall's vertical stagger.
  2. Stamp and postmark moved onto a paper band above the hero photo (padding-top:76px mobile / 100px desktop); nothing covers the sweater. Hero recomposed: sweater card full width on mobile, beach card 30% wide at the bottom-right below the hem and clear of the caption; on desktop the beach card overlaps only the paper margin.
  3. Reviews two columns at 375px (compact padding, 66px postmark, 4:5 photo cards); three columns from 900px. Page length 11,538 → 10,590px. Mobile section padding 56 → 48px.
  4. Fredoka 500 for h1 and h2 with letter-spacing:-.02em; the h1 dropped from 700.
  5. Wall captions: colour name first at 1.3rem, travel line second at .8rem muted.
  6. Wholesale is its own footer group; removed from Help. Footer grid is five columns on desktop.
  7. H1 kept: "Mahjong, made portable."
  8. Performance: non-blocking Google Fonts with <noscript> fallback; hero image preload with imagesrcset/imagesizes; -400.webp twins added to all 29 srcsets with true widths; logos and stamps use the 400 twin only; sizes retuned for the new hero and two-column reviews.
  9. Accessibility: .bar is role="region" aria-label="Announcements"; the hero beach image is now loading="lazy" (26 lazy, 3 eager).
  10. mix-blend-mode:multiply on the hero and wall sweater flats; .pc__ph background is the paper colour.

Deliberately not taken:

QA performed