@fleetbase/fleetops-engine 0.6.50 → 0.6.52

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 (494) hide show
  1. package/README.md +183 -67
  2. package/addon/components/cell/telematic-provider.hbs +16 -0
  3. package/addon/components/cell/telematic-provider.js +36 -0
  4. package/addon/components/cell/telematic-status.hbs +1 -0
  5. package/addon/components/cell/telematic-status.js +39 -0
  6. package/addon/components/contact/panel-header.hbs +11 -48
  7. package/addon/components/customer/details.hbs +1 -2
  8. package/addon/components/customer/form.hbs +63 -51
  9. package/addon/components/customer/form.js +27 -1
  10. package/addon/components/customer/orders.hbs +48 -0
  11. package/addon/components/customer/orders.js +67 -5
  12. package/addon/components/device/manager.hbs +5 -6
  13. package/addon/components/device/manager.js +12 -15
  14. package/addon/components/driver/details.hbs +1 -1
  15. package/addon/components/driver/form.hbs +1 -1
  16. package/addon/components/fleet/vehicle-listing.js +1 -0
  17. package/addon/components/fuel-integration/form.hbs +200 -0
  18. package/addon/components/fuel-integration/form.js +242 -0
  19. package/addon/components/fuel-integration/hub.hbs +154 -0
  20. package/addon/components/fuel-integration/hub.js +165 -0
  21. package/addon/components/fuel-integration/matching-priority.hbs +76 -0
  22. package/addon/components/fuel-integration/matching-priority.js +145 -0
  23. package/addon/components/fuel-report/details.hbs +13 -1
  24. package/addon/components/home/getting-started-guidance.hbs +113 -0
  25. package/addon/components/home/getting-started-guidance.js +107 -0
  26. package/addon/components/issue/details/comments.hbs +3 -0
  27. package/addon/components/issue/details/comments.js +3 -0
  28. package/addon/components/issue/details/correspondence.hbs +9 -0
  29. package/addon/components/issue/details/correspondence.js +83 -0
  30. package/addon/components/issue/details/documents.hbs +69 -0
  31. package/addon/components/issue/details/documents.js +85 -0
  32. package/addon/components/issue/details.hbs +166 -59
  33. package/addon/components/issue/details.js +149 -0
  34. package/addon/components/issue/form.hbs +19 -1
  35. package/addon/components/issue/panel-header.hbs +43 -0
  36. package/addon/components/issue/panel-header.js +22 -0
  37. package/addon/components/issue/timeline.hbs +40 -0
  38. package/addon/components/issue/timeline.js +45 -0
  39. package/addon/components/layout/fleet-ops-sidebar.js +20 -2
  40. package/addon/components/leaflet-tracking-marker.js +3 -0
  41. package/addon/components/map/drawer/device-event-listing.hbs +12 -2
  42. package/addon/components/map/drawer/driver-listing.hbs +14 -1
  43. package/addon/components/map/drawer/place-listing.hbs +14 -1
  44. package/addon/components/map/drawer/position-listing.hbs +12 -2
  45. package/addon/components/map/drawer/position-listing.js +3 -0
  46. package/addon/components/map/drawer/vehicle-listing.hbs +14 -1
  47. package/addon/components/map/leaflet-live-map.hbs +2 -2
  48. package/addon/components/map/leaflet-live-map.js +17 -0
  49. package/addon/components/map/order-list-overlay.hbs +4 -4
  50. package/addon/components/modals/assigned-orders.hbs +40 -0
  51. package/addon/components/modals/attach-device.hbs +4 -3
  52. package/addon/components/modals/attach-telematic-device.hbs +25 -0
  53. package/addon/components/modals/attach-telematic-device.js +3 -0
  54. package/addon/components/modals/convert-customer-to-vendor.hbs +30 -0
  55. package/addon/components/modals/convert-customer-to-vendor.js +55 -0
  56. package/addon/components/modals/driver-assign-order.hbs +7 -58
  57. package/addon/components/modals/driver-assign-vehicle.hbs +10 -2
  58. package/addon/components/modals/fleet-assign-driver.hbs +18 -0
  59. package/addon/components/modals/fleet-assign-driver.js +3 -0
  60. package/addon/components/modals/fleet-assign-vehicle.hbs +18 -0
  61. package/addon/components/modals/fleet-assign-vehicle.js +3 -0
  62. package/addon/components/modals/issue-assign.hbs +20 -0
  63. package/addon/components/modals/issue-assign.js +49 -0
  64. package/addon/components/modals/issue-close.hbs +30 -0
  65. package/addon/components/modals/issue-close.js +73 -0
  66. package/addon/components/modals/issue-status.hbs +20 -0
  67. package/addon/components/modals/issue-status.js +43 -0
  68. package/addon/components/modals/reset-customer-credentials.js +12 -6
  69. package/addon/components/modals/telematic-connection-diagnostics.hbs +75 -0
  70. package/addon/components/modals/telematic-connection-diagnostics.js +287 -0
  71. package/addon/components/modals/update-order-activity.hbs +51 -17
  72. package/addon/components/modals/update-order-activity.js +59 -5
  73. package/addon/components/modals/vehicle-details.hbs +6 -1
  74. package/addon/components/modals/vehicle-form.hbs +8 -1
  75. package/addon/components/order/card.hbs +106 -0
  76. package/addon/components/order/card.js +257 -0
  77. package/addon/components/order/details/activity.js +2 -2
  78. package/addon/components/order/details/proof.hbs +40 -38
  79. package/addon/components/order/details/proof.js +31 -4
  80. package/addon/components/order/details.hbs +5 -5
  81. package/addon/components/order/details.js +19 -1
  82. package/addon/components/order/form/service-rate.hbs +2 -0
  83. package/addon/components/order/header.hbs +1 -1
  84. package/addon/components/route-list.hbs +0 -12
  85. package/addon/components/service-rate/details.hbs +1 -1
  86. package/addon/components/service-rate/form.hbs +4 -3
  87. package/addon/components/service-rate/form.js +4 -0
  88. package/addon/components/telematic/details.hbs +98 -87
  89. package/addon/components/telematic/details.js +230 -1
  90. package/addon/components/telematic/form.hbs +303 -72
  91. package/addon/components/telematic/form.js +519 -3
  92. package/addon/components/telematic/hub.hbs +149 -0
  93. package/addon/components/telematic/hub.js +142 -0
  94. package/addon/components/telematic/settings.hbs +152 -0
  95. package/addon/components/telematic/settings.js +45 -0
  96. package/addon/components/telematic/tab-empty-state.hbs +29 -0
  97. package/addon/components/telematic/tab-empty-state.js +33 -0
  98. package/addon/components/vehicle/details.hbs +6 -1
  99. package/addon/components/vehicle/form.hbs +2 -1
  100. package/addon/components/vendor/personnel-manager.hbs +166 -0
  101. package/addon/components/vendor/personnel-manager.js +143 -0
  102. package/addon/components/widget/fuel-providers.hbs +43 -0
  103. package/addon/components/widget/fuel-providers.js +27 -0
  104. package/addon/components/widget/live-fleet.hbs +1 -0
  105. package/addon/components/widget/live-fleet.js +2 -7
  106. package/addon/components/widget/revenue-trend.hbs +1 -1
  107. package/addon/components/widget/revenue-trend.js +75 -2
  108. package/addon/controllers/connectivity/devices/index/details.js +27 -1
  109. package/addon/controllers/connectivity/devices/index.js +14 -0
  110. package/addon/controllers/connectivity/fuel-providers/details/sync.js +18 -0
  111. package/addon/controllers/connectivity/fuel-providers/details/transactions.js +24 -0
  112. package/addon/controllers/connectivity/fuel-providers/details.js +69 -0
  113. package/addon/controllers/connectivity/fuel-providers/edit.js +24 -0
  114. package/addon/controllers/connectivity/fuel-providers/index.js +177 -0
  115. package/addon/controllers/connectivity/fuel-providers/new.js +37 -0
  116. package/addon/controllers/connectivity/telematics/details/attachments.js +247 -0
  117. package/addon/controllers/connectivity/telematics/details/devices.js +368 -0
  118. package/addon/controllers/connectivity/telematics/details/events.js +244 -0
  119. package/addon/controllers/connectivity/telematics/details/index.js +3 -0
  120. package/addon/controllers/connectivity/telematics/details/logs.js +43 -0
  121. package/addon/controllers/connectivity/telematics/details/sensors.js +270 -0
  122. package/addon/controllers/connectivity/telematics/details.js +149 -0
  123. package/addon/controllers/connectivity/telematics/{index/edit.js → edit.js} +15 -4
  124. package/addon/controllers/connectivity/telematics/index.js +25 -5
  125. package/addon/controllers/connectivity/telematics/{index/new.js → new.js} +8 -2
  126. package/addon/controllers/management/contacts/customers/details.js +31 -13
  127. package/addon/controllers/management/contacts/customers.js +16 -5
  128. package/addon/controllers/management/contacts/index/details.js +31 -13
  129. package/addon/controllers/management/contacts/index.js +7 -0
  130. package/addon/controllers/management/drivers/index/details.js +78 -1
  131. package/addon/controllers/management/drivers/index.js +39 -0
  132. package/addon/controllers/management/fleets/index/details.js +23 -1
  133. package/addon/controllers/management/fleets/index.js +6 -1
  134. package/addon/controllers/management/fuel-reports/index.js +37 -1
  135. package/addon/controllers/management/fuel-transactions/index/details.js +70 -0
  136. package/addon/controllers/management/fuel-transactions/index.js +240 -0
  137. package/addon/controllers/management/issues/index/details.js +52 -6
  138. package/addon/controllers/management/vehicles/index/details.js +32 -0
  139. package/addon/controllers/management/vehicles/index.js +26 -0
  140. package/addon/controllers/management/vendors/index/details.js +4 -0
  141. package/addon/controllers/operations/orders/index/details.js +11 -3
  142. package/addon/controllers/operations/orders/index.js +5 -1
  143. package/addon/controllers/settings/payments/index.js +5 -0
  144. package/addon/extension.js +29 -12
  145. package/addon/helpers/format-duration.js +1 -38
  146. package/addon/initializers/load-leaflet-assets.js +5 -6
  147. package/addon/initializers/patch-ember-leaflet-tooltip-layer.js +51 -0
  148. package/addon/routes/connectivity/fuel-providers/details/index.js +7 -0
  149. package/addon/routes/connectivity/fuel-providers/details/matching.js +7 -0
  150. package/addon/routes/connectivity/fuel-providers/details/settings.js +7 -0
  151. package/addon/routes/connectivity/fuel-providers/details/sync.js +18 -0
  152. package/addon/routes/connectivity/fuel-providers/details/transactions.js +14 -0
  153. package/addon/routes/connectivity/fuel-providers/details.js +18 -0
  154. package/addon/routes/connectivity/fuel-providers/edit.js +18 -0
  155. package/addon/routes/connectivity/fuel-providers/index.js +20 -0
  156. package/addon/routes/connectivity/fuel-providers/new.js +3 -0
  157. package/addon/routes/connectivity/fuel-providers.js +3 -0
  158. package/addon/routes/connectivity/telematics/details/attachments.js +28 -0
  159. package/addon/routes/connectivity/telematics/details/devices.js +30 -0
  160. package/addon/routes/connectivity/telematics/details/events.js +33 -0
  161. package/addon/routes/connectivity/telematics/details/index.js +3 -0
  162. package/addon/routes/connectivity/telematics/details/logs.js +17 -0
  163. package/addon/routes/connectivity/telematics/details/sensors.js +29 -0
  164. package/addon/routes/connectivity/telematics/{index/details.js → details.js} +1 -1
  165. package/addon/routes/connectivity/telematics/{index/edit.js → edit.js} +1 -1
  166. package/addon/routes/connectivity/telematics/new.js +3 -0
  167. package/addon/routes/management/drivers/index/details/activity.js +3 -0
  168. package/addon/routes/management/fuel-reports/index.js +2 -0
  169. package/addon/routes/management/fuel-transactions/index/details.js +18 -0
  170. package/addon/routes/management/fuel-transactions/index.js +21 -0
  171. package/addon/routes/management/fuel-transactions.js +3 -0
  172. package/addon/routes/management/issues/index/details.js +1 -1
  173. package/addon/routes.js +29 -9
  174. package/addon/services/contact-actions.js +231 -1
  175. package/addon/services/device-actions.js +64 -1
  176. package/addon/services/device-event-actions.js +12 -1
  177. package/addon/services/driver-actions.js +147 -11
  178. package/addon/services/fleet-actions.js +66 -1
  179. package/addon/services/fuel-integration-actions.js +31 -0
  180. package/addon/services/getting-started.js +44 -0
  181. package/addon/services/issue-actions.js +72 -1
  182. package/addon/services/leaflet-map-manager.js +2 -0
  183. package/addon/services/map-adapter/leaflet.js +19 -0
  184. package/addon/services/service-areas.js +3 -0
  185. package/addon/services/telematic-actions.js +9 -3
  186. package/addon/services/vehicle-actions.js +125 -0
  187. package/addon/styles/fleetops-engine.css +1313 -1
  188. package/addon/templates/analytics/reports/index.hbs +19 -1
  189. package/addon/templates/connectivity/devices/index.hbs +19 -1
  190. package/addon/templates/connectivity/events/index.hbs +16 -1
  191. package/addon/templates/connectivity/fuel-providers/details/index.hbs +38 -0
  192. package/addon/templates/connectivity/fuel-providers/details/matching.hbs +13 -0
  193. package/addon/templates/connectivity/fuel-providers/details/settings.hbs +11 -0
  194. package/addon/templates/connectivity/fuel-providers/details/sync.hbs +48 -0
  195. package/addon/templates/connectivity/fuel-providers/details/transactions.hbs +21 -0
  196. package/addon/templates/connectivity/fuel-providers/details.hbs +51 -0
  197. package/addon/templates/connectivity/fuel-providers/edit.hbs +24 -0
  198. package/addon/templates/connectivity/fuel-providers/index.hbs +12 -0
  199. package/addon/templates/connectivity/fuel-providers/new.hbs +22 -0
  200. package/addon/templates/connectivity/fuel-providers.hbs +1 -0
  201. package/addon/templates/connectivity/sensors/index.hbs +19 -1
  202. package/addon/templates/connectivity/telematics/details/attachments.hbs +163 -0
  203. package/addon/templates/connectivity/telematics/details/devices.hbs +88 -0
  204. package/addon/templates/connectivity/telematics/details/events.hbs +101 -0
  205. package/addon/templates/connectivity/telematics/{index/details → details}/index.hbs +0 -1
  206. package/addon/templates/connectivity/telematics/details/logs.hbs +69 -0
  207. package/addon/templates/connectivity/telematics/details/sensors.hbs +88 -0
  208. package/addon/templates/connectivity/telematics/details.hbs +53 -0
  209. package/addon/templates/connectivity/telematics/edit.hbs +27 -0
  210. package/addon/templates/connectivity/telematics/index.hbs +6 -8
  211. package/addon/templates/connectivity/telematics/new.hbs +24 -0
  212. package/addon/templates/maintenance/equipment/index.hbs +19 -1
  213. package/addon/templates/maintenance/maintenances/index.hbs +15 -1
  214. package/addon/templates/maintenance/parts/index.hbs +19 -1
  215. package/addon/templates/maintenance/schedules/index.hbs +19 -1
  216. package/addon/templates/maintenance/work-orders/index.hbs +19 -1
  217. package/addon/templates/management/contacts/customers/details.hbs +1 -1
  218. package/addon/templates/management/contacts/customers.hbs +15 -1
  219. package/addon/templates/management/contacts/index/details.hbs +1 -1
  220. package/addon/templates/management/contacts/index.hbs +19 -1
  221. package/addon/templates/management/contacts.hbs +2 -2
  222. package/addon/templates/management/drivers/index/details/activity.hbs +1 -0
  223. package/addon/templates/management/drivers/index.hbs +19 -1
  224. package/addon/templates/management/fleets/index.hbs +19 -1
  225. package/addon/templates/management/fuel-reports/index.hbs +19 -1
  226. package/addon/templates/management/fuel-transactions/index/details.hbs +73 -0
  227. package/addon/templates/management/fuel-transactions/index.hbs +58 -0
  228. package/addon/templates/management/fuel-transactions.hbs +1 -0
  229. package/addon/templates/management/issues/index/details/index.hbs +3 -1
  230. package/addon/templates/management/issues/index/details.hbs +3 -2
  231. package/addon/templates/management/issues/index.hbs +19 -1
  232. package/addon/templates/management/places/index.hbs +19 -1
  233. package/addon/templates/management/vehicles/index.hbs +19 -1
  234. package/addon/templates/management/vendors/index/details/personnel.hbs +1 -2
  235. package/addon/templates/management/vendors/index.hbs +19 -1
  236. package/addon/templates/management/vendors/integrated.hbs +13 -1
  237. package/addon/templates/operations/orders/index/details/index.hbs +2 -2
  238. package/addon/templates/operations/orders/index.hbs +20 -2
  239. package/addon/templates/operations/service-rates/index/edit.hbs +1 -0
  240. package/addon/templates/operations/service-rates/index/new.hbs +1 -0
  241. package/addon/templates/operations/service-rates/index.hbs +19 -1
  242. package/addon/templates/settings/payments/index.hbs +15 -1
  243. package/addon/templates/settings/payments/onboard.hbs +8 -8
  244. package/addon/utils/fleet-ops-options.js +3 -0
  245. package/addon/utils/leaflet-draw-namespace-guard.js +22 -0
  246. package/addon/utils/leaflet-plugin-loader.js +219 -0
  247. package/addon/utils/setup-customer-portal.js +4 -64
  248. package/app/components/cell/telematic-provider.js +1 -0
  249. package/app/components/cell/telematic-status.js +1 -0
  250. package/app/components/fuel-integration/form.js +1 -0
  251. package/app/components/fuel-integration/hub.js +1 -0
  252. package/app/components/fuel-integration/matching-priority.js +1 -0
  253. package/app/components/home/getting-started-guidance.js +1 -0
  254. package/app/components/issue/details/comments.js +1 -0
  255. package/app/components/issue/details/correspondence.js +1 -0
  256. package/app/components/issue/details/documents.js +1 -0
  257. package/app/components/issue/panel-header.js +1 -0
  258. package/app/components/modals/assigned-orders.js +1 -0
  259. package/app/components/modals/attach-telematic-device.js +1 -0
  260. package/app/components/modals/convert-customer-to-vendor.js +1 -0
  261. package/app/components/modals/fleet-assign-driver.js +1 -0
  262. package/app/components/modals/fleet-assign-vehicle.js +1 -0
  263. package/app/components/modals/issue-assign.js +1 -0
  264. package/app/components/modals/issue-close.js +1 -0
  265. package/app/components/modals/issue-status.js +1 -0
  266. package/app/components/modals/telematic-connection-diagnostics.js +1 -0
  267. package/app/components/order/card.js +1 -0
  268. package/app/components/telematic/hub.js +1 -0
  269. package/app/components/telematic/settings.js +1 -0
  270. package/app/components/telematic/tab-empty-state.js +1 -0
  271. package/app/components/vendor/personnel-manager.js +1 -0
  272. package/app/components/widget/fuel-providers.js +1 -0
  273. package/app/controllers/connectivity/fuel-providers/details/sync.js +1 -0
  274. package/app/controllers/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
  275. package/app/controllers/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
  276. package/app/controllers/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
  277. package/app/controllers/connectivity/{telematics/index/details → fuel-providers}/index.js +1 -1
  278. package/app/controllers/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
  279. package/app/controllers/connectivity/telematics/details/attachments.js +1 -0
  280. package/app/controllers/connectivity/telematics/details/devices.js +1 -0
  281. package/app/controllers/connectivity/telematics/details/events.js +1 -0
  282. package/app/controllers/connectivity/telematics/details/index.js +1 -0
  283. package/app/controllers/connectivity/telematics/details/logs.js +1 -0
  284. package/app/controllers/connectivity/telematics/details/sensors.js +1 -0
  285. package/app/controllers/connectivity/telematics/details.js +1 -0
  286. package/app/controllers/connectivity/telematics/edit.js +1 -0
  287. package/app/controllers/connectivity/telematics/new.js +1 -0
  288. package/app/controllers/management/fuel-transactions/index/details.js +1 -0
  289. package/app/controllers/management/fuel-transactions/index.js +1 -0
  290. package/app/helpers/format-duration.js +1 -1
  291. package/app/routes/connectivity/{telematics/index → fuel-providers}/details/index.js +1 -1
  292. package/app/routes/connectivity/{telematics/index/details/events.js → fuel-providers/details/matching.js} +1 -1
  293. package/app/routes/connectivity/fuel-providers/details/settings.js +1 -0
  294. package/app/routes/connectivity/fuel-providers/details/sync.js +1 -0
  295. package/app/routes/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
  296. package/app/routes/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
  297. package/app/routes/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
  298. package/app/routes/connectivity/fuel-providers/index.js +1 -0
  299. package/app/routes/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
  300. package/app/routes/connectivity/fuel-providers.js +1 -0
  301. package/app/routes/connectivity/telematics/details/attachments.js +1 -0
  302. package/app/routes/connectivity/telematics/details/devices.js +1 -0
  303. package/app/routes/connectivity/telematics/details/events.js +1 -0
  304. package/app/routes/connectivity/telematics/details/index.js +1 -0
  305. package/app/routes/connectivity/telematics/details/logs.js +1 -0
  306. package/app/routes/connectivity/telematics/details/sensors.js +1 -0
  307. package/app/routes/connectivity/telematics/details.js +1 -0
  308. package/app/routes/connectivity/telematics/edit.js +1 -0
  309. package/app/routes/connectivity/telematics/new.js +1 -0
  310. package/app/routes/management/drivers/index/details/activity.js +1 -0
  311. package/app/routes/management/fuel-transactions/index/details.js +1 -0
  312. package/app/routes/management/fuel-transactions/index.js +1 -0
  313. package/app/routes/management/fuel-transactions.js +1 -0
  314. package/app/services/fuel-integration-actions.js +1 -0
  315. package/app/services/getting-started.js +1 -0
  316. package/app/templates/connectivity/{telematics/index → fuel-providers}/details/index.js +1 -1
  317. package/app/templates/connectivity/{telematics/index/details/events.js → fuel-providers/details/matching.js} +1 -1
  318. package/app/templates/connectivity/fuel-providers/details/settings.js +1 -0
  319. package/app/templates/connectivity/fuel-providers/details/sync.js +1 -0
  320. package/app/templates/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
  321. package/app/templates/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
  322. package/app/templates/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
  323. package/app/templates/connectivity/fuel-providers/index.js +1 -0
  324. package/app/templates/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
  325. package/app/templates/connectivity/fuel-providers.js +1 -0
  326. package/app/templates/connectivity/telematics/details/attachments.js +1 -0
  327. package/app/templates/connectivity/telematics/details/devices.js +1 -0
  328. package/app/templates/connectivity/telematics/details/events.js +1 -0
  329. package/app/templates/connectivity/telematics/details/index.js +1 -0
  330. package/app/templates/connectivity/telematics/details/logs.js +1 -0
  331. package/app/templates/connectivity/telematics/details/sensors.js +1 -0
  332. package/app/templates/connectivity/telematics/details.js +1 -0
  333. package/app/templates/connectivity/telematics/edit.js +1 -0
  334. package/app/templates/connectivity/telematics/new.js +1 -0
  335. package/app/templates/management/drivers/index/details/activity.js +1 -0
  336. package/app/templates/management/fuel-transactions/index/details.js +1 -0
  337. package/app/templates/management/fuel-transactions/index.js +1 -0
  338. package/app/templates/management/fuel-transactions.js +1 -0
  339. package/app/utils/leaflet-draw-namespace-guard.js +1 -0
  340. package/app/utils/leaflet-plugin-loader.js +1 -0
  341. package/assets/images/telematics/providers/afaqy.webp +0 -0
  342. package/assets/images/telematics/providers/default.webp +0 -0
  343. package/assets/images/telematics/providers/flespi.webp +0 -0
  344. package/assets/images/telematics/providers/geotab.webp +0 -0
  345. package/assets/images/telematics/providers/safee.webp +0 -0
  346. package/assets/images/telematics/providers/samsara.webp +0 -0
  347. package/composer.json +1 -1
  348. package/extension.json +1 -1
  349. package/package.json +5 -5
  350. package/server/config/fuel-providers.php +42 -0
  351. package/server/config/telematics.php +139 -130
  352. package/server/migrations/2026_05_31_000001_add_portal_fields_to_vendor_personnels_table.php +30 -0
  353. package/server/migrations/2026_06_03_000000_ensure_tags_column_on_issues_table.php +31 -0
  354. package/server/migrations/2026_06_03_000001_add_order_uuid_to_issues_table.php +25 -0
  355. package/server/migrations/2026_06_04_000001_backfill_order_transaction_subjects.php +39 -0
  356. package/server/migrations/2026_06_04_000002_backfill_order_transaction_directions.php +24 -0
  357. package/server/migrations/2026_06_06_000001_harden_device_events_telematics_contract.php +59 -0
  358. package/server/migrations/2026_06_08_000001_create_fuel_provider_connections_table.php +37 -0
  359. package/server/migrations/2026_06_08_000002_create_fuel_provider_transactions_table.php +53 -0
  360. package/server/migrations/2026_06_08_000003_create_fuel_provider_sync_runs_table.php +40 -0
  361. package/server/migrations/2026_06_10_000001_add_fuel_card_number_to_vehicles_table.php +25 -0
  362. package/server/migrations/2026_06_10_000002_add_vehicle_identity_columns_to_fuel_provider_transactions_table.php +39 -0
  363. package/server/resources/views/mail/customer-credentials.blade.php +16 -13
  364. package/server/src/Contracts/FuelProvider.php +30 -0
  365. package/server/src/Contracts/TelematicProviderDescriptor.php +3 -1
  366. package/server/src/Events/FuelProviderTransactionImported.php +17 -0
  367. package/server/src/Events/FuelProviderTransactionMatched.php +17 -0
  368. package/server/src/Events/FuelProviderTransactionUnmatched.php +17 -0
  369. package/server/src/Events/FuelReportCreatedFromProvider.php +18 -0
  370. package/server/src/Expansions/UserFilterExpansion.php +28 -0
  371. package/server/src/Http/Controllers/Api/v1/IssueController.php +2 -0
  372. package/server/src/Http/Controllers/Api/v1/OrderController.php +26 -25
  373. package/server/src/Http/Controllers/Api/v1/PlaceController.php +10 -58
  374. package/server/src/Http/Controllers/Internal/v1/AnalyticsController.php +6 -0
  375. package/server/src/Http/Controllers/Internal/v1/ContactController.php +135 -0
  376. package/server/src/Http/Controllers/Internal/v1/CustomerController.php +116 -6
  377. package/server/src/Http/Controllers/Internal/v1/DeviceController.php +76 -2
  378. package/server/src/Http/Controllers/Internal/v1/DeviceEventController.php +44 -0
  379. package/server/src/Http/Controllers/Internal/v1/DriverController.php +158 -7
  380. package/server/src/Http/Controllers/Internal/v1/FuelProviderConnectionController.php +124 -0
  381. package/server/src/Http/Controllers/Internal/v1/FuelProviderSyncRunController.php +10 -0
  382. package/server/src/Http/Controllers/Internal/v1/FuelProviderTransactionController.php +76 -0
  383. package/server/src/Http/Controllers/Internal/v1/GettingStartedController.php +17 -0
  384. package/server/src/Http/Controllers/Internal/v1/IssueController.php +251 -0
  385. package/server/src/Http/Controllers/Internal/v1/OrderController.php +172 -97
  386. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +10 -68
  387. package/server/src/Http/Controllers/Internal/v1/SensorController.php +1 -1
  388. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +178 -15
  389. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +165 -0
  390. package/server/src/Http/Controllers/Internal/v1/VendorController.php +89 -0
  391. package/server/src/Http/Controllers/TelematicWebhookController.php +103 -19
  392. package/server/src/Http/Filter/FuelProviderConnectionFilter.php +33 -0
  393. package/server/src/Http/Filter/FuelProviderSyncRunFilter.php +28 -0
  394. package/server/src/Http/Filter/FuelProviderTransactionFilter.php +59 -0
  395. package/server/src/Http/Filter/FuelReportFilter.php +10 -0
  396. package/server/src/Http/Requests/CreateIssueRequest.php +4 -0
  397. package/server/src/Http/Requests/UpdateIssueRequest.php +4 -0
  398. package/server/src/Http/Resources/v1/Driver.php +15 -0
  399. package/server/src/Http/Resources/v1/FuelProviderConnection.php +30 -0
  400. package/server/src/Http/Resources/v1/FuelProviderSyncRun.php +36 -0
  401. package/server/src/Http/Resources/v1/FuelProviderTransaction.php +54 -0
  402. package/server/src/Http/Resources/v1/FuelReport.php +28 -22
  403. package/server/src/Http/Resources/v1/Index/Driver.php +26 -20
  404. package/server/src/Http/Resources/v1/Index/Order.php +12 -9
  405. package/server/src/Http/Resources/v1/Index/Vehicle.php +29 -22
  406. package/server/src/Http/Resources/v1/Issue.php +25 -0
  407. package/server/src/Http/Resources/v1/Order.php +20 -18
  408. package/server/src/Http/Resources/v1/Vehicle.php +17 -0
  409. package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +2 -0
  410. package/server/src/Jobs/SyncFuelProviderTransactionsJob.php +57 -0
  411. package/server/src/Jobs/SyncTelematicDevicesJob.php +36 -6
  412. package/server/src/Jobs/TestTelematicConnectionJob.php +9 -22
  413. package/server/src/Mail/CustomerCredentialsMail.php +5 -6
  414. package/server/src/Models/Asset.php +2 -1
  415. package/server/src/Models/Contact.php +32 -52
  416. package/server/src/Models/Device.php +27 -4
  417. package/server/src/Models/DeviceEvent.php +40 -3
  418. package/server/src/Models/Driver.php +2 -1
  419. package/server/src/Models/Equipment.php +2 -1
  420. package/server/src/Models/Fleet.php +2 -1
  421. package/server/src/Models/FuelProviderConnection.php +60 -0
  422. package/server/src/Models/FuelProviderSyncRun.php +58 -0
  423. package/server/src/Models/FuelProviderTransaction.php +119 -0
  424. package/server/src/Models/FuelReport.php +16 -1
  425. package/server/src/Models/Issue.php +47 -6
  426. package/server/src/Models/Order.php +33 -6
  427. package/server/src/Models/Part.php +2 -1
  428. package/server/src/Models/Sensor.php +21 -4
  429. package/server/src/Models/ServiceArea.php +1 -1
  430. package/server/src/Models/ServiceRate.php +39 -2
  431. package/server/src/Models/Vehicle.php +14 -2
  432. package/server/src/Models/Vendor.php +2 -1
  433. package/server/src/Models/VendorPersonnel.php +10 -1
  434. package/server/src/Models/Zone.php +1 -1
  435. package/server/src/Observers/PurchaseRateObserver.php +20 -0
  436. package/server/src/Observers/ZoneObserver.php +56 -0
  437. package/server/src/Providers/FleetOpsServiceProvider.php +11 -0
  438. package/server/src/Support/Analytics/FuelProviderSummary.php +42 -0
  439. package/server/src/Support/Analytics/TopDrivers.php +9 -1
  440. package/server/src/Support/FuelProviders/FuelProviderDescriptor.php +55 -0
  441. package/server/src/Support/FuelProviders/FuelProviderRegistry.php +75 -0
  442. package/server/src/Support/FuelProviders/FuelProviderService.php +447 -0
  443. package/server/src/Support/FuelProviders/Providers/AbstractFuelProvider.php +98 -0
  444. package/server/src/Support/FuelProviders/Providers/PetroAppFuelProvider.php +167 -0
  445. package/server/src/Support/GettingStarted.php +144 -0
  446. package/server/src/Support/PlaceSearch.php +282 -0
  447. package/server/src/Support/ResolvesOrderServiceStops.php +22 -12
  448. package/server/src/Support/Telematics/Providers/AbstractProvider.php +27 -6
  449. package/server/src/Support/Telematics/Providers/AfaqyProvider.php +55 -26
  450. package/server/src/Support/Telematics/Providers/FlespiProvider.php +1 -0
  451. package/server/src/Support/Telematics/Providers/GeotabProvider.php +1 -0
  452. package/server/src/Support/Telematics/Providers/SafeeProvider.php +32 -22
  453. package/server/src/Support/Telematics/Providers/SamsaraProvider.php +3 -1
  454. package/server/src/Support/Telematics/TelematicService.php +340 -21
  455. package/server/src/routes.php +74 -5
  456. package/server/tests/AnalyticsRoutesTest.php +8 -0
  457. package/server/tests/CustomerContactIdentitySafetyTest.php +41 -0
  458. package/server/tests/DriverVehicleStatusDefaultTest.php +2 -2
  459. package/server/tests/FuelProviderRegistryTest.php +416 -0
  460. package/server/tests/GettingStartedStatusTest.php +21 -0
  461. package/server/tests/OrderActivityFlowRegressionTest.php +116 -0
  462. package/server/tests/ServiceAreaZoneApiShapeTest.php +44 -0
  463. package/server/tests/ServiceRateAlgorithmWeightVariablesTest.php +44 -0
  464. package/server/tests/TelematicsHardeningTest.php +268 -0
  465. package/server/tests/VehicleDriverAssignmentTest.php +51 -0
  466. package/translations/ar-ae.yml +31 -0
  467. package/translations/bg-bg.yaml +81 -0
  468. package/translations/en-us.yaml +94 -0
  469. package/translations/es-pa.yaml +81 -0
  470. package/translations/fr-fr.yaml +81 -0
  471. package/translations/mn-mn.yaml +81 -0
  472. package/translations/pt-br.yaml +81 -0
  473. package/translations/ru-ru.yaml +81 -0
  474. package/translations/vi-vn.yaml +106 -0
  475. package/addon/controllers/connectivity/telematics/index/details/devices.js +0 -3
  476. package/addon/controllers/connectivity/telematics/index/details/events.js +0 -3
  477. package/addon/controllers/connectivity/telematics/index/details/index.js +0 -3
  478. package/addon/controllers/connectivity/telematics/index/details/sensors.js +0 -3
  479. package/addon/controllers/connectivity/telematics/index/details.js +0 -24
  480. package/addon/routes/connectivity/telematics/index/details/devices.js +0 -3
  481. package/addon/routes/connectivity/telematics/index/details/events.js +0 -3
  482. package/addon/routes/connectivity/telematics/index/details/index.js +0 -3
  483. package/addon/routes/connectivity/telematics/index/details/sensors.js +0 -3
  484. package/addon/routes/connectivity/telematics/index/new.js +0 -3
  485. package/addon/templates/connectivity/telematics/index/details/devices.hbs +0 -1
  486. package/addon/templates/connectivity/telematics/index/details/events.hbs +0 -1
  487. package/addon/templates/connectivity/telematics/index/details/sensors.hbs +0 -1
  488. package/addon/templates/connectivity/telematics/index/details.hbs +0 -14
  489. package/addon/templates/connectivity/telematics/index/edit.hbs +0 -12
  490. package/addon/templates/connectivity/telematics/index/new.hbs +0 -12
  491. package/app/controllers/connectivity/telematics/index/details/events.js +0 -1
  492. package/app/controllers/connectivity/telematics/index/details/sensors.js +0 -1
  493. package/app/routes/connectivity/telematics/index/details/sensors.js +0 -1
  494. package/app/templates/connectivity/telematics/index/details/sensors.js +0 -1
@@ -114,7 +114,7 @@ body[data-theme='dark'] .next-table-wrapper.order-view-purchase-rate-table-wrapp
114
114
 
115
115
  nav.next-sidebar {
116
116
  height: 100%;
117
- overflow-y: scroll;
117
+ overflow: hidden;
118
118
  }
119
119
 
120
120
  /** places management css mods */
@@ -161,6 +161,154 @@ body.fleetbase-console .next-content-overlay > .next-content-overlay-panel-conta
161
161
  flex-shrink: 0;
162
162
  }
163
163
 
164
+ .fleetops-connectivity-kpi-tile {
165
+ transition:
166
+ transform 160ms ease-out,
167
+ box-shadow 160ms ease-out,
168
+ border-color 160ms ease-out;
169
+ }
170
+
171
+ .fleetops-connectivity-kpi-tile:hover {
172
+ box-shadow: 0 8px 24px -12px rgb(15 23 42 / 35%);
173
+ }
174
+
175
+ .fleetops-connectivity-kpi-tile .fleetops-connectivity-kpi-icon {
176
+ color: #64748b;
177
+ background-color: rgb(100 116 139 / 12%);
178
+ }
179
+
180
+ .fleetops-connectivity-kpi-accent-blue {
181
+ border-color: rgb(59 130 246 / 28%);
182
+ background-image: linear-gradient(135deg, rgb(59 130 246 / 10%) 0%, rgb(59 130 246 / 0%) 62%);
183
+ }
184
+
185
+ .fleetops-connectivity-kpi-accent-green {
186
+ border-color: rgb(16 185 129 / 28%);
187
+ background-image: linear-gradient(135deg, rgb(16 185 129 / 10%) 0%, rgb(16 185 129 / 0%) 62%);
188
+ }
189
+
190
+ .fleetops-connectivity-kpi-accent-amber {
191
+ border-color: rgb(245 158 11 / 32%);
192
+ background-image: linear-gradient(135deg, rgb(245 158 11 / 12%) 0%, rgb(245 158 11 / 0%) 62%);
193
+ }
194
+
195
+ .fleetops-connectivity-kpi-accent-rose {
196
+ border-color: rgb(244 63 94 / 28%);
197
+ background-image: linear-gradient(135deg, rgb(244 63 94 / 10%) 0%, rgb(244 63 94 / 0%) 62%);
198
+ }
199
+
200
+ .fleetops-connectivity-kpi-accent-blue .fleetops-connectivity-kpi-icon {
201
+ color: rgb(37 99 235);
202
+ background-color: rgb(59 130 246 / 12%);
203
+ }
204
+
205
+ .fleetops-connectivity-kpi-accent-green .fleetops-connectivity-kpi-icon {
206
+ color: rgb(5 150 105);
207
+ background-color: rgb(16 185 129 / 12%);
208
+ }
209
+
210
+ .fleetops-connectivity-kpi-accent-amber .fleetops-connectivity-kpi-icon {
211
+ color: rgb(217 119 6);
212
+ background-color: rgb(245 158 11 / 14%);
213
+ }
214
+
215
+ .fleetops-connectivity-kpi-accent-rose .fleetops-connectivity-kpi-icon {
216
+ color: rgb(225 29 72);
217
+ background-color: rgb(244 63 94 / 12%);
218
+ }
219
+
220
+ body[data-theme='dark'] .fleetops-connectivity-kpi-accent-blue .fleetops-connectivity-kpi-icon {
221
+ color: rgb(147 197 253);
222
+ }
223
+
224
+ body[data-theme='dark'] .fleetops-connectivity-kpi-accent-green .fleetops-connectivity-kpi-icon {
225
+ color: rgb(110 231 183);
226
+ }
227
+
228
+ body[data-theme='dark'] .fleetops-connectivity-kpi-accent-amber .fleetops-connectivity-kpi-icon {
229
+ color: rgb(252 211 77);
230
+ }
231
+
232
+ body[data-theme='dark'] .fleetops-connectivity-kpi-accent-rose .fleetops-connectivity-kpi-icon {
233
+ color: rgb(251 113 133);
234
+ }
235
+
236
+ .fleetops-provider-connections-actions .fleetops-provider-connections-search {
237
+ min-width: 16rem;
238
+ height: 2.25rem;
239
+ min-height: 2.25rem;
240
+ }
241
+
242
+ .fleetops-provider-connections-header {
243
+ display: grid;
244
+ grid-template-columns: minmax(0, 1fr);
245
+ gap: 0.75rem;
246
+ }
247
+
248
+ @media (width >= 1024px) {
249
+ .fleetops-provider-connections-header {
250
+ grid-template-columns: minmax(0, 26rem) minmax(22rem, max-content);
251
+ align-items: start;
252
+ justify-content: space-between;
253
+ }
254
+ }
255
+
256
+ .fleetops-provider-connections-actions .fleetops-provider-connections-action-button,
257
+ .fleetops-provider-connections-actions .fleetops-telematics-action-button,
258
+ .fleetops-provider-connections-actions button {
259
+ flex-shrink: 0;
260
+ height: 2.25rem;
261
+ min-height: 2.25rem;
262
+ white-space: nowrap;
263
+ }
264
+
265
+ .fleetops-provider-connections-actions button span {
266
+ white-space: nowrap;
267
+ }
268
+
269
+ .status-badge.long-offline-status-badge > span,
270
+ .status-badge.long_offline-status-badge > span {
271
+ @apply bg-yellow-800 border-yellow-700 text-yellow-100;
272
+ }
273
+
274
+ .status-badge.long-offline-status-badge > span svg,
275
+ .status-badge.long_offline-status-badge > span svg {
276
+ @apply text-yellow-300;
277
+ }
278
+
279
+ .fleetops-provider-connections-panel .table-wrapper table tbody tr td,
280
+ .fleetops-provider-connections-panel .next-table-wrapper table tbody tr td {
281
+ vertical-align: top;
282
+ }
283
+
284
+ .fleetops-provider-connections-panel .table-wrapper table tbody tr td.fleetops-provider-connections-cell-middle,
285
+ .fleetops-provider-connections-panel .next-table-wrapper table tbody tr td.fleetops-provider-connections-cell-middle {
286
+ vertical-align: middle;
287
+ }
288
+
289
+ body[data-theme='dark'] .fleetops-provider-connections-panel .table-wrapper.table-fluid,
290
+ body[data-theme='dark'] .fleetops-provider-connections-panel .table-wrapper.table-fluid table,
291
+ body[data-theme='dark'] .fleetops-provider-connections-panel .table-wrapper.table-fluid table tbody,
292
+ body[data-theme='dark'] .fleetops-provider-connections-panel .table-wrapper.table-fluid table tbody tr,
293
+ body[data-theme='dark'] .fleetops-provider-connections-panel .table-wrapper.table-fluid table tbody tr td,
294
+ body[data-theme='dark'] .fleetops-provider-connections-panel .next-table-wrapper,
295
+ body[data-theme='dark'] .fleetops-provider-connections-panel .next-table-wrapper table,
296
+ body[data-theme='dark'] .fleetops-provider-connections-panel .next-table-wrapper table tbody,
297
+ body[data-theme='dark'] .fleetops-provider-connections-panel .next-table-wrapper table tbody tr,
298
+ body[data-theme='dark'] .fleetops-provider-connections-panel .next-table-wrapper table tbody tr td {
299
+ background-color: rgb(17 24 39);
300
+ }
301
+
302
+ body[data-theme='dark'] .fleetops-provider-connections-panel .table-wrapper.table-fluid table tbody tr:nth-child(even):not(.is-selected) td,
303
+ body[data-theme='dark'] .fleetops-provider-connections-panel .next-table-wrapper table tbody tr:nth-child(even):not(.is-selected) td {
304
+ background-color: rgb(17 24 39);
305
+ }
306
+
307
+ .fleetops-provider-connections-panel div.has-floating-pagination,
308
+ .fleetops-provider-connections-panel .next-table-wrapper.has-floating-pagination {
309
+ padding-bottom: 0;
310
+ }
311
+
164
312
  /** calendar event css mods */
165
313
 
166
314
  #fleet-ops-scheduler-calendar .fc-h-event .fc-event-main .fc-event-title {
@@ -4914,3 +5062,1167 @@ body[data-theme='dark'] .next-google-container-map .fleetops-google-draw-actions
4914
5062
  .overflow-y-scroll-i {
4915
5063
  overflow-y: scroll !important;
4916
5064
  }
5065
+
5066
+ .fleet-ops-home-guidance-grid {
5067
+ display: grid;
5068
+ grid-template-columns: repeat(2, minmax(0, 1fr));
5069
+ gap: 1rem;
5070
+ }
5071
+
5072
+ .fleet-ops-get-started-content {
5073
+ min-height: 256px;
5074
+ }
5075
+
5076
+ .fleet-ops-get-started .fleet-ops-get-started-step {
5077
+ min-height: 52px;
5078
+ }
5079
+
5080
+ .fleet-ops-recommended-features-loading {
5081
+ min-height: 256px;
5082
+ }
5083
+
5084
+ .fleet-ops-recommended-feature {
5085
+ min-height: 92px;
5086
+ }
5087
+
5088
+ @media (width <= 1180px) {
5089
+ .fleet-ops-home-guidance-grid {
5090
+ grid-template-columns: 1fr;
5091
+ }
5092
+ }
5093
+
5094
+ .fleet-ops-recommended-feature-icon {
5095
+ background: rgba(37, 99, 235, 0.12);
5096
+ color: #2563eb;
5097
+ }
5098
+
5099
+ .fleet-ops-recommended-feature.feature-accent-green .fleet-ops-recommended-feature-icon {
5100
+ background: rgba(16, 185, 129, 0.12);
5101
+ color: #059669;
5102
+ }
5103
+
5104
+ .fleet-ops-recommended-feature.feature-accent-amber .fleet-ops-recommended-feature-icon {
5105
+ background: rgba(245, 158, 11, 0.14);
5106
+ color: #d97706;
5107
+ }
5108
+
5109
+ .fleet-ops-recommended-feature.feature-accent-purple .fleet-ops-recommended-feature-icon {
5110
+ background: rgba(124, 58, 237, 0.12);
5111
+ color: #7c3aed;
5112
+ }
5113
+
5114
+ [data-theme='dark'] .fleet-ops-recommended-feature-icon {
5115
+ background: rgba(96, 165, 250, 0.16);
5116
+ color: #93c5fd;
5117
+ }
5118
+
5119
+ [data-theme='dark'] .fleet-ops-recommended-feature.feature-accent-green .fleet-ops-recommended-feature-icon {
5120
+ background: rgba(52, 211, 153, 0.14);
5121
+ color: #6ee7b7;
5122
+ }
5123
+
5124
+ [data-theme='dark'] .fleet-ops-recommended-feature.feature-accent-amber .fleet-ops-recommended-feature-icon {
5125
+ background: rgba(251, 191, 36, 0.14);
5126
+ color: #fcd34d;
5127
+ }
5128
+
5129
+ [data-theme='dark'] .fleet-ops-recommended-feature.feature-accent-purple .fleet-ops-recommended-feature-icon {
5130
+ background: rgba(167, 139, 250, 0.14);
5131
+ color: #c4b5fd;
5132
+ }
5133
+
5134
+ .issue-panel-header {
5135
+ display: flex;
5136
+ align-items: flex-start;
5137
+ justify-content: space-between;
5138
+ gap: 1rem;
5139
+ background: #fff;
5140
+ padding: 0.75rem 1rem;
5141
+ }
5142
+
5143
+ .issue-panel-header-main {
5144
+ display: flex;
5145
+ flex: 1 1 0%;
5146
+ align-items: flex-start;
5147
+ gap: 0.75rem;
5148
+ min-width: 0;
5149
+ }
5150
+
5151
+ .issue-panel-header-icon {
5152
+ display: flex;
5153
+ flex-shrink: 0;
5154
+ align-items: center;
5155
+ justify-content: center;
5156
+ width: 2rem;
5157
+ height: 2rem;
5158
+ color: #d97706;
5159
+ font-size: 0.875rem;
5160
+ background: #fffbeb;
5161
+ border: 1px solid #fcd34d;
5162
+ border-radius: 0.375rem;
5163
+ box-shadow: 0 1px 2px rgb(0 0 0 / 5%);
5164
+ }
5165
+
5166
+ .issue-panel-header-content {
5167
+ flex: 1 1 0%;
5168
+ min-width: 0;
5169
+ }
5170
+
5171
+ .issue-panel-header-title-row {
5172
+ display: flex;
5173
+ flex-direction: row;
5174
+ align-items: flex-start;
5175
+ gap: 0.5rem;
5176
+ min-width: 0;
5177
+ }
5178
+
5179
+ .issue-panel-header-title {
5180
+ overflow: hidden;
5181
+ color: #111827;
5182
+ font-weight: 600;
5183
+ font-size: 1rem;
5184
+ line-height: 1.5rem;
5185
+ text-overflow: ellipsis;
5186
+ white-space: nowrap;
5187
+ }
5188
+
5189
+ .issue-panel-header-id {
5190
+ display: inline-flex;
5191
+ align-items: center;
5192
+ gap: 0.25rem;
5193
+ flex-shrink: 0;
5194
+ padding: 0.125rem 0.5rem;
5195
+ margin-top: 0.25rem;
5196
+ color: #6b7280;
5197
+ font-weight: 600;
5198
+ font-size: 0.75rem;
5199
+ background: #f9fafb;
5200
+ border: 1px solid #e5e7eb;
5201
+ border-radius: 9999px;
5202
+ }
5203
+
5204
+ .issue-panel-header-id:hover {
5205
+ color: #2563eb;
5206
+ }
5207
+
5208
+ .issue-panel-header-meta {
5209
+ display: flex;
5210
+ flex-flow: row wrap;
5211
+ align-items: center;
5212
+ gap: 0.25rem 0.75rem;
5213
+ margin-top: 0.25rem;
5214
+ color: #6b7280;
5215
+ font-size: 0.75rem;
5216
+ }
5217
+
5218
+ .issue-panel-header-actions {
5219
+ display: flex;
5220
+ flex-shrink: 0;
5221
+ flex-direction: row;
5222
+ align-items: flex-start;
5223
+ gap: 0.5rem;
5224
+ }
5225
+
5226
+ .issue-panel-header-badges {
5227
+ display: flex;
5228
+ flex-direction: row;
5229
+ align-items: flex-start;
5230
+ gap: 0.375rem;
5231
+ }
5232
+
5233
+ .issue-detail-surface {
5234
+ padding: 1rem;
5235
+ }
5236
+
5237
+ .issue-detail-grid {
5238
+ display: grid;
5239
+ grid-template-columns: minmax(0, 1fr);
5240
+ gap: 1rem;
5241
+ }
5242
+
5243
+ .issue-detail-main {
5244
+ min-width: 0;
5245
+ }
5246
+
5247
+ .issue-detail-main > * + * {
5248
+ margin-top: 1rem;
5249
+ }
5250
+
5251
+ .issue-detail-side-rail {
5252
+ min-width: 0;
5253
+ }
5254
+
5255
+ .issue-detail-side-rail > * + * {
5256
+ margin-top: 0.75rem;
5257
+ }
5258
+
5259
+ .issue-detail-message,
5260
+ .issue-detail-correspondence,
5261
+ .issue-detail-summary-card,
5262
+ .issue-detail-side-card {
5263
+ background: #fff;
5264
+ border: 1px solid #e5e7eb;
5265
+ border-radius: 0.5rem;
5266
+ box-shadow:
5267
+ 0 4px 6px -1px rgb(0 0 0 / 10%),
5268
+ 0 2px 4px -2px rgb(0 0 0 / 10%);
5269
+ }
5270
+
5271
+ .issue-detail-summary-card {
5272
+ padding: 0.875rem 1rem;
5273
+ margin-bottom: 1rem;
5274
+ }
5275
+
5276
+ .issue-detail-summary-grid {
5277
+ display: grid;
5278
+ grid-template-columns: repeat(1, minmax(0, 1fr));
5279
+ gap: 0.625rem 1rem;
5280
+ margin: 0;
5281
+ }
5282
+
5283
+ .issue-detail-summary-item {
5284
+ min-width: 0;
5285
+ overflow: hidden;
5286
+ }
5287
+
5288
+ .issue-detail-summary-item dt {
5289
+ margin-bottom: 0.25rem;
5290
+ color: #6b7280;
5291
+ font-weight: 700;
5292
+ font-size: 0.6875rem;
5293
+ letter-spacing: 0.025em;
5294
+ text-transform: uppercase;
5295
+ }
5296
+
5297
+ .issue-detail-summary-item dd {
5298
+ min-width: 0;
5299
+ margin: 0;
5300
+ overflow: hidden;
5301
+ color: #1f2937;
5302
+ font-size: 0.8125rem;
5303
+ text-overflow: ellipsis;
5304
+ white-space: nowrap;
5305
+ }
5306
+
5307
+ .issue-detail-summary-item dd > * {
5308
+ max-width: 100%;
5309
+ min-width: 0;
5310
+ }
5311
+
5312
+ .issue-detail-inline-link {
5313
+ max-width: 100%;
5314
+ overflow: hidden;
5315
+ color: #2563eb;
5316
+ font-weight: 600;
5317
+ text-align: left;
5318
+ text-overflow: ellipsis;
5319
+ text-decoration: underline;
5320
+ text-underline-offset: 2px;
5321
+ white-space: nowrap;
5322
+ }
5323
+
5324
+ .issue-detail-message {
5325
+ display: flex;
5326
+ gap: 0.75rem;
5327
+ padding: 1rem;
5328
+ border-radius: 0.75rem;
5329
+ }
5330
+
5331
+ .issue-detail-avatar {
5332
+ display: flex;
5333
+ flex-shrink: 0;
5334
+ align-items: center;
5335
+ justify-content: center;
5336
+ width: 2.5rem;
5337
+ height: 2.5rem;
5338
+ color: #1d4ed8;
5339
+ font-weight: 700;
5340
+ font-size: 0.875rem;
5341
+ background: #dbeafe;
5342
+ border-radius: 9999px;
5343
+ box-shadow: 0 1px 2px rgb(0 0 0 / 5%);
5344
+ }
5345
+
5346
+ .issue-detail-message-content {
5347
+ flex: 1 1 0%;
5348
+ min-width: 0;
5349
+ }
5350
+
5351
+ .issue-detail-message-meta {
5352
+ display: flex;
5353
+ flex-direction: row;
5354
+ align-items: flex-start;
5355
+ justify-content: space-between;
5356
+ gap: 0.75rem;
5357
+ margin-bottom: 0.75rem;
5358
+ }
5359
+
5360
+ .issue-detail-message-author {
5361
+ color: #111827;
5362
+ font-weight: 600;
5363
+ font-size: 0.875rem;
5364
+ }
5365
+
5366
+ .issue-detail-message-subtitle,
5367
+ .issue-detail-message-meta time,
5368
+ .issue-detail-section-header p {
5369
+ color: #6b7280;
5370
+ font-size: 0.75rem;
5371
+ }
5372
+
5373
+ .issue-detail-report {
5374
+ padding: 0.75rem;
5375
+ color: #1f2937;
5376
+ font-size: 0.8125rem;
5377
+ line-height: 1.375rem;
5378
+ white-space: pre-line;
5379
+ background: #f9fafb;
5380
+ border: 1px solid #f3f4f6;
5381
+ border-radius: 0.75rem;
5382
+ }
5383
+
5384
+ .issue-detail-documents {
5385
+ padding-top: 0.75rem;
5386
+ margin-top: 1rem;
5387
+ border-top: 1px solid #f3f4f6;
5388
+ }
5389
+
5390
+ .issue-detail-documents-header {
5391
+ display: flex;
5392
+ flex-direction: row;
5393
+ align-items: center;
5394
+ justify-content: space-between;
5395
+ gap: 0.75rem;
5396
+ margin-bottom: 0.75rem;
5397
+ }
5398
+
5399
+ .issue-detail-documents-title,
5400
+ .issue-detail-section-title {
5401
+ color: #4b5563;
5402
+ font-weight: 700;
5403
+ font-size: 0.75rem;
5404
+ letter-spacing: 0.025em;
5405
+ text-transform: uppercase;
5406
+ }
5407
+
5408
+ .issue-detail-documents-title {
5409
+ display: flex;
5410
+ align-items: center;
5411
+ gap: 0.5rem;
5412
+ }
5413
+
5414
+ .issue-detail-file-grid {
5415
+ display: grid;
5416
+ grid-template-columns: repeat(2, minmax(0, 1fr));
5417
+ gap: 0.5rem;
5418
+ }
5419
+
5420
+ .issue-detail-dropzone {
5421
+ display: flex;
5422
+ align-items: center;
5423
+ justify-content: center;
5424
+ min-height: 8rem;
5425
+ padding: 1rem;
5426
+ color: #4b5563;
5427
+ text-align: center;
5428
+ background: #f9fafb;
5429
+ border: 1px dashed #d1d5db;
5430
+ border-radius: 0.75rem;
5431
+ }
5432
+
5433
+ .issue-detail-dropzone-empty,
5434
+ .issue-detail-dropzone-ready {
5435
+ display: flex;
5436
+ flex-direction: column;
5437
+ align-items: center;
5438
+ gap: 0.5rem;
5439
+ }
5440
+
5441
+ .issue-detail-dropzone-empty svg,
5442
+ .issue-detail-dropzone-ready svg {
5443
+ color: #6b7280;
5444
+ font-size: 1.25rem;
5445
+ }
5446
+
5447
+ .issue-detail-upload-link {
5448
+ color: #2563eb;
5449
+ font-weight: 600;
5450
+ text-decoration: underline;
5451
+ text-underline-offset: 2px;
5452
+ }
5453
+
5454
+ .issue-detail-dropzone-progress {
5455
+ color: #2563eb;
5456
+ font-weight: 700;
5457
+ font-size: 0.75rem;
5458
+ }
5459
+
5460
+ .issue-detail-upload-queue {
5461
+ margin-bottom: 0.75rem;
5462
+ }
5463
+
5464
+ .issue-detail-upload-queue > * + * {
5465
+ margin-top: 0.5rem;
5466
+ }
5467
+
5468
+ .issue-detail-upload-row {
5469
+ display: flex;
5470
+ align-items: center;
5471
+ justify-content: space-between;
5472
+ padding: 0.5rem 0.75rem;
5473
+ color: #1e3a8a;
5474
+ font-size: 0.75rem;
5475
+ background: #eff6ff;
5476
+ border: 1px solid #bfdbfe;
5477
+ border-radius: 0.375rem;
5478
+ }
5479
+
5480
+ .issue-detail-correspondence {
5481
+ padding: 1rem;
5482
+ }
5483
+
5484
+ .issue-detail-section-header {
5485
+ display: flex;
5486
+ align-items: flex-start;
5487
+ justify-content: space-between;
5488
+ margin-bottom: 0.75rem;
5489
+ }
5490
+
5491
+ .issue-detail-comment-thread {
5492
+ font-size: 0.875rem;
5493
+ }
5494
+
5495
+ .issue-detail-side-card {
5496
+ padding: 0.75rem;
5497
+ }
5498
+
5499
+ .issue-detail-resolution-state {
5500
+ display: flex;
5501
+ gap: 0.75rem;
5502
+ padding: 0.75rem;
5503
+ margin-top: 0.75rem;
5504
+ background: #fffbeb;
5505
+ border: 1px solid #fde68a;
5506
+ border-radius: 0.5rem;
5507
+ }
5508
+
5509
+ .issue-detail-resolution-state.is-resolved {
5510
+ background: #f0fdf4;
5511
+ border-color: #bbf7d0;
5512
+ }
5513
+
5514
+ .issue-detail-resolution-icon {
5515
+ display: flex;
5516
+ flex-shrink: 0;
5517
+ align-items: center;
5518
+ justify-content: center;
5519
+ width: 2rem;
5520
+ height: 2rem;
5521
+ color: #b45309;
5522
+ background: #fef3c7;
5523
+ border-radius: 9999px;
5524
+ }
5525
+
5526
+ .issue-detail-resolution-state.is-resolved .issue-detail-resolution-icon {
5527
+ color: #15803d;
5528
+ background: #dcfce7;
5529
+ }
5530
+
5531
+ .issue-detail-resolution-title {
5532
+ color: #111827;
5533
+ font-weight: 600;
5534
+ font-size: 0.875rem;
5535
+ }
5536
+
5537
+ .issue-detail-resolution-state p {
5538
+ margin-top: 0.25rem;
5539
+ color: #6b7280;
5540
+ font-size: 0.75rem;
5541
+ line-height: 1.25rem;
5542
+ }
5543
+
5544
+ .issue-detail-meta-list {
5545
+ margin-top: 0.75rem;
5546
+ }
5547
+
5548
+ .issue-detail-meta-list > * + * {
5549
+ margin-top: 0.5rem;
5550
+ }
5551
+
5552
+ .issue-detail-meta-list > div {
5553
+ display: flex;
5554
+ align-items: center;
5555
+ justify-content: space-between;
5556
+ gap: 0.75rem;
5557
+ padding-top: 0.5rem;
5558
+ border-top: 1px dashed #e5e7eb;
5559
+ }
5560
+
5561
+ .issue-detail-meta-list dt,
5562
+ .issue-detail-resource-label,
5563
+ .issue-detail-timeline-label {
5564
+ color: #6b7280;
5565
+ font-weight: 600;
5566
+ font-size: 0.75rem;
5567
+ letter-spacing: 0.025em;
5568
+ text-transform: uppercase;
5569
+ }
5570
+
5571
+ .issue-detail-meta-list dd {
5572
+ color: #1f2937;
5573
+ font-size: 0.875rem;
5574
+ text-align: right;
5575
+ }
5576
+
5577
+ .issue-detail-resource-stack {
5578
+ margin-top: 0.75rem;
5579
+ }
5580
+
5581
+ .issue-detail-resource-stack > * + * {
5582
+ margin-top: 0.75rem;
5583
+ }
5584
+
5585
+ .issue-detail-resource-row {
5586
+ display: block;
5587
+ }
5588
+
5589
+ .issue-detail-resource-row > * + * {
5590
+ margin-top: 0.375rem;
5591
+ }
5592
+
5593
+ .order-card {
5594
+ display: block;
5595
+ width: 100%;
5596
+ padding: 0.75rem;
5597
+ margin-top: 0.75rem;
5598
+ overflow: hidden;
5599
+ text-align: left;
5600
+ background: #f9fafb;
5601
+ border: 1px solid #e5e7eb;
5602
+ border-radius: 0.5rem;
5603
+ box-shadow: 0 1px 2px rgb(0 0 0 / 5%);
5604
+ transition:
5605
+ background-color 0.15s ease,
5606
+ border-color 0.15s ease;
5607
+ }
5608
+
5609
+ .order-card.is-interactive {
5610
+ cursor: pointer;
5611
+ }
5612
+
5613
+ .order-card.is-interactive:hover {
5614
+ background: #eff6ff;
5615
+ border-color: #93c5fd;
5616
+ }
5617
+
5618
+ .order-card-compact,
5619
+ .order-card-list {
5620
+ padding: 0.625rem;
5621
+ margin-top: 0;
5622
+ }
5623
+
5624
+ .order-card-selection {
5625
+ padding: 0;
5626
+ margin-top: 0;
5627
+ background: transparent;
5628
+ border: 0;
5629
+ border-radius: 0.375rem;
5630
+ box-shadow: none;
5631
+ }
5632
+
5633
+ .order-card-selection .order-card-topline {
5634
+ padding: 0.5rem 0.75rem 0;
5635
+ }
5636
+
5637
+ .order-card-selection .order-card-route {
5638
+ gap: 0.375rem;
5639
+ padding: 0.375rem 0.75rem 0;
5640
+ }
5641
+
5642
+ .order-card-selection .order-card-stop {
5643
+ grid-template-columns: 1.25rem minmax(0, 1fr);
5644
+ gap: 0.5rem;
5645
+ }
5646
+
5647
+ .order-card-selection .order-card-stop-marker {
5648
+ width: 1.25rem;
5649
+ height: 1.25rem;
5650
+ font-size: 0.625rem;
5651
+ }
5652
+
5653
+ .order-card-selection .order-card-meta {
5654
+ padding: 0 0.75rem 0.5rem;
5655
+ margin-top: 0.5rem;
5656
+ }
5657
+
5658
+ .order-card-selection .order-card-empty-route {
5659
+ margin: 0.375rem 0.75rem 0.5rem;
5660
+ }
5661
+
5662
+ .ember-power-select-option[aria-selected='true'] .order-card-selection,
5663
+ .ember-power-select-option[aria-current='true'] .order-card-selection,
5664
+ .ember-power-select-option.ember-power-select-option--highlighted .order-card-selection {
5665
+ background: transparent;
5666
+ border-color: transparent;
5667
+ box-shadow: none;
5668
+ }
5669
+
5670
+ .ember-power-select-option[aria-selected='true'] .order-card-selection .order-card-title,
5671
+ .ember-power-select-option[aria-current='true'] .order-card-selection .order-card-title,
5672
+ .ember-power-select-option.ember-power-select-option--highlighted .order-card-selection .order-card-title,
5673
+ .ember-power-select-option[aria-selected='true'] .order-card-selection .order-card-stop-address,
5674
+ .ember-power-select-option[aria-current='true'] .order-card-selection .order-card-stop-address,
5675
+ .ember-power-select-option.ember-power-select-option--highlighted .order-card-selection .order-card-stop-address {
5676
+ color: #fff;
5677
+ }
5678
+
5679
+ .ember-power-select-option[aria-selected='true'] .order-card-selection .order-card-subtitle,
5680
+ .ember-power-select-option[aria-current='true'] .order-card-selection .order-card-subtitle,
5681
+ .ember-power-select-option.ember-power-select-option--highlighted .order-card-selection .order-card-subtitle,
5682
+ .ember-power-select-option[aria-selected='true'] .order-card-selection .order-card-route,
5683
+ .ember-power-select-option[aria-current='true'] .order-card-selection .order-card-route,
5684
+ .ember-power-select-option.ember-power-select-option--highlighted .order-card-selection .order-card-route,
5685
+ .ember-power-select-option[aria-selected='true'] .order-card-selection .order-card-meta,
5686
+ .ember-power-select-option[aria-current='true'] .order-card-selection .order-card-meta,
5687
+ .ember-power-select-option.ember-power-select-option--highlighted .order-card-selection .order-card-meta,
5688
+ .ember-power-select-option[aria-selected='true'] .order-card-selection .order-card-stop-label,
5689
+ .ember-power-select-option[aria-current='true'] .order-card-selection .order-card-stop-label,
5690
+ .ember-power-select-option.ember-power-select-option--highlighted .order-card-selection .order-card-stop-label {
5691
+ color: rgb(255 255 255 / 78%);
5692
+ }
5693
+
5694
+ .order-card.is-selected {
5695
+ border-color: #3485e2;
5696
+ box-shadow: 0 0 0 2px rgb(52 133 226 / 16%);
5697
+ }
5698
+
5699
+ .order-card.is-disabled {
5700
+ opacity: 0.55;
5701
+ pointer-events: none;
5702
+ }
5703
+
5704
+ .order-card.is-selectable {
5705
+ cursor: pointer;
5706
+ }
5707
+
5708
+ .order-card-topline,
5709
+ .order-card-meta {
5710
+ display: flex;
5711
+ align-items: center;
5712
+ justify-content: space-between;
5713
+ gap: 0.5rem;
5714
+ }
5715
+
5716
+ .order-card-checkbox {
5717
+ flex: 0 0 auto;
5718
+ }
5719
+
5720
+ .order-card-title-block {
5721
+ min-width: 0;
5722
+ }
5723
+
5724
+ .order-card-title {
5725
+ overflow: hidden;
5726
+ color: #111827;
5727
+ font-weight: 600;
5728
+ font-size: 0.875rem;
5729
+ text-overflow: ellipsis;
5730
+ white-space: nowrap;
5731
+ }
5732
+
5733
+ .order-card-subtitle,
5734
+ .order-card-meta,
5735
+ .issue-detail-timeline-value,
5736
+ .issue-detail-coordinate {
5737
+ color: #6b7280;
5738
+ font-size: 0.75rem;
5739
+ }
5740
+
5741
+ .order-card-header-actions {
5742
+ flex: 0 0 auto;
5743
+ }
5744
+
5745
+ .order-card-progress {
5746
+ position: relative;
5747
+ height: 0.25rem;
5748
+ margin: 0.625rem 0 0.75rem;
5749
+ overflow: hidden;
5750
+ background: #e5e7eb;
5751
+ border-radius: 9999px;
5752
+ }
5753
+
5754
+ .order-card-progress span {
5755
+ position: absolute;
5756
+ inset: 0 auto 0 0;
5757
+ background: #3485e2;
5758
+ border-radius: inherit;
5759
+ }
5760
+
5761
+ .order-card-progress.is-pending span {
5762
+ width: 22%;
5763
+ background: #94a3b8;
5764
+ }
5765
+
5766
+ .order-card-progress.is-active span {
5767
+ width: 58%;
5768
+ }
5769
+
5770
+ .order-card-progress.is-complete span {
5771
+ width: 100%;
5772
+ background: #10b981;
5773
+ }
5774
+
5775
+ .order-card-route {
5776
+ display: grid;
5777
+ gap: 0.5rem;
5778
+ color: #64748b;
5779
+ font-size: 0.75rem;
5780
+ }
5781
+
5782
+ .order-card-stop {
5783
+ display: grid;
5784
+ grid-template-columns: 1.5rem minmax(0, 1fr);
5785
+ gap: 0.5rem;
5786
+ align-items: start;
5787
+ }
5788
+
5789
+ .order-card-stop.compact {
5790
+ opacity: 0.88;
5791
+ }
5792
+
5793
+ .order-card-stop-marker {
5794
+ display: inline-flex;
5795
+ align-items: center;
5796
+ justify-content: center;
5797
+ width: 1.5rem;
5798
+ height: 1.5rem;
5799
+ color: #fff;
5800
+ font-weight: 800;
5801
+ font-size: 0.6875rem;
5802
+ background: #64748b;
5803
+ border-radius: 9999px;
5804
+ }
5805
+
5806
+ .order-card-stop-marker.pickup {
5807
+ background: #3485e2;
5808
+ }
5809
+
5810
+ .order-card-stop-marker.dropoff {
5811
+ background: #10b981;
5812
+ }
5813
+
5814
+ .order-card-stop-marker.middle {
5815
+ color: #2563eb;
5816
+ background: #dbeafe;
5817
+ }
5818
+
5819
+ .order-card-stop-label {
5820
+ color: #94a3b8;
5821
+ font-weight: 700;
5822
+ font-size: 0.625rem;
5823
+ text-transform: uppercase;
5824
+ }
5825
+
5826
+ .order-card-stop-address {
5827
+ overflow: hidden;
5828
+ color: #334155;
5829
+ font-weight: 700;
5830
+ font-size: 0.75rem;
5831
+ line-height: 1.2rem;
5832
+ text-overflow: ellipsis;
5833
+ white-space: nowrap;
5834
+ }
5835
+
5836
+ .order-card-meta {
5837
+ flex-flow: row wrap;
5838
+ justify-content: flex-start;
5839
+ margin-top: 0.75rem;
5840
+ font-size: 0.6875rem;
5841
+ }
5842
+
5843
+ .order-card-meta span {
5844
+ display: inline-flex;
5845
+ align-items: center;
5846
+ gap: 0.25rem;
5847
+ }
5848
+
5849
+ .order-card-empty-route {
5850
+ display: flex;
5851
+ align-items: center;
5852
+ justify-content: center;
5853
+ gap: 0.5rem;
5854
+ padding: 0.75rem;
5855
+ margin-top: 0.75rem;
5856
+ color: #6b7280;
5857
+ font-size: 0.75rem;
5858
+ background: #fff;
5859
+ border: 1px dashed #d1d5db;
5860
+ border-radius: 0.375rem;
5861
+ }
5862
+
5863
+ .issue-detail-empty {
5864
+ display: flex;
5865
+ align-items: center;
5866
+ justify-content: center;
5867
+ gap: 0.5rem;
5868
+ padding: 1rem;
5869
+ margin-top: 0.75rem;
5870
+ color: #6b7280;
5871
+ font-size: 0.875rem;
5872
+ background: #f9fafb;
5873
+ border: 1px dashed #e5e7eb;
5874
+ border-radius: 0.5rem;
5875
+ }
5876
+
5877
+ .issue-detail-empty-compact {
5878
+ padding: 0.75rem;
5879
+ font-size: 0.75rem;
5880
+ }
5881
+
5882
+ .issue-detail-tags {
5883
+ display: flex;
5884
+ flex-flow: row wrap;
5885
+ gap: 0.375rem;
5886
+ margin-top: 0.75rem;
5887
+ }
5888
+
5889
+ .issue-detail-timeline {
5890
+ margin-top: 0.75rem;
5891
+ }
5892
+
5893
+ .issue-detail-timeline > * + * {
5894
+ margin-top: 0.75rem;
5895
+ }
5896
+
5897
+ .issue-detail-timeline li {
5898
+ display: flex;
5899
+ gap: 0.75rem;
5900
+ }
5901
+
5902
+ .issue-detail-timeline-marker {
5903
+ display: flex;
5904
+ flex-shrink: 0;
5905
+ align-items: center;
5906
+ justify-content: center;
5907
+ width: 1.75rem;
5908
+ height: 1.75rem;
5909
+ color: #6b7280;
5910
+ font-size: 0.75rem;
5911
+ background: #f9fafb;
5912
+ border: 1px solid #e5e7eb;
5913
+ border-radius: 9999px;
5914
+ }
5915
+
5916
+ .issue-timeline {
5917
+ margin-top: 0.75rem;
5918
+ }
5919
+
5920
+ .issue-timeline-loading {
5921
+ display: flex;
5922
+ justify-content: center;
5923
+ padding: 1rem;
5924
+ }
5925
+
5926
+ .issue-timeline-list {
5927
+ position: relative;
5928
+ display: flex;
5929
+ flex-direction: column;
5930
+ gap: 0.875rem;
5931
+ margin: 0;
5932
+ padding: 0;
5933
+ list-style: none;
5934
+ }
5935
+
5936
+ .issue-timeline-list::before {
5937
+ position: absolute;
5938
+ top: 0.875rem;
5939
+ bottom: 0.875rem;
5940
+ left: 0.875rem;
5941
+ width: 1px;
5942
+ background: #d1d5db;
5943
+ content: '';
5944
+ }
5945
+
5946
+ .issue-timeline-event {
5947
+ position: relative;
5948
+ display: grid;
5949
+ grid-template-columns: 1.75rem minmax(0, 1fr);
5950
+ gap: 0.75rem;
5951
+ }
5952
+
5953
+ .issue-timeline-marker {
5954
+ z-index: 1;
5955
+ display: flex;
5956
+ align-items: center;
5957
+ justify-content: center;
5958
+ width: 1.75rem;
5959
+ height: 1.75rem;
5960
+ color: #4b5563;
5961
+ font-size: 0.75rem;
5962
+ background: #fff;
5963
+ border: 1px solid #d1d5db;
5964
+ border-radius: 9999px;
5965
+ }
5966
+
5967
+ .issue-timeline-card {
5968
+ padding: 0.625rem 0.75rem;
5969
+ background: #f9fafb;
5970
+ border: 1px solid #e5e7eb;
5971
+ border-radius: 0.625rem;
5972
+ }
5973
+
5974
+ .issue-timeline-card-header {
5975
+ display: flex;
5976
+ align-items: flex-start;
5977
+ justify-content: space-between;
5978
+ gap: 0.75rem;
5979
+ }
5980
+
5981
+ .issue-timeline-label {
5982
+ color: #111827;
5983
+ font-weight: 600;
5984
+ font-size: 0.8125rem;
5985
+ line-height: 1.25rem;
5986
+ }
5987
+
5988
+ .issue-timeline-actor,
5989
+ .issue-timeline-card time,
5990
+ .issue-timeline-card p {
5991
+ color: #6b7280;
5992
+ font-size: 0.75rem;
5993
+ line-height: 1.125rem;
5994
+ }
5995
+
5996
+ .issue-timeline-card p {
5997
+ margin-top: 0.375rem;
5998
+ }
5999
+
6000
+ .issue-timeline-link {
6001
+ display: inline-flex;
6002
+ align-items: center;
6003
+ gap: 0.375rem;
6004
+ margin-top: 0.5rem;
6005
+ color: #2563eb;
6006
+ font-weight: 600;
6007
+ font-size: 0.75rem;
6008
+ }
6009
+
6010
+ .issue-timeline-event.tone-green .issue-timeline-marker {
6011
+ color: #15803d;
6012
+ border-color: #86efac;
6013
+ }
6014
+
6015
+ .issue-timeline-event.tone-blue .issue-timeline-marker {
6016
+ color: #2563eb;
6017
+ border-color: #93c5fd;
6018
+ }
6019
+
6020
+ .issue-timeline-event.tone-orange .issue-timeline-marker {
6021
+ color: #d97706;
6022
+ border-color: #fcd34d;
6023
+ }
6024
+
6025
+ .issue-timeline-event.tone-red .issue-timeline-marker {
6026
+ color: #dc2626;
6027
+ border-color: #fca5a5;
6028
+ }
6029
+
6030
+ .issue-timeline-event.tone-purple .issue-timeline-marker,
6031
+ .issue-timeline-event.tone-indigo .issue-timeline-marker {
6032
+ color: #4f46e5;
6033
+ border-color: #a5b4fc;
6034
+ }
6035
+
6036
+ .issue-detail-custom-fields {
6037
+ display: block;
6038
+ }
6039
+
6040
+ @media (width >= 768px) {
6041
+ .issue-detail-summary-grid {
6042
+ grid-template-columns: repeat(2, minmax(0, 1fr));
6043
+ }
6044
+
6045
+ .issue-detail-grid {
6046
+ grid-template-columns: repeat(5, minmax(0, 1fr));
6047
+ }
6048
+
6049
+ .issue-detail-main {
6050
+ grid-column: span 3 / span 3;
6051
+ }
6052
+
6053
+ .issue-detail-side-rail {
6054
+ grid-column: span 2 / span 2;
6055
+ }
6056
+ }
6057
+
6058
+ @media (width >= 1180px) {
6059
+ .issue-detail-summary-grid {
6060
+ grid-template-columns: repeat(4, minmax(0, 1fr));
6061
+ }
6062
+ }
6063
+
6064
+ body[data-theme='dark'] .issue-panel-header {
6065
+ background: #111827;
6066
+ border-color: #374151;
6067
+ }
6068
+
6069
+ body[data-theme='dark'] .issue-detail-message,
6070
+ body[data-theme='dark'] .issue-detail-correspondence,
6071
+ body[data-theme='dark'] .issue-detail-summary-card,
6072
+ body[data-theme='dark'] .issue-detail-side-card {
6073
+ background: #1f2937;
6074
+ border-color: #374151;
6075
+ box-shadow:
6076
+ 0 10px 15px -3px rgb(0 0 0 / 20%),
6077
+ 0 4px 6px -4px rgb(0 0 0 / 20%);
6078
+ }
6079
+
6080
+ body[data-theme='dark'] .issue-panel-header-icon {
6081
+ background: #111827;
6082
+ border-color: #374151;
6083
+ }
6084
+
6085
+ body[data-theme='dark'] .issue-detail-report,
6086
+ body[data-theme='dark'] .issue-detail-resolution-state,
6087
+ body[data-theme='dark'] .order-card,
6088
+ body[data-theme='dark'] .issue-detail-empty,
6089
+ body[data-theme='dark'] .issue-detail-timeline-marker {
6090
+ background: #374151;
6091
+ border-color: #374151;
6092
+ }
6093
+
6094
+ body[data-theme='dark'] .issue-panel-header-title,
6095
+ body[data-theme='dark'] .issue-detail-message-author,
6096
+ body[data-theme='dark'] .issue-detail-resolution-title,
6097
+ body[data-theme='dark'] .issue-detail-meta-list dd,
6098
+ body[data-theme='dark'] .issue-detail-summary-item dd,
6099
+ body[data-theme='dark'] .order-card-title,
6100
+ body[data-theme='dark'] .order-card-stop-address,
6101
+ body[data-theme='dark'] .issue-detail-report {
6102
+ color: #f9fafb;
6103
+ }
6104
+
6105
+ body[data-theme='dark'] .issue-panel-header-meta,
6106
+ body[data-theme='dark'] .issue-detail-message-subtitle,
6107
+ body[data-theme='dark'] .issue-detail-message-meta time,
6108
+ body[data-theme='dark'] .issue-detail-section-header p,
6109
+ body[data-theme='dark'] .issue-detail-resolution-state p,
6110
+ body[data-theme='dark'] .issue-detail-meta-list dt,
6111
+ body[data-theme='dark'] .issue-detail-summary-item dt,
6112
+ body[data-theme='dark'] .issue-detail-resource-label,
6113
+ body[data-theme='dark'] .issue-detail-timeline-label,
6114
+ body[data-theme='dark'] .order-card-subtitle,
6115
+ body[data-theme='dark'] .order-card-route,
6116
+ body[data-theme='dark'] .order-card-meta,
6117
+ body[data-theme='dark'] .issue-detail-timeline-value,
6118
+ body[data-theme='dark'] .issue-detail-coordinate,
6119
+ body[data-theme='dark'] .issue-detail-empty {
6120
+ color: #9ca3af;
6121
+ }
6122
+
6123
+ body[data-theme='dark'] .issue-panel-header-id {
6124
+ color: #9ca3af;
6125
+ background: #111827;
6126
+ border-color: #374151;
6127
+ }
6128
+
6129
+ body[data-theme='dark'] .issue-panel-header-id:hover {
6130
+ color: #93c5fd;
6131
+ }
6132
+
6133
+ body[data-theme='dark'] .issue-detail-documents {
6134
+ border-top-color: #374151;
6135
+ }
6136
+
6137
+ body[data-theme='dark'] .issue-detail-documents-title,
6138
+ body[data-theme='dark'] .issue-detail-section-title {
6139
+ color: #d1d5db;
6140
+ }
6141
+
6142
+ body[data-theme='dark'] .issue-detail-upload-row {
6143
+ color: #dbeafe;
6144
+ background: #1e3a8a;
6145
+ border-color: #1e40af;
6146
+ }
6147
+
6148
+ body[data-theme='dark'] .issue-detail-resolution-icon {
6149
+ color: #fde68a;
6150
+ background: #78350f;
6151
+ }
6152
+
6153
+ body[data-theme='dark'] .issue-detail-resolution-state.is-resolved .issue-detail-resolution-icon {
6154
+ color: #bbf7d0;
6155
+ background: #14532d;
6156
+ }
6157
+
6158
+ body[data-theme='dark'] .issue-detail-meta-list > div {
6159
+ border-top-color: #374151;
6160
+ }
6161
+
6162
+ body[data-theme='dark'] .order-card.is-interactive:hover {
6163
+ background: #374151;
6164
+ border-color: #2563eb;
6165
+ }
6166
+
6167
+ body[data-theme='dark'] .issue-detail-avatar {
6168
+ color: #bfdbfe;
6169
+ background: #1e3a8a;
6170
+ }
6171
+
6172
+ body[data-theme='dark'] .order-card-progress {
6173
+ background: #4b5563;
6174
+ }
6175
+
6176
+ body[data-theme='dark'] .order-card-stop-marker.middle {
6177
+ color: #93c5fd;
6178
+ background: rgb(37 99 235 / 24%);
6179
+ }
6180
+
6181
+ body[data-theme='dark'] .order-card-empty-route {
6182
+ color: #9ca3af;
6183
+ background: #1f2937;
6184
+ border-color: #4b5563;
6185
+ }
6186
+
6187
+ body[data-theme='dark'] .order-card-selection {
6188
+ background: transparent;
6189
+ border-color: transparent;
6190
+ box-shadow: none;
6191
+ }
6192
+
6193
+ body[data-theme='dark'] .issue-detail-dropzone {
6194
+ color: #d1d5db;
6195
+ background: #1f2937;
6196
+ border-color: #4b5563;
6197
+ }
6198
+
6199
+ body[data-theme='dark'] .issue-detail-dropzone-empty svg,
6200
+ body[data-theme='dark'] .issue-detail-dropzone-ready svg {
6201
+ color: #d1d5db;
6202
+ }
6203
+
6204
+ body[data-theme='dark'] .issue-detail-upload-link,
6205
+ body[data-theme='dark'] .issue-detail-dropzone-progress,
6206
+ body[data-theme='dark'] .issue-timeline-link {
6207
+ color: #93c5fd;
6208
+ }
6209
+
6210
+ body[data-theme='dark'] .issue-timeline-list::before {
6211
+ background: #4b5563;
6212
+ }
6213
+
6214
+ body[data-theme='dark'] .issue-timeline-marker,
6215
+ body[data-theme='dark'] .issue-timeline-card {
6216
+ background: #1f2937;
6217
+ border-color: #4b5563;
6218
+ }
6219
+
6220
+ body[data-theme='dark'] .issue-timeline-label {
6221
+ color: #f9fafb;
6222
+ }
6223
+
6224
+ body[data-theme='dark'] .issue-timeline-actor,
6225
+ body[data-theme='dark'] .issue-timeline-card time,
6226
+ body[data-theme='dark'] .issue-timeline-card p {
6227
+ color: #d1d5db;
6228
+ }