@burdenoff/microfe-movethewheels 2026.614.1 → 2026.625.1

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 (110) hide show
  1. package/dist/{AIAssistantPage-FGGTN-DA.js → AIAssistantPage-CNyoKtID.js} +8 -8
  2. package/dist/{AnalyticsPage-DSLYCnln.js → AnalyticsPage-Ck615ox7.js} +21 -21
  3. package/dist/{CreateOrderPage-BgjA_QFT.js → CreateOrderPage-C9Vb57Yn.js} +8 -8
  4. package/dist/{CustomerDetailsPage-Cfvfw12U.js → CustomerDetailsPage-BVkHRZvi.js} +24 -24
  5. package/dist/CustomersPage-DhQg-6h_.js +118 -0
  6. package/dist/{DashboardPage-BeyvN3Mr.js → DashboardPage-DTmyuC11.js} +134 -127
  7. package/dist/{DataTable-oNjXEcUO.js → DataTable-CfWvFw5B.js} +13 -13
  8. package/dist/{DriverDetailsPage-DGTUZG5S.js → DriverDetailsPage-DaaCQ-2O.js} +27 -27
  9. package/dist/DriversPage-D0RMBB_t.js +129 -0
  10. package/dist/{FinancePage-Cyi75iWa.js → FinancePage-BUXqW1IM.js} +11 -11
  11. package/dist/{FleetPage-Dlupg1NZ.js → FleetPage-DCfOmBa2.js} +74 -73
  12. package/dist/{ImportExportPage-D81vnXbH.js → ImportExportPage-BM1BoRcE.js} +9 -9
  13. package/dist/{InventoryPage-D0u2nxRd.js → InventoryPage-BW0QXWuf.js} +68 -73
  14. package/dist/{LiveTrackingPage-CKIlbMBA.js → LiveTrackingPage-DqcGXdkw.js} +26 -26
  15. package/dist/{MarketplacePage-3NpZ0_SK.js → MarketplacePage-DFqsxNYU.js} +13 -13
  16. package/dist/MetricCard-B7yMyvMX.js +146 -0
  17. package/dist/{OrderDetailsPage-BeGWzAws.js → OrderDetailsPage-Dx1m3cVA.js} +34 -34
  18. package/dist/{OrdersListPage-DczM6NXa.js → OrdersListPage-DHYBGrWf.js} +78 -79
  19. package/dist/{PageLayout-3DR4pMQ9.js → PageLayout-D3N8MCTm.js} +628 -568
  20. package/dist/{ProductDetailsPage-Czcrqe2F.js → ProductDetailsPage-DOXO90kb.js} +15 -15
  21. package/dist/{ProductsPage-DJhdrfox.js → ProductsPage-RLMTwWN0.js} +42 -40
  22. package/dist/{ReportsPage-DPqE4Q3D.js → ReportsPage-Df3hciPy.js} +10 -10
  23. package/dist/{RouteDetailsPage-j6ZczLRT.js → RouteDetailsPage-xzFDeR-X.js} +22 -22
  24. package/dist/{RoutesPage-OZM7lJDi.js → RoutesPage-DDFy1QVi.js} +32 -30
  25. package/dist/{SettingsPage-v6vRyIAp.js → SettingsPage-JH_-UPbf.js} +7 -7
  26. package/dist/{StatusBadge-elLZA4Wl.js → StatusBadge-CijYQXtb.js} +5 -2
  27. package/dist/{TrackingPage-CBmGvTW_.js → TrackingPage-CU0Vk4mx.js} +31 -31
  28. package/dist/{VehicleDetailsPage-DJXYkTN2.js → VehicleDetailsPage-P4xDttKw.js} +21 -21
  29. package/dist/VehiclesPage-tJZ64QKV.js +129 -0
  30. package/dist/{WarehouseDetailsPage-nMZvp56W.js → WarehouseDetailsPage-Bt_w2Yf7.js} +19 -19
  31. package/dist/{WarehousesPage-BcJ_QrK3.js → WarehousesPage-HsPpEFeG.js} +40 -35
  32. package/dist/arrow-left-CBpZKkpq.js +11 -0
  33. package/dist/{box-CnErOGkD.js → box-CAaiElsb.js} +2 -2
  34. package/dist/{chart-column-CFT0jC9N.js → chart-column-D1Ym15-S.js} +2 -2
  35. package/dist/chevron-right-BIFGi0UA.js +8 -0
  36. package/dist/{circle-alert-B2pZQFzu.js → circle-alert-DjmNo5_L.js} +2 -2
  37. package/dist/circle-check-big-CjuPVo3_.js +11 -0
  38. package/dist/{clock-DP-76dyQ.js → clock-BjkdnddD.js} +2 -2
  39. package/dist/{dollar-sign-CrwqdoEC.js → dollar-sign-IB4O0wuQ.js} +2 -2
  40. package/dist/{download-CQqBpPk5.js → download-Dpa9vqoG.js} +2 -2
  41. package/dist/{file-text-CnHcsdsc.js → file-text-C8Uioy11.js} +2 -2
  42. package/dist/filter-Da5OZaHI.js +8 -0
  43. package/dist/index.js +52 -50
  44. package/dist/{map-qljBUQ1N.js → map-_Per4sT9.js} +2 -2
  45. package/dist/{map-pin-4a-IA2NP.js → map-pin-BSaf5IDL.js} +2 -2
  46. package/dist/navigation-DaTbrhw2.js +8 -0
  47. package/dist/{package-CPePjBwW.js → package-BE7U0wQE.js} +2 -2
  48. package/dist/{phone-2rkA8w_3.js → phone-DV4StZiA.js} +2 -2
  49. package/dist/plus-Dl1rLeJR.js +11 -0
  50. package/dist/{refresh-cw-oWEqfHnS.js → refresh-cw-CWfERAit.js} +2 -2
  51. package/dist/{route-DBljW-z4.js → route-Dp9JiN_E.js} +2 -2
  52. package/dist/{save-Cjsx5R5Y.js → save-XH8vydOn.js} +2 -2
  53. package/dist/search-OxoIiL_C.js +13 -0
  54. package/dist/{settings-CX94mtOc.js → settings-3Rw5NwFF.js} +2 -2
  55. package/dist/{square-pen-BIgbw83U.js → square-pen-hLIbFQFV.js} +2 -2
  56. package/dist/{star-BW23nRLp.js → star-YsVV3MNQ.js} +2 -2
  57. package/dist/{store-Cdk0UEPT.js → store-RCBl7HB-.js} +2 -2
  58. package/dist/{trending-up-DYQ3Xns5.js → trending-up-C-85AwGT.js} +2 -2
  59. package/dist/{triangle-alert-Ck_oBZ7n.js → triangle-alert-BOhfGgmh.js} +2 -2
  60. package/dist/{truck-Cd54agV-.js → truck-CtDjNFbi.js} +2 -2
  61. package/dist/{user-CUEmQUkJ.js → user-Dz5TJZFs.js} +2 -2
  62. package/dist/{users-e-wRlQnX.js → users-g2N0eL-Z.js} +2 -2
  63. package/dist/{warehouse-DXnNb4kf.js → warehouse-D3WWDeTX.js} +2 -2
  64. package/dist/{wrench-DYJo0U8_.js → wrench-CmxY1n4I.js} +2 -2
  65. package/package.json +2 -2
  66. package/src/dev/main.tsx +4 -4
  67. package/src/movethewheels/MoveTheWheelsRoutes.tsx +1 -1
  68. package/src/movethewheels/components/DataTable.tsx +10 -10
  69. package/src/movethewheels/components/MetricCard.tsx +52 -23
  70. package/src/movethewheels/components/PageLayout.tsx +70 -15
  71. package/src/movethewheels/components/StatusBadge.tsx +2 -1
  72. package/src/movethewheels/components/ui.tsx +3 -3
  73. package/src/movethewheels/pages/AIAssistantPage.tsx +3 -3
  74. package/src/movethewheels/pages/AnalyticsPage.tsx +13 -13
  75. package/src/movethewheels/pages/CreateOrderPage.tsx +2 -2
  76. package/src/movethewheels/pages/CustomerDetailsPage.tsx +14 -14
  77. package/src/movethewheels/pages/CustomersPage.tsx +14 -13
  78. package/src/movethewheels/pages/DashboardPage.tsx +71 -64
  79. package/src/movethewheels/pages/DriverDetailsPage.tsx +17 -17
  80. package/src/movethewheels/pages/DriversPage.tsx +12 -15
  81. package/src/movethewheels/pages/FinancePage.tsx +4 -4
  82. package/src/movethewheels/pages/FleetPage.tsx +23 -18
  83. package/src/movethewheels/pages/ImportExportPage.tsx +5 -5
  84. package/src/movethewheels/pages/InventoryPage.tsx +25 -18
  85. package/src/movethewheels/pages/LiveTrackingPage.tsx +18 -18
  86. package/src/movethewheels/pages/MarketplacePage.tsx +6 -6
  87. package/src/movethewheels/pages/OrderDetailsPage.tsx +20 -20
  88. package/src/movethewheels/pages/OrdersListPage.tsx +22 -16
  89. package/src/movethewheels/pages/ProductDetailsPage.tsx +8 -8
  90. package/src/movethewheels/pages/ProductsPage.tsx +10 -13
  91. package/src/movethewheels/pages/ReportsPage.tsx +5 -5
  92. package/src/movethewheels/pages/RouteDetailsPage.tsx +13 -13
  93. package/src/movethewheels/pages/RoutesPage.tsx +12 -9
  94. package/src/movethewheels/pages/SettingsPage.tsx +2 -2
  95. package/src/movethewheels/pages/TrackingPage.tsx +23 -23
  96. package/src/movethewheels/pages/VehicleDetailsPage.tsx +13 -13
  97. package/src/movethewheels/pages/VehiclesPage.tsx +11 -17
  98. package/src/movethewheels/pages/WarehouseDetailsPage.tsx +11 -11
  99. package/src/movethewheels/pages/WarehousesPage.tsx +11 -12
  100. package/dist/CustomersPage-DXnx04Au.js +0 -119
  101. package/dist/DriversPage-CRursDRZ.js +0 -127
  102. package/dist/MetricCard-BDcT-7Ei.js +0 -135
  103. package/dist/VehiclesPage-r_snhuEj.js +0 -127
  104. package/dist/arrow-left-Crb7WKr1.js +0 -11
  105. package/dist/chevron-right-Bzo6Rr8_.js +0 -8
  106. package/dist/circle-check-big-R_fjEgxM.js +0 -11
  107. package/dist/filter-CgTF21j9.js +0 -8
  108. package/dist/navigation-CqRTj3vI.js +0 -8
  109. package/dist/plus-Dew5yoQK.js +0 -11
  110. package/dist/search-FWYzDbBx.js +0 -13
@@ -62,8 +62,8 @@ export default function AnalyticsPage() {
62
62
  <CardTitle>Order Trends</CardTitle>
63
63
  </CardHeader>
64
64
  <CardContent>
65
- <div className="h-64 flex items-center justify-center bg-muted/50 rounded-lg">
66
- <div className="text-center text-muted-foreground">
65
+ <div className="h-64 flex items-center justify-center bg-bg-sunken/50 rounded-lg">
66
+ <div className="text-center text-text-secondary">
67
67
  <BarChart3 size={48} className="mx-auto mb-2 opacity-50" />
68
68
  <p>Order trend chart</p>
69
69
  <p className="text-xs">(Chart library integration needed)</p>
@@ -71,8 +71,8 @@ export default function AnalyticsPage() {
71
71
  </div>
72
72
  <div className="mt-4 grid grid-cols-4 gap-2">
73
73
  {orderData.trends.slice(-4).map((t) => (
74
- <div key={t.date} className="text-center p-2 bg-muted/50 rounded">
75
- <p className="text-xs text-muted-foreground">
74
+ <div key={t.date} className="text-center p-2 bg-bg-sunken/50 rounded">
75
+ <p className="text-xs text-text-secondary">
76
76
  {t.date.split('-').slice(1).join('/')}
77
77
  </p>
78
78
  <p className="font-medium">{t.orders}</p>
@@ -87,16 +87,16 @@ export default function AnalyticsPage() {
87
87
  <CardTitle>Revenue Trends</CardTitle>
88
88
  </CardHeader>
89
89
  <CardContent>
90
- <div className="h-64 flex items-center justify-center bg-muted/50 rounded-lg">
91
- <div className="text-center text-muted-foreground">
90
+ <div className="h-64 flex items-center justify-center bg-bg-sunken/50 rounded-lg">
91
+ <div className="text-center text-text-secondary">
92
92
  <TrendingUp size={48} className="mx-auto mb-2 opacity-50" />
93
93
  <p>Revenue trend chart</p>
94
94
  </div>
95
95
  </div>
96
96
  <div className="mt-4 grid grid-cols-5 gap-2">
97
97
  {analytics.trends.revenue.map((r) => (
98
- <div key={r.month} className="text-center p-2 bg-muted/50 rounded">
99
- <p className="text-xs text-muted-foreground">{r.month}</p>
98
+ <div key={r.month} className="text-center p-2 bg-bg-sunken/50 rounded">
99
+ <p className="text-xs text-text-secondary">{r.month}</p>
100
100
  <p className="font-medium text-sm">{formatCurrency(r.revenue / 1000)}k</p>
101
101
  </div>
102
102
  ))}
@@ -148,7 +148,7 @@ export default function AnalyticsPage() {
148
148
  <Progress value={fleetData.avgFuelLevel} />
149
149
  </div>
150
150
  <div className="pt-2">
151
- <p className="text-sm text-muted-foreground mb-2">Vehicles by Type</p>
151
+ <p className="text-sm text-text-secondary mb-2">Vehicles by Type</p>
152
152
  {fleetData.vehiclesByType.map(({ type, count }) => (
153
153
  <div key={type} className="flex justify-between text-sm py-1">
154
154
  <span className="capitalize">{type}</span>
@@ -165,21 +165,21 @@ export default function AnalyticsPage() {
165
165
  </CardHeader>
166
166
  <CardContent className="space-y-4">
167
167
  <div>
168
- <p className="text-sm text-muted-foreground">On-Time Pickup</p>
168
+ <p className="text-sm text-text-secondary">On-Time Pickup</p>
169
169
  <p className="text-2xl font-bold">{analytics.performance.onTimePickup}%</p>
170
170
  </div>
171
171
  <div>
172
- <p className="text-sm text-muted-foreground">On-Time Delivery</p>
172
+ <p className="text-sm text-text-secondary">On-Time Delivery</p>
173
173
  <p className="text-2xl font-bold">{analytics.performance.onTimeDelivery}%</p>
174
174
  </div>
175
175
  <div>
176
- <p className="text-sm text-muted-foreground">Damaged Items</p>
176
+ <p className="text-sm text-text-secondary">Damaged Items</p>
177
177
  <p className="text-2xl font-bold text-green-600">
178
178
  {analytics.performance.damagedItems}%
179
179
  </p>
180
180
  </div>
181
181
  <div>
182
- <p className="text-sm text-muted-foreground">Driver Ratings</p>
182
+ <p className="text-sm text-text-secondary">Driver Ratings</p>
183
183
  <p className="text-2xl font-bold">{analytics.performance.driverRatings}/5</p>
184
184
  </div>
185
185
  </CardContent>
@@ -363,7 +363,7 @@ export default function CreateOrderPage() {
363
363
  </CardHeader>
364
364
  <CardContent>
365
365
  {formData.items.length === 0 ? (
366
- <div className="text-center py-8 text-muted-foreground">
366
+ <div className="text-center py-8 text-text-secondary">
367
367
  <Package size={48} className="mx-auto mb-4 opacity-50" />
368
368
  <p>No items added yet</p>
369
369
  <Button type="button" variant="link" onClick={addItem}>
@@ -420,7 +420,7 @@ export default function CreateOrderPage() {
420
420
  type="button"
421
421
  variant="ghost"
422
422
  size="icon"
423
- className="text-destructive"
423
+ className="text-status-error-text"
424
424
  onClick={() => removeItem(index)}
425
425
  >
426
426
  <Trash2 size={16} />
@@ -44,7 +44,7 @@ export default function CustomerDetailsPage() {
44
44
  >
45
45
  <Card>
46
46
  <CardContent className="p-8 text-center">
47
- <p className="text-muted-foreground">Customer creation form would go here</p>
47
+ <p className="text-text-secondary">Customer creation form would go here</p>
48
48
  </CardContent>
49
49
  </Card>
50
50
  </PageLayout>
@@ -92,16 +92,16 @@ export default function CustomerDetailsPage() {
92
92
  <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
93
93
  <div className="space-y-4">
94
94
  <div className="flex items-center gap-3">
95
- <Mail size={18} className="text-muted-foreground" />
95
+ <Mail size={18} className="text-text-secondary" />
96
96
  <div>
97
- <p className="text-sm text-muted-foreground">Email</p>
97
+ <p className="text-sm text-text-secondary">Email</p>
98
98
  <p className="font-medium">{customer.email}</p>
99
99
  </div>
100
100
  </div>
101
101
  <div className="flex items-center gap-3">
102
- <Phone size={18} className="text-muted-foreground" />
102
+ <Phone size={18} className="text-text-secondary" />
103
103
  <div>
104
- <p className="text-sm text-muted-foreground">Phone</p>
104
+ <p className="text-sm text-text-secondary">Phone</p>
105
105
  <p className="font-medium">{customer.phone}</p>
106
106
  </div>
107
107
  </div>
@@ -109,16 +109,16 @@ export default function CustomerDetailsPage() {
109
109
  <div className="space-y-4">
110
110
  {customer.company && (
111
111
  <div className="flex items-center gap-3">
112
- <Building size={18} className="text-muted-foreground" />
112
+ <Building size={18} className="text-text-secondary" />
113
113
  <div>
114
- <p className="text-sm text-muted-foreground">Company</p>
114
+ <p className="text-sm text-text-secondary">Company</p>
115
115
  <p className="font-medium">{customer.company}</p>
116
116
  </div>
117
117
  </div>
118
118
  )}
119
119
  {customer.website && (
120
120
  <div>
121
- <p className="text-sm text-muted-foreground">Website</p>
121
+ <p className="text-sm text-text-secondary">Website</p>
122
122
  <a href={customer.website} className="text-primary hover:underline">
123
123
  {customer.website}
124
124
  </a>
@@ -162,22 +162,22 @@ export default function CustomerDetailsPage() {
162
162
  <CardContent className="space-y-3">
163
163
  {customer.businessLicense && (
164
164
  <div>
165
- <p className="text-sm text-muted-foreground">Business License</p>
165
+ <p className="text-sm text-text-secondary">Business License</p>
166
166
  <p className="font-mono">{customer.businessLicense}</p>
167
167
  </div>
168
168
  )}
169
169
  {customer.taxId && (
170
170
  <div>
171
- <p className="text-sm text-muted-foreground">Tax ID</p>
171
+ <p className="text-sm text-text-secondary">Tax ID</p>
172
172
  <p className="font-mono">{customer.taxId}</p>
173
173
  </div>
174
174
  )}
175
175
  <div>
176
- <p className="text-sm text-muted-foreground">Preferred Contact</p>
176
+ <p className="text-sm text-text-secondary">Preferred Contact</p>
177
177
  <p className="capitalize">{customer.preferredContactMethod}</p>
178
178
  </div>
179
179
  <div>
180
- <p className="text-sm text-muted-foreground">Marketing Opt-in</p>
180
+ <p className="text-sm text-text-secondary">Marketing Opt-in</p>
181
181
  <Badge variant={customer.marketingOptIn ? 'default' : 'secondary'}>
182
182
  {customer.marketingOptIn ? 'Yes' : 'No'}
183
183
  </Badge>
@@ -191,11 +191,11 @@ export default function CustomerDetailsPage() {
191
191
  </CardHeader>
192
192
  <CardContent className="space-y-3">
193
193
  <div>
194
- <p className="text-sm text-muted-foreground">Created</p>
194
+ <p className="text-sm text-text-secondary">Created</p>
195
195
  <p>{formatDate(customer.createdAt, 'full')}</p>
196
196
  </div>
197
197
  <div>
198
- <p className="text-sm text-muted-foreground">Last Updated</p>
198
+ <p className="text-sm text-text-secondary">Last Updated</p>
199
199
  <p>{formatDate(customer.updatedAt, 'relative')}</p>
200
200
  </div>
201
201
  </CardContent>
@@ -6,7 +6,8 @@ import { Users, Plus, RefreshCw, Download, Star } from 'lucide-react';
6
6
  import { PageLayout } from '../components/PageLayout';
7
7
  import { DataTable, type Column } from '../components/DataTable';
8
8
  import { TypeBadge } from '../components/StatusBadge';
9
- import { Button, Badge, Avatar, AvatarFallback } from '../components/ui';
9
+ import { Badge, Avatar, AvatarFallback } from '../components/ui';
10
+ import { CTAOverflowMenu } from '@burdenoff/fe-libs/ui';
10
11
  import { useCustomers } from '../hooks/useCustomers';
11
12
  import { useMoveTheWheels } from '../providers/MoveTheWheelsProvider';
12
13
  import { formatDate } from '../utils/formatters';
@@ -35,7 +36,7 @@ export default function CustomersPage() {
35
36
  </Avatar>
36
37
  <div>
37
38
  <p className="font-medium">{row.name}</p>
38
- <p className="text-sm text-muted-foreground">{row.email}</p>
39
+ <p className="text-sm text-text-secondary">{row.email}</p>
39
40
  </div>
40
41
  </div>
41
42
  ),
@@ -87,17 +88,17 @@ export default function CustomersPage() {
87
88
  subtitle={`${totalCustomers} customers`}
88
89
  icon={<Users size={24} />}
89
90
  headerActions={
90
- <div className="flex gap-2">
91
- <Button variant="outline" onClick={refetch}>
92
- <RefreshCw size={16} /> Refresh
93
- </Button>
94
- <Button variant="outline">
95
- <Download size={16} /> Export
96
- </Button>
97
- <Button onClick={() => goTo('customers/new')}>
98
- <Plus size={16} /> Add Customer
99
- </Button>
100
- </div>
91
+ <CTAOverflowMenu
92
+ primary={{
93
+ label: 'Add Customer',
94
+ icon: <Plus size={16} />,
95
+ onSelect: () => goTo('customers/new'),
96
+ }}
97
+ actions={[
98
+ { label: 'Refresh', icon: <RefreshCw size={16} />, onSelect: () => refetch() },
99
+ { label: 'Export', icon: <Download size={16} />, onSelect: () => {} },
100
+ ]}
101
+ />
101
102
  }
102
103
  >
103
104
  <DataTable
@@ -27,6 +27,7 @@ import {
27
27
  Badge,
28
28
  Progress,
29
29
  } from '../components/ui';
30
+ import { CTAOverflowMenu, EmphasisPanel } from '@burdenoff/fe-libs/ui';
30
31
  import { useDashboardMetrics } from '../hooks/useAnalytics';
31
32
  import { useOrders, useOrderStats } from '../hooks/useOrders';
32
33
  import { useFleetStats } from '../hooks/useFleet';
@@ -57,20 +58,26 @@ export default function DashboardPage() {
57
58
 
58
59
  return (
59
60
  <PageLayout
61
+ hero
62
+ titleAccent={t('movethewheels.dashboard.title', 'Dashboard')}
60
63
  title={t('movethewheels.dashboard.title', 'Dashboard')}
61
64
  subtitle={t('movethewheels.dashboard.subtitle', 'Overview of your logistics operations')}
62
65
  icon={<TrendingUp size={24} />}
63
66
  headerActions={
64
- <div className="flex gap-2">
65
- <Button variant="outline" onClick={() => goTo('tracking/live')}>
66
- <MapPin size={16} />
67
- {t('movethewheels.dashboard.actions.liveMap', 'Live Map')}
68
- </Button>
69
- <Button onClick={() => goTo('orders/new')}>
70
- <Package size={16} />
71
- {t('movethewheels.dashboard.actions.newOrder', 'New Order')}
72
- </Button>
73
- </div>
67
+ <CTAOverflowMenu
68
+ primary={{
69
+ label: t('movethewheels.dashboard.actions.newOrder', 'New Order'),
70
+ icon: <Package size={16} />,
71
+ onSelect: () => goTo('orders/new'),
72
+ }}
73
+ actions={[
74
+ {
75
+ label: t('movethewheels.dashboard.actions.liveMap', 'Live Map'),
76
+ icon: <MapPin size={16} />,
77
+ onSelect: () => goTo('tracking/live'),
78
+ },
79
+ ]}
80
+ />
74
81
  }
75
82
  >
76
83
  {/* Key Metrics */}
@@ -99,6 +106,8 @@ export default function DashboardPage() {
99
106
  onClick={() => goTo('fleet')}
100
107
  />
101
108
  <MetricCard
109
+ treatment="glass"
110
+ glow
102
111
  label={t('movethewheels.dashboard.metrics.revenue', 'Revenue')}
103
112
  value={formatCurrency(metrics.revenue.total)}
104
113
  icon={<DollarSign size={20} />}
@@ -151,17 +160,17 @@ export default function DashboardPage() {
151
160
  {orders.slice(0, 5).map((order) => (
152
161
  <div
153
162
  key={order.id}
154
- className="p-4 hover:bg-muted/50 cursor-pointer transition-colors"
163
+ className="p-4 hover:bg-bg-sunken/50 cursor-pointer transition-colors"
155
164
  onClick={() => goTo(`orders/${order.id}`)}
156
165
  >
157
166
  <div className="flex items-center justify-between">
158
167
  <div>
159
168
  <p className="font-medium">{order.orderNumber}</p>
160
- <p className="text-sm text-muted-foreground">{order.customerInfo.name}</p>
169
+ <p className="text-sm text-text-secondary">{order.customerInfo.name}</p>
161
170
  </div>
162
171
  <div className="text-right">
163
172
  <StatusBadge status={order.status} type="order" size="sm" />
164
- <p className="text-sm text-muted-foreground mt-1">
173
+ <p className="text-sm text-text-secondary mt-1">
165
174
  {formatCurrency(order.pricing.total)}
166
175
  </p>
167
176
  </div>
@@ -169,7 +178,7 @@ export default function DashboardPage() {
169
178
  </div>
170
179
  ))}
171
180
  {orders.length === 0 && (
172
- <div className="p-8 text-center text-muted-foreground">
181
+ <div className="p-8 text-center text-text-secondary">
173
182
  {t('movethewheels.dashboard.recentOrders.empty', 'No recent orders')}
174
183
  </div>
175
184
  )}
@@ -195,13 +204,13 @@ export default function DashboardPage() {
195
204
  delivery.order ? (
196
205
  <div
197
206
  key={delivery.order.id}
198
- className="p-4 hover:bg-muted/50 cursor-pointer transition-colors"
207
+ className="p-4 hover:bg-bg-sunken/50 cursor-pointer transition-colors"
199
208
  onClick={() => goTo(`tracking?order=${delivery.order.id}`)}
200
209
  >
201
210
  <div className="flex items-center justify-between">
202
211
  <div>
203
212
  <p className="font-medium">{delivery.order.orderNumber}</p>
204
- <p className="text-sm text-muted-foreground">
213
+ <p className="text-sm text-text-secondary">
205
214
  {delivery.driver?.fullName ||
206
215
  t(
207
216
  'movethewheels.dashboard.activeDeliveries.unassigned',
@@ -211,7 +220,7 @@ export default function DashboardPage() {
211
220
  </div>
212
221
  <div className="text-right">
213
222
  <StatusBadge status={delivery.order.status} type="order" size="sm" />
214
- <p className="text-sm text-muted-foreground mt-1">
223
+ <p className="text-sm text-text-secondary mt-1">
215
224
  {t('movethewheels.dashboard.activeDeliveries.eta', 'ETA:')}{' '}
216
225
  {delivery.estimatedArrival
217
226
  ? formatDate(delivery.estimatedArrival, 'time')
@@ -223,7 +232,7 @@ export default function DashboardPage() {
223
232
  ) : null
224
233
  )}
225
234
  {activeDeliveries.length === 0 && (
226
- <div className="p-8 text-center text-muted-foreground">
235
+ <div className="p-8 text-center text-text-secondary">
227
236
  {t('movethewheels.dashboard.activeDeliveries.empty', 'No active deliveries')}
228
237
  </div>
229
238
  )}
@@ -234,45 +243,43 @@ export default function DashboardPage() {
234
243
  </div>
235
244
 
236
245
  <div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
237
- {/* Order Status Summary */}
238
- <Card>
239
- <CardHeader>
240
- <CardTitle className="text-base">
241
- {t('movethewheels.dashboard.orderStatus.title', 'Order Status')}
242
- </CardTitle>
243
- </CardHeader>
244
- <CardContent className="space-y-4">
245
- <div className="space-y-3">
246
- {[
247
- { status: 'pending', count: orderStats.byStatus.pending, color: 'bg-yellow-500' },
248
- {
249
- status: 'in_transit',
250
- count: orderStats.byStatus.in_transit,
251
- color: 'bg-blue-500',
252
- },
253
- {
254
- status: 'delivered',
255
- count: orderStats.byStatus.delivered,
256
- color: 'bg-green-500',
257
- },
258
- { status: 'cancelled', count: orderStats.byStatus.cancelled, color: 'bg-red-500' },
259
- ].map(({ status, count, color }) => (
260
- <div key={status} className="flex items-center justify-between">
261
- <div className="flex items-center gap-2">
262
- <div className={`w-2 h-2 rounded-full ${color}`} />
263
- <span className="text-sm capitalize">
264
- {t(
265
- `movethewheels.dashboard.orderStatus.status.${status}`,
266
- status.replace('_', ' ')
267
- )}
268
- </span>
269
- </div>
270
- <Badge variant="secondary">{count}</Badge>
246
+ {/* Order Status Summary — the page's single emphasis zone */}
247
+ <EmphasisPanel className="space-y-4">
248
+ <h2 className="text-base font-semibold text-text-primary">
249
+ {t('movethewheels.dashboard.orderStatus.title', 'Order Status')}
250
+ </h2>
251
+ <div className="space-y-3">
252
+ {[
253
+ { status: 'pending', count: orderStats.byStatus.pending, color: 'bg-yellow-500' },
254
+ {
255
+ status: 'in_transit',
256
+ count: orderStats.byStatus.in_transit,
257
+ color: 'bg-blue-500',
258
+ },
259
+ {
260
+ status: 'delivered',
261
+ count: orderStats.byStatus.delivered,
262
+ color: 'bg-green-500',
263
+ },
264
+ { status: 'cancelled', count: orderStats.byStatus.cancelled, color: 'bg-red-500' },
265
+ ].map(({ status, count, color }) => (
266
+ <div key={status} className="flex items-center justify-between">
267
+ <div className="flex items-center gap-2">
268
+ <div className={`w-2 h-2 rounded-full ${color}`} />
269
+ <span className="text-sm capitalize">
270
+ {t(
271
+ `movethewheels.dashboard.orderStatus.status.${status}`,
272
+ status.replace('_', ' ')
273
+ )}
274
+ </span>
271
275
  </div>
272
- ))}
273
- </div>
274
- </CardContent>
275
- </Card>
276
+ <Badge variant="secondary" className="tabular-nums">
277
+ {count}
278
+ </Badge>
279
+ </div>
280
+ ))}
281
+ </div>
282
+ </EmphasisPanel>
276
283
 
277
284
  {/* Fleet Status */}
278
285
  <Card>
@@ -296,7 +303,7 @@ export default function DashboardPage() {
296
303
  </div>
297
304
  <div className="grid grid-cols-2 gap-4 text-sm">
298
305
  <div>
299
- <p className="text-muted-foreground">
306
+ <p className="text-text-secondary">
300
307
  {t('movethewheels.dashboard.fleetStatus.available', 'Available')}
301
308
  </p>
302
309
  <p className="text-lg font-semibold text-green-600">
@@ -304,7 +311,7 @@ export default function DashboardPage() {
304
311
  </p>
305
312
  </div>
306
313
  <div>
307
- <p className="text-muted-foreground">
314
+ <p className="text-text-secondary">
308
315
  {t('movethewheels.dashboard.fleetStatus.inUse', 'In Use')}
309
316
  </p>
310
317
  <p className="text-lg font-semibold text-blue-600">
@@ -312,7 +319,7 @@ export default function DashboardPage() {
312
319
  </p>
313
320
  </div>
314
321
  <div>
315
- <p className="text-muted-foreground">
322
+ <p className="text-text-secondary">
316
323
  {t('movethewheels.dashboard.fleetStatus.maintenance', 'Maintenance')}
317
324
  </p>
318
325
  <p className="text-lg font-semibold text-yellow-600">
@@ -320,7 +327,7 @@ export default function DashboardPage() {
320
327
  </p>
321
328
  </div>
322
329
  <div>
323
- <p className="text-muted-foreground">
330
+ <p className="text-text-secondary">
324
331
  {t('movethewheels.dashboard.fleetStatus.avgFuel', 'Avg Fuel')}
325
332
  </p>
326
333
  <p className="text-lg font-semibold">{fleetStats.avgFuelLevel.toFixed(0)}%</p>
@@ -346,7 +353,7 @@ export default function DashboardPage() {
346
353
  <p className="text-sm font-medium">
347
354
  {t('movethewheels.dashboard.alerts.pendingOrders.title', 'Pending Orders')}
348
355
  </p>
349
- <p className="text-xs text-muted-foreground">
356
+ <p className="text-xs text-text-secondary">
350
357
  {orderStats.byStatus.pending}{' '}
351
358
  {t(
352
359
  'movethewheels.dashboard.alerts.pendingOrders.description',
@@ -366,7 +373,7 @@ export default function DashboardPage() {
366
373
  'Vehicles in Maintenance'
367
374
  )}
368
375
  </p>
369
- <p className="text-xs text-muted-foreground">
376
+ <p className="text-xs text-text-secondary">
370
377
  {fleetStats.vehiclesByStatus.maintenance}{' '}
371
378
  {t(
372
379
  'movethewheels.dashboard.alerts.maintenanceVehicles.description',
@@ -383,7 +390,7 @@ export default function DashboardPage() {
383
390
  <p className="text-sm font-medium">
384
391
  {t('movethewheels.dashboard.alerts.offlineDrivers.title', 'Offline Drivers')}
385
392
  </p>
386
- <p className="text-xs text-muted-foreground">
393
+ <p className="text-xs text-text-secondary">
387
394
  {fleetStats.driversByStatus.offline}{' '}
388
395
  {t(
389
396
  'movethewheels.dashboard.alerts.offlineDrivers.description',
@@ -396,7 +403,7 @@ export default function DashboardPage() {
396
403
  {orderStats.byStatus.pending <= 5 &&
397
404
  fleetStats.vehiclesByStatus.maintenance === 0 &&
398
405
  fleetStats.driversByStatus.offline === 0 && (
399
- <div className="text-center py-4 text-muted-foreground">
406
+ <div className="text-center py-4 text-text-secondary">
400
407
  <p className="text-sm">
401
408
  {t(
402
409
  'movethewheels.dashboard.alerts.allOperational',
@@ -51,7 +51,7 @@ export default function DriverDetailsPage() {
51
51
  <div className="flex items-center gap-1">
52
52
  <Star size={16} className="text-yellow-500 fill-yellow-500" />
53
53
  <span className="font-medium">{driver.ratings.overall.toFixed(1)}</span>
54
- <span className="text-muted-foreground">({driver.ratings.totalRatings} ratings)</span>
54
+ <span className="text-text-secondary">({driver.ratings.totalRatings} ratings)</span>
55
55
  </div>
56
56
  </div>
57
57
  }
@@ -75,7 +75,7 @@ export default function DriverDetailsPage() {
75
75
  { label: 'On-Time Delivery', value: driver.ratings.onTimeDelivery },
76
76
  ].map((rating) => (
77
77
  <div key={rating.label}>
78
- <p className="text-sm text-muted-foreground">{rating.label}</p>
78
+ <p className="text-sm text-text-secondary">{rating.label}</p>
79
79
  <div className="flex items-center gap-2 mt-1">
80
80
  <Progress value={rating.value * 20} className="flex-1 h-2" />
81
81
  <span className="text-sm font-medium">{rating.value.toFixed(1)}</span>
@@ -96,23 +96,23 @@ export default function DriverDetailsPage() {
96
96
  <CardContent>
97
97
  <div className="grid grid-cols-2 md:grid-cols-4 gap-4">
98
98
  <div>
99
- <p className="text-sm text-muted-foreground">Shift</p>
99
+ <p className="text-sm text-text-secondary">Shift</p>
100
100
  <p className="font-medium">
101
101
  {driver.workingHours.startTime} - {driver.workingHours.endTime}
102
102
  </p>
103
103
  </div>
104
104
  <div>
105
- <p className="text-sm text-muted-foreground">Working Days</p>
105
+ <p className="text-sm text-text-secondary">Working Days</p>
106
106
  <p className="font-medium">{driver.workingHours.workingDays.length} days/week</p>
107
107
  </div>
108
108
  <div>
109
- <p className="text-sm text-muted-foreground">Hours Today</p>
109
+ <p className="text-sm text-text-secondary">Hours Today</p>
110
110
  <p className="font-medium">
111
111
  {driver.workingHours.currentHoursToday}h / {driver.workingHours.maxHoursPerDay}h
112
112
  </p>
113
113
  </div>
114
114
  <div>
115
- <p className="text-sm text-muted-foreground">Hours This Week</p>
115
+ <p className="text-sm text-text-secondary">Hours This Week</p>
116
116
  <p className="font-medium">
117
117
  {driver.workingHours.currentHoursThisWeek}h /{' '}
118
118
  {driver.workingHours.maxHoursPerWeek}h
@@ -134,10 +134,10 @@ export default function DriverDetailsPage() {
134
134
  <div className="flex items-center justify-between p-3 border rounded-lg">
135
135
  <div>
136
136
  <p className="font-medium">Driver's License</p>
137
- <p className="text-sm text-muted-foreground">
137
+ <p className="text-sm text-text-secondary">
138
138
  {driver.licenseNumber} - {driver.licenseType}
139
139
  </p>
140
- <p className="text-sm text-muted-foreground">
140
+ <p className="text-sm text-text-secondary">
141
141
  Expires: {formatDate(driver.licenseExpiry)}
142
142
  </p>
143
143
  </div>
@@ -150,7 +150,7 @@ export default function DriverDetailsPage() {
150
150
  >
151
151
  <div>
152
152
  <p className="font-medium capitalize">{doc.type.replace('_', ' ')}</p>
153
- <p className="text-sm text-muted-foreground">
153
+ <p className="text-sm text-text-secondary">
154
154
  Expires: {formatDate(doc.expiryDate)}
155
155
  </p>
156
156
  </div>
@@ -172,15 +172,15 @@ export default function DriverDetailsPage() {
172
172
  </CardHeader>
173
173
  <CardContent className="space-y-4">
174
174
  <div>
175
- <p className="text-sm text-muted-foreground">Total Deliveries</p>
175
+ <p className="text-sm text-text-secondary">Total Deliveries</p>
176
176
  <p className="text-2xl font-bold">{driver.completedOrders.toLocaleString()}</p>
177
177
  </div>
178
178
  <div>
179
- <p className="text-sm text-muted-foreground">Today's Deliveries</p>
179
+ <p className="text-sm text-text-secondary">Today's Deliveries</p>
180
180
  <p className="text-2xl font-bold">{driver.todayOrders}</p>
181
181
  </div>
182
182
  <div>
183
- <p className="text-sm text-muted-foreground">Join Date</p>
183
+ <p className="text-sm text-text-secondary">Join Date</p>
184
184
  <p className="font-medium">{formatDate(driver.joinDate)}</p>
185
185
  </div>
186
186
  </CardContent>
@@ -195,23 +195,23 @@ export default function DriverDetailsPage() {
195
195
  </CardHeader>
196
196
  <CardContent className="space-y-3">
197
197
  <div>
198
- <p className="text-sm text-muted-foreground">Total Earnings</p>
198
+ <p className="text-sm text-text-secondary">Total Earnings</p>
199
199
  <p className="text-2xl font-bold">
200
200
  {formatCurrency(driver.earnings.totalEarnings)}
201
201
  </p>
202
202
  </div>
203
203
  <div className="grid grid-cols-2 gap-3">
204
204
  <div>
205
- <p className="text-sm text-muted-foreground">This Week</p>
205
+ <p className="text-sm text-text-secondary">This Week</p>
206
206
  <p className="font-medium">{formatCurrency(driver.earnings.weeklyEarnings)}</p>
207
207
  </div>
208
208
  <div>
209
- <p className="text-sm text-muted-foreground">This Month</p>
209
+ <p className="text-sm text-text-secondary">This Month</p>
210
210
  <p className="font-medium">{formatCurrency(driver.earnings.monthlyEarnings)}</p>
211
211
  </div>
212
212
  </div>
213
213
  <div>
214
- <p className="text-sm text-muted-foreground">Base Salary</p>
214
+ <p className="text-sm text-text-secondary">Base Salary</p>
215
215
  <p className="font-medium">{formatCurrency(driver.baseSalary)}/year</p>
216
216
  </div>
217
217
  </CardContent>
@@ -229,7 +229,7 @@ export default function DriverDetailsPage() {
229
229
  <p className="text-sm">
230
230
  {driver.currentLocation.address || 'Location updating...'}
231
231
  </p>
232
- <p className="text-xs text-muted-foreground mt-1">
232
+ <p className="text-xs text-text-secondary mt-1">
233
233
  Updated {formatDate(driver.currentLocation.timestamp || new Date(), 'relative')}
234
234
  </p>
235
235
  </CardContent>