Back to CSS Number Counter Animations Cyberpunk Gaming HUD CSS + JS
Share
HTML
<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>
CSS
.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; }
}
JS
(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);
  });
})();