style: refactor landing hero
This commit is contained in:
parent
dd5c0cd29a
commit
8a5ec9a160
3 changed files with 61 additions and 25 deletions
BIN
docs/public/images/screenshot.png
Normal file
BIN
docs/public/images/screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5 MiB |
|
|
@ -191,37 +191,69 @@ const faqs = [
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
function BrowserMockup() {
|
||||||
|
return (
|
||||||
|
<div className="w-full overflow-hidden rounded-lg border border-border bg-card shadow-2xl">
|
||||||
|
<div className="relative flex items-center border-b border-border bg-secondary/80 px-4 py-2">
|
||||||
|
<div className="flex gap-1.5">
|
||||||
|
<div className="h-3 w-3 rounded-full bg-red-500" />
|
||||||
|
<div className="h-3 w-3 rounded-full bg-yellow-500" />
|
||||||
|
<div className="h-3 w-3 rounded-full bg-green-500" />
|
||||||
|
</div>
|
||||||
|
<div className="pointer-events-none absolute inset-0 flex items-center justify-center px-10 sm:px-20">
|
||||||
|
<div className="w-full max-w-md rounded bg-background/80 px-3 py-0.5 text-center text-xs text-muted-foreground">
|
||||||
|
localhost:4096
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="aspect-video bg-background/80">
|
||||||
|
<img
|
||||||
|
src="/images/screenshot.png"
|
||||||
|
alt="Zerobyte backups dashboard"
|
||||||
|
className="h-full w-full object-cover object-top"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export default function LandingPage() {
|
export default function LandingPage() {
|
||||||
return (
|
return (
|
||||||
<div data-landing-page className="bg-background text-foreground">
|
<div data-landing-page className="bg-background text-foreground">
|
||||||
<main>
|
<main>
|
||||||
<section className="relative overflow-hidden border-b border-border">
|
<section className="relative overflow-hidden border-b border-border">
|
||||||
<div aria-hidden className="landing-hero-docs-grid pointer-events-none absolute inset-0" />
|
<div aria-hidden className="landing-hero-docs-grid pointer-events-none absolute inset-0" />
|
||||||
<div className="relative mx-auto max-w-6xl px-4 py-24 sm:px-6 sm:py-32 lg:py-40">
|
<div aria-hidden className="landing-hero-glow pointer-events-none absolute inset-0" />
|
||||||
<div className="mx-auto max-w-3xl text-center">
|
<div className="relative mx-auto max-w-[90rem] px-4 py-20 sm:px-6 sm:py-24 lg:py-32">
|
||||||
<p className="mb-4 text-sm font-medium uppercase tracking-wider text-strong-accent">
|
<div className="grid items-center gap-12 min-[1100px]:grid-cols-[minmax(0,0.9fr)_minmax(0,1.1fr)] min-[1100px]:gap-8 lg:gap-12">
|
||||||
Open Source Backup Control Plane
|
<div className="text-left">
|
||||||
</p>
|
<p className="mb-4 text-sm font-medium uppercase tracking-wider text-strong-accent">
|
||||||
<h1 className="text-balance text-4xl font-bold tracking-tight text-foreground sm:text-5xl lg:text-6xl">
|
Open Source Backup Control Plane
|
||||||
Backups you can finally forget about
|
</p>
|
||||||
</h1>
|
<h1 className="text-balance text-4xl font-bold leading-tight tracking-tight text-foreground sm:text-5xl lg:text-6xl">
|
||||||
<p className="mx-auto mt-6 max-w-2xl text-pretty text-lg leading-relaxed text-muted-foreground">
|
Backups you can finally forget about
|
||||||
Zerobyte gives you a clean web interface to schedule, monitor, restore, and maintain encrypted backups
|
</h1>
|
||||||
across local disks, NAS shares, remote servers, and cloud storage.
|
<p className="mt-6 max-w-xl text-pretty text-lg leading-relaxed text-muted-foreground">
|
||||||
</p>
|
Zerobyte gives you a clean web interface to schedule, monitor, restore, and maintain encrypted backups
|
||||||
<div className="mt-10 flex flex-col items-center justify-center gap-4 sm:flex-row">
|
across local disks, NAS shares, remote servers, and cloud storage.
|
||||||
<Link to="/docs/$" params={{ _splat: "" }} className={primaryButtonClass}>
|
</p>
|
||||||
Documentation
|
<div className="mt-10 flex flex-wrap gap-3">
|
||||||
<ArrowRight className="h-4 w-4" />
|
<Link to="/docs/$" params={{ _splat: "" }} className={primaryButtonClass}>
|
||||||
</Link>
|
Documentation
|
||||||
<a href={repoUrl} target="_blank" rel="noopener noreferrer" className={outlineButtonClass}>
|
<ArrowRight className="h-4 w-4" />
|
||||||
<Github className="h-4 w-4" />
|
</Link>
|
||||||
View on GitHub
|
<a href={repoUrl} target="_blank" rel="noopener noreferrer" className={outlineButtonClass}>
|
||||||
</a>
|
<Github className="h-4 w-4" />
|
||||||
|
View on GitHub
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<p className="mt-6 max-w-xl text-sm text-muted-foreground">
|
||||||
|
Self-hosted. Restic-powered. Built for operators who want fewer scripts and more visibility.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div className="min-[1100px]:-mr-8 xl:-mr-12">
|
||||||
|
<BrowserMockup />
|
||||||
</div>
|
</div>
|
||||||
<p className="mt-8 text-sm text-muted-foreground">
|
|
||||||
Self-hosted. Restic-powered. Built for operators who want fewer scripts and more visibility.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
||||||
|
|
@ -321,6 +321,10 @@ body:has([data-docs-page])::before {
|
||||||
mask-image: radial-gradient(ellipse at top, black 70%, transparent 100%);
|
mask-image: radial-gradient(ellipse at top, black 70%, transparent 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.landing-hero-glow {
|
||||||
|
background: radial-gradient(ellipse at center, var(--hero-a) 0%, var(--hero-b) 28%, transparent 68%);
|
||||||
|
}
|
||||||
|
|
||||||
/* Ensure prose body text is readable against the dark background */
|
/* Ensure prose body text is readable against the dark background */
|
||||||
.prose {
|
.prose {
|
||||||
--tw-prose-body: var(--sea-ink);
|
--tw-prose-body: var(--sea-ink);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue