index.css 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. #dashboardPage{
  2. display: flex;
  3. flex-direction: column;
  4. height: 100%;
  5. width: 100%;
  6. background: var(--bg-base);
  7. position: relative;
  8. overflow: hidden;
  9. .dashboard-menu-toggle-input{
  10. position: absolute;
  11. opacity: 0;
  12. pointer-events: none;
  13. }
  14. .dashboard-topbar{
  15. display: flex;
  16. align-items: center;
  17. gap: 14px;
  18. flex-shrink: 0;
  19. height: 56px;
  20. padding: 0 16px;
  21. background: var(--bg-surface);
  22. border-bottom: 1px solid var(--border-subtle);
  23. z-index: 20;
  24. }
  25. .dashboard-menu-toggle{
  26. display: flex;
  27. flex-direction: column;
  28. justify-content: center;
  29. gap: 5px;
  30. width: 40px;
  31. height: 40px;
  32. padding: 10px 8px;
  33. cursor: pointer;
  34. border: 1px solid transparent;
  35. transition: background 0.15s ease, border-color 0.15s ease;
  36. }
  37. .dashboard-menu-toggle:hover{
  38. background: var(--bg-surface-raised);
  39. border-color: var(--border-subtle);
  40. }
  41. .dashboard-menu-toggle span{
  42. display: block;
  43. height: 2px;
  44. width: 100%;
  45. background: var(--text-primary);
  46. transition: transform 0.2s ease, opacity 0.2s ease;
  47. }
  48. .dashboard-topbar-title{
  49. font-size: 16px;
  50. font-weight: 700;
  51. letter-spacing: -0.02em;
  52. color: var(--text-primary);
  53. }
  54. .dashboard-menu-backdrop{
  55. position: absolute;
  56. inset: 0;
  57. background: rgba(0, 0, 0, 0.55);
  58. opacity: 0;
  59. visibility: hidden;
  60. pointer-events: none;
  61. transition: opacity 0.2s ease, visibility 0.2s ease;
  62. z-index: 30;
  63. }
  64. .dashboard-menu{
  65. position: absolute;
  66. top: 0;
  67. left: 0;
  68. bottom: 0;
  69. width: min(280px, 86vw);
  70. display: flex;
  71. flex-direction: column;
  72. background: var(--bg-surface);
  73. border-right: 1px solid var(--border-subtle);
  74. transform: translateX(-100%);
  75. transition: transform 0.22s ease;
  76. z-index: 40;
  77. }
  78. .dashboard-menu-header{
  79. display: flex;
  80. align-items: center;
  81. justify-content: space-between;
  82. gap: 12px;
  83. height: 56px;
  84. padding: 0 12px 0 20px;
  85. border-bottom: 1px solid var(--border-subtle);
  86. flex-shrink: 0;
  87. }
  88. .dashboard-menu-brand{
  89. position: relative;
  90. font-size: 15px;
  91. font-weight: 700;
  92. letter-spacing: -0.02em;
  93. color: var(--text-primary);
  94. padding-left: 14px;
  95. }
  96. .dashboard-menu-brand::before{
  97. content: "";
  98. position: absolute;
  99. left: 0;
  100. top: 2px;
  101. bottom: 2px;
  102. width: 3px;
  103. background: var(--accent);
  104. }
  105. .dashboard-menu-close{
  106. position: relative;
  107. width: 40px;
  108. height: 40px;
  109. cursor: pointer;
  110. border: 1px solid transparent;
  111. transition: background 0.15s ease, border-color 0.15s ease;
  112. }
  113. .dashboard-menu-close:hover{
  114. background: var(--bg-surface-raised);
  115. border-color: var(--border-subtle);
  116. }
  117. .dashboard-menu-close::before,
  118. .dashboard-menu-close::after{
  119. content: "";
  120. position: absolute;
  121. top: 50%;
  122. left: 50%;
  123. width: 16px;
  124. height: 2px;
  125. background: var(--text-secondary);
  126. }
  127. .dashboard-menu-close::before{
  128. transform: translate(-50%, -50%) rotate(45deg);
  129. }
  130. .dashboard-menu-close::after{
  131. transform: translate(-50%, -50%) rotate(-45deg);
  132. }
  133. .dashboard-menu-list{
  134. list-style: none;
  135. display: flex;
  136. flex-direction: column;
  137. gap: 8px;
  138. padding: 16px;
  139. margin-top: auto;
  140. }
  141. .dashboard-menu-logout{
  142. width: 100%;
  143. font-size: 13px;
  144. font-weight: 700;
  145. letter-spacing: 0.08em;
  146. text-transform: uppercase;
  147. color: var(--text-primary);
  148. background: transparent;
  149. border: 1px solid var(--border-strong);
  150. border-radius: 0;
  151. padding: 14px 16px;
  152. cursor: pointer;
  153. transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.05s ease;
  154. }
  155. .dashboard-menu-logout:hover{
  156. color: #fff;
  157. background: var(--danger);
  158. border-color: var(--danger);
  159. }
  160. .dashboard-menu-logout:active{
  161. transform: translateY(1px);
  162. }
  163. .dashboard-main{
  164. flex: 1;
  165. min-height: 0;
  166. overflow: auto;
  167. padding: 20px 16px;
  168. }
  169. /* Open state (mobile drawer) */
  170. .dashboard-menu-toggle-input:checked ~ .dashboard-menu-backdrop{
  171. opacity: 1;
  172. visibility: visible;
  173. pointer-events: auto;
  174. }
  175. .dashboard-menu-toggle-input:checked ~ .dashboard-menu{
  176. transform: translateX(0);
  177. }
  178. .dashboard-menu-toggle-input:checked ~ .dashboard-topbar .dashboard-menu-toggle span:nth-child(1){
  179. transform: translateY(7px) rotate(45deg);
  180. }
  181. .dashboard-menu-toggle-input:checked ~ .dashboard-topbar .dashboard-menu-toggle span:nth-child(2){
  182. opacity: 0;
  183. }
  184. .dashboard-menu-toggle-input:checked ~ .dashboard-topbar .dashboard-menu-toggle span:nth-child(3){
  185. transform: translateY(-7px) rotate(-45deg);
  186. }
  187. }
  188. /* Persistent sidebar on larger screens — works with inline display:flex from openPage */
  189. @media (min-width: 768px){
  190. #dashboardPage{
  191. padding-left: 260px;
  192. .dashboard-topbar{
  193. padding-left: 24px;
  194. }
  195. .dashboard-menu-toggle,
  196. .dashboard-menu-backdrop,
  197. .dashboard-menu-close{
  198. display: none;
  199. }
  200. .dashboard-menu{
  201. width: 260px;
  202. transform: none;
  203. }
  204. .dashboard-menu-header{
  205. justify-content: flex-start;
  206. padding-left: 24px;
  207. padding-right: 16px;
  208. }
  209. .dashboard-menu-list{
  210. padding: 20px 16px;
  211. }
  212. .dashboard-main{
  213. padding: 28px 24px;
  214. }
  215. }
  216. }
  217. @media (min-width: 1024px){
  218. #dashboardPage{
  219. padding-left: 280px;
  220. .dashboard-menu{
  221. width: 280px;
  222. }
  223. .dashboard-main{
  224. padding: 32px 32px;
  225. }
  226. }
  227. }