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>
This commit is contained in:
parent
df05b21dff
commit
590bb3283c
3 changed files with 62 additions and 9 deletions
57
web/components/brand-mark.tsx
Normal file
57
web/components/brand-mark.tsx
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
/**
|
||||||
|
* 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>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -22,6 +22,7 @@ import { usePathname } from "next/navigation";
|
||||||
import { useEffect, useRef, useState } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
import { Menu, X } from "lucide-react";
|
import { Menu, X } from "lucide-react";
|
||||||
import { AuthBar } from "./auth-bar";
|
import { AuthBar } from "./auth-bar";
|
||||||
|
import { BrandMark } from "./brand-mark";
|
||||||
import { LocaleToggleClient } from "./locale-toggle-client";
|
import { LocaleToggleClient } from "./locale-toggle-client";
|
||||||
|
|
||||||
interface NavItem {
|
interface NavItem {
|
||||||
|
|
@ -94,10 +95,7 @@ export function MobileNav({
|
||||||
{/* Panel */}
|
{/* Panel */}
|
||||||
<div className="absolute top-0 right-0 h-full w-[85vw] max-w-sm bg-[#0d1220] border-l border-[rgba(224,192,128,0.20)] shadow-2xl flex flex-col">
|
<div className="absolute top-0 right-0 h-full w-[85vw] max-w-sm bg-[#0d1220] border-l border-[rgba(224,192,128,0.20)] shadow-2xl flex flex-col">
|
||||||
<div className="flex items-center justify-between px-4 py-4 border-b border-[rgba(224,192,128,0.15)]">
|
<div className="flex items-center justify-between px-4 py-4 border-b border-[rgba(224,192,128,0.15)]">
|
||||||
<span className="font-display text-lg text-[#e7ecf3]">
|
<BrandMark size="compact" />
|
||||||
<span className="text-[#e0c080] mr-1" aria-hidden="true">▍</span>
|
|
||||||
The Disclosure Bureau
|
|
||||||
</span>
|
|
||||||
<button
|
<button
|
||||||
ref={closeBtnRef}
|
ref={closeBtnRef}
|
||||||
type="button"
|
type="button"
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { AuthBar } from "./auth-bar";
|
import { AuthBar } from "./auth-bar";
|
||||||
|
import { BrandMark } from "./brand-mark";
|
||||||
import { LocaleToggle } from "./locale-toggle";
|
import { LocaleToggle } from "./locale-toggle";
|
||||||
import { MobileNav } from "./mobile-nav";
|
import { MobileNav } from "./mobile-nav";
|
||||||
import { NavLink } from "./nav-link";
|
import { NavLink } from "./nav-link";
|
||||||
|
|
@ -26,11 +27,8 @@ export function SiteHeader({ locale }: { locale: "pt-br" | "en" }) {
|
||||||
return (
|
return (
|
||||||
<header className="border-b border-[rgba(224,192,128,0.15)]">
|
<header className="border-b border-[rgba(224,192,128,0.15)]">
|
||||||
<div className="mx-auto max-w-7xl px-4 md:px-8 py-4 flex items-center justify-between gap-4">
|
<div className="mx-auto max-w-7xl px-4 md:px-8 py-4 flex items-center justify-between gap-4">
|
||||||
<Link href="/" className="flex items-center gap-2 group" aria-label="The Disclosure Bureau — home">
|
<Link href="/" aria-label="The Disclosure Bureau — home">
|
||||||
<span className="text-[#e0c080] text-lg" aria-hidden="true">▍</span>
|
<BrandMark />
|
||||||
<span className="font-display text-xl text-[#e7ecf3] group-hover:text-[#e0c080] transition-colors">
|
|
||||||
The Disclosure Bureau
|
|
||||||
</span>
|
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
{/* Desktop nav — hidden below md, shown md+. */}
|
{/* Desktop nav — hidden below md, shown md+. */}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue