style.scss 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. // 상단 토글 바
  2. .studio__topbar {
  3. display: flex;
  4. align-items: center;
  5. padding: 8px 12px;
  6. border-bottom: 1px solid hsl(var(--sidebar-border));
  7. }
  8. // 스튜디오 메인 콘텐츠 영역
  9. .studio__content {
  10. flex: 1;
  11. overflow-y: auto;
  12. padding: 32px;
  13. }
  14. // 스튜디오 공통 관리 페이지 스타일
  15. .studio-page {
  16. max-width: 900px;
  17. &__header {
  18. display: flex;
  19. align-items: center;
  20. justify-content: space-between;
  21. margin-bottom: 24px;
  22. }
  23. &__title {
  24. font-size: 1.5rem;
  25. font-weight: 700;
  26. }
  27. &__title-row {
  28. display: flex;
  29. align-items: center;
  30. justify-content: space-between;
  31. }
  32. &__table-wrap {
  33. border: 1px solid hsl(var(--border));
  34. border-radius: 8px;
  35. overflow: hidden;
  36. }
  37. &__table {
  38. width: 100%;
  39. border-collapse: collapse;
  40. th, td {
  41. padding: 12px 16px;
  42. text-align: left;
  43. border-bottom: 1px solid hsl(var(--border));
  44. font-size: 0.875rem;
  45. }
  46. th {
  47. background-color: hsl(var(--muted));
  48. font-weight: 600;
  49. color: hsl(var(--muted-foreground));
  50. }
  51. tr:last-child td {
  52. border-bottom: none;
  53. }
  54. tr:hover td {
  55. background-color: hsl(var(--accent));
  56. }
  57. }
  58. &__badge {
  59. display: inline-block;
  60. padding: 2px 8px;
  61. border-radius: 4px;
  62. font-size: 0.75rem;
  63. font-weight: 600;
  64. &--active {
  65. background-color: var(--color-success-bg);
  66. color: var(--color-success-text);
  67. }
  68. &--inactive {
  69. background-color: hsl(var(--muted));
  70. color: hsl(var(--muted-foreground));
  71. }
  72. }
  73. &__actions {
  74. display: flex;
  75. gap: 6px;
  76. }
  77. &__btn {
  78. padding: 4px 10px;
  79. border-radius: 4px;
  80. font-size: 0.8125rem;
  81. cursor: pointer;
  82. border: 1px solid hsl(var(--border));
  83. background-color: transparent;
  84. color: hsl(var(--foreground));
  85. transition: background-color 0.15s;
  86. &:hover {
  87. background-color: hsl(var(--accent));
  88. }
  89. &--danger {
  90. color: var(--color-danger);
  91. border-color: var(--color-danger-border);
  92. &:hover {
  93. background-color: var(--color-danger-bg);
  94. }
  95. }
  96. &--primary {
  97. background-color: hsl(var(--primary));
  98. color: hsl(var(--primary-foreground));
  99. border-color: hsl(var(--primary));
  100. &:hover {
  101. opacity: 0.9;
  102. background-color: hsl(var(--primary)/0.9);
  103. }
  104. }
  105. }
  106. &__empty {
  107. padding: 40px;
  108. text-align: center;
  109. color: hsl(var(--muted-foreground));
  110. }
  111. }
  112. // 모달
  113. .studio-modal {
  114. position: fixed;
  115. inset: 0;
  116. z-index: 1000;
  117. display: flex;
  118. align-items: center;
  119. justify-content: center;
  120. &__overlay {
  121. position: absolute;
  122. inset: 0;
  123. background-color: var(--overlay-color);
  124. }
  125. &__box {
  126. position: relative;
  127. background-color: hsl(var(--background));
  128. border: 1px solid hsl(var(--border));
  129. border-radius: 12px;
  130. padding: 28px;
  131. width: 100%;
  132. max-width: 540px;
  133. max-height: 90vh;
  134. overflow-y: auto;
  135. z-index: 1;
  136. }
  137. &__title {
  138. font-size: 1.125rem;
  139. font-weight: 700;
  140. margin-bottom: 20px;
  141. }
  142. &__field {
  143. margin-bottom: 16px;
  144. label {
  145. display: block;
  146. font-size: 0.875rem;
  147. font-weight: 500;
  148. margin-bottom: 4px;
  149. color: hsl(var(--foreground));
  150. }
  151. input, select, textarea {
  152. width: 100%;
  153. padding: 8px 12px;
  154. border: 1px solid hsl(var(--border));
  155. border-radius: 6px;
  156. background-color: hsl(var(--background));
  157. color: hsl(var(--foreground));
  158. font-size: 0.875rem;
  159. &:focus {
  160. outline: none;
  161. border-color: hsl(var(--primary));
  162. }
  163. }
  164. input[type="color"] {
  165. padding: 2px 4px;
  166. height: 36px;
  167. cursor: pointer;
  168. }
  169. input[type="checkbox"] {
  170. width: auto;
  171. margin-right: 6px;
  172. }
  173. }
  174. &__field-row {
  175. display: grid;
  176. grid-template-columns: 1fr 1fr;
  177. gap: 12px;
  178. }
  179. &__checkbox-label {
  180. display: flex;
  181. align-items: center;
  182. cursor: pointer;
  183. }
  184. &__footer {
  185. display: flex;
  186. justify-content: center;
  187. gap: 8px;
  188. margin-top: 24px;
  189. }
  190. &__hint {
  191. font-size: 0.75rem;
  192. color: hsl(var(--muted-foreground));
  193. margin-top: 4px;
  194. }
  195. }
  196. // 플레이스홀더 페이지
  197. .studio-placeholder {
  198. display: flex;
  199. flex-direction: column;
  200. align-items: center;
  201. justify-content: center;
  202. min-height: 400px;
  203. color: hsl(var(--muted-foreground));
  204. text-align: center;
  205. gap: 12px;
  206. h1 {
  207. font-size: 1.5rem;
  208. font-weight: 700;
  209. color: hsl(var(--foreground));
  210. }
  211. p {
  212. font-size: 0.9375rem;
  213. }
  214. }