15 CSS Number Counter Animations
Cyberpunk Gaming HUD
Pitch-black gaming dashboard with cyan and magenta neon glows, clipped hexagonal panels and Orbitron display font. A glitching player name, animated skill bars with arrow-tip indicators and three oversized kill / win / damage counters.
Cyberpunk Gaming HUD the 13th of 15 designs in the 15 CSS Number Counter Animations collection. The design pairs CSS styling with a small amount of JavaScript for interactivity. Copy the HTML, CSS and JavaScript panels below into your project — the JS is self-contained, has zero dependencies, and is safe to drop into any framework (React, Vue, Svelte, plain HTML). The design honours prefers-reduced-motion and uses real semantic markup, so it ships accessibility-ready out of the box.
Live preview
The code
<div class="cnc-cyber">
<div class="cnc-cyber-layout">
<div class="cnc-cyber-panel cnc-cyber-profile">
<div class="cnc-cyber-ph">Player Profile · Online</div>
<div style="padding-top: 16px;">
<div class="cnc-cyber-avatar">
<div class="cnc-cyber-avatar-hex">⚡</div>
<div class="cnc-cyber-rank-badge">#1</div>
</div>
<div class="cnc-cyber-player-name cnc-cyber-glitch">NEXUS_V</div>
<div class="cnc-cyber-player-tag">// APEX · SEASON 12</div>
<div class="cnc-cyber-stat-row">
<span class="cnc-cyber-stat-row-label">K/D Ratio</span>
<span class="cnc-cyber-stat-row-val cnc-cyber-cyan cnc-num" data-target="4.87" data-decimals="2">0</span>
</div>
<div class="cnc-cyber-stat-row">
<span class="cnc-cyber-stat-row-label">Win Rate</span>
<span class="cnc-cyber-stat-row-val cnc-cyber-green cnc-num" data-target="71.4" data-decimals="1">0</span>
</div>
<div class="cnc-cyber-stat-row">
<span class="cnc-cyber-stat-row-label">Headshots</span>
<span class="cnc-cyber-stat-row-val cnc-cyber-magenta cnc-num" data-target="38.2" data-decimals="1">0</span>
</div>
<div class="cnc-cyber-stat-row">
<span class="cnc-cyber-stat-row-label">Playtime</span>
<span class="cnc-cyber-stat-row-val" style="color:#fff">2,841h</span>
</div>
<div class="cnc-cyber-stat-row">
<span class="cnc-cyber-stat-row-label">MMR</span>
<span class="cnc-cyber-stat-row-val cnc-cyber-cyan cnc-num" data-target="8420">0</span>
</div>
</div>
</div>
<div class="cnc-cyber-panel cnc-cyber-xp-panel">
<div class="cnc-cyber-ph">Season XP Progress</div>
<div style="padding-top: 12px;">
<div class="cnc-cyber-xp-label">
<span>Level 847 · Prestige V</span>
<span><span class="cnc-num" data-target="73">0</span>% to 848</span>
</div>
<div class="cnc-cyber-xp-track"><div class="cnc-cyber-xp-fill"></div></div>
</div>
</div>
<div class="cnc-cyber-counter-row">
<div class="cnc-cyber-panel cnc-cyber-big-counter">
<div class="cnc-cyber-bc-label">Total Kills</div>
<div class="cnc-cyber-bc-num cnc-num" data-target="48291">0</div>
<div class="cnc-cyber-bc-sub">+312 this session</div>
</div>
<div class="cnc-cyber-panel cnc-cyber-big-counter">
<div class="cnc-cyber-bc-label">Matches Won</div>
<div class="cnc-cyber-bc-num cnc-cyber-magenta-glow cnc-num" data-target="1847">0</div>
<div class="cnc-cyber-bc-sub">3W streak active</div>
</div>
<div class="cnc-cyber-panel cnc-cyber-big-counter">
<div class="cnc-cyber-bc-label">Damage / Round</div>
<div class="cnc-cyber-bc-num cnc-cyber-green-glow cnc-num" data-target="847">0</div>
<div class="cnc-cyber-bc-sub">Top 0.1% global</div>
</div>
</div>
<div class="cnc-cyber-panel cnc-cyber-skill-grid">
<div class="cnc-cyber-ph">Combat Skills · Analysis</div>
<div style="padding-top: 12px;">
<div class="cnc-cyber-skill-item">
<span class="cnc-cyber-skill-name">Accuracy</span>
<div class="cnc-cyber-skill-bar"><div class="cnc-cyber-skill-fill cnc-cyber-sf1"></div></div>
<span class="cnc-cyber-skill-pct">94%</span>
</div>
<div class="cnc-cyber-skill-item">
<span class="cnc-cyber-skill-name">Reaction</span>
<div class="cnc-cyber-skill-bar"><div class="cnc-cyber-skill-fill cnc-cyber-sf2"></div></div>
<span class="cnc-cyber-skill-pct">87%</span>
</div>
<div class="cnc-cyber-skill-item">
<span class="cnc-cyber-skill-name">Strategy</span>
<div class="cnc-cyber-skill-bar"><div class="cnc-cyber-skill-fill cnc-cyber-sf3"></div></div>
<span class="cnc-cyber-skill-pct">78%</span>
</div>
<div class="cnc-cyber-skill-item">
<span class="cnc-cyber-skill-name">Aggression</span>
<div class="cnc-cyber-skill-bar"><div class="cnc-cyber-skill-fill cnc-cyber-sf4"></div></div>
<span class="cnc-cyber-skill-pct">91%</span>
</div>
<div class="cnc-cyber-skill-item">
<span class="cnc-cyber-skill-name">Support</span>
<div class="cnc-cyber-skill-bar"><div class="cnc-cyber-skill-fill cnc-cyber-sf5"></div></div>
<span class="cnc-cyber-skill-pct">65%</span>
</div>
<div class="cnc-cyber-skill-item">
<span class="cnc-cyber-skill-name">Movement</span>
<div class="cnc-cyber-skill-bar"><div class="cnc-cyber-skill-fill cnc-cyber-sf6"></div></div>
<span class="cnc-cyber-skill-pct">82%</span>
</div>
</div>
</div>
</div>
</div> .cnc-cyber {
--cyber-bg: #070b14;
--cyber-panel: #0d1424;
--cyber-cyan: #00f5ff;
--cyber-magenta: #ff00c8;
--cyber-green: #00ff87;
--cyber-orange: #ff6b00;
--cyber-border: rgba(0,245,255,0.2);
position: relative;
display: flex; align-items: center; justify-content: center;
padding: 40px 20px;
background: var(--cyber-bg);
background-image:
radial-gradient(ellipse at 20% 50%, rgba(0,245,255,0.05) 0%, transparent 50%),
radial-gradient(ellipse at 80% 50%, rgba(255,0,200,0.05) 0%, transparent 50%);
font-family: 'Share Tech Mono', monospace;
color: var(--cyber-cyan);
overflow: hidden;
}
.cnc-cyber::before {
content: ''; position: absolute; inset: 0;
background-image:
linear-gradient(rgba(0,245,255,0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(0,245,255,0.03) 1px, transparent 1px);
background-size: 40px 40px; pointer-events: none;
}
.cnc-cyber-layout {
display: grid;
grid-template-columns: 280px 1fr;
grid-template-rows: auto auto auto;
gap: 12px; width: 960px;
position: relative;
}
.cnc-cyber-panel {
background: var(--cyber-panel);
border: 1px solid var(--cyber-border);
position: relative; overflow: hidden;
clip-path: polygon(0 0, calc(100% - 16px) 0, 100% 16px, 100% 100%, 16px 100%, 0 calc(100% - 16px));
}
.cnc-cyber-panel::before {
content: ''; position: absolute; inset: 0;
background: linear-gradient(135deg, rgba(0,245,255,0.03) 0%, transparent 60%);
pointer-events: none;
}
.cnc-cyber-ph {
padding: 10px 16px;
border-bottom: 1px solid var(--cyber-border);
font-family: 'Orbitron', sans-serif;
font-size: 9px; letter-spacing: 3px; text-transform: uppercase;
color: rgba(0,245,255,0.5);
display: flex; align-items: center; gap: 8px;
}
.cnc-cyber-ph::before {
content: ''; width: 6px; height: 6px;
background: var(--cyber-cyan);
box-shadow: 0 0 8px var(--cyber-cyan);
animation: cnc-cyber-blink 1.5s step-end infinite;
}
@keyframes cnc-cyber-blink {
0%, 100% { opacity: 1; }
50% { opacity: 0.1; }
}
.cnc-cyber-profile { grid-row: span 3; padding: 24px 20px; }
.cnc-cyber-avatar {
width: 100px; height: 100px;
margin: 8px auto 20px;
position: relative;
}
.cnc-cyber-avatar-hex {
width: 100%; height: 100%;
clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
background: linear-gradient(135deg, #1a2540, #0d1424);
border: 2px solid var(--cyber-cyan);
display: flex; align-items: center; justify-content: center;
font-size: 36px;
box-shadow: 0 0 20px rgba(0,245,255,0.3), inset 0 0 20px rgba(0,245,255,0.05);
animation: cnc-cyber-hexPulse 3s ease-in-out infinite;
}
@keyframes cnc-cyber-hexPulse {
0%, 100% { box-shadow: 0 0 20px rgba(0,245,255,0.3), inset 0 0 20px rgba(0,245,255,0.05); }
50% { box-shadow: 0 0 40px rgba(0,245,255,0.5), inset 0 0 30px rgba(0,245,255,0.1); }
}
.cnc-cyber-rank-badge {
position: absolute; top: -6px; right: -6px;
background: var(--cyber-magenta); color: #fff;
font-family: 'Orbitron', sans-serif;
font-size: 10px; font-weight: 700;
padding: 3px 7px;
clip-path: polygon(0 0, 100% 0, 100% 70%, 90% 100%, 0 100%);
box-shadow: 0 0 12px var(--cyber-magenta);
}
.cnc-cyber-player-name {
font-family: 'Orbitron', sans-serif;
font-size: 18px; font-weight: 900;
text-align: center; color: #fff;
text-shadow: 0 0 20px var(--cyber-cyan);
letter-spacing: 2px; margin-bottom: 4px;
}
.cnc-cyber-player-tag {
font-size: 11px; color: rgba(0,245,255,0.4);
text-align: center; margin-bottom: 24px; letter-spacing: 1px;
}
.cnc-cyber-stat-row {
display: flex; justify-content: space-between; align-items: center;
padding: 10px 0;
border-bottom: 1px solid rgba(0,245,255,0.08);
}
.cnc-cyber-stat-row-label {
font-size: 10px; color: rgba(0,245,255,0.4);
letter-spacing: 2px; text-transform: uppercase;
}
.cnc-cyber-stat-row-val {
font-size: 15px; color: #fff;
font-family: 'Orbitron', sans-serif; font-weight: 700;
}
.cnc-cyber-cyan { color: var(--cyber-cyan); text-shadow: 0 0 10px var(--cyber-cyan); }
.cnc-cyber-magenta { color: var(--cyber-magenta); text-shadow: 0 0 10px var(--cyber-magenta); }
.cnc-cyber-green { color: var(--cyber-green); text-shadow: 0 0 10px var(--cyber-green); }
.cnc-cyber-big-counter {
padding: 20px 24px;
display: flex; flex-direction: column; justify-content: center;
}
.cnc-cyber-bc-label {
font-size: 9px; letter-spacing: 3px; text-transform: uppercase;
color: rgba(0,245,255,0.4); margin-bottom: 8px;
}
.cnc-cyber-bc-num {
font-family: 'Orbitron', sans-serif;
font-size: clamp(40px, 5vw, 62px); font-weight: 900;
line-height: 1; color: #fff;
text-shadow: 0 0 30px var(--cyber-cyan), 0 0 60px rgba(0,245,255,0.3);
letter-spacing: -1px;
}
.cnc-cyber-magenta-glow { text-shadow: 0 0 30px var(--cyber-magenta), 0 0 60px rgba(255,0,200,0.3); color: var(--cyber-magenta); }
.cnc-cyber-green-glow { text-shadow: 0 0 30px var(--cyber-green), 0 0 60px rgba(0,255,135,0.3); color: var(--cyber-green); }
.cnc-cyber-bc-sub {
font-size: 10px; color: rgba(0,245,255,0.3);
margin-top: 8px; letter-spacing: 1px;
}
.cnc-cyber-skill-grid { padding: 16px 20px; }
.cnc-cyber-skill-item {
display: grid;
grid-template-columns: 80px 1fr 40px;
align-items: center; gap: 12px; margin-bottom: 10px;
}
.cnc-cyber-skill-name {
font-size: 9px; letter-spacing: 2px; text-transform: uppercase;
color: rgba(0,245,255,0.5);
}
.cnc-cyber-skill-bar {
height: 6px; background: rgba(255,255,255,0.05);
position: relative; overflow: visible;
clip-path: polygon(0 0, 100% 0, 100% 100%, 4px 100%);
}
.cnc-cyber-skill-fill {
height: 100%; transform: scaleX(0); transform-origin: left;
animation: cnc-cyber-fillSkill 1.2s ease forwards;
position: relative;
}
.cnc-cyber-skill-fill::after {
content: ''; position: absolute; right: -2px; top: 50%;
transform: translateY(-50%); width: 8px; height: 8px;
background: currentColor;
box-shadow: 0 0 8px currentColor;
clip-path: polygon(0 0, 100% 50%, 0 100%);
}
.cnc-cyber-sf1 { background: var(--cyber-cyan); color: var(--cyber-cyan); width: 94%; animation-delay: 0.4s; }
.cnc-cyber-sf2 { background: var(--cyber-magenta); color: var(--cyber-magenta); width: 87%; animation-delay: 0.55s; }
.cnc-cyber-sf3 { background: var(--cyber-green); color: var(--cyber-green); width: 78%; animation-delay: 0.7s; }
.cnc-cyber-sf4 { background: var(--cyber-orange); color: var(--cyber-orange); width: 91%; animation-delay: 0.85s; }
.cnc-cyber-sf5 { background: var(--cyber-cyan); color: var(--cyber-cyan); width: 65%; animation-delay: 1.0s; }
.cnc-cyber-sf6 { background: var(--cyber-magenta); color: var(--cyber-magenta); width: 82%; animation-delay: 1.15s; }
@keyframes cnc-cyber-fillSkill { to { transform: scaleX(1); } }
.cnc-cyber-skill-pct {
font-size: 11px; text-align: right;
color: rgba(255,255,255,0.5);
}
.cnc-cyber-counter-row {
display: grid; grid-template-columns: repeat(3, 1fr);
gap: 12px; grid-column: 2;
}
.cnc-cyber-xp-panel { padding: 16px 20px; grid-column: 2; }
.cnc-cyber-xp-label {
display: flex; justify-content: space-between;
font-size: 9px; letter-spacing: 2px; text-transform: uppercase;
color: rgba(0,245,255,0.4); margin-bottom: 8px;
}
.cnc-cyber-xp-track {
height: 8px; background: rgba(255,255,255,0.05);
position: relative; overflow: hidden;
clip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);
}
.cnc-cyber-xp-fill {
height: 100%;
background: linear-gradient(90deg, var(--cyber-cyan), var(--cyber-magenta), var(--cyber-green));
transform: scaleX(0); transform-origin: left;
animation: cnc-cyber-xpFill 2s ease forwards 0.5s;
width: 73%;
box-shadow: 0 0 12px var(--cyber-cyan);
}
@keyframes cnc-cyber-xpFill { to { transform: scaleX(1); } }
@keyframes cnc-cyber-glitch {
0%, 90%, 100% { text-shadow: 0 0 30px var(--cyber-cyan); clip-path: none; transform: none; }
92% { clip-path: inset(20% 0 60% 0); transform: translateX(-3px); text-shadow: -2px 0 var(--cyber-magenta); }
94% { clip-path: inset(60% 0 10% 0); transform: translateX(3px); text-shadow: 2px 0 var(--cyber-cyan); }
96% { clip-path: none; transform: none; }
}
.cnc-cyber-glitch { animation: cnc-cyber-glitch 5s infinite; }
@media (prefers-reduced-motion: reduce) {
.cnc-cyber-ph::before, .cnc-cyber-avatar-hex, .cnc-cyber-skill-fill,
.cnc-cyber-xp-fill, .cnc-cyber-glitch { animation: none; }
} (function () {
function ease(t) { return 1 - Math.pow(1 - t, 3); }
var root = document.querySelector('.cnc-cyber');
if (!root) return;
root.querySelectorAll('.cnc-num[data-target]').forEach(function (el) {
var target = parseFloat(el.dataset.target);
var decimals = parseInt(el.dataset.decimals || 0, 10);
var duration = 1600;
setTimeout(function () {
var start = performance.now();
function tick(now) {
var t = Math.min((now - start) / duration, 1);
var val = ease(t) * target;
el.textContent = decimals > 0
? val.toFixed(decimals)
: Math.round(val).toLocaleString();
if (t < 1) requestAnimationFrame(tick);
}
requestAnimationFrame(tick);
}, 200);
});
})();