2026-06-14 16:50:20 +08:00
|
|
|
---
|
2026-07-01 12:32:33 +08:00
|
|
|
// biome-ignore-all lint/correctness/noUnusedImports: Astro template consumes component imports.
|
|
|
|
|
// biome-ignore-all lint/correctness/noUnusedVariables: Astro template consumes frontmatter values.
|
2026-06-15 21:55:00 +08:00
|
|
|
import CategoryCards from "./CategoryCards.astro";
|
|
|
|
|
import HeroSearch from "./HeroSearch.astro";
|
|
|
|
|
import TrustSignals from "./TrustSignals.astro";
|
2026-06-14 16:50:20 +08:00
|
|
|
|
2026-07-04 23:15:39 +08:00
|
|
|
const trustBadges = ["Self-hosted", "Open source", "Air-gap capable", "Compliance-friendly"];
|
2026-06-14 16:50:20 +08:00
|
|
|
---
|
|
|
|
|
|
2026-06-15 21:55:00 +08:00
|
|
|
<section class="relative overflow-hidden px-6 pt-28 pb-12 md:pt-32 md:pb-16">
|
2026-07-03 14:41:39 +08:00
|
|
|
<!-- Gradient mesh background (CSS fallback beneath the shadergradient loop) -->
|
2026-06-14 16:50:20 +08:00
|
|
|
<div class="hero-mesh" aria-hidden="true"></div>
|
|
|
|
|
<div class="hero-mesh-extra" aria-hidden="true"></div>
|
|
|
|
|
|
2026-07-03 14:41:39 +08:00
|
|
|
<!-- ShaderGradient warm-wash loop: captured, self-hosted, no framework. -->
|
|
|
|
|
<!-- Poster (still) doubles as the reduced-motion and load-failure fallback. -->
|
|
|
|
|
<div class="hero-gradient" aria-hidden="true">
|
|
|
|
|
<!-- biome-ignore lint/a11y/useMediaCaption: decorative silent background loop with no audio track. -->
|
|
|
|
|
<video autoplay muted loop playsinline preload="metadata" tabindex="-1">
|
|
|
|
|
<source src="/hero-gradient.webm?v=5" type="video/webm" />
|
|
|
|
|
<source src="/hero-gradient.mp4?v=5" type="video/mp4" />
|
|
|
|
|
</video>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-06-14 16:50:20 +08:00
|
|
|
<div class="relative mx-auto max-w-4xl text-center">
|
|
|
|
|
<!-- Enterprise trust badges -->
|
|
|
|
|
<div class="animate-fade-up flex flex-wrap items-center justify-center gap-2">
|
2026-06-15 21:55:00 +08:00
|
|
|
{trustBadges.map((badge) => (
|
2026-07-03 14:41:39 +08:00
|
|
|
<span class="inline-flex items-center gap-1.5 rounded-full border border-white/25 bg-black/25 px-3 py-1 text-xs font-medium text-white backdrop-blur-sm">
|
2026-06-15 21:55:00 +08:00
|
|
|
<svg class="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
|
|
|
|
|
{badge}
|
|
|
|
|
</span>
|
2026-06-14 16:50:20 +08:00
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-07-03 14:41:39 +08:00
|
|
|
<!-- Headline: one precise promise for privacy-sensitive buyers -->
|
|
|
|
|
<h1 class="animate-fade-up mt-8 font-display text-4xl font-extrabold tracking-tight text-white sm:text-5xl md:text-6xl lg:text-7xl" style="animation-delay: 0.1s; text-shadow: 0 2px 30px rgba(90, 20, 0, 0.28);">
|
2026-07-04 20:52:59 +08:00
|
|
|
File processing for privacy-sensitive teams.
|
2026-06-15 21:55:00 +08:00
|
|
|
</h1>
|
2026-06-14 16:50:20 +08:00
|
|
|
|
2026-06-15 21:55:00 +08:00
|
|
|
<!-- Subtitle: one calm supporting line -->
|
2026-07-03 14:41:39 +08:00
|
|
|
<p class="animate-fade-up mx-auto mt-6 max-w-2xl text-lg text-white/90 md:text-xl" style="animation-delay: 0.15s; text-shadow: 0 1px 16px rgba(90, 20, 0, 0.22);">
|
2026-07-06 23:20:19 +08:00
|
|
|
Run image, video, audio, PDF, and file tools with local AI, batch workflows, and enterprise controls.
|
2026-06-15 21:55:00 +08:00
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<!-- Hero tool search -->
|
|
|
|
|
<HeroSearch />
|
|
|
|
|
|
|
|
|
|
<!-- Category cards -->
|
|
|
|
|
<CategoryCards />
|
|
|
|
|
|
|
|
|
|
<!-- Stats strip -->
|
|
|
|
|
<TrustSignals />
|
2026-06-14 16:50:20 +08:00
|
|
|
</div>
|
|
|
|
|
</section>
|