Skip to content

Commit 5e4be78

Browse files
pandaofwildclaude
andcommitted
Redesign pop-art sample as a serial silkscreen edition shop
Rebuild the pop-art sample as a Warhol / Haring / Guggenheim-Pop museum edition shop. A gallery masthead sits above a serial pop wall — one flower object repeated across a colour-permuted 4x2 edition grid with a Ben-Day halftone tile and a SERIAL POP WALL placard — over a museum-shop edition rail (serigraph, tote, mug, pin with edition numbers and prices) and a halftone caption rail. The old prototype stood in four flat colour blocks with placeholder "repeated object" labels. Replace it with a module-scope PopArtFlower SVG repeated as a real silkscreen wall. Bold flat colour is pop art's essence, so it is spent on the serial wall while the edition rail and caption stay white and hairline-disciplined. The gallery-wall skeleton keeps it structurally distinct from its cute/casual neighbours kawaii (product collection grid), kitsch (novelty storefront) and comic-book-style (paneled cover shelf). Full/compact QA overflow 0; lint and check:cute-casual (9/9) pass. Mark No. 57 pop-art verified. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 9aa2039 commit 5e4be78

2 files changed

Lines changed: 116 additions & 29 deletions

File tree

‎docs/style-sample-web-review-log.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
| 54 | 귀여움 / 캐주얼 | kitsch | kawaii-app | verified | ban.do/Lisa Says Gah/Lazy Oaf식 '노벨티 부티크 스토어프론트' 재설계: 마퀴+Clash Cart 내비, 히어로(실사 크롭+★ODD SHOP DROP 뱃지·LIMITED ODDITIES 헤드라인·SHOP THE DROP) | giftable product finder(for/vibe/budget 칩·find my oddity·18 matches) 분할, odd object cards 상품 월(스마일머그·체커토트·디스코볼·하트선글라스 실사 + 선버스트 sticker price bursts·NEW/HOT·컬러웨이 도트), clashing pattern strips/pattern clash rail(checker/dots/wavy/flame/gingham/zigzag CSS 프린트 스와치), drop countdown 바. 두꺼운 검정 테두리·하드 오프셋 그림자·남발 회전(촌스러움) 전부 제거하고 화이트 카드·헤어라인·정제 타입으로 규율, 시그니처는 선버스트 스티커+프린트 스와치 한 곳에 집중. 스토어프론트 골격으로 이웃 kawaii(수집 그리드)·dopamine(원형 대시보드)·bubble(수직 쇼)과 구조 차별화. 필수(ODD SHOP DROP/sticker price bursts/clashing pattern strips)+경험 마커(LIMITED ODDITIES/pattern clash rail/giftable product finder/drop countdown) 전부 충족. KitschPriceBurst 모듈 스코프 헬퍼로 lint 통과, 히어로 오버레이는 GeneratedStyleImageSurface children(z-10)로 전달해 surface gotcha 회피. full/compact QA(overflow 0)·lint·**check:cute-casual 카테고리 전체 통과(9/9)** |
8989
| 55 | 귀여움 / 캐주얼 | kawaii | kawaii-app | verified | Sanrio/Pusheen식 'CHARACTER CLUB' 멤버십 대시보드 재설계: 멤버 배너(hi, mochi member!·하트 카운트·character mood ring) + mascot tiles 수집 그리드(실제 kawaii 이미지·collected/new 상태·4/6 수집) + heart badges 진행 + stamp rewards 카드 + shop tiny treats 라인. 수집-그리드 멤버십 골격으로 이웃 kitsch(테두리 노벨티 샵)·dopamine-design(원형 리워드 대시보드)와 구조 차별화. kawaii 필수(CHARACTER CLUB/mascot tiles/heart badges)+경험 마커(FRIEND CLUB DASHBOARD/character mood ring/stamp rewards/shop tiny treats) 전부 충족, Heart→KawaiiHeart 모듈 스코프 승격으로 lint 통과, full/compact QA(overflow 0)·kawaii 자체 assertion 통과. (카테고리 전체 check:cute-casual은 미구현 kitsch 형제 때문에 여전히 실패 — kawaii 자체는 통과) |
9090
| 56 | 귀여움 / 캐주얼 | dopamine-design | kawaii-app | verified | 게임화 습관/스트릭 대시보드 재설계(Duolingo/Happy Socks 에너지): 무지개 conic COLOR REWARD LOOP + 궤도형 habit orbit 버블 + reward meter(XP) + color pulse cards + reward ladder(티어) + dopamine spectrum 바. 최대 채도 팔레트, 원형-진행 대시보드 골격으로 이웃 kawaii(이미지 카드)·pop-art(에디션 그리드)와 구조 차별화. dopamine 필수+경험 마커 전부 충족, full/compact QA(overflow 0)·lint 통과. (카테고리 전체 check:cute-casual은 kawaii 등 미완성 형제 스타일 때문에 여전히 실패 — dopamine 자체 assertion은 통과) |
91-
| 57 | 귀여움 / 캐주얼 | pop-art | street-campaign | queued | comic commercial punch, halftone, bold commodity rhythm |
91+
| 57 | 귀여움 / 캐주얼 | pop-art | street-campaign | verified | Warhol/Haring/Guggenheim-Pop식 '시리얼 팝 월' 뮤지엄 에디션샵 재설계: 갤러리 마스트헤드(EDITION WALL·POP OBJECT ARCHIVE·museum shop wall) + object edition grid(Warhol Flowers식 반복 오브젝트 SVG를 컬러 순열로 4x2 배열 + Ben-Day halftone block 타일) + SERIAL POP WALL 잉크 플래카드 + museum shop 에디션 레일(flowers serigraph ed.250 $95·ben-day tote $38·soup can mug $24·pop pin ed.500 $12) + halftone caption rail(Ben-Day 도트+SHOP EDITIONS). 기존 프로토타입의 플랫 색블록+placeholder 라벨 제거, PopArtFlower SVG 헬퍼로 실크스크린 반복 오브젝트 구현. 볼드 플랫 컬러는 팝아트 본질로서 시리얼 월 한 곳에 집중, 레일·캡션은 화이트/헤어라인으로 규율. 갤러리-월 지배형 골격으로 이웃 kawaii(상품 수집 그리드)·kitsch(노벨티 스토어)·comic(패널 커버 셸프)과 구조 차별화. 필수(POP OBJECT ARCHIVE/halftone block/repeated object)+경험 마커(SERIAL POP WALL/museum shop wall/halftone caption rail/object edition grid) 전부 충족, full/compact QA(overflow 0)·lint·check:cute-casual(9/9) 통과 |
9292
| 58 | 귀여움 / 캐주얼 | comic-book-style | kawaii-app | queued | panels, speech blocks, action hierarchy |
9393
| 59 | 귀여움 / 캐주얼 | toy-design | kawaii-app | queued | molded plastic, toy shelf, playful product object |
9494
| 60 | 귀여움 / 캐주얼 | playful-design | kawaii-app | verified | Duolingo/Headspace/Mailchimp식 '가이드 조이 플로우' 친근한 온보딩 앱 재설계: 앱 헤더(🌱 guide garden·day 3 +40xp) + 마스코트 코치 카드(PLAYFUL ONBOARD·guided joy flow·스프라우트 캐릭터 SVG·speech bubble mascot walkthrough) + soft progress path 4노드 스텝퍼(done/active/todo) + gentle task cards/task completion stack 세로 체크리스트(pick focus·meet guide·2-min step·reminder, done/resume/+15xp 상태) + continue CTA. 기존 프로토타입의 클립아트 원형 마스코트·플랫 색블록 4개(촌스러움) 제거, PlayfulMascot SVG 헬퍼로 캐릭터 정성 렌더+정제된 소프트 팔레트(coral/mint/butter/periwinkle)·화이트 카드. 세로 앱 온보딩 피드 골격으로 이웃 kawaii(수집 그리드)·pastel(에디토리얼 이미지 밴드)·dopamine(원형 대시보드)·kitsch(노벨티 스토어)와 구조 차별화. 필수(PLAYFUL ONBOARD/mascot helper/gentle task cards)+경험 마커(GUIDED JOY FLOW/mascot walkthrough/task completion stack/soft progress path) 전부 충족, task stack justify-between으로 여백 균형, full/compact QA(overflow 0)·lint·check:cute-casual(9/9) 통과 |

‎src/components/design-style/DesignStyleSampleRenderer.tsx‎

Lines changed: 115 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5853,43 +5853,130 @@ function DopamineRewardLoop({ compact = false, style }: Props) {
58535853
);
58545854
}
58555855

5856+
function PopArtFlower({ petal, center, className }: { petal: string; center: string; className?: string }) {
5857+
// A Warhol-Flowers style silkscreen bloom — the repeated object of the serial
5858+
// wall, drawn once and recoloured per edition tile.
5859+
return (
5860+
<svg aria-hidden="true" className={className} viewBox="0 0 64 64">
5861+
<g fill={petal}>
5862+
<circle cx="24" cy="24" r="13" />
5863+
<circle cx="40" cy="24" r="13" />
5864+
<circle cx="24" cy="40" r="13" />
5865+
<circle cx="40" cy="40" r="13" />
5866+
</g>
5867+
<circle cx="32" cy="32" fill={center} r="7" />
5868+
</svg>
5869+
);
5870+
}
5871+
58565872
function PopArtObjectArchive({ compact = false, style }: Props) {
5857-
const halftone = "radial-gradient(circle, var(--sample-text) 0 12%, transparent 13%)";
5858-
const editions = [style.palette.accent, style.palette.accent2, style.palette.accent3, style.palette.surface] as const;
5873+
// "Serial pop wall": a Warhol / Haring / Guggenheim-Pop museum edition shop.
5874+
// A silkscreen wall repeats one flower object across a colour-permuted edition
5875+
// grid (with one Ben-Day halftone tile) above a museum-shop edition rail and a
5876+
// halftone caption rail. The gallery-wall skeleton keeps it distinct from its
5877+
// cute/casual neighbours kawaii (product collection grid), kitsch (novelty
5878+
// storefront) and comic-book-style (paneled cover shelf).
5879+
const ink = "#17151a";
5880+
const halftone = `radial-gradient(circle, ${ink} 0 30%, transparent 34%)`;
5881+
const flowers: Array<{ petal: string; center: string; bg: string }> = [
5882+
{ petal: "var(--sample-primary)", center: "var(--sample-accent-3)", bg: "var(--sample-accent)" },
5883+
{ petal: "var(--sample-accent-3)", center: "var(--sample-primary)", bg: "var(--sample-accent-2)" },
5884+
{ petal: "var(--sample-accent)", center: "var(--sample-primary)", bg: "var(--sample-accent-3)" },
5885+
{ petal: "var(--sample-accent-2)", center: "var(--sample-accent-3)", bg: "var(--sample-primary)" },
5886+
{ petal: "var(--sample-base)", center: "var(--sample-primary)", bg: "var(--sample-text)" },
5887+
{ petal: "var(--sample-primary)", center: "var(--sample-accent)", bg: "var(--sample-base)" },
5888+
{ petal: "var(--sample-accent-3)", center: "var(--sample-accent-2)", bg: "var(--sample-accent)" },
5889+
];
5890+
const editionsRail: Array<[string, string, string]> = [
5891+
["flowers serigraph", "ed. 250", "$95"],
5892+
["ben-day tote", "shop", "$38"],
5893+
["soup can mug", "shop", "$24"],
5894+
["pop pin set", "ed. 500", "$12"],
5895+
];
58595896

58605897
return (
58615898
<SampleFrame compact={compact} style={style}>
5862-
<div className="grid h-full grid-rows-[auto_1fr_auto] gap-3">
5863-
<SampleNav brand="Edition Wall" compact={compact} icons={[<IconSearch key="search" size={compact ? 11 : 13} />]} links={["Works", "Store", "Visit"]} sub="archive shop" />
5864-
<div className={cn("grid min-h-0 gap-3", compact ? "grid-cols-[0.78fr_1.22fr]" : "grid-cols-[0.64fr_1.36fr]")}>
5865-
<section className="border-[3px] border-[var(--sample-border)] bg-[var(--sample-accent)] p-4 text-[var(--sample-base)]">
5866-
<p className="text-[10px] font-black uppercase tracking-[0.15em]">POP OBJECT ARCHIVE</p>
5867-
<h3 className={cn("mt-3 font-display font-black uppercase leading-[0.78]", compact ? "text-3xl" : "text-6xl")} style={{ fontFamily: "var(--st-font-display)", letterSpacing: "0em" }}>
5868-
SERIAL POP WALL
5869-
</h3>
5870-
<p className="mt-4 border-t-[3px] border-[var(--sample-border)] pt-3 text-[9px] font-black uppercase tracking-[0.12em]">museum shop wall</p>
5871-
</section>
5872-
<section className="grid min-h-0 grid-cols-[1fr_0.72fr] gap-3">
5873-
<div className="grid grid-cols-2 gap-2">
5874-
{editions.map((color, index) => (
5875-
<div className="relative border-[3px] border-[var(--sample-border)] p-3" key={`${color}-${index}`} style={{ backgroundColor: color }}>
5876-
<span className="absolute inset-3 rounded-full border-[3px] border-[var(--sample-border)] bg-[rgb(var(--st-surface-rgb)_/_0.72)]" />
5877-
<span className="absolute bottom-3 right-3 h-8 w-8 rounded-full bg-[var(--sample-accent-3)]" style={{ backgroundImage: halftone, backgroundSize: "8px 8px" }} />
5878-
<span className="relative z-10 text-[9px] font-black uppercase tracking-[0.12em]">repeated object</span>
5879-
<span className="relative z-10 mt-14 block text-[8px] font-black uppercase tracking-[0.1em]">object edition grid</span>
5899+
<div
5900+
className={cn("absolute inset-0 min-w-0 overflow-hidden text-[var(--sample-text)]", compact ? "p-3" : "p-4 sm:p-5")}
5901+
style={{
5902+
"--sample-accent": "#19b6d8",
5903+
"--sample-accent-2": "#2f4fd6",
5904+
"--sample-accent-3": "#ffcf1a",
5905+
"--sample-base": "#f6efe0",
5906+
"--sample-border": "#17151a",
5907+
"--sample-border-soft": "rgba(23,21,26,0.14)",
5908+
"--sample-muted": "#8f8a86",
5909+
"--sample-primary": "#ff2d87",
5910+
"--sample-surface": "#ffffff",
5911+
"--sample-text": "#17151a",
5912+
"--st-base-rgb": "246 239 224",
5913+
"--st-surface-rgb": "255 255 255",
5914+
"--st-text-rgb": "23 21 26",
5915+
"--st-primary-rgb": "255 45 135",
5916+
"--st-accent-rgb": "25 182 216",
5917+
"--st-accent-2-rgb": "47 79 214",
5918+
"--st-accent-3-rgb": "255 207 26",
5919+
"--st-border-rgb": "23 21 26",
5920+
background: "linear-gradient(180deg, #f8f2e6, #f4ecdd)",
5921+
} as SampleVariables}
5922+
>
5923+
<div className="relative grid h-full min-h-0 min-w-0 grid-rows-[auto_1fr_auto_auto] gap-2.5">
5924+
{/* ── gallery masthead ── */}
5925+
<header className="flex items-center gap-2">
5926+
<div className="min-w-0 leading-none">
5927+
<span className="block text-[11px] font-black uppercase tracking-[0.04em] text-[var(--sample-text)]" style={{ fontFamily: "var(--st-font-display)" }}>Edition Wall</span>
5928+
<span className="block text-[6.5px] font-black uppercase tracking-[0.2em] text-[var(--sample-primary)]">POP OBJECT ARCHIVE</span>
5929+
</div>
5930+
<span className="ml-auto flex items-center gap-2 text-[7px] font-black uppercase tracking-[0.12em] text-[var(--sample-muted)]">
5931+
<span>museum shop wall</span>
5932+
<IconSearch size={compact ? 11 : 12} />
5933+
</span>
5934+
</header>
5935+
5936+
{/* ── serial pop wall / object edition grid ── */}
5937+
<section aria-label="object edition grid" className="relative min-h-0 overflow-hidden rounded-[6px] ring-2 ring-[var(--sample-border)]">
5938+
<div className="grid h-full grid-cols-4 grid-rows-2 gap-[2px] bg-[var(--sample-border)]">
5939+
{flowers.map(({ petal, center, bg }, index) => (
5940+
<div aria-label="repeated object" className="relative grid place-items-center overflow-hidden" key={index} style={{ backgroundColor: bg }}>
5941+
<PopArtFlower center={center} className="h-[76%] w-[76%]" petal={petal} />
58805942
</div>
58815943
))}
5944+
<div aria-label="halftone block" className="grid place-items-center bg-[var(--sample-accent-3)]" style={{ backgroundImage: halftone, backgroundSize: compact ? "9px 9px" : "12px 12px" }}>
5945+
<span className="rounded-full bg-[var(--sample-text)] px-1.5 py-0.5 text-[6px] font-black uppercase tracking-[0.1em] text-[var(--sample-base)]">ben-day</span>
5946+
</div>
58825947
</div>
5883-
<div className="grid min-h-0 grid-rows-[1fr_auto] gap-2 border-[3px] border-[var(--sample-border)] bg-[var(--sample-surface)] p-3">
5884-
<div className="min-h-0 bg-[var(--sample-accent-3)]" style={{ backgroundImage: halftone, backgroundSize: compact ? "10px 10px" : "14px 14px" }} />
5885-
<span className="mt-2 block text-[9px] font-black uppercase tracking-[0.12em]">halftone block</span>
5948+
<div className="absolute left-2 top-2 max-w-[70%] bg-[var(--sample-text)] px-2 py-1">
5949+
<p className="text-[6px] font-black uppercase tracking-[0.16em] text-[var(--sample-accent-3)]">serial silkscreen · 1 of 7</p>
5950+
<h3 aria-label="SERIAL POP WALL" className="font-black uppercase leading-[0.82] text-[var(--sample-base)]" style={{ fontFamily: "var(--st-font-display)", fontSize: compact ? "17px" : "24px" }}>
5951+
SERIAL
5952+
<br />
5953+
POP WALL
5954+
</h3>
58865955
</div>
58875956
</section>
5888-
</div>
5889-
<div className="grid grid-cols-3 border-[3px] border-[var(--sample-border)] text-[9px] font-black uppercase tracking-[0.12em]">
5890-
{["halftone caption rail", "museum shop wall", "object edition grid"].map((label) => (
5891-
<span className="border-r-[3px] border-[var(--sample-border)] px-3 py-2 last:border-r-0" key={label}>{label}</span>
5892-
))}
5957+
5958+
{/* ── museum shop edition rail ── */}
5959+
<div className={cn("grid grid-cols-4 gap-2", compact && "hidden")}>
5960+
{editionsRail.map(([name, meta, price], index) => (
5961+
<div className="flex items-center gap-1.5 rounded-[10px] bg-white px-1.5 py-1 ring-1 ring-[var(--sample-border-soft)]" key={name}>
5962+
<span className="h-5 w-5 shrink-0 rounded-[6px] ring-1 ring-[var(--sample-border)]" style={{ backgroundColor: [flowers[0].bg, flowers[2].bg, flowers[3].bg, flowers[1].bg][index], backgroundImage: index === 1 ? halftone : undefined, backgroundSize: "6px 6px" }} />
5963+
<span className="min-w-0">
5964+
<span className="block truncate text-[7.5px] font-black lowercase text-[var(--sample-text)]">{name}</span>
5965+
<span className="flex items-center gap-1">
5966+
<span className="text-[6px] font-black uppercase tracking-[0.08em] text-[var(--sample-muted)]">{meta}</span>
5967+
<span className="text-[7px] font-black text-[var(--sample-primary)]">{price}</span>
5968+
</span>
5969+
</span>
5970+
</div>
5971+
))}
5972+
</div>
5973+
5974+
{/* ── halftone caption rail ── */}
5975+
<div aria-label="halftone caption rail" className="flex items-center gap-2 overflow-hidden rounded-full bg-[var(--sample-text)] px-3 py-1.5">
5976+
<span aria-hidden="true" className="h-3 w-8 shrink-0 rounded-full" style={{ backgroundImage: `radial-gradient(circle, var(--sample-accent-3) 0 34%, transparent 38%)`, backgroundSize: "5px 5px" }} />
5977+
<span className="truncate text-[7px] font-black uppercase tracking-[0.12em] text-[var(--sample-base)]">object edition grid · hand-pulled screenprint · museum shop wall</span>
5978+
<span className="ml-auto shrink-0 rounded-full bg-[var(--sample-primary)] px-2.5 py-1 text-[7.5px] font-black uppercase text-white">shop editions</span>
5979+
</div>
58935980
</div>
58945981
</div>
58955982
</SampleFrame>

0 commit comments

Comments
 (0)