mirror of
https://github.com/luxfi/design.git
synced 2026-10-30 16:58:57 +00:00
Lux and Hanzo run the same greyscale — that is the estate's white-label model, not an accident to tidy up. So this package now DEPENDS on @hanzo/design and inherits its neutral ladder, opacity rungs, surface recipes, type, spacing, elevation and motion at build time. One hand-authored token file remains: tokens/brand.css, holding the two things that are genuinely Lux — the gold and the mark constants. The nine forked token files are deleted. They are what forking costs: frozen at an older cut of the substrate, they carried a #333333 focus ring (1.66:1 — a focus indicator nobody can see), a solid #1f1f1f border that vanishes the moment it lands on a lifted surface, a #666666 "destructive" indistinguishable from a disabled control, and a card cut at rgb(23 23 23 / .5) that composites to #101010 on the page. Upstream had already fixed every one. None were decisions; they were drift. The gold is RECOVERED, not chosen. #B8960C is the last one standing in the estate: lux.financial still draws its brand badge with linear-gradient(135deg, <brand> 0%, #B8960C 100%) in three places, beside a constant reading `BRAND_COLOR = "#FFFFFF"; // Gold accent`. The comment outlived the value — the accent slot survived every rebrand and the hue in it was flattened to white. It lands in --brand and nowhere else: not --accent, which is a surface here and would turn every dropdown row gold; not --primary, which is the monochrome atom. Three things happen to the inherited CSS, each load-bearing: - comments are stripped (the substrate's prose is Hanzo's) - hanzo- becomes lux- (a custom property is vocabulary; a Lux surface must not show --hanzo-black in DevTools). --hanzo-black is #0A0A0B, exactly what this package's press kit already called --lux-black. - @font-face blocks are dropped, and with them every url(). Geist is owned by @hanzo/design, which self-hosts it; an estate should hold one copy of a font binary, not one per brand. Shipping the rules without the files would fail every consumer's build on a missing module. styles.css is generated and flattened, as upstream's is — no @import for a consumer to resolve, no url() to rebase, no ordering to get wrong. The brand layer is written LAST because :root and .light have identical specificity and source order is the only thing deciding. check-tokens.mjs is the gate, and it runs on the shipped artifacts rather than the sources — the distinction already mattered once upstream, where an @import-list entry point passed every source-level check for years while no bundler could resolve a token from it. It caught a real defect during this change: the light gold was tuned against the page ground and measured 3.98:1 on --secondary. It is now #786108, 4.70:1 worst case. 18 checks pass. Four mutation probes confirm the gate fails loudly on a dangling var(), a reintroduced Hanzo identifier, an unshipped url(), and a missing .light restatement of the gold (2.23:1 — invisible, silent). Co-authored-by: Hanzo Dev <[email protected]>
16 lines
325 B
JSON
16 lines
325 B
JSON
{
|
|
"compilerOptions": {
|
|
"target": "ES2022",
|
|
"module": "NodeNext",
|
|
"moduleResolution": "NodeNext",
|
|
"lib": ["ES2022", "DOM"],
|
|
"strict": true,
|
|
"declaration": true,
|
|
"outDir": "dist",
|
|
"rootDir": "src",
|
|
"skipLibCheck": true,
|
|
"verbatimModuleSyntax": true
|
|
},
|
|
"include": ["src/**/*.ts"]
|
|
}
|