_colors.scss 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. // ─────────────────────────────────────────────────────────────
  2. // D6 디자인 토큰 — 컬러 (다크 기본 + 라이트)
  3. // 테마 스위칭: html 클래스 `.dark`/`.light` + `data-theme` 속성 — app/layout.tsx 의 FOUC 방지 인라인 스크립트가 첫 페인트 전 세팅
  4. // 원칙 (d6-design-system.md §3):
  5. // - 기존 시맨틱 변수명(--bg-page, --text-primary 등)은 전부 보존 — 값만 그레이 램프 기반으로 재정의 (기존 ~50개 style.scss 무수정 호환)
  6. // - 포인트 컬러는 --az-accent 1개 (개미 오렌지). 기존 --color-accent / --btn-primary 는 alias 로 수렴
  7. // ※ 설계 문서의 `--accent` 이름은 shadcn HSL triplet(--accent)과 충돌하여 --az-accent 로 명명
  8. // - 상승 빨강(--price-up) / 하락 파랑(--price-down) — 국내 관례, WCAG AA 대비 검증값
  9. // - 헤더 토큰(--bg-head/--text-head/--bg-icon/--head-*)은 라이트 테마에서도 다크 고정 (amazon 방식)
  10. // ─────────────────────────────────────────────────────────────
  11. // ── 다크 (기본) ──
  12. :root {
  13. color-scheme: dark;
  14. // 그레이 램프 15단 (배경 → 전경)
  15. --gray-0: #0b0c0f;
  16. --gray-1: #111318;
  17. --gray-2: #16181d;
  18. --gray-3: #1c1f26;
  19. --gray-4: #22262e;
  20. --gray-5: #2a2f38;
  21. --gray-6: #353b46;
  22. --gray-7: #454c59;
  23. --gray-8: #5a6270;
  24. --gray-9: #717a88;
  25. --gray-10: #8b93a1;
  26. --gray-11: #a6adb9;
  27. --gray-12: #c2c8d1;
  28. --gray-13: #dde1e7;
  29. --gray-14: #f2f4f7;
  30. // 기능 컬러 — 등락 (색+부호 병행 원칙, 등락 표시에 --az-accent 사용 금지)
  31. --price-up: #f2555f;
  32. --price-down: #4a8df2;
  33. --price-flat: var(--gray-10);
  34. // 포인트 컬러 (유일) — 액션 버튼·활성 탭·포커스 링 전용
  35. --az-accent: #f7931a;
  36. --az-accent-hover: #f59e0b;
  37. // 시맨틱 — 램프 참조 (테마 전환 시 램프 재정의로 자동 반영, 기존 변수명 보존)
  38. --bg-page: var(--gray-0);
  39. --bg-elevated: var(--gray-2);
  40. --bg-subtle: var(--gray-3);
  41. --bg-input: var(--gray-2);
  42. --bg-card: var(--gray-2); // 기존 미정의 참조 보정
  43. --bg-default: var(--gray-0); // 기존 미정의 참조 보정
  44. --border-light: var(--gray-3);
  45. --border-subtle: var(--gray-3); // 기존 미정의 참조 보정
  46. --border-default: var(--gray-4);
  47. --border-strong: var(--gray-6);
  48. --text-muted: var(--gray-9);
  49. --text-secondary: var(--gray-11);
  50. --text-primary: var(--gray-13);
  51. --text-normal: var(--gray-14);
  52. --fg-default: var(--gray-14);
  53. --btn-default-border: var(--gray-6);
  54. --btn-default-hover: var(--gray-4);
  55. // 헤더 — 양 테마 다크 고정 (라이트 블록에서 재정의하지 않음)
  56. --bg-head: #111318;
  57. --text-head: #c2c8d1;
  58. --bg-icon: #22262e;
  59. --outline-default: #454c59;
  60. --head-input-bg: #1c1f26;
  61. --head-input-text: #dde1e7;
  62. --head-input-placeholder: #717a88;
  63. --head-input-border: #353b46;
  64. // 포인트 alias (기존 변수명 보존)
  65. --color-accent: var(--az-accent);
  66. --color-accent-hover: var(--az-accent-hover);
  67. --btn-primary: var(--az-accent);
  68. --btn-primary-hover: var(--az-accent-hover);
  69. --btn-primary-shadow: #b96504;
  70. --btn-primary-text: #201503; // 오렌지 위 잉크 텍스트 — 흰색은 AA 미달
  71. // 테마별 리터럴
  72. --text-link: #60a5fa;
  73. --text-link-hover: #3b82f6;
  74. --shadow-color: rgba(0, 0, 0, 0.45);
  75. --color-danger: #ef4444;
  76. --color-success: #22c55e;
  77. --color-warning-bg: #422006;
  78. --color-warning-text: #fef08a;
  79. --overlay-color: rgba(0, 0, 0, 0.7);
  80. --sidebar-active-bg: #3d2800;
  81. --list-row-active: #2a2a00;
  82. --color-blue: #60a5fa;
  83. --color-blue-hover: #3b82f6;
  84. --color-blue-bg: rgba(96, 165, 250, 0.1);
  85. --color-purple: #a78bfa;
  86. --color-purple-hover: #8b5cf6;
  87. --color-purple-bg: rgba(167, 139, 250, 0.15);
  88. --color-danger-bg: #3f1212;
  89. --color-danger-border: #7f1d1d;
  90. --color-success-bg: #0f2d1a;
  91. --color-success-text: #4ade80;
  92. --bg-subtle-hover: rgba(255, 255, 255, 0.05);
  93. // FAQ Q/A 라벨 — dark 배경 시인성용 밝기 ↑
  94. --faq-q-color: #3fbd54;
  95. --faq-a-color: #ff6b4a;
  96. // shadcn HSL triplet — 그레이 램프 파생값 (시각적 단일화, 통합은 장기 과제)
  97. --background: 225 15% 5%;
  98. --foreground: 218 17% 89%;
  99. --card: 220 12% 10%;
  100. --card-foreground: 218 17% 89%;
  101. --popover: 220 12% 10%;
  102. --popover-foreground: 218 17% 89%;
  103. --primary: 218 17% 89%;
  104. --primary-foreground: 222 13% 13%;
  105. --secondary: 221 14% 16%;
  106. --secondary-foreground: 218 17% 89%;
  107. --muted: 221 14% 16%;
  108. --muted-foreground: 216 10% 59%;
  109. --accent: 221 14% 16%;
  110. --accent-foreground: 218 17% 89%;
  111. --destructive: 0 63% 31%;
  112. --destructive-foreground: 0 0% 98%;
  113. --border: 221 14% 16%;
  114. --input: 221 14% 16%;
  115. --ring: 33 93% 54%; // 포인트 컬러 1개 원칙 — 포커스 링도 개미 오렌지
  116. --chart-1: 220 70% 50%;
  117. --chart-2: 160 60% 45%;
  118. --chart-3: 30 80% 55%;
  119. --chart-4: 280 65% 60%;
  120. --chart-5: 340 75% 55%;
  121. --crypto-up: 356 86% 64%; // = --price-up (레거시 alias, 신규 코드는 --price-* 사용)
  122. --crypto-down: 216 87% 62%; // = --price-down
  123. --crypto-neutral: 216 10% 59%;
  124. --sidebar-background: 240 5.9% 10%;
  125. --sidebar-foreground: 240 4.8% 95.9%;
  126. --sidebar-primary: 224.3 76.3% 48%;
  127. --sidebar-primary-foreground: 0 0% 100%;
  128. --sidebar-accent: 240 3.7% 15.9%;
  129. --sidebar-accent-foreground: 240 4.8% 95.9%;
  130. --sidebar-border: 240 3.7% 15.9%;
  131. --sidebar-ring: 217.2 91.2% 59.8%;
  132. }
  133. // ── 라이트 ──
  134. // 램프를 역할 등가로 뒤집어 재정의 → 시맨틱 매핑(--bg-page: var(--gray-0) 등)은 공통 유지
  135. // 헤더 토큰(--bg-head 등)은 여기서 재정의하지 않음 = 다크 고정
  136. html.light,
  137. [data-theme='light'] {
  138. color-scheme: light;
  139. --gray-0: #ffffff;
  140. --gray-1: #f8f9fb;
  141. --gray-2: #f2f4f7;
  142. --gray-3: #e9ecf1;
  143. --gray-4: #dde1e7;
  144. --gray-5: #cfd4dc;
  145. --gray-6: #b6bcc7;
  146. --gray-7: #99a1ae;
  147. --gray-8: #7e8695;
  148. --gray-9: #667080;
  149. --gray-10: #545d6b;
  150. --gray-11: #424a57;
  151. --gray-12: #313843;
  152. --gray-13: #21262e;
  153. --gray-14: #14171c;
  154. --price-up: #d02330;
  155. --price-down: #1861d8;
  156. --price-flat: var(--gray-9);
  157. --az-accent: #d97800;
  158. --az-accent-hover: #b96504;
  159. --btn-primary-shadow: #a35a00;
  160. --text-link: #0060a9;
  161. --text-link-hover: #c7511f;
  162. --shadow-color: rgba(0, 0, 0, 0.12);
  163. --color-danger: #d51b28;
  164. --color-success: #4caf50;
  165. --color-warning-bg: #fefce8;
  166. --color-warning-text: #92400e;
  167. --overlay-color: rgba(0, 0, 0, 0.5);
  168. --sidebar-active-bg: #fff3e0;
  169. --list-row-active: #faffd1;
  170. --color-blue: #3b82f6;
  171. --color-blue-hover: #2563eb;
  172. --color-blue-bg: rgba(59, 130, 246, 0.06);
  173. --color-purple: #8b5cf6;
  174. --color-purple-hover: #7c3aed;
  175. --color-purple-bg: rgba(139, 92, 246, 0.06);
  176. --color-danger-bg: #fee2e2;
  177. --color-danger-border: #fca5a5;
  178. --color-success-bg: #dcfce7;
  179. --color-success-text: #16a34a;
  180. --bg-subtle-hover: rgba(0, 0, 0, 0.05);
  181. --faq-q-color: #0b671b;
  182. --faq-a-color: #ff4727;
  183. --background: 0 0% 100%;
  184. --foreground: 222 13% 15%;
  185. --card: 0 0% 100%;
  186. --card-foreground: 222 13% 15%;
  187. --popover: 0 0% 100%;
  188. --popover-foreground: 222 13% 15%;
  189. --primary: 222 13% 15%;
  190. --primary-foreground: 216 24% 96%;
  191. --secondary: 216 22% 93%;
  192. --secondary-foreground: 222 13% 15%;
  193. --muted: 216 22% 93%;
  194. --muted-foreground: 216 11% 45%;
  195. --accent: 216 22% 93%;
  196. --accent-foreground: 222 13% 15%;
  197. --destructive: 0 84.2% 60.2%;
  198. --destructive-foreground: 0 0% 98%;
  199. --border: 213 17% 89%;
  200. --input: 213 17% 89%;
  201. --ring: 33 100% 43%;
  202. --chart-1: 12 76% 61%;
  203. --chart-2: 173 58% 39%;
  204. --chart-3: 197 37% 24%;
  205. --chart-4: 43 74% 66%;
  206. --chart-5: 27 87% 67%;
  207. --crypto-up: 356 71% 48%;
  208. --crypto-down: 217 80% 47%;
  209. --crypto-neutral: 216 11% 45%;
  210. --sidebar-background: 0 0% 98%;
  211. --sidebar-foreground: 240 5.3% 26.1%;
  212. --sidebar-primary: 240 5.9% 10%;
  213. --sidebar-primary-foreground: 0 0% 98%;
  214. --sidebar-accent: 240 4.8% 95.9%;
  215. --sidebar-accent-foreground: 240 5.9% 10%;
  216. --sidebar-border: 220 13% 91%;
  217. --sidebar-ring: 217.2 91.2% 59.8%;
  218. }