mirror of
https://github.com/luxfi/design.git
synced 2026-10-30 16:58:57 +00:00
The CTO reversed the accent: "no gold in lux, only monochrome white and black, more severe and minimal than hanzo.ai". 0.1.0's archaeology was real but historical — every live Lux surface had already flattened that slot to white, and lux.network's repo carries an e2e asserting the page paints zero pixels in hue band 20-60. 0.1.0 climbed that fence. --lux-gold is deleted rather than parked. An unused brand-colour token is exactly what gets re-wired by accident. The light-theme bronze (#7E5A16) dissolves with it: monochrome has no hue to darken. Severity is not an adjective here, it is four measured values, each from @luxfi/[email protected] or from a headless render of the live surfaces: ground #000000 (Hanzo #0a0a0a) brand surface1, both product configs accent #ffffff (Hanzo #e4e4e7) brand accent1 — above the ink, not below lift one (Hanzo two) 73 cards measured at #0a0a0a hairline .08 (Hanzo .10) 286 of 331 painted edges Nothing is invented; every value is a rung of the inherited ladder. Only the decorative boundary was quieted — control, focus, selected and ring are untouched, because they tell a keyboard user where they are. Lux also withdraws the fourth permitted hue. --chrome-dot-yellow is hue 45.6, inside the fenced band, so a Lux window mock would have failed lux.network's e2e having never gone near the gold. Four things the gate could not see before, each found by adding the check: --lux-black was #0A0A0B — Hanzo's press-kit black wearing a Lux name after the hanzo- -> lux- rename, and not even grey. It paints the mark. assets/brand/hero-visualization.png was a full-spectrum rainbow, 39% saturated, in a card captioned "no warm gradients, no illustration style". The specimen cards captioned --border as #1f1f1f and --ring as #333 beside chips correctly painting the current tokens — fossils of the fork. And prompts/system.md still quoted the Hanzo brand hex. Gate: 26 checks. New — every token resolves achromatic in both themes except three named signals, each proven outside band 20-60; unreadable colour syntax fails rather than passes; specimen captions match the sheet; brand imagery is achromatic (PNG decoded in ~40 lines on node:zlib, no dependency). The .light rule is now value-shaped — exempt only if the value is a bare var() onto something that inverts — replacing a name-shaped --lux-* exemption that existed for a token now deleted. Verified: build green; the packed tarball rendered headless in both themes paints 0 saturated pixels of 8,780,800; eight mutations each fail the build and restore byte-identically. Co-authored-by: Hanzo Dev <[email protected]>
27 lines
1.4 KiB
React
27 lines
1.4 KiB
React
import React from 'react'
|
|
|
|
/** The Lux mark (assets/logo.svg), monochrome — never re-hued. */
|
|
export function LuxLogo({ size = 22, variant = 'white', title = 'Lux', style, ...rest }) {
|
|
// Both marks come from the press-kit constants, not from literals — the two
|
|
// variants are one decision and belong in one place. --lux-white was already
|
|
// #FFFFFF here; --lux-black was #0A0A0B until 0.1.1, which is Hanzo's
|
|
// press-kit black wearing a Lux name after the inherit's textual rename, and
|
|
// it is not even grey (blue runs one level high). Lux's black is #000000.
|
|
const fill = variant === 'white' ? 'var(--lux-white)' : variant === 'black' ? 'var(--lux-black)' : 'currentColor'
|
|
return (
|
|
<svg viewBox="0 0 100 100" width={size} height={size} xmlns="http://www.w3.org/2000/svg" role="img" aria-label={title} style={{ display: 'block', flexShrink: 0, ...style }} {...rest}>
|
|
<path d="M50 85 L15 25 L85 25 Z" fill={fill}></path>
|
|
</svg>
|
|
)
|
|
}
|
|
|
|
/** Mark + wordmark lockup, as used in the nav and footer. */
|
|
export function LuxWordmark({ size = 22, label = 'Lux Network', variant = 'white', style }) {
|
|
return (
|
|
<span style={{ display: 'inline-flex', alignItems: 'center', gap: 8, ...style }}>
|
|
<LuxLogo size={size} variant={variant} />
|
|
<span style={{ fontSize: 15, fontWeight: 600, letterSpacing: 'var(--tracking-tight)', color: 'var(--text-primary)' }}>{label}</span>
|
|
</span>
|
|
)
|
|
}
|