mirror of
https://github.com/multica-ai/multica.git
synced 2026-08-05 17:40:11 +02:00
Complete rework of the docs site, in three passes squashed into one change: 1. P0 fact corrections across the core-loop pages (agent access model, comment triggers and coalescing, issue lifecycle, offline/queue semantics, task states and retries, dispatch via realtime push). 2. Chinese rewrite as the authoring language: final 12-group IA, new "Core concepts" and "Put agents to work" pages, curated welcome page, permanent-UI quickstart (no onboarding-wizard dependency), operator reference restored (CLI command reference, webhook response codes, task state/timeout tables, config set keys, upgrade notes). 3. Verification and sync: every load-bearing claim re-checked against current main with file:line evidence (migration 103 auto-backfill, CLI-only trigger toggling, duplication semantics, COOKIE_DOMAIN, GitHub App variables, Qwen Code as the 17th provider); register standards applied to all 39 pages; en/ja/ko synced from zh with same-language heading anchors (verified, zero dead links); 17 product screenshots plus 2 diagrams wired in. Supporting fixes: i18n middleware no longer swallows /images assets, sidebar folder indent survives custom link padding, unused editorial components removed. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
84 lines
2.4 KiB
TypeScript
84 lines
2.4 KiB
TypeScript
import Link from "next/link";
|
|
import type { ReactNode } from "react";
|
|
|
|
/**
|
|
* DocsHero — editorial showpiece header for landing-style pages.
|
|
*
|
|
* Escapes prose scope to run its own type scale. Title accepts ReactNode so
|
|
* callers can pass <em> spans for brand-color emphasis (italic is avoided —
|
|
* Chinese italic is a synthetic slant and reads as broken).
|
|
*/
|
|
export function DocsHero({
|
|
eyebrow,
|
|
title,
|
|
subtitle,
|
|
}: {
|
|
eyebrow?: string;
|
|
title: ReactNode;
|
|
subtitle?: ReactNode;
|
|
}) {
|
|
return (
|
|
<section className="not-prose mb-7 pt-2">
|
|
{eyebrow ? (
|
|
<p className="mb-5 text-[0.6875rem] font-semibold uppercase tracking-[0.1em] text-muted-foreground">
|
|
{eyebrow}
|
|
</p>
|
|
) : null}
|
|
<h1
|
|
className={`${subtitle ? "mb-5" : "mb-0"} font-[family-name:var(--font-serif)] text-[2.25rem] font-normal leading-[1.05] tracking-[-0.025em] text-foreground sm:text-[2.75rem]`}
|
|
>
|
|
{title}
|
|
</h1>
|
|
{subtitle ? (
|
|
<p className="max-w-[36rem] font-[family-name:var(--font-serif)] text-[1.25rem] leading-[1.5] tracking-[-0.005em] text-[oklch(from_var(--foreground)_calc(l+0.06)_c_h)]">
|
|
{subtitle}
|
|
</p>
|
|
) : null}
|
|
</section>
|
|
);
|
|
}
|
|
|
|
/**
|
|
* DocsFeatureGrid / DocsFeatureCard — kept for back-compat with any pages
|
|
* still using the old card grid before the editorial migration. Prefer
|
|
* <NumberedCards>/<NumberedCard> from editorial.tsx for showpiece pages.
|
|
*/
|
|
export function DocsFeatureGrid({ children }: { children: ReactNode }) {
|
|
return (
|
|
<div className="not-prose my-8 grid grid-cols-1 gap-3 md:grid-cols-3">
|
|
{children}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export function DocsFeatureCard({
|
|
icon,
|
|
title,
|
|
description,
|
|
href,
|
|
}: {
|
|
icon: ReactNode;
|
|
title: string;
|
|
description: string;
|
|
href: string;
|
|
}) {
|
|
return (
|
|
<Link
|
|
href={href}
|
|
className="group flex flex-col gap-3 rounded-[4px] border border-border bg-card p-5 no-underline transition-all hover:border-[var(--primary)]"
|
|
>
|
|
<div className="flex size-9 items-center justify-center text-[var(--accent-foreground)] [&_svg]:size-[20px]">
|
|
{icon}
|
|
</div>
|
|
<div className="flex flex-col gap-1.5">
|
|
<span className="font-[family-name:var(--font-serif)] text-[1.0625rem] font-medium tracking-[-0.01em] text-foreground">
|
|
{title}
|
|
</span>
|
|
<p className="text-sm leading-[1.55] text-muted-foreground">
|
|
{description}
|
|
</p>
|
|
</div>
|
|
</Link>
|
|
);
|
|
}
|