Frequent Flyer Counter – Gold Luxury Onyx
<div class="fp-travel-frequent-flyer-loyalty-points-ui">
<div class="fp-travel-frequent-flyer-loyalty-points-ui-stage">
<div class="fp-travel-frequent-flyer-loyalty-points-ui-grid"></div>
<div class="fp-travel-frequent-flyer-loyalty-points-ui-orbit"></div>
<div class="fp-travel-frequent-flyer-loyalty-points-ui-card">
<div class="fp-travel-frequent-flyer-loyalty-points-ui-card-glow"></div>
<div class="fp-travel-frequent-flyer-loyalty-points-ui-header">
<span class="fp-travel-frequent-flyer-loyalty-points-ui-brand">Onyx Elite</span>
<span class="fp-travel-frequent-flyer-loyalty-points-ui-status">VIP</span>
</div>
<div class="fp-travel-frequent-flyer-loyalty-points-ui-body">
<div class="fp-travel-frequent-flyer-loyalty-points-ui-label">Available Miles</div>
<div class="fp-travel-frequent-flyer-loyalty-points-ui-miles">
<span class="fp-travel-frequent-flyer-loyalty-points-ui-miles-val">98,450</span>
<span class="fp-travel-frequent-flyer-loyalty-points-ui-miles-suffix">pts</span>
</div>
</div>
<div class="fp-travel-frequent-flyer-loyalty-points-ui-footer">
<canvas class="fp-travel-frequent-flyer-loyalty-points-ui-canvas"></canvas>
</div>
</div>
</div>
</div>.fp-travel-frequent-flyer-loyalty-points-ui {
--fp-container-width: 100%;
--fp-max-width: 500px;
--fp-aspect-ratio: 1 / 1;
--fp-primary-color: #fdfdfc;
--fp-secondary-color: #eaeaea;
--fp-muted-color: #8c8c8c;
--fp-soft-color: #f5f5f4;
--fp-background-color: transparent;
--fp-info-color: #111111;
--fp-warning-color: #f3e5ab;
--fp-danger-color: #aa8529;
--fp-accent-color: #d4af37;
all: unset;
display: block;
width: var(--fp-container-width);
max-width: var(--fp-max-width);
margin: 0 auto;
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
box-sizing: border-box;
}
.fp-travel-frequent-flyer-loyalty-points-ui * {
box-sizing: border-box;
}
.fp-travel-frequent-flyer-loyalty-points-ui-stage {
position: relative;
width: 100%;
aspect-ratio: var(--fp-aspect-ratio);
background: linear-gradient(135deg, var(--fp-primary-color) 0%, var(--fp-soft-color) 100%);
border: 1px solid var(--fp-secondary-color);
border-radius: 24px;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
box-shadow: inset 0 0 40px rgba(0,0,0,0.02);
}
.fp-travel-frequent-flyer-loyalty-points-ui-grid {
position: absolute;
inset: -50%;
background-image: radial-gradient(var(--fp-secondary-color) 1px, transparent 1px);
background-size: 30px 30px;
opacity: 0.5;
animation: fp-travel-frequent-flyer-loyalty-points-ui-breathe 8s ease-in-out infinite alternate;
pointer-events: none;
}
.fp-travel-frequent-flyer-loyalty-points-ui-orbit {
position: absolute;
width: 110%;
height: 110%;
border: 1px solid transparent;
border-top-color: rgba(212, 175, 55, 0.15);
border-right-color: rgba(17, 17, 17, 0.05);
border-radius: 50%;
animation: fp-travel-frequent-flyer-loyalty-points-ui-spin 25s linear infinite;
pointer-events: none;
}
.fp-travel-frequent-flyer-loyalty-points-ui-orbit::after {
content: '';
position: absolute;
top: 15%;
left: 15%;
width: 70%;
height: 70%;
border: 1px dashed var(--fp-secondary-color);
border-radius: 50%;
animation: fp-travel-frequent-flyer-loyalty-points-ui-spin-reverse 35s linear infinite;
}
.fp-travel-frequent-flyer-loyalty-points-ui-card {
position: relative;
z-index: 10;
width: 80%;
height: 60%;
background: linear-gradient(145deg, var(--fp-info-color) 0%, #1a1a1a 100%);
border-radius: 20px;
border: 1px solid rgba(212, 175, 55, 0.2);
padding: 32px;
display: flex;
flex-direction: column;
justify-content: space-between;
color: var(--fp-primary-color);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(212, 175, 55, 0.1);
transition: border-color 0.3s ease;
}
.fp-travel-frequent-flyer-loyalty-points-ui-card-glow {
position: absolute;
inset: 0;
border-radius: 20px;
background: radial-gradient(circle at 50% 0%, rgba(212, 175, 55, 0.15) 0%, transparent 60%);
pointer-events: none;
}
.fp-travel-frequent-flyer-loyalty-points-ui-header {
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
z-index: 2;
}
.fp-travel-frequent-flyer-loyalty-points-ui-brand {
font-size: 0.8rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--fp-muted-color);
}
.fp-travel-frequent-flyer-loyalty-points-ui-status {
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.1em;
color: var(--fp-info-color);
background: linear-gradient(90deg, var(--fp-warning-color), var(--fp-accent-color));
padding: 4px 12px;
border-radius: 12px;
text-transform: uppercase;
}
.fp-travel-frequent-flyer-loyalty-points-ui-body {
position: relative;
z-index: 2;
}
.fp-travel-frequent-flyer-loyalty-points-ui-label {
font-size: 0.85rem;
color: var(--fp-muted-color);
margin-bottom: 8px;
}
.fp-travel-frequent-flyer-loyalty-points-ui-miles {
font-size: 3.5rem;
font-weight: 300;
line-height: 1;
color: var(--fp-primary-color);
font-variant-numeric: tabular-nums;
display: flex;
align-items: baseline;
gap: 8px;
}
.fp-travel-frequent-flyer-loyalty-points-ui-miles-suffix {
font-size: 1.2rem;
font-weight: 400;
color: var(--fp-accent-color);
}
.fp-travel-frequent-flyer-loyalty-points-ui-footer {
position: relative;
z-index: 2;
width: 100%;
height: 40px;
border-top: 1px solid rgba(255,255,255,0.05);
padding-top: 16px;
}
.fp-travel-frequent-flyer-loyalty-points-ui-canvas {
width: 100%;
height: 100%;
display: block;
}
@keyframes fp-travel-frequent-flyer-loyalty-points-ui-breathe {
0% { transform: scale(1); opacity: 0.3; }
100% { transform: scale(1.05); opacity: 0.6; }
}
@keyframes fp-travel-frequent-flyer-loyalty-points-ui-spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes fp-travel-frequent-flyer-loyalty-points-ui-spin-reverse {
from { transform: rotate(360deg); }
to { transform: rotate(0deg); }
}
@media (max-width: 480px) {
.fp-travel-frequent-flyer-loyalty-points-ui-card {
width: 90%;
height: 55%;
padding: 24px;
}
.fp-travel-frequent-flyer-loyalty-points-ui-miles {
font-size: 2.5rem;
}
}document.querySelectorAll('.fp-travel-frequent-flyer-loyalty-points-ui').forEach(root => {
const card = root.querySelector('.fp-travel-frequent-flyer-loyalty-points-ui-card');
const canvas = root.querySelector('.fp-travel-frequent-flyer-loyalty-points-ui-canvas');
const milesText = root.querySelector('.fp-travel-frequent-flyer-loyalty-points-ui-miles-val');
if (!card || !canvas || !milesText) return;
const ctx = canvas.getContext('2d');
let animationFrameId;
let isVisible = true;
let time = 0;
let currentMiles = 98450;
let targetMiles = 98450;
const resizeCanvas = () => {
const rect = canvas.parentElement.getBoundingClientRect();
canvas.width = rect.width * window.devicePixelRatio;
canvas.height = rect.height * window.devicePixelRatio;
ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
canvas.style.width = `${rect.width}px`;
canvas.style.height = `${rect.height}px`;
};
const animate = () => {
if (!isVisible) return;
time += 0.03;
const liftOffset = Math.sin(time) * 8;
const shadowBlur = 30 + Math.sin(time) * 10;
const shadowOpacity = 0.2 + (Math.sin(time) * 0.1);
card.style.transform = `translateY(${-liftOffset}px)`;
card.style.boxShadow = `0 ${liftOffset + 20}px ${shadowBlur}px rgba(212, 175, 55, ${shadowOpacity}), 0 10px 20px rgba(0,0,0,0.5)`;
if (Math.random() < 0.02) {
targetMiles += Math.floor(Math.random() * 25);
}
if (currentMiles < targetMiles) {
currentMiles += 1;
milesText.innerText = currentMiles.toLocaleString();
card.style.borderColor = `rgba(212, 175, 55, 0.8)`;
} else {
card.style.borderColor = `rgba(212, 175, 55, 0.2)`;
}
const width = canvas.width / window.devicePixelRatio;
const height = canvas.height / window.devicePixelRatio;
ctx.clearRect(0, 0, width, height);
ctx.beginPath();
ctx.moveTo(0, height / 2);
ctx.lineTo(width, height / 2);
ctx.strokeStyle = 'rgba(255, 255, 255, 0.1)';
ctx.lineWidth = 2;
ctx.stroke();
const progressX = (time * 15) % width;
ctx.beginPath();
ctx.moveTo(0, height / 2);
for (let x = 0; x <= progressX; x += 2) {
const y = (height / 2) + Math.sin((x + time * 20) * 0.05) * 4;
ctx.lineTo(x, y);
}
ctx.strokeStyle = '#d4af37';
ctx.lineWidth = 2;
ctx.shadowBlur = 8;
ctx.shadowColor = '#d4af37';
ctx.stroke();
ctx.shadowBlur = 0;
const dotY = (height / 2) + Math.sin((progressX + time * 20) * 0.05) * 4;
ctx.beginPath();
ctx.arc(progressX, dotY, 3, 0, Math.PI * 2);
ctx.fillStyle = '#ffffff';
ctx.fill();
ctx.shadowBlur = 10;
ctx.shadowColor = '#d4af37';
ctx.fill();
ctx.shadowBlur = 0;
animationFrameId = requestAnimationFrame(animate);
};
const handleVisibilityChange = () => {
isVisible = document.visibilityState === 'visible';
if (isVisible) {
animate();
} else {
cancelAnimationFrame(animationFrameId);
}
};
const observer = new MutationObserver(() => {
if (!document.body.contains(root)) {
cancelAnimationFrame(animationFrameId);
window.removeEventListener('resize', resizeCanvas);
document.removeEventListener('visibilitychange', handleVisibilityChange);
observer.disconnect();
}
});
window.addEventListener('resize', resizeCanvas);
document.addEventListener('visibilitychange', handleVisibilityChange);
observer.observe(document.body, { childList: true, subtree: true });
resizeCanvas();
animate();
});Description
Let us look at the Frequent Flyer Counter Gold Luxury Onyx component. This free UI asset offers a modular card system specifically engineered for the high volume travel and hospitality sector. We built this entirely from scratch to handle real time loyalty point data and membership tiers without the usual framework bloat. You get a sterile DOM structure that integrates cleanly into your existing airline booking or hotel rewards architecture.
Travel platforms process massive amounts of live passenger data and require absolute reliability during peak booking seasons. Heavy client side payloads completely ruin the user experience when travelers expect immediate visual feedback on their reward status. This component solves that bottleneck directly. By strictly avoiding external libraries like Tailwind, Bootstrap, or GSAP, it keeps your bundle size minimal. This ensures rapid rendering for developers who need to present active loyalty metrics to users on varied mobile networks or airport WiFi connections.
Technical Architecture & Performance
-
Zero dependency codebase: Built strictly with pure HTML, CSS, and Vanilla JavaScript to keep your front end stack incredibly light.
-
Guaranteed performance metrics: Optimized to help your booking software maintain 90 plus PageSpeed scores and pass Core Web Vitals easily.
-
Safely scoped CSS: All styling is strictly scoped to prevent any class name collisions when you drop these cards into a massive monolithic repository.
-
Sterile DOM markup: Features clean HTML with absolutely no unnecessary wrappers or deep nesting trees to parse.
Design & Aesthetic Impact
The visual direction utilizes Gold Premium tones paired with deep onyx contrasts to establish an exclusive and high end environment for the end user. This sophisticated and highly readable aesthetic ensures visual clarity for travelers analyzing complex point structures and dense itinerary logs. For the interaction layer, we implemented a custom lift shadow animation. This physical hover transition provides clear depth and responsive feedback for active card selection and interactive tier upgrades without requiring heavy javascript animation scripts. The final result is a clean user interface that looks premium and functions perfectly for strict enterprise hospitality platforms.
Enterprise Use Cases
-
Airline loyalty dashboards: Display active frequent flyer miles and tier progression using the card grid so passengers can monitor their flight rewards quickly.
-
Hotel concierge portals: Build a fast rendering reward page where hospitality managers can organize and review massive datasets of VIP member benefits within a lightweight interface.
-
Travel agency booking panels: Create a responsive control layout for booking agents to track active promotional credits and upgrade vouchers across multiple regional partner airlines.
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.

Frequent Flyer Counter – Gold Luxury Onyx
Description
Let us look at the Frequent Flyer Counter Gold Luxury Onyx component. This free UI asset offers a modular card system specifically engineered for the high volume travel and hospitality sector. We built this entirely from scratch to handle real time loyalty point data and membership tiers without the usual framework bloat. You get a sterile DOM structure that integrates cleanly into your existing airline booking or hotel rewards architecture.
Travel platforms process massive amounts of live passenger data and require absolute reliability during peak booking seasons. Heavy client side payloads completely ruin the user experience when travelers expect immediate visual feedback on their reward status. This component solves that bottleneck directly. By strictly avoiding external libraries like Tailwind, Bootstrap, or GSAP, it keeps your bundle size minimal. This ensures rapid rendering for developers who need to present active loyalty metrics to users on varied mobile networks or airport WiFi connections.
Technical Architecture & Performance
-
Zero dependency codebase: Built strictly with pure HTML, CSS, and Vanilla JavaScript to keep your front end stack incredibly light.
-
Guaranteed performance metrics: Optimized to help your booking software maintain 90 plus PageSpeed scores and pass Core Web Vitals easily.
-
Safely scoped CSS: All styling is strictly scoped to prevent any class name collisions when you drop these cards into a massive monolithic repository.
-
Sterile DOM markup: Features clean HTML with absolutely no unnecessary wrappers or deep nesting trees to parse.
Design & Aesthetic Impact
The visual direction utilizes Gold Premium tones paired with deep onyx contrasts to establish an exclusive and high end environment for the end user. This sophisticated and highly readable aesthetic ensures visual clarity for travelers analyzing complex point structures and dense itinerary logs. For the interaction layer, we implemented a custom lift shadow animation. This physical hover transition provides clear depth and responsive feedback for active card selection and interactive tier upgrades without requiring heavy javascript animation scripts. The final result is a clean user interface that looks premium and functions perfectly for strict enterprise hospitality platforms.
Enterprise Use Cases
-
Airline loyalty dashboards: Display active frequent flyer miles and tier progression using the card grid so passengers can monitor their flight rewards quickly.
-
Hotel concierge portals: Build a fast rendering reward page where hospitality managers can organize and review massive datasets of VIP member benefits within a lightweight interface.
-
Travel agency booking panels: Create a responsive control layout for booking agents to track active promotional credits and upgrade vouchers across multiple regional partner airlines.

