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:
co-authored by
Claude Fable 5.1
parent
e351560377
commit
efb9fb46de
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user