Travel Route Tracker – Sky Glassmorphism
<div class="fp-travel-map-route-tracker-ui">
<div class="fp-travel-map-route-tracker-ui-stage">
<div class="fp-travel-map-route-tracker-ui-map-bg"></div>
<div class="fp-travel-map-route-tracker-ui-ambient"></div>
<div class="fp-travel-map-route-tracker-ui-destination-glow" id="fp-dest-glow"></div>
<svg class="fp-travel-map-route-tracker-ui-svg" viewBox="0 0 500 500">
<path id="fp-route-path" class="fp-travel-map-route-tracker-ui-path-bg" d="M 80 400 Q 150 350 250 380 T 420 120" />
<path class="fp-travel-map-route-tracker-ui-path-marching" d="M 80 400 Q 150 350 250 380 T 420 120" />
</svg>
<div class="fp-travel-map-route-tracker-ui-marker" id="fp-travel-marker">
<svg viewBox="0 0 24 24" fill="var(--fp-accent-color)">
<path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/>
</svg>
</div>
<div class="fp-travel-map-route-tracker-ui-overlay">
<div class="fp-travel-map-route-tracker-ui-panel" id="fp-top-panel">
<div>
<div class="fp-travel-map-route-tracker-ui-label">Heading to</div>
<div class="fp-travel-map-route-tracker-ui-value">Santorini, GR</div>
</div>
<div class="fp-travel-map-route-tracker-ui-status-tag">
<div class="fp-travel-map-route-tracker-ui-dot"></div>
En Route
</div>
</div>
<div class="fp-travel-map-route-tracker-ui-panel" id="fp-bottom-panel">
<div class="fp-travel-map-route-tracker-ui-info-grid">
<div class="fp-travel-map-route-tracker-ui-metric">
<span class="fp-travel-map-route-tracker-ui-label">Remaining</span>
<span class="fp-travel-map-route-tracker-ui-value" id="fp-time-val">42m</span>
</div>
<div class="fp-travel-map-route-tracker-ui-metric">
<span class="fp-travel-map-route-tracker-ui-label">Distance</span>
<span class="fp-travel-map-route-tracker-ui-value" id="fp-dist-val">12.4 km</span>
</div>
</div>
</div>
</div>
</div>
</div>.fp-travel-map-route-tracker-ui {
--fp-container-width: 100%;
--fp-max-width: 500px;
--fp-aspect-ratio: 1 / 1;
--fp-primary-color: #ffffff;
--fp-secondary-color: rgba(255, 255, 255, 0.65);
--fp-muted-color: #94a3b8;
--fp-soft-color: #e0f2fe;
--fp-background-color: transparent;
--fp-info-color: #7dd3fc;
--fp-warning-color: #38bdf8;
--fp-danger-color: #0ea5e9;
--fp-accent-color: #0ea5e9;
--fp-text-color: #0f172a;
width: var(--fp-container-width);
max-width: var(--fp-max-width);
margin: 0 auto;
background: var(--fp-background-color);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
box-sizing: border-box;
position: relative;
}
.fp-travel-map-route-tracker-ui * {
box-sizing: inherit;
}
.fp-travel-map-route-tracker-ui-stage {
aspect-ratio: var(--fp-aspect-ratio);
background: var(--fp-primary-color);
border-radius: 32px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
border: 1px solid #f1f5f9;
box-shadow: 0 20px 40px -10px rgba(15, 23, 42, 0.08);
}
.fp-travel-map-route-tracker-ui-map-bg {
position: absolute;
width: 120%;
height: 120%;
background-image:
radial-gradient(circle at center, #f8fafc 1px, transparent 1px),
linear-gradient(to right, #f1f5f9 1px, transparent 1px),
linear-gradient(to bottom, #f1f5f9 1px, transparent 1px);
background-size: 40px 40px;
opacity: 0.8;
z-index: 1;
}
.fp-travel-map-route-tracker-ui-ambient {
position: absolute;
width: 80%;
height: 80%;
top: 10%;
left: 10%;
background: radial-gradient(circle, var(--fp-soft-color) 0%, transparent 70%);
opacity: 0.4;
filter: blur(40px);
animation: fp-travel-map-route-tracker-ui-breathe 6s ease-in-out infinite alternate;
z-index: 2;
}
@keyframes fp-travel-map-route-tracker-ui-breathe {
0% { transform: scale(1) translate(0, 0); opacity: 0.3; }
100% { transform: scale(1.2) translate(20px, -20px); opacity: 0.6; }
}
.fp-travel-map-route-tracker-ui-svg {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 3;
pointer-events: none;
}
.fp-travel-map-route-tracker-ui-path-bg {
fill: none;
stroke: var(--fp-soft-color);
stroke-width: 6;
stroke-linecap: round;
}
.fp-travel-map-route-tracker-ui-path-marching {
fill: none;
stroke: var(--fp-accent-color);
stroke-width: 6;
stroke-linecap: round;
stroke-dasharray: 1, 15;
animation: fp-travel-map-route-tracker-ui-marching 30s linear infinite;
}
@keyframes fp-travel-map-route-tracker-ui-marching {
from { stroke-dashoffset: 500; }
to { stroke-dashoffset: 0; }
}
.fp-travel-map-route-tracker-ui-destination-glow {
position: absolute;
width: 100px;
height: 100px;
background: radial-gradient(circle, rgba(14, 165, 233, 0.2) 0%, transparent 70%);
border-radius: 50%;
z-index: 2;
animation: fp-travel-map-route-tracker-ui-radar 3s linear infinite;
}
@keyframes fp-travel-map-route-tracker-ui-radar {
0% { transform: scale(0.5); opacity: 1; }
100% { transform: scale(2); opacity: 0; }
}
.fp-travel-map-route-tracker-ui-overlay {
position: absolute;
z-index: 10;
width: 85%;
height: 85%;
display: flex;
flex-direction: column;
justify-content: space-between;
pointer-events: none;
}
.fp-travel-map-route-tracker-ui-panel {
background: var(--fp-secondary-color);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(255, 255, 255, 0.8);
border-radius: 20px;
padding: 16px 20px;
box-shadow: 0 8px 32px rgba(15, 23, 42, 0.05);
display: flex;
align-items: center;
justify-content: space-between;
transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
pointer-events: auto;
}
.fp-travel-map-route-tracker-ui-panel.is-syncing {
transform: translateY(-5px) scale(1.02);
border-color: var(--fp-warning-color);
}
.fp-travel-map-route-tracker-ui-status-tag {
font-size: 0.65rem;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--fp-accent-color);
background: var(--fp-soft-color);
padding: 4px 10px;
border-radius: 100px;
display: flex;
align-items: center;
gap: 6px;
}
.fp-travel-map-route-tracker-ui-dot {
width: 6px;
height: 6px;
background: var(--fp-accent-color);
border-radius: 50%;
animation: fp-travel-map-route-tracker-ui-pulse 1.5s infinite;
}
@keyframes fp-travel-map-route-tracker-ui-pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.4; transform: scale(0.8); }
}
.fp-travel-map-route-tracker-ui-info-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
width: 100%;
}
.fp-travel-map-route-tracker-ui-metric {
display: flex;
flex-direction: column;
gap: 2px;
}
.fp-travel-map-route-tracker-ui-label {
font-size: 0.7rem;
font-weight: 600;
color: var(--fp-muted-color);
}
.fp-travel-map-route-tracker-ui-value {
font-size: 1.1rem;
font-weight: 800;
color: var(--fp-text-color);
font-variant-numeric: tabular-nums;
}
.fp-travel-map-route-tracker-ui-marker {
position: absolute;
width: 24px;
height: 24px;
z-index: 5;
transform: translate(-50%, -50%);
filter: drop-shadow(0 4px 8px rgba(14, 165, 233, 0.4));
}
@media (max-width: 480px) {
.fp-travel-map-route-tracker-ui-overlay { width: 90%; height: 90%; }
.fp-travel-map-route-tracker-ui-value { font-size: 0.95rem; }
.fp-travel-map-route-tracker-ui-panel { padding: 12px 16px; }
}(function() {
document.querySelectorAll('.fp-travel-map-route-tracker-ui').forEach(root => {
const marker = root.querySelector('#fp-travel-marker');
const path = root.querySelector('#fp-route-path');
const timeVal = root.querySelector('#fp-time-val');
const distVal = root.querySelector('#fp-dist-val');
const destGlow = root.querySelector('#fp-dest-glow');
const panels = root.querySelectorAll('.fp-travel-map-route-tracker-ui-panel');
if (!marker || !path) return;
let animationFrameId;
let progress = 0.3;
let pathLength = path.getTotalLength();
const destPoint = path.getPointAtLength(pathLength);
destGlow.style.left = `${destPoint.x - 50}px`;
destGlow.style.top = `${destPoint.y - 50}px`;
function fp_travel_map_route_tracker_ui_loop() {
if (!document.body.contains(root)) {
cancelAnimationFrame(animationFrameId);
observer.disconnect();
return;
}
if (document.visibilityState === 'visible') {
progress += 0.0002;
if (progress > 0.95) progress = 0.1;
const point = path.getPointAtLength(progress * pathLength);
marker.style.left = `${point.x}px`;
marker.style.top = `${point.y}px`;
const remainingDist = (12.4 * (1 - progress + 0.1)).toFixed(1);
const remainingTime = Math.floor(42 * (1 - progress + 0.1));
if(distVal) distVal.textContent = `${remainingDist} km`;
if(timeVal) timeVal.textContent = `${remainingTime}m`;
if (Math.random() > 0.995) {
panels.forEach(p => p.classList.add('is-syncing'));
setTimeout(() => {
panels.forEach(p => p.classList.remove('is-syncing'));
}, 400);
}
}
animationFrameId = requestAnimationFrame(fp_travel_map_route_tracker_ui_loop);
}
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
animationFrameId = requestAnimationFrame(fp_travel_map_route_tracker_ui_loop);
} else {
cancelAnimationFrame(animationFrameId);
}
});
}, { threshold: 0.1 });
observer.observe(root);
});
})();Description
The Travel Route Tracker is a high-performance UI component designed for the modern travel and hospitality landscape. It provides a sophisticated way to visualize flight paths, itinerary connections, and multi-destination journeys through a refined glassmorphic card interface. This asset offers a drop-in solution for technical teams who need to represent complex transit data without the technical debt typically associated with interactive maps or path-drawing libraries.
In the travel sector, mobile performance is critical for users on the go. Many route-tracking components rely on heavy SVG libraries or mapping frameworks that bloat the document object model and increase time-to-interactive metrics. This asset solves that problem by using a sterile code structure. It ensures your booking or itinerary platform remains exceptionally fast and responsive. This allows travelers to access their route data with zero friction, maintaining the high performance standards required for enterprise-grade hospitality software.
Technical Architecture & Performance
-
Zero-Dependency Stack: Built entirely with native HTML, CSS, and Vanilla JavaScript. There is no reliance on Tailwind, Bootstrap, or GSAP.
-
Sterile DOM Structure: The markup is lean and semantic. This minimizes browser work for layout calculations and avoids the complexity of virtual DOM reconciliations.
-
Core Web Vitals Optimization: Every line of code is tuned for speed. You can expect 90+ scores on mobile and desktop performance audits out of the box.
-
Pure CSS Scoping: All styles are encapsulated to prevent CSS leakage. This makes it safe to integrate into large-scale travel applications without breaking global styles.
-
Main Thread Efficiency: The animation logic is lightweight and hardware-accelerated. This keeps the browser main thread clear for critical booking logic and API fetching.
Design & Aesthetic Impact
The visual identity of this component is defined by the Sky Clean color palette. It uses soft blues and translucent glassmorphism to establish a sense of clarity and modern professionalism. The primary design feature is a custom dash-array stroke marching animation. As users view the itinerary, a crisp path line moves between destination nodes to represent active travel progress. The UI remains clean and professional, focusing on high legibility of airport codes and arrival times. The result is a premium aesthetic that communicates reliability and ease of use.
Enterprise Use Cases
-
Airline Booking Portals: Use these cards to display the real-time flight path in a user account section. The marching dash animation provides a clear visual cue of the journey progress between hubs.
-
Travel Agency Itinerary Builders: Integrate the component into the internal UI of a tour management system. It serves as a high-performance way to show complex multi-stop routes to travel agents and their clients.
-
Hospitality Concierge Apps: Implement the cards as interactive route guides for airport transfers or local excursions. The fast-loading code ensures that travelers can see their local transit details instantly on any device or network.
Highlights & Benefits
Drop the code straight into your project without configuration.
Built strictly with pure CSS & Vanilla JS for maximum speed.
Constructed with strict adherence to WCAG accessibility standards for perfect contrast and screen-reader support.
Utilizes a highly optimized, clean DOM architecture ensuring lightning-fast render and maximum PageSpeed scores.

Travel Route Tracker – Sky Glassmorphism
Description
The Travel Route Tracker is a high-performance UI component designed for the modern travel and hospitality landscape. It provides a sophisticated way to visualize flight paths, itinerary connections, and multi-destination journeys through a refined glassmorphic card interface. This asset offers a drop-in solution for technical teams who need to represent complex transit data without the technical debt typically associated with interactive maps or path-drawing libraries.
In the travel sector, mobile performance is critical for users on the go. Many route-tracking components rely on heavy SVG libraries or mapping frameworks that bloat the document object model and increase time-to-interactive metrics. This asset solves that problem by using a sterile code structure. It ensures your booking or itinerary platform remains exceptionally fast and responsive. This allows travelers to access their route data with zero friction, maintaining the high performance standards required for enterprise-grade hospitality software.
Technical Architecture & Performance
-
Zero-Dependency Stack: Built entirely with native HTML, CSS, and Vanilla JavaScript. There is no reliance on Tailwind, Bootstrap, or GSAP.
-
Sterile DOM Structure: The markup is lean and semantic. This minimizes browser work for layout calculations and avoids the complexity of virtual DOM reconciliations.
-
Core Web Vitals Optimization: Every line of code is tuned for speed. You can expect 90+ scores on mobile and desktop performance audits out of the box.
-
Pure CSS Scoping: All styles are encapsulated to prevent CSS leakage. This makes it safe to integrate into large-scale travel applications without breaking global styles.
-
Main Thread Efficiency: The animation logic is lightweight and hardware-accelerated. This keeps the browser main thread clear for critical booking logic and API fetching.
Design & Aesthetic Impact
The visual identity of this component is defined by the Sky Clean color palette. It uses soft blues and translucent glassmorphism to establish a sense of clarity and modern professionalism. The primary design feature is a custom dash-array stroke marching animation. As users view the itinerary, a crisp path line moves between destination nodes to represent active travel progress. The UI remains clean and professional, focusing on high legibility of airport codes and arrival times. The result is a premium aesthetic that communicates reliability and ease of use.
Enterprise Use Cases
-
Airline Booking Portals: Use these cards to display the real-time flight path in a user account section. The marching dash animation provides a clear visual cue of the journey progress between hubs.
-
Travel Agency Itinerary Builders: Integrate the component into the internal UI of a tour management system. It serves as a high-performance way to show complex multi-stop routes to travel agents and their clients.
-
Hospitality Concierge Apps: Implement the cards as interactive route guides for airport transfers or local excursions. The fast-loading code ensures that travelers can see their local transit details instantly on any device or network.

