@fleetbase/fleetops-engine 0.6.52 → 0.6.54

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 (151) hide show
  1. package/addon/components/device/details.hbs +106 -135
  2. package/addon/components/device/details.js +174 -1
  3. package/addon/components/device/panel-header.hbs +2 -2
  4. package/addon/components/layout/fleet-ops-sidebar/operations-monitor.hbs +201 -0
  5. package/addon/components/layout/fleet-ops-sidebar/operations-monitor.js +654 -0
  6. package/addon/components/layout/fleet-ops-sidebar.hbs +19 -233
  7. package/addon/components/layout/fleet-ops-sidebar.js +364 -395
  8. package/addon/components/maintenance-schedule/form.js +1 -0
  9. package/addon/components/order/form/details.hbs +1 -43
  10. package/addon/components/order/form/details.js +18 -53
  11. package/addon/components/order/form/orchestrator-constraints.hbs +40 -0
  12. package/addon/components/order/form/orchestrator-constraints.js +61 -0
  13. package/addon/components/order/form/payload.js +50 -2
  14. package/addon/components/order/form/route.js +15 -0
  15. package/addon/components/order/form/service-rate.hbs +62 -11
  16. package/addon/components/order/form/service-rate.js +124 -2
  17. package/addon/components/order/form.hbs +2 -0
  18. package/addon/components/telematic/details.hbs +7 -1
  19. package/addon/components/telematic/form.js +16 -8
  20. package/addon/components/work-order/details.hbs +5 -1
  21. package/addon/components/work-order/form.hbs +26 -4
  22. package/addon/components/work-order/form.js +5 -1
  23. package/addon/controllers/connectivity/devices/index/details/events.js +244 -1
  24. package/addon/controllers/connectivity/devices/index/details/sensors.js +199 -0
  25. package/addon/controllers/connectivity/devices/index/details/vehicle.js +74 -0
  26. package/addon/controllers/connectivity/devices/index/details.js +12 -0
  27. package/addon/controllers/connectivity/devices/index.js +4 -1
  28. package/addon/controllers/connectivity/telematics/details/attachments.js +220 -54
  29. package/addon/controllers/connectivity/telematics/details/devices.js +90 -41
  30. package/addon/controllers/connectivity/telematics/details/events.js +39 -11
  31. package/addon/controllers/connectivity/telematics/details/sensors.js +39 -19
  32. package/addon/controllers/maintenance/index.js +100 -0
  33. package/addon/controllers/maintenance/work-orders/index.js +18 -1
  34. package/addon/controllers/management/fuel-transactions/index.js +1 -1
  35. package/addon/controllers/management/index.js +88 -0
  36. package/addon/controllers/settings/index.js +142 -0
  37. package/addon/extension.js +21 -0
  38. package/addon/routes/analytics/index.js +3 -0
  39. package/addon/routes/connectivity/devices/index/details/events.js +37 -1
  40. package/addon/routes/connectivity/devices/index/details/sensors.js +35 -0
  41. package/addon/routes/connectivity/devices/index/details/vehicle.js +7 -0
  42. package/addon/routes/connectivity/devices/index.js +3 -0
  43. package/addon/routes/connectivity/telematics/details/attachments.js +72 -9
  44. package/addon/routes/connectivity/telematics/details/devices.js +4 -0
  45. package/addon/routes/connectivity/telematics/details/sensors.js +1 -0
  46. package/addon/routes/connectivity/telematics/details.js +1 -1
  47. package/addon/routes/connectivity/telematics/edit.js +1 -1
  48. package/addon/routes/maintenance/index.js +3 -0
  49. package/addon/routes/maintenance/work-orders/index.js +3 -0
  50. package/addon/routes/settings/index.js +3 -0
  51. package/addon/routes.js +2 -0
  52. package/addon/services/order-creation.js +54 -1
  53. package/addon/services/order-validation.js +3 -2
  54. package/addon/services/service-rate-actions.js +1 -0
  55. package/addon/styles/fleetops-engine.css +1821 -6
  56. package/addon/templates/analytics/index.hbs +14 -0
  57. package/addon/templates/analytics/reports/index.hbs +4 -4
  58. package/addon/templates/connectivity/devices/index/details/events.hbs +85 -1
  59. package/addon/templates/connectivity/devices/index/details/sensors.hbs +73 -0
  60. package/addon/templates/connectivity/devices/index/details/vehicle.hbs +84 -0
  61. package/addon/templates/connectivity/telematics/details/attachments.hbs +198 -121
  62. package/addon/templates/connectivity/telematics/details/devices.hbs +4 -1
  63. package/addon/templates/connectivity/telematics/details/events.hbs +4 -1
  64. package/addon/templates/connectivity/telematics/details/sensors.hbs +3 -0
  65. package/addon/templates/maintenance/index.hbs +113 -0
  66. package/addon/templates/management/fuel-transactions/index/details.hbs +1 -1
  67. package/addon/templates/management/index.hbs +109 -73
  68. package/addon/templates/management/vehicles/index/edit.hbs +1 -1
  69. package/addon/templates/operations/orders/index.hbs +1 -1
  70. package/addon/templates/operations/service-rates/index.hbs +1 -1
  71. package/addon/templates/settings/index.hbs +83 -0
  72. package/addon/templates/settings/routing.hbs +2 -2
  73. package/addon/utils/fleet-ops-options.js +38 -0
  74. package/app/components/order/form/orchestrator-constraints.js +1 -0
  75. package/app/controllers/connectivity/devices/index/details/sensors.js +1 -0
  76. package/app/controllers/connectivity/devices/index/details/vehicle.js +1 -0
  77. package/app/controllers/maintenance/index.js +1 -0
  78. package/app/controllers/management/index.js +1 -0
  79. package/app/controllers/settings/index.js +1 -0
  80. package/app/routes/analytics/index.js +1 -0
  81. package/app/routes/connectivity/devices/index/details/sensors.js +1 -0
  82. package/app/routes/connectivity/devices/index/details/vehicle.js +1 -0
  83. package/app/routes/maintenance/index.js +1 -0
  84. package/app/routes/settings/index.js +1 -0
  85. package/app/templates/analytics/index.js +1 -0
  86. package/app/templates/connectivity/devices/index/details/sensors.js +1 -0
  87. package/app/templates/connectivity/devices/index/details/vehicle.js +1 -0
  88. package/app/templates/maintenance/index.js +1 -0
  89. package/app/templates/management/index.js +1 -0
  90. package/app/templates/settings/index.js +1 -0
  91. package/composer.json +1 -1
  92. package/extension.json +1 -1
  93. package/package.json +3 -3
  94. package/server/migrations/2025_08_28_054930_create_work_orders_table.php +1 -0
  95. package/server/migrations/2026_06_15_000001_normalize_device_attachable_vehicle_morph_types.php +30 -0
  96. package/server/migrations/2026_06_18_000001_add_category_to_work_orders_table.php +32 -0
  97. package/server/seeders/Testing/MaintenanceSeeder.php +5 -4
  98. package/server/src/Console/Commands/FixInvalidPolymorphicRelationTypeNamespaces.php +1 -0
  99. package/server/src/Console/Commands/ProcessMaintenanceTriggers.php +1 -0
  100. package/server/src/Console/Commands/SyncTelematics.php +89 -0
  101. package/server/src/Exceptions/TelematicProviderException.php +13 -2
  102. package/server/src/Http/Controllers/Api/v1/OrderController.php +6 -21
  103. package/server/src/Http/Controllers/Internal/v1/DeviceController.php +112 -11
  104. package/server/src/Http/Controllers/Internal/v1/DeviceEventController.php +16 -5
  105. package/server/src/Http/Controllers/Internal/v1/FleetController.php +9 -0
  106. package/server/src/Http/Controllers/Internal/v1/HubController.php +300 -0
  107. package/server/src/Http/Controllers/Internal/v1/LiveController.php +177 -0
  108. package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +1 -0
  109. package/server/src/Http/Controllers/Internal/v1/OrderController.php +4 -32
  110. package/server/src/Http/Controllers/Internal/v1/SearchController.php +506 -0
  111. package/server/src/Http/Controllers/Internal/v1/ServiceQuoteController.php +4 -4
  112. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +1 -1
  113. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +94 -10
  114. package/server/src/Http/Filter/DeviceEventFilter.php +44 -0
  115. package/server/src/Http/Filter/DeviceFilter.php +131 -0
  116. package/server/src/Http/Filter/DriverFilter.php +6 -0
  117. package/server/src/Http/Filter/SensorFilter.php +125 -0
  118. package/server/src/Http/Filter/VehicleFilter.php +19 -0
  119. package/server/src/Http/Requests/CreateDriverRequest.php +14 -13
  120. package/server/src/Http/Requests/Internal/CreateDriverRequest.php +1 -0
  121. package/server/src/Http/Resources/v1/Driver.php +11 -2
  122. package/server/src/Http/Resources/v1/WorkOrder.php +1 -0
  123. package/server/src/Jobs/FinalizeApiOrderCreation.php +47 -0
  124. package/server/src/Jobs/FinalizeInternalOrderCreation.php +35 -0
  125. package/server/src/Jobs/NotifyBulkAssignedDriver.php +47 -0
  126. package/server/src/Jobs/SyncTelematicDevicesJob.php +181 -66
  127. package/server/src/Models/Device.php +15 -1
  128. package/server/src/Models/DeviceEvent.php +1 -1
  129. package/server/src/Models/Driver.php +17 -1
  130. package/server/src/Models/Sensor.php +15 -2
  131. package/server/src/Models/Telematic.php +1 -1
  132. package/server/src/Models/Vehicle.php +5 -1
  133. package/server/src/Models/WorkOrder.php +5 -2
  134. package/server/src/Observers/DriverObserver.php +3 -3
  135. package/server/src/Observers/FleetObserver.php +23 -0
  136. package/server/src/Observers/VehicleObserver.php +3 -3
  137. package/server/src/Providers/FleetOpsServiceProvider.php +12 -0
  138. package/server/src/Support/LiveCacheService.php +1 -1
  139. package/server/src/Support/Telematics/Providers/AfaqyProvider.php +188 -28
  140. package/server/src/Support/Telematics/Providers/SafeeProvider.php +44 -3
  141. package/server/src/Support/Telematics/TelematicService.php +330 -30
  142. package/server/src/routes.php +10 -0
  143. package/server/tests/DeviceFilterTest.php +36 -0
  144. package/server/tests/HubRoutesTest.php +62 -0
  145. package/server/tests/OperationsMonitorEndpointTest.php +38 -0
  146. package/server/tests/OrderQueuedClosureRegressionTest.php +36 -0
  147. package/server/tests/TelematicsHardeningTest.php +455 -3
  148. package/server/tests/VehicleDriverAssignmentTest.php +27 -0
  149. package/translations/ar-ae.yml +1 -1
  150. package/translations/en-us.yaml +1 -0
  151. package/translations/vi-vn.yaml +1 -1
@@ -235,8 +235,6 @@ body[data-theme='dark'] .fleetops-connectivity-kpi-accent-rose .fleetops-connect
235
235
 
236
236
  .fleetops-provider-connections-actions .fleetops-provider-connections-search {
237
237
  min-width: 16rem;
238
- height: 2.25rem;
239
- min-height: 2.25rem;
240
238
  }
241
239
 
242
240
  .fleetops-provider-connections-header {
@@ -257,8 +255,6 @@ body[data-theme='dark'] .fleetops-connectivity-kpi-accent-rose .fleetops-connect
257
255
  .fleetops-provider-connections-actions .fleetops-telematics-action-button,
258
256
  .fleetops-provider-connections-actions button {
259
257
  flex-shrink: 0;
260
- height: 2.25rem;
261
- min-height: 2.25rem;
262
258
  white-space: nowrap;
263
259
  }
264
260
 
@@ -266,14 +262,36 @@ body[data-theme='dark'] .fleetops-connectivity-kpi-accent-rose .fleetops-connect
266
262
  white-space: nowrap;
267
263
  }
268
264
 
265
+ .fleetops-attachments-vehicle-filter-trigger.ember-power-select-trigger {
266
+ display: flex;
267
+ align-items: center;
268
+ min-height: 2rem;
269
+ padding-right: 1.75rem;
270
+ }
271
+
272
+ .fleetops-attachments-vehicle-filter-trigger.ember-power-select-trigger .ember-power-select-placeholder,
273
+ .fleetops-attachments-vehicle-filter-trigger.ember-power-select-trigger .ember-power-select-selected-item {
274
+ min-width: 0;
275
+ overflow: hidden;
276
+ text-overflow: ellipsis;
277
+ white-space: nowrap;
278
+ }
279
+
280
+ .fleetops-attachments-vehicle-filter-trigger.ember-power-select-trigger .ember-power-select-status-icon {
281
+ display: block;
282
+ right: 0.65rem;
283
+ }
284
+
269
285
  .status-badge.long-offline-status-badge > span,
270
286
  .status-badge.long_offline-status-badge > span {
271
- @apply bg-yellow-800 border-yellow-700 text-yellow-100;
287
+ background-color: #854d0e;
288
+ border-color: #a16207;
289
+ color: #fef9c3;
272
290
  }
273
291
 
274
292
  .status-badge.long-offline-status-badge > span svg,
275
293
  .status-badge.long_offline-status-badge > span svg {
276
- @apply text-yellow-300;
294
+ color: #fde047;
277
295
  }
278
296
 
279
297
  .fleetops-provider-connections-panel .table-wrapper table tbody tr td,
@@ -2068,6 +2086,1803 @@ button.fleetops-btn-xxs,
2068
2086
  padding-bottom: 0.2rem !important;
2069
2087
  }
2070
2088
 
2089
+ .next-sidebar-navigator-primary-action.fleet-ops-sidebar-primary-action {
2090
+ --tw-bg-opacity: 1;
2091
+
2092
+ justify-content: flex-start;
2093
+ color: #fff;
2094
+ background-color: rgba(52, 133, 226, var(--tw-bg-opacity, 1));
2095
+ border: 1px solid rgba(52, 133, 226, var(--tw-bg-opacity, 1));
2096
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.12);
2097
+ }
2098
+
2099
+ .next-sidebar-navigator-primary-action.fleet-ops-sidebar-primary-action:hover {
2100
+ background-color: rgba(97, 160, 232, var(--tw-bg-opacity, 1));
2101
+ border-color: rgba(97, 160, 232, var(--tw-bg-opacity, 1));
2102
+ }
2103
+
2104
+ body[data-theme='dark'] .next-sidebar-navigator-primary-action.fleet-ops-sidebar-primary-action {
2105
+ background-color: rgba(52, 133, 226, var(--tw-bg-opacity, 1));
2106
+ border-color: rgba(52, 133, 226, var(--tw-bg-opacity, 1));
2107
+ }
2108
+
2109
+ body[data-theme='dark'] .next-sidebar-navigator-primary-action.fleet-ops-sidebar-primary-action:hover {
2110
+ background-color: rgba(97, 160, 232, var(--tw-bg-opacity, 1));
2111
+ border-color: rgba(97, 160, 232, var(--tw-bg-opacity, 1));
2112
+ }
2113
+
2114
+ .fleet-ops-operations-monitor {
2115
+ position: relative;
2116
+ display: flex;
2117
+ flex-direction: column;
2118
+ flex: 1 1 auto;
2119
+ overflow: hidden;
2120
+ min-height: 0;
2121
+ animation: fleet-ops-operations-monitor-enter 180ms ease-out both;
2122
+ }
2123
+
2124
+ @keyframes fleet-ops-operations-monitor-enter {
2125
+ from {
2126
+ opacity: 0;
2127
+ transform: translateY(4px);
2128
+ }
2129
+
2130
+ to {
2131
+ opacity: 1;
2132
+ transform: translateY(0);
2133
+ }
2134
+ }
2135
+
2136
+ @media (prefers-reduced-motion: reduce) {
2137
+ .fleet-ops-operations-monitor {
2138
+ animation: none;
2139
+ }
2140
+ }
2141
+
2142
+ .fleet-ops-operations-monitor-divider {
2143
+ position: relative;
2144
+ width: auto;
2145
+ height: 1px;
2146
+ margin: 0 0 0.75rem;
2147
+ }
2148
+
2149
+ .fleet-ops-operations-monitor-divider::before {
2150
+ position: absolute;
2151
+ top: 0;
2152
+ left: -1rem;
2153
+ right: -1rem;
2154
+ border-top: 1px solid #e5e7eb;
2155
+ content: '';
2156
+ }
2157
+
2158
+ .fleet-ops-operations-monitor-list {
2159
+ flex: 1 1 auto;
2160
+ height: var(--fleet-ops-operations-monitor-list-height, 14rem);
2161
+ min-height: 8rem;
2162
+ max-height: none;
2163
+ overflow-y: auto;
2164
+ overscroll-behavior: contain;
2165
+ padding-right: 0.125rem;
2166
+ padding-bottom: 0.5rem;
2167
+ }
2168
+
2169
+ .fleet-ops-operations-monitor-row-actions {
2170
+ display: flex;
2171
+ flex: 0 0 2rem;
2172
+ justify-content: flex-end;
2173
+ min-width: 2rem;
2174
+ padding-top: 0.125rem;
2175
+ }
2176
+
2177
+ .fleet-ops-operations-monitor-list .ember-basic-dropdown,
2178
+ .fleet-ops-operations-monitor-list .ember-basic-dropdown-trigger {
2179
+ flex-shrink: 0;
2180
+ }
2181
+
2182
+ .fleet-ops-operations-monitor .fleetops-btn-xxs.btn,
2183
+ .fleet-ops-operations-monitor button.fleetops-btn-xxs.btn,
2184
+ .fleet-ops-operations-monitor button.fleetops-btn-xxs,
2185
+ .fleet-ops-operations-monitor .fleetops-btn-xxs {
2186
+ min-height: 1.25rem !important;
2187
+ padding: 0.15rem 0.75rem !important;
2188
+ font-size: 10px !important;
2189
+ line-height: 0.5 !important;
2190
+ }
2191
+
2192
+ .next-sidebar-navigator:has(.fleet-ops-operations-monitor) {
2193
+ display: flex;
2194
+ flex: 1 1 auto;
2195
+ flex-direction: column;
2196
+ height: 100%;
2197
+ overflow: hidden;
2198
+ min-height: 0;
2199
+ }
2200
+
2201
+ .next-sidebar-navigator:has(.fleet-ops-operations-monitor) > .fleet-ops-operations-monitor {
2202
+ flex: 1 1 auto;
2203
+ min-height: 0;
2204
+ }
2205
+
2206
+ .next-sidebar-navigator:has(.fleet-ops-operations-monitor) > .next-sidebar-navigator-viewport {
2207
+ flex: 0 0 auto;
2208
+ }
2209
+
2210
+ body[data-theme='dark'] .fleet-ops-operations-monitor-divider {
2211
+ border-top-color: transparent;
2212
+ }
2213
+
2214
+ body[data-theme='dark'] .fleet-ops-operations-monitor-divider::before {
2215
+ border-top-color: #374151;
2216
+ }
2217
+
2218
+ .fleet-ops-operations-monitor-dropdown {
2219
+ margin-top: 0;
2220
+ margin-left: 0.5rem;
2221
+ }
2222
+
2223
+ .fleet-ops-operations-monitor-row-depth-1 {
2224
+ padding-left: 1.25rem !important;
2225
+ }
2226
+
2227
+ .fleet-ops-operations-monitor-row-depth-2 {
2228
+ padding-left: 2rem !important;
2229
+ }
2230
+
2231
+ .fleet-ops-operations-monitor-row-depth-3,
2232
+ .fleet-ops-operations-monitor-row-depth-4,
2233
+ .fleet-ops-operations-monitor-row-depth-5 {
2234
+ padding-left: 2.75rem !important;
2235
+ }
2236
+
2237
+ .fleet-ops-operations-monitor-child-row {
2238
+ margin-top: -0.125rem;
2239
+ }
2240
+
2241
+ .fleet-ops-operations-monitor-empty {
2242
+ display: flex;
2243
+ flex-direction: column;
2244
+ align-items: center;
2245
+ justify-content: center;
2246
+ min-height: 7.5rem;
2247
+ padding: 1rem 0.75rem;
2248
+ text-align: center;
2249
+ color: #6b7280;
2250
+ }
2251
+
2252
+ .fleet-ops-operations-monitor-empty-icon {
2253
+ display: flex;
2254
+ align-items: center;
2255
+ justify-content: center;
2256
+ width: 1.75rem;
2257
+ height: 1.75rem;
2258
+ margin-bottom: 0.5rem;
2259
+ color: #6b7280;
2260
+ background-color: #f3f4f6;
2261
+ border: 1px solid #e5e7eb;
2262
+ border-radius: 0.375rem;
2263
+ }
2264
+
2265
+ .fleet-ops-operations-monitor-empty-title {
2266
+ display: block;
2267
+ margin-bottom: 0.25rem;
2268
+ font-size: 0.8125rem;
2269
+ font-weight: 600;
2270
+ line-height: 1.2;
2271
+ color: #374151;
2272
+ }
2273
+
2274
+ .fleet-ops-operations-monitor-empty-description {
2275
+ display: block;
2276
+ max-width: 13rem;
2277
+ margin-bottom: 0.75rem;
2278
+ font-size: 0.75rem;
2279
+ line-height: 1.35;
2280
+ color: #6b7280;
2281
+ }
2282
+
2283
+ .fleet-ops-operations-monitor-empty-action {
2284
+ display: inline-flex;
2285
+ align-items: center;
2286
+ justify-content: center;
2287
+ min-height: 1.5rem;
2288
+ padding: 0.25rem 0.625rem;
2289
+ font-size: 0.75rem;
2290
+ font-weight: 600;
2291
+ line-height: 1;
2292
+ color: #fff;
2293
+ background-color: rgba(52, 133, 226, var(--tw-bg-opacity, 1));
2294
+ border: 1px solid rgba(52, 133, 226, var(--tw-bg-opacity, 1));
2295
+ border-radius: 0.375rem;
2296
+ }
2297
+
2298
+ .fleet-ops-operations-monitor-empty-action:hover {
2299
+ background-color: rgba(97, 160, 232, var(--tw-bg-opacity, 1));
2300
+ border-color: rgba(97, 160, 232, var(--tw-bg-opacity, 1));
2301
+ }
2302
+
2303
+ body[data-theme='dark'] .fleet-ops-operations-monitor-empty {
2304
+ color: #9ca3af;
2305
+ }
2306
+
2307
+ body[data-theme='dark'] .fleet-ops-operations-monitor-empty-icon {
2308
+ color: #d1d5db;
2309
+ background-color: #1f2937;
2310
+ border-color: #374151;
2311
+ }
2312
+
2313
+ body[data-theme='dark'] .fleet-ops-operations-monitor-empty-title {
2314
+ color: #f3f4f6;
2315
+ }
2316
+
2317
+ body[data-theme='dark'] .fleet-ops-operations-monitor-empty-description {
2318
+ color: #9ca3af;
2319
+ }
2320
+
2321
+ .fleet-ops-hub {
2322
+ min-height: 100%;
2323
+ padding: 1.5rem;
2324
+ color: #111827;
2325
+ background: #f9fafb;
2326
+ }
2327
+
2328
+ .fleet-ops-hub-header {
2329
+ position: sticky;
2330
+ top: 0;
2331
+ z-index: 10;
2332
+ display: flex;
2333
+ align-items: flex-start;
2334
+ justify-content: space-between;
2335
+ gap: 1rem;
2336
+ padding: 1rem 1.5rem;
2337
+ margin: -1.5rem -1.5rem 1.25rem;
2338
+ background: #fff;
2339
+ border-bottom: 1px solid #e5e7eb;
2340
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
2341
+ }
2342
+
2343
+ .fleet-ops-hub-title {
2344
+ margin: 0;
2345
+ font-size: 1.25rem;
2346
+ font-weight: 700;
2347
+ line-height: 1.4;
2348
+ color: #111827;
2349
+ }
2350
+
2351
+ .fleet-ops-hub-subtitle {
2352
+ max-width: 48rem;
2353
+ margin: 0.25rem 0 0;
2354
+ font-size: 0.875rem;
2355
+ line-height: 1.45;
2356
+ color: #6b7280;
2357
+ }
2358
+
2359
+ .fleet-ops-hub-header-action {
2360
+ display: inline-flex;
2361
+ align-items: center;
2362
+ gap: 0.5rem;
2363
+ min-height: 2.25rem;
2364
+ padding: 0 0.75rem;
2365
+ font-size: 0.875rem;
2366
+ font-weight: 600;
2367
+ color: #fff;
2368
+ white-space: nowrap;
2369
+ background: rgba(52, 133, 226, 1);
2370
+ border: 1px solid rgba(52, 133, 226, 1);
2371
+ border-radius: 0.375rem;
2372
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.12);
2373
+ }
2374
+
2375
+ .fleet-ops-hub-header-action:hover {
2376
+ color: #fff;
2377
+ background: rgba(97, 160, 232, 1);
2378
+ border-color: rgba(97, 160, 232, 1);
2379
+ }
2380
+
2381
+ .fleet-ops-hub-kpi-grid {
2382
+ display: grid;
2383
+ grid-template-columns: repeat(1, minmax(0, 1fr));
2384
+ gap: 0.75rem;
2385
+ margin-bottom: 1.25rem;
2386
+ }
2387
+
2388
+ .fleet-ops-hub-kpi {
2389
+ position: relative;
2390
+ display: flex;
2391
+ min-height: 7.5rem;
2392
+ padding: 1rem;
2393
+ overflow: hidden;
2394
+ background: #fff;
2395
+ border: 1px solid #e5e7eb;
2396
+ border-radius: 0.375rem;
2397
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06);
2398
+ transition:
2399
+ transform 0.18s ease,
2400
+ box-shadow 0.18s ease,
2401
+ border-color 0.18s ease;
2402
+ }
2403
+
2404
+ .fleet-ops-hub-kpi:hover {
2405
+ border-color: #bfdbfe;
2406
+ box-shadow: 0 10px 24px rgba(15, 23, 42, 0.08);
2407
+ transform: translateY(-1px);
2408
+ }
2409
+
2410
+ .fleet-ops-hub-kpi-body {
2411
+ min-width: 0;
2412
+ padding-right: 3.25rem;
2413
+ }
2414
+
2415
+ .fleet-ops-hub-kpi-icon {
2416
+ position: absolute;
2417
+ top: 1rem;
2418
+ right: 1rem;
2419
+ display: flex;
2420
+ align-items: center;
2421
+ justify-content: center;
2422
+ width: 2.5rem;
2423
+ height: 2.5rem;
2424
+ color: #2563eb;
2425
+ background: #dbeafe;
2426
+ border-radius: 0.375rem;
2427
+ }
2428
+
2429
+ .fleet-ops-hub-kpi-accent-green {
2430
+ background: linear-gradient(135deg, #fff 0%, #ecfdf5 100%);
2431
+ border-color: #a7f3d0;
2432
+ }
2433
+
2434
+ .fleet-ops-hub-kpi-accent-green .fleet-ops-hub-kpi-icon {
2435
+ color: #059669;
2436
+ background: #d1fae5;
2437
+ }
2438
+
2439
+ .fleet-ops-hub-kpi-accent-amber {
2440
+ background: linear-gradient(135deg, #fff 0%, #fffbeb 100%);
2441
+ border-color: #fed7aa;
2442
+ }
2443
+
2444
+ .fleet-ops-hub-kpi-accent-amber .fleet-ops-hub-kpi-icon {
2445
+ color: #d97706;
2446
+ background: #ffedd5;
2447
+ }
2448
+
2449
+ .fleet-ops-hub-kpi-accent-rose {
2450
+ background: linear-gradient(135deg, #fff 0%, #fff1f2 100%);
2451
+ border-color: #fecdd3;
2452
+ }
2453
+
2454
+ .fleet-ops-hub-kpi-accent-rose .fleet-ops-hub-kpi-icon {
2455
+ color: #e11d48;
2456
+ background: #ffe4e6;
2457
+ }
2458
+
2459
+ .fleet-ops-hub-kpi-label {
2460
+ font-size: 0.75rem;
2461
+ font-weight: 700;
2462
+ line-height: 1rem;
2463
+ color: #6b7280;
2464
+ text-transform: uppercase;
2465
+ letter-spacing: 0.04em;
2466
+ }
2467
+
2468
+ .fleet-ops-hub-kpi-value {
2469
+ margin-top: 0.5rem;
2470
+ font-size: 2rem;
2471
+ font-weight: 800;
2472
+ line-height: 1.1;
2473
+ color: #111827;
2474
+ }
2475
+
2476
+ .fleet-ops-hub-kpi-caption {
2477
+ margin-top: 0.75rem;
2478
+ overflow: hidden;
2479
+ font-size: 0.8125rem;
2480
+ line-height: 1.25rem;
2481
+ color: #6b7280;
2482
+ text-overflow: ellipsis;
2483
+ }
2484
+
2485
+ .fleet-ops-hub-layout {
2486
+ display: grid;
2487
+ grid-template-columns: minmax(0, 1fr);
2488
+ gap: 1rem;
2489
+ }
2490
+
2491
+ .fleet-ops-hub-main {
2492
+ min-width: 0;
2493
+ }
2494
+
2495
+ .fleet-ops-hub-side {
2496
+ display: flex;
2497
+ flex-direction: column;
2498
+ gap: 1rem;
2499
+ min-width: 0;
2500
+ }
2501
+
2502
+ .fleet-ops-hub-card-grid {
2503
+ display: grid;
2504
+ grid-template-columns: repeat(1, minmax(0, 1fr));
2505
+ gap: 0.75rem;
2506
+ }
2507
+
2508
+ .fleet-ops-hub-card-grid-three {
2509
+ display: grid;
2510
+ grid-template-columns: repeat(1, minmax(0, 1fr));
2511
+ gap: 0.75rem;
2512
+ }
2513
+
2514
+ .fleet-ops-hub-card {
2515
+ display: flex;
2516
+ flex-direction: column;
2517
+ min-height: 9.5rem;
2518
+ padding: 1rem;
2519
+ color: inherit;
2520
+ background: #fff;
2521
+ border: 1px solid #e5e7eb;
2522
+ border-radius: 0.375rem;
2523
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06);
2524
+ transition:
2525
+ background-color 0.18s ease,
2526
+ border-color 0.18s ease,
2527
+ box-shadow 0.18s ease,
2528
+ transform 0.18s ease;
2529
+ }
2530
+
2531
+ .fleet-ops-hub-card:hover {
2532
+ color: inherit;
2533
+ background: #f9fafb;
2534
+ border-color: #93c5fd;
2535
+ box-shadow: 0 10px 24px rgba(15, 23, 42, 0.08);
2536
+ transform: translateY(-1px);
2537
+ }
2538
+
2539
+ .fleet-ops-hub-card-heading {
2540
+ display: flex;
2541
+ align-items: center;
2542
+ gap: 0.625rem;
2543
+ margin-bottom: 0.75rem;
2544
+ font-size: 0.875rem;
2545
+ font-weight: 700;
2546
+ line-height: 1.25rem;
2547
+ color: #111827;
2548
+ }
2549
+
2550
+ .fleet-ops-hub-card-icon {
2551
+ display: flex;
2552
+ flex: 0 0 2rem;
2553
+ align-items: center;
2554
+ justify-content: center;
2555
+ width: 2rem;
2556
+ height: 2rem;
2557
+ color: #2563eb;
2558
+ background: #eff6ff;
2559
+ border-radius: 0.375rem;
2560
+ }
2561
+
2562
+ .fleet-ops-hub-card-description {
2563
+ margin: 0;
2564
+ font-size: 0.875rem;
2565
+ line-height: 1.4;
2566
+ color: #6b7280;
2567
+ }
2568
+
2569
+ .fleet-ops-hub-card-action {
2570
+ display: inline-flex;
2571
+ align-items: center;
2572
+ gap: 0.375rem;
2573
+ margin-top: auto;
2574
+ padding-top: 1rem;
2575
+ font-size: 0.8125rem;
2576
+ font-weight: 700;
2577
+ color: #2563eb;
2578
+ }
2579
+
2580
+ .fleet-ops-hub-panel {
2581
+ padding: 1rem;
2582
+ background: #fff;
2583
+ border: 1px solid #e5e7eb;
2584
+ border-radius: 0.375rem;
2585
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06);
2586
+ }
2587
+
2588
+ .fleet-ops-hub-panel-prominent {
2589
+ background: linear-gradient(135deg, #fff 0%, #eff6ff 100%);
2590
+ border-color: #bfdbfe;
2591
+ }
2592
+
2593
+ .fleet-ops-hub-panel-title {
2594
+ margin-bottom: 0.75rem;
2595
+ font-size: 0.875rem;
2596
+ font-weight: 700;
2597
+ line-height: 1.25rem;
2598
+ color: #111827;
2599
+ }
2600
+
2601
+ .fleet-ops-hub-guidance-list {
2602
+ display: flex;
2603
+ flex-direction: column;
2604
+ gap: 0.625rem;
2605
+ padding: 0;
2606
+ margin: 0;
2607
+ font-size: 0.875rem;
2608
+ line-height: 1.4;
2609
+ color: #6b7280;
2610
+ list-style: none;
2611
+ }
2612
+
2613
+ .fleet-ops-hub-guidance-list li {
2614
+ display: flex;
2615
+ gap: 0.5rem;
2616
+ }
2617
+
2618
+ .fleet-ops-hub-guidance-list svg {
2619
+ flex-shrink: 0;
2620
+ margin-top: 0.1875rem;
2621
+ color: #3485e2;
2622
+ }
2623
+
2624
+ .fleet-ops-hub-section-title {
2625
+ margin-bottom: 0.75rem;
2626
+ font-size: 0.75rem;
2627
+ font-weight: 700;
2628
+ line-height: 1rem;
2629
+ color: #6b7280;
2630
+ text-transform: uppercase;
2631
+ letter-spacing: 0.04em;
2632
+ }
2633
+
2634
+ .fleet-ops-hub-section-title.mt-5 {
2635
+ margin-top: 1.25rem;
2636
+ }
2637
+
2638
+ .fleet-ops-resources-hub-shell {
2639
+ height: 100%;
2640
+ min-height: 0;
2641
+ overflow-y: auto;
2642
+ color: #111827;
2643
+ background: #f9fafb;
2644
+ }
2645
+
2646
+ .fleet-ops-resources-hub-header {
2647
+ position: sticky;
2648
+ top: 0;
2649
+ z-index: 50;
2650
+ padding: 1rem;
2651
+ background: #fff;
2652
+ border-bottom: 1px solid #e5e7eb;
2653
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
2654
+ }
2655
+
2656
+ .fleet-ops-resources-hub-header-inner,
2657
+ .fleet-ops-resources-hub-content {
2658
+ width: 100%;
2659
+ max-width: 80rem;
2660
+ margin: 0 auto;
2661
+ }
2662
+
2663
+ .fleet-ops-resources-hub-header-inner {
2664
+ display: flex;
2665
+ flex-direction: column;
2666
+ gap: 0.75rem;
2667
+ }
2668
+
2669
+ .fleet-ops-resources-hub-header-copy {
2670
+ min-width: 0;
2671
+ }
2672
+
2673
+ .fleet-ops-resources-hub-header-actions {
2674
+ display: flex;
2675
+ flex-shrink: 0;
2676
+ align-items: center;
2677
+ gap: 0.5rem;
2678
+ white-space: nowrap;
2679
+ }
2680
+
2681
+ .fleet-ops-resources-hub-content {
2682
+ display: flex;
2683
+ flex-direction: column;
2684
+ gap: 0.75rem;
2685
+ padding: 0.875rem 1rem 1rem;
2686
+ }
2687
+
2688
+ .fleet-ops-resources-kpi-grid {
2689
+ display: grid;
2690
+ grid-template-columns: repeat(1, minmax(0, 1fr));
2691
+ gap: 0.75rem;
2692
+ }
2693
+
2694
+ .fleet-ops-resources-kpi {
2695
+ min-height: 7.25rem;
2696
+ color: inherit;
2697
+ text-decoration: none;
2698
+ }
2699
+
2700
+ .fleet-ops-resources-kpi:hover {
2701
+ color: inherit;
2702
+ }
2703
+
2704
+ .fleet-ops-resources-hub-layout {
2705
+ display: block;
2706
+ }
2707
+
2708
+ .fleet-ops-resources-hub-main {
2709
+ display: flex;
2710
+ min-width: 0;
2711
+ flex-direction: column;
2712
+ gap: 0.75rem;
2713
+ }
2714
+
2715
+ .fleet-ops-resources-hub-side {
2716
+ display: flex;
2717
+ min-width: 0;
2718
+ flex-direction: column;
2719
+ gap: 1rem;
2720
+ }
2721
+
2722
+ .fleet-ops-resources-section {
2723
+ padding: 0.75rem;
2724
+ background: #fff;
2725
+ border: 1px solid #e5e7eb;
2726
+ border-radius: 0.375rem;
2727
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05);
2728
+ }
2729
+
2730
+ .fleet-ops-resources-section-header {
2731
+ display: flex;
2732
+ flex-direction: column;
2733
+ gap: 0.25rem;
2734
+ margin-bottom: 0.5rem;
2735
+ }
2736
+
2737
+ .fleet-ops-resources-section-header p {
2738
+ max-width: 44rem;
2739
+ margin: 0;
2740
+ font-size: 0.8125rem;
2741
+ line-height: 1.35rem;
2742
+ color: #6b7280;
2743
+ }
2744
+
2745
+ .fleet-ops-resources-card-grid {
2746
+ display: grid;
2747
+ grid-template-columns: repeat(1, minmax(0, 1fr));
2748
+ gap: 0.625rem;
2749
+ }
2750
+
2751
+ .fleet-ops-resources-guidance-grid {
2752
+ display: grid;
2753
+ grid-template-columns: repeat(1, minmax(0, 1fr));
2754
+ gap: 0.625rem;
2755
+ }
2756
+
2757
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-kpi {
2758
+ padding: 0.875rem;
2759
+ }
2760
+
2761
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-kpi-value {
2762
+ margin-top: 0.375rem;
2763
+ font-size: 1.75rem;
2764
+ }
2765
+
2766
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-kpi-caption {
2767
+ margin-top: 0.5rem;
2768
+ font-size: 0.75rem;
2769
+ line-height: 1.1rem;
2770
+ }
2771
+
2772
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-card {
2773
+ min-height: 6.75rem;
2774
+ padding: 0.7rem;
2775
+ }
2776
+
2777
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-card-heading {
2778
+ gap: 0.5rem;
2779
+ margin-bottom: 0.375rem;
2780
+ font-size: 0.8125rem;
2781
+ }
2782
+
2783
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-card-icon {
2784
+ flex-basis: 1.65rem;
2785
+ width: 1.65rem;
2786
+ height: 1.65rem;
2787
+ font-size: 0.75rem;
2788
+ }
2789
+
2790
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-card-description {
2791
+ font-size: 0.8125rem;
2792
+ line-height: 1.2rem;
2793
+ display: -webkit-box;
2794
+ overflow: hidden;
2795
+ -webkit-line-clamp: 1;
2796
+ -webkit-box-orient: vertical;
2797
+ }
2798
+
2799
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-card-action {
2800
+ padding-top: 0.5rem;
2801
+ font-size: 0.75rem;
2802
+ }
2803
+
2804
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-panel {
2805
+ padding: 0.75rem;
2806
+ }
2807
+
2808
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-panel-title {
2809
+ margin-bottom: 0.5rem;
2810
+ }
2811
+
2812
+ .fleet-ops-resources-hub-shell .fleet-ops-hub-guidance-list {
2813
+ gap: 0.45rem;
2814
+ font-size: 0.8125rem;
2815
+ line-height: 1.3;
2816
+ }
2817
+
2818
+ .fleet-ops-resources-utility-panel {
2819
+ min-height: 9rem;
2820
+ }
2821
+
2822
+ .fleet-ops-resources-utility-panel-header {
2823
+ display: flex;
2824
+ align-items: center;
2825
+ justify-content: space-between;
2826
+ gap: 0.5rem;
2827
+ margin-bottom: 0.5rem;
2828
+ }
2829
+
2830
+ .fleet-ops-resources-utility-panel-header .fleet-ops-hub-panel-title {
2831
+ margin-bottom: 0;
2832
+ }
2833
+
2834
+ .fleet-ops-resources-utility-panel-header span {
2835
+ flex-shrink: 0;
2836
+ font-size: 0.6875rem;
2837
+ font-weight: 700;
2838
+ color: #3485e2;
2839
+ }
2840
+
2841
+ .fleet-ops-resources-doc-links {
2842
+ display: grid;
2843
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2844
+ gap: 0.375rem;
2845
+ }
2846
+
2847
+ .fleet-ops-resources-doc-link,
2848
+ .fleet-ops-resources-notice,
2849
+ .fleet-ops-resources-checklist-item {
2850
+ display: flex;
2851
+ align-items: center;
2852
+ min-width: 0;
2853
+ color: inherit;
2854
+ text-decoration: none;
2855
+ border-radius: 0.375rem;
2856
+ }
2857
+
2858
+ .fleet-ops-resources-doc-link {
2859
+ gap: 0.375rem;
2860
+ padding: 0.375rem 0.45rem;
2861
+ font-size: 0.75rem;
2862
+ font-weight: 700;
2863
+ text-align: left;
2864
+ background: #f9fafb;
2865
+ border: 1px solid #e5e7eb;
2866
+ }
2867
+
2868
+ .fleet-ops-resources-doc-link:hover {
2869
+ color: #2563eb;
2870
+ background: #eff6ff;
2871
+ border-color: #bfdbfe;
2872
+ }
2873
+
2874
+ .fleet-ops-resources-doc-link svg {
2875
+ flex-shrink: 0;
2876
+ color: #3485e2;
2877
+ }
2878
+
2879
+ .fleet-ops-resources-doc-link span {
2880
+ min-width: 0;
2881
+ overflow: hidden;
2882
+ text-overflow: ellipsis;
2883
+ white-space: nowrap;
2884
+ }
2885
+
2886
+ .fleet-ops-resources-notice-list,
2887
+ .fleet-ops-resources-checklist {
2888
+ display: flex;
2889
+ flex-direction: column;
2890
+ gap: 0.375rem;
2891
+ }
2892
+
2893
+ .fleet-ops-resources-notice {
2894
+ gap: 0.45rem;
2895
+ padding: 0.425rem 0.5rem;
2896
+ font-size: 0.75rem;
2897
+ font-weight: 700;
2898
+ line-height: 1.1rem;
2899
+ background: #f9fafb;
2900
+ border: 1px solid #e5e7eb;
2901
+ }
2902
+
2903
+ .fleet-ops-resources-notice-warning {
2904
+ color: #92400e;
2905
+ background: #fffbeb;
2906
+ border-color: #fde68a;
2907
+ }
2908
+
2909
+ .fleet-ops-resources-notice-info {
2910
+ color: #1d4ed8;
2911
+ background: #eff6ff;
2912
+ border-color: #bfdbfe;
2913
+ }
2914
+
2915
+ .fleet-ops-resources-notice-success {
2916
+ color: #047857;
2917
+ background: #ecfdf5;
2918
+ border-color: #a7f3d0;
2919
+ }
2920
+
2921
+ .fleet-ops-resources-checklist {
2922
+ display: grid;
2923
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2924
+ }
2925
+
2926
+ .fleet-ops-resources-checklist-item {
2927
+ gap: 0.375rem;
2928
+ padding: 0.35rem 0.4rem;
2929
+ font-size: 0.75rem;
2930
+ font-weight: 700;
2931
+ line-height: 1rem;
2932
+ background: #f9fafb;
2933
+ border: 1px solid #e5e7eb;
2934
+ }
2935
+
2936
+ .fleet-ops-resources-checklist-item.is-complete {
2937
+ color: #047857;
2938
+ background: #ecfdf5;
2939
+ border-color: #a7f3d0;
2940
+ }
2941
+
2942
+ .fleet-ops-resources-checklist-item.is-pending:hover {
2943
+ color: #2563eb;
2944
+ background: #eff6ff;
2945
+ border-color: #bfdbfe;
2946
+ }
2947
+
2948
+ .fleet-ops-resources-checklist-icon {
2949
+ display: flex;
2950
+ flex: 0 0 1.15rem;
2951
+ align-items: center;
2952
+ justify-content: center;
2953
+ width: 1.15rem;
2954
+ height: 1.15rem;
2955
+ font-size: 0.625rem;
2956
+ border-radius: 999px;
2957
+ background: rgba(52, 133, 226, 0.12);
2958
+ }
2959
+
2960
+ .fleet-ops-resources-checklist-item.is-complete .fleet-ops-resources-checklist-icon {
2961
+ background: rgba(4, 120, 87, 0.12);
2962
+ }
2963
+
2964
+ body[data-theme='dark'] .fleet-ops-resources-hub-shell {
2965
+ color: #f9fafb;
2966
+ background: #111827;
2967
+ }
2968
+
2969
+ body[data-theme='dark'] .fleet-ops-resources-hub-header,
2970
+ body[data-theme='dark'] .fleet-ops-resources-section {
2971
+ background: #1f2937;
2972
+ border-color: #374151;
2973
+ }
2974
+
2975
+ body[data-theme='dark'] .fleet-ops-resources-section-header p {
2976
+ color: #9ca3af;
2977
+ }
2978
+
2979
+ body[data-theme='dark'] .fleet-ops-resources-doc-link,
2980
+ body[data-theme='dark'] .fleet-ops-resources-notice,
2981
+ body[data-theme='dark'] .fleet-ops-resources-checklist-item {
2982
+ background: #111827;
2983
+ border-color: #374151;
2984
+ }
2985
+
2986
+ body[data-theme='dark'] .fleet-ops-resources-doc-link:hover,
2987
+ body[data-theme='dark'] .fleet-ops-resources-checklist-item.is-pending:hover {
2988
+ color: #93c5fd;
2989
+ background: #1e3a5f;
2990
+ border-color: #2563eb;
2991
+ }
2992
+
2993
+ body[data-theme='dark'] .fleet-ops-resources-notice-warning {
2994
+ color: #fbbf24;
2995
+ background: rgba(146, 64, 14, 0.18);
2996
+ border-color: rgba(251, 191, 36, 0.35);
2997
+ }
2998
+
2999
+ body[data-theme='dark'] .fleet-ops-resources-notice-info {
3000
+ color: #93c5fd;
3001
+ background: rgba(37, 99, 235, 0.18);
3002
+ border-color: rgba(147, 197, 253, 0.3);
3003
+ }
3004
+
3005
+ body[data-theme='dark'] .fleet-ops-resources-notice-success,
3006
+ body[data-theme='dark'] .fleet-ops-resources-checklist-item.is-complete {
3007
+ color: #6ee7b7;
3008
+ background: rgba(4, 120, 87, 0.18);
3009
+ border-color: rgba(110, 231, 183, 0.28);
3010
+ }
3011
+
3012
+ @media (width >= 768px) {
3013
+ .fleet-ops-resources-hub-header {
3014
+ padding-right: 1.5rem;
3015
+ padding-left: 1.5rem;
3016
+ }
3017
+
3018
+ .fleet-ops-resources-hub-header-inner {
3019
+ flex-direction: row;
3020
+ align-items: flex-start;
3021
+ justify-content: space-between;
3022
+ }
3023
+
3024
+ .fleet-ops-resources-hub-content {
3025
+ padding: 1rem 1.5rem;
3026
+ }
3027
+
3028
+ .fleet-ops-resources-kpi-grid,
3029
+ .fleet-ops-resources-card-grid,
3030
+ .fleet-ops-resources-guidance-grid {
3031
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3032
+ }
3033
+ }
3034
+
3035
+ @media (width >= 1024px) {
3036
+ .fleet-ops-resources-kpi-grid {
3037
+ grid-template-columns: repeat(4, minmax(0, 1fr));
3038
+ }
3039
+
3040
+ .fleet-ops-resources-card-grid,
3041
+ .fleet-ops-resources-guidance-grid {
3042
+ grid-template-columns: repeat(3, minmax(0, 1fr));
3043
+ }
3044
+ }
3045
+
3046
+ @media (width >= 1280px) {
3047
+ .fleet-ops-resources-card-grid,
3048
+ .fleet-ops-resources-guidance-grid {
3049
+ grid-template-columns: repeat(3, minmax(0, 1fr));
3050
+ }
3051
+ }
3052
+
3053
+ body[data-theme='dark'] .fleet-ops-hub {
3054
+ color: #f9fafb;
3055
+ background: #111827;
3056
+ }
3057
+
3058
+ body[data-theme='dark'] .fleet-ops-hub-kpi,
3059
+ body[data-theme='dark'] .fleet-ops-hub-card,
3060
+ body[data-theme='dark'] .fleet-ops-hub-panel {
3061
+ background: #1f2937;
3062
+ border-color: #374151;
3063
+ }
3064
+
3065
+ body[data-theme='dark'] .fleet-ops-hub-header {
3066
+ background: #111827;
3067
+ border-bottom-color: #374151;
3068
+ }
3069
+
3070
+ body[data-theme='dark'] .fleet-ops-hub-title,
3071
+ body[data-theme='dark'] .fleet-ops-hub-kpi-value,
3072
+ body[data-theme='dark'] .fleet-ops-hub-card-heading,
3073
+ body[data-theme='dark'] .fleet-ops-hub-panel-title {
3074
+ color: #f9fafb;
3075
+ }
3076
+
3077
+ .fleet-ops-control-hub {
3078
+ height: 100%;
3079
+ min-height: 0;
3080
+ overflow-y: auto;
3081
+ color: #111827;
3082
+ background: #f9fafb;
3083
+ }
3084
+
3085
+ .fleet-ops-control-hub-header {
3086
+ position: sticky;
3087
+ top: 0;
3088
+ z-index: 50;
3089
+ display: flex;
3090
+ flex-direction: column;
3091
+ gap: 0.75rem;
3092
+ padding: 1rem;
3093
+ background: #fff;
3094
+ border-bottom: 1px solid #e5e7eb;
3095
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
3096
+ }
3097
+
3098
+ .fleet-ops-control-hub-header-copy {
3099
+ min-width: 0;
3100
+ }
3101
+
3102
+ .fleet-ops-control-hub-eyebrow {
3103
+ margin-bottom: 0.125rem;
3104
+ font-size: 0.6875rem;
3105
+ font-weight: 800;
3106
+ line-height: 1rem;
3107
+ color: #3485e2;
3108
+ text-transform: uppercase;
3109
+ }
3110
+
3111
+ .fleet-ops-control-hub-title {
3112
+ margin: 0;
3113
+ font-size: 1.125rem;
3114
+ font-weight: 800;
3115
+ line-height: 1.35;
3116
+ color: #111827;
3117
+ }
3118
+
3119
+ .fleet-ops-control-hub-subtitle {
3120
+ max-width: 52rem;
3121
+ margin: 0.25rem 0 0;
3122
+ font-size: 0.8125rem;
3123
+ line-height: 1.35rem;
3124
+ color: #6b7280;
3125
+ }
3126
+
3127
+ .fleet-ops-control-hub-header-actions {
3128
+ display: flex;
3129
+ flex-wrap: wrap;
3130
+ align-items: center;
3131
+ gap: 0.5rem;
3132
+ }
3133
+
3134
+ .fleet-ops-control-hub-primary-action {
3135
+ display: inline-flex;
3136
+ align-items: center;
3137
+ gap: 0.45rem;
3138
+ min-height: 2rem;
3139
+ padding: 0 0.7rem;
3140
+ font-size: 0.75rem;
3141
+ font-weight: 800;
3142
+ color: #fff;
3143
+ white-space: nowrap;
3144
+ background: #2563eb;
3145
+ border: 1px solid #2563eb;
3146
+ border-radius: 0.375rem;
3147
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.12);
3148
+ }
3149
+
3150
+ .fleet-ops-control-hub-primary-action:hover {
3151
+ color: #fff;
3152
+ background: #1d4ed8;
3153
+ border-color: #1d4ed8;
3154
+ }
3155
+
3156
+ .fleet-ops-control-hub-body {
3157
+ display: flex;
3158
+ flex-direction: column;
3159
+ gap: 0.75rem;
3160
+ width: 100%;
3161
+ max-width: 80rem;
3162
+ padding: 0.875rem 1rem 1rem;
3163
+ margin: 0 auto;
3164
+ }
3165
+
3166
+ .fleet-ops-control-hub-kpis {
3167
+ display: grid;
3168
+ grid-template-columns: repeat(1, minmax(0, 1fr));
3169
+ gap: 0.75rem;
3170
+ }
3171
+
3172
+ .fleet-ops-control-hub-kpi,
3173
+ .fleet-ops-control-hub-panel,
3174
+ .fleet-ops-control-hub-link,
3175
+ .fleet-ops-control-hub-action {
3176
+ color: inherit;
3177
+ background: #fff;
3178
+ border: 1px solid #e5e7eb;
3179
+ border-radius: 0.375rem;
3180
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05);
3181
+ }
3182
+
3183
+ .fleet-ops-control-hub-kpi {
3184
+ position: relative;
3185
+ display: flex;
3186
+ min-height: 7rem;
3187
+ padding: 0.875rem;
3188
+ overflow: hidden;
3189
+ text-decoration: none;
3190
+ background: linear-gradient(135deg, rgba(37, 99, 235, 0.1), rgba(37, 99, 235, 0.02) 50%, #fff 100%), #fff;
3191
+ border-color: #bfdbfe;
3192
+ transition:
3193
+ border-color 0.18s ease,
3194
+ box-shadow 0.18s ease,
3195
+ transform 0.18s ease;
3196
+ }
3197
+
3198
+ .fleet-ops-control-hub-kpi:hover,
3199
+ .fleet-ops-control-hub-link:hover,
3200
+ .fleet-ops-control-hub-action:hover {
3201
+ color: inherit;
3202
+ border-color: #bfdbfe;
3203
+ box-shadow: 0 10px 24px rgba(15, 23, 42, 0.08);
3204
+ transform: translateY(-1px);
3205
+ }
3206
+
3207
+ .fleet-ops-control-hub-kpi-copy {
3208
+ min-width: 0;
3209
+ padding-right: 3rem;
3210
+ }
3211
+
3212
+ .fleet-ops-control-hub-kpi-label {
3213
+ overflow: hidden;
3214
+ font-size: 0.6875rem;
3215
+ font-weight: 800;
3216
+ line-height: 1rem;
3217
+ color: #6b7280;
3218
+ text-overflow: ellipsis;
3219
+ text-transform: uppercase;
3220
+ white-space: nowrap;
3221
+ }
3222
+
3223
+ .fleet-ops-control-hub-kpi-value {
3224
+ margin-top: 0.375rem;
3225
+ font-size: 1.85rem;
3226
+ font-weight: 900;
3227
+ line-height: 1.1;
3228
+ color: #111827;
3229
+ }
3230
+
3231
+ .fleet-ops-control-hub-kpi-caption {
3232
+ display: -webkit-box;
3233
+ margin-top: 0.5rem;
3234
+ overflow: hidden;
3235
+ font-size: 0.75rem;
3236
+ line-height: 1.15rem;
3237
+ color: #6b7280;
3238
+ -webkit-line-clamp: 2;
3239
+ -webkit-box-orient: vertical;
3240
+ }
3241
+
3242
+ .fleet-ops-control-hub-kpi-action {
3243
+ display: inline-flex;
3244
+ align-items: center;
3245
+ gap: 0.35rem;
3246
+ max-width: 100%;
3247
+ min-width: 0;
3248
+ margin-top: 0.625rem;
3249
+ font-size: 0.75rem;
3250
+ font-weight: 800;
3251
+ line-height: 1rem;
3252
+ color: #2563eb;
3253
+ white-space: nowrap;
3254
+ }
3255
+
3256
+ .fleet-ops-control-hub-kpi-action span {
3257
+ min-width: 0;
3258
+ overflow: hidden;
3259
+ text-overflow: ellipsis;
3260
+ white-space: nowrap;
3261
+ }
3262
+
3263
+ .fleet-ops-control-hub-kpi-action svg {
3264
+ flex-shrink: 0;
3265
+ font-size: 0.6875rem;
3266
+ transition: transform 0.18s ease;
3267
+ }
3268
+
3269
+ .fleet-ops-control-hub-kpi:hover .fleet-ops-control-hub-kpi-action svg {
3270
+ transform: translateX(2px);
3271
+ }
3272
+
3273
+ .fleet-ops-control-hub-kpi-icon,
3274
+ .fleet-ops-control-hub-link-icon {
3275
+ display: flex;
3276
+ flex-shrink: 0;
3277
+ align-items: center;
3278
+ justify-content: center;
3279
+ color: #2563eb;
3280
+ background: #eff6ff;
3281
+ border-radius: 0.375rem;
3282
+ }
3283
+
3284
+ .fleet-ops-control-hub-kpi-icon {
3285
+ position: absolute;
3286
+ top: 0.875rem;
3287
+ right: 0.875rem;
3288
+ width: 2.25rem;
3289
+ height: 2.25rem;
3290
+ }
3291
+
3292
+ .fleet-ops-control-hub-grid {
3293
+ display: grid;
3294
+ grid-template-columns: minmax(0, 1fr);
3295
+ gap: 0.75rem;
3296
+ }
3297
+
3298
+ .fleet-ops-control-hub-main,
3299
+ .fleet-ops-control-hub-side,
3300
+ .fleet-ops-control-hub-action-list {
3301
+ display: flex;
3302
+ min-width: 0;
3303
+ flex-direction: column;
3304
+ gap: 0.75rem;
3305
+ }
3306
+
3307
+ .fleet-ops-control-hub-panel {
3308
+ padding: 0.875rem;
3309
+ }
3310
+
3311
+ .fleet-ops-control-hub-panel-header {
3312
+ display: flex;
3313
+ align-items: flex-start;
3314
+ justify-content: space-between;
3315
+ gap: 0.75rem;
3316
+ margin-bottom: 0.75rem;
3317
+ }
3318
+
3319
+ .fleet-ops-control-hub-panel-header h2 {
3320
+ margin: 0;
3321
+ font-size: 0.875rem;
3322
+ font-weight: 800;
3323
+ line-height: 1.25rem;
3324
+ color: #111827;
3325
+ }
3326
+
3327
+ .fleet-ops-control-hub-panel-header p {
3328
+ max-width: 42rem;
3329
+ margin: 0.125rem 0 0;
3330
+ font-size: 0.75rem;
3331
+ line-height: 1.2rem;
3332
+ color: #6b7280;
3333
+ }
3334
+
3335
+ .fleet-ops-control-hub-link-grid,
3336
+ .fleet-ops-control-hub-doc-grid {
3337
+ display: grid;
3338
+ grid-template-columns: repeat(1, minmax(0, 1fr));
3339
+ gap: 0.5rem;
3340
+ }
3341
+
3342
+ .fleet-ops-control-hub-doc-grid {
3343
+ gap: 0;
3344
+ }
3345
+
3346
+ .fleet-ops-control-hub-doc-note {
3347
+ padding: 0.5rem;
3348
+ background: #fffbeb;
3349
+ border: 1px solid #fde68a;
3350
+ border-radius: 0.375rem;
3351
+ }
3352
+
3353
+ .fleet-ops-control-hub-doc-note-heading {
3354
+ display: flex;
3355
+ align-items: center;
3356
+ gap: 0.3rem;
3357
+ margin-bottom: 0.35rem;
3358
+ font-size: 0.6875rem;
3359
+ font-weight: 900;
3360
+ line-height: 1rem;
3361
+ color: #92400e;
3362
+ text-transform: uppercase;
3363
+ }
3364
+
3365
+ .fleet-ops-control-hub-doc-note-heading svg {
3366
+ color: #d97706;
3367
+ }
3368
+
3369
+ .fleet-ops-control-hub-doc-note-copy {
3370
+ margin: -0.2rem 0 0.35rem;
3371
+ font-size: 0.75rem;
3372
+ line-height: 1rem;
3373
+ color: #92400e;
3374
+ }
3375
+
3376
+ .fleet-ops-control-hub-link {
3377
+ display: flex;
3378
+ align-items: center;
3379
+ gap: 0.625rem;
3380
+ min-height: 4.25rem;
3381
+ padding: 0.625rem;
3382
+ text-decoration: none;
3383
+ transition:
3384
+ border-color 0.18s ease,
3385
+ box-shadow 0.18s ease,
3386
+ transform 0.18s ease;
3387
+ }
3388
+
3389
+ .fleet-ops-control-hub-link-icon {
3390
+ width: 2rem;
3391
+ height: 2rem;
3392
+ font-size: 0.8125rem;
3393
+ }
3394
+
3395
+ .fleet-ops-control-hub-link-copy {
3396
+ display: flex;
3397
+ min-width: 0;
3398
+ flex: 1 1 auto;
3399
+ flex-direction: column;
3400
+ gap: 0.125rem;
3401
+ }
3402
+
3403
+ .fleet-ops-control-hub-link-title {
3404
+ overflow: hidden;
3405
+ font-size: 0.8125rem;
3406
+ font-weight: 800;
3407
+ line-height: 1.2rem;
3408
+ color: #111827;
3409
+ text-overflow: ellipsis;
3410
+ white-space: nowrap;
3411
+ }
3412
+
3413
+ .fleet-ops-control-hub-link-description {
3414
+ display: -webkit-box;
3415
+ overflow: hidden;
3416
+ font-size: 0.75rem;
3417
+ line-height: 1.1rem;
3418
+ color: #6b7280;
3419
+ -webkit-line-clamp: 2;
3420
+ -webkit-box-orient: vertical;
3421
+ }
3422
+
3423
+ .fleet-ops-control-hub-link-count {
3424
+ display: inline-flex;
3425
+ flex: 0 0 auto;
3426
+ align-items: center;
3427
+ justify-content: center;
3428
+ min-width: 2rem;
3429
+ height: 1.5rem;
3430
+ padding: 0 0.45rem;
3431
+ font-size: 0.75rem;
3432
+ font-weight: 900;
3433
+ color: #1d4ed8;
3434
+ background: #eff6ff;
3435
+ border-radius: 999px;
3436
+ }
3437
+
3438
+ .fleet-ops-control-hub-link-arrow {
3439
+ flex-shrink: 0;
3440
+ color: #9ca3af;
3441
+ }
3442
+
3443
+ .fleet-ops-control-hub-action {
3444
+ display: flex;
3445
+ gap: 0.625rem;
3446
+ padding: 0.625rem;
3447
+ text-decoration: none;
3448
+ transition:
3449
+ border-color 0.18s ease,
3450
+ box-shadow 0.18s ease,
3451
+ transform 0.18s ease;
3452
+ }
3453
+
3454
+ .fleet-ops-control-hub-action svg {
3455
+ flex-shrink: 0;
3456
+ margin-top: 0.1875rem;
3457
+ color: #2563eb;
3458
+ }
3459
+
3460
+ .fleet-ops-control-hub-action strong,
3461
+ .fleet-ops-control-hub-action small {
3462
+ display: block;
3463
+ }
3464
+
3465
+ .fleet-ops-control-hub-action strong {
3466
+ font-size: 0.8125rem;
3467
+ line-height: 1.15rem;
3468
+ color: #111827;
3469
+ }
3470
+
3471
+ .fleet-ops-control-hub-action small {
3472
+ margin-top: 0.125rem;
3473
+ font-size: 0.75rem;
3474
+ line-height: 1.15rem;
3475
+ color: #6b7280;
3476
+ }
3477
+
3478
+ .fleet-ops-control-hub-doc-link {
3479
+ position: relative;
3480
+ display: flex;
3481
+ align-items: flex-start;
3482
+ gap: 0.4rem;
3483
+ min-width: 0;
3484
+ min-height: 2.15rem;
3485
+ padding: 0.3rem;
3486
+ color: inherit;
3487
+ font-size: 0.6875rem;
3488
+ text-align: left;
3489
+ background: transparent;
3490
+ border: 0;
3491
+ border-radius: 0.25rem;
3492
+ box-shadow: none;
3493
+ transition: background 0.18s ease;
3494
+ }
3495
+
3496
+ .fleet-ops-control-hub-doc-link + .fleet-ops-control-hub-doc-link {
3497
+ margin-top: 0.4rem;
3498
+ }
3499
+
3500
+ .fleet-ops-control-hub-doc-link + .fleet-ops-control-hub-doc-link::before {
3501
+ position: absolute;
3502
+ top: -0.2rem;
3503
+ right: 0.3rem;
3504
+ left: 0.3rem;
3505
+ border-top: 1px dashed rgba(217, 119, 6, 0.35);
3506
+ content: '';
3507
+ pointer-events: none;
3508
+ }
3509
+
3510
+ .fleet-ops-control-hub-doc-link:hover {
3511
+ color: inherit;
3512
+ background: rgba(245, 158, 11, 0.1);
3513
+ box-shadow: none;
3514
+ transform: none;
3515
+ }
3516
+
3517
+ .fleet-ops-control-hub-doc-link svg {
3518
+ flex-shrink: 0;
3519
+ margin-top: 0.125rem;
3520
+ font-size: 0.6875rem;
3521
+ color: #b45309;
3522
+ }
3523
+
3524
+ .fleet-ops-control-hub-doc-copy {
3525
+ display: flex;
3526
+ min-width: 0;
3527
+ flex-direction: column;
3528
+ gap: 0.05rem;
3529
+ }
3530
+
3531
+ .fleet-ops-control-hub-doc-copy strong,
3532
+ .fleet-ops-control-hub-doc-copy small {
3533
+ display: block;
3534
+ }
3535
+
3536
+ .fleet-ops-control-hub-doc-copy strong {
3537
+ overflow: hidden;
3538
+ font-size: 0.75rem;
3539
+ font-weight: 800;
3540
+ line-height: 1rem;
3541
+ color: #111827;
3542
+ text-overflow: ellipsis;
3543
+ white-space: nowrap;
3544
+ }
3545
+
3546
+ .fleet-ops-control-hub-doc-copy small {
3547
+ display: -webkit-box;
3548
+ overflow: hidden;
3549
+ font-size: 0.6875rem;
3550
+ line-height: 0.95rem;
3551
+ color: #6b7280;
3552
+ -webkit-line-clamp: 1;
3553
+ -webkit-box-orient: vertical;
3554
+ }
3555
+
3556
+ .fleet-ops-control-hub-tone-blue {
3557
+ background: linear-gradient(135deg, rgba(37, 99, 235, 0.12), rgba(37, 99, 235, 0.03) 52%, #fff 100%), #fff;
3558
+ border-color: #bfdbfe;
3559
+ }
3560
+
3561
+ .fleet-ops-control-hub-tone-green,
3562
+ .fleet-ops-control-hub-tone-success {
3563
+ background: linear-gradient(135deg, rgba(16, 185, 129, 0.14), rgba(16, 185, 129, 0.03) 52%, #fff 100%), #fff;
3564
+ border-color: #a7f3d0;
3565
+ }
3566
+
3567
+ .fleet-ops-control-hub-tone-amber,
3568
+ .fleet-ops-control-hub-tone-warning {
3569
+ background: linear-gradient(135deg, rgba(245, 158, 11, 0.16), rgba(245, 158, 11, 0.04) 52%, #fff 100%), #fff;
3570
+ border-color: #fde68a;
3571
+ }
3572
+
3573
+ .fleet-ops-control-hub-tone-rose {
3574
+ background: linear-gradient(135deg, rgba(225, 29, 72, 0.13), rgba(225, 29, 72, 0.03) 52%, #fff 100%), #fff;
3575
+ border-color: #fecdd3;
3576
+ }
3577
+
3578
+ .fleet-ops-control-hub-tone-green .fleet-ops-control-hub-kpi-icon,
3579
+ .fleet-ops-control-hub-tone-success .fleet-ops-control-hub-kpi-icon,
3580
+ .fleet-ops-control-hub-tone-green .fleet-ops-control-hub-link-icon,
3581
+ .fleet-ops-control-hub-tone-success .fleet-ops-control-hub-link-icon {
3582
+ color: #047857;
3583
+ background: #ecfdf5;
3584
+ }
3585
+
3586
+ .fleet-ops-control-hub-tone-amber .fleet-ops-control-hub-kpi-icon,
3587
+ .fleet-ops-control-hub-tone-warning .fleet-ops-control-hub-kpi-icon,
3588
+ .fleet-ops-control-hub-tone-amber .fleet-ops-control-hub-link-icon,
3589
+ .fleet-ops-control-hub-tone-warning .fleet-ops-control-hub-link-icon {
3590
+ color: #b45309;
3591
+ background: #fffbeb;
3592
+ }
3593
+
3594
+ .fleet-ops-control-hub-tone-rose .fleet-ops-control-hub-kpi-icon {
3595
+ color: #e11d48;
3596
+ background: #fff1f2;
3597
+ }
3598
+
3599
+ .fleet-ops-dashboard-page {
3600
+ display: flex;
3601
+ flex: 0 0 auto;
3602
+ align-items: center;
3603
+ justify-content: space-between;
3604
+ gap: 1rem;
3605
+ width: 100%;
3606
+ padding: 1rem;
3607
+ background-color: #fff;
3608
+ border-bottom: 1px solid #e5e7eb;
3609
+ box-shadow: 0 1px 2px rgb(15 23 42 / 6%);
3610
+ }
3611
+
3612
+ .fleet-ops-dashboard-title h1 {
3613
+ color: #111827;
3614
+ font-size: 1.05rem;
3615
+ font-weight: 800;
3616
+ line-height: 1.2;
3617
+ }
3618
+
3619
+ .fleet-ops-dashboard-actions {
3620
+ justify-content: flex-end;
3621
+ }
3622
+
3623
+ .fleet-ops-dashboard-actions .ember-basic-dropdown-trigger {
3624
+ display: flex;
3625
+ }
3626
+
3627
+ .fleet-ops-dashboard-create-wrapper {
3628
+ padding: 1rem;
3629
+ }
3630
+
3631
+ body[data-theme='dark'] .fleet-ops-control-hub {
3632
+ color: #f9fafb;
3633
+ background: #111827;
3634
+ }
3635
+
3636
+ body[data-theme='dark'] .fleet-ops-control-hub-kpi,
3637
+ body[data-theme='dark'] .fleet-ops-control-hub-panel,
3638
+ body[data-theme='dark'] .fleet-ops-control-hub-link,
3639
+ body[data-theme='dark'] .fleet-ops-control-hub-action {
3640
+ background: #1f2937;
3641
+ border-color: #374151;
3642
+ }
3643
+
3644
+ body[data-theme='dark'] .fleet-ops-control-hub-header {
3645
+ background: #111827;
3646
+ border-color: #374151;
3647
+ }
3648
+
3649
+ body[data-theme='dark'] .fleet-ops-control-hub-title,
3650
+ body[data-theme='dark'] .fleet-ops-control-hub-kpi-value,
3651
+ body[data-theme='dark'] .fleet-ops-control-hub-panel-header h2,
3652
+ body[data-theme='dark'] .fleet-ops-control-hub-link-title,
3653
+ body[data-theme='dark'] .fleet-ops-control-hub-action strong,
3654
+ body[data-theme='dark'] .fleet-ops-control-hub-doc-copy strong {
3655
+ color: #f9fafb;
3656
+ }
3657
+
3658
+ body[data-theme='dark'] .fleet-ops-control-hub-subtitle,
3659
+ body[data-theme='dark'] .fleet-ops-control-hub-kpi-label,
3660
+ body[data-theme='dark'] .fleet-ops-control-hub-kpi-caption,
3661
+ body[data-theme='dark'] .fleet-ops-control-hub-panel-header p,
3662
+ body[data-theme='dark'] .fleet-ops-control-hub-link-description,
3663
+ body[data-theme='dark'] .fleet-ops-control-hub-action small,
3664
+ body[data-theme='dark'] .fleet-ops-control-hub-doc-copy small {
3665
+ color: #9ca3af;
3666
+ }
3667
+
3668
+ body[data-theme='dark'] .fleet-ops-control-hub-kpi-action {
3669
+ color: #93c5fd;
3670
+ }
3671
+
3672
+ body[data-theme='dark'] .fleet-ops-control-hub-action svg {
3673
+ background: transparent;
3674
+ border: 0;
3675
+ border-radius: 0;
3676
+ box-shadow: none;
3677
+ }
3678
+
3679
+ body[data-theme='dark'] .fleet-ops-control-hub-action.fleet-ops-control-hub-tone-green svg,
3680
+ body[data-theme='dark'] .fleet-ops-control-hub-action.fleet-ops-control-hub-tone-success svg {
3681
+ color: #34d399;
3682
+ }
3683
+
3684
+ body[data-theme='dark'] .fleet-ops-control-hub-action.fleet-ops-control-hub-tone-amber svg,
3685
+ body[data-theme='dark'] .fleet-ops-control-hub-action.fleet-ops-control-hub-tone-warning svg {
3686
+ color: #fbbf24;
3687
+ }
3688
+
3689
+ body[data-theme='dark'] .fleet-ops-control-hub-action.fleet-ops-control-hub-tone-rose svg {
3690
+ color: #fb7185;
3691
+ }
3692
+
3693
+ body[data-theme='dark'] .fleet-ops-control-hub-action.fleet-ops-control-hub-tone-blue svg,
3694
+ body[data-theme='dark'] .fleet-ops-control-hub-action.fleet-ops-control-hub-tone-info svg {
3695
+ color: #93c5fd;
3696
+ }
3697
+
3698
+ body[data-theme='dark'] .fleet-ops-control-hub-doc-note {
3699
+ background: rgba(245, 158, 11, 0.12);
3700
+ border-color: rgba(251, 191, 36, 0.35);
3701
+ }
3702
+
3703
+ body[data-theme='dark'] .fleet-ops-control-hub-doc-note-heading,
3704
+ body[data-theme='dark'] .fleet-ops-control-hub-doc-note-heading svg,
3705
+ body[data-theme='dark'] .fleet-ops-control-hub-doc-link svg {
3706
+ color: #fbbf24;
3707
+ }
3708
+
3709
+ body[data-theme='dark'] .fleet-ops-control-hub-doc-note-copy {
3710
+ color: #fcd34d;
3711
+ }
3712
+
3713
+ body[data-theme='dark'] .fleet-ops-control-hub-doc-link:hover {
3714
+ background: rgba(251, 191, 36, 0.12);
3715
+ }
3716
+
3717
+ body[data-theme='dark'] .fleet-ops-control-hub-doc-link + .fleet-ops-control-hub-doc-link::before {
3718
+ border-top-color: rgba(251, 191, 36, 0.28);
3719
+ }
3720
+
3721
+ body[data-theme='dark'] .fleet-ops-control-hub-tone-blue {
3722
+ background: linear-gradient(135deg, rgba(37, 99, 235, 0.2), rgba(37, 99, 235, 0.06) 52%, #1f2937 100%), #1f2937;
3723
+ border-color: rgba(96, 165, 250, 0.45);
3724
+ }
3725
+
3726
+ body[data-theme='dark'] .fleet-ops-control-hub-tone-green,
3727
+ body[data-theme='dark'] .fleet-ops-control-hub-tone-success {
3728
+ background: linear-gradient(135deg, rgba(16, 185, 129, 0.2), rgba(16, 185, 129, 0.06) 52%, #1f2937 100%), #1f2937;
3729
+ border-color: rgba(52, 211, 153, 0.45);
3730
+ }
3731
+
3732
+ body[data-theme='dark'] .fleet-ops-control-hub-tone-amber,
3733
+ body[data-theme='dark'] .fleet-ops-control-hub-tone-warning {
3734
+ background: linear-gradient(135deg, rgba(245, 158, 11, 0.22), rgba(245, 158, 11, 0.06) 52%, #1f2937 100%), #1f2937;
3735
+ border-color: rgba(251, 191, 36, 0.45);
3736
+ }
3737
+
3738
+ body[data-theme='dark'] .fleet-ops-control-hub-tone-rose {
3739
+ background: linear-gradient(135deg, rgba(225, 29, 72, 0.2), rgba(225, 29, 72, 0.06) 52%, #1f2937 100%), #1f2937;
3740
+ border-color: rgba(251, 113, 133, 0.45);
3741
+ }
3742
+
3743
+ body[data-theme='dark'] .fleet-ops-control-hub-kpi-icon,
3744
+ body[data-theme='dark'] .fleet-ops-control-hub-link-icon,
3745
+ body[data-theme='dark'] .fleet-ops-control-hub-link-count {
3746
+ color: #93c5fd;
3747
+ background: rgba(37, 99, 235, 0.2);
3748
+ }
3749
+
3750
+ body[data-theme='dark'] .fleet-ops-control-hub-primary-action {
3751
+ color: #fff;
3752
+ }
3753
+
3754
+ body[data-theme='dark'] .fleet-ops-dashboard-page {
3755
+ background-color: #111827;
3756
+ border-bottom-color: #1f2937;
3757
+ box-shadow: 0 1px 2px rgb(2 6 23 / 30%);
3758
+ }
3759
+
3760
+ body[data-theme='dark'] .fleet-ops-dashboard-title h1 {
3761
+ color: #f9fafb;
3762
+ }
3763
+
3764
+ @media (width >= 768px) {
3765
+ .fleet-ops-control-hub-header {
3766
+ flex-direction: row;
3767
+ align-items: flex-start;
3768
+ justify-content: space-between;
3769
+ padding-right: 1.5rem;
3770
+ padding-left: 1.5rem;
3771
+ }
3772
+
3773
+ .fleet-ops-control-hub-header-actions {
3774
+ flex-shrink: 0;
3775
+ justify-content: flex-end;
3776
+ }
3777
+
3778
+ .fleet-ops-control-hub-body {
3779
+ padding: 1rem 1.5rem;
3780
+ }
3781
+
3782
+ .fleet-ops-control-hub-kpis {
3783
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3784
+ }
3785
+
3786
+ .fleet-ops-control-hub-link-grid {
3787
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3788
+ }
3789
+
3790
+ .fleet-ops-control-hub-link-grid-compact {
3791
+ grid-template-columns: repeat(1, minmax(0, 1fr));
3792
+ }
3793
+
3794
+ .fleet-ops-control-hub-doc-grid {
3795
+ grid-template-columns: repeat(1, minmax(0, 1fr));
3796
+ }
3797
+ }
3798
+
3799
+ @media (width <= 767px) {
3800
+ .fleet-ops-dashboard-page {
3801
+ flex-direction: column;
3802
+ align-items: flex-start;
3803
+ }
3804
+
3805
+ .fleet-ops-dashboard-actions {
3806
+ justify-content: flex-start;
3807
+ width: 100%;
3808
+ }
3809
+ }
3810
+
3811
+ @media (width >= 1024px) {
3812
+ .fleet-ops-control-hub-grid {
3813
+ grid-template-columns: minmax(0, 1fr) minmax(18rem, 23rem);
3814
+ align-items: start;
3815
+ }
3816
+
3817
+ .fleet-ops-control-hub-kpis {
3818
+ grid-template-columns: repeat(4, minmax(0, 1fr));
3819
+ }
3820
+
3821
+ .fleet-ops-control-hub-side {
3822
+ position: sticky;
3823
+ top: 5.25rem;
3824
+ }
3825
+ }
3826
+
3827
+ @media (width >= 1280px) {
3828
+ .fleet-ops-control-hub-link-grid {
3829
+ grid-template-columns: repeat(3, minmax(0, 1fr));
3830
+ }
3831
+
3832
+ .fleet-ops-control-hub-link-grid-compact {
3833
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3834
+ }
3835
+ }
3836
+
3837
+ body[data-theme='dark'] .fleet-ops-hub-subtitle,
3838
+ body[data-theme='dark'] .fleet-ops-hub-kpi-label,
3839
+ body[data-theme='dark'] .fleet-ops-hub-kpi-caption,
3840
+ body[data-theme='dark'] .fleet-ops-hub-card-description,
3841
+ body[data-theme='dark'] .fleet-ops-hub-guidance-list,
3842
+ body[data-theme='dark'] .fleet-ops-hub-section-title {
3843
+ color: #9ca3af;
3844
+ }
3845
+
3846
+ body[data-theme='dark'] .fleet-ops-hub-card:hover {
3847
+ background: #243244;
3848
+ border-color: #2563eb;
3849
+ }
3850
+
3851
+ body[data-theme='dark'] .fleet-ops-hub-card-icon,
3852
+ body[data-theme='dark'] .fleet-ops-hub-kpi-icon {
3853
+ color: #93c5fd;
3854
+ background: rgba(37, 99, 235, 0.22);
3855
+ }
3856
+
3857
+ body[data-theme='dark'] .fleet-ops-hub-panel-prominent,
3858
+ body[data-theme='dark'] .fleet-ops-hub-kpi-accent-green,
3859
+ body[data-theme='dark'] .fleet-ops-hub-kpi-accent-amber,
3860
+ body[data-theme='dark'] .fleet-ops-hub-kpi-accent-rose {
3861
+ background: #1f2937;
3862
+ }
3863
+
3864
+ @media (width >= 768px) {
3865
+ .fleet-ops-hub-kpi-grid,
3866
+ .fleet-ops-hub-card-grid,
3867
+ .fleet-ops-hub-card-grid-three {
3868
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3869
+ }
3870
+ }
3871
+
3872
+ @media (width >= 1280px) {
3873
+ .fleet-ops-hub-kpi-grid {
3874
+ grid-template-columns: repeat(4, minmax(0, 1fr));
3875
+ }
3876
+
3877
+ .fleet-ops-hub-layout {
3878
+ grid-template-columns: minmax(0, 2fr) minmax(18rem, 1fr);
3879
+ }
3880
+
3881
+ .fleet-ops-hub-card-grid-three {
3882
+ grid-template-columns: repeat(3, minmax(0, 1fr));
3883
+ }
3884
+ }
3885
+
2071
3886
  /** css fix for operations index/kanban */
2072
3887
  main.console-fleet-ops-operations-orders-index-index section.next-view-section {
2073
3888
  max-width: 100vw;