import Link from 'next/link'; import { cn } from '@/lib/cn'; import { routes } from '@/lib/site'; /** Immediate shell while the 3D bundle loads: a dark disc with the accent limb so the layout never jumps. */ export function GlobeSkeleton({ className, label = 'Loading globe…' }: { className?: string; label?: string }) { return (

{label}

); } /** Honest fallback when WebGL is unavailable (headless, blocked GPU, old device). */ export function GlobeUnavailable({ className, reason }: { className?: string; reason?: string }) { return (

3D globe

WebGL is not available in this browser

{reason ?? 'The live globe needs hardware-accelerated graphics. Positions and orbital data are still available in the catalogue.'}

Browse tracked satellites →
); }