Dotted Rotating Globe
A dotted-sphere globe that turns slowly under a fixed highlight - pure CSS and inline SVG, no WebGL.
3 frameworksBeginner
A near-black section with a pulsing radial glow behind a rotating dotted globe.
<!--
The section paints its own near-black surface and its own glow, so it looks
identical on a light or dark page - there is no dark: variant here, nothing
inherits the theme. The glow pulses on opacity only (compositor-cheap).
-->
<style>
@keyframes gdg-spin { to { transform: rotate(1turn); } }
@keyframes gdg-glow { 0%,100% { opacity: 0.55; } 50% { opacity: 0.9; } }
</style>
<section class="relative isolate w-full overflow-hidden rounded-2xl bg-gray-950 px-6 py-14 text-center sm:py-16">
<div class="absolute left-1/2 top-1/2 -z-10 h-72 w-72 -translate-x-1/2 -translate-y-1/2 rounded-full bg-sky-500/40 blur-3xl [animation:gdg-glow_6s_ease-in-out_infinite] motion-reduce:[animation:none]" aria-hidden="true"></div>
<div class="relative mx-auto aspect-square w-full max-w-[220px]" aria-hidden="true">
<svg viewBox="0 0 200 200" class="h-full w-full text-sky-400/70 [animation:gdg-spin_38s_linear_infinite] motion-reduce:[animation:none]">
<defs>
<pattern id="gdg-dots" width="8" height="8" patternUnits="userSpaceOnUse">
<circle cx="1.6" cy="1.6" r="1.3" fill="currentColor" />
</pattern>
<clipPath id="gdg-clip"><circle cx="100" cy="100" r="92" /></clipPath>
</defs>
<g clip-path="url(#gdg-clip)">
<rect width="200" height="200" fill="url(#gdg-dots)" />
<ellipse cx="100" cy="100" rx="92" ry="20" fill="none" stroke="currentColor" stroke-opacity="0.4" />
<ellipse cx="100" cy="100" rx="46" ry="92" fill="none" stroke="currentColor" stroke-opacity="0.3" />
</g>
<circle cx="100" cy="100" r="92" fill="none" stroke="currentColor" stroke-opacity="0.55" />
</svg>
<div class="pointer-events-none absolute inset-0 rounded-full bg-[radial-gradient(circle_at_34%_28%,rgba(255,255,255,0.35),transparent_55%)]"></div>
</div>
<h3 class="mt-8 text-2xl font-bold tracking-tight text-white sm:text-3xl">Always on, everywhere</h3>
<p class="mx-auto mt-3 max-w-md text-sm leading-relaxed text-gray-300">A quiet planet in the dark - the glow does the talking.</p>
</section>| Prop | Type | Default | Description |
|---|---|---|---|
heading | ReactNode | - | Heading |
copy | string | - | Body text shown under the title. |
className | string | - | Additional classes merged onto the root element. |
The section paints its own `bg-gray-950` and glow, so it looks identical on a light or dark page with no `dark:` variants. The glow pulses on opacity only (compositor-cheap) and sits behind the globe on the z-axis; both the glow and the spin respect `motion-reduce`.