globals.scss 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. @tailwind base;
  2. @tailwind components;
  3. @tailwind utilities;
  4. html {
  5. min-height: 100vh;
  6. min-height: 100dvh;
  7. width: 100%;
  8. min-width: 355px;
  9. }
  10. body {
  11. min-height: 100vh;
  12. min-height: 100dvh;
  13. width: 100%;
  14. min-width: 355px;
  15. overflow-x: hidden;
  16. overflow-y: auto;
  17. margin: 0;
  18. padding: 0;
  19. }
  20. @layer base {
  21. :root {
  22. --background: 0 0% 100%;
  23. --foreground: 0 0% 3.9%;
  24. --card: 0 0% 100%;
  25. --card-foreground: 0 0% 3.9%;
  26. --popover: 0 0% 100%;
  27. --popover-foreground: 0 0% 3.9%;
  28. --primary: 0 0% 9%;
  29. --primary-foreground: 0 0% 98%;
  30. --secondary: 0 0% 96.1%;
  31. --secondary-foreground: 0 0% 9%;
  32. --muted: 0 0% 96.1%;
  33. --muted-foreground: 0 0% 45.1%;
  34. --accent: 0 0% 96.1%;
  35. --accent-foreground: 0 0% 9%;
  36. --destructive: 0 84.2% 60.2%;
  37. --destructive-foreground: 0 0% 98%;
  38. --border: 0 0% 89.8%;
  39. --input: 0 0% 89.8%;
  40. --ring: 215 100% 50%;
  41. --chart-1: 12 76% 61%;
  42. --chart-2: 173 58% 39%;
  43. --chart-3: 197 37% 24%;
  44. --chart-4: 43 74% 66%;
  45. --chart-5: 27 87% 67%;
  46. --radius: 0.5rem;
  47. --crypto-up: 0 70% 55%;
  48. --crypto-down: 220 70% 55%;
  49. --crypto-neutral: 0 0% 50%;
  50. /* 시맨틱 색상 변수 */
  51. --text-normal: #f1f1f1;
  52. --text-primary: #141414;
  53. --text-secondary: #666;
  54. --text-muted: #999;
  55. --text-link: #0060a9;
  56. --text-link-hover: #c7511f;
  57. --text-head: #e5e5e5;
  58. --bg-page: #fff;
  59. --bg-elevated: #f9f9f9;
  60. --bg-subtle: #f4f4f4;
  61. --bg-input: #fff;
  62. --bg-head: #007bc3;
  63. --bg-icon: #004f7c;
  64. --border-default: #eaeaea;
  65. --border-light: #eee;
  66. --border-strong: #ccc;
  67. --shadow-color: rgba(0,0,0,0.12);
  68. --btn-primary: #007bc3;
  69. --btn-primary-hover: #0066a3;
  70. --btn-primary-shadow: #00558a;
  71. --color-accent: #F7931A;
  72. --color-accent-hover: #e5851a;
  73. --color-danger: #d51b28;
  74. --color-success: #4caf50;
  75. --color-warning-bg: #fefce8;
  76. --color-warning-text: #92400e;
  77. --overlay-color: rgba(0,0,0,0.5);
  78. --sidebar-active-bg: #fff3e0;
  79. --list-row-active: #faffd1;
  80. --btn-default-border: #b3b3b3;
  81. --btn-default-hover: #e3e3e3;
  82. --outline-default: #c2c2c2;
  83. --fg-default: #0f0f0f;
  84. --color-blue: #3b82f6;
  85. --color-blue-hover: #2563eb;
  86. --color-blue-bg: rgba(59, 130, 246, 0.06);
  87. --color-purple: #8b5cf6;
  88. --color-purple-hover: #7c3aed;
  89. --color-purple-bg: rgba(139, 92, 246, 0.06);
  90. --color-danger-bg: #fee2e2;
  91. --color-danger-border: #fca5a5;
  92. --color-success-bg: #dcfce7;
  93. --color-success-text: #16a34a;
  94. --bg-subtle-hover: rgba(0, 0, 0, 0.05);
  95. /* FAQ Q/A 라벨 색상 */
  96. --faq-q-color: #0b671b;
  97. --faq-a-color: #ff4727;
  98. --sidebar-background: 0 0% 98%;
  99. --sidebar-foreground: 240 5.3% 26.1%;
  100. --sidebar-primary: 240 5.9% 10%;
  101. --sidebar-primary-foreground: 0 0% 98%;
  102. --sidebar-accent: 240 4.8% 95.9%;
  103. --sidebar-accent-foreground: 240 5.9% 10%;
  104. --sidebar-border: 220 13% 91%;
  105. --sidebar-ring: 217.2 91.2% 59.8%;
  106. }
  107. .dark {
  108. --background: 0 0% 3.9%;
  109. --foreground: 0 0% 98%;
  110. --card: 0 0% 3.9%;
  111. --card-foreground: 0 0% 98%;
  112. --popover: 0 0% 3.9%;
  113. --popover-foreground: 0 0% 98%;
  114. --primary: 0 0% 98%;
  115. --primary-foreground: 0 0% 9%;
  116. --secondary: 0 0% 14.9%;
  117. --secondary-foreground: 0 0% 98%;
  118. --muted: 0 0% 14.9%;
  119. --muted-foreground: 0 0% 63.9%;
  120. --accent: 0 0% 14.9%;
  121. --accent-foreground: 0 0% 98%;
  122. --destructive: 0 62.8% 30.6%;
  123. --destructive-foreground: 0 0% 98%;
  124. --border: 0 0% 14.9%;
  125. --input: 0 0% 14.9%;
  126. --ring: 215 100% 60%;
  127. --chart-1: 220 70% 50%;
  128. --chart-2: 160 60% 45%;
  129. --chart-3: 30 80% 55%;
  130. --chart-4: 280 65% 60%;
  131. --chart-5: 340 75% 55%;
  132. --crypto-up: 0 70% 60%;
  133. --crypto-down: 220 70% 60%;
  134. --crypto-neutral: 0 0% 63.9%;
  135. /* 시맨틱 색상 변수 */
  136. --text-normal: #f1f1f1;
  137. --text-primary: #cacaca;
  138. --text-secondary: #a3a3a3;
  139. --text-muted: #737373;
  140. --text-link: #60a5fa;
  141. --text-link-hover: #3b82f6;
  142. --text-head: #cacaca;
  143. --bg-page: #171717;
  144. --bg-elevated: #1e1e1e;
  145. --bg-subtle: #262626;
  146. --bg-input: #262626;
  147. --bg-head: #5603a3;
  148. --bg-icon: #3c00aa;
  149. --border-default: #333;
  150. --border-light: #2a2a2a;
  151. --border-strong: #444;
  152. --shadow-color: rgba(0,0,0,0.4);
  153. --btn-primary: #8b5cf6;
  154. --btn-primary-hover: #7c3aed;
  155. --btn-primary-shadow: #6d28d9;
  156. --color-accent: #F7931A;
  157. --color-accent-hover: #f59e0b;
  158. --color-danger: #ef4444;
  159. --color-success: #22c55e;
  160. --color-warning-bg: #422006;
  161. --color-warning-text: #fef08a;
  162. --overlay-color: rgba(0,0,0,0.7);
  163. --sidebar-active-bg: #3d2800;
  164. --list-row-active: #2a2a00;
  165. --btn-default-border: #555;
  166. --btn-default-hover: #333;
  167. --fg-default: #f1f1f1;
  168. --color-blue: #60a5fa;
  169. --color-blue-hover: #3b82f6;
  170. --color-blue-bg: rgba(96, 165, 250, 0.1);
  171. --color-purple: #a78bfa;
  172. --color-purple-hover: #8b5cf6;
  173. --color-purple-bg: rgba(167, 139, 250, 0.15);
  174. --color-danger-bg: #3f1212;
  175. --color-danger-border: #7f1d1d;
  176. --color-success-bg: #0f2d1a;
  177. --color-success-text: #4ade80;
  178. --bg-subtle-hover: rgba(255, 255, 255, 0.05);
  179. /* FAQ Q/A 라벨 색상 — dark 배경에서도 시인성 확보를 위해 light hue 유지하며 밝기 ↑ */
  180. --faq-q-color: #3fbd54;
  181. --faq-a-color: #ff6b4a;
  182. --sidebar-background: 240 5.9% 10%;
  183. --sidebar-foreground: 240 4.8% 95.9%;
  184. --sidebar-primary: 224.3 76.3% 48%;
  185. --sidebar-primary-foreground: 0 0% 100%;
  186. --sidebar-accent: 240 3.7% 15.9%;
  187. --sidebar-accent-foreground: 240 4.8% 95.9%;
  188. --sidebar-border: 240 3.7% 15.9%;
  189. --sidebar-ring: 217.2 91.2% 59.8%;
  190. }
  191. }
  192. @layer base {
  193. * {
  194. @apply border-border;
  195. }
  196. body {
  197. @apply bg-background text-foreground;
  198. }
  199. }
  200. select, input, textarea {
  201. font-size: 1rem;
  202. padding: 5px;
  203. color: var(--text-primary);
  204. background: var(--bg-input);
  205. border: 1px solid var(--border-strong);
  206. border-radius: 3px;
  207. line-height: inherit;
  208. transition: border-color 0.3s ease;
  209. &:focus,
  210. &:hover {
  211. outline: none;
  212. border-color: var(--text-link);
  213. }
  214. &:focus {
  215. -webkit-box-shadow: inset 1px 2px 2px rgba(0, 0, 0, 0.05), 0 0 4px rgba(44, 112, 170, 0.8);
  216. box-shadow: inset 1px 2px 2px rgba(0, 0, 0, 0.05), 0 0 4px rgba(44, 112, 170, 0.8);
  217. }
  218. }
  219. // shadcn 폼 컨트롤 포커스 글로우 (Select trigger, Checkbox 등)
  220. [role="input"]
  221. [role="combobox"],
  222. [role="checkbox"] {
  223. transition: border-color 0.3s ease;
  224. &:focus,
  225. &:hover {
  226. outline: none;
  227. border-color: var(--text-link);
  228. }
  229. &:focus {
  230. -webkit-box-shadow: inset 1px 2px 2px rgba(0, 0, 0, 0.05), 0 0 4px rgba(44, 112, 170, 0.8);
  231. box-shadow: inset 1px 2px 2px rgba(0, 0, 0, 0.05), 0 0 4px rgba(44, 112, 170, 0.8);
  232. }
  233. }
  234. // 모든 버튼 속성값
  235. .btn {
  236. display: inline-block;
  237. padding: 5px 15px;
  238. border-radius: 4px;
  239. height: auto;
  240. text-align: center;
  241. cursor: pointer;
  242. }
  243. // 기본 버튼
  244. .btn-default {
  245. color: var(--text-primary);
  246. background: var(--bg-subtle);
  247. border: 1px solid var(--btn-default-border);
  248. -webkit-box-shadow: inset 0 -1px 0 0 var(--btn-default-border);
  249. box-shadow: inset 0 -1px 0 0 var(--btn-default-border);
  250. &:hover {
  251. background: var(--btn-default-hover);
  252. }
  253. }
  254. // 제출/Primary 버튼
  255. .btn-primary {
  256. color: #fff;
  257. background: var(--btn-primary);
  258. border: 1px solid var(--btn-primary);
  259. -webkit-box-shadow: inset 0 -2px 0 0 var(--btn-primary-shadow);
  260. box-shadow: inset 0 -2px 0 0 var(--btn-primary-shadow);
  261. &:hover {
  262. background: var(--btn-primary-hover);
  263. border-color: var(--btn-primary-hover);
  264. }
  265. }