adminator-admin-dashboard 2.8.1 → 4.1.5

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 (179) hide show
  1. package/CHANGELOG.md +499 -0
  2. package/CLAUDE.md +126 -154
  3. package/README.md +321 -370
  4. package/dist/2026.js +8751 -0
  5. package/dist/2026.js.map +1 -0
  6. package/dist/404.html +36 -16
  7. package/dist/500.html +36 -16
  8. package/dist/assets/static/images/logo.svg +3 -3
  9. package/dist/basic-table.html +152 -699
  10. package/dist/blank.html +42 -507
  11. package/dist/buttons.html +152 -448
  12. package/dist/calendar.html +246 -658
  13. package/dist/charts.html +124 -658
  14. package/dist/chat.html +209 -706
  15. package/dist/compose.html +141 -618
  16. package/dist/datatable.html +467 -991
  17. package/dist/email.html +430 -943
  18. package/dist/forms.html +208 -733
  19. package/dist/google-maps.html +123 -513
  20. package/dist/index.html +436 -1041
  21. package/dist/runtime.js +1299 -0
  22. package/dist/runtime.js.map +1 -0
  23. package/dist/signin.html +92 -92
  24. package/dist/signup.html +106 -91
  25. package/dist/ui.html +268 -897
  26. package/dist/vector-maps.html +132 -511
  27. package/dist/vendor-chartjs.js +14593 -0
  28. package/dist/vendor-chartjs.js.map +1 -0
  29. package/dist/vendor-fullcalendar.js +14793 -0
  30. package/dist/vendor-fullcalendar.js.map +1 -0
  31. package/dist/vendors.js +3758 -0
  32. package/dist/vendors.js.map +1 -0
  33. package/package.json +50 -52
  34. package/src/404.html +35 -15
  35. package/src/500.html +35 -15
  36. package/src/assets/scripts/2026/Shell.js +312 -0
  37. package/src/assets/scripts/2026/calendar.js +123 -0
  38. package/src/assets/scripts/2026/charts.js +259 -0
  39. package/src/assets/scripts/2026/index.js +35 -0
  40. package/src/assets/scripts/2026/init.js +207 -0
  41. package/src/assets/scripts/2026/maps.js +78 -0
  42. package/src/assets/scripts/2026/palette.js +266 -0
  43. package/src/assets/static/images/logo.svg +3 -3
  44. package/src/assets/styles/2026/_animations.scss +14 -0
  45. package/src/assets/styles/2026/_auth.scss +215 -0
  46. package/src/assets/styles/2026/_base.scss +37 -0
  47. package/src/assets/styles/2026/_calendar.scss +380 -0
  48. package/src/assets/styles/2026/_charts.scss +44 -0
  49. package/src/assets/styles/2026/_chat.scss +350 -0
  50. package/src/assets/styles/2026/_components.scss +140 -0
  51. package/src/assets/styles/2026/_dashboard.scss +520 -0
  52. package/src/assets/styles/2026/_data.scss +130 -0
  53. package/src/assets/styles/2026/_dropdowns.scss +128 -0
  54. package/src/assets/styles/2026/_email.scss +599 -0
  55. package/src/assets/styles/2026/_error.scss +98 -0
  56. package/src/assets/styles/2026/_forms.scss +215 -0
  57. package/src/assets/styles/2026/_fullcalendar.scss +134 -0
  58. package/src/assets/styles/2026/_palette.scss +173 -0
  59. package/src/assets/styles/2026/_responsive.scss +229 -0
  60. package/src/assets/styles/2026/_shell.scss +290 -0
  61. package/src/assets/styles/2026/_tokens.scss +80 -0
  62. package/src/assets/styles/2026/_ui.scss +365 -0
  63. package/src/assets/styles/2026/index.scss +23 -0
  64. package/src/basic-table.html +153 -710
  65. package/src/blank.html +42 -517
  66. package/src/buttons.html +152 -458
  67. package/src/calendar.html +246 -668
  68. package/src/charts.html +124 -668
  69. package/src/chat.html +209 -716
  70. package/src/compose.html +142 -629
  71. package/src/datatable.html +466 -1000
  72. package/src/email.html +429 -952
  73. package/src/forms.html +207 -742
  74. package/src/google-maps.html +128 -523
  75. package/src/index.html +438 -1050
  76. package/src/signin.html +92 -92
  77. package/src/signup.html +106 -91
  78. package/src/ui.html +267 -906
  79. package/src/vector-maps.html +133 -522
  80. package/dist/1e59d2330b4c6deb84b3.ttf +0 -0
  81. package/dist/20fd1704ea223900efa9.woff2 +0 -0
  82. package/dist/29b39089170885ae2967.woff +0 -0
  83. package/dist/8b43027f47b20503057d.eot +0 -0
  84. package/dist/9bad94440d49256265a5.eot +0 -0
  85. package/dist/assets/fontawesome-webfont.svg +0 -2671
  86. package/dist/assets/themify.svg +0 -362
  87. package/dist/eda8b94308c6f538f04a.ttf +0 -0
  88. package/dist/f691f37e57f04c152e23.woff +0 -0
  89. package/dist/main.js +0 -61323
  90. package/dist/main.js.map +0 -1
  91. package/src/assets/scripts/app 2.js +0 -645
  92. package/src/assets/scripts/app.js +0 -645
  93. package/src/assets/scripts/charts/chartJS/index.js +0 -148
  94. package/src/assets/scripts/charts/easyPieChart/index.js +0 -200
  95. package/src/assets/scripts/charts/index.js +0 -3
  96. package/src/assets/scripts/charts/sparkline/index.js +0 -208
  97. package/src/assets/scripts/chat/index.js +0 -11
  98. package/src/assets/scripts/components/Chart.js +0 -1390
  99. package/src/assets/scripts/components/Sidebar.js +0 -241
  100. package/src/assets/scripts/constants/colors.js +0 -274
  101. package/src/assets/scripts/datatable/index.js +0 -379
  102. package/src/assets/scripts/datepicker/index.js +0 -302
  103. package/src/assets/scripts/email/index.js +0 -25
  104. package/src/assets/scripts/fullcalendar/index.js +0 -86
  105. package/src/assets/scripts/googleMaps/index.js +0 -93
  106. package/src/assets/scripts/index.js +0 -18
  107. package/src/assets/scripts/masonry/index.js +0 -14
  108. package/src/assets/scripts/popover/index.js +0 -109
  109. package/src/assets/scripts/scrollbar/index.js +0 -10
  110. package/src/assets/scripts/search/index.js +0 -15
  111. package/src/assets/scripts/sidebar/index.js +0 -140
  112. package/src/assets/scripts/skycons/index.js +0 -52
  113. package/src/assets/scripts/ui/index.js +0 -412
  114. package/src/assets/scripts/utils/date.js +0 -242
  115. package/src/assets/scripts/utils/dom.js +0 -349
  116. package/src/assets/scripts/utils/index.js +0 -45
  117. package/src/assets/scripts/utils/theme.js +0 -107
  118. package/src/assets/scripts/vectorMaps/index.js +0 -277
  119. package/src/assets/styles/index.scss +0 -801
  120. package/src/assets/styles/spec/components/easyPieChart.scss +0 -11
  121. package/src/assets/styles/spec/components/footer.scss +0 -4
  122. package/src/assets/styles/spec/components/forms.scss +0 -288
  123. package/src/assets/styles/spec/components/index.scss +0 -9
  124. package/src/assets/styles/spec/components/loader.scss +0 -46
  125. package/src/assets/styles/spec/components/masonry.scss +0 -1
  126. package/src/assets/styles/spec/components/pageContainer.scss +0 -255
  127. package/src/assets/styles/spec/components/progressBar.scss +0 -6
  128. package/src/assets/styles/spec/components/sidebar.scss +0 -642
  129. package/src/assets/styles/spec/components/topbar.scss +0 -455
  130. package/src/assets/styles/spec/generic/base.scss +0 -102
  131. package/src/assets/styles/spec/generic/index.scss +0 -1
  132. package/src/assets/styles/spec/index.scss +0 -4
  133. package/src/assets/styles/spec/screens/chat.scss +0 -147
  134. package/src/assets/styles/spec/screens/email.scss +0 -108
  135. package/src/assets/styles/spec/screens/index.scss +0 -2
  136. package/src/assets/styles/spec/settings/baseColors.scss +0 -103
  137. package/src/assets/styles/spec/settings/borders.scss +0 -6
  138. package/src/assets/styles/spec/settings/breakpoints.scss +0 -26
  139. package/src/assets/styles/spec/settings/fonts.scss +0 -4
  140. package/src/assets/styles/spec/settings/index.scss +0 -4
  141. package/src/assets/styles/spec/settings/materialColors.scss +0 -550
  142. package/src/assets/styles/spec/tools/index.scss +0 -1
  143. package/src/assets/styles/spec/tools/mixins/clearfix.scss +0 -15
  144. package/src/assets/styles/spec/tools/mixins/index.scss +0 -3
  145. package/src/assets/styles/spec/tools/mixins/mediaQueriesRanges.scss +0 -58
  146. package/src/assets/styles/spec/tools/mixins/placeholder.scss +0 -10
  147. package/src/assets/styles/spec/utils/colors.scss +0 -33
  148. package/src/assets/styles/spec/utils/index.scss +0 -2
  149. package/src/assets/styles/spec/utils/layout/helpers/border.scss +0 -78
  150. package/src/assets/styles/spec/utils/layout/helpers/flex.scss +0 -220
  151. package/src/assets/styles/spec/utils/layout/helpers/index.scss +0 -11
  152. package/src/assets/styles/spec/utils/layout/helpers/layout.scss +0 -137
  153. package/src/assets/styles/spec/utils/layout/helpers/lists.scss +0 -23
  154. package/src/assets/styles/spec/utils/layout/helpers/margin.scss +0 -266
  155. package/src/assets/styles/spec/utils/layout/helpers/objects.scss +0 -91
  156. package/src/assets/styles/spec/utils/layout/helpers/padding.scss +0 -147
  157. package/src/assets/styles/spec/utils/layout/helpers/positions.scss +0 -118
  158. package/src/assets/styles/spec/utils/layout/helpers/pseudo.scss +0 -6
  159. package/src/assets/styles/spec/utils/layout/helpers/sizes.scss +0 -157
  160. package/src/assets/styles/spec/utils/layout/helpers/typography.scss +0 -127
  161. package/src/assets/styles/spec/utils/layout/index.scss +0 -3
  162. package/src/assets/styles/spec/utils/layout/mixins/generateResponsive.scss +0 -25
  163. package/src/assets/styles/spec/utils/layout/mixins/index.scss +0 -2
  164. package/src/assets/styles/spec/utils/layout/mixins/mediaQueryCondition.scss +0 -28
  165. package/src/assets/styles/spec/utils/layout/utils/center.scss +0 -54
  166. package/src/assets/styles/spec/utils/layout/utils/gap.scss +0 -229
  167. package/src/assets/styles/spec/utils/layout/utils/index.scss +0 -5
  168. package/src/assets/styles/spec/utils/layout/utils/layers.scss +0 -5
  169. package/src/assets/styles/spec/utils/layout/utils/peers.scss +0 -35
  170. package/src/assets/styles/utils/mobile.scss +0 -954
  171. package/src/assets/styles/utils/theme.css +0 -97
  172. package/src/assets/styles/vendor/datepicker.scss +0 -183
  173. package/src/assets/styles/vendor/font-awesome.css +0 -2337
  174. package/src/assets/styles/vendor/fullcalendar.scss +0 -217
  175. package/src/assets/styles/vendor/index.scss +0 -8
  176. package/src/assets/styles/vendor/jquery.datatables.scss +0 -162
  177. package/src/assets/styles/vendor/perfectScrollbar.scss +0 -4
  178. package/src/assets/styles/vendor/sparkline.scss +0 -6
  179. package/src/assets/styles/vendor/themify-icons.css +0 -1081
@@ -0,0 +1,229 @@
1
+ /* ============ RESPONSIVE ============ */
2
+
3
+ /* Auth pages: collapse the marketing aside when the split-screen no longer fits.
4
+ (Lives here, not in _auth.scss, so it wins over the later default rules there.) */
5
+ @media (max-width: 900px) {
6
+ .auth-shell { grid-template-columns: 1fr; }
7
+ .auth-aside { display: none; }
8
+ }
9
+
10
+ @media (max-width: 1200px) {
11
+ /* Dashboard */
12
+ .sv-regions { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 28px; }
13
+ .sv-radials { grid-template-columns: 1fr; gap: 18px; }
14
+ .kpi-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
15
+
16
+ /* Email */
17
+ .mail-shell { grid-template-columns: 200px 1fr; height: auto; min-height: 0; }
18
+ .mail-reader { display: none; }
19
+
20
+ /* Calendar */
21
+ .cal-shell { grid-template-columns: 240px 1fr; }
22
+ .cal-grid { grid-auto-rows: minmax(96px, 1fr); }
23
+ }
24
+
25
+ @media (max-width: 1100px) {
26
+ .shell { grid-template-columns: 72px 1fr; }
27
+ .d-sidebar {
28
+ padding: 20px 10px;
29
+ overflow-y: auto; /* allow scroll on short viewports (e.g. 750×590) */
30
+ overflow-x: hidden;
31
+ z-index: 20;
32
+ }
33
+ .brand-text, .brand-tag, .nav-label, .nav-link > span:not(.nav-badge), .nav-link .nav-badge,
34
+ .workspace-text, .workspace-chev, .nav-link .chev { display: none; }
35
+ .brand { justify-content: center; padding: 0 0 18px; }
36
+ .nav-link { justify-content: center; padding: 10px; }
37
+ .nav-link.is-active::before { left: -10px; }
38
+ .workspace { justify-content: center; padding: 6px; }
39
+ .col-6 { grid-column: span 12; }
40
+
41
+ /* Rail-mode flyout submenu: positioned via JS as position:fixed so the
42
+ sidebar can scroll (overflow-y: auto above) without clipping the flyout,
43
+ and so it can be shifted up to fit when opened near the viewport bottom. */
44
+ .nav-submenu {
45
+ position: fixed;
46
+ left: 82px; /* fallback; JS overwrites with trigger's getBoundingClientRect */
47
+ top: 0;
48
+ width: 200px;
49
+ max-height: 0;
50
+ margin-left: 0;
51
+ padding: 0;
52
+ background: var(--bg-card);
53
+ border: 1px solid var(--border);
54
+ border-radius: 10px;
55
+ box-shadow: var(--shadow-lg);
56
+ opacity: 0;
57
+ visibility: hidden;
58
+ z-index: 50;
59
+ transition: opacity 180ms ease, visibility 180ms;
60
+ }
61
+ .nav-submenu::before { display: none; }
62
+ .nav-item-group.is-open .nav-submenu {
63
+ max-height: 400px;
64
+ padding: 6px 0;
65
+ opacity: 1;
66
+ visibility: visible;
67
+ }
68
+ .nav-submenu a { padding: 8px 14px; font-size: 13px; border-radius: 6px; margin: 0 6px; }
69
+ .nav-submenu a:hover { padding-left: 14px; }
70
+
71
+ /* Chat */
72
+ .chat-shell { grid-template-columns: 240px 1fr; }
73
+ }
74
+
75
+ @media (max-width: 720px) {
76
+ /* ---- Shell / sidebar drawer ----
77
+ Sidebar becomes position:fixed (off-grid), so collapse the grid to a
78
+ single column — otherwise .main is auto-placed into the empty column-1
79
+ (0px) and disappears. */
80
+ .shell { display: block; }
81
+ .d-sidebar {
82
+ position: fixed;
83
+ top: 0; left: 0;
84
+ width: 280px;
85
+ height: 100vh;
86
+ z-index: 100; /* above backdrop (90) */
87
+ transform: translateX(-100%);
88
+ transition: transform 240ms cubic-bezier(.2,.7,.2,1);
89
+ box-shadow: 0 12px 40px -8px rgb(0 0 0 / 0.4);
90
+
91
+ /* Restore full-width nav (override the 1100px collapse) */
92
+ padding: 22px 16px 18px;
93
+ overflow-y: auto; /* override 1100px rail-mode 'visible' so long menus scroll */
94
+ overscroll-behavior: contain;
95
+ }
96
+ .brand-text, .brand-tag, .nav-label, .nav-link > span:not(.nav-badge), .nav-link .nav-badge,
97
+ .workspace-text, .workspace-chev, .nav-submenu, .nav-link .chev { display: revert; }
98
+ .brand { justify-content: flex-start; padding: 4px 10px 20px; }
99
+ .nav-link { justify-content: flex-start; padding: 9px 12px; }
100
+ .workspace { justify-content: flex-start; padding: 6px 10px; }
101
+
102
+ /* Revert rail-mode flyout submenu back to inline-accordion (desktop) behavior.
103
+ Without this, the absolute-positioned flyout from the 1100px block leaks
104
+ into mobile and the submenu pops out as a floating card next to the drawer. */
105
+ .nav-item-group { position: static; }
106
+ .nav-submenu {
107
+ position: static;
108
+ left: auto; top: auto;
109
+ width: auto;
110
+ margin-left: 20px;
111
+ padding: 0 0 0 14px;
112
+ background: transparent;
113
+ border: 0;
114
+ border-radius: 0;
115
+ box-shadow: none;
116
+ opacity: 1;
117
+ visibility: visible;
118
+ max-height: 0;
119
+ transition: max-height 280ms cubic-bezier(.4,0,.2,1);
120
+ }
121
+ .nav-submenu::before { display: block; }
122
+ .nav-item-group.is-open .nav-submenu {
123
+ max-height: 400px;
124
+ padding: 4px 0 6px 14px;
125
+ opacity: 1;
126
+ visibility: visible;
127
+ }
128
+ .nav-submenu a { margin: 0; padding: 7px 10px; font-size: 12.5px; border-radius: 6px; }
129
+ .nav-submenu a:hover { padding-left: 13px; }
130
+
131
+ body.has-drawer-open .d-sidebar { transform: translateX(0); }
132
+ body.has-drawer-open { overflow: hidden; } /* lock scroll behind backdrop */
133
+
134
+ .hamburger { display: inline-flex; }
135
+
136
+ /* ---- Topbar: aggressive de-clutter ---- */
137
+ .d-topbar { padding: 0 12px; }
138
+ .topbar-actions { gap: 2px; }
139
+
140
+ /* Crumbs eat horizontal space — hide everything except the active page */
141
+ .crumbs { gap: 6px; min-width: 0; flex: 1; overflow: hidden; }
142
+ .crumbs > span:not(.current), .crumbs .sep { display: none; }
143
+ .crumbs .current { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
144
+
145
+ /* Search becomes its own icon-button (text + kbd hidden, padding tightened) */
146
+ .cmd { min-width: 0; padding: 0; width: 36px; height: 36px; justify-content: center; }
147
+ .cmd span, .cmd .kbd { display: none; }
148
+ .cmd svg { width: 16px; height: 16px; }
149
+
150
+ /* Trim avatar margin */
151
+ .avatar { margin-left: 2px; }
152
+
153
+ /* ---- Dropdowns: prevent off-screen overflow ---- */
154
+ .dd-menu {
155
+ min-width: 0;
156
+ width: calc(100vw - 16px);
157
+ max-width: 360px;
158
+ right: -8px; /* pin to viewport edge minus topbar padding (12px) */
159
+ }
160
+ .dd-menu.dd-profile {
161
+ width: calc(100vw - 16px);
162
+ max-width: 280px;
163
+ }
164
+
165
+ /* ---- Content / hero / footer ---- */
166
+ .content { padding: 20px 16px 16px; }
167
+ .d-footer { padding: 20px 16px; flex-direction: column; gap: 10px; align-items: flex-start; }
168
+ .hero { flex-direction: column; align-items: flex-start; gap: 20px; }
169
+ .hero-actions { flex-wrap: wrap; }
170
+
171
+ /* ---- Generic grid ---- */
172
+ .grid { gap: 16px; }
173
+
174
+ /* ---- Dashboard ---- */
175
+ .kpi-grid { grid-template-columns: 1fr; }
176
+ .sv-regions { grid-template-columns: 1fr; gap: 22px; }
177
+ .monthly-footer { grid-template-columns: repeat(2, 1fr); gap: 16px; }
178
+ .wx-forecast { grid-template-columns: repeat(4, 1fr); gap: 6px; }
179
+ .wx-hero { flex-direction: column; align-items: flex-start; gap: 12px; }
180
+ .wx-date { text-align: left; }
181
+ .sales-summary { flex-direction: column; align-items: flex-start; gap: 12px; }
182
+
183
+ /* Card breathing room */
184
+ .card { padding: 18px; }
185
+ .card-head { flex-wrap: wrap; gap: 10px; }
186
+
187
+ /* ---- Charts page ---- */
188
+ .chart-canvas-wrap { min-height: 200px; }
189
+
190
+ /* ---- Tables: ensure horizontal scroll fallback ---- */
191
+ .data-toolbar { flex-direction: column; align-items: stretch; gap: 10px; }
192
+ .data-toolbar-left, .data-toolbar-right { min-width: 0; flex-wrap: wrap; }
193
+ .data-foot { flex-direction: column; gap: 12px; align-items: flex-start; }
194
+
195
+ /* ---- Email ---- */
196
+ .mail-shell { grid-template-columns: 1fr; }
197
+ .mail-rail { display: none; }
198
+ .mail-hero { flex-direction: column; align-items: flex-start; gap: 16px; }
199
+
200
+ /* ---- Chat ---- */
201
+ .chat-shell { grid-template-columns: 1fr; height: auto; }
202
+ .chat-rail { display: none; }
203
+
204
+ /* ---- Calendar ---- */
205
+ .cal-shell { grid-template-columns: 1fr; }
206
+ .cal-toolbar { flex-wrap: wrap; gap: 10px; padding: 14px; }
207
+ .cal-toolbar-left { width: 100%; justify-content: space-between; }
208
+ .cal-views { order: 3; }
209
+ .cal-grid { grid-auto-rows: minmax(78px, 1fr); }
210
+ .cal-weekdays > div { padding: 8px 6px; font-size: 9px; letter-spacing: 0.1em; }
211
+ .cal-cell { padding: 5px; }
212
+ .cal-chip-time { display: none; }
213
+
214
+ /* ---- Compose page (inline-styled form rows) ---- */
215
+ .compose-row { grid-template-columns: 1fr !important; gap: 6px !important; }
216
+ .compose-row-actions { justify-content: flex-start !important; }
217
+
218
+ /* ---- Auth pages ---- */
219
+ .auth-main { padding: 24px 20px; }
220
+ }
221
+
222
+ @media (max-width: 480px) {
223
+ .monthly-footer { grid-template-columns: 1fr; }
224
+ .wx-forecast { grid-template-columns: repeat(2, 1fr); }
225
+ .form-actions { flex-direction: column; align-items: stretch; }
226
+ .form-actions .btn { width: 100%; justify-content: center; }
227
+ .form-actions .spacer { display: none; }
228
+ .social-row { grid-template-columns: 1fr; }
229
+ }
@@ -0,0 +1,290 @@
1
+ /* ============ SHELL ============ */
2
+ .shell { display: grid; grid-template-columns: 248px 1fr; min-height: 100vh; }
3
+
4
+ /* ============ SIDEBAR ============ */
5
+ .d-sidebar {
6
+ background: var(--bg-sidebar);
7
+ border-right: 1px solid var(--border);
8
+ padding: 22px 16px 18px;
9
+ position: sticky; top: 0;
10
+ height: 100vh;
11
+ display: flex; flex-direction: column; gap: 22px;
12
+ overflow-y: auto;
13
+ }
14
+ .d-sidebar::-webkit-scrollbar { width: 4px; }
15
+ .d-sidebar::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
16
+
17
+ .brand {
18
+ display: flex; align-items: center; gap: 10px;
19
+ padding: 4px 10px 20px;
20
+ border-bottom: 1px solid var(--border-soft);
21
+ }
22
+ .brand-logo {
23
+ width: 32px; height: 32px;
24
+ background: var(--primary);
25
+ border-radius: 8px;
26
+ display: grid; place-items: center;
27
+ box-shadow: 0 4px 10px -2px color-mix(in oklab, var(--primary) 40%, transparent);
28
+ }
29
+ .brand-logo svg { width: 18px; height: 18px; }
30
+ .brand-text { line-height: 1.1; }
31
+ .brand-name {
32
+ font-family: 'Inter Tight', 'Inter', sans-serif;
33
+ font-weight: 700;
34
+ font-size: 15.5px;
35
+ color: var(--t-base);
36
+ letter-spacing: -0.02em;
37
+ }
38
+ .brand-tag {
39
+ font-family: 'JetBrains Mono', monospace;
40
+ font-size: 9.5px;
41
+ color: var(--t-light);
42
+ letter-spacing: 0.1em;
43
+ }
44
+
45
+ .nav-section { display: flex; flex-direction: column; gap: 2px; }
46
+ .nav-label {
47
+ font-family: 'JetBrains Mono', monospace;
48
+ font-size: 10px;
49
+ letter-spacing: 0.2em;
50
+ text-transform: uppercase;
51
+ color: var(--t-light);
52
+ padding: 0 10px 6px;
53
+ }
54
+
55
+ .nav-link {
56
+ display: flex; align-items: center; gap: 12px;
57
+ padding: 9px 12px;
58
+ border-radius: 8px;
59
+ color: var(--t-muted);
60
+ font-size: 13px;
61
+ font-weight: 500;
62
+ transition: background-color 180ms ease, color 180ms ease, box-shadow 180ms ease;
63
+ line-height: 1.2;
64
+ }
65
+ .nav-link > svg {
66
+ width: 17px; height: 17px;
67
+ stroke: currentColor; stroke-width: 1.75; fill: none;
68
+ flex-shrink: 0;
69
+ display: block;
70
+ stroke-linecap: round;
71
+ stroke-linejoin: round;
72
+ }
73
+ .nav-link > span:not(.nav-badge) { min-width: 0; flex: 1; }
74
+ .nav-link:hover { background: var(--bg-hover); color: var(--t-base); }
75
+ .nav-link.is-active {
76
+ color: var(--primary);
77
+ background: var(--primary-soft);
78
+ box-shadow: inset 3px 0 0 var(--primary);
79
+ }
80
+
81
+ .nav-badge {
82
+ flex: 0 0 auto;
83
+ margin-left: auto;
84
+ font-family: 'Inter', sans-serif;
85
+ font-size: 9px;
86
+ font-weight: 700;
87
+ letter-spacing: 0.04em;
88
+ padding: 2px 6px;
89
+ line-height: 1.4;
90
+ border-radius: 999px;
91
+ }
92
+ .nav-badge.pro { background: var(--primary); color: #fff; }
93
+ .nav-badge.hot { background: var(--danger-soft); color: var(--danger); }
94
+ .nav-badge.new { background: var(--success-soft); color: var(--success); }
95
+
96
+ /* Dropdown nav items */
97
+ .nav-item-group .nav-link .chev {
98
+ width: 11px; height: 11px; margin-left: auto;
99
+ transition: transform 200ms ease;
100
+ }
101
+ .nav-item-group.is-open .nav-link .chev { transform: rotate(90deg); }
102
+ .nav-submenu {
103
+ overflow: hidden;
104
+ max-height: 0;
105
+ margin-left: 20px;
106
+ padding-left: 14px;
107
+ position: relative;
108
+ transition: max-height 280ms cubic-bezier(.4,0,.2,1);
109
+ }
110
+ .nav-submenu::before {
111
+ content: '';
112
+ position: absolute;
113
+ left: 0; top: 6px; bottom: 6px;
114
+ width: 1px;
115
+ background: var(--border);
116
+ }
117
+ .nav-item-group.is-open .nav-submenu { max-height: 400px; padding-top: 4px; padding-bottom: 6px; }
118
+ .nav-submenu a {
119
+ display: flex; align-items: center;
120
+ padding: 7px 10px;
121
+ font-size: 12.5px;
122
+ color: var(--t-muted);
123
+ border-radius: 6px;
124
+ transition: color 160ms ease, background-color 160ms ease, padding-left 160ms ease;
125
+ }
126
+ .nav-submenu a:hover {
127
+ color: var(--t-base);
128
+ background: var(--bg-hover);
129
+ padding-left: 13px;
130
+ }
131
+ .nav-submenu a.is-active {
132
+ color: var(--primary);
133
+ font-weight: 600;
134
+ background: var(--primary-soft);
135
+ }
136
+
137
+ .sidebar-footer {
138
+ margin-top: auto;
139
+ padding-top: 16px;
140
+ border-top: 1px solid var(--border-soft);
141
+ }
142
+ .workspace {
143
+ display: flex; align-items: center; gap: 10px;
144
+ padding: 6px 10px;
145
+ border-radius: 8px;
146
+ transition: background-color 180ms ease;
147
+ }
148
+ .workspace:hover { background: var(--bg-hover); }
149
+ .workspace-avatar {
150
+ width: 32px; height: 32px;
151
+ border-radius: 50%;
152
+ background: linear-gradient(135deg, var(--primary), var(--purple));
153
+ color: #fff;
154
+ display: grid; place-items: center;
155
+ font-weight: 600;
156
+ font-size: 12.5px;
157
+ flex-shrink: 0;
158
+ }
159
+ .workspace-text { line-height: 1.2; min-width: 0; }
160
+ .workspace-name { font-size: 13px; color: var(--t-base); font-weight: 600; }
161
+ .workspace-role { font-size: 11px; color: var(--t-light); }
162
+ .workspace-chev { margin-left: auto; color: var(--t-light); }
163
+
164
+ /* ============ MAIN ============ */
165
+ .main { display: flex; flex-direction: column; min-width: 0; }
166
+
167
+ /* ============ HAMBURGER (mobile only — see _responsive.scss) ============ */
168
+ .hamburger {
169
+ display: none; /* Shown via media query under 720px */
170
+ width: 36px; height: 36px;
171
+ align-items: center; justify-content: center;
172
+ border-radius: 8px;
173
+ color: var(--t-base);
174
+ margin-right: 4px;
175
+ transition: background 160ms;
176
+ }
177
+ .hamburger:hover { background: var(--bg-hover); }
178
+ .hamburger svg { width: 20px; height: 20px; }
179
+
180
+ /* ============ MOBILE DRAWER BACKDROP ============ */
181
+ .drawer-backdrop {
182
+ position: fixed; inset: 0;
183
+ background: rgb(15 23 42 / 0.5);
184
+ backdrop-filter: blur(2px);
185
+ z-index: 90;
186
+ opacity: 0;
187
+ visibility: hidden;
188
+ transition: opacity 240ms ease, visibility 240ms;
189
+ }
190
+ body.has-drawer-open .drawer-backdrop {
191
+ opacity: 1;
192
+ visibility: visible;
193
+ }
194
+
195
+ /* ============ TOPBAR ============ */
196
+ .d-topbar {
197
+ height: 60px;
198
+ display: flex; align-items: center; justify-content: space-between;
199
+ padding: 0 32px;
200
+ border-bottom: 1px solid var(--border);
201
+ position: sticky; top: 0; z-index: 10;
202
+ backdrop-filter: saturate(140%) blur(10px);
203
+ -webkit-backdrop-filter: saturate(140%) blur(10px);
204
+ background: var(--overlay);
205
+ }
206
+ .crumbs {
207
+ display: flex; align-items: center; gap: 10px;
208
+ color: var(--t-muted);
209
+ font-size: 13px;
210
+ font-weight: 500;
211
+ }
212
+ .crumbs .sep { color: var(--t-light); }
213
+ .crumbs .current { color: var(--t-base); font-weight: 600; }
214
+ .topbar-actions { display: flex; align-items: center; gap: 6px; }
215
+
216
+ .cmd {
217
+ display: inline-flex; align-items: center; gap: 10px;
218
+ padding: 7px 10px 7px 12px;
219
+ border: 1px solid var(--border);
220
+ border-radius: 8px;
221
+ background: var(--bg-card);
222
+ color: var(--t-light);
223
+ font-size: 13px;
224
+ transition: all 200ms ease;
225
+ min-width: 220px;
226
+ }
227
+ .cmd:hover { border-color: var(--primary); color: var(--t-muted); box-shadow: 0 0 0 3px var(--primary-soft); }
228
+ .cmd svg { width: 14px; height: 14px; stroke: currentColor; stroke-width: 2; fill: none; }
229
+ .cmd span { flex: 1; text-align: left; }
230
+ .kbd {
231
+ font-family: 'JetBrains Mono', monospace;
232
+ font-size: 10px;
233
+ padding: 2px 6px;
234
+ border-radius: 4px;
235
+ background: var(--bg-muted);
236
+ color: var(--t-muted);
237
+ border: 1px solid var(--border);
238
+ }
239
+
240
+ .icon-btn {
241
+ width: 36px; height: 36px;
242
+ display: grid; place-items: center;
243
+ border-radius: 8px;
244
+ color: var(--t-muted);
245
+ transition: background 180ms, color 180ms;
246
+ position: relative;
247
+ }
248
+ .icon-btn:hover { background: var(--bg-hover); color: var(--t-base); }
249
+ .icon-btn > svg { width: 17px; height: 17px; stroke: currentColor; stroke-width: 1.8; fill: none; }
250
+ .icon-btn .count {
251
+ position: absolute;
252
+ top: 5px; right: 5px;
253
+ min-width: 16px; height: 16px;
254
+ padding: 0 4px;
255
+ border-radius: 999px;
256
+ font-size: 9.5px;
257
+ font-weight: 600;
258
+ display: grid; place-items: center;
259
+ border: 2px solid var(--bg-body);
260
+ line-height: 1;
261
+ }
262
+ .icon-btn .count.danger { background: var(--danger); color: #fff; }
263
+ .icon-btn .count.info { background: var(--info); color: #fff; }
264
+
265
+ .avatar {
266
+ width: 34px; height: 34px;
267
+ border-radius: 50%;
268
+ background: linear-gradient(135deg, var(--primary), var(--purple));
269
+ color: #fff;
270
+ display: grid; place-items: center;
271
+ font-weight: 600;
272
+ font-size: 13px;
273
+ margin-left: 6px;
274
+ border: 2px solid var(--bg-card);
275
+ box-shadow: var(--shadow-sm);
276
+ cursor: pointer;
277
+ }
278
+
279
+ /* ============ FOOTER ============ */
280
+ .d-footer {
281
+ padding: 24px 32px 28px;
282
+ display: flex;
283
+ justify-content: space-between;
284
+ align-items: center;
285
+ color: var(--t-muted);
286
+ font-size: 12px;
287
+ }
288
+ .d-footer a { color: var(--primary); font-weight: 600; }
289
+ .d-footer a:hover { color: var(--primary-dark); }
290
+ .d-footer-meta { display: flex; gap: 20px; font-family: 'JetBrains Mono', monospace; font-size: 10.5px; color: var(--t-light); letter-spacing: 0.06em; }
@@ -0,0 +1,80 @@
1
+ /* ============ DESIGN TOKENS — 2026 ============ */
2
+
3
+ :root[data-theme="light"] {
4
+ /* Surfaces */
5
+ --bg-body: #F0F4F8;
6
+ --bg-card: #FFFFFF;
7
+ --bg-sidebar: #FFFFFF;
8
+ --bg-hover: #F8FAFC;
9
+ --bg-muted: #F1F5F9;
10
+
11
+ /* Text */
12
+ --t-base: #1E293B;
13
+ --t-muted: #64748B;
14
+ --t-light: #94A3B8;
15
+ --t-inverse: #FFFFFF;
16
+
17
+ /* Borders */
18
+ --border: #E4E8EF;
19
+ --border-soft: #EEF1F5;
20
+
21
+ /* Brand — blue */
22
+ --primary: #2563EB;
23
+ --primary-light: #3B82F6;
24
+ --primary-dark: #1D4ED8;
25
+ --primary-soft: #EFF6FF;
26
+ --primary-ring: rgba(37, 99, 235, 0.18);
27
+
28
+ /* Semantic */
29
+ --success: #10B981;
30
+ --success-soft: #ECFDF5;
31
+ --warning: #F59E0B;
32
+ --warning-soft: #FFFBEB;
33
+ --danger: #EF4444;
34
+ --danger-soft: #FEF2F2;
35
+ --info: #0EA5E9;
36
+ --info-soft: #F0F9FF;
37
+ --purple: #8B5CF6;
38
+ --purple-soft: #F5F3FF;
39
+ --pink: #EC4899;
40
+ --pink-soft: #FDF2F8;
41
+ --teal: #14B8A6;
42
+ --teal-soft: #F0FDFA;
43
+ --orange: #F97316;
44
+ --orange-soft: #FFF7ED;
45
+ --shadow-sm: 0 1px 2px 0 rgb(15 23 42 / 0.04);
46
+ --shadow-card: 0 1px 3px 0 rgb(15 23 42 / 0.06), 0 1px 2px -1px rgb(15 23 42 / 0.04);
47
+ --shadow-lg: 0 10px 15px -3px rgb(15 23 42 / 0.08), 0 4px 6px -4px rgb(15 23 42 / 0.05);
48
+ --overlay: rgba(240, 244, 248, 0.72);
49
+ }
50
+
51
+ :root[data-theme="dark"] {
52
+ --bg-body: #0B1120;
53
+ --bg-card: #141B2D;
54
+ --bg-sidebar: #141B2D;
55
+ --bg-hover: #1C2438;
56
+ --bg-muted: #1A2237;
57
+ --t-base: #F1F5F9;
58
+ --t-muted: #94A3B8;
59
+ --t-light: #64748B;
60
+ --t-inverse: #0B1120;
61
+ --border: #222C42;
62
+ --border-soft: #1A2237;
63
+ --primary: #60A5FA;
64
+ --primary-light: #93C5FD;
65
+ --primary-dark: #3B82F6;
66
+ --primary-soft: #0F2847;
67
+ --primary-ring: rgba(96, 165, 250, 0.24);
68
+ --success: #34D399; --success-soft: #0F2A20;
69
+ --warning: #FBBF24; --warning-soft: #2B1F08;
70
+ --danger: #F87171; --danger-soft: #2B1414;
71
+ --info: #38BDF8; --info-soft: #0D2232;
72
+ --purple: #A78BFA; --purple-soft: #1E1A2C;
73
+ --pink: #F472B6; --pink-soft: #2A1424;
74
+ --teal: #2DD4BF; --teal-soft: #0E2826;
75
+ --orange: #FB923C; --orange-soft: #2A1810;
76
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.4);
77
+ --shadow-card: 0 1px 3px 0 rgb(0 0 0 / 0.3), 0 1px 2px -1px rgb(0 0 0 / 0.25);
78
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.5), 0 4px 6px -4px rgb(0 0 0 / 0.4);
79
+ --overlay: rgba(11, 17, 32, 0.72);
80
+ }