/* Reserve scrollbar gutter so filter tab switches don't shift layout */
html { scrollbar-gutter: stable; }

/* ============================================
   ATMOSPHERE — noise grain + streetlight scene
   Noise lives in the body background stack so all
   content (text, images, buttons) sits above it.
   ============================================ */

/* ============================================
   TOP NAV
   ============================================ */
.top-nav {
  position: fixed;
  top: 12px;
  left: 50%;
  transform: translateX(-50%);
  width: calc(100% - 48px);
  max-width: 1392px;
  z-index: 10;
  background: rgba(18, 18, 18, 0.50);
  backdrop-filter: blur(8px) saturate(1);
  -webkit-backdrop-filter: blur(8px) saturate(1);
  border: 1px solid rgba(255, 255, 255, 0.07);
  border-radius: 14px;
  box-shadow: 0 4px 32px rgba(0, 0, 0, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.04);
}

.nav-inner {
  padding: var(--space-sm) var(--space-lg);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-sm);
}

.top-nav-name {
  font-weight: 700;
  font-size: var(--font-size-base);
  color: var(--color-text-primary);
  white-space: nowrap;
  padding: 4px 0;
}

.top-nav-links {
  display: flex;
  align-items: center;
  gap: var(--space-md);
}

.top-nav-links a {
  font-size: var(--font-size-base);
  color: var(--color-text-secondary);
  transition: color 0.15s, background 0.15s;
  padding: 4px 10px;
  border-radius: var(--radius-sm);
  cursor: none;
}

.top-nav-links a:hover {
  color: var(--color-text-primary);
  background: var(--color-bg-elevated);
}

.top-nav-links a.nav-current {
  color: var(--color-text-primary);
  background: var(--color-bg-card);
}

/* Bird trigger — first nav item, to the left of Projects */
.nav-game-trigger {
  background: none;
  border: none;
  cursor: none;
  color: var(--color-gold);
  opacity: 0.5;
  transition: opacity 0.2s;
  padding: 0 10px;
  line-height: 0;
  display: flex;
  align-items: center;
}

.nav-game-trigger:hover { opacity: 1; }

body.game-mode .nav-game-trigger { display: none; }

/* Physical light/dark mode switch — paddle slides up (on) or down (off) */
.light-switch {
  position: relative;
  width: 14px;
  height: 24px;
  background: var(--color-bg-card);
  border: 1px solid var(--color-border);
  border-radius: 4px;
  cursor: pointer;
  padding: 0;
  flex-shrink: 0;
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.35);
  transition: box-shadow 0.2s, border-color 0.2s;
}

.light-switch-paddle {
  position: absolute;
  left: 2px;
  right: 2px;
  height: 9px;
  top: 2px;
  background: var(--color-text-inactive);
  border-radius: 2px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.45);
  transform: translateY(9px); /* off (dark): paddle at bottom — (24-2borders)-2top-9paddle-2bottom = 9px travel */
  transition: transform 0.18s ease-in-out, background 0.18s;
}

/* ============================================
   PAGE LAYOUT
   ============================================ */
/* Fixed atmospheric background — sits above body's solid bg, below all content.
   Using a real div (not ::before) avoids z-index ambiguity and works on iOS Safari. */
.bg-atmo {
  position: fixed;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background-image:
    linear-gradient(180deg, rgba(3, 3, 9, 0.72) 0%, transparent 55%);
}

.bg-atmo::before {
  content: '';
  position: absolute;
  inset: -80px;
  background:
    radial-gradient(ellipse 75% 55% at 18% -5%, rgba(28, 65, 58, 0.38) 0%, transparent 70%),
    radial-gradient(ellipse 55% 40% at 72% -8%, rgba(32, 52, 68, 0.28) 0%, transparent 68%);
  filter: blur(60px);
  animation: atmo-drift 26s ease-in-out infinite;
}

@keyframes atmo-drift {
  0%   { transform: translate(0%, 0%); }
  33%  { transform: translate(8%, 3%); }
  66%  { transform: translate(-5%, 5%); }
  100% { transform: translate(0%, 0%); }
}

body.home-page {
  padding-top: 96px;   /* 12px top gap + ~72px nav height + 12px breathing room */
  padding-bottom: 56px;
  background-color: var(--color-bg-primary);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='256' height='256'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.55' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='256' height='256' filter='url(%23n)' opacity='0'/%3E%3C/svg%3E");
  background-repeat: repeat;
  background-size: 256px 256px;
}

.page-main {
  position: relative;
  z-index: 2;  /* above .bg-atmo (z-index: 1), transparent so gradient shows through gaps */
  max-width: 1440px;
  margin: 0 auto;
  padding: var(--space-xl) var(--space-xl) var(--space-xxl);
}

/* ============================================
   ABOUT
   ============================================ */
.about { margin-bottom: var(--space-xl); }

.about-bio {
  font-size: var(--font-size-base);
  line-height: var(--line-height-body);
  color: var(--color-text-secondary);
  max-width: var(--content-max);
}

/* ============================================
   FILTER TABS
   ============================================ */
.filter-tabs {
  display: flex;
  gap: var(--space-xxs);
  margin-bottom: var(--space-md);
}

.filter-tab {
  background: none;
  border: none;
  cursor: none;
  font-family: var(--font-sans);
  font-size: var(--font-size-base);
  color: var(--color-text-secondary);
  padding: 4px 12px;
  border-radius: var(--radius-sm);
  transition: color 0.15s, background 0.15s;
  line-height: var(--line-height-body);
  white-space: nowrap;
}

.filter-tab:hover {
  color: var(--color-text-primary);
  background: var(--color-bg-elevated);
}

.filter-tab.active {
  background: var(--color-bg-card);
  color: var(--color-text-primary);
}

/* ============================================
   PROJECT LIST
   ============================================ */
.project-list { list-style: none; }

.project-row {
  display: grid;
  grid-template-columns: 1fr 2.5fr;
  gap: var(--space-md);
  align-items: start;
  padding: var(--space-xl) 0;
  border-top: 1px solid var(--color-border);
}


/* ============================================
   PROJECT META (left column)
   ============================================ */
.project-meta {
  display: flex;
  flex-direction: column;
  gap: var(--space-xxs);
  padding-top: var(--space-xxs);
}

.project-title {
  font-weight: 700;
  font-size: var(--font-size-base);
  color: var(--color-text-primary);
  line-height: var(--line-height-body);
  margin: 0;
}

.project-byline {
  display: flex;
  align-items: center;
  gap: var(--space-xxs);
}

.project-date {
  font-family: var(--font-mono);
  font-size: var(--font-size-xs);
  color: var(--color-text-secondary);
  line-height: var(--line-height-body);
}

.project-desc {
  font-size: var(--font-size-base);
  line-height: var(--line-height-body);
  color: var(--color-text-secondary);
  margin-top: var(--space-xxs);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.read-more {
  display: none;
  align-items: center;
  gap: 4px;
  font-size: var(--font-size-base);
  color: var(--color-gold);
  margin-top: var(--space-xs);
  transition: color 0.15s;
}

.read-more:hover { color: var(--color-gold-hover); }

.project-byline .tag {
  background: none;
  border-radius: 0;
  padding: 0;
}

.project-byline .project-date::before {
  content: '· ';
  color: var(--color-text-inactive);
}

/* ============================================
   CAROUSEL (right column)
   ============================================ */
.carousel {
  display: flex;
  flex-direction: column;
  gap: var(--space-xxs);
  overflow: hidden; /* clips peek at carousel boundary */
  -webkit-mask-image: linear-gradient(to right, black calc(100% - 48px), transparent 100%);
  mask-image: linear-gradient(to right, black calc(100% - 48px), transparent 100%);
}

.carousel-viewport {
  position: relative;
  overflow: visible; /* peek bleeds out, clipped by .carousel */
  touch-action: pan-y;
}

.carousel-track {
  display: flex;
  gap: 12px;
  transition: transform 0.35s ease;
}

.carousel-slide {
  flex: 0 0 calc(100% - 40px); /* 40px = gap(12) + peek(28) on right */
  width: calc(100% - 40px);
  border-radius: var(--radius-md); /* moved from viewport */
  overflow: hidden;
  cursor: zoom-in;
}

.slide-placeholder {
  width: 100%;
  aspect-ratio: 4 / 3;
  background: var(--color-bg-card);
}

.carousel-slide img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
}

.carousel-controls {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-xxs) 0;
  padding-right: 40px; /* aligns next btn with right edge of active slide (peek = 40px) */
}

.carousel-btn {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border);
  cursor: none;
  color: var(--color-text-secondary);
  padding: 0;
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  flex-shrink: 0;
  transition: color 0.15s, background 0.15s, border-color 0.15s;
}

.carousel-btn:hover {
  color: var(--color-text-primary);
  background: var(--color-bg-card);
  border-color: var(--color-text-inactive);
}

.carousel-dots {
  display: flex;
  justify-content: center;
  gap: 6px;
}

.dot {
  width: 8px;
  height: 8px;
  border-radius: var(--radius-full);
  background: var(--color-border);
  transition: background 0.2s, width 0.2s;
  cursor: pointer;
  flex-shrink: 0;
}

.dot.active {
  background: var(--color-text-secondary);
  width: 20px;
  border-radius: 100px;
}

/* ============================================
   STICKY CONTACT FOOTER
   ============================================ */
.contact-footer {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background: var(--color-bg-primary);
  border-top: 1px solid var(--color-border);
  z-index: 10;
  min-height: 56px;
}

body.game-mode .contact-footer { display: none; }

.footer-inner {
  max-width: 1440px;
  margin: 0 auto;
  padding: var(--space-xs) var(--space-xl);
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 56px;
}

.footer-label {
  font-size: var(--font-size-base);
  font-weight: 700;
  color: var(--color-text-primary);
}

.footer-links { display: flex; gap: var(--space-md); }

.footer-links a {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: var(--font-size-base);
  color: var(--color-text-secondary);
  transition: color 0.15s;
}

.footer-links a:hover { color: var(--color-text-primary); }

/* Clipboard copy toast — slides up from behind the footer */
.copy-toast {
  position: fixed;
  bottom: 72px;  /* 56px footer + 16px gap */
  left: 50%;
  transform: translateX(-50%) translateY(calc(100% + 80px));  /* starts below viewport */
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  padding: 8px 16px;
  font-family: var(--font-mono);
  font-size: var(--font-size-xs);
  color: var(--color-text-primary);
  z-index: 9;  /* below footer (z-index: 10) so it slides up from behind it */
  pointer-events: none;
  white-space: nowrap;
  transition: transform 0.4s ease-out;
}

.copy-toast.visible { transform: translateX(-50%) translateY(0); }

/* ============================================
   BIRDS LAYER (game use only — no decorative birds)
   ============================================ */
.birds-layer {
  position: fixed;
  inset: 0;
  pointer-events: none;
  overflow: clip;
  z-index: 5;
}

.bird { position: absolute; }

@keyframes fly-ltr {
  from { transform: translateX(-80px); }
  to   { transform: translateX(calc(100vw + 80px)); }
}

@keyframes fly-rtl {
  from { transform: translateX(calc(100vw + 80px)); }
  to   { transform: translateX(-80px); }
}

/* Allow rotated wing paths to render outside their SVG viewBox */
.nav-game-trigger svg,
.game-bird svg { overflow: visible; }

@keyframes flap {
  from { transform: rotate(-5deg); }
  to   { transform: rotate(22deg); }
}

.nav-game-trigger:hover .wing-left,
.nav-game-trigger:hover .wing-right {
  animation: flap 0.42s ease-in-out infinite alternate;
}

.game-bird .wing-left,
.game-bird .wing-right {
  animation: flap 0.3s ease-in-out infinite alternate;
}

/* ============================================
   DUCK HUNT — game mode
   ============================================ */
/* Restore game cursor on elements that have cursor:none */
body.game-mode .filter-tab,
body.game-mode .carousel-btn,
body.game-mode .carousel-slide,
body.game-mode .top-nav-links a { cursor: inherit; }

body.game-mode {
  cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Ccircle cx='16' cy='16' r='11' fill='none' stroke='white' stroke-width='1.5'/%3E%3Cline x1='16' y1='1' x2='16' y2='5' stroke='white' stroke-width='1.5' stroke-linecap='round'/%3E%3Cline x1='16' y1='27' x2='16' y2='31' stroke='white' stroke-width='1.5' stroke-linecap='round'/%3E%3Cline x1='1' y1='16' x2='5' y2='16' stroke='white' stroke-width='1.5' stroke-linecap='round'/%3E%3Cline x1='27' y1='16' x2='31' y2='16' stroke='white' stroke-width='1.5' stroke-linecap='round'/%3E%3Ccircle cx='16' cy='16' r='1.5' fill='white'/%3E%3C/svg%3E") 16 16, crosshair;
  user-select: none;
}

.game-bird {
  color: var(--color-gold);
}

@keyframes bird-shot {
  0%   { opacity: 1; }
  35%  { opacity: 1; transform: rotate(25deg) scale(1.1); }
  100% { opacity: 0; transform: translateY(90px) rotate(100deg); }
}

.bird.shot {
  animation: bird-shot 0.55s ease-in forwards !important;
  pointer-events: none !important;
}

/* HUD — full-width bar at the bottom, replaces footer */
.game-hud {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  height: 56px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 var(--space-xl);
  background: var(--color-bg-elevated);
  border-top: 1px solid var(--color-border);
  z-index: 20;
  font-family: var(--font-mono);
  font-size: var(--font-size-xs);
  color: var(--color-text-primary);
}

.hud-left {
  display: flex;
  align-items: center;
  gap: var(--space-md);
}

.hud-score strong { color: var(--color-gold); }

.hud-bullets {
  display: flex;
  align-items: center;
  gap: var(--space-xxs);
  color: var(--color-text-secondary);
}

.hud-bullet-bar {
  width: 80px;
  height: 3px;
  background: var(--color-border);
  border-radius: 2px;
  overflow: hidden;
}

.hud-bullet-fill {
  height: 100%;
  background: var(--color-gold);
  border-radius: 2px;
  transition: width 0.1s linear;
}

.hud-right { color: var(--color-text-inactive); }

/* Miss indicator */
.miss-indicator {
  position: fixed;
  font-family: var(--font-mono);
  font-size: var(--font-size-xs);
  color: var(--color-text-secondary);
  pointer-events: none;
  z-index: 25;
  transform: translate(-50%, -100%);
  animation: miss-fade 0.65s ease-out forwards;
}

@keyframes miss-fade {
  0%   { opacity: 1; transform: translate(-50%, -100%); }
  100% { opacity: 0; transform: translate(-50%, -220%); }
}

/* Score pop — bird (+3 green) and object hit (−1 red) */
.score-pop {
  position: fixed;
  font-family: var(--font-mono);
  font-size: var(--font-size-xs);
  font-weight: 700;
  pointer-events: none;
  z-index: 25;
  transform: translate(-50%, -100%);
  animation: miss-fade 0.65s ease-out forwards;
}

.score-pop.pos { color: #5DBF75; }
.score-pop.neg { color: #CF5B5B; }

/* Individual char targets */
.game-char { display: inline-block; }

/* Object hit — vaporize */
@keyframes vaporize {
  0%   { transform: scale(1);   opacity: 1; filter: brightness(1); }
  15%  { transform: scale(1.1); opacity: 1; filter: brightness(5); }
  100% { transform: scale(1.4); opacity: 0; filter: brightness(1); }
}

.vaporized {
  animation: vaporize 0.35s ease-out forwards;
  pointer-events: none;
}

/* Game over overlay */
.game-over-overlay {
  position: fixed;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: rgba(31, 31, 31, 0.9);
  z-index: 30;
  gap: var(--space-xs);
}

.game-over-title {
  font-weight: 700;
  font-size: var(--font-size-xl);
  color: var(--color-text-primary);
}

.game-over-stats {
  font-family: var(--font-mono);
  font-size: var(--font-size-xs);
  color: var(--color-text-secondary);
  text-align: center;
  line-height: 1.8;
}

.game-over-stats .stat-label { color: var(--color-text-inactive); }
.game-over-stats .stat-hint  { color: var(--color-text-secondary); }

.game-over-actions {
  display: flex;
  gap: var(--space-sm);
  margin-top: var(--space-xs);
}

.game-over-btn {
  background: none;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  padding: 4px 16px;
  cursor: pointer;
  color: var(--color-text-secondary);
  font-family: var(--font-mono);
  font-size: var(--font-size-xs);
  line-height: var(--line-height-body);
  transition: color 0.15s, border-color 0.15s;
}

.game-over-btn:hover {
  color: var(--color-text-primary);
  border-color: var(--color-text-secondary);
}

.game-over-reset {
  background: none;
  border: none;
  cursor: pointer;
  font-family: var(--font-mono);
  font-size: var(--font-size-xs);
  color: var(--color-text-inactive);
  padding: 0;
  text-decoration: underline;
  text-decoration-style: dotted;
  text-underline-offset: 2px;
  transition: color 0.15s;
}

.game-over-reset:hover { color: var(--color-text-secondary); }

/* ============================================
   LIGHT MODE
   ============================================ */
body.light-mode {
  --color-bg-primary:     #EBE6DE;
  --color-bg-elevated:    #E3DED5;
  --color-bg-card:        #D8D1C6;
  --color-accent:         #C4A882;
  --color-text-primary:   #1C1814;
  --color-text-secondary: #7A6E62;
  --color-text-inactive:  #A89D90;
  --color-border:         #D0C8BC;
  --color-gold:           #B89B20;
  --color-gold-hover:     #C9AC28;
}

body.light-mode .top-nav {
  background: rgba(230, 224, 214, 0.78);
  border-color: rgba(0, 0, 0, 0.07);
  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.55);
}

body.light-mode .bg-atmo {
  background-image: none;
}
body.light-mode .bg-atmo::before { display: none; }

body.light-mode .game-over-overlay {
  background: rgba(245, 240, 232, 0.96);
}

/* Crosshair swapped to dark ink for legibility on the warm light background */
body.light-mode.game-mode {
  cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Ccircle cx='16' cy='16' r='11' fill='none' stroke='%231C1814' stroke-width='1.5'/%3E%3Cline x1='16' y1='1' x2='16' y2='5' stroke='%231C1814' stroke-width='1.5' stroke-linecap='round'/%3E%3Cline x1='16' y1='27' x2='16' y2='31' stroke='%231C1814' stroke-width='1.5' stroke-linecap='round'/%3E%3Cline x1='1' y1='16' x2='5' y2='16' stroke='%231C1814' stroke-width='1.5' stroke-linecap='round'/%3E%3Cline x1='27' y1='16' x2='31' y2='16' stroke='%231C1814' stroke-width='1.5' stroke-linecap='round'/%3E%3Ccircle cx='16' cy='16' r='1.5' fill='%231C1814'/%3E%3C/svg%3E") 16 16, crosshair;
}

body.light-mode .light-switch {
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1), 0 0 8px rgba(185, 155, 32, 0.25);
}

body.light-mode .light-switch-paddle {
  transform: translateY(0);  /* on: paddle at top */
  background: var(--color-gold);
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
}

body.light-mode .game-bird { color: var(--color-text-primary); }

body.light-mode .nav-game-trigger { color: var(--color-text-primary); }

/* ============================================
   RESPONSIVE — tablet (≤900px: single column)
   ============================================ */
@media (max-width: 900px) {
  .project-row {
    grid-template-columns: 1fr;
    gap: var(--space-sm);
    padding: var(--space-md) 0;
  }
}

@media (max-width: 768px) {
  body.home-page { padding-top: 76px; overflow-x: clip; }
  .top-nav { left: 12px; right: 12px; width: auto; transform: none; }
  .nav-inner  { padding: 16px; }
  .page-main  { padding: var(--space-md) var(--space-sm) var(--space-xxl); }
  .footer-inner { padding: var(--space-xxs) var(--space-sm); gap: var(--space-xs); }
  .footer-links { gap: var(--space-sm); }
  .game-hud   { padding: 0 var(--space-sm); }
  .nav-game-trigger { display: none; }

}

/* ============================================
   LIGHTBOX
   ============================================ */
.lightbox {
  position: fixed;
  inset: 0;
  z-index: 999;
  background: rgba(0, 0, 0, 0.92);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-sm);
  padding: 56px var(--space-xs) var(--space-xs);
}
.lightbox[hidden] { display: none; }

.lightbox-close {
  position: absolute;
  top: var(--space-sm);
  right: var(--space-sm);
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.12);
  color: #fff;
  width: 40px;
  height: 40px;
  border-radius: var(--radius-full);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s;
}
.lightbox-close:hover { background: rgba(255, 255, 255, 0.2); }

.lightbox-stage {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  width: 100%;
  max-width: 1440px;
}

.lightbox-btn {
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.12);
  color: #fff;
  width: 40px;
  height: 40px;
  border-radius: var(--radius-full);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s;
  flex-shrink: 0;
}
.lightbox-btn:hover { background: rgba(255, 255, 255, 0.2); }

.lightbox-inner {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 0;
}

.lightbox-image {
  max-width: 100%;
  max-height: calc(100vh - 120px);
  object-fit: contain;
  border-radius: var(--radius-md);
  display: block;
}

.lightbox-placeholder {
  width: 100%;
  max-width: min(100%, calc((100vh - 120px) * 4 / 3));
  aspect-ratio: 4 / 3;
  background: var(--color-bg-card);
  border-radius: var(--radius-md);
}

.lightbox-dots-row {
  display: flex;
  gap: 6px;
  justify-content: center;
}

@media (max-width: 768px) {
  .lightbox { padding: 60px var(--space-xs) var(--space-sm); }
  .lightbox-btn { display: none; }
  .lightbox-stage { gap: 0; }
}

/* ============================================
   RESPONSIVE — mobile nav stack (≤540px)
   ============================================ */
@media (max-width: 540px) {
  body.home-page { padding-top: 128px; }  /* 12px gap + ~104px stacked nav (16px padding all sides) + 12px room */

  .nav-inner {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-sm);
    padding: 16px;
  }

  .footer-label,
  .footer-links a { font-size: var(--font-size-xs); }
}
