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({
<>
-
+

{
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] 임의값과 렌더가 동일하다