Foundation
Color
원시 팔레트, neutral·colored elevation, 컴포넌트 역할별 색을 구분합니다.
Primitive
테마와 관계없이 고정된 색상 재료입니다. Raw palette는 값이 고정되고, Gray와 Accent alias는 서비스가 고른 raw family를 가리킵니다. 숫자가 낮을수록 밝고 높을수록 어둡습니다.
Black & White
Gray
Gray는 alias입니다. 서비스는 Neutral, Slate, Stone, Zinc 중 하나를 골라 50~950 전체를 한 번에 교체합니다. 기본값은 Neutral입니다.
Neutral
색 기운이 없는 중성 회색. gray의 기본값입니다.
Slate
은은한 청색 기운의 차가운 회색입니다.
Stone
은은한 웜 기운의 회색입니다.
Zinc
미세한 보랏빛이 도는 무채색입니다.
Chromatic
상태 의미가 아니라 제품 그래픽과 semantic palette의 재료로 쓰는 고정 원색입니다.
Accent
Elevation
부모 배경 위에 중성 잉크를 합성하는 11단계 primitive입니다. 자식의 opacity나 box-shadow가 아니며, 숫자가 높을수록 구분이 강해집니다. light와 dark는 같은 단계가 비슷한 시각적 무게를 갖도록 서로 다른 잉크 비율을 사용합니다.
Border
테두리에는 neutral elevation 50~950을 사용합니다. 기본 구분선은 700, 강조할 컨트롤은 800, 선택·포커스 구분선은 950부터 조정하세요.
border-elevation-700border-elevation-800border-elevation-950Semantic
원색의 의미, 색을 띤 elevation, 실제 UI 역할을 단계적으로 연결합니다. light와 dark는 같은 의미를 유지하면서 각 배경에서 필요한 대비를 갖도록 참조가 바뀝니다.
Palette & elevation semantics
각 용도는 불투명한 Palette와 배경에 얹는 colored Elevation을 함께 제공합니다. Palette의 dark는 같은 계열의 1000−n 단계를 참조하고 500은 유지합니다. Elevation은 light의 gray-100, dark의 gray-800 기준면 위에서 4%·8% tint로 시작해 950에서 불투명해집니다. 두 묶음은 한 ScrollArea를 공유해 같은 step이 항상 정렬됩니다.
Brand / Accent
서비스가 지정한 accent 원색을 light와 dark의 brand 위계로 연결합니다.
Success
정상과 완료 상태를 Green raw palette로 표현합니다.
Warning
주의가 필요한 상태를 Amber raw palette로 표현합니다.
Danger
오류와 파괴적 작업을 Red raw palette로 표현합니다.
Info
안내와 정보 상태를 Blue raw palette로 표현합니다.
Component roles
컴포넌트와 제품 화면이 우선 사용하는 role입니다. dark mode와 제품 override가 이 계층에 반영됩니다.
Background
앱 shell의 세 영역을 main content, 보조 navigation, 그 사이의 gutter로 구분합니다.
Section
content 안에서 카드·패널·중첩 영역과 떠 있는 section의 깊이를 구분합니다.
Form field
입력·선택 control의 기본, hover, disabled 배경을 한 묶음으로 관리합니다.
Interactive item
메뉴·목록·option처럼 반복되는 항목의 기본과 상호작용 상태입니다.
Text
typography 크기와 독립적으로 본문 강조도와 반전 배경 위 text·icon의 위계를 정합니다.
Brand
accent 500을 사용하는 단일 브랜드 색상입니다.
Focus and Link
keyboard focus ring과 문장 안 링크입니다.
Usage
완성 CSS를 import하면 모든 token이 CSS 변수로 존재합니다. Tailwind utility가 필요한 앱만 bridge를 추가합니다. Primitive는 그래픽과 palette 정의에, Semantic은 실제 UI에 씁니다.
Primitive vs Semantic
Primitive는 색의 원본 값이고, Semantic은 배경·텍스트·상태에 맞춰 연결한 토큰입니다. 컴포넌트와 제품 화면에는 Semantic을 우선 사용합니다.
dark mode 자동 대응과 제품별 테마 재정의를 위해 semantic token을 우선 사용합니다.
text-text-primary기본 본문 텍스트bg-background-primarymain content 배경bg-section-primary카드와 패널 면bg-interactive-item-selected선택된 item의 accent 배경text-brandtheme-aware brand text
테마와 무관하게 고정되어야 하는 브랜드 그래픽, 일러스트, palette 정의에 사용합니다.
var(--color-accent-500)서비스 accent 원색var(--color-coral-500)Amineslab 고정 원색var(--color-neutral-950)고정 어두운 배경
Dark mode
<html data-theme="dark"> 또는 .dark가 있으면 semantic token이 참조하는 primitive가 바뀝니다. raw primitive 자체의 값은 두 테마에서 같습니다.
Gray family selection
제품의 온도에 맞춰 gray alias 전체를 Neutral, Slate, Stone, Zinc 중 하나로 선택합니다. 모든 단계를 같은 family로 매핑해야 light와 dark의 위계가 어긋나지 않습니다.
Categories
토큰 이름의 첫 단어가 역할입니다. 카드를 클릭하면 대표 Tailwind utility를 복사합니다.
Accent override
서비스가 accent를 바꾸려면 raw accent의 50부터 950까지 전체 ramp를 제품 범위에서 지정합니다. 이 primitive는 light/dark에서 동일하게 유지하고, brand role이 mode별로 적절한 단계를 선택하게 합니다.
Setup
완성 CSS 한 번, Tailwind bridge는 선택입니다.
사용 기준
- 화면에서는 `--color-background-primary`, `--color-form-field`, `--color-interactive-item`, `--color-text-primary` 같은 역할별 토큰과 Button 같은 공개 컴포넌트를 사용합니다.
- palette 단계 번호를 제품 상태 의미로 고정하지 마세요.
검증 기준
- 라이트·다크 모드에서 각 토큰의 역할과 정보 구분이 유지되는지 확인합니다.
- 토큰을 재정의한 뒤에도 텍스트, 포커스, 경계가 선명하게 구분되어야 합니다.
- 브랜드 원색은 표현에, 의미 토큰은 화면의 역할과 상태에 맞춰 사용합니다.