feat(header): stack ANL wordmark in three lines and show desktop nav from 1000px

- Replace the "ANL" + "AI Agent Networking LAB" pair with a stacked
  "AI Agent / Networking / Laboratory" wordmark in Geist semibold; the
  cobalt initials spell out ANL.
- Add a header-only `nav` screen (1000px) so the inline desktop nav
  replaces the mobile menu earlier than the shared `desktop` (1240px)
  breakpoint, with compact tracking/padding between 1000px and 1239px.
  The masthead strip and project page layout still use `desktop`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RcexqbEX5CnaLog2xNFQN7
This commit is contained in:
GodopuandClaude Opus 5 committed 2026-09-13 20:22:08 +09:00
1 parent f3972cac27
commit 43ef515a3b
2 files changed
+14 -14

No files matched your search

+12 -14
View File
@@ -134,7 +134,7 @@ export default function Header() {
{/* Brand logo */} {/* Brand logo */}
<Link <Link
href="/" href="/"
className="group flex items-center gap-3 min-w-0 desktop:shrink-0" className="group flex items-center gap-3 min-w-0 nav:shrink-0"
onClick={() => setOpen(false)} onClick={() => setOpen(false)}
> >
<div className="relative flex items-center justify-center w-9 h-9 sm:w-10 sm:h-10 rounded-xl overflow-hidden shadow-sm border border-line group-hover:border-cobalt/40 group-hover:shadow-md group-hover:scale-105 transition-all duration-300 shrink-0"> <div className="relative flex items-center justify-center w-9 h-9 sm:w-10 sm:h-10 rounded-xl overflow-hidden shadow-sm border border-line group-hover:border-cobalt/40 group-hover:shadow-md group-hover:scale-105 transition-all duration-300 shrink-0">
@@ -162,18 +162,16 @@ export default function Header() {
</svg> </svg>
</div> </div>
<div className="flex flex-col leading-none min-w-0"> {/* Stacked wordmark — the cobalt initials spell out ANL */}
<span className="headline-ko text-lg text-ink sm:text-xl font-bold tracking-tight group-hover:text-cobalt-dark transition-colors"> <div className="font-sans flex flex-col min-w-0 text-[0.8rem] sm:text-[0.875rem] font-semibold leading-[1.15] tracking-tight text-ink transition-colors group-hover:text-cobalt-dark">
ANL <span className="whitespace-nowrap"><span className="text-cobalt">A</span>I Agent</span>
</span> <span className="whitespace-nowrap"><span className="text-cobalt">N</span>etworking</span>
<span className="kicker mt-1 transition-colors group-hover:text-cobalt-dark truncate"> <span className="whitespace-nowrap"><span className="text-cobalt">L</span>aboratory</span>
AI Agent Networking LAB
</span>
</div> </div>
</Link> </Link>
{/* Desktop nav — small caps, wide tracking (visible at >= 1240px) */} {/* Desktop nav — small caps, wide tracking (visible at >= 1000px; compact spacing below 1240px) */}
<div className="hidden items-center gap-4 desktop:flex"> <div className="hidden items-center gap-3 nav:flex desktop:gap-4">
<nav className="flex items-center gap-2" aria-label="Main Navigation"> <nav className="flex items-center gap-2" aria-label="Main Navigation">
{navItems.map((item) => { {navItems.map((item) => {
const active = isActive(item.href); const active = isActive(item.href);
@@ -182,7 +180,7 @@ export default function Header() {
key={item.href} key={item.href}
href={item.href} href={item.href}
aria-current={active ? "page" : undefined} aria-current={active ? "page" : undefined}
className={`group relative flex items-baseline gap-1.5 text-[0.78rem] font-semibold uppercase tracking-[0.18em] transition-all px-3 py-1.5 rounded-md ${ className={`group relative flex items-baseline gap-1.5 text-[0.78rem] font-semibold uppercase tracking-[0.1em] desktop:tracking-[0.18em] transition-all px-2 desktop:px-3 py-1.5 rounded-md ${
active active
? "bg-cobalt-dark text-white dark:text-ivory shadow-sm font-bold" ? "bg-cobalt-dark text-white dark:text-ivory shadow-sm font-bold"
: "text-ink hover:text-cobalt-dark hover:bg-paper/60" : "text-ink hover:text-cobalt-dark hover:bg-paper/60"
@@ -204,8 +202,8 @@ export default function Header() {
<ThemeToggle /> <ThemeToggle />
</div> </div>
{/* Mobile controls (visible under 1240px) */} {/* Mobile controls (visible under 1000px) */}
<div className="flex items-center gap-2 desktop:hidden"> <div className="flex items-center gap-2 nav:hidden">
<ThemeToggle /> <ThemeToggle />
<button <button
type="button" type="button"
@@ -230,7 +228,7 @@ export default function Header() {
{open && ( {open && (
<nav <nav
id="mobile-menu" id="mobile-menu"
className="mobile-menu-panel border-t border-ink bg-ivory desktop:hidden" className="mobile-menu-panel border-t border-ink bg-ivory nav:hidden"
aria-label="Mobile Navigation" aria-label="Mobile Navigation"
> >
<ul className="container-content flex flex-col py-2"> <ul className="container-content flex flex-col py-2">
+2
View File
@@ -29,6 +29,8 @@ const config: Config = {
theme: { theme: {
extend: { extend: {
screens: { screens: {
// Header swaps the mobile menu for the inline nav (compact spacing until `desktop`).
nav: "1000px",
desktop: "1240px", desktop: "1240px",
}, },
colors: { colors: {