@fleetbase/fleetops-engine 0.6.49 → 0.6.51

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 (271) hide show
  1. package/README.md +185 -67
  2. package/addon/components/contact/panel-header.hbs +11 -48
  3. package/addon/components/customer/create-order-form.hbs +2 -2
  4. package/addon/components/customer/details.hbs +1 -2
  5. package/addon/components/customer/form.hbs +62 -50
  6. package/addon/components/customer/form.js +27 -1
  7. package/addon/components/customer/order-form.hbs +2 -2
  8. package/addon/components/customer/orders.hbs +50 -2
  9. package/addon/components/customer/orders.js +67 -5
  10. package/addon/components/display-place.hbs +2 -2
  11. package/addon/components/driver/form.hbs +1 -1
  12. package/addon/components/home/getting-started-guidance.hbs +113 -0
  13. package/addon/components/home/getting-started-guidance.js +107 -0
  14. package/addon/components/issue/details/comments.hbs +3 -0
  15. package/addon/components/issue/details/comments.js +3 -0
  16. package/addon/components/issue/details/correspondence.hbs +9 -0
  17. package/addon/components/issue/details/correspondence.js +83 -0
  18. package/addon/components/issue/details/documents.hbs +69 -0
  19. package/addon/components/issue/details/documents.js +85 -0
  20. package/addon/components/issue/details.hbs +220 -59
  21. package/addon/components/issue/details.js +245 -0
  22. package/addon/components/issue/form.hbs +19 -1
  23. package/addon/components/issue/panel-header.hbs +43 -0
  24. package/addon/components/issue/panel-header.js +22 -0
  25. package/addon/components/issue/timeline.hbs +40 -0
  26. package/addon/components/issue/timeline.js +45 -0
  27. package/addon/components/leaflet-tracking-marker.js +3 -0
  28. package/addon/components/map/drawer/position-listing.js +3 -0
  29. package/addon/components/map/google-live-map.js +6 -2
  30. package/addon/components/map/leaflet-live-map.hbs +48 -14
  31. package/addon/components/map/leaflet-live-map.js +201 -20
  32. package/addon/components/map/order-list-overlay.hbs +4 -4
  33. package/addon/components/modals/convert-customer-to-vendor.hbs +30 -0
  34. package/addon/components/modals/convert-customer-to-vendor.js +55 -0
  35. package/addon/components/modals/issue-assign.hbs +20 -0
  36. package/addon/components/modals/issue-assign.js +49 -0
  37. package/addon/components/modals/issue-close.hbs +30 -0
  38. package/addon/components/modals/issue-close.js +73 -0
  39. package/addon/components/modals/issue-status.hbs +20 -0
  40. package/addon/components/modals/issue-status.js +43 -0
  41. package/addon/components/modals/order-change-destination.hbs +46 -0
  42. package/addon/components/modals/order-change-destination.js +106 -0
  43. package/addon/components/modals/reset-customer-credentials.js +12 -6
  44. package/addon/components/modals/stop-activity.hbs +28 -0
  45. package/addon/components/modals/stop-activity.js +52 -0
  46. package/addon/components/modals/update-order-activity.hbs +78 -2
  47. package/addon/components/modals/update-order-activity.js +197 -5
  48. package/addon/components/orchestrator/resource-panel.hbs +0 -10
  49. package/addon/components/orchestrator/resource-panel.js +2 -4
  50. package/addon/components/order/activity-list.hbs +2 -2
  51. package/addon/components/order/activity-timeline.hbs +31 -29
  52. package/addon/components/order/details/activity.hbs +3 -3
  53. package/addon/components/order/details/activity.js +13 -2
  54. package/addon/components/order/details/documents.js +2 -0
  55. package/addon/components/order/details/proof.hbs +40 -38
  56. package/addon/components/order/details/proof.js +31 -4
  57. package/addon/components/order/details/purchase-rate.hbs +2 -2
  58. package/addon/components/order/details/route.hbs +11 -3
  59. package/addon/components/order/details/route.js +91 -14
  60. package/addon/components/order/details/tracking.hbs +101 -72
  61. package/addon/components/order/details/tracking.js +149 -2
  62. package/addon/components/order/details.hbs +5 -5
  63. package/addon/components/order/details.js +19 -1
  64. package/addon/components/order/form/details.hbs +3 -3
  65. package/addon/components/order/form/documents.js +11 -4
  66. package/addon/components/order/form/route.hbs +108 -104
  67. package/addon/components/order/form/route.js +37 -1
  68. package/addon/components/order/form/service-rate.hbs +2 -2
  69. package/addon/components/order/header.hbs +1 -1
  70. package/addon/components/order-config-manager/activity-flow.hbs +4 -1
  71. package/addon/components/order-config-manager/activity-flow.js +178 -12
  72. package/addon/components/place/address.js +1 -1
  73. package/addon/components/route-list.hbs +17 -29
  74. package/addon/components/route-list.js +42 -10
  75. package/addon/components/service-rate/details.hbs +42 -1
  76. package/addon/components/service-rate/form.hbs +119 -1
  77. package/addon/components/service-rate/form.js +59 -0
  78. package/addon/components/vehicle/form.js +1 -1
  79. package/addon/components/vehicle/pill.hbs +1 -1
  80. package/addon/components/vendor/personnel-manager.hbs +166 -0
  81. package/addon/components/vendor/personnel-manager.js +143 -0
  82. package/addon/components/widget/live-fleet.hbs +1 -0
  83. package/addon/components/widget/live-fleet.js +2 -7
  84. package/addon/components/widget/revenue-trend.hbs +1 -1
  85. package/addon/components/widget/revenue-trend.js +75 -2
  86. package/addon/controllers/management/contacts/customers/details.js +31 -13
  87. package/addon/controllers/management/contacts/customers.js +16 -5
  88. package/addon/controllers/management/contacts/index/details.js +31 -13
  89. package/addon/controllers/management/contacts/index.js +7 -0
  90. package/addon/controllers/management/issues/index/details.js +52 -6
  91. package/addon/controllers/management/vehicles/index/new.js +1 -1
  92. package/addon/controllers/management/vendors/index/details.js +4 -0
  93. package/addon/controllers/operations/orders/index/details.js +15 -7
  94. package/addon/controllers/operations/orders/index.js +15 -1
  95. package/addon/extension.js +19 -12
  96. package/addon/helpers/format-duration.js +1 -38
  97. package/addon/helpers/place-address-html.js +2 -2
  98. package/addon/initializers/load-leaflet-assets.js +5 -6
  99. package/addon/initializers/patch-ember-leaflet-tooltip-layer.js +51 -0
  100. package/addon/routes/management/issues/index/details.js +1 -1
  101. package/addon/routes/operations/service-rates/index.js +1 -1
  102. package/addon/routes.js +1 -0
  103. package/addon/services/contact-actions.js +231 -1
  104. package/addon/services/geofence.js +163 -19
  105. package/addon/services/getting-started.js +44 -0
  106. package/addon/services/issue-actions.js +71 -0
  107. package/addon/services/leaflet-contextmenu-manager.js +27 -0
  108. package/addon/services/leaflet-map-manager.js +2 -0
  109. package/addon/services/map-adapter/leaflet.js +19 -0
  110. package/addon/services/service-areas.js +3 -0
  111. package/addon/services/vehicle-actions.js +1 -1
  112. package/addon/styles/fleetops-engine.css +1127 -1
  113. package/addon/templates/management/contacts/customers/details.hbs +1 -1
  114. package/addon/templates/management/contacts/index/details.hbs +1 -1
  115. package/addon/templates/management/contacts.hbs +2 -2
  116. package/addon/templates/management/issues/index/details/index.hbs +3 -1
  117. package/addon/templates/management/issues/index/details.hbs +3 -2
  118. package/addon/templates/management/vendors/index/details/personnel.hbs +1 -2
  119. package/addon/templates/operations/orders/index/details/index.hbs +2 -2
  120. package/addon/templates/operations/orders/index.hbs +1 -1
  121. package/addon/templates/operations/service-rates/index/edit.hbs +1 -0
  122. package/addon/templates/operations/service-rates/index/new.hbs +1 -0
  123. package/addon/templates/settings/payments/onboard.hbs +8 -8
  124. package/addon/utils/fleet-ops-options.js +2 -1
  125. package/addon/utils/leaflet-draw-namespace-guard.js +22 -0
  126. package/addon/utils/leaflet-plugin-loader.js +219 -0
  127. package/addon/utils/normalize-order-config-flow.js +41 -0
  128. package/addon/utils/place-address-html.js +3 -2
  129. package/addon/utils/route-visualization.js +54 -7
  130. package/addon/utils/setup-customer-portal.js +4 -64
  131. package/app/components/home/getting-started-guidance.js +1 -0
  132. package/app/components/issue/details/comments.js +1 -0
  133. package/app/components/issue/details/correspondence.js +1 -0
  134. package/app/components/issue/details/documents.js +1 -0
  135. package/app/components/issue/panel-header.js +1 -0
  136. package/app/components/modals/convert-customer-to-vendor.js +1 -0
  137. package/app/components/modals/issue-assign.js +1 -0
  138. package/app/components/modals/issue-close.js +1 -0
  139. package/app/components/modals/issue-status.js +1 -0
  140. package/app/components/modals/order-change-destination.js +1 -0
  141. package/app/components/modals/stop-activity.js +1 -0
  142. package/app/components/vendor/personnel-manager.js +1 -0
  143. package/app/helpers/format-duration.js +1 -1
  144. package/app/services/getting-started.js +1 -0
  145. package/app/utils/leaflet-draw-namespace-guard.js +1 -0
  146. package/app/utils/leaflet-plugin-loader.js +1 -0
  147. package/composer.json +1 -1
  148. package/extension.json +1 -1
  149. package/package.json +5 -5
  150. package/server/migrations/2026_05_21_000001_add_geographic_rules_to_service_rate_fees_table.php +37 -0
  151. package/server/migrations/2026_05_25_000001_add_endpoint_tracking_refs_to_payloads_table.php +50 -0
  152. package/server/migrations/2026_05_27_000001_default_driver_vehicle_statuses_to_available.php +48 -0
  153. package/server/migrations/2026_05_31_000001_add_portal_fields_to_vendor_personnels_table.php +30 -0
  154. package/server/migrations/2026_06_03_000000_ensure_tags_column_on_issues_table.php +31 -0
  155. package/server/migrations/2026_06_03_000001_add_order_uuid_to_issues_table.php +25 -0
  156. package/server/migrations/2026_06_04_000001_backfill_order_transaction_subjects.php +39 -0
  157. package/server/migrations/2026_06_04_000002_backfill_order_transaction_directions.php +24 -0
  158. package/server/resources/views/labels/default.php +57 -49
  159. package/server/resources/views/labels/waypoint-label.php +27 -20
  160. package/server/resources/views/mail/customer-credentials.blade.php +16 -13
  161. package/server/seeders/Testing/ConnectivitySeeder.php +1 -0
  162. package/server/seeders/Testing/FleetSeeder.php +22 -22
  163. package/server/seeders/Testing/OrdersSeeder.php +6 -22
  164. package/server/seeders/Testing/VroomOrchestrationSeeder.php +21 -21
  165. package/server/src/Console/Commands/AuditCustomerUserConflicts.php +75 -0
  166. package/server/src/Exceptions/CustomerUserConflictException.php +13 -0
  167. package/server/src/Expansions/UserFilterExpansion.php +28 -0
  168. package/server/src/Http/Controllers/Api/v1/ContactController.php +17 -2
  169. package/server/src/Http/Controllers/Api/v1/CustomerController.php +876 -0
  170. package/server/src/Http/Controllers/Api/v1/DriverController.php +1 -1
  171. package/server/src/Http/Controllers/Api/v1/IssueController.php +2 -0
  172. package/server/src/Http/Controllers/Api/v1/OrderConfigController.php +54 -0
  173. package/server/src/Http/Controllers/Api/v1/OrderController.php +109 -80
  174. package/server/src/Http/Controllers/Api/v1/PlaceController.php +10 -58
  175. package/server/src/Http/Controllers/Api/v1/ServiceAreaController.php +2 -2
  176. package/server/src/Http/Controllers/Api/v1/VehicleController.php +20 -3
  177. package/server/src/Http/Controllers/Internal/v1/ContactController.php +154 -0
  178. package/server/src/Http/Controllers/Internal/v1/CustomerController.php +116 -6
  179. package/server/src/Http/Controllers/Internal/v1/GettingStartedController.php +17 -0
  180. package/server/src/Http/Controllers/Internal/v1/IssueController.php +251 -0
  181. package/server/src/Http/Controllers/Internal/v1/LiveController.php +101 -66
  182. package/server/src/Http/Controllers/Internal/v1/OrderController.php +530 -52
  183. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +10 -68
  184. package/server/src/Http/Controllers/Internal/v1/ServiceQuoteController.php +1 -1
  185. package/server/src/Http/Controllers/Internal/v1/SettingController.php +2 -2
  186. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +54 -1
  187. package/server/src/Http/Controllers/Internal/v1/VendorController.php +89 -0
  188. package/server/src/Http/Middleware/AuthenticateCustomerToken.php +34 -0
  189. package/server/src/Http/Requests/CreateCustomerOrderRequest.php +63 -0
  190. package/server/src/Http/Requests/CreateCustomerRequest.php +48 -0
  191. package/server/src/Http/Requests/CreateDriverRequest.php +1 -1
  192. package/server/src/Http/Requests/CreateIssueRequest.php +4 -0
  193. package/server/src/Http/Requests/CreateVehicleRequest.php +25 -1
  194. package/server/src/Http/Requests/Internal/CreateDriverRequest.php +1 -1
  195. package/server/src/Http/Requests/UpdateIssueRequest.php +4 -0
  196. package/server/src/Http/Requests/VerifyCreateCustomerRequest.php +29 -0
  197. package/server/src/Http/Resources/Internal/v1/OrderConfig.php +41 -0
  198. package/server/src/Http/Resources/v1/Customer.php +79 -0
  199. package/server/src/Http/Resources/v1/Index/Order.php +12 -9
  200. package/server/src/Http/Resources/v1/Issue.php +25 -0
  201. package/server/src/Http/Resources/v1/Order.php +20 -18
  202. package/server/src/Http/Resources/v1/OrderConfig.php +74 -0
  203. package/server/src/Http/Resources/v1/Payload.php +23 -20
  204. package/server/src/Http/Resources/v1/ServiceArea.php +33 -19
  205. package/server/src/Http/Resources/v1/ServiceRateFee.php +7 -0
  206. package/server/src/Listeners/HandleOrderDispatched.php +2 -2
  207. package/server/src/Mail/CustomerCredentialsMail.php +5 -6
  208. package/server/src/Models/Contact.php +122 -66
  209. package/server/src/Models/Customer.php +64 -0
  210. package/server/src/Models/Driver.php +12 -3
  211. package/server/src/Models/Entity.php +2 -2
  212. package/server/src/Models/Issue.php +47 -6
  213. package/server/src/Models/Order.php +62 -10
  214. package/server/src/Models/Payload.php +17 -1
  215. package/server/src/Models/ServiceArea.php +1 -1
  216. package/server/src/Models/ServiceRate.php +273 -1
  217. package/server/src/Models/ServiceRateFee.php +39 -9
  218. package/server/src/Models/TrackingNumber.php +8 -2
  219. package/server/src/Models/Vehicle.php +18 -2
  220. package/server/src/Models/VendorPersonnel.php +10 -1
  221. package/server/src/Models/Waypoint.php +2 -2
  222. package/server/src/Models/Zone.php +1 -1
  223. package/server/src/Notifications/LateDeparture.php +2 -2
  224. package/server/src/Notifications/ProlongedStoppage.php +2 -2
  225. package/server/src/Notifications/RouteDeviation.php +2 -2
  226. package/server/src/Observers/ContactObserver.php +2 -0
  227. package/server/src/Observers/PurchaseRateObserver.php +20 -0
  228. package/server/src/Observers/ServiceRateObserver.php +6 -6
  229. package/server/src/Observers/ZoneObserver.php +56 -0
  230. package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +1 -1
  231. package/server/src/Providers/FleetOpsServiceProvider.php +2 -0
  232. package/server/src/Support/Analytics/AbstractAnalytics.php +6 -6
  233. package/server/src/Support/Analytics/FuelEfficiency.php +2 -2
  234. package/server/src/Support/Analytics/OrdersByStatus.php +1 -1
  235. package/server/src/Support/Analytics/RevenueTrend.php +0 -1
  236. package/server/src/Support/Analytics/TopDrivers.php +10 -2
  237. package/server/src/Support/CustomerAuth.php +98 -0
  238. package/server/src/Support/GettingStarted.php +144 -0
  239. package/server/src/Support/LabelPdf.php +52 -0
  240. package/server/src/Support/Metrics/AbstractMetric.php +4 -4
  241. package/server/src/Support/PlaceSearch.php +282 -0
  242. package/server/src/Support/ResolvesOrderServiceStops.php +522 -0
  243. package/server/src/Tracking/TrackingContextBuilder.php +41 -38
  244. package/server/src/Tracking/TrackingIntelligenceService.php +109 -9
  245. package/server/src/Tracking/TrackingStop.php +13 -11
  246. package/server/src/routes.php +76 -10
  247. package/server/tests/AnalyticsRoutesTest.php +8 -0
  248. package/server/tests/CapacityAllocationEngineTest.php +10 -10
  249. package/server/tests/CustomerContactIdentitySafetyTest.php +95 -0
  250. package/server/tests/CustomerEndpointTest.php +199 -0
  251. package/server/tests/DriverVehicleStatusDefaultTest.php +39 -0
  252. package/server/tests/GettingStartedStatusTest.php +21 -0
  253. package/server/tests/LabelPdfRenderingTest.php +23 -0
  254. package/server/tests/LiveControllerViewportTest.php +60 -0
  255. package/server/tests/MetricsRegistryTest.php +4 -8
  256. package/server/tests/OrchestrationPayloadBuilderTest.php +2 -2
  257. package/server/tests/OrderActivityFlowRegressionTest.php +116 -0
  258. package/server/tests/OrderConfigEndpointTest.php +86 -0
  259. package/server/tests/OrderFileAttachmentTest.php +20 -0
  260. package/server/tests/ServiceAreaZoneApiShapeTest.php +78 -0
  261. package/server/tests/VehicleDriverAssignmentTest.php +18 -0
  262. package/translations/ar-ae.yml +9 -0
  263. package/translations/bg-bg.yaml +9 -0
  264. package/translations/en-us.yaml +12 -0
  265. package/translations/es-pa.yaml +9 -0
  266. package/translations/fr-fr.yaml +9 -0
  267. package/translations/mn-mn.yaml +9 -0
  268. package/translations/pt-br.yaml +9 -0
  269. package/translations/ru-ru.yaml +9 -0
  270. package/translations/vi-vn.yaml +9 -0
  271. package/server/migrations/2026_05_13_000001_repair_customer_contact_user_types.php +0 -86
@@ -345,6 +345,51 @@ body.fleetbase-console .next-content-overlay > .next-content-overlay-panel-conta
345
345
  gap: 0.5rem;
346
346
  }
347
347
 
348
+ .fleetops-order-form-waypoint {
349
+ position: relative;
350
+ }
351
+
352
+ .fleetops-order-form-waypoint--required {
353
+ border-color: #f97316 !important;
354
+ padding-top: 1.25rem;
355
+ box-shadow:
356
+ 0 1px 3px 0 rgb(249 115 22 / 15%),
357
+ 0 0 0 1px rgb(249 115 22 / 10%);
358
+ }
359
+
360
+ .fleetops-order-form-waypoint__required-tab {
361
+ position: absolute;
362
+ top: -1px;
363
+ right: -1px;
364
+ border-top-right-radius: 0.375rem;
365
+ border-bottom-left-radius: 0.375rem;
366
+ background-color: #f97316;
367
+ color: #fff7ed;
368
+ padding: 0.15rem 0.5rem;
369
+ font-size: 0.62rem;
370
+ font-weight: 700;
371
+ line-height: 1.2;
372
+ text-transform: uppercase;
373
+ letter-spacing: 0.02em;
374
+ }
375
+
376
+ .fleetops-order-form-waypoint__marker {
377
+ display: flex;
378
+ flex-direction: row;
379
+ align-items: center;
380
+ gap: 0.6rem;
381
+ min-width: 3.25rem;
382
+ padding-top: 0.15rem;
383
+ }
384
+
385
+ .fleetops-order-form-waypoint__badge {
386
+ min-width: 1.65rem;
387
+ width: 1.65rem;
388
+ height: 1.65rem;
389
+ font-size: 0.75rem;
390
+ flex-shrink: 0;
391
+ }
392
+
348
393
  .fleetops-route-editor-empty-state {
349
394
  border: 1px dashed rgb(75 85 99 / 75%);
350
395
  border-radius: 0.5rem;
@@ -464,7 +509,52 @@ body[data-theme='light'] .flow-activity-status-pill text {
464
509
  .activity-flow-graph-container {
465
510
  position: relative;
466
511
  width: 100%;
467
- height: 100%;
512
+ height: calc(100vh - 16rem);
513
+ min-height: 24rem;
514
+ overflow: auto hidden;
515
+ scrollbar-width: none;
516
+ }
517
+
518
+ .activity-flow-graph-container > .joint-js-paper {
519
+ min-width: 100%;
520
+ max-width: none;
521
+ overflow: visible;
522
+ }
523
+
524
+ .activity-flow-graph-container::-webkit-scrollbar {
525
+ display: none;
526
+ }
527
+
528
+ .activity-flow-horizontal-scrollbar {
529
+ position: fixed;
530
+ bottom: 0;
531
+ z-index: 100;
532
+ height: 12px;
533
+ overflow: auto hidden;
534
+ background-color: transparent;
535
+ scrollbar-color: #6b7280 transparent;
536
+ scrollbar-width: thin;
537
+ }
538
+
539
+ .activity-flow-horizontal-scrollbar.is-hidden {
540
+ display: none;
541
+ }
542
+
543
+ .activity-flow-horizontal-scrollbar-content {
544
+ height: 1px;
545
+ }
546
+
547
+ .activity-flow-horizontal-scrollbar::-webkit-scrollbar {
548
+ height: 8px;
549
+ }
550
+
551
+ .activity-flow-horizontal-scrollbar::-webkit-scrollbar-thumb {
552
+ background-color: #6b7280;
553
+ border-radius: 9999px;
554
+ }
555
+
556
+ .activity-flow-horizontal-scrollbar::-webkit-scrollbar-track {
557
+ background-color: transparent;
468
558
  }
469
559
 
470
560
  .activity-flow-zoom-controls {
@@ -4824,3 +4914,1039 @@ body[data-theme='dark'] .next-google-container-map .fleetops-google-draw-actions
4824
4914
  .overflow-y-scroll-i {
4825
4915
  overflow-y: scroll !important;
4826
4916
  }
4917
+
4918
+ .fleet-ops-home-guidance-grid {
4919
+ display: grid;
4920
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4921
+ gap: 1rem;
4922
+ }
4923
+
4924
+ .fleet-ops-get-started-content {
4925
+ min-height: 256px;
4926
+ }
4927
+
4928
+ .fleet-ops-get-started .fleet-ops-get-started-step {
4929
+ min-height: 52px;
4930
+ }
4931
+
4932
+ .fleet-ops-recommended-features-loading {
4933
+ min-height: 256px;
4934
+ }
4935
+
4936
+ .fleet-ops-recommended-feature {
4937
+ min-height: 92px;
4938
+ }
4939
+
4940
+ @media (width <= 1180px) {
4941
+ .fleet-ops-home-guidance-grid {
4942
+ grid-template-columns: 1fr;
4943
+ }
4944
+ }
4945
+
4946
+ .fleet-ops-recommended-feature-icon {
4947
+ background: rgba(37, 99, 235, 0.12);
4948
+ color: #2563eb;
4949
+ }
4950
+
4951
+ .fleet-ops-recommended-feature.feature-accent-green .fleet-ops-recommended-feature-icon {
4952
+ background: rgba(16, 185, 129, 0.12);
4953
+ color: #059669;
4954
+ }
4955
+
4956
+ .fleet-ops-recommended-feature.feature-accent-amber .fleet-ops-recommended-feature-icon {
4957
+ background: rgba(245, 158, 11, 0.14);
4958
+ color: #d97706;
4959
+ }
4960
+
4961
+ .fleet-ops-recommended-feature.feature-accent-purple .fleet-ops-recommended-feature-icon {
4962
+ background: rgba(124, 58, 237, 0.12);
4963
+ color: #7c3aed;
4964
+ }
4965
+
4966
+ [data-theme='dark'] .fleet-ops-recommended-feature-icon {
4967
+ background: rgba(96, 165, 250, 0.16);
4968
+ color: #93c5fd;
4969
+ }
4970
+
4971
+ [data-theme='dark'] .fleet-ops-recommended-feature.feature-accent-green .fleet-ops-recommended-feature-icon {
4972
+ background: rgba(52, 211, 153, 0.14);
4973
+ color: #6ee7b7;
4974
+ }
4975
+
4976
+ [data-theme='dark'] .fleet-ops-recommended-feature.feature-accent-amber .fleet-ops-recommended-feature-icon {
4977
+ background: rgba(251, 191, 36, 0.14);
4978
+ color: #fcd34d;
4979
+ }
4980
+
4981
+ [data-theme='dark'] .fleet-ops-recommended-feature.feature-accent-purple .fleet-ops-recommended-feature-icon {
4982
+ background: rgba(167, 139, 250, 0.14);
4983
+ color: #c4b5fd;
4984
+ }
4985
+
4986
+ .issue-panel-header {
4987
+ display: flex;
4988
+ align-items: flex-start;
4989
+ justify-content: space-between;
4990
+ gap: 1rem;
4991
+ background: #fff;
4992
+ padding: 0.75rem 1rem;
4993
+ }
4994
+
4995
+ .issue-panel-header-main {
4996
+ display: flex;
4997
+ flex: 1 1 0%;
4998
+ align-items: flex-start;
4999
+ gap: 0.75rem;
5000
+ min-width: 0;
5001
+ }
5002
+
5003
+ .issue-panel-header-icon {
5004
+ display: flex;
5005
+ flex-shrink: 0;
5006
+ align-items: center;
5007
+ justify-content: center;
5008
+ width: 2rem;
5009
+ height: 2rem;
5010
+ color: #d97706;
5011
+ font-size: 0.875rem;
5012
+ background: #fffbeb;
5013
+ border: 1px solid #fcd34d;
5014
+ border-radius: 0.375rem;
5015
+ box-shadow: 0 1px 2px rgb(0 0 0 / 5%);
5016
+ }
5017
+
5018
+ .issue-panel-header-content {
5019
+ flex: 1 1 0%;
5020
+ min-width: 0;
5021
+ }
5022
+
5023
+ .issue-panel-header-title-row {
5024
+ display: flex;
5025
+ flex-direction: row;
5026
+ align-items: flex-start;
5027
+ gap: 0.5rem;
5028
+ min-width: 0;
5029
+ }
5030
+
5031
+ .issue-panel-header-title {
5032
+ overflow: hidden;
5033
+ color: #111827;
5034
+ font-weight: 600;
5035
+ font-size: 1rem;
5036
+ line-height: 1.5rem;
5037
+ text-overflow: ellipsis;
5038
+ white-space: nowrap;
5039
+ }
5040
+
5041
+ .issue-panel-header-id {
5042
+ display: inline-flex;
5043
+ align-items: center;
5044
+ gap: 0.25rem;
5045
+ flex-shrink: 0;
5046
+ padding: 0.125rem 0.5rem;
5047
+ margin-top: 0.25rem;
5048
+ color: #6b7280;
5049
+ font-weight: 600;
5050
+ font-size: 0.75rem;
5051
+ background: #f9fafb;
5052
+ border: 1px solid #e5e7eb;
5053
+ border-radius: 9999px;
5054
+ }
5055
+
5056
+ .issue-panel-header-id:hover {
5057
+ color: #2563eb;
5058
+ }
5059
+
5060
+ .issue-panel-header-meta {
5061
+ display: flex;
5062
+ flex-flow: row wrap;
5063
+ align-items: center;
5064
+ gap: 0.25rem 0.75rem;
5065
+ margin-top: 0.25rem;
5066
+ color: #6b7280;
5067
+ font-size: 0.75rem;
5068
+ }
5069
+
5070
+ .issue-panel-header-actions {
5071
+ display: flex;
5072
+ flex-shrink: 0;
5073
+ flex-direction: row;
5074
+ align-items: flex-start;
5075
+ gap: 0.5rem;
5076
+ }
5077
+
5078
+ .issue-panel-header-badges {
5079
+ display: flex;
5080
+ flex-direction: row;
5081
+ align-items: flex-start;
5082
+ gap: 0.375rem;
5083
+ }
5084
+
5085
+ .issue-detail-surface {
5086
+ padding: 1rem;
5087
+ }
5088
+
5089
+ .issue-detail-grid {
5090
+ display: grid;
5091
+ grid-template-columns: minmax(0, 1fr);
5092
+ gap: 1rem;
5093
+ }
5094
+
5095
+ .issue-detail-main {
5096
+ min-width: 0;
5097
+ }
5098
+
5099
+ .issue-detail-main > * + * {
5100
+ margin-top: 1rem;
5101
+ }
5102
+
5103
+ .issue-detail-side-rail {
5104
+ min-width: 0;
5105
+ }
5106
+
5107
+ .issue-detail-side-rail > * + * {
5108
+ margin-top: 0.75rem;
5109
+ }
5110
+
5111
+ .issue-detail-message,
5112
+ .issue-detail-correspondence,
5113
+ .issue-detail-summary-card,
5114
+ .issue-detail-side-card {
5115
+ background: #fff;
5116
+ border: 1px solid #e5e7eb;
5117
+ border-radius: 0.5rem;
5118
+ box-shadow:
5119
+ 0 4px 6px -1px rgb(0 0 0 / 10%),
5120
+ 0 2px 4px -2px rgb(0 0 0 / 10%);
5121
+ }
5122
+
5123
+ .issue-detail-summary-card {
5124
+ padding: 0.875rem 1rem;
5125
+ margin-bottom: 1rem;
5126
+ }
5127
+
5128
+ .issue-detail-summary-grid {
5129
+ display: grid;
5130
+ grid-template-columns: repeat(1, minmax(0, 1fr));
5131
+ gap: 0.625rem 1rem;
5132
+ margin: 0;
5133
+ }
5134
+
5135
+ .issue-detail-summary-item {
5136
+ min-width: 0;
5137
+ overflow: hidden;
5138
+ }
5139
+
5140
+ .issue-detail-summary-item dt {
5141
+ margin-bottom: 0.25rem;
5142
+ color: #6b7280;
5143
+ font-weight: 700;
5144
+ font-size: 0.6875rem;
5145
+ letter-spacing: 0.025em;
5146
+ text-transform: uppercase;
5147
+ }
5148
+
5149
+ .issue-detail-summary-item dd {
5150
+ min-width: 0;
5151
+ margin: 0;
5152
+ overflow: hidden;
5153
+ color: #1f2937;
5154
+ font-size: 0.8125rem;
5155
+ text-overflow: ellipsis;
5156
+ white-space: nowrap;
5157
+ }
5158
+
5159
+ .issue-detail-summary-item dd > * {
5160
+ max-width: 100%;
5161
+ min-width: 0;
5162
+ }
5163
+
5164
+ .issue-detail-inline-link {
5165
+ max-width: 100%;
5166
+ overflow: hidden;
5167
+ color: #2563eb;
5168
+ font-weight: 600;
5169
+ text-align: left;
5170
+ text-overflow: ellipsis;
5171
+ text-decoration: underline;
5172
+ text-underline-offset: 2px;
5173
+ white-space: nowrap;
5174
+ }
5175
+
5176
+ .issue-detail-message {
5177
+ display: flex;
5178
+ gap: 0.75rem;
5179
+ padding: 1rem;
5180
+ border-radius: 0.75rem;
5181
+ }
5182
+
5183
+ .issue-detail-avatar {
5184
+ display: flex;
5185
+ flex-shrink: 0;
5186
+ align-items: center;
5187
+ justify-content: center;
5188
+ width: 2.5rem;
5189
+ height: 2.5rem;
5190
+ color: #1d4ed8;
5191
+ font-weight: 700;
5192
+ font-size: 0.875rem;
5193
+ background: #dbeafe;
5194
+ border-radius: 9999px;
5195
+ box-shadow: 0 1px 2px rgb(0 0 0 / 5%);
5196
+ }
5197
+
5198
+ .issue-detail-message-content {
5199
+ flex: 1 1 0%;
5200
+ min-width: 0;
5201
+ }
5202
+
5203
+ .issue-detail-message-meta {
5204
+ display: flex;
5205
+ flex-direction: row;
5206
+ align-items: flex-start;
5207
+ justify-content: space-between;
5208
+ gap: 0.75rem;
5209
+ margin-bottom: 0.75rem;
5210
+ }
5211
+
5212
+ .issue-detail-message-author {
5213
+ color: #111827;
5214
+ font-weight: 600;
5215
+ font-size: 0.875rem;
5216
+ }
5217
+
5218
+ .issue-detail-message-subtitle,
5219
+ .issue-detail-message-meta time,
5220
+ .issue-detail-section-header p {
5221
+ color: #6b7280;
5222
+ font-size: 0.75rem;
5223
+ }
5224
+
5225
+ .issue-detail-report {
5226
+ padding: 0.75rem;
5227
+ color: #1f2937;
5228
+ font-size: 0.8125rem;
5229
+ line-height: 1.375rem;
5230
+ white-space: pre-line;
5231
+ background: #f9fafb;
5232
+ border: 1px solid #f3f4f6;
5233
+ border-radius: 0.75rem;
5234
+ }
5235
+
5236
+ .issue-detail-documents {
5237
+ padding-top: 0.75rem;
5238
+ margin-top: 1rem;
5239
+ border-top: 1px solid #f3f4f6;
5240
+ }
5241
+
5242
+ .issue-detail-documents-header {
5243
+ display: flex;
5244
+ flex-direction: row;
5245
+ align-items: center;
5246
+ justify-content: space-between;
5247
+ gap: 0.75rem;
5248
+ margin-bottom: 0.75rem;
5249
+ }
5250
+
5251
+ .issue-detail-documents-title,
5252
+ .issue-detail-section-title {
5253
+ color: #4b5563;
5254
+ font-weight: 700;
5255
+ font-size: 0.75rem;
5256
+ letter-spacing: 0.025em;
5257
+ text-transform: uppercase;
5258
+ }
5259
+
5260
+ .issue-detail-documents-title {
5261
+ display: flex;
5262
+ align-items: center;
5263
+ gap: 0.5rem;
5264
+ }
5265
+
5266
+ .issue-detail-file-grid {
5267
+ display: grid;
5268
+ grid-template-columns: repeat(2, minmax(0, 1fr));
5269
+ gap: 0.5rem;
5270
+ }
5271
+
5272
+ .issue-detail-dropzone {
5273
+ display: flex;
5274
+ align-items: center;
5275
+ justify-content: center;
5276
+ min-height: 8rem;
5277
+ padding: 1rem;
5278
+ color: #4b5563;
5279
+ text-align: center;
5280
+ background: #f9fafb;
5281
+ border: 1px dashed #d1d5db;
5282
+ border-radius: 0.75rem;
5283
+ }
5284
+
5285
+ .issue-detail-dropzone-empty,
5286
+ .issue-detail-dropzone-ready {
5287
+ display: flex;
5288
+ flex-direction: column;
5289
+ align-items: center;
5290
+ gap: 0.5rem;
5291
+ }
5292
+
5293
+ .issue-detail-dropzone-empty svg,
5294
+ .issue-detail-dropzone-ready svg {
5295
+ color: #6b7280;
5296
+ font-size: 1.25rem;
5297
+ }
5298
+
5299
+ .issue-detail-upload-link {
5300
+ color: #2563eb;
5301
+ font-weight: 600;
5302
+ text-decoration: underline;
5303
+ text-underline-offset: 2px;
5304
+ }
5305
+
5306
+ .issue-detail-dropzone-progress {
5307
+ color: #2563eb;
5308
+ font-weight: 700;
5309
+ font-size: 0.75rem;
5310
+ }
5311
+
5312
+ .issue-detail-upload-queue {
5313
+ margin-bottom: 0.75rem;
5314
+ }
5315
+
5316
+ .issue-detail-upload-queue > * + * {
5317
+ margin-top: 0.5rem;
5318
+ }
5319
+
5320
+ .issue-detail-upload-row {
5321
+ display: flex;
5322
+ align-items: center;
5323
+ justify-content: space-between;
5324
+ padding: 0.5rem 0.75rem;
5325
+ color: #1e3a8a;
5326
+ font-size: 0.75rem;
5327
+ background: #eff6ff;
5328
+ border: 1px solid #bfdbfe;
5329
+ border-radius: 0.375rem;
5330
+ }
5331
+
5332
+ .issue-detail-correspondence {
5333
+ padding: 1rem;
5334
+ }
5335
+
5336
+ .issue-detail-section-header {
5337
+ display: flex;
5338
+ align-items: flex-start;
5339
+ justify-content: space-between;
5340
+ margin-bottom: 0.75rem;
5341
+ }
5342
+
5343
+ .issue-detail-comment-thread {
5344
+ font-size: 0.875rem;
5345
+ }
5346
+
5347
+ .issue-detail-side-card {
5348
+ padding: 0.75rem;
5349
+ }
5350
+
5351
+ .issue-detail-resolution-state {
5352
+ display: flex;
5353
+ gap: 0.75rem;
5354
+ padding: 0.75rem;
5355
+ margin-top: 0.75rem;
5356
+ background: #fffbeb;
5357
+ border: 1px solid #fde68a;
5358
+ border-radius: 0.5rem;
5359
+ }
5360
+
5361
+ .issue-detail-resolution-state.is-resolved {
5362
+ background: #f0fdf4;
5363
+ border-color: #bbf7d0;
5364
+ }
5365
+
5366
+ .issue-detail-resolution-icon {
5367
+ display: flex;
5368
+ flex-shrink: 0;
5369
+ align-items: center;
5370
+ justify-content: center;
5371
+ width: 2rem;
5372
+ height: 2rem;
5373
+ color: #b45309;
5374
+ background: #fef3c7;
5375
+ border-radius: 9999px;
5376
+ }
5377
+
5378
+ .issue-detail-resolution-state.is-resolved .issue-detail-resolution-icon {
5379
+ color: #15803d;
5380
+ background: #dcfce7;
5381
+ }
5382
+
5383
+ .issue-detail-resolution-title {
5384
+ color: #111827;
5385
+ font-weight: 600;
5386
+ font-size: 0.875rem;
5387
+ }
5388
+
5389
+ .issue-detail-resolution-state p {
5390
+ margin-top: 0.25rem;
5391
+ color: #6b7280;
5392
+ font-size: 0.75rem;
5393
+ line-height: 1.25rem;
5394
+ }
5395
+
5396
+ .issue-detail-meta-list {
5397
+ margin-top: 0.75rem;
5398
+ }
5399
+
5400
+ .issue-detail-meta-list > * + * {
5401
+ margin-top: 0.5rem;
5402
+ }
5403
+
5404
+ .issue-detail-meta-list > div {
5405
+ display: flex;
5406
+ align-items: center;
5407
+ justify-content: space-between;
5408
+ gap: 0.75rem;
5409
+ padding-top: 0.5rem;
5410
+ border-top: 1px dashed #e5e7eb;
5411
+ }
5412
+
5413
+ .issue-detail-meta-list dt,
5414
+ .issue-detail-resource-label,
5415
+ .issue-detail-timeline-label {
5416
+ color: #6b7280;
5417
+ font-weight: 600;
5418
+ font-size: 0.75rem;
5419
+ letter-spacing: 0.025em;
5420
+ text-transform: uppercase;
5421
+ }
5422
+
5423
+ .issue-detail-meta-list dd {
5424
+ color: #1f2937;
5425
+ font-size: 0.875rem;
5426
+ text-align: right;
5427
+ }
5428
+
5429
+ .issue-detail-resource-stack {
5430
+ margin-top: 0.75rem;
5431
+ }
5432
+
5433
+ .issue-detail-resource-stack > * + * {
5434
+ margin-top: 0.75rem;
5435
+ }
5436
+
5437
+ .issue-detail-resource-row {
5438
+ display: block;
5439
+ }
5440
+
5441
+ .issue-detail-resource-row > * + * {
5442
+ margin-top: 0.375rem;
5443
+ }
5444
+
5445
+ .issue-detail-order-card {
5446
+ display: block;
5447
+ width: 100%;
5448
+ padding: 0.75rem;
5449
+ margin-top: 0.75rem;
5450
+ overflow: hidden;
5451
+ text-align: left;
5452
+ background: #f9fafb;
5453
+ border: 1px solid #e5e7eb;
5454
+ border-radius: 0.5rem;
5455
+ box-shadow: 0 1px 2px rgb(0 0 0 / 5%);
5456
+ transition:
5457
+ background-color 0.15s ease,
5458
+ border-color 0.15s ease;
5459
+ }
5460
+
5461
+ .issue-detail-order-card:hover {
5462
+ background: #eff6ff;
5463
+ border-color: #93c5fd;
5464
+ }
5465
+
5466
+ .issue-detail-order-topline,
5467
+ .issue-detail-order-meta {
5468
+ display: flex;
5469
+ align-items: center;
5470
+ justify-content: space-between;
5471
+ gap: 0.5rem;
5472
+ }
5473
+
5474
+ .issue-detail-order-title-block {
5475
+ min-width: 0;
5476
+ }
5477
+
5478
+ .issue-detail-order-title {
5479
+ overflow: hidden;
5480
+ color: #111827;
5481
+ font-weight: 600;
5482
+ font-size: 0.875rem;
5483
+ text-overflow: ellipsis;
5484
+ white-space: nowrap;
5485
+ }
5486
+
5487
+ .issue-detail-order-subtitle,
5488
+ .issue-detail-order-meta,
5489
+ .issue-detail-timeline-value,
5490
+ .issue-detail-coordinate {
5491
+ color: #6b7280;
5492
+ font-size: 0.75rem;
5493
+ }
5494
+
5495
+ .issue-detail-order-progress {
5496
+ position: relative;
5497
+ height: 0.25rem;
5498
+ margin: 0.625rem 0 0.75rem;
5499
+ overflow: hidden;
5500
+ background: #e5e7eb;
5501
+ border-radius: 9999px;
5502
+ }
5503
+
5504
+ .issue-detail-order-progress span {
5505
+ position: absolute;
5506
+ inset: 0 auto 0 0;
5507
+ background: #3485e2;
5508
+ border-radius: inherit;
5509
+ }
5510
+
5511
+ .issue-detail-order-progress.is-pending span {
5512
+ width: 22%;
5513
+ background: #94a3b8;
5514
+ }
5515
+
5516
+ .issue-detail-order-progress.is-active span {
5517
+ width: 58%;
5518
+ }
5519
+
5520
+ .issue-detail-order-progress.is-complete span {
5521
+ width: 100%;
5522
+ background: #10b981;
5523
+ }
5524
+
5525
+ .issue-detail-order-route {
5526
+ display: grid;
5527
+ gap: 0.5rem;
5528
+ color: #64748b;
5529
+ font-size: 0.75rem;
5530
+ }
5531
+
5532
+ .issue-detail-order-stop {
5533
+ display: grid;
5534
+ grid-template-columns: 1.5rem minmax(0, 1fr);
5535
+ gap: 0.5rem;
5536
+ align-items: start;
5537
+ }
5538
+
5539
+ .issue-detail-order-stop.compact {
5540
+ opacity: 0.88;
5541
+ }
5542
+
5543
+ .issue-detail-order-stop-marker {
5544
+ display: inline-flex;
5545
+ align-items: center;
5546
+ justify-content: center;
5547
+ width: 1.5rem;
5548
+ height: 1.5rem;
5549
+ color: #fff;
5550
+ font-weight: 800;
5551
+ font-size: 0.6875rem;
5552
+ background: #64748b;
5553
+ border-radius: 9999px;
5554
+ }
5555
+
5556
+ .issue-detail-order-stop-marker.pickup {
5557
+ background: #3485e2;
5558
+ }
5559
+
5560
+ .issue-detail-order-stop-marker.dropoff {
5561
+ background: #10b981;
5562
+ }
5563
+
5564
+ .issue-detail-order-stop-marker.middle {
5565
+ color: #2563eb;
5566
+ background: #dbeafe;
5567
+ }
5568
+
5569
+ .issue-detail-order-stop-label {
5570
+ color: #94a3b8;
5571
+ font-weight: 700;
5572
+ font-size: 0.625rem;
5573
+ text-transform: uppercase;
5574
+ }
5575
+
5576
+ .issue-detail-order-stop-address {
5577
+ overflow: hidden;
5578
+ color: #334155;
5579
+ font-weight: 700;
5580
+ font-size: 0.75rem;
5581
+ line-height: 1.2rem;
5582
+ text-overflow: ellipsis;
5583
+ white-space: nowrap;
5584
+ }
5585
+
5586
+ .issue-detail-order-meta {
5587
+ flex-flow: row wrap;
5588
+ justify-content: flex-start;
5589
+ margin-top: 0.75rem;
5590
+ font-size: 0.6875rem;
5591
+ }
5592
+
5593
+ .issue-detail-order-meta span {
5594
+ display: inline-flex;
5595
+ align-items: center;
5596
+ gap: 0.25rem;
5597
+ }
5598
+
5599
+ .issue-detail-empty {
5600
+ display: flex;
5601
+ align-items: center;
5602
+ justify-content: center;
5603
+ gap: 0.5rem;
5604
+ padding: 1rem;
5605
+ margin-top: 0.75rem;
5606
+ color: #6b7280;
5607
+ font-size: 0.875rem;
5608
+ background: #f9fafb;
5609
+ border: 1px dashed #e5e7eb;
5610
+ border-radius: 0.5rem;
5611
+ }
5612
+
5613
+ .issue-detail-empty-compact {
5614
+ padding: 0.75rem;
5615
+ font-size: 0.75rem;
5616
+ }
5617
+
5618
+ .issue-detail-tags {
5619
+ display: flex;
5620
+ flex-flow: row wrap;
5621
+ gap: 0.375rem;
5622
+ margin-top: 0.75rem;
5623
+ }
5624
+
5625
+ .issue-detail-timeline {
5626
+ margin-top: 0.75rem;
5627
+ }
5628
+
5629
+ .issue-detail-timeline > * + * {
5630
+ margin-top: 0.75rem;
5631
+ }
5632
+
5633
+ .issue-detail-timeline li {
5634
+ display: flex;
5635
+ gap: 0.75rem;
5636
+ }
5637
+
5638
+ .issue-detail-timeline-marker {
5639
+ display: flex;
5640
+ flex-shrink: 0;
5641
+ align-items: center;
5642
+ justify-content: center;
5643
+ width: 1.75rem;
5644
+ height: 1.75rem;
5645
+ color: #6b7280;
5646
+ font-size: 0.75rem;
5647
+ background: #f9fafb;
5648
+ border: 1px solid #e5e7eb;
5649
+ border-radius: 9999px;
5650
+ }
5651
+
5652
+ .issue-timeline {
5653
+ margin-top: 0.75rem;
5654
+ }
5655
+
5656
+ .issue-timeline-loading {
5657
+ display: flex;
5658
+ justify-content: center;
5659
+ padding: 1rem;
5660
+ }
5661
+
5662
+ .issue-timeline-list {
5663
+ position: relative;
5664
+ display: flex;
5665
+ flex-direction: column;
5666
+ gap: 0.875rem;
5667
+ margin: 0;
5668
+ padding: 0;
5669
+ list-style: none;
5670
+ }
5671
+
5672
+ .issue-timeline-list::before {
5673
+ position: absolute;
5674
+ top: 0.875rem;
5675
+ bottom: 0.875rem;
5676
+ left: 0.875rem;
5677
+ width: 1px;
5678
+ background: #d1d5db;
5679
+ content: '';
5680
+ }
5681
+
5682
+ .issue-timeline-event {
5683
+ position: relative;
5684
+ display: grid;
5685
+ grid-template-columns: 1.75rem minmax(0, 1fr);
5686
+ gap: 0.75rem;
5687
+ }
5688
+
5689
+ .issue-timeline-marker {
5690
+ z-index: 1;
5691
+ display: flex;
5692
+ align-items: center;
5693
+ justify-content: center;
5694
+ width: 1.75rem;
5695
+ height: 1.75rem;
5696
+ color: #4b5563;
5697
+ font-size: 0.75rem;
5698
+ background: #fff;
5699
+ border: 1px solid #d1d5db;
5700
+ border-radius: 9999px;
5701
+ }
5702
+
5703
+ .issue-timeline-card {
5704
+ padding: 0.625rem 0.75rem;
5705
+ background: #f9fafb;
5706
+ border: 1px solid #e5e7eb;
5707
+ border-radius: 0.625rem;
5708
+ }
5709
+
5710
+ .issue-timeline-card-header {
5711
+ display: flex;
5712
+ align-items: flex-start;
5713
+ justify-content: space-between;
5714
+ gap: 0.75rem;
5715
+ }
5716
+
5717
+ .issue-timeline-label {
5718
+ color: #111827;
5719
+ font-weight: 600;
5720
+ font-size: 0.8125rem;
5721
+ line-height: 1.25rem;
5722
+ }
5723
+
5724
+ .issue-timeline-actor,
5725
+ .issue-timeline-card time,
5726
+ .issue-timeline-card p {
5727
+ color: #6b7280;
5728
+ font-size: 0.75rem;
5729
+ line-height: 1.125rem;
5730
+ }
5731
+
5732
+ .issue-timeline-card p {
5733
+ margin-top: 0.375rem;
5734
+ }
5735
+
5736
+ .issue-timeline-link {
5737
+ display: inline-flex;
5738
+ align-items: center;
5739
+ gap: 0.375rem;
5740
+ margin-top: 0.5rem;
5741
+ color: #2563eb;
5742
+ font-weight: 600;
5743
+ font-size: 0.75rem;
5744
+ }
5745
+
5746
+ .issue-timeline-event.tone-green .issue-timeline-marker {
5747
+ color: #15803d;
5748
+ border-color: #86efac;
5749
+ }
5750
+
5751
+ .issue-timeline-event.tone-blue .issue-timeline-marker {
5752
+ color: #2563eb;
5753
+ border-color: #93c5fd;
5754
+ }
5755
+
5756
+ .issue-timeline-event.tone-orange .issue-timeline-marker {
5757
+ color: #d97706;
5758
+ border-color: #fcd34d;
5759
+ }
5760
+
5761
+ .issue-timeline-event.tone-red .issue-timeline-marker {
5762
+ color: #dc2626;
5763
+ border-color: #fca5a5;
5764
+ }
5765
+
5766
+ .issue-timeline-event.tone-purple .issue-timeline-marker,
5767
+ .issue-timeline-event.tone-indigo .issue-timeline-marker {
5768
+ color: #4f46e5;
5769
+ border-color: #a5b4fc;
5770
+ }
5771
+
5772
+ .issue-detail-custom-fields {
5773
+ display: block;
5774
+ }
5775
+
5776
+ @media (width >= 768px) {
5777
+ .issue-detail-summary-grid {
5778
+ grid-template-columns: repeat(2, minmax(0, 1fr));
5779
+ }
5780
+
5781
+ .issue-detail-grid {
5782
+ grid-template-columns: repeat(5, minmax(0, 1fr));
5783
+ }
5784
+
5785
+ .issue-detail-main {
5786
+ grid-column: span 3 / span 3;
5787
+ }
5788
+
5789
+ .issue-detail-side-rail {
5790
+ grid-column: span 2 / span 2;
5791
+ }
5792
+ }
5793
+
5794
+ @media (width >= 1180px) {
5795
+ .issue-detail-summary-grid {
5796
+ grid-template-columns: repeat(4, minmax(0, 1fr));
5797
+ }
5798
+ }
5799
+
5800
+ body[data-theme='dark'] .issue-panel-header {
5801
+ background: #111827;
5802
+ border-color: #374151;
5803
+ }
5804
+
5805
+ body[data-theme='dark'] .issue-detail-message,
5806
+ body[data-theme='dark'] .issue-detail-correspondence,
5807
+ body[data-theme='dark'] .issue-detail-summary-card,
5808
+ body[data-theme='dark'] .issue-detail-side-card {
5809
+ background: #1f2937;
5810
+ border-color: #374151;
5811
+ box-shadow:
5812
+ 0 10px 15px -3px rgb(0 0 0 / 20%),
5813
+ 0 4px 6px -4px rgb(0 0 0 / 20%);
5814
+ }
5815
+
5816
+ body[data-theme='dark'] .issue-panel-header-icon {
5817
+ background: #111827;
5818
+ border-color: #374151;
5819
+ }
5820
+
5821
+ body[data-theme='dark'] .issue-detail-report,
5822
+ body[data-theme='dark'] .issue-detail-resolution-state,
5823
+ body[data-theme='dark'] .issue-detail-order-card,
5824
+ body[data-theme='dark'] .issue-detail-empty,
5825
+ body[data-theme='dark'] .issue-detail-timeline-marker {
5826
+ background: #374151;
5827
+ border-color: #374151;
5828
+ }
5829
+
5830
+ body[data-theme='dark'] .issue-panel-header-title,
5831
+ body[data-theme='dark'] .issue-detail-message-author,
5832
+ body[data-theme='dark'] .issue-detail-resolution-title,
5833
+ body[data-theme='dark'] .issue-detail-meta-list dd,
5834
+ body[data-theme='dark'] .issue-detail-summary-item dd,
5835
+ body[data-theme='dark'] .issue-detail-order-title,
5836
+ body[data-theme='dark'] .issue-detail-order-stop-address,
5837
+ body[data-theme='dark'] .issue-detail-report {
5838
+ color: #f9fafb;
5839
+ }
5840
+
5841
+ body[data-theme='dark'] .issue-panel-header-meta,
5842
+ body[data-theme='dark'] .issue-detail-message-subtitle,
5843
+ body[data-theme='dark'] .issue-detail-message-meta time,
5844
+ body[data-theme='dark'] .issue-detail-section-header p,
5845
+ body[data-theme='dark'] .issue-detail-resolution-state p,
5846
+ body[data-theme='dark'] .issue-detail-meta-list dt,
5847
+ body[data-theme='dark'] .issue-detail-summary-item dt,
5848
+ body[data-theme='dark'] .issue-detail-resource-label,
5849
+ body[data-theme='dark'] .issue-detail-timeline-label,
5850
+ body[data-theme='dark'] .issue-detail-order-subtitle,
5851
+ body[data-theme='dark'] .issue-detail-order-route,
5852
+ body[data-theme='dark'] .issue-detail-order-meta,
5853
+ body[data-theme='dark'] .issue-detail-timeline-value,
5854
+ body[data-theme='dark'] .issue-detail-coordinate,
5855
+ body[data-theme='dark'] .issue-detail-empty {
5856
+ color: #9ca3af;
5857
+ }
5858
+
5859
+ body[data-theme='dark'] .issue-panel-header-id {
5860
+ color: #9ca3af;
5861
+ background: #111827;
5862
+ border-color: #374151;
5863
+ }
5864
+
5865
+ body[data-theme='dark'] .issue-panel-header-id:hover {
5866
+ color: #93c5fd;
5867
+ }
5868
+
5869
+ body[data-theme='dark'] .issue-detail-documents {
5870
+ border-top-color: #374151;
5871
+ }
5872
+
5873
+ body[data-theme='dark'] .issue-detail-documents-title,
5874
+ body[data-theme='dark'] .issue-detail-section-title {
5875
+ color: #d1d5db;
5876
+ }
5877
+
5878
+ body[data-theme='dark'] .issue-detail-upload-row {
5879
+ color: #dbeafe;
5880
+ background: #1e3a8a;
5881
+ border-color: #1e40af;
5882
+ }
5883
+
5884
+ body[data-theme='dark'] .issue-detail-resolution-icon {
5885
+ color: #fde68a;
5886
+ background: #78350f;
5887
+ }
5888
+
5889
+ body[data-theme='dark'] .issue-detail-resolution-state.is-resolved .issue-detail-resolution-icon {
5890
+ color: #bbf7d0;
5891
+ background: #14532d;
5892
+ }
5893
+
5894
+ body[data-theme='dark'] .issue-detail-meta-list > div {
5895
+ border-top-color: #374151;
5896
+ }
5897
+
5898
+ body[data-theme='dark'] .issue-detail-order-card:hover {
5899
+ background: #374151;
5900
+ border-color: #2563eb;
5901
+ }
5902
+
5903
+ body[data-theme='dark'] .issue-detail-avatar {
5904
+ color: #bfdbfe;
5905
+ background: #1e3a8a;
5906
+ }
5907
+
5908
+ body[data-theme='dark'] .issue-detail-order-progress {
5909
+ background: #4b5563;
5910
+ }
5911
+
5912
+ body[data-theme='dark'] .issue-detail-order-stop-marker.middle {
5913
+ color: #93c5fd;
5914
+ background: rgb(37 99 235 / 24%);
5915
+ }
5916
+
5917
+ body[data-theme='dark'] .issue-detail-dropzone {
5918
+ color: #d1d5db;
5919
+ background: #1f2937;
5920
+ border-color: #4b5563;
5921
+ }
5922
+
5923
+ body[data-theme='dark'] .issue-detail-dropzone-empty svg,
5924
+ body[data-theme='dark'] .issue-detail-dropzone-ready svg {
5925
+ color: #d1d5db;
5926
+ }
5927
+
5928
+ body[data-theme='dark'] .issue-detail-upload-link,
5929
+ body[data-theme='dark'] .issue-detail-dropzone-progress,
5930
+ body[data-theme='dark'] .issue-timeline-link {
5931
+ color: #93c5fd;
5932
+ }
5933
+
5934
+ body[data-theme='dark'] .issue-timeline-list::before {
5935
+ background: #4b5563;
5936
+ }
5937
+
5938
+ body[data-theme='dark'] .issue-timeline-marker,
5939
+ body[data-theme='dark'] .issue-timeline-card {
5940
+ background: #1f2937;
5941
+ border-color: #4b5563;
5942
+ }
5943
+
5944
+ body[data-theme='dark'] .issue-timeline-label {
5945
+ color: #f9fafb;
5946
+ }
5947
+
5948
+ body[data-theme='dark'] .issue-timeline-actor,
5949
+ body[data-theme='dark'] .issue-timeline-card time,
5950
+ body[data-theme='dark'] .issue-timeline-card p {
5951
+ color: #d1d5db;
5952
+ }