Awaiting First Event
A copy-paste empty states component in pure HTML & CSS. Zero dependencies, framework-agnostic, MIT-licensed.
Empty StatesHTMLCSSany framework
Awaiting first event
Data will appear as soon as it arrives
Copy into your project
HTML
<!-- Awaiting First Event -->
<div class="nuda-es2-antenna" role="status" aria-label="Awaiting first event">
<div class="nuda-es2-antenna__scene" aria-hidden="true">
<span class="nuda-es2-antenna__wave nuda-es2-antenna__wave--a"></span>
<span class="nuda-es2-antenna__wave nuda-es2-antenna__wave--b"></span>
<span class="nuda-es2-antenna__wave nuda-es2-antenna__wave--c"></span>
<svg class="nuda-es2-antenna__mast" viewBox="0 0 24 40" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 40 L12 14" />
<circle cx="12" cy="8" r="5" />
</svg>
</div>
<h3 class="nuda-es2-antenna__title">Awaiting first event</h3>
<p class="nuda-es2-antenna__sub">Data will appear as soon as it arrives</p>
</div>CSS
.nuda-es2-antenna {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
padding: 20px;
text-align: center;
width: 100%;
max-width: 240px;
color: #e4ff54;
}
.nuda-es2-antenna__scene {
position: relative;
width: 80px;
height: 60px;
display: flex;
align-items: flex-end;
justify-content: center;
}
.nuda-es2-antenna__mast {
position: relative;
width: 32px;
height: 48px;
color: currentColor;
z-index: 1;
}
.nuda-es2-antenna__wave {
position: absolute;
top: 2px;
left: 50%;
width: 14px;
height: 14px;
border: 1.5px solid currentColor;
border-radius: 50%;
transform: translate(-50%,0) scale(.4);
opacity: 0;
animation: nuda-es2-antenna-wave 2.4s ease-out infinite;
}
.nuda-es2-antenna__wave--a {
animation-delay: 0s;
}
.nuda-es2-antenna__wave--b {
animation-delay: .8s;
}
.nuda-es2-antenna__wave--c {
animation-delay: 1.6s;
}
.nuda-es2-antenna__title {
font: 600 13px ui-sans-serif,system-ui;
color: #fafafa;
margin: 0;
}
.nuda-es2-antenna__sub {
font: 400 11px ui-sans-serif,system-ui;
color: #a0a0a8;
margin: 0;
}
@keyframes nuda-es2-antenna-wave {
0% {
transform: translate(-50%,0) scale(.4);
opacity: .8;
}
100% {
transform: translate(-50%,0) scale(3.2);
opacity: 0;
}
}
@media (prefers-reduced-motion:reduce) {
.nuda-es2-antenna__wave {
animation: none !important;
opacity: 0;
}
}
How to use Awaiting First Event
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.