From bd40f803fb2b5bfc5ccb6da9408907047304b20e Mon Sep 17 00:00:00 2001 From: Seongbin Kim Date: Sun, 19 Jul 2026 17:04:35 +0900 Subject: [PATCH] =?UTF-8?q?refactor(fe):=20=EA=B7=B8=EB=A6=BC=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20elevation=20=ED=86=A0=ED=81=B0=EC=9C=BC=EB=A1=9C,?= =?UTF-8?q?=20=EA=B4=80=EA=B3=84=20=EC=A7=80=EB=8F=84=20=EB=AC=B4=EC=B1=84?= =?UTF-8?q?=EC=83=89=20=EB=A6=AC=ED=84=B0=EB=9F=B4=EC=9D=84=20=EC=8B=9C?= =?UTF-8?q?=EB=A7=A8=ED=8B=B1=20=ED=86=A0=ED=81=B0=EC=9C=BC=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit styles.css에 elevation 1~4 단계 토큰을 라이트/다크 각각 정의하고 @theme inline에 shadow-e1~e4 유틸을 등록했다. 테마별로 자동 전환되므로 dark:shadow-[...] 중복을 제거한다. 관계 지도에서 반복되던 무채색 zinc/white 리터럴을 background/foreground/muted 등 시맨틱 토큰으로 치환해 dark: 짝을 없앴다. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../components/home/relation-force-map.tsx | 31 +++++++++++-------- .../timeline/timeline-event-card.tsx | 2 +- .../src/components/timeline/timeline-feed.tsx | 2 +- frontend/src/stackflow/tabs/home-tab.tsx | 2 +- frontend/src/styles.css | 13 ++++++++ 5 files changed, 34 insertions(+), 16 deletions(-) diff --git a/frontend/src/components/home/relation-force-map.tsx b/frontend/src/components/home/relation-force-map.tsx index 0d643de..131d3f5 100644 --- a/frontend/src/components/home/relation-force-map.tsx +++ b/frontend/src/components/home/relation-force-map.tsx @@ -289,12 +289,12 @@ export function RelationForceMap({ }} >
event.stopPropagation()} >
-
+
{categories.map((category) => ( setActiveGraphIndex(index)} aria-label={`그래프 ${index + 1}`} > + {/* 비활성 도트 bg-zinc-300/700은 전용 토큰 나오기 전까지 손튜닝 값으로 둔다 */} @@ -421,11 +423,11 @@ function OrbitGraph({ <>
-
+
{`${me.name} { const target = event.currentTarget if (target.dataset.fallback === '1') return @@ -441,7 +443,7 @@ function OrbitGraph({
{me.name} @@ -511,7 +513,8 @@ function CategoryClusterGraph({ + {/* flow-path stroke는 모드별 알파를 손으로 맞춘 값이라 전용 토큰 나오기 전까지 유지한다 */} + {/* 궤도선 stroke-stone은 따뜻한 색감으로 손튜닝한 값이라 무채색 토큰으로 치환하지 않는다 */} {displayName} ) : null} {showLastMeet && person.intimacy.daysSinceLastMeet != null ? ( - + {formatDaysSinceLastMeet(person.intimacy.daysSinceLastMeet)} ) : null} diff --git a/frontend/src/components/timeline/timeline-event-card.tsx b/frontend/src/components/timeline/timeline-event-card.tsx index 1cc97f2..764ef9d 100644 --- a/frontend/src/components/timeline/timeline-event-card.tsx +++ b/frontend/src/components/timeline/timeline-event-card.tsx @@ -100,7 +100,7 @@ export function TimelineEventCard({ onClick={() => onSelect(item.id)} className="block min-w-0 flex-1 text-left" > - +

({ return (
-
+
{month} {day}
diff --git a/frontend/src/stackflow/tabs/home-tab.tsx b/frontend/src/stackflow/tabs/home-tab.tsx index 43507ea..0158cf1 100644 --- a/frontend/src/stackflow/tabs/home-tab.tsx +++ b/frontend/src/stackflow/tabs/home-tab.tsx @@ -106,7 +106,7 @@ export function HomeTab() { if (throwbackExiting) setThrowbackDismissed(true) }} > - +
diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 3c08daa..9f87569 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -42,6 +42,11 @@ --border: oklch(0.922 0 0); --input: oklch(0.922 0 0); --ring: oklch(0.708 0 0); + /* elevation 단계 토큰, 라이트/다크 각각 정의해 dark:shadow 중복을 없앤다. */ + --elevation-1: 0 4px 12px rgba(24, 24, 27, 0.07); + --elevation-2: 0 8px 18px rgba(24, 24, 27, 0.06); + --elevation-3: 0 10px 24px rgba(24, 24, 27, 0.08); + --elevation-4: 0 18px 42px rgba(24, 24, 27, 0.12); --font-sans: 'Pretendard', ui-sans-serif, system-ui, sans-serif; } @@ -65,6 +70,10 @@ --border: oklch(1 0 0 / 10%); --input: oklch(1 0 0 / 15%); --ring: oklch(0.556 0 0); + --elevation-1: 0 4px 12px rgba(0, 0, 0, 0.3); + --elevation-2: 0 8px 18px rgba(0, 0, 0, 0.26); + --elevation-3: 0 10px 24px rgba(0, 0, 0, 0.32); + --elevation-4: 0 18px 42px rgba(0, 0, 0, 0.38); } @theme inline { @@ -90,6 +99,10 @@ --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); + --shadow-e1: var(--elevation-1); + --shadow-e2: var(--elevation-2); + --shadow-e3: var(--elevation-3); + --shadow-e4: var(--elevation-4); --font-sans: var(--font-sans); --font-hand: 'Onglip Eunbyeol', var(--font-sans); /* 앱 고유 타이포 스케일. font-size만 지정해 기존 text-[Npx] 임의값과 렌더가 동일하다