05 · Game Night, 7 pm — "A run of show you can shop"

Thesis

The homepage is the evening's schedule. Timestamps mark each section as an event, a 2px navy rail runs the whole page with a dot at every event, and the photography is only what a game night actually looks like: hands at the floral table, a spritz beside a fanned hand, racks on the navy table, the kitchen-table host, the green tablecloth. The sweater is what you put on first, so it is the first product on the page and the first thing that moves.

Run of show as built:

Time Event Section
6:30 pm Dress for the table. (H1) Hero: lede and both CTAs under the H1, then the sweater flat
What to bring Four category tiles
6:45 pm Pick your color Colorway wall, seven deep links, Hot Pink/Blush leads
7:00 pm Set the table Three-price strip (mobile), then the ladder, Complete Set default
7:15 pm Pick a deck Five editions, Beach first, thumb scroll with peek, whole tile links to the PDP
7:30 pm Cards, not tiles Comparison table, three benefits, two Learn to play links
9:45 pm Table talk Six placeholder reviews interleaved with six game-night photos
Next Tuesday Join the table Email capture with the fall-drop incentive, trust strip

Art direction decisions

The single motion moment

On load the hero figure slides in from the left once, as if pulled from a closet: @keyframes closet { from { transform: translateX(-14%); opacity: 0 } }, 600ms, cubic-bezier(.22,.61,.36,1), 50ms delay, fill-mode both. Pure CSS, so it works without JS. Disabled entirely under prefers-reduced-motion: reduce. Nothing else animates: no scroll reveals, no IntersectionObserver, no rail progress fill. Button hovers are 120ms color changes.

Interactions and accessibility

Assumptions

  1. A 6:45 pm event was added. The task grouped hero and colorway wall under 6:30, but the fixed section order puts the category tiles between them, so the wall gets 6:45 and the tiles are an untimed list.
  2. H1 is "Dress for the table." One of the brief's candidates; it doubles as the 6:30 event name. "Game night, anywhere." closes the lede. Kept per the critic's assignment.
  3. Green/Blush is the hero colorway (and the drawer tile); Hot Pink/Blush leads the wall so the hero file is not shown twice at full width. No sales-by-colorway data was available.
  4. "Cards only" links to the Beach Edition PDP (the brief says "the edition PDP"; Beach is the lead edition). The Complete Set links to /collections/bundles-gifts, the Table Set to /products/table-set marked data-placeholder="sku".
  5. The header logo is the arched wordmark (its 400px twin, 64px rendered); the drawer uses the brand name in the display face as its title.
  6. The announcement bar is two static lines on mobile (about 44px) and one line on desktop. Announcement plus header total about 104px at 375px; only the header is sticky.
  7. Search and cart icons are links to /search and /cart.
  8. The 24px time label applies to every timestamp at 375, not only the hero's, so the schedule stays consistent on mobile; the critic's instruction named the hero, and a 24px hero time beside 76px section times would have read as a mistake.

Honesty notes on photography

Performance

Revision (after the critic's pass)

Changed, in the order given:

  1. Hero at 375: timestamp reduced to a 24px label beside the rail dot; lede and both CTAs moved directly under the H1, above the image. Primary button now tops at 372px (was about 815px). Desktop keeps the 104px times.
  2. Removed the five edition-row "Add to cart" buttons and their JS; the whole deck tile links to the PDP. Lede now says every edition comes as a Complete Set.
  3. Replaced the empty checkbox pseudo-elements on category tiles and in-the-box lists with plain disc bullets (lists) and nothing (tile headings).
  4. Rail moved from x=18 to x=12, content from x=48 to x=28 (measure 309px to 327px). Review quotes are 1-up at 375 (photos still pair 2-up).
  5. Footer group renamed "Stockists" to "Elsewhere".
  6. Wall reordered: Hot Pink/Blush leads the full-width slot; Green/Blush is a standard tile. All seven present.
  7. Review section: booth photo swapped for the storefront on-model shot, captioned; the booth shot moved to the wall's info block with its own caption, so no file appears twice.
  8. Three-price strip added above the mobile ladder; hidden at 1024+.
  9. H1 kept.
  10. Fonts non-blocking with a <noscript> fallback; hero image preloaded; -400 twins added to every srcset and used as the only source under 200px; the drawer and wall-info thumbnails, learn thumbnails and logo also dropped their 800/1600 candidates.
  11. mix-blend-mode: multiply on every product-on-white image.

Deliberately not taken as written:

Lighthouse (mobile, simulated throttling, served from a local Python http.server, run on the final file)

Performance 100 · Accessibility 100 · Best practices 100 · SEO 100. FCP 1.0 s, LCP 1.8 s (the hero image, preloaded), Speed Index 1.0 s, TBT 0 ms, CLS 0.035 (the font swap). No render-blocking resources, no console errors. "Properly size images" waste fell from 959KB to 73KB. Remaining flags are the test server's missing compression and cache headers. Before this revision the same audit read 94 / 100 / 96 / 100 with LCP 2.9 s. Run with npx lighthouse@12; report at the session scratchpad lh3.json.