style(frontend): 삼성향 라이트 팔레트(samsung) 추가하고 기본으로

삼성닷컴(sec) 공개 웹 실측값 — 검정 주색/CTA, 흰 canvas, #f7f7f7 surface, #707070 muted,
#dddddd border, 링크 #007aff, 그림자 없음, 버튼·카드 radius 20px(알약).
One UI 파랑은 폰 앱용이라 안 씀. 폰트는 재배포 근거 없어 안 넣음. 다크 모드는 기존 그대로.
기존 사용자 저장값 clean-blue 는 한 번만 samsung 으로 교체(index.html 부트스트랩).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
lee-hyeon-cheol
2026-09-21 10:26:52 +09:00
co-authored by Claude Fable 5.1
parent e351560377
commit efb9fb46de
4 changed files with 59 additions and 11 deletions
+46 -3
View File
@@ -83,6 +83,37 @@ export type DerivedTokens = {
// 의미색 — 모든 테마 공통
const DESTRUCTIVE = "oklch(0.577 0.245 27.325)"
// 삼성향 — 삼성닷컴(sec) 공개 웹 2026-07 실측값. 검정 주색·흰 바탕·회색 면, 그림자 없음, 알약 버튼(20px).
// One UI 파랑(#0381fe)은 폰 앱용이라 안 씀. 링크만 #007aff. 폰트는 재배포 근거 없어 안 넣음.
const SAMSUNG_TOKENS: DerivedTokens = {
background: "#FFFFFF", // canvas
foreground: "#000000",
card: "#FFFFFF",
cardForeground: "#000000",
popover: "#FFFFFF",
popoverForeground: "#000000",
primary: "#000000", // contained CTA
primaryForeground: "#FFFFFF",
secondary: "#F7F7F7", // surface
secondaryForeground: "#000000",
muted: "#F7F7F7",
mutedForeground: "#707070",
accent: "#EDEDED", // hover — surface 보다 한 단계
accentForeground: "#000000",
destructive: DESTRUCTIVE,
border: "#DDDDDD",
input: "#DDDDDD",
ring: "#000000",
sidebar: "#F7F7F7",
sidebarForeground: "#000000",
sidebarPrimary: "#000000",
sidebarPrimaryForeground: "#FFFFFF",
sidebarAccent: "#EDEDED",
sidebarAccentForeground: "#000000",
sidebarBorder: "#DDDDDD",
sidebarRing: "#000000",
}
// 기본 팔레트(id 는 하위호환으로 clean-blue 유지) — ABAP_OPENCODE DESIGN_SYSTEM.md §7 라이트 값.
// globals.css :root 와 같은 값. 명도 정렬(derive)을 안 타서 블루가 차콜로 안 바뀜.
const CLEAN_BLUE_TOKENS: DerivedTokens = {
@@ -114,6 +145,16 @@ const CLEAN_BLUE_TOKENS: DerivedTokens = {
sidebarRing: "#3563E9",
}
// 고정 토큰 팔레트(명도 정렬 안 탐). 나머지는 swatch 에서 derive.
const FIXED_TOKENS: Record<string, DerivedTokens> = {
"clean-blue": CLEAN_BLUE_TOKENS,
samsung: SAMSUNG_TOKENS,
}
// 팔레트별 추가 CSS — samsung 은 알약 radius(실측 20px) + 링크색
const EXTRA_CSS: Record<string, string> = {
samsung: `[data-theme="samsung"]:not(.dark){--radius:20px;--link:#007aff}`,
}
export function derivePaletteTokens(
swatch: readonly [string, string, string, string]
): DerivedTokens {
@@ -181,13 +222,15 @@ function paletteToCss(id: string, t: DerivedTokens): string {
}
// 전체 테마 CSS를 한 번에 생성. 모듈 로드 시 1회 실행.
export const ALL_THEMES_CSS: string = PALETTES.map((p) =>
paletteToCss(p.id, p.id === "clean-blue" ? CLEAN_BLUE_TOKENS : derivePaletteTokens(p.swatch))
export const ALL_THEMES_CSS: string = PALETTES.map(
(p) =>
paletteToCss(p.id, FIXED_TOKENS[p.id] ?? derivePaletteTokens(p.swatch)) +
(EXTRA_CSS[p.id] ?? "")
).join("")
// 미리보기 카드용 — id로 derived tokens 조회
export function getDerivedTokens(id: string): DerivedTokens | null {
if (id === "clean-blue") return { ...CLEAN_BLUE_TOKENS }
if (FIXED_TOKENS[id]) return { ...FIXED_TOKENS[id] }
const p = PALETTES.find((x) => x.id === id)
return p ? derivePaletteTokens(p.swatch) : null
}