feat: route log odometer and lit mile markers for profile and experience

This commit is contained in:
2026-10-11 06:15:36 +03:00
parent b6e22a1299
commit 19f3ce79e6
29 changed files with 932 additions and 26 deletions

View File

@@ -22,6 +22,7 @@ import { useKeyboardNavigation } from '@/composables/useKeyboardNavigation';
import { useMaintenanceWindow } from '@/composables/useMaintenanceWindow';
import { useMotionPreferences } from '@/composables/useMotionPreferences';
import { useRouteMemory } from '@/composables/useRouteMemory';
import { useRouteLog } from '@/composables/useRouteLog';
import { assetUrl } from '@/content/asset-url';
import { signRouteFor } from '@/journey/sign-routes';
import { END_OF_SHIFT_SUBLINE } from '@/journey/dawn';
@@ -86,6 +87,8 @@ const journeyBinding = useJourneySections(
const journey = journeyBinding.snapshot;
/* The 03:12 window (Infrastructure): the plate's sub-line and the diagram steps. */
const maintenanceSubline = useMaintenanceWindow(journey);
/* MILE MARKERS (Experience, Profile): the ROUTE LOG odometer on the same sub-line. */
const routeLogSubline = useRouteLog(journey, () => props.content);
useCardEntrances();
const route = useRouteMemory(canonicalSectionIds, () => journey.value.activeSectionId);
const resume = computed(() => {
@@ -133,8 +136,9 @@ const controlsReady = shallowRef(false);
/* END OF SHIFT: parked at the destination the plate's sub-line reads the
shift's end. Client-only, like the 03:12 window, so the server HTML hydrates
unchanged. */
const hudSubline = computed(() => maintenanceSubline.value
|| (controlsReady.value && journey.value.arrived ? END_OF_SHIFT_SUBLINE : ''));
const hudSubline = computed(() => (controlsReady.value && journey.value.arrived ? END_OF_SHIFT_SUBLINE : '')
|| maintenanceSubline.value
|| routeLogSubline.value);
const adaptive = useAdaptiveQuality({
maximum: computed(() => motion.policy.value.maximumTier),
sceneState,