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,520 @@
1
+ /* ============ DASHBOARD-SPECIFIC ============ */
2
+
3
+ /* KPI grid */
4
+ .kpi-grid {
5
+ display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
6
+ gap: 20px;
7
+ margin-bottom: 20px;
8
+ }
9
+ .kpi-card {
10
+ background: var(--bg-card);
11
+ border: 1px solid var(--border);
12
+ border-radius: 14px;
13
+ padding: 22px 22px 20px;
14
+ box-shadow: var(--shadow-card);
15
+ animation: rise-in 600ms cubic-bezier(.2,.7,.2,1) both;
16
+ position: relative;
17
+ overflow: hidden;
18
+ min-width: 0;
19
+ display: flex;
20
+ flex-direction: column;
21
+ gap: 14px;
22
+ transition: transform 220ms cubic-bezier(.2,.7,.2,1),
23
+ box-shadow 220ms ease,
24
+ border-color 220ms ease;
25
+ }
26
+ .kpi-card::before {
27
+ content: '';
28
+ position: absolute;
29
+ inset: 0 0 auto auto;
30
+ width: 180px; height: 180px;
31
+ background: radial-gradient(circle at top right, currentColor, transparent 65%);
32
+ opacity: 0.08;
33
+ pointer-events: none;
34
+ transition: opacity 220ms ease;
35
+ }
36
+ .kpi-card:hover {
37
+ transform: translateY(-2px);
38
+ box-shadow: var(--shadow-lg);
39
+ }
40
+ .kpi-card:hover::before { opacity: 0.14; }
41
+ .kpi-card.c-success { color: var(--success); }
42
+ .kpi-card.c-danger { color: var(--danger); }
43
+ .kpi-card.c-purple { color: var(--purple); }
44
+ .kpi-card.c-primary { color: var(--primary); }
45
+
46
+ .kpi-card:nth-child(1) { animation-delay: 60ms; }
47
+ .kpi-card:nth-child(2) { animation-delay: 120ms; }
48
+ .kpi-card:nth-child(3) { animation-delay: 180ms; }
49
+ .kpi-card:nth-child(4) { animation-delay: 240ms; }
50
+
51
+ .kpi-top {
52
+ display: flex; align-items: center; justify-content: space-between;
53
+ gap: 12px;
54
+ position: relative;
55
+ }
56
+ .kpi-identity {
57
+ display: flex; align-items: center; gap: 10px;
58
+ min-width: 0;
59
+ }
60
+
61
+ .kpi-icon {
62
+ width: 32px; height: 32px;
63
+ border-radius: 9px;
64
+ display: grid; place-items: center;
65
+ flex-shrink: 0;
66
+ }
67
+ .kpi-icon svg { width: 15px; height: 15px; stroke: currentColor; stroke-width: 1.9; fill: none; }
68
+ .kpi-icon.primary { background: var(--primary-soft); color: var(--primary); }
69
+ .kpi-icon.success { background: var(--success-soft); color: var(--success); }
70
+ .kpi-icon.info { background: var(--info-soft); color: var(--info); }
71
+ .kpi-icon.purple { background: var(--purple-soft); color: var(--purple); }
72
+ .kpi-icon.danger { background: var(--danger-soft); color: var(--danger); }
73
+ .kpi-icon.warning { background: var(--warning-soft); color: var(--warning); }
74
+
75
+ .kpi-label {
76
+ font-size: 13px;
77
+ color: var(--t-muted);
78
+ font-weight: 500;
79
+ overflow: hidden;
80
+ text-overflow: ellipsis;
81
+ white-space: nowrap;
82
+ }
83
+
84
+ .kpi-value {
85
+ font-family: 'Inter Tight', 'Inter', sans-serif;
86
+ font-weight: 700;
87
+ font-size: 44px;
88
+ line-height: 1;
89
+ letter-spacing: -0.035em;
90
+ color: var(--t-base);
91
+ position: relative;
92
+ }
93
+ .kpi-value sup {
94
+ font-size: 17px;
95
+ color: var(--t-muted);
96
+ vertical-align: top;
97
+ font-weight: 500;
98
+ margin-left: 3px;
99
+ line-height: 2.1;
100
+ }
101
+
102
+ .kpi-compare {
103
+ display: flex; align-items: center; gap: 7px;
104
+ font-size: 12px;
105
+ color: var(--t-light);
106
+ font-weight: 500;
107
+ padding-top: 12px;
108
+ border-top: 1px dashed var(--border-soft);
109
+ margin-top: auto;
110
+ }
111
+ .kpi-compare strong {
112
+ color: var(--t-base);
113
+ font-weight: 600;
114
+ font-family: 'JetBrains Mono', monospace;
115
+ font-size: 11.5px;
116
+ letter-spacing: -0.01em;
117
+ }
118
+ .kpi-compare svg {
119
+ width: 11px; height: 11px;
120
+ stroke: currentColor;
121
+ stroke-width: 2.2;
122
+ fill: none;
123
+ flex-shrink: 0;
124
+ }
125
+ .kpi-compare .up { color: var(--success); }
126
+ .kpi-compare .down { color: var(--danger); }
127
+ .kpi-compare .flat { color: var(--purple); }
128
+ .kpi-compare .info { color: var(--info); }
129
+ .kpi-compare .sep { color: var(--t-light); opacity: 0.45; font-weight: 400; }
130
+
131
+ .kpi-pill {
132
+ font-family: 'JetBrains Mono', monospace;
133
+ font-size: 10.5px;
134
+ font-weight: 500;
135
+ padding: 4px 9px;
136
+ border-radius: 999px;
137
+ display: inline-flex; align-items: center; gap: 4px;
138
+ letter-spacing: 0.02em;
139
+ flex-shrink: 0;
140
+ }
141
+ .kpi-pill.up { background: var(--success-soft); color: var(--success); }
142
+ .kpi-pill.down { background: var(--danger-soft); color: var(--danger); }
143
+ .kpi-pill.flat { background: var(--purple-soft); color: var(--purple); }
144
+ .kpi-pill.info { background: var(--info-soft); color: var(--info); }
145
+ .kpi-pill svg { width: 10px; height: 10px; stroke: currentColor; stroke-width: 2.5; fill: none; }
146
+
147
+ /* Site Visits regional + radials */
148
+ .sv-regions {
149
+ display: grid;
150
+ grid-template-columns: repeat(4, minmax(0, 1fr));
151
+ gap: 36px;
152
+ }
153
+ .sv-region { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
154
+ .sv-region-head {
155
+ display: flex; align-items: center; gap: 9px;
156
+ font-size: 13px;
157
+ color: var(--t-muted);
158
+ font-weight: 500;
159
+ }
160
+ .sv-region-head .marker { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
161
+ .sv-region-value {
162
+ font-family: 'Inter Tight', sans-serif;
163
+ font-weight: 700;
164
+ font-size: 28px;
165
+ color: var(--t-base);
166
+ letter-spacing: -0.03em;
167
+ line-height: 1.05;
168
+ display: flex; align-items: baseline; gap: 8px;
169
+ }
170
+ .sv-region-value .pct {
171
+ font-family: 'JetBrains Mono', monospace;
172
+ font-size: 11.5px;
173
+ color: var(--t-light);
174
+ font-weight: 500;
175
+ letter-spacing: 0.02em;
176
+ }
177
+ .sv-region-bar {
178
+ height: 3px;
179
+ background: var(--bg-muted);
180
+ border-radius: 99px;
181
+ overflow: hidden;
182
+ margin-top: 2px;
183
+ }
184
+ .sv-region-bar-fill {
185
+ height: 100%;
186
+ border-radius: 99px;
187
+ transform-origin: left;
188
+ animation: bar-in 900ms cubic-bezier(.2,.7,.2,1) 300ms both;
189
+ }
190
+
191
+ .sv-divider {
192
+ height: 1px;
193
+ background: var(--border-soft);
194
+ margin: 28px 0;
195
+ }
196
+
197
+ .sv-radials {
198
+ display: grid;
199
+ grid-template-columns: repeat(3, minmax(0, 1fr));
200
+ gap: 28px;
201
+ }
202
+ .sv-radial {
203
+ display: grid;
204
+ grid-template-columns: 72px 1fr;
205
+ gap: 16px;
206
+ align-items: center;
207
+ }
208
+ .sv-radial-chart {
209
+ width: 72px; height: 72px;
210
+ position: relative;
211
+ flex-shrink: 0;
212
+ }
213
+ .sv-radial-chart svg { width: 100%; height: 100%; transform: rotate(-90deg); }
214
+ .radial-track { stroke: var(--bg-muted); stroke-width: 5; fill: none; }
215
+ .radial-fill { stroke-width: 5; fill: none; stroke-linecap: round; }
216
+ .radial-fill.danger { stroke: var(--danger); }
217
+ .radial-fill.info { stroke: var(--info); }
218
+ .radial-fill.warning { stroke: var(--warning); }
219
+ .sv-radial-chart .pct {
220
+ position: absolute;
221
+ left: 50%; top: 50%;
222
+ transform: translate(-50%, -50%);
223
+ font-family: 'Inter Tight', sans-serif;
224
+ font-weight: 700;
225
+ font-size: 15px;
226
+ color: var(--t-base);
227
+ letter-spacing: -0.022em;
228
+ }
229
+ .sv-radial-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
230
+ .sv-radial-name {
231
+ font-size: 13.5px;
232
+ font-weight: 600;
233
+ color: var(--t-base);
234
+ letter-spacing: -0.005em;
235
+ }
236
+ .sv-radial-caption {
237
+ font-size: 11.5px;
238
+ color: var(--t-muted);
239
+ }
240
+
241
+ /* Monthly chart */
242
+ .chart-svg { width: 100%; height: auto; display: block; }
243
+ .chart-svg .grid-line { stroke: var(--border-soft); stroke-width: 1; stroke-dasharray: 2 4; }
244
+ .chart-svg .axis-label { font-family: 'JetBrains Mono', monospace; font-size: 9.5px; fill: var(--t-light); letter-spacing: 0.04em; }
245
+ .chart-svg .area { fill: url("#chartGrad"); }
246
+ .chart-svg .line {
247
+ fill: none; stroke: var(--primary); stroke-width: 2.2;
248
+ stroke-linecap: round; stroke-linejoin: round;
249
+ stroke-dasharray: 2400;
250
+ stroke-dashoffset: 2400;
251
+ animation: draw 1400ms cubic-bezier(.55,.15,.2,1) 400ms forwards;
252
+ }
253
+ .chart-svg .dot-peak { fill: var(--primary); stroke: var(--bg-card); stroke-width: 3; opacity: 0; animation: fade-in 600ms ease 1400ms forwards; }
254
+
255
+ .monthly-footer {
256
+ display: grid; grid-template-columns: repeat(4, 1fr);
257
+ gap: 18px;
258
+ padding-top: 18px;
259
+ border-top: 1px solid var(--border-soft);
260
+ margin-top: 18px;
261
+ }
262
+ .stat-cell {
263
+ display: flex; flex-direction: column; gap: 4px;
264
+ }
265
+ .stat-cell-label { font-size: 11px; color: var(--t-muted); font-weight: 500; }
266
+ .stat-cell-value {
267
+ font-family: 'Inter Tight', sans-serif;
268
+ font-weight: 700;
269
+ font-size: 18px;
270
+ letter-spacing: -0.022em;
271
+ color: var(--t-base);
272
+ display: flex; align-items: center; gap: 6px;
273
+ }
274
+ .stat-cell-value .trend-ic { width: 11px; height: 11px; color: var(--success); flex-shrink: 0; }
275
+
276
+ /* Todo list */
277
+ .todo-list { display: flex; flex-direction: column; }
278
+ .todo-item {
279
+ display: grid; grid-template-columns: 20px 1fr auto; gap: 12px;
280
+ align-items: center;
281
+ padding: 11px 0;
282
+ border-bottom: 1px solid var(--border-soft);
283
+ }
284
+ .todo-item:last-child { border-bottom: 0; }
285
+ .todo-check {
286
+ appearance: none; -webkit-appearance: none;
287
+ width: 18px; height: 18px;
288
+ border: 1.5px solid var(--t-light);
289
+ border-radius: 6px;
290
+ cursor: pointer;
291
+ position: relative;
292
+ transition: all 160ms ease;
293
+ background: transparent;
294
+ }
295
+ .todo-check:hover { border-color: var(--primary); }
296
+ .todo-check:checked {
297
+ background: var(--primary);
298
+ border-color: var(--primary);
299
+ }
300
+ .todo-check:checked::after {
301
+ content: '';
302
+ position: absolute;
303
+ left: 5px; top: 1px;
304
+ width: 4px; height: 9px;
305
+ border: solid #fff;
306
+ border-width: 0 1.8px 1.8px 0;
307
+ transform: rotate(45deg);
308
+ }
309
+ .todo-item.is-done .todo-text { color: var(--t-light); text-decoration: line-through; text-decoration-thickness: 1.5px; }
310
+ .todo-text { font-size: 13.5px; color: var(--t-base); cursor: pointer; }
311
+ .todo-badge {
312
+ font-size: 10.5px;
313
+ font-weight: 600;
314
+ padding: 3px 9px;
315
+ border-radius: 999px;
316
+ letter-spacing: 0.02em;
317
+ line-height: 1;
318
+ }
319
+ .todo-badge.low { background: var(--bg-muted); color: var(--t-muted); }
320
+ .todo-badge.upcoming { background: var(--info-soft); color: var(--info); }
321
+ .todo-badge.urgent { background: var(--danger-soft); color: var(--danger); }
322
+ .todo-badge.warn { background: var(--warning-soft); color: var(--warning); }
323
+ .todo-badge.done { background: var(--success-soft); color: var(--success); }
324
+
325
+ /* Sales report */
326
+ .sales-summary {
327
+ display: flex; justify-content: space-between; align-items: flex-end;
328
+ padding: 0 0 20px;
329
+ margin-bottom: 4px;
330
+ }
331
+ .sales-summary-label .eyebrow { display: block; margin-bottom: 4px; }
332
+ .sales-summary h4 {
333
+ font-family: 'Inter Tight', sans-serif;
334
+ font-weight: 600;
335
+ font-size: 15px;
336
+ color: var(--t-base);
337
+ margin: 0;
338
+ }
339
+ .sales-summary-total {
340
+ font-family: 'Inter Tight', sans-serif;
341
+ font-weight: 700;
342
+ font-size: 28px;
343
+ letter-spacing: -0.03em;
344
+ color: var(--t-base);
345
+ line-height: 1;
346
+ }
347
+ .sales-summary-total sup { font-size: 15px; color: var(--t-muted); vertical-align: top; font-weight: 500; margin-right: 1px; line-height: 2; }
348
+
349
+ .sales-all {
350
+ padding: 18px 0 0;
351
+ text-align: center;
352
+ margin-top: 6px;
353
+ border-top: 1px solid var(--border-soft);
354
+ }
355
+ .sales-all a {
356
+ font-size: 12.5px;
357
+ color: var(--primary);
358
+ font-weight: 600;
359
+ display: inline-flex; align-items: center; gap: 5px;
360
+ transition: color 180ms;
361
+ }
362
+ .sales-all a:hover { color: var(--primary-dark); }
363
+ .sales-all svg { width: 12px; height: 12px; stroke: currentColor; stroke-width: 2.2; fill: none; }
364
+
365
+ /* Weather */
366
+ .wx-hero {
367
+ display: flex; justify-content: space-between; align-items: flex-start; gap: 16px;
368
+ padding: 8px 0;
369
+ }
370
+ .wx-temp-block { display: flex; align-items: center; gap: 16px; }
371
+ .wx-icon {
372
+ width: 60px; height: 60px;
373
+ border-radius: 16px;
374
+ background: linear-gradient(135deg, var(--info-soft), var(--primary-soft));
375
+ color: var(--info);
376
+ display: grid; place-items: center;
377
+ flex-shrink: 0;
378
+ }
379
+ .wx-icon svg { width: 34px; height: 34px; stroke: currentColor; stroke-width: 1.3; fill: none; }
380
+ .wx-temp {
381
+ font-family: 'Inter Tight', sans-serif;
382
+ font-weight: 700;
383
+ font-size: 44px;
384
+ line-height: 1;
385
+ letter-spacing: -0.035em;
386
+ color: var(--t-base);
387
+ }
388
+ .wx-temp sup { font-size: 18px; color: var(--t-muted); vertical-align: top; font-weight: 500; line-height: 1.6; }
389
+ .wx-condition { margin-top: 4px; color: var(--t-muted); font-size: 13px; }
390
+ .wx-condition strong { color: var(--t-base); font-weight: 600; }
391
+ .wx-date { text-align: right; }
392
+ .wx-date h5 {
393
+ font-family: 'Inter Tight', sans-serif;
394
+ font-weight: 700;
395
+ font-size: 16px;
396
+ color: var(--t-base);
397
+ margin: 0 0 2px;
398
+ letter-spacing: -0.02em;
399
+ }
400
+ .wx-date p {
401
+ font-family: 'JetBrains Mono', monospace;
402
+ font-size: 10.5px;
403
+ color: var(--t-light);
404
+ letter-spacing: 0.06em;
405
+ margin: 0;
406
+ }
407
+
408
+ .wx-stats {
409
+ display: grid; grid-template-columns: repeat(3, 1fr);
410
+ gap: 12px;
411
+ padding: 16px 0;
412
+ border-top: 1px solid var(--border);
413
+ border-bottom: 1px solid var(--border);
414
+ margin: 20px 0 16px;
415
+ }
416
+ .wx-stats > div { display: flex; flex-direction: column; gap: 4px; }
417
+ .wx-stat-label { font-size: 11px; color: var(--t-muted); font-weight: 500; }
418
+ .wx-stat-value {
419
+ font-family: 'Inter Tight', sans-serif;
420
+ font-weight: 700;
421
+ font-size: 16px;
422
+ color: var(--t-base);
423
+ letter-spacing: -0.018em;
424
+ }
425
+ .wx-stat-value .unit { font-size: 11px; color: var(--t-light); margin-left: 3px; font-weight: 500; letter-spacing: 0; }
426
+
427
+ .wx-forecast { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; text-align: center; }
428
+ .wx-day {
429
+ padding: 10px 4px;
430
+ border-radius: 10px;
431
+ cursor: pointer;
432
+ transition: background 160ms ease;
433
+ }
434
+ .wx-day:hover { background: var(--bg-hover); }
435
+ .wx-day.is-today {
436
+ background: var(--primary);
437
+ color: #fff;
438
+ }
439
+ .wx-day-name { font-size: 10.5px; font-weight: 600; color: var(--t-muted); letter-spacing: 0.04em; margin-bottom: 6px; }
440
+ .wx-day.is-today .wx-day-name { color: rgba(255,255,255,0.85); }
441
+ .wx-day-icon { width: 22px; height: 22px; margin: 0 auto 6px; color: var(--t-muted); }
442
+ .wx-day-icon svg { width: 100%; height: 100%; stroke: currentColor; stroke-width: 1.6; fill: none; }
443
+ .wx-day.is-today .wx-day-icon { color: #fff; }
444
+ .wx-day-temp { font-size: 12.5px; color: var(--t-base); font-weight: 600; }
445
+ .wx-day.is-today .wx-day-temp { color: #fff; }
446
+
447
+ /* Quick chat */
448
+ .chat-frame {
449
+ margin: -6px -6px 0;
450
+ border-radius: 12px;
451
+ background: var(--bg-muted);
452
+ overflow: hidden;
453
+ }
454
+ .chat-messages {
455
+ padding: 20px;
456
+ display: flex; flex-direction: column;
457
+ gap: 16px;
458
+ min-height: 200px;
459
+ }
460
+ .chat-row { display: flex; gap: 10px; max-width: min(85%, 560px); }
461
+ .chat-row.me { margin-left: auto; flex-direction: row-reverse; }
462
+ .chat-avatar {
463
+ width: 30px; height: 30px;
464
+ border-radius: 50%;
465
+ background: var(--bg-card);
466
+ color: var(--t-base);
467
+ display: grid; place-items: center;
468
+ font-weight: 600;
469
+ font-size: 11.5px;
470
+ flex-shrink: 0;
471
+ border: 1px solid var(--border);
472
+ }
473
+ .chat-avatar.me { background: linear-gradient(135deg, var(--primary), var(--purple)); color: #fff; border: 0; }
474
+ .chat-stack { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
475
+ .chat-row.me .chat-stack { align-items: flex-end; }
476
+ .chat-bubble {
477
+ padding: 8px 12px;
478
+ background: var(--bg-card);
479
+ border: 1px solid var(--border);
480
+ border-radius: 14px;
481
+ border-top-left-radius: 4px;
482
+ font-size: 13px;
483
+ color: var(--t-base);
484
+ line-height: 1.45;
485
+ box-shadow: var(--shadow-sm);
486
+ }
487
+ .chat-row.me .chat-bubble {
488
+ background: var(--primary); color: #fff; border-color: var(--primary);
489
+ border-top-left-radius: 14px;
490
+ border-top-right-radius: 4px;
491
+ }
492
+ .chat-ts {
493
+ font-family: 'JetBrains Mono', monospace;
494
+ font-size: 9.5px;
495
+ color: var(--t-light);
496
+ letter-spacing: 0.04em;
497
+ padding: 0 4px;
498
+ }
499
+ .chat-input-row {
500
+ display: flex; align-items: center; gap: 8px;
501
+ padding: 12px 14px;
502
+ background: var(--bg-card);
503
+ border-top: 1px solid var(--border);
504
+ }
505
+ .chat-input {
506
+ flex: 1; background: transparent; border: 0; outline: 0;
507
+ font-size: 13.5px; color: var(--t-base); padding: 4px 0;
508
+ }
509
+ .chat-input::placeholder { color: var(--t-light); }
510
+ .chat-send {
511
+ width: 34px; height: 34px;
512
+ display: grid; place-items: center;
513
+ border-radius: 999px;
514
+ background: var(--primary); color: #fff;
515
+ transition: background 180ms;
516
+ flex-shrink: 0;
517
+ box-shadow: 0 2px 6px -1px color-mix(in oklab, var(--primary) 40%, transparent);
518
+ }
519
+ .chat-send:hover { background: var(--primary-dark); }
520
+ .chat-send svg { width: 15px; height: 15px; stroke: currentColor; stroke-width: 2; fill: none; }
@@ -0,0 +1,130 @@
1
+ /* ============ DATA TABLE / RICH TABLE ============ */
2
+
3
+ .data-toolbar {
4
+ display: flex; align-items: center; justify-content: space-between;
5
+ gap: 12px;
6
+ margin-bottom: 16px;
7
+ flex-wrap: wrap;
8
+ }
9
+ .data-toolbar-left { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 240px; }
10
+ .data-toolbar-right { display: flex; align-items: center; gap: 8px; }
11
+ .data-toolbar .input-icon { flex: 1; max-width: 320px; }
12
+
13
+ .data-table {
14
+ width: 100%;
15
+ border-collapse: separate;
16
+ border-spacing: 0;
17
+ }
18
+ .data-table thead th {
19
+ position: sticky; top: 0;
20
+ background: var(--bg-card);
21
+ text-align: left;
22
+ padding: 12px 14px;
23
+ font-family: 'JetBrains Mono', monospace;
24
+ font-size: 10px;
25
+ letter-spacing: 0.14em;
26
+ text-transform: uppercase;
27
+ color: var(--t-light);
28
+ font-weight: 500;
29
+ border-bottom: 1px solid var(--border);
30
+ white-space: nowrap;
31
+ }
32
+ .data-table thead th .sort {
33
+ display: inline-flex; vertical-align: middle;
34
+ margin-left: 4px;
35
+ color: var(--t-light);
36
+ }
37
+ .data-table thead th.sorted-asc .sort,
38
+ .data-table thead th.sorted-desc .sort {
39
+ color: var(--primary);
40
+ }
41
+ .data-table thead th.sorted-asc .sort svg { transform: rotate(180deg); }
42
+ .data-table thead th .sort svg { width: 10px; height: 10px; stroke: currentColor; stroke-width: 2; fill: none; transition: transform 160ms; }
43
+
44
+ .data-table tbody td {
45
+ padding: 12px 14px;
46
+ font-size: 13px;
47
+ color: var(--t-base);
48
+ border-bottom: 1px solid var(--border-soft);
49
+ white-space: nowrap;
50
+ }
51
+ .data-table tbody tr { transition: background 140ms; }
52
+ .data-table tbody tr:hover td { background: var(--bg-hover); }
53
+ .data-table tbody tr.is-selected td { background: var(--primary-soft); }
54
+
55
+ .data-cell-user {
56
+ display: flex; align-items: center; gap: 10px;
57
+ min-width: 0;
58
+ }
59
+ .data-cell-user .av {
60
+ width: 30px; height: 30px;
61
+ border-radius: 50%;
62
+ display: grid; place-items: center;
63
+ color: #fff;
64
+ font-weight: 600;
65
+ font-size: 11px;
66
+ flex-shrink: 0;
67
+ }
68
+ .data-cell-user-meta { line-height: 1.3; min-width: 0; }
69
+ .data-cell-user-name { font-size: 13px; font-weight: 600; color: var(--t-base); }
70
+ .data-cell-user-email {
71
+ font-family: 'JetBrains Mono', monospace;
72
+ font-size: 11px;
73
+ color: var(--t-muted);
74
+ letter-spacing: 0.02em;
75
+ }
76
+
77
+ .data-cell-mono {
78
+ font-family: 'JetBrains Mono', monospace;
79
+ font-size: 12px;
80
+ color: var(--t-muted);
81
+ letter-spacing: 0.02em;
82
+ }
83
+
84
+ .data-cell-actions {
85
+ display: flex; gap: 2px;
86
+ }
87
+ .data-cell-actions .btn--icon {
88
+ padding: 6px;
89
+ background: transparent;
90
+ border: 0;
91
+ color: var(--t-muted);
92
+ border-radius: 6px;
93
+ transition: background 140ms, color 140ms;
94
+ }
95
+ .data-cell-actions .btn--icon:hover { background: var(--bg-hover); color: var(--t-base); }
96
+ .data-cell-actions .btn--icon svg { width: 13px; height: 13px; stroke: currentColor; stroke-width: 1.8; fill: none; }
97
+
98
+ .data-foot {
99
+ display: flex; align-items: center; justify-content: space-between;
100
+ padding-top: 16px;
101
+ margin-top: 4px;
102
+ border-top: 1px solid var(--border-soft);
103
+ font-size: 12px;
104
+ color: var(--t-muted);
105
+ }
106
+ .data-foot-info {
107
+ display: flex; align-items: center; gap: 16px;
108
+ }
109
+ .data-foot-info .select { width: auto; padding: 6px 28px 6px 10px; font-size: 12px; }
110
+
111
+ .pager {
112
+ display: flex; gap: 4px; align-items: center;
113
+ }
114
+ .pager-btn {
115
+ min-width: 30px; height: 30px;
116
+ padding: 0 8px;
117
+ display: grid; place-items: center;
118
+ border-radius: 7px;
119
+ font-size: 12px;
120
+ font-weight: 600;
121
+ color: var(--t-muted);
122
+ transition: background 160ms, color 160ms;
123
+ }
124
+ .pager-btn:hover:not(:disabled) { background: var(--bg-hover); color: var(--t-base); }
125
+ .pager-btn.is-active {
126
+ background: var(--primary);
127
+ color: #fff;
128
+ }
129
+ .pager-btn:disabled { opacity: 0.4; cursor: not-allowed; }
130
+ .pager-btn svg { width: 12px; height: 12px; stroke: currentColor; stroke-width: 2; fill: none; }