style.scss 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. // ── 대시보드 ──────────────────────────────────────
  2. .dashboard {
  3. width: 100%;
  4. max-width: 960px;
  5. // ── 재무 요약 카드 ──
  6. &__cards {
  7. display: grid;
  8. grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  9. gap: 16px;
  10. margin-bottom: 32px;
  11. }
  12. &__card {
  13. border: 1px solid hsl(var(--border));
  14. border-radius: 8px;
  15. padding: 20px;
  16. background: hsl(var(--background));
  17. display: flex;
  18. flex-direction: column;
  19. gap: 6px;
  20. }
  21. &__card-icon {
  22. font-size: 1.25rem;
  23. color: hsl(var(--muted-foreground));
  24. margin-bottom: 4px;
  25. }
  26. &__card-label {
  27. font-size: 0.8125rem;
  28. color: hsl(var(--muted-foreground));
  29. }
  30. &__card-value {
  31. font-size: 1.5rem;
  32. font-weight: 700;
  33. color: hsl(var(--foreground));
  34. &--primary {
  35. color: hsl(var(--primary));
  36. }
  37. &--danger {
  38. color: var(--color-danger);
  39. }
  40. }
  41. // ── 섹션 ──
  42. &__section {
  43. margin-bottom: 32px;
  44. }
  45. &__section-title {
  46. font-size: 1.125rem;
  47. font-weight: 600;
  48. color: hsl(var(--foreground));
  49. margin-bottom: 8px;
  50. }
  51. &__section-desc {
  52. font-size: 0.8125rem;
  53. color: hsl(var(--muted-foreground));
  54. margin-bottom: 16px;
  55. }
  56. // ── 위젯 URL ──
  57. &__widget-list {
  58. display: flex;
  59. flex-direction: column;
  60. gap: 12px;
  61. }
  62. &__widget-item {
  63. border: 1px solid hsl(var(--border));
  64. border-radius: 8px;
  65. padding: 16px 20px;
  66. background: hsl(var(--background));
  67. display: flex;
  68. align-items: center;
  69. gap: 16px;
  70. }
  71. &__widget-info {
  72. display: flex;
  73. flex-direction: column;
  74. gap: 2px;
  75. min-width: 120px;
  76. flex-shrink: 0;
  77. }
  78. &__widget-label {
  79. font-size: 0.9375rem;
  80. font-weight: 600;
  81. color: hsl(var(--foreground));
  82. }
  83. &__widget-desc {
  84. font-size: 0.75rem;
  85. color: hsl(var(--muted-foreground));
  86. }
  87. &__widget-url {
  88. flex: 1;
  89. width: 0;
  90. min-width: 0;
  91. overflow: hidden;
  92. }
  93. &__widget-url-text {
  94. display: block;
  95. font-size: 0.8125rem;
  96. color: hsl(var(--muted-foreground));
  97. background: hsl(var(--muted));
  98. padding: 6px 10px;
  99. border-radius: 4px;
  100. white-space: nowrap;
  101. overflow: hidden;
  102. text-overflow: ellipsis;
  103. font-family: 'Fira Code', 'Consolas', monospace;
  104. }
  105. &__widget-select {
  106. width: 100%;
  107. overflow: hidden;
  108. text-overflow: ellipsis;
  109. font-size: 0.8125rem;
  110. padding: 6px 10px;
  111. border: 1px solid hsl(var(--border));
  112. border-radius: 4px;
  113. background: hsl(var(--background));
  114. color: hsl(var(--foreground));
  115. cursor: pointer;
  116. }
  117. &__widget-empty-inline {
  118. display: block;
  119. font-size: 0.8125rem;
  120. color: hsl(var(--muted-foreground));
  121. font-style: italic;
  122. padding: 6px 10px;
  123. }
  124. &__widget-actions {
  125. display: flex;
  126. gap: 6px;
  127. flex-shrink: 0;
  128. }
  129. &__widget-btn {
  130. display: inline-flex;
  131. align-items: center;
  132. gap: 4px;
  133. padding: 6px 12px;
  134. border: 1px solid hsl(var(--border));
  135. border-radius: calc(var(--radius) - 2px);
  136. font-size: 0.8125rem;
  137. font-weight: 500;
  138. cursor: pointer;
  139. background: hsl(var(--background));
  140. color: hsl(var(--foreground));
  141. transition: background-color 0.15s;
  142. white-space: nowrap;
  143. &:hover {
  144. background: hsl(var(--accent));
  145. }
  146. &--copied {
  147. background: hsl(var(--primary));
  148. color: hsl(var(--primary-foreground));
  149. border-color: hsl(var(--primary));
  150. }
  151. &--open {
  152. color: hsl(var(--primary));
  153. border-color: hsl(var(--primary));
  154. &:hover {
  155. background: hsl(var(--primary) / 0.1);
  156. }
  157. }
  158. }
  159. // ── 최근 후원 ──
  160. &__donation-list {
  161. display: flex;
  162. flex-direction: column;
  163. gap: 8px;
  164. }
  165. &__donation-item {
  166. border: 1px solid hsl(var(--border));
  167. border-radius: 8px;
  168. padding: 14px 20px;
  169. background: hsl(var(--background));
  170. }
  171. &__donation-info {
  172. display: flex;
  173. justify-content: space-between;
  174. align-items: center;
  175. margin-bottom: 4px;
  176. }
  177. &__donation-name {
  178. font-size: 0.9375rem;
  179. font-weight: 600;
  180. color: hsl(var(--foreground));
  181. }
  182. &__donation-amount {
  183. font-size: 0.9375rem;
  184. font-weight: 700;
  185. color: hsl(var(--primary));
  186. }
  187. &__donation-msg {
  188. font-size: 0.8125rem;
  189. color: hsl(var(--foreground));
  190. margin-bottom: 4px;
  191. line-height: 1.4;
  192. }
  193. &__donation-time {
  194. font-size: 0.75rem;
  195. color: hsl(var(--muted-foreground));
  196. }
  197. &__empty {
  198. border: 1px solid hsl(var(--border));
  199. border-radius: 8px;
  200. padding: 40px 24px;
  201. text-align: center;
  202. color: hsl(var(--muted-foreground));
  203. font-size: 0.875rem;
  204. }
  205. // ── 반응형 ──
  206. @media (max-width: 768px) {
  207. &__cards {
  208. grid-template-columns: repeat(2, 1fr);
  209. gap: 10px;
  210. margin-bottom: 24px;
  211. }
  212. &__card {
  213. padding: 14px;
  214. }
  215. &__card-value {
  216. font-size: 1.25rem;
  217. }
  218. &__section {
  219. margin-bottom: 24px;
  220. }
  221. &__section-title {
  222. font-size: 1rem;
  223. }
  224. &__widget-item {
  225. flex-direction: column;
  226. align-items: flex-start;
  227. gap: 10px;
  228. padding: 14px 16px;
  229. }
  230. &__widget-info {
  231. min-width: 0;
  232. width: 100%;
  233. }
  234. &__widget-url {
  235. width: 100%;
  236. }
  237. &__widget-url-text {
  238. font-size: 0.75rem;
  239. padding: 8px 10px;
  240. }
  241. &__widget-actions {
  242. width: 100%;
  243. .dashboard__widget-btn {
  244. flex: 1;
  245. justify-content: center;
  246. padding: 10px 12px;
  247. }
  248. }
  249. &__donation-item {
  250. padding: 12px 14px;
  251. }
  252. &__donation-name {
  253. font-size: 0.875rem;
  254. }
  255. &__donation-amount {
  256. font-size: 0.875rem;
  257. }
  258. &__donation-msg {
  259. font-size: 0.75rem;
  260. }
  261. &__empty {
  262. padding: 28px 16px;
  263. }
  264. }
  265. @media (max-width: 480px) {
  266. &__cards {
  267. grid-template-columns: 1fr;
  268. }
  269. &__card-label {
  270. font-size: 0.75rem;
  271. }
  272. &__card-value {
  273. font-size: 1.125rem;
  274. }
  275. &__widget-list {
  276. gap: 10px;
  277. }
  278. &__widget-item {
  279. padding: 12px 14px;
  280. gap: 8px;
  281. }
  282. &__widget-label {
  283. font-size: 0.875rem;
  284. }
  285. &__widget-desc {
  286. font-size: 0.6875rem;
  287. }
  288. &__donation-list {
  289. gap: 6px;
  290. }
  291. &__donation-info {
  292. flex-direction: column;
  293. align-items: flex-start;
  294. gap: 2px;
  295. margin-bottom: 6px;
  296. }
  297. &__donation-time {
  298. font-size: 0.6875rem;
  299. }
  300. }
  301. }