@fleetbase/fleetops-engine 0.6.46 → 0.6.48

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 (95) hide show
  1. package/addon/components/admin/routing-settings.hbs +71 -0
  2. package/addon/components/admin/routing-settings.js +124 -0
  3. package/addon/components/customer/orders.js +1 -1
  4. package/addon/components/display-place.hbs +1 -1
  5. package/addon/components/map/order-list-overlay/order.hbs +18 -3
  6. package/addon/components/map/toolbar.hbs +2 -2
  7. package/addon/components/map/toolbar.js +10 -2
  8. package/addon/components/orchestrator/phase-builder.hbs +28 -5
  9. package/addon/components/orchestrator/phase-builder.js +21 -1
  10. package/addon/components/orchestrator/resource-panel.hbs +19 -1
  11. package/addon/components/orchestrator/resource-panel.js +4 -0
  12. package/addon/components/orchestrator-workbench.js +3 -1
  13. package/addon/components/order/details/purchase-rate.hbs +19 -22
  14. package/addon/components/order/details/route.hbs +26 -1
  15. package/addon/components/order/details/route.js +50 -0
  16. package/addon/components/order/details/tracking.hbs +171 -27
  17. package/addon/components/order/details/tracking.js +457 -0
  18. package/addon/components/order/form/details.hbs +1 -2
  19. package/addon/components/order/form/details.js +6 -0
  20. package/addon/components/order/form/route.js +9 -1
  21. package/addon/components/order/kanban-card.hbs +18 -3
  22. package/addon/components/order-list-overlay/order.hbs +18 -3
  23. package/addon/components/order-progress-card.hbs +21 -6
  24. package/addon/components/order-tracking-lookup.hbs +7 -7
  25. package/addon/components/order-tracking-lookup.js +1 -1
  26. package/addon/components/route-list.hbs +78 -8
  27. package/addon/components/route-list.js +48 -6
  28. package/addon/components/tracking-stop-progress.hbs +45 -0
  29. package/addon/components/tracking-stop-progress.js +79 -0
  30. package/addon/controllers/settings/payments/index.js +1 -1
  31. package/addon/controllers/settings/routing.js +98 -1
  32. package/addon/helpers/format-duration.js +38 -0
  33. package/addon/routes/application.js +6 -0
  34. package/addon/services/order-list-overlay.js +2 -2
  35. package/addon/styles/fleetops-engine.css +733 -0
  36. package/addon/templates/settings/routing.hbs +60 -2
  37. package/app/components/tracking-stop-progress.js +1 -0
  38. package/app/helpers/format-duration.js +1 -0
  39. package/composer.json +1 -1
  40. package/extension.json +1 -1
  41. package/package.json +3 -3
  42. package/pnpm-workspace.yaml +7 -0
  43. package/server/config/fleetops.php +32 -11
  44. package/server/migrations/2026_05_13_000001_repair_customer_contact_user_types.php +86 -0
  45. package/server/seeders/VroomOrchestrationSeeder.php +402 -0
  46. package/server/src/Http/Controllers/Api/v1/OrchestrationController.php +64 -0
  47. package/server/src/Http/Controllers/Api/v1/OrderController.php +26 -26
  48. package/server/src/Http/Controllers/Api/v1/PayloadController.php +10 -10
  49. package/server/src/Http/Controllers/Api/v1/ServiceQuoteController.php +1 -1
  50. package/server/src/Http/Controllers/Internal/v1/ContactController.php +41 -0
  51. package/server/src/Http/Controllers/Internal/v1/LiveController.php +6 -42
  52. package/server/src/Http/Controllers/Internal/v1/OrchestrationController.php +1 -1
  53. package/server/src/Http/Controllers/Internal/v1/OrderController.php +69 -15
  54. package/server/src/Http/Controllers/Internal/v1/ServiceQuoteController.php +1 -1
  55. package/server/src/Http/Controllers/Internal/v1/SettingController.php +119 -12
  56. package/server/src/Http/Resources/v1/Index/Payload.php +2 -2
  57. package/server/src/Models/Contact.php +122 -13
  58. package/server/src/Models/Order.php +1 -1
  59. package/server/src/Models/Payload.php +8 -8
  60. package/server/src/Models/Place.php +0 -3
  61. package/server/src/Models/ServiceRate.php +1 -1
  62. package/server/src/Observers/ContactObserver.php +8 -0
  63. package/server/src/Orchestration/Engines/CapacityAllocationEngine.php +220 -0
  64. package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +330 -38
  65. package/server/src/Orchestration/Support/OrchestrationPayloadBuilder.php +259 -51
  66. package/server/src/Providers/FleetOpsServiceProvider.php +27 -0
  67. package/server/src/Support/LiveOrderQuery.php +75 -0
  68. package/server/src/Support/Metrics.php +15 -0
  69. package/server/src/Support/OSRM.php +11 -6
  70. package/server/src/Support/OrderTracker.php +7 -582
  71. package/server/src/Support/Utils.php +1 -1
  72. package/server/src/Tracking/Contracts/TrackingProviderInterface.php +19 -0
  73. package/server/src/Tracking/Providers/CalculatedTrackingProvider.php +65 -0
  74. package/server/src/Tracking/Providers/GoogleRoutesTrackingProvider.php +118 -0
  75. package/server/src/Tracking/Providers/OsrmTrackingProvider.php +71 -0
  76. package/server/src/Tracking/README.md +25 -0
  77. package/server/src/Tracking/Support/FakeTrackingProvider.php +42 -0
  78. package/server/src/Tracking/TrackingContext.php +63 -0
  79. package/server/src/Tracking/TrackingContextBuilder.php +204 -0
  80. package/server/src/Tracking/TrackingIntelligenceService.php +180 -0
  81. package/server/src/Tracking/TrackingOptions.php +49 -0
  82. package/server/src/Tracking/TrackingProviderCapabilities.php +30 -0
  83. package/server/src/Tracking/TrackingProviderManager.php +89 -0
  84. package/server/src/Tracking/TrackingProviderRegistry.php +35 -0
  85. package/server/src/Tracking/TrackingProviderResult.php +20 -0
  86. package/server/src/Tracking/TrackingStop.php +59 -0
  87. package/server/src/routes.php +11 -0
  88. package/server/tests/CapacityAllocationEngineTest.php +108 -0
  89. package/server/tests/LiveOrderQueryTest.php +34 -0
  90. package/server/tests/OrchestrationPayloadBuilderTest.php +132 -0
  91. package/server/tests/OrchestratorConsumableApiTest.php +74 -0
  92. package/server/tests/PingDriverEndpointTest.php +19 -0
  93. package/server/tests/TrackingIntelligenceTest.php +176 -0
  94. package/server/tests/VroomOrchestrationEngineTest.php +159 -0
  95. package/translations/en-us.yaml +4 -0
@@ -4064,3 +4064,736 @@ body[data-theme='dark'] .next-google-container-map .fleetops-google-draw-actions
4064
4064
  .gm-style .gm-style-iw-tc::after {
4065
4065
  background: #111827 !important;
4066
4066
  }
4067
+
4068
+ /* Tracking intelligence panel */
4069
+ .tracking-intelligence {
4070
+ display: flex;
4071
+ flex-direction: column;
4072
+ gap: 0.75rem;
4073
+ }
4074
+
4075
+ .tracking-intelligence__status {
4076
+ display: flex;
4077
+ flex-wrap: wrap;
4078
+ align-items: center;
4079
+ gap: 0.375rem;
4080
+ font-size: 0.72rem;
4081
+ }
4082
+
4083
+ .tracking-intelligence__updated {
4084
+ margin-left: auto;
4085
+ color: #6b7280;
4086
+ white-space: nowrap;
4087
+ }
4088
+
4089
+ [data-theme='dark'] .tracking-intelligence__updated {
4090
+ color: #6b7280;
4091
+ }
4092
+
4093
+ .tracking-intelligence-pill {
4094
+ display: inline-flex;
4095
+ align-items: center;
4096
+ gap: 0.35rem;
4097
+ padding: 0.125rem 0.5rem;
4098
+ border: 1px solid transparent;
4099
+ border-radius: 9999px;
4100
+ font-size: 0.7rem;
4101
+ font-weight: 600;
4102
+ line-height: 1.35;
4103
+ white-space: nowrap;
4104
+ }
4105
+
4106
+ .tracking-intelligence-pill__dot {
4107
+ width: 0.35rem;
4108
+ height: 0.35rem;
4109
+ border-radius: 9999px;
4110
+ background: currentcolor;
4111
+ }
4112
+
4113
+ .tracking-intelligence-pill--good {
4114
+ color: #16a34a;
4115
+ background: rgba(34, 197, 94, 10%);
4116
+ border-color: rgba(34, 197, 94, 24%);
4117
+ }
4118
+
4119
+ .tracking-intelligence-pill--warn {
4120
+ color: #d97706;
4121
+ background: rgba(245, 158, 11, 12%);
4122
+ border-color: rgba(245, 158, 11, 28%);
4123
+ }
4124
+
4125
+ .tracking-intelligence-pill--bad {
4126
+ color: #dc2626;
4127
+ background: rgba(239, 68, 68, 11%);
4128
+ border-color: rgba(239, 68, 68, 28%);
4129
+ }
4130
+
4131
+ .tracking-intelligence-pill--muted {
4132
+ color: #6b7280;
4133
+ background: rgba(107, 114, 128, 10%);
4134
+ border-color: rgba(107, 114, 128, 22%);
4135
+ }
4136
+
4137
+ [data-theme='dark'] .tracking-intelligence-pill--good {
4138
+ color: #5bc796;
4139
+ background: rgba(91, 199, 150, 12%);
4140
+ }
4141
+
4142
+ [data-theme='dark'] .tracking-intelligence-pill--warn {
4143
+ color: #e5a14b;
4144
+ background: rgba(229, 161, 75, 12%);
4145
+ border-color: rgba(229, 161, 75, 32%);
4146
+ }
4147
+
4148
+ [data-theme='dark'] .tracking-intelligence-pill--bad {
4149
+ color: #e26b6b;
4150
+ background: rgba(226, 107, 107, 13%);
4151
+ border-color: rgba(226, 107, 107, 32%);
4152
+ }
4153
+
4154
+ [data-theme='dark'] .tracking-intelligence-pill--muted {
4155
+ color: #7c8896;
4156
+ background: rgba(255, 255, 255, 4%);
4157
+ border-color: #232c38;
4158
+ }
4159
+
4160
+ .tracking-intelligence-alert {
4161
+ display: grid;
4162
+ grid-template-columns: 1.125rem minmax(0, 1fr) auto;
4163
+ gap: 0.625rem;
4164
+ align-items: flex-start;
4165
+ padding: 0.625rem 0.7rem;
4166
+ border: 1px solid rgba(245, 158, 11, 28%);
4167
+ border-radius: 0.5rem;
4168
+ background: rgba(245, 158, 11, 10%);
4169
+ color: #92400e;
4170
+ font-size: 0.75rem;
4171
+ }
4172
+
4173
+ .tracking-intelligence-alert--critical {
4174
+ border-color: rgba(239, 68, 68, 28%);
4175
+ background: rgba(239, 68, 68, 10%);
4176
+ color: #991b1b;
4177
+ }
4178
+
4179
+ .tracking-intelligence-alert__icon {
4180
+ display: flex;
4181
+ width: 1.125rem;
4182
+ height: 1.125rem;
4183
+ align-items: center;
4184
+ justify-content: center;
4185
+ border-radius: 0.3125rem;
4186
+ background: rgba(0, 0, 0, 10%);
4187
+ }
4188
+
4189
+ .tracking-intelligence-alert__title {
4190
+ color: #111827;
4191
+ font-weight: 700;
4192
+ }
4193
+
4194
+ .tracking-intelligence-alert__body {
4195
+ margin-top: 0.125rem;
4196
+ color: #78350f;
4197
+ line-height: 1.35;
4198
+ }
4199
+
4200
+ [data-theme='dark'] .tracking-intelligence-alert {
4201
+ border-color: rgba(229, 161, 75, 32%);
4202
+ background: rgba(229, 161, 75, 12%);
4203
+ color: #e5a14b;
4204
+ }
4205
+
4206
+ [data-theme='dark'] .tracking-intelligence-alert--critical {
4207
+ border-color: rgba(226, 107, 107, 32%);
4208
+ background: rgba(226, 107, 107, 13%);
4209
+ color: #e26b6b;
4210
+ }
4211
+
4212
+ [data-theme='dark'] .tracking-intelligence-alert__title {
4213
+ color: #eceff4;
4214
+ }
4215
+
4216
+ [data-theme='dark'] .tracking-intelligence-alert__body {
4217
+ color: #b6bfca;
4218
+ }
4219
+
4220
+ .tracking-intelligence-alert--critical .tracking-intelligence-alert__cta {
4221
+ border-color: rgba(239, 68, 68, 30%);
4222
+ background: rgba(239, 68, 68, 8%);
4223
+ color: #b91c1c;
4224
+ }
4225
+
4226
+ [data-theme='dark'] .tracking-intelligence-alert--critical .tracking-intelligence-alert__cta {
4227
+ border-color: rgba(226, 107, 107, 32%);
4228
+ background: rgba(226, 107, 107, 10%);
4229
+ color: #e26b6b;
4230
+ }
4231
+
4232
+ .tracking-intelligence__eta-grid {
4233
+ display: grid;
4234
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
4235
+ gap: 0.5rem;
4236
+ }
4237
+
4238
+ .tracking-intelligence-cell,
4239
+ .tracking-intelligence-destination,
4240
+ .tracking-intelligence-distance,
4241
+ .tracking-intelligence-diagnostics,
4242
+ .tracking-intelligence-labels,
4243
+ .tracking-stop-progress {
4244
+ border: 1px solid #e5e7eb;
4245
+ border-radius: 0.5rem;
4246
+ background: #f9fafb;
4247
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 8%);
4248
+ }
4249
+
4250
+ [data-theme='dark'] .tracking-intelligence-cell,
4251
+ [data-theme='dark'] .tracking-intelligence-destination,
4252
+ [data-theme='dark'] .tracking-intelligence-distance,
4253
+ [data-theme='dark'] .tracking-intelligence-diagnostics,
4254
+ [data-theme='dark'] .tracking-intelligence-labels,
4255
+ [data-theme='dark'] .tracking-stop-progress {
4256
+ border-color: #374151;
4257
+ background: #1f2937;
4258
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 18%);
4259
+ }
4260
+
4261
+ .tracking-intelligence-cell {
4262
+ min-width: 0;
4263
+ padding: 0.6rem 0.7rem;
4264
+ }
4265
+
4266
+ .tracking-intelligence-cell--accent {
4267
+ border-color: rgba(245, 158, 11, 32%);
4268
+ background: linear-gradient(180deg, rgba(245, 158, 11, 8%), transparent), #f9fafb;
4269
+ }
4270
+
4271
+ [data-theme='dark'] .tracking-intelligence-cell--accent {
4272
+ border-color: rgba(229, 161, 75, 32%);
4273
+ background: linear-gradient(180deg, rgba(229, 161, 75, 8%), transparent), #1f2937;
4274
+ }
4275
+
4276
+ .tracking-intelligence-cell__label {
4277
+ display: flex;
4278
+ flex-wrap: wrap;
4279
+ align-items: center;
4280
+ gap: 0.35rem;
4281
+ margin-bottom: 0.3rem;
4282
+ color: #6b7280;
4283
+ font-size: 0.62rem;
4284
+ font-weight: 700;
4285
+ letter-spacing: 0.08em;
4286
+ text-transform: uppercase;
4287
+ }
4288
+
4289
+ .tracking-intelligence-cell__value {
4290
+ overflow: hidden;
4291
+ color: #111827;
4292
+ font-size: 1rem;
4293
+ font-weight: 700;
4294
+ line-height: 1.2;
4295
+ text-overflow: ellipsis;
4296
+ white-space: nowrap;
4297
+ }
4298
+
4299
+ .tracking-intelligence-cell--accent .tracking-intelligence-cell__value {
4300
+ color: #d97706;
4301
+ }
4302
+
4303
+ .tracking-intelligence-cell__value--muted {
4304
+ color: #6b7280;
4305
+ text-decoration: line-through;
4306
+ text-decoration-color: #ef4444;
4307
+ text-decoration-thickness: 1px;
4308
+ }
4309
+
4310
+ .tracking-intelligence-cell__sub {
4311
+ margin-top: 0.2rem;
4312
+ overflow: hidden;
4313
+ color: #6b7280;
4314
+ font-size: 0.68rem;
4315
+ line-height: 1.25;
4316
+ text-overflow: ellipsis;
4317
+ white-space: nowrap;
4318
+ }
4319
+
4320
+ .tracking-intelligence-cell__sub--warn {
4321
+ color: #b45309;
4322
+ white-space: normal;
4323
+ }
4324
+
4325
+ [data-theme='dark'] .tracking-intelligence-cell__label,
4326
+ [data-theme='dark'] .tracking-intelligence-cell__sub {
4327
+ color: #7c8896;
4328
+ }
4329
+
4330
+ [data-theme='dark'] .tracking-intelligence-cell__value {
4331
+ color: #eceff4;
4332
+ }
4333
+
4334
+ [data-theme='dark'] .tracking-intelligence-cell--accent .tracking-intelligence-cell__value {
4335
+ color: #e5a14b;
4336
+ }
4337
+
4338
+ [data-theme='dark'] .tracking-intelligence-cell__value--muted {
4339
+ color: #7c8896;
4340
+ }
4341
+
4342
+ [data-theme='dark'] .tracking-intelligence-cell__sub--warn {
4343
+ color: #e5a14b;
4344
+ }
4345
+
4346
+ .tracking-intelligence-tag {
4347
+ padding: 0.0625rem 0.3rem;
4348
+ border-radius: 0.2rem;
4349
+ background: rgba(245, 158, 11, 12%);
4350
+ color: #d97706;
4351
+ font-size: 0.55rem;
4352
+ font-weight: 800;
4353
+ }
4354
+
4355
+ .tracking-intelligence-confidence {
4356
+ display: grid;
4357
+ grid-template-columns: auto minmax(0, 1fr) auto;
4358
+ gap: 0.5rem;
4359
+ align-items: center;
4360
+ font-size: 0.7rem;
4361
+ }
4362
+
4363
+ .tracking-intelligence-confidence__label,
4364
+ .tracking-intelligence-confidence__value {
4365
+ color: #6b7280;
4366
+ font-weight: 700;
4367
+ text-transform: uppercase;
4368
+ }
4369
+
4370
+ .tracking-intelligence-confidence__segments {
4371
+ display: flex;
4372
+ gap: 0.125rem;
4373
+ }
4374
+
4375
+ .tracking-intelligence-confidence__segments span {
4376
+ height: 0.25rem;
4377
+ flex: 1;
4378
+ border-radius: 0.125rem;
4379
+ background: #e5e7eb;
4380
+ }
4381
+
4382
+ .tracking-intelligence-confidence__segments .is-lit {
4383
+ background: #d97706;
4384
+ }
4385
+
4386
+ .tracking-intelligence-confidence__segments.tracking-intelligence-pill--good .is-lit {
4387
+ background: #16a34a;
4388
+ }
4389
+
4390
+ .tracking-intelligence-confidence__segments.tracking-intelligence-pill--bad .is-lit {
4391
+ background: #dc2626;
4392
+ }
4393
+
4394
+ [data-theme='dark'] .tracking-intelligence-confidence__label,
4395
+ [data-theme='dark'] .tracking-intelligence-confidence__value {
4396
+ color: #7c8896;
4397
+ }
4398
+
4399
+ [data-theme='dark'] .tracking-intelligence-confidence__segments span {
4400
+ background: #232c38;
4401
+ }
4402
+
4403
+ [data-theme='dark'] .tracking-intelligence-confidence__segments .is-lit {
4404
+ background: #e5a14b;
4405
+ }
4406
+
4407
+ .tracking-intelligence-destination {
4408
+ display: flex;
4409
+ gap: 0.625rem;
4410
+ align-items: flex-start;
4411
+ padding: 0.65rem 0.7rem;
4412
+ }
4413
+
4414
+ .tracking-intelligence-destination__marker {
4415
+ display: flex;
4416
+ width: 1.5rem;
4417
+ height: 1.5rem;
4418
+ flex-shrink: 0;
4419
+ align-items: center;
4420
+ justify-content: center;
4421
+ border-radius: 9999px;
4422
+ background: #f59e0b;
4423
+ color: #1f1300;
4424
+ font-size: 0.7rem;
4425
+ font-weight: 800;
4426
+ }
4427
+
4428
+ .tracking-intelligence-destination__label {
4429
+ color: #6b7280;
4430
+ font-size: 0.62rem;
4431
+ font-weight: 800;
4432
+ letter-spacing: 0.08em;
4433
+ text-transform: uppercase;
4434
+ }
4435
+
4436
+ .tracking-intelligence-destination__address {
4437
+ margin-top: 0.15rem;
4438
+ color: #111827;
4439
+ font-size: 0.82rem;
4440
+ font-weight: 700;
4441
+ line-height: 1.3;
4442
+ }
4443
+
4444
+ .tracking-intelligence-destination__eta {
4445
+ margin-top: 0.2rem;
4446
+ color: #6b7280;
4447
+ font-size: 0.7rem;
4448
+ }
4449
+
4450
+ [data-theme='dark'] .tracking-intelligence-destination__label,
4451
+ [data-theme='dark'] .tracking-intelligence-destination__eta {
4452
+ color: #7c8896;
4453
+ }
4454
+
4455
+ [data-theme='dark'] .tracking-intelligence-destination__address {
4456
+ color: #eceff4;
4457
+ }
4458
+
4459
+ .tracking-intelligence-distance {
4460
+ padding: 0.6rem 0.7rem;
4461
+ }
4462
+
4463
+ .tracking-intelligence-distance__row {
4464
+ display: grid;
4465
+ grid-template-columns: minmax(0, 1fr) auto;
4466
+ gap: 0.75rem;
4467
+ align-items: center;
4468
+ color: #6b7280;
4469
+ font-size: 0.72rem;
4470
+ }
4471
+
4472
+ .tracking-intelligence-distance__row + .tracking-intelligence-distance__row {
4473
+ margin-top: 0.35rem;
4474
+ }
4475
+
4476
+ .tracking-intelligence-distance__row strong {
4477
+ color: #111827;
4478
+ }
4479
+
4480
+ .tracking-intelligence-distance__bar {
4481
+ grid-column: 1 / -1;
4482
+ height: 0.32rem;
4483
+ overflow: hidden;
4484
+ border-radius: 9999px;
4485
+ background: #e5e7eb;
4486
+ }
4487
+
4488
+ .tracking-intelligence-distance__bar span {
4489
+ display: block;
4490
+ height: 100%;
4491
+ border-radius: inherit;
4492
+ background: #f59e0b;
4493
+ }
4494
+
4495
+ .tracking-intelligence-distance__bar--secondary span {
4496
+ background: #38bdf8;
4497
+ }
4498
+
4499
+ .tracking-intelligence-distance__foot {
4500
+ margin-top: 0.5rem;
4501
+ padding-top: 0.45rem;
4502
+ border-top: 1px dashed #d1d5db;
4503
+ color: #9ca3af;
4504
+ font-size: 0.65rem;
4505
+ }
4506
+
4507
+ [data-theme='dark'] .tracking-intelligence-distance__row {
4508
+ color: #7c8896;
4509
+ }
4510
+
4511
+ [data-theme='dark'] .tracking-intelligence-distance__row strong {
4512
+ color: #eceff4;
4513
+ }
4514
+
4515
+ [data-theme='dark'] .tracking-intelligence-distance__bar {
4516
+ background: #20293a;
4517
+ }
4518
+
4519
+ [data-theme='dark'] .tracking-intelligence-distance__bar span {
4520
+ background: #e5a14b;
4521
+ }
4522
+
4523
+ [data-theme='dark'] .tracking-intelligence-distance__bar--secondary span {
4524
+ background: #5baec7;
4525
+ }
4526
+
4527
+ [data-theme='dark'] .tracking-intelligence-distance__foot {
4528
+ border-color: #374151;
4529
+ color: #54616f;
4530
+ }
4531
+
4532
+ .tracking-intelligence-diagnostics {
4533
+ overflow: hidden;
4534
+ }
4535
+
4536
+ .tracking-intelligence-diagnostics summary {
4537
+ display: flex;
4538
+ cursor: pointer;
4539
+ align-items: center;
4540
+ justify-content: space-between;
4541
+ gap: 0.5rem;
4542
+ padding: 0.55rem 0.7rem;
4543
+ color: #6b7280;
4544
+ font-size: 0.68rem;
4545
+ font-weight: 800;
4546
+ letter-spacing: 0.08em;
4547
+ list-style: none;
4548
+ text-transform: uppercase;
4549
+ }
4550
+
4551
+ .tracking-intelligence-diagnostics__summary {
4552
+ display: inline-flex;
4553
+ align-items: center;
4554
+ gap: 0.35rem;
4555
+ white-space: nowrap;
4556
+ }
4557
+
4558
+ .tracking-intelligence-diagnostics__summary svg {
4559
+ transition: transform 160ms ease;
4560
+ }
4561
+
4562
+ .tracking-intelligence-diagnostics[open] .tracking-intelligence-diagnostics__summary svg {
4563
+ transform: rotate(90deg);
4564
+ }
4565
+
4566
+ .tracking-intelligence-diagnostics summary::-webkit-details-marker {
4567
+ display: none;
4568
+ }
4569
+
4570
+ .tracking-intelligence-diagnostics__body {
4571
+ padding: 0 0.7rem 0.7rem;
4572
+ }
4573
+
4574
+ .tracking-intelligence-diagnostics__row {
4575
+ display: flex;
4576
+ justify-content: space-between;
4577
+ gap: 1rem;
4578
+ padding: 0.28rem 0;
4579
+ border-top: 1px dashed #e5e7eb;
4580
+ color: #6b7280;
4581
+ font-size: 0.72rem;
4582
+ }
4583
+
4584
+ .tracking-intelligence-diagnostics__row strong {
4585
+ color: #111827;
4586
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
4587
+ }
4588
+
4589
+ .tracking-intelligence-diagnostics__warnings {
4590
+ display: flex;
4591
+ flex-wrap: wrap;
4592
+ gap: 0.25rem;
4593
+ padding-top: 0.5rem;
4594
+ }
4595
+
4596
+ .tracking-intelligence-diagnostics__warnings span {
4597
+ padding: 0.125rem 0.375rem;
4598
+ border: 1px solid rgba(245, 158, 11, 25%);
4599
+ border-radius: 0.25rem;
4600
+ background: rgba(245, 158, 11, 10%);
4601
+ color: #b45309;
4602
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
4603
+ font-size: 0.62rem;
4604
+ }
4605
+
4606
+ [data-theme='dark'] .tracking-intelligence-diagnostics summary,
4607
+ [data-theme='dark'] .tracking-intelligence-diagnostics__row {
4608
+ color: #7c8896;
4609
+ }
4610
+
4611
+ [data-theme='dark'] .tracking-intelligence-diagnostics__row {
4612
+ border-color: #374151;
4613
+ }
4614
+
4615
+ [data-theme='dark'] .tracking-intelligence-diagnostics__row strong {
4616
+ color: #eceff4;
4617
+ }
4618
+
4619
+ .tracking-stop-progress {
4620
+ padding: 0.65rem 0.7rem;
4621
+ }
4622
+
4623
+ .tracking-stop-progress__header {
4624
+ display: flex;
4625
+ align-items: baseline;
4626
+ justify-content: space-between;
4627
+ gap: 0.75rem;
4628
+ margin-bottom: 0.55rem;
4629
+ }
4630
+
4631
+ .tracking-stop-progress__title {
4632
+ color: #6b7280;
4633
+ font-size: 0.65rem;
4634
+ font-weight: 800;
4635
+ letter-spacing: 0.08em;
4636
+ text-transform: uppercase;
4637
+ }
4638
+
4639
+ .tracking-stop-progress__count {
4640
+ color: #6b7280;
4641
+ font-size: 0.7rem;
4642
+ white-space: nowrap;
4643
+ }
4644
+
4645
+ .tracking-stop-progress__scroller {
4646
+ overflow: auto hidden;
4647
+ min-height: 2rem;
4648
+ padding: 0.2rem 0 0.05rem;
4649
+ }
4650
+
4651
+ .tracking-stop-progress__rail {
4652
+ display: flex;
4653
+ min-width: 100%;
4654
+ }
4655
+
4656
+ .tracking-stop-progress__stop {
4657
+ min-width: 2.5rem;
4658
+ flex: 1;
4659
+ }
4660
+
4661
+ .tracking-stop-progress__line {
4662
+ display: flex;
4663
+ align-items: center;
4664
+ }
4665
+
4666
+ .tracking-stop-progress__connector {
4667
+ height: 1px;
4668
+ flex: 1;
4669
+ border-top: 1px dashed #d1d5db;
4670
+ }
4671
+
4672
+ .tracking-stop-progress__dot {
4673
+ position: relative;
4674
+ z-index: 1;
4675
+ display: flex;
4676
+ width: 1.25rem;
4677
+ height: 1.25rem;
4678
+ flex-shrink: 0;
4679
+ align-items: center;
4680
+ justify-content: center;
4681
+ border: 1px solid #d1d5db;
4682
+ border-radius: 9999px;
4683
+ background: #f3f4f6;
4684
+ color: #6b7280;
4685
+ font-size: 0.58rem;
4686
+ font-weight: 800;
4687
+ }
4688
+
4689
+ .tracking-stop-progress__dot--done {
4690
+ border-color: #22c55e;
4691
+ background: #22c55e;
4692
+ color: #06210f;
4693
+ }
4694
+
4695
+ .tracking-stop-progress__dot--active {
4696
+ border-color: #f59e0b;
4697
+ background: #f59e0b;
4698
+ color: #1f1300;
4699
+ box-shadow: 0 0 0 3px rgba(245, 158, 11, 14%);
4700
+ }
4701
+
4702
+ .tracking-stop-progress__dot--active::before,
4703
+ .fleetops-route-stop-badge--active::before {
4704
+ position: absolute;
4705
+ inset: -0.45rem;
4706
+ border: 1.5px solid currentcolor;
4707
+ border-radius: 9999px;
4708
+ content: '';
4709
+ opacity: 0.65;
4710
+ animation: fleetops-tracking-pulse 2.2s ease-out infinite;
4711
+ }
4712
+
4713
+ .fleetops-route-stop-badge--active {
4714
+ position: relative;
4715
+ overflow: visible !important;
4716
+ }
4717
+
4718
+ @keyframes fleetops-tracking-pulse {
4719
+ 0% {
4720
+ opacity: 0.7;
4721
+ transform: scale(0.72);
4722
+ }
4723
+
4724
+ 100% {
4725
+ opacity: 0;
4726
+ transform: scale(1.65);
4727
+ }
4728
+ }
4729
+
4730
+ [data-theme='dark'] .tracking-stop-progress__title,
4731
+ [data-theme='dark'] .tracking-stop-progress__count {
4732
+ color: #7c8896;
4733
+ }
4734
+
4735
+ [data-theme='dark'] .tracking-stop-progress__connector {
4736
+ border-color: #374151;
4737
+ }
4738
+
4739
+ [data-theme='dark'] .tracking-stop-progress__dot {
4740
+ border-color: #374151;
4741
+ background: #20293a;
4742
+ color: #7c8896;
4743
+ }
4744
+
4745
+ [data-theme='dark'] .tracking-stop-progress__dot--done {
4746
+ border-color: #5bc796;
4747
+ background: #5bc796;
4748
+ color: #0a1f15;
4749
+ }
4750
+
4751
+ [data-theme='dark'] .tracking-stop-progress__dot--active {
4752
+ border-color: #e5a14b;
4753
+ background: #e5a14b;
4754
+ color: #1a1206;
4755
+ }
4756
+
4757
+ .tracking-intelligence-alert__cta,
4758
+ .tracking-intelligence-footer__button {
4759
+ display: inline-flex;
4760
+ align-items: center;
4761
+ gap: 0.35rem;
4762
+ border: 1px solid rgba(245, 158, 11, 32%);
4763
+ border-radius: 0.375rem;
4764
+ background: rgba(245, 158, 11, 8%);
4765
+ color: #b45309;
4766
+ font-size: 0.7rem;
4767
+ font-weight: 700;
4768
+ line-height: 1.2;
4769
+ padding: 0.35rem 0.55rem;
4770
+ white-space: nowrap;
4771
+ }
4772
+
4773
+ .tracking-intelligence-alert__cta:disabled,
4774
+ .tracking-intelligence-footer__button:disabled {
4775
+ cursor: progress;
4776
+ opacity: 0.7;
4777
+ }
4778
+
4779
+ [data-theme='dark'] .tracking-intelligence-alert__cta,
4780
+ [data-theme='dark'] .tracking-intelligence-footer__button {
4781
+ border-color: rgba(229, 161, 75, 32%);
4782
+ background: rgba(229, 161, 75, 10%);
4783
+ color: #e5a14b;
4784
+ }
4785
+
4786
+ .tracking-intelligence-footer {
4787
+ display: flex;
4788
+ align-items: center;
4789
+ justify-content: space-between;
4790
+ gap: 0.75rem;
4791
+ color: #9ca3af;
4792
+ font-size: 0.68rem;
4793
+ }
4794
+
4795
+ .tracking-intelligence-labels {
4796
+ display: flex;
4797
+ flex-direction: column;
4798
+ padding: 0.75rem;
4799
+ }