Phase 4: component library

The approved element rules and ornament kit as Astro components in
packages/ui: buttons, pills, chips, filters, kickers, notices, fields and
cards; star paths, the header divider, tick scales and rings, seals and
edge seals, gilt corners, dust and placeholder art; the site header,
footer and page shell. Brand fonts are self-hosted. A gallery page shows
everything, and astro check now runs with the root typecheck.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aSbo2D1qP8cMFQCykf7kx
This commit is contained in:
Claude
2026-10-11 20:44:16 +00:00
parent 32cf13a5cb
commit 807528a613
159 changed files with 6270 additions and 87 deletions
+67
View File
@@ -0,0 +1,67 @@
/**
* The seals, and which one belongs to each page family (Ornament kit, "Edge
* seal by page"). Imported as URLs so they load as images: their internal
* ids never clash, and they never block text.
*/
import astrolabe from "../assets/motifs/astrolabe.svg?url";
import craftDice from "../assets/motifs/craft-seal-dice.svg?url";
import craftLeather from "../assets/motifs/craft-seal-leather.svg?url";
import craftPrint from "../assets/motifs/craft-seal-print.svg?url";
import filamentBanner from "../assets/motifs/filament-banner.svg?url";
import filamentTransmutation from "../assets/motifs/filament-transmutation.svg?url";
import keplerNest from "../assets/motifs/kepler-nest-seal.svg?url";
import layered from "../assets/motifs/layered-seal.svg?url";
import miniAstrolabe from "../assets/motifs/mini-astrolabe.svg?url";
import miniLayered from "../assets/motifs/mini-layered.svg?url";
import miniTome from "../assets/motifs/mini-tome.svg?url";
import miniTransmutation from "../assets/motifs/mini-transmutation.svg?url";
import sevenMetals from "../assets/motifs/seven-metals-dipper.svg?url";
import squaredCircle from "../assets/motifs/squared-circle-seal.svg?url";
import transmutationStarPaths from "../assets/motifs/transmutation-seal-star-paths.svg?url";
import transmutation from "../assets/motifs/transmutation-seal.svg?url";
import triaPrima from "../assets/motifs/tria-prima-array-seal.svg?url";
import zodiac from "../assets/motifs/zodiac-seal.svg?url";
export const seals = {
astrolabe,
"craft-dice": craftDice,
"craft-leather": craftLeather,
"craft-print": craftPrint,
"filament-transmutation": filamentTransmutation,
"kepler-nest": keplerNest,
layered,
"mini-astrolabe": miniAstrolabe,
"mini-layered": miniLayered,
"mini-tome": miniTome,
"mini-transmutation": miniTransmutation,
"seven-metals": sevenMetals,
"squared-circle": squaredCircle,
"transmutation-star-paths": transmutationStarPaths,
transmutation,
"tria-prima": triaPrima,
zodiac,
} as const;
export type SealName = keyof typeof seals;
export { filamentBanner };
/** Each page family's edge seal. A craft page uses its own craft seal. */
export const pageSeals = {
landing: "transmutation-star-paths",
resume: "kepler-nest",
work: "squared-circle",
inquiries: "filament-transmutation",
about: "astrolabe",
library: "zodiac",
shelf: "tria-prima",
workshop: "craft-print",
tabletop: "astrolabe",
now: "zodiac",
blog: "seven-metals",
post: "filament-transmutation",
store: "craft-dice",
notFound: "zodiac",
} as const satisfies Record<string, SealName>;
export type PageFamily = keyof typeof pageSeals;