diff --git a/website/CLAUDE.md b/website/CLAUDE.md index 3997a5f1b0..6c1e71798b 100644 --- a/website/CLAUDE.md +++ b/website/CLAUDE.md @@ -61,3 +61,19 @@ Import from `@rivet-gg/icons`. The full Font Awesome Pro library is available. C - Do not split related multi-file examples into separate non-workspace code blocks. - If any code block fails type checking, the build fails. + +## Typography + +- Marketing headings and card titles use `font-medium` (h1 heroes, section h2s, h3/h4 card titles, FAQ headings, price figures). Do not introduce `font-normal` headings. +- `font-normal` remains correct only for deliberate de-emphasis: table `th` de-bolding, quiet `dt` labels, and input-like UI (TypesenseSearch). +- Hero h1s and section h2s use the class constants in `src/components/marketing/typography.tsx` (`tracking-[-0.015em]`, h1 `leading-[1.06]`). Do not hand-write `tracking-tight` on headings at `text-2xl` or larger; `tracking-tight` stays acceptable on `text-base` and smaller card titles. +- Manrope is the only marketing typeface; JetBrains Mono covers code, eyebrows, and captions. No serif headings on marketing pages; the Learn section's serif treatment is the only exception. +- Section labels use the eyebrow convention (`EYEBROW_CLASS` or `editorial/Eyebrow`): mono, uppercase, `tracking-[0.18em]`, pine on porcelain, sage inside ink panels. Plate and panel captions use `CAPTION_CLASS` (`Fig. NN — ...`). + +## Theme + +- Marketing pages and docs are light: cool porcelain (`paper`, `#EFEFEF`) with a `paper-deep` radial pooling bottom-left (`.depth-wash`) and a fine grain (`.paper-grain`). Warmth comes from warm-black `ink` text, classical imagery, and oil-paint textures, never from synthetic color gradients. Do not use the cream `mat` token as a surface/background design element on light surfaces (panels, dropdowns, badges, plate frames); use `paper`/`paper-mid`/`white` or `ink`-tint neutrals instead. `cream` stays valid only as the off-white text/fill inside dark `ink` panels. Docs paint the same porcelain field, render prose via `Prose surface="paper"`, and use `pine` for the active sidebar/TOC selected state; only the Learn section keeps a dark shell, and no other page may introduce a dark base. +- Dark `ink` panels (`editorial/InkPanel`) are reserved for code, terminal, screenshot, and data moments. Code and data plates stay flat ink; the oil-texture backdrop (`textureSrc`) is for editorial moments only (CTA colophon, 404). +- Orange is the spark: at most one `accent`/ember CTA per page. White text sits only on `accent-deep` (`#D63E00`) or `ink` fills, never on `accent`. Pine (`#2E4034`) is the structural color for links, eyebrows, diagrams, and selected states; sage (`#93A286`) replaces it inside ink panels. +- No drop shadows on marketing cards or imagery; depth comes from `border-ink/10..25` hairlines, `bg-white/55` card fills, and `paper-mid`/`paper-deep` layering (inside ink panels: `border-cream/10..15`). Shadows stay acceptable on functional overlays (dropdowns, tooltips, modals) and the header's glass inset highlight. +- `ink-faint` text is for captions and metadata at 12px+; body copy uses `ink-soft` or `ink`. diff --git a/website/public/fonts/jetbrains-mono/JetBrainsMono-Variable-latin.woff2 b/website/public/fonts/jetbrains-mono/JetBrainsMono-Variable-latin.woff2 new file mode 100644 index 0000000000..c3f0666ea8 Binary files /dev/null and b/website/public/fonts/jetbrains-mono/JetBrainsMono-Variable-latin.woff2 differ diff --git a/website/public/fonts/manrope/Manrope-Variable-latin.woff2 b/website/public/fonts/manrope/Manrope-Variable-latin.woff2 new file mode 100644 index 0000000000..9d7abb17d3 Binary files /dev/null and b/website/public/fonts/manrope/Manrope-Variable-latin.woff2 differ diff --git a/website/public/images/textures/bruegel-childrens-games-hero.jpg b/website/public/images/textures/bruegel-childrens-games-hero.jpg new file mode 100644 index 0000000000..ac91d45965 Binary files /dev/null and b/website/public/images/textures/bruegel-childrens-games-hero.jpg differ diff --git a/website/public/images/textures/monet-water-lilies-hero.jpg b/website/public/images/textures/monet-water-lilies-hero.jpg new file mode 100644 index 0000000000..0e9bc21c58 Binary files /dev/null and b/website/public/images/textures/monet-water-lilies-hero.jpg differ diff --git a/website/public/images/textures/oil-olive-landscape.jpg b/website/public/images/textures/oil-olive-landscape.jpg new file mode 100644 index 0000000000..40c10f21cf Binary files /dev/null and b/website/public/images/textures/oil-olive-landscape.jpg differ diff --git a/website/redirects.mjs b/website/redirects.mjs index a77d8605c0..3137f0ed40 100644 --- a/website/redirects.mjs +++ b/website/redirects.mjs @@ -36,6 +36,7 @@ export const redirects = { // Self-hosting redirect '/docs/general/self-hosting': '/docs/self-hosting/', // Removed solution pages + '/agent': '/actors/', '/solutions/agents': '/', '/solutions/app-generators': '/', '/solutions/collaborative-state': '/', diff --git a/website/src/components/Accordion.jsx b/website/src/components/Accordion.jsx index e267e4103d..1bf0b49d53 100644 --- a/website/src/components/Accordion.jsx +++ b/website/src/components/Accordion.jsx @@ -6,19 +6,16 @@ function getAccordionStyleFromVariant(variant) { // Minimal padding. Shows a border along the left when open. return { parentClass: "", - coverClass: - "[&>div]:ml-2 py-1 text-charcole-700 hover:text-charcole-900 dark:text-cream-400 dark:hover:text-cream-200", - contentClass: - "mt-2 pt-1 mb-4 mx-[7px] px-4 border-l border-cream-100 dark:border-charcole-800", + coverClass: "[&>div]:ml-2 py-1 text-ink-soft hover:text-ink", + contentClass: "mt-2 pt-1 mb-4 mx-[7px] px-4 border-l border-ink/10", }; } // Rounding is handled in Accordion by passing in isRounded to AccordionCover. return { - parentClass: - "border dark:border-charcole-800 rounded-xl mb-3 overflow-hidden", + parentClass: "border border-ink/10 rounded-xl mb-3 overflow-hidden", coverClass: - "py-4 px-5 space-x-2 hover:bg-violet-100 hover:dark:bg-white/10 rounded-t-xl transition", + "py-4 px-5 space-x-2 hover:bg-ink/[0.04] rounded-t-xl transition", contentClass: "mt-2 mb-4 mx-6", }; } @@ -56,22 +53,22 @@ export function Accordion({ icon={faCaretRight} data-accordion-icon className={clsx( - "h-3 w-3 text-charcole-800 opacity-75 dark:text-cream-100 transition-transform duration-200", + "h-3 w-3 text-ink-faint opacity-75 transition-transform duration-200", defaultOpen && "rotate-90" )} /> {icon ? ( -
+
{title}
{description ? ( -+
{description}
) : null} @@ -94,7 +91,7 @@ export function AccordionGroup({ children }) { // when inside of an Accordion group. return (