Pulse Heart Clock
A copy-paste watch faces & clocks component in pure HTML & CSS. Zero dependencies, framework-agnostic, MIT-licensed.
Watch Faces & ClocksHTMLCSSany framework
72BPM
Copy into your project
HTML
<div class="nuda-pulse" role="img" aria-label="Pulse 72 bpm">
<div class="nuda-pulse__heart" aria-hidden="true">
<svg viewBox="0 0 32 32" width="32" height="32">
<path d="M16 28 C2 18 2 8 10 8 c3 0 5 2 6 4 c1-2 3-4 6-4 c8 0 8 10-6 20z"
fill="#ff5e7a" />
</svg>
</div>
<div class="nuda-pulse__bpm">
<span>72</span>
<em>BPM</em>
</div>
<svg class="nuda-pulse__ecg" viewBox="0 0 200 40">
<polyline points="0,20 30,20 38,20 44,8 50,32 56,12 62,20 90,20 100,20
110,12 116,28 122,20 200,20"
fill="none" stroke="#ff5e7a" stroke-width="1.5"
stroke-linejoin="round" stroke-linecap="round"
class="nuda-pulse__line" />
</svg>
</div>CSS
/* Pulse Heart Clock
Heart beats in a double-thump pattern at 72 bpm (interval = 60/72 ≈ 0.83s).
ECG line scrolls behind. */
.nuda-pulse {
--accent: #ff5e7a;
display: inline-flex;
align-items: center;
gap: 14px;
padding: 14px 18px;
background: #0c0c10;
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: 14px;
font-family: system-ui;
color: #fafafa;
}
.nuda-pulse__heart {
animation: nuda-pulse-beat 0.83s ease-in-out infinite;
filter: drop-shadow(0 0 6px rgba(255, 94, 122, 0.5));
}
.nuda-pulse__bpm {
display: flex;
flex-direction: column;
line-height: 1;
}
.nuda-pulse__bpm span {
font: 700 32px ui-monospace, Menlo, monospace;
letter-spacing: -2px;
}
.nuda-pulse__bpm em {
font-style: normal;
font-size: 9px;
letter-spacing: 2px;
color: #a0a0a8;
margin-top: 2px;
}
.nuda-pulse__ecg {
width: 110px;
height: 40px;
flex-shrink: 0;
}
.nuda-pulse__line {
stroke-dasharray: 300;
stroke-dashoffset: 300;
animation: nuda-pulse-ecg 1.66s linear infinite;
filter: drop-shadow(0 0 4px var(--accent));
}
@keyframes nuda-pulse-beat {
0%, 28%, 100% { transform: scale(1); }
14% { transform: scale(1.18); }
42% { transform: scale(1.08); }
}
@keyframes nuda-pulse-ecg {
0% { stroke-dashoffset: 300; }
50% { stroke-dashoffset: 0; }
100% { stroke-dashoffset: -300; }
}
@media (prefers-reduced-motion: reduce) {
.nuda-pulse__heart,
.nuda-pulse__line { animation: none; }
.nuda-pulse__line { stroke-dashoffset: 0; }
}How to use Pulse Heart Clock
Paste the HTML where you need it and the CSS into a global stylesheet (or a <style> tag). Every class is prefixed nuda- so it never collides with Tailwind or your own styles. Tweak the CSS custom properties to match your design system.
Works in React, Vue, Svelte, Astro, Next.js, Nuxt, Laravel Blade, Django, Rails — or a single .html file. No npm install, no build step.