@bwg-ui/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/README.md +106 -0
  2. package/dist/chunks/BwgLargeUploader-ByN1XWV4.js +809 -0
  3. package/dist/chunks/BwgLargeUploader-CU0-MVk4.cjs +1 -0
  4. package/dist/chunks/BwgSpace-CnLM4qcg.js +26 -0
  5. package/dist/chunks/BwgSpace-b0hmM1Ht.cjs +1 -0
  6. package/dist/chunks/QuickServiceToggle-CiCuWfCF.cjs +183 -0
  7. package/dist/chunks/QuickServiceToggle-y7esp1kp.js +15510 -0
  8. package/dist/chunks/ServiceCodeContext--ZnMtjzD.cjs +1 -0
  9. package/dist/chunks/ServiceCodeContext-CDZMr3Mm.js +87 -0
  10. package/dist/chunks/UtilsContext-B16Gh9LL.cjs +1 -0
  11. package/dist/chunks/UtilsContext-BbfZYiMR.js +240 -0
  12. package/dist/chunks/_commonjsHelpers-C6fGbg64.js +6 -0
  13. package/dist/chunks/_commonjsHelpers-DwGv2jUC.cjs +1 -0
  14. package/dist/chunks/codeStore-Dt6j826J.cjs +1 -0
  15. package/dist/chunks/codeStore-bxk_q1sl.js +449 -0
  16. package/dist/chunks/commonUtils-BV6WFv-z.js +628 -0
  17. package/dist/chunks/commonUtils-L9Jgc5y-.cjs +1 -0
  18. package/dist/chunks/favoriteStore-CguRSEcH.js +367 -0
  19. package/dist/chunks/favoriteStore-TgeeY32l.cjs +1 -0
  20. package/dist/chunks/jsx-runtime-CeSfJrVB.cjs +30 -0
  21. package/dist/chunks/jsx-runtime-Dpn_P65e.js +633 -0
  22. package/dist/chunks/messageUtils-9DXOwada.js +117 -0
  23. package/dist/chunks/messageUtils-RjJD_ArW.cjs +1 -0
  24. package/dist/chunks/popupStore-CVD8SPTa.cjs +1 -0
  25. package/dist/chunks/popupStore-Dp_fqtim.js +96 -0
  26. package/dist/chunks/realFormat-Cha7OTd9.cjs +1 -0
  27. package/dist/chunks/realFormat-DRGLFabQ.js +304 -0
  28. package/dist/chunks/serviceConfig-BJBsdee_.js +699 -0
  29. package/dist/chunks/serviceConfig-Cr2P4yr4.cjs +2 -0
  30. package/dist/components/common/BwgButtonGroup.d.ts +31 -0
  31. package/dist/components/common/BwgCmptArea.d.ts +16 -0
  32. package/dist/components/common/BwgConfigProvider.d.ts +10 -0
  33. package/dist/components/common/BwgDrawer.d.ts +20 -0
  34. package/dist/components/common/BwgGrid.d.ts +505 -0
  35. package/dist/components/common/BwgInfoArea.d.ts +8 -0
  36. package/dist/components/common/BwgPopup.d.ts +9 -0
  37. package/dist/components/common/BwgSpace.d.ts +11 -0
  38. package/dist/components/common/BwgTable.d.ts +13 -0
  39. package/dist/components/common/BwgTabs.d.ts +5 -0
  40. package/dist/components/common/BwgTitleBox.d.ts +29 -0
  41. package/dist/components/common/BwgView.d.ts +36 -0
  42. package/dist/components/common/ContentBox.d.ts +19 -0
  43. package/dist/components/common/ContentLayOut.d.ts +13 -0
  44. package/dist/components/common/GlobalConfigProvider.d.ts +9 -0
  45. package/dist/components/common/QuickServiceToggle.d.ts +13 -0
  46. package/dist/components/common/SearchBox.d.ts +16 -0
  47. package/dist/components/common/index.cjs +1 -0
  48. package/dist/components/common/index.d.ts +34 -0
  49. package/dist/components/common/index.js +24 -0
  50. package/dist/components/core/BwgButton.d.ts +6 -0
  51. package/dist/components/core/BwgCheck.d.ts +11 -0
  52. package/dist/components/core/BwgCheckList.d.ts +11 -0
  53. package/dist/components/core/BwgDatePicker.d.ts +10 -0
  54. package/dist/components/core/BwgForm.d.ts +6 -0
  55. package/dist/components/core/BwgFormItem.d.ts +17 -0
  56. package/dist/components/core/BwgInput.d.ts +9 -0
  57. package/dist/components/core/BwgLargeUploader.d.ts +15 -0
  58. package/dist/components/core/BwgMaskedInput.d.ts +20 -0
  59. package/dist/components/core/BwgMaskedPicker.d.ts +11 -0
  60. package/dist/components/core/BwgMultiSelect.d.ts +14 -0
  61. package/dist/components/core/BwgNumber.d.ts +13 -0
  62. package/dist/components/core/BwgRadio.d.ts +8 -0
  63. package/dist/components/core/BwgRangePicker.d.ts +12 -0
  64. package/dist/components/core/BwgSearch.d.ts +16 -0
  65. package/dist/components/core/BwgSelect.d.ts +15 -0
  66. package/dist/components/core/BwgTextArea.d.ts +8 -0
  67. package/dist/components/core/BwgUploader.d.ts +34 -0
  68. package/dist/components/core/index.cjs +1 -0
  69. package/dist/components/core/index.d.ts +36 -0
  70. package/dist/components/core/index.js +21 -0
  71. package/dist/components/guide/BwgComponentGuide.d.ts +2 -0
  72. package/dist/components/guide/BwgDeveloperGuide.d.ts +2 -0
  73. package/dist/components/guide/index.cjs +1 -0
  74. package/dist/components/guide/index.d.ts +2 -0
  75. package/dist/components/guide/index.js +7 -0
  76. package/dist/index.cjs +1 -0
  77. package/dist/index.d.ts +5 -0
  78. package/dist/index.js +291 -0
  79. package/dist/provider/contexts/CommonCodeContext.d.ts +46 -0
  80. package/dist/provider/contexts/SearchBoxContext.d.ts +15 -0
  81. package/dist/provider/contexts/ServiceCodeContext.d.ts +108 -0
  82. package/dist/provider/contexts/UtilsContext.d.ts +194 -0
  83. package/dist/provider/contexts/index.d.ts +4 -0
  84. package/dist/provider/hooks/index.d.ts +2 -0
  85. package/dist/provider/hooks/usePopup.d.ts +17 -0
  86. package/dist/provider/hooks/useViewState.d.ts +14 -0
  87. package/dist/provider/index.cjs +1 -0
  88. package/dist/provider/index.d.ts +2 -0
  89. package/dist/provider/index.js +27 -0
  90. package/dist/public/styles/assets/images/contents/icon/ico-business-trip.svg +21 -0
  91. package/dist/public/styles/assets/images/contents/icon/ico-holiday.svg +23 -0
  92. package/dist/public/styles/assets/images/contents/icon/ico-menu-help.svg +5 -0
  93. package/dist/public/styles/assets/images/contents/icon/ico-overtime.svg +17 -0
  94. package/dist/public/styles/assets/images/contents/icon/ico-quick-tab-move.svg +8 -0
  95. package/dist/public/styles/assets/images/contents/icon/quick tab-text.svg +4 -0
  96. package/dist/public/styles/assets/images/contents/icon/quick-tab-text.svg +4 -0
  97. package/dist/public/test.txt +0 -0
  98. package/dist/stores/codeStore.d.ts +173 -0
  99. package/dist/stores/favoriteStore.d.ts +19 -0
  100. package/dist/stores/index.cjs +1 -0
  101. package/dist/stores/index.d.ts +14 -0
  102. package/dist/stores/index.js +20 -0
  103. package/dist/stores/menuStore.d.ts +52 -0
  104. package/dist/stores/popupStore.d.ts +72 -0
  105. package/dist/stores/userStore.d.ts +36 -0
  106. package/dist/styles/assets/fonts/Roboto/Roboto-bold.eot +2751 -0
  107. package/dist/styles/assets/fonts/Roboto/Roboto-bold.svg +626 -0
  108. package/dist/styles/assets/fonts/Roboto/Roboto-bold.ttf +2755 -0
  109. package/dist/styles/assets/fonts/Roboto/Roboto-bold.woff +2755 -0
  110. package/dist/styles/assets/fonts/Roboto/Roboto-bold.woff2 +2754 -0
  111. package/dist/styles/assets/fonts/Roboto/Roboto-medium.eot +0 -0
  112. package/dist/styles/assets/fonts/Roboto/Roboto-medium.svg +1064 -0
  113. package/dist/styles/assets/fonts/Roboto/Roboto-medium.ttf +0 -0
  114. package/dist/styles/assets/fonts/Roboto/Roboto-medium.woff +0 -0
  115. package/dist/styles/assets/fonts/Roboto/Roboto-medium.woff2 +2754 -0
  116. package/dist/styles/assets/fonts/Roboto/Roboto-regular.eot +0 -0
  117. package/dist/styles/assets/fonts/Roboto/Roboto-regular.svg +1063 -0
  118. package/dist/styles/assets/fonts/Roboto/Roboto-regular.ttf +1597 -0
  119. package/dist/styles/assets/fonts/Roboto/Roboto-regular.woff +1597 -0
  120. package/dist/styles/assets/fonts/Roboto/Roboto-regular.woff2 +1597 -0
  121. package/dist/styles/assets/fonts/material/MaterialIcons-Regular.eot +1594 -0
  122. package/dist/styles/assets/fonts/material/MaterialIcons-Regular.ttf +0 -0
  123. package/dist/styles/assets/fonts/material/MaterialIcons-Regular.woff +1594 -0
  124. package/dist/styles/assets/fonts/material/MaterialIcons-Regular.woff2 +1594 -0
  125. package/dist/styles/assets/fonts/material/MaterialSymbolsOutlined.woff2 +0 -0
  126. package/dist/styles/assets/fonts/meiryo/meiryo.ttf +0 -0
  127. package/dist/styles/assets/fonts/meiryo/meiryob.ttf +0 -0
  128. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothic.eot +0 -0
  129. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothic.ttf +0 -0
  130. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothic.woff +0 -0
  131. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicBold.eot +0 -0
  132. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicBold.ttf +0 -0
  133. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicBold.woff +0 -0
  134. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicWeb.eot +0 -0
  135. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicWeb.ttf +0 -0
  136. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicWeb.woff +0 -0
  137. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicWebBold.eot +0 -0
  138. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicWebBold.ttf +0 -0
  139. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicWebBold.woff +0 -0
  140. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicWebLight.eot +0 -0
  141. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicWebLight.ttf +0 -0
  142. package/dist/styles/assets/fonts/nanumBarun/NanumBarunGothicWebLight.woff +0 -0
  143. package/dist/styles/assets/fonts/notokr/NotoSans-Bold.eot +2314 -0
  144. package/dist/styles/assets/fonts/notokr/NotoSans-Bold.otf +2314 -0
  145. package/dist/styles/assets/fonts/notokr/NotoSans-Bold.svg +47 -0
  146. package/dist/styles/assets/fonts/notokr/NotoSans-Bold.ttf +2301 -0
  147. package/dist/styles/assets/fonts/notokr/NotoSans-Bold.woff +2314 -0
  148. package/dist/styles/assets/fonts/notokr/NotoSans-Bold.woff2 +2315 -0
  149. package/dist/styles/assets/fonts/notokr/NotoSans-Light.otf +0 -0
  150. package/dist/styles/assets/fonts/notokr/NotoSans-Light.woff +0 -0
  151. package/dist/styles/assets/fonts/notokr/NotoSans-Light.woff2 +0 -0
  152. package/dist/styles/assets/fonts/notokr/NotoSans-Medium.eot +0 -0
  153. package/dist/styles/assets/fonts/notokr/NotoSans-Medium.otf +0 -0
  154. package/dist/styles/assets/fonts/notokr/NotoSans-Medium.svg +47 -0
  155. package/dist/styles/assets/fonts/notokr/NotoSans-Medium.ttf +0 -0
  156. package/dist/styles/assets/fonts/notokr/NotoSans-Medium.woff +0 -0
  157. package/dist/styles/assets/fonts/notokr/NotoSans-Medium.woff2 +0 -0
  158. package/dist/styles/assets/fonts/notokr/NotoSans-Regular.eot +0 -0
  159. package/dist/styles/assets/fonts/notokr/NotoSans-Regular.otf +0 -0
  160. package/dist/styles/assets/fonts/notokr/NotoSans-Regular.svg +47 -0
  161. package/dist/styles/assets/fonts/notokr/NotoSans-Regular.ttf +2299 -0
  162. package/dist/styles/assets/fonts/notokr/NotoSans-Regular.woff +0 -0
  163. package/dist/styles/assets/fonts/notokr/NotoSans-Regular.woff2 +0 -0
  164. package/dist/styles/assets/fonts/poppins/Poppins-ExtraLight.eot +0 -0
  165. package/dist/styles/assets/fonts/poppins/Poppins-ExtraLight.ttf +0 -0
  166. package/dist/styles/assets/fonts/poppins/Poppins-ExtraLight.woff +0 -0
  167. package/dist/styles/assets/fonts/poppins/Poppins-ExtraLight.woff2 +0 -0
  168. package/dist/styles/assets/fonts/poppins/Poppins-Light.eot +0 -0
  169. package/dist/styles/assets/fonts/poppins/Poppins-Light.ttf +0 -0
  170. package/dist/styles/assets/fonts/poppins/Poppins-Light.woff +0 -0
  171. package/dist/styles/assets/fonts/poppins/Poppins-Light.woff2 +0 -0
  172. package/dist/styles/assets/fonts/poppins/Poppins-Medium.eot +0 -0
  173. package/dist/styles/assets/fonts/poppins/Poppins-Medium.ttf +0 -0
  174. package/dist/styles/assets/fonts/poppins/Poppins-Medium.woff +0 -0
  175. package/dist/styles/assets/fonts/poppins/Poppins-Medium.woff2 +0 -0
  176. package/dist/styles/assets/fonts/poppins/Poppins-Regular.eot +0 -0
  177. package/dist/styles/assets/fonts/poppins/Poppins-Regular.ttf +0 -0
  178. package/dist/styles/assets/fonts/poppins/Poppins-Regular.woff +0 -0
  179. package/dist/styles/assets/fonts/poppins/Poppins-Regular.woff2 +0 -0
  180. package/dist/styles/assets/fonts/poppins/Poppins-SemiBold.eot +0 -0
  181. package/dist/styles/assets/fonts/poppins/Poppins-SemiBold.ttf +0 -0
  182. package/dist/styles/assets/fonts/poppins/Poppins-SemiBold.woff +0 -0
  183. package/dist/styles/assets/fonts/poppins/Poppins-SemiBold.woff2 +0 -0
  184. package/dist/styles/assets/fonts/pretendard/Pretendard-Black.woff2 +0 -0
  185. package/dist/styles/assets/fonts/pretendard/Pretendard-Bold.woff2 +0 -0
  186. package/dist/styles/assets/fonts/pretendard/Pretendard-ExtraBold.woff2 +0 -0
  187. package/dist/styles/assets/fonts/pretendard/Pretendard-ExtraLight.woff2 +0 -0
  188. package/dist/styles/assets/fonts/pretendard/Pretendard-Light.woff2 +0 -0
  189. package/dist/styles/assets/fonts/pretendard/Pretendard-Medium.woff2 +0 -0
  190. package/dist/styles/assets/fonts/pretendard/Pretendard-Regular.woff2 +0 -0
  191. package/dist/styles/assets/fonts/pretendard/Pretendard-SemiBold.woff2 +0 -0
  192. package/dist/styles/assets/fonts/pretendard/Pretendard-Thin.woff2 +0 -0
  193. package/dist/styles/assets/images/README.md +144 -0
  194. package/dist/styles/assets/images/backgrounds/landing_bg.png +0 -0
  195. package/dist/styles/assets/images/backgrounds/login_bg_01.png +0 -0
  196. package/dist/styles/assets/images/backgrounds/login_bg_02.png +0 -0
  197. package/dist/styles/assets/images/contents/btn/btn-down-on.png +0 -0
  198. package/dist/styles/assets/images/contents/btn/btn-down.png +0 -0
  199. package/dist/styles/assets/images/contents/btn/btn-left-on.png +0 -0
  200. package/dist/styles/assets/images/contents/btn/btn-left.png +0 -0
  201. package/dist/styles/assets/images/contents/btn/btn-right-on.png +0 -0
  202. package/dist/styles/assets/images/contents/btn/btn-right.png +0 -0
  203. package/dist/styles/assets/images/contents/btn/btn-up-on.png +0 -0
  204. package/dist/styles/assets/images/contents/btn/btn-up.png +0 -0
  205. package/dist/styles/assets/images/contents/icon/ico-business-trip.svg +21 -0
  206. package/dist/styles/assets/images/contents/icon/ico-holiday.svg +23 -0
  207. package/dist/styles/assets/images/contents/icon/ico-menu-help.svg +5 -0
  208. package/dist/styles/assets/images/contents/icon/ico-overtime.svg +17 -0
  209. package/dist/styles/assets/images/contents/icon/ico-quick-tab-move.svg +4 -0
  210. package/dist/styles/assets/images/contents/icon/ico-setting.svg +4 -0
  211. package/dist/styles/assets/images/contents/icon/ico_blue.png +0 -0
  212. package/dist/styles/assets/images/contents/icon/ico_red.png +0 -0
  213. package/dist/styles/assets/images/contents/icon/quick tab-text.svg +4 -0
  214. package/dist/styles/assets/images/contents/icon/quick-tab-text.svg +4 -0
  215. package/dist/styles/assets/images/logos/KRX Logo.svg +22 -0
  216. package/dist/styles/assets/images/logos/bwg-logo-blue.png +0 -0
  217. package/dist/styles/assets/images/logos/krx-logo-x2.png +0 -0
  218. package/dist/styles/assets/images/logos/krx-logo.png +0 -0
  219. package/dist/styles/assets/react.svg +1 -0
  220. package/dist/styles/components.css +785 -0
  221. package/dist/styles/fonts.css +101 -0
  222. package/dist/styles/global.css +52 -0
  223. package/dist/styles/index.css +41 -0
  224. package/dist/styles/layout.css +1132 -0
  225. package/dist/styles/login.css +151 -0
  226. package/dist/styles/popup.css +30 -0
  227. package/dist/styles/renderers.css +190 -0
  228. package/dist/styles/size.css +4019 -0
  229. package/dist/styles/variables.css +106 -0
  230. package/dist/test.txt +0 -0
  231. package/dist/types/images.d.ts +25 -0
  232. package/dist/utils/apiUtils.d.ts +85 -0
  233. package/dist/utils/arrayUtils.d.ts +34 -0
  234. package/dist/utils/commonUtils.d.ts +54 -0
  235. package/dist/utils/cookieUtils.d.ts +4 -0
  236. package/dist/utils/dateUtils.d.ts +26 -0
  237. package/dist/utils/envUtils.d.ts +8 -0
  238. package/dist/utils/imageUtils.d.ts +31 -0
  239. package/dist/utils/index.cjs +1 -0
  240. package/dist/utils/index.d.ts +14 -0
  241. package/dist/utils/index.js +211 -0
  242. package/dist/utils/messageUtils.d.ts +65 -0
  243. package/dist/utils/notificationUtils.d.ts +51 -0
  244. package/dist/utils/objectUtils.d.ts +27 -0
  245. package/dist/utils/realFormat.d.ts +242 -0
  246. package/dist/utils/serviceConfig.d.ts +35 -0
  247. package/dist/utils/stringUtils.d.ts +142 -0
  248. package/dist/utils/userUtils.d.ts +19 -0
  249. package/package.json +123 -0
  250. package/public/styles/assets/images/contents/icon/ico-business-trip.svg +21 -0
  251. package/public/styles/assets/images/contents/icon/ico-holiday.svg +23 -0
  252. package/public/styles/assets/images/contents/icon/ico-menu-help.svg +5 -0
  253. package/public/styles/assets/images/contents/icon/ico-overtime.svg +17 -0
  254. package/public/styles/assets/images/contents/icon/ico-quick-tab-move.svg +8 -0
  255. package/public/styles/assets/images/contents/icon/quick tab-text.svg +4 -0
  256. package/public/styles/assets/images/contents/icon/quick-tab-text.svg +4 -0
  257. package/public/test.txt +0 -0
@@ -0,0 +1,1132 @@
1
+ /* 메인 레이아웃 스타일 */
2
+ .main-layout {
3
+ min-height: 100vh;
4
+ overflow: hidden;
5
+ }
6
+
7
+ /* 헤더 스타일 */
8
+ .main-header {
9
+ height: 50px !important;
10
+ line-height: 50px !important;
11
+ background: var(--header-bg);
12
+ padding: 0 30px 0 20px;
13
+ border-bottom: 1px solid var(--border-color);
14
+ display: flex;
15
+ justify-content: space-between;
16
+ align-items: center;
17
+ z-index: 1000;
18
+ gap: 24px;
19
+ color: var(--header-text);
20
+ }
21
+
22
+ .header-search {
23
+ flex-shrink: 0;
24
+ }
25
+
26
+ .header-title {
27
+ font-size: 18px;
28
+ font-weight: var(--font-weight-semibold);
29
+ color: var(--text-primary);
30
+ flex: 1;
31
+ text-align: center;
32
+ }
33
+
34
+ .header-user {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: 14px;
38
+ }
39
+ .header-user .ant-btn:hover {
40
+ background: none;
41
+ }
42
+ .header-user-info {
43
+ font-size: 14px;
44
+ color: #666;
45
+ }
46
+ .header-logout {
47
+ cursor: pointer;
48
+ }
49
+ .header-avatar {
50
+ width: 30px;
51
+ height: 30px;
52
+ }
53
+
54
+
55
+ /* 헤더 로고 영역 */
56
+ .header-logo {
57
+ display: flex;
58
+ align-items: center;
59
+ min-width: 200px;
60
+ }
61
+
62
+ .logo-container {
63
+ display: flex;
64
+ align-items: center;
65
+ height: 100%;
66
+ gap: 10px;
67
+ }
68
+
69
+ .header-logo-image {
70
+ width: 81px;
71
+ height: 40px;
72
+ object-fit: contain;
73
+ }
74
+
75
+ .logo-placeholder {
76
+ font-size: 18px;
77
+ font-weight: var(--font-weight-bold);
78
+ color: var(--header-text);
79
+ padding: 8px 12px;
80
+ border: 2px dashed var(--header-text);
81
+ border-radius: var(--border-radius-sm);
82
+ opacity: 0.7;
83
+ }
84
+
85
+
86
+ /* 헤더 타이틀 영역 */
87
+ .header-title {
88
+ flex: 1;
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ font-size: var(--font-size-md);
93
+ font-weight: var(--font-weight-medium);
94
+ color: var(--header-text);
95
+ }
96
+
97
+ /* 헤더 사용자 영역 */
98
+ .header-user {
99
+ display: flex;
100
+ align-items: center;
101
+ gap: 12px;
102
+ min-width: 200px;
103
+ justify-content: flex-end;
104
+ }
105
+
106
+ .main-header .ant-btn {
107
+ width: 30px;
108
+ height: 30px;
109
+ }
110
+
111
+
112
+ /* 사이더 스타일 */
113
+ .main-sider {
114
+ height: calc(100vh - 50px); /* 헤더 높이(50px)를 제외 */
115
+ overflow: visible; /* 토글 버튼이 짤리지 않도록 visible로 변경 */
116
+ display: flex;
117
+ flex-direction: column;
118
+ background-color: var(--sidebar-bg) !important;
119
+ position: relative; /* 토글 버튼의 absolute 포지셔닝을 위해 */
120
+ border-right: 1px solid var(--border-color);
121
+ }
122
+
123
+ /* .sider-logo {
124
+ height: var(--sidebar-logo-height);
125
+ margin: var(--spacing-md);
126
+ background: var(--bg-secondary);
127
+ color: var(--text-primary);
128
+ text-align: center;
129
+ line-height: var(--sidebar-logo-height);
130
+ font-weight: bold;
131
+ font-size: var(--font-size-lg);
132
+ border-radius: var(--border-radius-md);
133
+ transition: var(--transition-normal);
134
+ box-shadow: var(--shadow-light);
135
+ }
136
+
137
+ .sider-logo:hover {
138
+ background: var(--bg-tertiary);
139
+ transform: scale(1.05);
140
+ } */
141
+
142
+ .sider-content {
143
+ flex: 1;
144
+ display: flex;
145
+ flex-direction: column;
146
+ overflow: hidden;
147
+ }
148
+
149
+ .sider-menu {
150
+ border-inline-end: none !important;
151
+ flex: 1;
152
+ overflow-y: auto; /* 필요할 때만 스크롤바 표시 */
153
+ overflow-x: hidden;
154
+ max-height: calc(100vh - 160px); /* 헤더(50px) + 로고 높이 + 마진 고려 */
155
+ padding-right: 0px !important; /* 스크롤바 너비만큼 여백 확보 */
156
+ box-sizing: border-box; /* 패딩을 포함한 박스 모델 */
157
+ }
158
+ .sider-menu.ant-menu-inline-collapsed {
159
+ max-height: calc(100vh - 50px);
160
+ }
161
+ .sider-segmented {
162
+ padding: 5px;
163
+ background-color: var(--sidebar-segmented-bg);
164
+ border-radius: var(--border-radius-sm);
165
+ font-size: 13px;
166
+ color: #777;
167
+ .ant-segmented-group {
168
+ gap: 5px;
169
+ }
170
+ .ant-segmented-item-selected {
171
+ color: var(--text-high);
172
+ font-weight: var(--font-weight-semibold);
173
+ }
174
+ }
175
+ .sider-search-ipt {
176
+ background: #F8F8F8;
177
+ border-radius: var(--border-radius-xl);
178
+ border: 0;
179
+ color: #8B8B8B;
180
+ font-size: 13px;
181
+ font-weight: var(--font-weight-medium);
182
+ .anticon-search svg {
183
+ width: 20px;
184
+ height: 20px;
185
+ }
186
+ }
187
+ /* Ant Design 메뉴 스타일 오버라이드 */
188
+
189
+ .sider-menu .ant-menu-item {
190
+ height: 30px;
191
+ transition: all 0.3s ease;
192
+ }
193
+
194
+ .sider-menu .ant-menu-submenu-title {
195
+ height: 30px !important;
196
+ line-height: 30px !important;
197
+ }
198
+
199
+ .sider-menu .ant-menu-submenu-title:hover {
200
+ background-color: unset !important;
201
+ }
202
+
203
+ /* 사이드바 테마 적용 */
204
+ .ant-layout-sider {
205
+ background-color: var(--sidebar-bg) !important;
206
+ }
207
+ .ant-layout-sider-collapsed {
208
+ flex: 0 0 50px !important;
209
+ max-width: 50px !important;
210
+ min-width: 50px !important;
211
+ width: 50px !important;
212
+ padding: 10px 0;
213
+ }
214
+
215
+ .ant-menu-dark {
216
+ background-color: var(--sidebar-bg) !important;
217
+ }
218
+
219
+ /* 사이드바 메뉴 트리 전체 테마 적용 */
220
+ .ant-layout-sider .ant-menu {
221
+ /* background-color: var(--sidebar-bg) !important; */
222
+ }
223
+
224
+ .ant-layout-sider .ant-menu-submenu {
225
+ border-radius: 0;
226
+ margin: 0;
227
+ width: 100%;
228
+ }
229
+
230
+ .ant-layout-sider .ant-menu-item {
231
+ /* background-color: var(--sidebar-bg) !important; */
232
+ /* color: var(--sidebar-text) !important; */
233
+ }
234
+
235
+ .ant-layout-sider .ant-menu-item:hover {
236
+ background-color: unset !important;
237
+ }
238
+
239
+ .ant-layout-sider .ant-menu-item-selected {
240
+ background-color: unset !important;
241
+ }
242
+
243
+ .ant-layout-sider .ant-menu-submenu-title:hover {
244
+ background-color: unset !important;
245
+ }
246
+
247
+ .ant-layout-sider .ant-menu-submenu-open > .ant-menu-submenu-title {
248
+ /* background-color: rgba(255, 255, 255, 0.15) !important; */
249
+ }
250
+
251
+ .ant-layout-sider .ant-menu-sub.ant-menu-inline {
252
+ background: transparent !important;
253
+ }
254
+ /* 메뉴 공통 스타일 */
255
+ .sider-menu .ant-menu-item,
256
+ .sider-menu .ant-menu-submenu-title {
257
+ margin: 0;
258
+ width: 100%;
259
+ border-radius: 0;
260
+ }
261
+ .sider-menu .ant-menu-item-active.ant-menu-item-only-child {
262
+ background-color: var(--sidebar-menu-active-bg);
263
+ &:hover {
264
+ background-color: var(--sidebar-menu-active-bg) !important;
265
+ }
266
+ &::before {
267
+ content: '';
268
+ position: absolute;
269
+ top: 0;
270
+ left: 0;
271
+ width: 3px;
272
+ height: 100%;
273
+ background: #5954FC;
274
+ }
275
+ .ant-menu-title-content {
276
+ font-weight: var(--font-weight-medium);
277
+ color: var(--sidebar-primary-text);
278
+ }
279
+ }
280
+ /* 1레벨 스타일 */
281
+ .sider-menu > .ant-menu-item > .ant-menu-item-icon + span,
282
+ .sider-menu > .ant-menu-submenu > .ant-menu-submenu-title .anticon + span {
283
+ margin-inline-start: 6px;
284
+ }
285
+ /* 1레벨 활성화 스타일 */
286
+ .ant-layout-sider .sider-menu > .ant-menu-item > .ant-menu-item-icon,
287
+ .ant-layout-sider .sider-menu > .ant-menu-submenu > .ant-menu-submenu-title span.anticon {
288
+ width: 30px;
289
+ height: 30px;
290
+ display: flex;
291
+ align-items: center;
292
+ justify-content: center;
293
+ border-radius: 5px;
294
+ }
295
+ .ant-layout-sider .sider-menu > .ant-menu-item-active > .ant-menu-item-icon,
296
+ .ant-layout-sider .sider-menu > .ant-menu-submenu-open > .ant-menu-submenu-title span.anticon,
297
+ .ant-layout-sider .sider-menu > .ant-menu-submenu-active > .ant-menu-submenu-title span.anticon {
298
+ background: var(--sidebar-active-icon-bg);
299
+ color: var(--primary-color);
300
+ }
301
+ .ant-layout-sider .sider-menu > .ant-menu-item-active > .ant-menu-title-content,
302
+ .ant-layout-sider .sider-menu > .ant-menu-submenu-open > .ant-menu-submenu-title span.ant-menu-title-content,
303
+ .ant-layout-sider .sider-menu > .ant-menu-submenu-active > .ant-menu-submenu-title span.ant-menu-title-content {
304
+ color: var(--primary-color);
305
+ font-weight: var(--font-weight-semibold);
306
+ }
307
+ .ant-layout-sider .sider-menu > .ant-menu-submenu-open > .ant-menu-submenu-title {
308
+ margin-bottom: 5px !important;
309
+ }
310
+ .ant-layout-sider .sider-menu > .ant-menu-item,
311
+ .ant-layout-sider .sider-menu > .ant-menu-submenu {
312
+ margin-bottom: 15px;
313
+ }
314
+ /* 2레벨 ul 스타일 */
315
+ .ant-layout-sider .sider-menu > .ant-menu-submenu-open > .ant-menu-sub {
316
+ background-color: var(--sidebar-open-menu-group-bg) !important;
317
+ border-top: 1px solid var(--border-color) !important;
318
+ border-bottom: 1px solid var(--border-color) !important;
319
+ padding: 10px 0;
320
+ }
321
+ .ant-layout-sider .sider-menu > .ant-menu-submenu-open > .ant-menu-sub > .ant-menu-submenu-open > .ant-menu-submenu-title {
322
+ margin-bottom: 5px;
323
+ }
324
+ /* 열린 메뉴 상위 텍스트 색상 */
325
+ .ant-menu-submenu-open > .ant-menu-submenu-title .ant-menu-title-content {
326
+ color: var(--text-high);
327
+ font-weight: var(--font-weight-semibold);
328
+ }
329
+
330
+ /* 서브메뉴 내부 모든 요소 배경색 */
331
+ .ant-layout-sider .ant-menu-sub .ant-menu-item,
332
+ .ant-layout-sider .ant-menu-sub .ant-menu-submenu,
333
+ .ant-layout-sider .ant-menu-sub .ant-menu-submenu-title {
334
+ /* background-color: var(--sidebar-bg) !important; */
335
+ }
336
+
337
+ /* 메뉴 트리 전체 배경색 강제 적용 */
338
+ .ant-layout-sider .ant-menu-dark .ant-menu-sub,
339
+ .ant-layout-sider .ant-menu-dark .ant-menu-sub .ant-menu-item,
340
+ .ant-layout-sider .ant-menu-dark .ant-menu-sub .ant-menu-submenu,
341
+ .ant-layout-sider .ant-menu-dark .ant-menu-sub .ant-menu-submenu-title {
342
+ /* background-color: var(--sidebar-bg) !important; */
343
+ border-radius: 0;
344
+ }
345
+
346
+ /* 메뉴 레벨별 색상 깊이감 */
347
+ /* 1레벨 메뉴 - 가장 진함 */
348
+ .ant-layout-sider .ant-menu-item,
349
+ .ant-layout-sider .ant-menu-submenu-title {
350
+ /* color: var(--sidebar-text) !important; */
351
+ color: var(--text-secondary);
352
+ }
353
+
354
+ /* 1레벨 active 스타일 */
355
+ .ant-layout-sider .ant-menu-item,
356
+ .ant-layout-sider .ant-menu-submenu-title
357
+ .ant-layout-sider .sider-menu > .ant-menu-submenu-open > .ant-menu-submenu-title span {
358
+ color: var(--primary-color);
359
+ &.ant-menu-title-content {
360
+ font-weight: var(--font-weight-semibold);
361
+ }
362
+ }
363
+
364
+
365
+ /* 2레벨 메뉴*/
366
+ .ant-layout-sider .ant-menu-sub .ant-menu-item,
367
+ .ant-layout-sider .ant-menu-sub .ant-menu-submenu-title {
368
+ /* padding-left: 54px !important; */
369
+ }
370
+
371
+ /* 3레벨 메뉴*/
372
+ .ant-layout-sider .ant-menu-sub .ant-menu-sub .ant-menu-item,
373
+ .ant-layout-sider .ant-menu-sub .ant-menu-sub .ant-menu-submenu-title {
374
+ font-size: 13px !important;
375
+ /* padding-left: 81px !important; */
376
+ }
377
+
378
+ /* 4레벨 메뉴*/
379
+ .ant-layout-sider .ant-menu-sub .ant-menu-sub .ant-menu-sub .ant-menu-item,
380
+ .ant-layout-sider
381
+ .ant-menu-sub
382
+ .ant-menu-sub
383
+ .ant-menu-sub
384
+ .ant-menu-submenu-title {
385
+ font-size: 13px !important;
386
+ }
387
+
388
+ /* 메뉴 아이콘 색상 */
389
+ .ant-layout-sider .ant-menu-item .anticon,
390
+ .ant-layout-sider .ant-menu-submenu-title .anticon {
391
+ color: #444 !important;
392
+ }
393
+
394
+ /* 메뉴 텍스트 색상 */
395
+ .ant-layout-sider .ant-menu-item,
396
+ .ant-layout-sider .ant-menu-submenu-title {
397
+ color: var(--text-secondary) !important;
398
+ }
399
+
400
+ /* 메뉴 링크 색상 */
401
+ .ant-layout-sider .ant-menu-item a,
402
+ .ant-layout-sider .ant-menu-submenu-title a {
403
+ color: var(--sidebar-text) !important;
404
+ }
405
+
406
+ /* 선택된 메뉴 아이템 */
407
+ .ant-layout-sider .ant-menu-item-selected,
408
+ .ant-layout-sider .ant-menu-item-selected > a {
409
+ /* color: #6449FC !important; */
410
+ /* background-color: rgba(255, 255, 255, 0.2) !important; */
411
+ }
412
+
413
+ /* 호버 상태 - 모든 레벨에 적용 */
414
+ .ant-layout-sider .ant-menu-item:hover,
415
+ .ant-layout-sider .ant-menu-submenu-title:hover {
416
+ /* color: var(--sidebar-text) !important; */
417
+ /* background-color: rgba(255, 255, 255, 0.1) !important; */
418
+ }
419
+
420
+ /* 서브메뉴 내부 호버 상태 */
421
+ .ant-layout-sider .ant-menu-sub .ant-menu-item:hover,
422
+ .ant-layout-sider .ant-menu-sub .ant-menu-submenu-title:hover {
423
+ /* color: var(--sidebar-text) !important; */
424
+ /* background-color: rgba(255, 255, 255, 0.1) !important; */
425
+ }
426
+
427
+ /* 3레벨 서브메뉴 내부 호버 상태 */
428
+ .ant-layout-sider .ant-menu-sub .ant-menu-sub .ant-menu-item:hover,
429
+ .ant-layout-sider .ant-menu-sub .ant-menu-sub .ant-menu-submenu-title:hover {
430
+ color: var(--sidebar-primary-text);
431
+ background-color: var(--sidebar-menu-active-bg);
432
+ }
433
+
434
+ /* 4레벨 서브메뉴 내부 호버 상태 */
435
+ .ant-layout-sider
436
+ .ant-menu-sub
437
+ .ant-menu-sub
438
+ .ant-menu-sub
439
+ .ant-menu-item:hover,
440
+ .ant-layout-sider
441
+ .ant-menu-sub
442
+ .ant-menu-sub
443
+ .ant-menu-sub
444
+ .ant-menu-submenu-title:hover {
445
+ color: var(--sidebar-primary-text);
446
+ background-color: var(--sidebar-menu-active-bg);
447
+ }
448
+
449
+ /* 라이트 테마 호버 (어두운 색상) */
450
+ .ant-layout-sider[data-theme='light'] .ant-menu-item:hover,
451
+ .ant-layout-sider[data-theme='light'] .ant-menu-submenu-title:hover,
452
+ .ant-layout-sider[data-theme='light'] .ant-menu-sub .ant-menu-item:hover,
453
+ .ant-layout-sider[data-theme='light']
454
+ .ant-menu-sub
455
+ .ant-menu-submenu-title:hover,
456
+ .ant-layout-sider[data-theme='light']
457
+ .ant-menu-sub
458
+ .ant-menu-sub
459
+ .ant-menu-item:hover,
460
+ .ant-layout-sider[data-theme='light']
461
+ .ant-menu-sub
462
+ .ant-menu-sub
463
+ .ant-menu-submenu-title:hover,
464
+ .ant-layout-sider[data-theme='light']
465
+ .ant-menu-sub
466
+ .ant-menu-sub
467
+ .ant-menu-sub
468
+ .ant-menu-item:hover,
469
+ .ant-layout-sider[data-theme='light']
470
+ .ant-menu-sub
471
+ .ant-menu-sub
472
+ .ant-menu-sub
473
+ .ant-menu-submenu-title:hover {
474
+ background-color: rgba(0, 0, 0, 0.1) !important;
475
+ }
476
+
477
+ /* 모던 테마 호버 (어두운 색상) */
478
+ .ant-layout-sider[data-theme='modern'] .ant-menu-item:hover,
479
+ .ant-layout-sider[data-theme='modern'] .ant-menu-submenu-title:hover,
480
+ .ant-layout-sider[data-theme='modern'] .ant-menu-sub .ant-menu-item:hover,
481
+ .ant-layout-sider[data-theme='modern']
482
+ .ant-menu-sub
483
+ .ant-menu-submenu-title:hover,
484
+ .ant-layout-sider[data-theme='modern']
485
+ .ant-menu-sub
486
+ .ant-menu-sub
487
+ .ant-menu-item:hover,
488
+ .ant-layout-sider[data-theme='modern']
489
+ .ant-menu-sub
490
+ .ant-menu-sub
491
+ .ant-menu-submenu-title:hover,
492
+ .ant-layout-sider[data-theme='modern']
493
+ .ant-menu-sub
494
+ .ant-menu-sub
495
+ .ant-menu-sub
496
+ .ant-menu-item:hover,
497
+ .ant-layout-sider[data-theme='modern']
498
+ .ant-menu-sub
499
+ .ant-menu-sub
500
+ .ant-menu-sub
501
+ .ant-menu-submenu-title:hover {
502
+ background-color: rgba(0, 0, 0, 0.1) !important;
503
+ }
504
+
505
+ /* 메뉴 내부 모든 텍스트 강제 적용 */
506
+ .ant-layout-sider .ant-menu * {
507
+ /* color: var(--sidebar-text) !important; */
508
+ }
509
+
510
+ /* 메뉴 아이템 내부 텍스트 */
511
+ .ant-layout-sider .ant-menu-item span,
512
+ .ant-layout-sider .ant-menu-submenu-title span {
513
+ overflow: hidden;
514
+ white-space: nowrap;
515
+ text-overflow: ellipsis;
516
+ }
517
+
518
+ /* 강제로 모든 메뉴 텍스트 색상 적용 */
519
+ .ant-layout-sider .ant-menu-dark .ant-menu-item,
520
+ .ant-layout-sider .ant-menu-dark .ant-menu-submenu-title,
521
+ .ant-layout-sider .ant-menu-dark .ant-menu-item a,
522
+ .ant-layout-sider .ant-menu-dark .ant-menu-submenu-title a,
523
+ .ant-layout-sider .ant-menu-dark .ant-menu-item span,
524
+ .ant-layout-sider .ant-menu-dark .ant-menu-submenu-title span {
525
+ /* color: var(--sidebar-text) !important; */
526
+ }
527
+
528
+ /* 선택된 메뉴 아이템 강제 적용 */
529
+ .ant-layout-sider .ant-menu-dark .ant-menu-item-selected,
530
+ .ant-layout-sider .ant-menu-dark .ant-menu-item-selected > a,
531
+ .ant-layout-sider .ant-menu-dark .ant-menu-item-selected > span {
532
+ /* color: var(--sidebar-text) !important; */
533
+ }
534
+
535
+ /* 선택된 메뉴 아이템 - 모든 레벨에 적용 */
536
+ .ant-layout-sider .ant-menu-item-selected,
537
+ .ant-layout-sider .ant-menu-item-selected > a {
538
+ color: var(--sidebar-primary-text);
539
+ background-color: var(--sidebar-menu-active-bg);
540
+ }
541
+
542
+ /* 서브메뉴 내부 선택된 아이템 */
543
+ .ant-layout-sider .ant-menu-sub .ant-menu-item-selected,
544
+ .ant-layout-sider .ant-menu-sub .ant-menu-item-selected > a {
545
+ color: var(--sidebar-primary-text);
546
+ background-color: var(--sidebar-menu-active-bg);
547
+ }
548
+
549
+ /* 3레벨 서브메뉴 내부 선택된 아이템 */
550
+ .ant-layout-sider .ant-menu-sub .ant-menu-sub .ant-menu-item-selected,
551
+ .ant-layout-sider .ant-menu-sub .ant-menu-sub .ant-menu-item-selected > a {
552
+ color: var(--sidebar-primary-text);
553
+ background-color: var(--sidebar-menu-active-bg);
554
+ }
555
+
556
+ /* 4레벨 서브메뉴 내부 선택된 아이템 */
557
+ .ant-layout-sider
558
+ .ant-menu-sub
559
+ .ant-menu-sub
560
+ .ant-menu-sub
561
+ .ant-menu-item-selected,
562
+ .ant-layout-sider
563
+ .ant-menu-sub
564
+ .ant-menu-sub
565
+ .ant-menu-sub
566
+ .ant-menu-item-selected
567
+ > a {
568
+ color: var(--sidebar-primary-text);
569
+ background-color: var(--sidebar-menu-active-bg);
570
+ }
571
+
572
+ /* 메뉴 하위 레이아웃 변경 */
573
+ .sider-content .sider-menu > .ant-menu-item:not(.ant-menu-submenu-vertical) {
574
+ padding-left: 10px !important;
575
+ }
576
+ .sider-content .sider-menu > .ant-menu-submenu:not(.ant-menu-submenu-vertical) > .ant-menu-submenu-title {
577
+ margin-bottom: 15px;
578
+ padding-left: 10px !important;
579
+ }
580
+
581
+ /* 3~4레벨 텍스트 꾸밈 요소 */
582
+ .sider-content .sider-menu .ant-menu-title-content {
583
+ height: 100%;
584
+ line-height: 30px;
585
+ overflow: visible !important;
586
+ }
587
+ .sider-content .sider-menu .ant-menu-item.ant-menu-item-only-child .ant-menu-title-content > div {
588
+ position: relative;
589
+ &::before {
590
+ content: '';
591
+ position: absolute;
592
+ top: 50%;
593
+ left: -19px;
594
+ width: 6px;
595
+ height: 1px;
596
+ background-color: #B1AEC4;
597
+ }
598
+ }
599
+ .sider-content .sider-menu .ant-menu-item-active.ant-menu-item-only-child .ant-menu-title-content > div::before {
600
+ background-color: var(--sidebar-primary-text);
601
+ }
602
+
603
+ /* 사이드바 축소 스타일 */
604
+ .sider-menu .ant-menu-submenu-vertical .ant-menu-submenu-title {
605
+ padding: 0 10px !important;
606
+ margin-bottom: 15px;
607
+ &:hover {
608
+ background-color: transparent !important;
609
+ }
610
+ &[aria-expanded="true"] {
611
+ .anticon {
612
+ background: var(--sidebar-active-icon-bg);
613
+ color: var(--primary-color) !important;
614
+ }
615
+ }
616
+ }
617
+ /* 사이드바 segemented */
618
+ .sider-segmented .ant-segmented-item-label {
619
+ display: flex;
620
+ align-items: center;
621
+ justify-content: center;
622
+ gap: 5px;
623
+ }
624
+ .sider-segmented .sider-segmented-icon {
625
+ width: 20px;
626
+ height: 20px;
627
+ display: flex;
628
+ align-items: center;
629
+ justify-content: center;
630
+ flex-shrink: 0;
631
+ }
632
+
633
+ /* 라이트 테마 선택된 아이템 (어두운 색상) */
634
+ .ant-layout-sider[data-theme='light'] .ant-menu-item-selected,
635
+ .ant-layout-sider[data-theme='light'] .ant-menu-item-selected > a,
636
+ .ant-layout-sider[data-theme='light'] .ant-menu-sub .ant-menu-item-selected,
637
+ .ant-layout-sider[data-theme='light'] .ant-menu-sub .ant-menu-item-selected > a,
638
+ .ant-layout-sider[data-theme='light']
639
+ .ant-menu-sub
640
+ .ant-menu-sub
641
+ .ant-menu-item-selected,
642
+ .ant-layout-sider[data-theme='light']
643
+ .ant-menu-sub
644
+ .ant-menu-sub
645
+ .ant-menu-item-selected
646
+ > a,
647
+ .ant-layout-sider[data-theme='light']
648
+ .ant-menu-sub
649
+ .ant-menu-sub
650
+ .ant-menu-sub
651
+ .ant-menu-item-selected,
652
+ .ant-layout-sider[data-theme='light']
653
+ .ant-menu-sub
654
+ .ant-menu-sub
655
+ .ant-menu-sub
656
+ .ant-menu-item-selected
657
+ > a {
658
+ background-color: rgba(0, 0, 0, 0.2) !important;
659
+ }
660
+
661
+ /* 모던 테마 선택된 아이템 (어두운 색상) */
662
+ .ant-layout-sider[data-theme='modern'] .ant-menu-item-selected,
663
+ .ant-layout-sider[data-theme='modern'] .ant-menu-item-selected > a,
664
+ .ant-layout-sider[data-theme='modern'] .ant-menu-sub .ant-menu-item-selected,
665
+ .ant-layout-sider[data-theme='modern']
666
+ .ant-menu-sub
667
+ .ant-menu-item-selected
668
+ > a,
669
+ .ant-layout-sider[data-theme='modern']
670
+ .ant-menu-sub
671
+ .ant-menu-sub
672
+ .ant-menu-item-selected,
673
+ .ant-layout-sider[data-theme='modern']
674
+ .ant-menu-sub
675
+ .ant-menu-sub
676
+ .ant-menu-item-selected
677
+ > a,
678
+ .ant-layout-sider[data-theme='modern']
679
+ .ant-menu-sub
680
+ .ant-menu-sub
681
+ .ant-menu-sub
682
+ .ant-menu-item-selected,
683
+ .ant-layout-sider[data-theme='modern']
684
+ .ant-menu-sub
685
+ .ant-menu-sub
686
+ .ant-menu-sub
687
+ .ant-menu-item-selected
688
+ > a {
689
+ background-color: rgba(0, 0, 0, 0.2) !important;
690
+ }
691
+
692
+
693
+ /* 사이드바 스크롤바 스타일링 */
694
+ .sider-menu::-webkit-scrollbar,
695
+ .sider-menu-container::-webkit-scrollbar {
696
+ width: 6px;
697
+ }
698
+
699
+ .sider-menu::-webkit-scrollbar-track,
700
+ .sider-menu-container::-webkit-scrollbar-track {
701
+ background: transparent;
702
+ border-radius: 3px;
703
+ }
704
+
705
+ .sider-menu::-webkit-scrollbar-thumb,
706
+ .sider-menu-container::-webkit-scrollbar-thumb {
707
+ background: #d9d9d9;
708
+ border-radius: 3px;
709
+ border: 1px solid #f0f0f0;
710
+ }
711
+
712
+ .sider-menu::-webkit-scrollbar-thumb:hover,
713
+ .sider-menu-container::-webkit-scrollbar-thumb:hover {
714
+ background: #bfbfbf;
715
+ }
716
+
717
+ /* Firefox 스크롤바 스타일링 */
718
+ .sider-menu {
719
+ scrollbar-width: thin;
720
+ scrollbar-color: #d9d9d9 #f0f0f0;
721
+ }
722
+
723
+
724
+ /* 컨텐츠 컨테이너 스타일 */
725
+ .content-container {
726
+ display: flex;
727
+ flex-direction: column;
728
+ flex: 1;
729
+ overflow: hidden;
730
+ height: calc(100vh - 50px); /* 헤더 높이를 제외 */
731
+ }
732
+
733
+ /* 컨텐츠 스타일 */
734
+ .main-content {
735
+ flex: 1;
736
+ overflow: auto;
737
+ height: calc(100vh - 120px); /* 헤더(64px) + MenuTab(48px) + 마진 고려 */
738
+ }
739
+
740
+ .content-header {
741
+ margin-bottom: 24px;
742
+ padding-bottom: 16px;
743
+ border-bottom: 1px solid #f0f0f0;
744
+ }
745
+
746
+ .content-title {
747
+ font-size: 24px;
748
+ font-weight: 600;
749
+ color: var(--text-primary);
750
+ margin: 0;
751
+ }
752
+
753
+ .content-description {
754
+ color: #666;
755
+ margin-top: 8px;
756
+ }
757
+
758
+ .content-body {
759
+ height: 100%;
760
+ }
761
+
762
+ .bwg-view {
763
+ gap: 20px;
764
+ padding: 20px 30px 26px;
765
+ }
766
+
767
+ /* 반응형 디자인 */
768
+ @media (max-width: 768px) {
769
+ .main-sider {
770
+ position: fixed;
771
+ height: 100vh;
772
+ z-index: 1001;
773
+ left: -200px;
774
+ transition: left 0.3s ease;
775
+ }
776
+
777
+ .main-sider.mobile-open {
778
+ left: 0;
779
+ }
780
+
781
+ .main-content {
782
+ margin: 16px 8px;
783
+ }
784
+
785
+ .main-header {
786
+ padding: 0 16px;
787
+ gap: 12px;
788
+ }
789
+
790
+ .header-search {
791
+ width: 200px;
792
+ }
793
+
794
+ .header-search .ant-auto-complete {
795
+ width: 100% !important;
796
+ }
797
+
798
+ .header-title {
799
+ font-size: var(--font-size-md);
800
+ flex: 1;
801
+ text-align: center;
802
+ }
803
+
804
+ .header-user {
805
+ gap: 8px;
806
+ }
807
+
808
+ .header-user-info {
809
+ font-size: var(--font-size-xs);
810
+ }
811
+ }
812
+
813
+ /* MenuTab 전용 스타일링 */
814
+ .menu-nav-container {
815
+ background: var(--bg-primary);
816
+ }
817
+
818
+ .menu-nav-container .menu-tabs.ant-tabs .ant-tabs-nav {
819
+ margin: 0;
820
+ padding: 10px 34px 0 29px;
821
+ height: 45px;
822
+ display: flex;
823
+ align-items: center;
824
+ justify-content: space-between;
825
+ }
826
+ .menu-nav-container .ant-tabs-nav::before {
827
+ left: 29px;
828
+ bottom: 0;
829
+ border-bottom: 1px solid var(--border-color);
830
+ }
831
+ .menu-nav-container .menu-tabs.ant-tabs .ant-tabs-nav-wrap {
832
+ height: 35px;
833
+ flex: 1 !important;
834
+ align-items: flex-end;
835
+ }
836
+
837
+ .menu-nav-container .menu-tabs.ant-tabs .ant-tabs-nav-list {
838
+ display: flex;
839
+ align-items: center;
840
+ height: 100%;
841
+ flex-wrap: nowrap;
842
+ }
843
+
844
+ .menu-nav-container .menu-tabs.ant-tabs .ant-tabs-tab {
845
+ height: 100%;
846
+ border-radius: 10px 10px 0 0;
847
+ transition: all 0.3s ease;
848
+ padding: 0 10px 0 24px;
849
+ position: relative ;
850
+ background: #E7E9F4;
851
+ margin: 0 4px 0 0;
852
+ font-size: var(--font-size-sm);
853
+ color: #777;
854
+ border: 0;
855
+ .ant-tabs-tab-remove {
856
+ width: 20px;
857
+ height: 20px;
858
+ margin-right: 0;
859
+ margin-left: 10px;
860
+ color: #A1A1A1;
861
+ }
862
+ }
863
+
864
+ .menu-nav-container .menu-tabs.ant-tabs .ant-tabs-tab:hover {
865
+ background: #dbdeec;
866
+ color: var(--text-secondary);
867
+ }
868
+
869
+ .menu-nav-container .menu-tabs.ant-tabs .ant-tabs-tab-active {
870
+ background: var(--bg-primary);
871
+ border: 2px solid var(--primary-color);
872
+ border-bottom: none;
873
+ .ant-tabs-tab-btn {
874
+ color:var(--primary-color);
875
+ text-shadow: none;
876
+ font-weight: var(--font-weight-bold);
877
+ }
878
+ }
879
+ /* MenuTab의 content-holder는 숨김 처리 (뷰 렌더링하지 않음) */
880
+ .menu-nav-container .menu-tabs.ant-tabs .ant-tabs-content-holder {
881
+ display: none !important;
882
+ }
883
+
884
+ /* MenuTab 네비게이션 버튼 스타일링 */
885
+ .menu-nav-container .menu-tabs .ant-tabs-extra-content {
886
+ display: flex;
887
+ align-items: center;
888
+ gap: 4px;
889
+ flex-shrink: 0;
890
+ white-space: nowrap;
891
+ overflow: hidden;
892
+ padding-bottom: 13px;
893
+ }
894
+
895
+ .menu-nav-container .menu-tabs .ant-tabs-extra-content > div {
896
+ display: flex !important;
897
+ align-items: center !important;
898
+ gap: 4px !important;
899
+ flex-wrap: nowrap !important;
900
+ }
901
+
902
+ .menu-nav-container .menu-tabs .ant-tabs-extra-content .ant-btn {
903
+ height: 20px !important;
904
+ width: 20px !important;
905
+ font-size: 12px !important;
906
+ display: flex !important;
907
+ align-items: center !important;
908
+ justify-content: center !important;
909
+ border: 0;
910
+ color: #bdbdbd;
911
+ box-shadow: none !important;
912
+ }
913
+
914
+ .menu-nav-container .menu-tabs .ant-tabs-extra-content .ant-btn:hover {
915
+ color: #5E5E5E;
916
+ }
917
+
918
+ .menu-nav-container .menu-tabs .ant-tabs-extra-content .ant-btn:disabled {
919
+ opacity: 0.5;
920
+ cursor: not-allowed;
921
+ background: none;
922
+ }
923
+
924
+ .menu-nav-container .menu-tabs .ant-tabs-extra-content .menu-tabs-close-btn {
925
+ margin-left: 11px;
926
+ }
927
+
928
+ /* landing-wrap */
929
+ .landing-wrap {
930
+ background: #f3f5f9;
931
+ position: absolute;
932
+ top: 0;
933
+ bottom: 0;
934
+ z-index: 4;
935
+ right: 0;
936
+ left: 0;
937
+ background: url('./assets/images/backgrounds/landing_bg.png') no-repeat;
938
+ background-size: cover;
939
+ }
940
+ .landing-wrap .content-tit {
941
+ position: absolute;
942
+ top: 51%;
943
+ left: 50.6%;
944
+ transform: translate(-50%, -50.6%);
945
+ padding-top: 20px;
946
+ color: #9c9d9e;
947
+ font-size: var(--font-size-xl);
948
+ }
949
+ .landing-wrap .content-tit:before {
950
+ position: absolute;
951
+ top: 0;
952
+ left: 50%;
953
+ display: inline-block;
954
+ width: 19px;
955
+ height: 1px;
956
+ background: #9c9d9e;
957
+ content: '';
958
+ transform: translateX(-50%);
959
+ }
960
+ /* 20210316수정 end */
961
+ .landing-wrap .inner {
962
+ position: relative;
963
+ height: 100%;
964
+ min-height: 600px;
965
+ }
966
+ .landing-wrap .page-tit {
967
+ position: absolute;
968
+ left: 3%;
969
+ bottom: 26%;
970
+ color: #6688ff;
971
+ font-size: 60px;
972
+ font-family: 'Poppins', sans-serif;
973
+ }
974
+ .landing-wrap .sub-tit {
975
+ position: absolute;
976
+ left: 3%;
977
+ bottom: 16%;
978
+ color: rgba(255, 255, 255, 0.7);
979
+ font-size: var(--font-size-xl);
980
+ line-height: 28px;
981
+ letter-spacing: -0.2px;
982
+ font-family: 'Poppins', sans-serif;
983
+ font-weight: 300;
984
+ }
985
+ .landing-wrap .content {
986
+ font-family: 'Poppins', sans-serif;
987
+ display: flex;
988
+ position: absolute;
989
+ line-height: 0;
990
+ bottom: 16%;
991
+ padding: 20px 22px;
992
+ width: 480px;
993
+ box-sizing: border-box;
994
+ background: rgba(255, 255, 255, 0.05);
995
+ right: 2%;
996
+ border-radius: var(--border-radius-xxxl);
997
+ backdrop-filter: blur(8px);
998
+ }
999
+ .landing-wrap .content dl {
1000
+ position: relative;
1001
+ width: 100%;
1002
+ text-align: left;
1003
+ box-sizing: border-box;
1004
+ }
1005
+ .landing-wrap .content dt {
1006
+ margin-bottom: 10px;
1007
+ padding-bottom: 10px;
1008
+ color: var(--text-white);
1009
+ font-size: 24px;
1010
+ line-height: initial;
1011
+ border-bottom: 1px solid rgba(255, 255, 255, 0.5);
1012
+ padding-left: 9px;
1013
+ }
1014
+ .landing-wrap .content dd {
1015
+ line-height: 20px;
1016
+ color: var(--text-white);
1017
+ font-size: 18px !important;
1018
+ font-weight: var(--font-weight-regular);
1019
+ letter-spacing: 0;
1020
+ padding-top: 6px;
1021
+ }
1022
+ .landing-wrap .content dd span {
1023
+ display: block;
1024
+ padding: 6px 0 6px 40px;
1025
+ position: relative;
1026
+ }
1027
+ .landing-wrap .content dd span:before {
1028
+ display: block;
1029
+ content: '';
1030
+ left: 9px;
1031
+ position: absolute;
1032
+ top: 5px;
1033
+ width: 20px;
1034
+ height: 20px;
1035
+ background: url(../images/common.png) no-repeat;
1036
+ background-position: -78px -177px;
1037
+ }
1038
+ .landing-wrap .content dd span + span:before {
1039
+ background-position: -100px -177px;
1040
+ }
1041
+ .sider-toggle-btn {
1042
+ border-radius: 0 10px 10px 0;
1043
+ .ant-btn {
1044
+ border-radius: 0 10px 10px 0;
1045
+ }
1046
+ }
1047
+
1048
+ /* 퀵메뉴 */
1049
+ .quick-tab-container {
1050
+ width: 33px;
1051
+ height: 118px;
1052
+ background: #4C465D;
1053
+ border-radius: 15px 0px 0px 15px;
1054
+ box-shadow: 0 4px 4px rgba(61, 56, 98, 0.3);
1055
+ }
1056
+ .quick-tab-container:has(.expanded) {
1057
+ background: var(--primary-color);
1058
+ }
1059
+ .ant-btn.quick-tab-toggle-btn {
1060
+ width: 33px;
1061
+ height: 67px;
1062
+ margin: 11px 0 9px;
1063
+ border-radius: 15px 0px 0px 15px;
1064
+ position: absolute;
1065
+ top: 0;
1066
+ right: 0;
1067
+ cursor: pointer;
1068
+ background-image: url(./assets/images/contents/icon/quick-tab-text.svg);
1069
+ background-repeat: no-repeat;
1070
+ background-position: center;
1071
+ }
1072
+ .ant-btn.quick-tab-toggle-btn:not(.ant-btn-disabled):hover,
1073
+ .ant-btn.quick-tab-toggle-btn:not(.ant-btn-disabled):active {
1074
+ background-image: url(./assets/images/contents/icon/quick-tab-text.svg);
1075
+ background-repeat: no-repeat;
1076
+ background-position: center;
1077
+ background-color: transparent !important;
1078
+ }
1079
+
1080
+ .quick-tab-drag-btn {
1081
+ position: absolute;
1082
+ bottom: 9px;
1083
+ right: 3px;
1084
+ width: 24px;
1085
+ height: 24px;
1086
+ border-radius: 50%;
1087
+ display: flex;
1088
+ align-items: center;
1089
+ justify-content: center;
1090
+ background: transparent url(./assets/images/contents/icon/ico-quick-tab-move.svg) no-repeat center;
1091
+ }
1092
+ .quick-tab-drag-btn:hover {
1093
+ background: rgba(28, 24, 37, 0.2) url(./assets/images/contents/icon/ico-quick-tab-move.svg) no-repeat center;
1094
+ }
1095
+ .quick-tab-item-inner {
1096
+ display: flex;
1097
+ flex-direction: column;
1098
+ align-items: center;
1099
+ border-radius: var(--border-radius-lg);
1100
+ text-align: center;
1101
+
1102
+ .quick-tab-items-icon {
1103
+ display: flex;
1104
+ align-items: center;
1105
+ justify-content: center;
1106
+ }
1107
+ .quick-tab-items-icon .anticon {
1108
+ font-size: 28px;
1109
+ }
1110
+ .quick-tab-items:last-child {
1111
+ margin-bottom: 0;
1112
+ }
1113
+ }
1114
+
1115
+ .quick-tab-items-icon:has(.quick-overtime) {
1116
+ background: #EFEBFF;
1117
+ }
1118
+ .quick-tab-items-icon:has(.quick-business-trip) {
1119
+ background: #E3F6FF;
1120
+ }
1121
+ .quick-tab-items-icon:has(.quick-holiday) {
1122
+ background: #FFF0F5;
1123
+ }
1124
+
1125
+
1126
+ .quick-tab-items-title {
1127
+ font-size: 13px;
1128
+ font-weight: var(--font-weight-semibold);
1129
+ line-height: 16px;
1130
+ word-break: keep-all;
1131
+ color: var(--text-primary);
1132
+ }