disclosure-bureau/web/components/brand-mark.tsx
Luiz Gustavo 590bb3283c
Some checks failed
CI / Web — typecheck + lint + build (push) Failing after 45s
CI / Scripts — Python smoke (push) Failing after 6s
CI / Web — npm audit (push) Failing after 35s
CI / Retrieval — golden set (Recall@5 + MRR) (push) Failing after 7s
ux(brand): logomark — three offset gold bars + bolder wordmark
The lone "▍ The Disclosure Bureau" glyph read as a stray vertical bar next
to small mono text — easy to lose against the navbar links. The brand
needed visible weight without inventing a logotype from scratch.

- BrandMark (new) — small inline SVG-free mark: three rounded gold bars
  at decreasing heights (100% / 70% / 45%), suggesting a redaction edge
  or a stack of classified-page tabs. Each bar lifts 1px on hover, so the
  mark gets a subtle physical response without animation libraries.
- Wordmark switched to font-display font-semibold (was display regular)
  and bumped to 19/20px so it carries the row.
- On desktop a tiny "CLASSIFIED · PUBLIC RECORD" microline in #5a6678
  monospace sits beneath the wordmark; it disappears on mobile to keep
  the row tight inside the drawer.
- Used in SiteHeader (every page) and inside the MobileNav drawer
  header — replaces the previous bare-text label there too.

Verified at desktop 1440 and mobile 600 widths.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 01:47:27 -03:00

57 lines
2.1 KiB
TypeScript

/**
* BrandMark — The Disclosure Bureau wordmark + mark.
*
* Small inline SVG (three offset gold bars suggesting a redaction edge / a
* classification stamp) paired with the serif wordmark and a tiny
* monospace "CLASSIFIED · PUBLIC RECORD" microline beneath. Used in
* SiteHeader on every page and inside the mobile drawer header. Keeps the
* brand presence consistent without depending on an external asset.
*
* Two sizes: `default` (header) and `compact` (mobile drawer).
*/
interface BrandMarkProps {
size?: "default" | "compact";
className?: string;
}
export function BrandMark({ size = "default", className = "" }: BrandMarkProps) {
const isCompact = size === "compact";
return (
<span className={`inline-flex items-center gap-2.5 group ${className}`}>
<span
aria-hidden="true"
className="inline-flex items-end gap-[2px]"
style={{ height: isCompact ? "20px" : "24px" }}
>
<span
className="block w-[3px] rounded-sm bg-[#e0c080] transition-transform group-hover:translate-y-[-1px]"
style={{ height: "100%" }}
/>
<span
className="block w-[3px] rounded-sm bg-[#e0c080]/70 transition-transform group-hover:translate-y-[-1px]"
style={{ height: "70%" }}
/>
<span
className="block w-[3px] rounded-sm bg-[#e0c080]/40 transition-transform group-hover:translate-y-[-1px]"
style={{ height: "45%" }}
/>
</span>
<span className="flex flex-col leading-none">
<span
className={
isCompact
? "font-display font-semibold text-[16px] text-[#e7ecf3] group-hover:text-[#e0c080] transition-colors"
: "font-display font-semibold text-[19px] md:text-[20px] text-[#e7ecf3] group-hover:text-[#e0c080] transition-colors"
}
>
The Disclosure Bureau
</span>
{!isCompact && (
<span className="hidden md:inline mt-1 font-mono text-[9px] uppercase tracking-[0.22em] text-[#5a6678]">
Classified · public record
</span>
)}
</span>
</span>
);
}