/*
  ╔══════════════════════════════════════════════════════════════════╗
  ║  EPIPHALACTIC LABS — style.css                                   ║
  ║  Phase 0 · Retro-personal / late-90s indie web aesthetic         ║
  ║                                                                  ║
  ║  TABLE OF CONTENTS                                               ║
  ║  ─────────────────────────────────────────────────────────────  ║
  ║   0. CSS CUSTOM PROPERTIES (variables / design tokens)           ║
  ║   1. RESET & BASE                                                ║
  ║   2. TYPOGRAPHY                                                  ║
  ║   3. ACCESSIBILITY UTILITIES                                     ║
  ║   4. LAYOUT — wrapper, two-column grid                           ║
  ║   5. HEADER & NAVIGATION                                         ║
  ║   6. SIDEBAR                                                     ║
  ║   7. MAIN CONTENT                                                ║
  ║   8. SECTION COMPONENTS (shared)                                 ║
  ║   9. SECTION: INTRO                                              ║
  ║  10. SECTION: START HERE                                         ║
  ║  11. SECTION: PROJECTS                                           ║
  ║  12. SECTION: WRITING                                            ║
  ║  13. SECTION: OUTPOSTS                                           ║
  ║  14. SECTION: LINKS / BLOGROLL                                   ║
  ║  15. SECTION: CONTACT                                            ║
  ║  16. SECTION: COLOPHON                                           ║
  ║  17. FOOTER                                                      ║
  ║  18. DECORATIVE ELEMENTS (scanlines, pixel placeholders, badges) ║
  ║  19. RESPONSIVE — MOBILE OVERRIDES                               ║
  ║  20. PRINT STYLES                                                ║
  ╚══════════════════════════════════════════════════════════════════╝

  DESIGN PHILOSOPHY
  ─────────────────
  This stylesheet aims for "modern interpretation of late-90s personal web."
  That means:
    ✓ Strong grid lines and visible structure (not just whitespace)
    ✓ Neon accent colors on a dark ground — but accessible contrast
    ✓ Pixel-art aesthetic in decorative elements
    ✓ Monospaced fonts for labels/metadata; readable font for body
    ✓ No heavy animations — subtle only (blink, glow, scanline)
    ✓ Works without JavaScript
    ✓ Mobile-readable (no horizontal scroll)

  COLOR STRATEGY
  ──────────────
  The palette references early CRT / VGA monitor aesthetics:
    Background:  very dark navy (not pure black — less harsh)
    Surface:     dark blue-grey panels
    Accent 1:    phosphor green  (#00ff41 — classic terminal green)
    Accent 2:    electric cyan   (#00e5ff)
    Accent 3:    hot pink/magenta (#ff006e)
    Text:        near-white with slight warmth
    Muted text:  mid-grey
    Link:        cyan, visited = muted cyan
*/


/* ═══════════════════════════════════════════════════════════════════
   0. CSS CUSTOM PROPERTIES
   Define all colors, sizes, and font stacks here.
   Changing a value here updates it everywhere it's used.
   Great for theming later (add a [data-theme="light"] override).
════════════════════════════════════════════════════════════════════ */
:root {

  /* ── Colors ─────────────────────────────────────────────────── */

  /* Background layers */
  --color-bg:          #0a0e1a;   /* page background — deep navy */
  --color-bg-panel:    #0f1424;   /* panel / card background */
  --color-bg-sidebar:  #0c1020;   /* sidebar background */
  --color-bg-header:   #080c18;   /* header background */
  --color-bg-footer:   #08091a;   /* footer background */

  /* Border / line colors */
  --color-border:      #1a2a4a;   /* subtle panel borders */
  --color-border-glow: #00e5ff44; /* glowing border (semi-transparent cyan) */
  --color-rule:        #1e2d50;   /* <hr> divider color */

  /* Text */
  --color-text:        #c8d8f0;   /* main body text — slight blue tint */
  --color-text-muted:  #5a7090;   /* de-emphasised text, labels */
  --color-text-bright: #e8f0ff;   /* headings, important text */
  --color-text-code:   #a0c8e8;   /* <code> text */

  /* Accent colors — the "neon" palette */
  --color-green:       #00ff41;   /* phosphor terminal green */
  --color-cyan:        #00e5ff;   /* electric cyan */
  --color-magenta:     #ff006e;   /* hot pink / magenta */
  --color-yellow:      #ffe600;   /* amber / yellow highlight */
  --color-purple:      #9b59ff;   /* purple accent (use sparingly) */

  /* Links */
  --color-link:        #00e5ff;   /* unvisited link */
  --color-link-hover:  #ffffff;   /* hover state */
  --color-link-visited:#4a9ab0;   /* visited link — slightly desaturated */

  /* Status badge colors */
  --color-status-live: #00ff41;
  --color-status-wip:  #ffe600;
  --color-status-soon: #00e5ff;
  --color-status-archived: #5a7090;

  /* ── Typography ─────────────────────────────────────────────── */

  /*
    Font stacks — all system fonts, no external requests.
    This keeps the page fast and avoids font CDN tracking.
    Phase 1: consider adding a pixel/bitmap web font for headings.
    PLACEHOLDER: add web font here when ready:
    @import url('...'); then update --font-mono or --font-heading.
  */

  /* Monospace: used for labels, code, nav, "computer" text */
  --font-mono: "Courier New", Courier, "Lucida Console", monospace;

  /* Body text: a clean, readable stack */
  --font-body: Georgia, "Times New Roman", Times, serif;
  /* PLACEHOLDER: could swap to a humanist sans later — personal preference */

  /* Heading: goes bigger/bolder — same stack as body for now */
  --font-heading: "Courier New", Courier, monospace;
  /* PLACEHOLDER: Phase 1 — replace with a pixel bitmap font for h1/h2 */

  /* Font sizes — using rem so user font preferences are respected */
  --text-xs:   0.72rem;  /* fine print, labels */
  --text-sm:   0.85rem;  /* metadata, captions */
  --text-base: 1rem;     /* body text */
  --text-md:   1.1rem;   /* slightly larger body */
  --text-lg:   1.25rem;  /* sub-headings */
  --text-xl:   1.5rem;   /* section headings */
  --text-2xl:  2rem;     /* site title */
  --text-3xl:  2.5rem;   /* PLACEHOLDER: big display text later */

  /* Line heights */
  --leading-tight:  1.3;
  --leading-base:   1.7;
  --leading-loose:  1.9;

  /* ── Spacing ─────────────────────────────────────────────────── */
  /* 4-point grid — all spacing is a multiple of 4px */
  --space-1:  0.25rem;  /* 4px  */
  --space-2:  0.5rem;   /* 8px  */
  --space-3:  0.75rem;  /* 12px */
  --space-4:  1rem;     /* 16px */
  --space-5:  1.25rem;  /* 20px */
  --space-6:  1.5rem;   /* 24px */
  --space-8:  2rem;     /* 32px */
  --space-10: 2.5rem;   /* 40px */
  --space-12: 3rem;     /* 48px */
  --space-16: 4rem;     /* 64px */

  /* ── Layout ─────────────────────────────────────────────────── */
  --max-width:        960px;   /* overall container max */
  --sidebar-width:    200px;   /* fixed sidebar width */
  --content-gap:      var(--space-6);  /* gap between sidebar and main */

  /* ── Borders & Decoration ───────────────────────────────────── */
  --radius-none: 0;
  --radius-sm:   2px;   /* very slight rounding — retro prefers sharp corners */
  --border-width: 1px;
  --border-style: solid;

  /* Glow effect intensity — used on focus and accent elements */
  --glow-green:    0 0 8px #00ff4166, 0 0 16px #00ff4122;
  --glow-cyan:     0 0 8px #00e5ff66, 0 0 16px #00e5ff22;
  --glow-magenta:  0 0 8px #ff006e66, 0 0 16px #ff006e22;

  /* ── Transitions ─────────────────────────────────────────────── */
  --transition-fast: 120ms ease;
  --transition-base: 200ms ease;
}


/* ═══════════════════════════════════════════════════════════════════
   1. RESET & BASE
   A minimal reset to normalize browser defaults.
   "box-sizing: border-box" makes width/height calculations sane —
   padding and border are included in the element's total size.
════════════════════════════════════════════════════════════════════ */

/* Apply border-box to everything */
*,
*::before,
*::after {
  box-sizing: border-box;
  /* Remove default margins/padding on everything — we add them back intentionally */
  margin: 0;
  padding: 0;
}

/* Root / HTML element */
html {
  /* Smooth scroll when clicking anchor links */
  scroll-behavior: smooth;
  /* Prevents horizontal scroll on mobile */
  overflow-x: hidden;
  /* Base font size — rem units are relative to this */
  font-size: 16px;
}

/* Body — the main canvas */
body {
  background-color: var(--color-bg);
  color: var(--color-text);
  font-family: var(--font-body);
  font-size: var(--text-base);
  line-height: var(--leading-base);

  /* Subtle tiled background texture — retro grid/dot pattern */
  background-image:
    /* Fine dot grid overlay */
    radial-gradient(circle, #1a2a4a33 1px, transparent 1px);
  background-size: 24px 24px;

  /* Prevent text from being too wide for easy reading */
  max-width: 100%;
  overflow-x: hidden;
}

/* Images and media — prevent overflow */
img,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
  height: auto;
}

/* Lists — browsers add padding by default; we reset here,
   then add back in context where needed */
ul, ol {
  list-style: none;
}

/* Horizontal rule — we style these ourselves */
hr {
  border: none;
}


/* ═══════════════════════════════════════════════════════════════════
   2. TYPOGRAPHY
   Base typographic rules. Heading sizes cascade from the variables.
════════════════════════════════════════════════════════════════════ */

h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-heading);
  color: var(--color-text-bright);
  line-height: var(--leading-tight);
  /* No margin by default — add in context */
}

h1 { font-size: var(--text-2xl); }
h2 { font-size: var(--text-xl);  }
h3 { font-size: var(--text-lg);  }
h4 { font-size: var(--text-base); font-weight: bold; }

p {
  margin-bottom: var(--space-4);
  max-width: 70ch; /* ~70 characters wide — optimal reading measure */
}

/* Links */
a {
  color: var(--color-link);
  text-decoration: underline;
  text-underline-offset: 3px; /* small gap between text and underline */
  transition: color var(--transition-fast),
              text-shadow var(--transition-fast);
}

a:hover {
  color: var(--color-link-hover);
  text-shadow: var(--glow-cyan);
}

a:visited {
  color: var(--color-link-visited);
}

/* Focus ring — visible keyboard navigation indicator
   This is crucial for accessibility.
   We replace the default browser outline with something styled. */
a:focus-visible,
button:focus-visible,
[tabindex]:focus-visible {
  outline: 2px solid var(--color-cyan);
  outline-offset: 3px;
  border-radius: var(--radius-sm);
}

/* Inline code */
code {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-code);
  background: #0f2040;
  padding: 1px var(--space-2);
  border-radius: var(--radius-sm);
  border: 1px solid var(--color-border);
}

/* Strong / bold text */
strong {
  color: var(--color-text-bright);
  font-weight: bold;
}

/* Emphasis / italic */
em {
  color: var(--color-text);
  font-style: italic;
}

/* Definition lists — used in the Colophon section */
dl {
  /* dt and dd styled in their section below */
}

dt {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-cyan);
  font-weight: bold;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  margin-top: var(--space-4);
}

dt:first-child {
  margin-top: 0;
}

dd {
  color: var(--color-text);
  padding-left: var(--space-4);
  border-left: 2px solid var(--color-border);
  margin-left: 0;
  margin-bottom: var(--space-2);
}

/* <time> element — dates, timestamps */
time {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  letter-spacing: 0.03em;
}

/* <summary> inside <details> */
summary {
  cursor: pointer;
  color: var(--color-cyan);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
}

summary:hover {
  color: var(--color-text-bright);
}


/* ═══════════════════════════════════════════════════════════════════
   3. ACCESSIBILITY UTILITIES
════════════════════════════════════════════════════════════════════ */

/* Skip link — visible only on keyboard focus.
   Allows keyboard users to jump past the header directly to main content. */
.skip-link {
  position: absolute;
  top: -9999px;  /* hide off-screen by default */
  left: var(--space-4);
  z-index: 9999;
  background: var(--color-cyan);
  color: #000;
  padding: var(--space-2) var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: bold;
  text-decoration: none;
  border-radius: var(--radius-sm);
}

.skip-link:focus {
  /* Snap back into view when focused */
  top: var(--space-4);
}

/* Visually hidden but accessible to screen readers.
   Use for text that screen readers should read but sighted users
   don't need to see (e.g., <h2 class="visually-hidden"> for context). */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}


/* ═══════════════════════════════════════════════════════════════════
   4. LAYOUT — wrapper, two-column grid
   The overall page structure:
     [HEADER — full width]
     [SIDEBAR | MAIN CONTENT]
     [FOOTER — full width]
════════════════════════════════════════════════════════════════════ */

/* Outer container — centers everything and sets max width */
.layout-wrapper {
  display: grid;
  grid-template-columns: var(--sidebar-width) 1fr;
  grid-template-rows: auto;
  gap: 0; /* gap handled by padding within panels */
  max-width: var(--max-width);
  margin: 0 auto;     /* center on the page */
  padding: 0;
  min-height: 60vh;   /* prevent very short pages looking odd */
}

/* On mobile, stack sidebar above main content */
/* (see Section 19 for the media query) */


/* ═══════════════════════════════════════════════════════════════════
   5. HEADER & NAVIGATION
   The site-wide header: identity, status bar, primary nav.
════════════════════════════════════════════════════════════════════ */

.site-header {
  background-color: var(--color-bg-header);
  border-bottom: 2px solid var(--color-cyan);
  position: sticky;  /* sticks to top as you scroll */
  top: 0;
  z-index: 100;      /* above all other content */
  /* Optional: add a subtle box shadow below the header */
  box-shadow: 0 2px 20px #00e5ff22;
}

.header-inner {
  max-width: var(--max-width);
  margin: 0 auto;
  padding: var(--space-4) var(--space-6);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  flex-wrap: wrap; /* allows wrapping on narrow screens */
}

/* Site identity: logo + title + tagline */
.site-identity {
  display: flex;
  align-items: center;
  gap: var(--space-4);
}

/* Text logo placeholder — big bracketed epsilon */
.site-logo-text {
  font-family: var(--font-mono);
  font-size: var(--text-2xl);
  color: var(--color-green);
  text-shadow: var(--glow-green);
  font-weight: bold;
  letter-spacing: -0.05em;
  line-height: 1;
  flex-shrink: 0;
  /* PLACEHOLDER: this goes away when you add a real logo image */
}

.site-title-group {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

/* h1 inside the header — the main site title */
.site-title {
  font-size: var(--text-xl);
  font-family: var(--font-heading);
  font-weight: bold;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  line-height: 1;
}

.site-title a {
  color: var(--color-text-bright);
  text-decoration: none;
  transition: color var(--transition-fast), text-shadow var(--transition-fast);
}

.site-title a:hover {
  color: var(--color-green);
  text-shadow: var(--glow-green);
}

/* Tagline — one-liner under the site name */
.site-tagline {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  letter-spacing: 0.08em;
  text-transform: lowercase;
  margin: 0;
}

/* Status bar — live status ticker */
.status-bar {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  background: #0a1428;
  border: 1px solid var(--color-border);
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-sm);
  flex-shrink: 1;
  /* PLACEHOLDER: Phase 1 — animate this like a ticker */
}

/* Blinking status dot */
.status-dot {
  color: var(--color-green);
  font-size: var(--text-xs);
  animation: blink 1.4s step-end infinite;
  /* Blink animation is defined in Section 18 */
}

/* Primary navigation bar below the header */
.primary-nav {
  background: #060a16;
  border-top: 1px solid var(--color-border);
}

.primary-nav ul {
  display: flex;
  flex-wrap: wrap;
  gap: 0;
  max-width: var(--max-width);
  margin: 0 auto;
  padding: 0 var(--space-4);
}

.primary-nav li {
  flex-shrink: 0;
}

.primary-nav a {
  display: block;
  padding: var(--space-2) var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  text-decoration: none;
  letter-spacing: 0.05em;
  border-right: 1px solid var(--color-border);
  transition: background var(--transition-fast),
              color var(--transition-fast);
}

.primary-nav a:hover {
  background: #0f2040;
  color: var(--color-cyan);
  text-shadow: var(--glow-cyan);
}

/* Highlight the current section's nav link
   (JavaScript would do this dynamically; for Phase 0, just show hover)
   PLACEHOLDER: add .nav-active class via JS in Phase 1 */
.primary-nav a.nav-active {
  color: var(--color-green);
  background: #0a1820;
  border-bottom: 2px solid var(--color-green);
}


/* ═══════════════════════════════════════════════════════════════════
   6. SIDEBAR
   The left column — decorative, mascot, secondary nav, widgets.
════════════════════════════════════════════════════════════════════ */

.sidebar {
  background-color: var(--color-bg-sidebar);
  border-right: 1px solid var(--color-border);
  padding: var(--space-6) var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  /* Sidebar is sticky so it stays visible while you scroll */
  position: sticky;
  top: 0; /* will be overridden to account for header height by JS in Phase 1 */
  align-self: start; /* stick to the top of the grid row */
  height: auto;
  /* Subtle inner border glow */
  box-shadow: inset -1px 0 0 var(--color-border-glow);
}

/* Section label style — "// JUMP TO" etc. */
.sidebar-nav-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-bottom: var(--space-2);
  padding-bottom: var(--space-1);
  border-bottom: 1px solid var(--color-border);
}

/* Sidebar navigation links */
.sidebar-nav ul {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.sidebar-nav a {
  display: block;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  text-decoration: none;
  padding: var(--space-1) var(--space-2);
  border-left: 2px solid transparent;
  transition: color var(--transition-fast),
              border-color var(--transition-fast),
              background var(--transition-fast);
}

.sidebar-nav a:hover {
  color: var(--color-green);
  border-left-color: var(--color-green);
  background: #0a2010;
}

/* Mascot placeholder */
.sidebar-mascot {
  display: flex;
  justify-content: center;
}

/* Visitor counter */
.visitor-counter {
  /* wrapper */
}

.counter-display {
  display: flex;
  gap: 2px;
  margin-bottom: var(--space-2);
}

/* Each digit in the retro counter — looks like old odometer */
.counter-digit {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 28px;
  background: #000;
  color: var(--color-green);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: bold;
  border: 1px solid #1a3a1a;
  border-radius: 2px;
  text-shadow: var(--glow-green);
  /* Gives the digits a slight inner shadow for depth */
  box-shadow: inset 0 2px 4px #000a;
}

.counter-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin: 0;
}

/* Currently block */
.currently-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.currently-list li {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  line-height: 1.5;
}

.currently-icon {
  margin-right: var(--space-1);
}

/* Generic sidebar widget container */
.sidebar-widget {
  /* shared styles for all sidebar widgets */
}


/* ═══════════════════════════════════════════════════════════════════
   7. MAIN CONTENT
   The right column — where all the main sections live.
════════════════════════════════════════════════════════════════════ */

.main-content {
  padding: var(--space-8) var(--space-8);
  background-color: var(--color-bg);
  min-width: 0; /* prevents grid blowout */
}


/* ═══════════════════════════════════════════════════════════════════
   8. SECTION COMPONENTS (shared)
   Styles used across all main page sections.
════════════════════════════════════════════════════════════════════ */

/* Each main section */
.site-section {
  margin-bottom: var(--space-12);
  scroll-margin-top: 80px; /* offset for sticky header when jumping to anchor */
}

/* Section header: icon + heading in a row */
.section-header {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-bottom: var(--space-6);
}

/* Decorative icon before section headings */
.section-icon {
  color: var(--color-cyan);
  font-size: var(--text-xl);
  line-height: 1;
  text-shadow: var(--glow-cyan);
  flex-shrink: 0;
}

/* Section h2 heading */
.section-header h2 {
  font-size: var(--text-xl);
  color: var(--color-text-bright);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  /* Decorative border under the heading */
  border-bottom: 2px solid var(--color-cyan);
  padding-bottom: var(--space-2);
  flex-grow: 1;
}

/* Section body text area */
.section-body {
  padding-left: var(--space-2);
  border-left: 3px solid var(--color-border);
  /* PLACEHOLDER: could add a subtle left panel glow in Phase 1 */
}

.section-body p {
  color: var(--color-text);
  margin-bottom: var(--space-4);
}

/* Used for section opening paragraph */
.section-intro-text {
  color: var(--color-text-muted);
  font-size: var(--text-sm);
  font-family: var(--font-mono);
  letter-spacing: 0.03em;
  margin-bottom: var(--space-5);
}

/* Horizontal rule between sections */
.section-divider {
  border: none;
  border-top: 1px solid var(--color-rule);
  margin: var(--space-12) 0;
  position: relative;
}

/* Small diamond decoration in the middle of the divider */
.section-divider::after {
  content: "◆";
  position: absolute;
  top: -0.6em;
  left: 50%;
  transform: translateX(-50%);
  background: var(--color-bg);
  color: var(--color-border);
  padding: 0 var(--space-3);
  font-size: var(--text-xs);
  font-family: var(--font-mono);
}

/* "Coming soon" notice style */
.coming-soon-notice {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  background: var(--color-bg-panel);
  border: 1px dashed var(--color-border);
  padding: var(--space-4) var(--space-5);
  border-radius: var(--radius-sm);
  margin-bottom: var(--space-4);
}

.coming-soon-notice a {
  color: var(--color-cyan);
}


/* ═══════════════════════════════════════════════════════════════════
   9. SECTION: INTRO
   The first thing visitors see after the header.
════════════════════════════════════════════════════════════════════ */

.section-intro {
  margin-bottom: var(--space-10);
}

.intro-text {
  font-size: var(--text-md);
  line-height: var(--leading-loose);
  color: var(--color-text);
  max-width: 66ch;
}

.intro-text + .intro-text {
  margin-top: 0; /* already has mb from p rule */
}

.intro-text strong {
  color: var(--color-green);
  text-shadow: var(--glow-green);
}


/* ═══════════════════════════════════════════════════════════════════
   10. SECTION: START HERE
   The manual what's-new / changelog block.
════════════════════════════════════════════════════════════════════ */

/* What's new box */
.whats-new {
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-green);
  padding: var(--space-4) var(--space-5);
  margin-top: var(--space-6);
  border-radius: var(--radius-sm);
}

.whats-new-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-green);
  letter-spacing: 0.1em;
  margin-bottom: var(--space-3);
  text-shadow: var(--glow-green);
}

/* Changelog list */
.changelog-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.changelog-list li {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  padding-left: var(--space-4);
  position: relative;
}

.changelog-list li::before {
  content: ">";
  position: absolute;
  left: 0;
  color: var(--color-green);
}

/* The time element inside the changelog */
.changelog-list time {
  color: var(--color-cyan);
  margin-right: var(--space-2);
}


/* ═══════════════════════════════════════════════════════════════════
   11. SECTION: PROJECTS
   Cards / list for project items.
════════════════════════════════════════════════════════════════════ */

.project-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

/* Individual project card */
.project-item {
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  padding: var(--space-4) var(--space-5);
  border-radius: var(--radius-sm);
  transition: border-color var(--transition-base),
              box-shadow var(--transition-base);
  /* Subtle corner decoration — CSS only, no images */
  position: relative;
}

.project-item::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 3px;
  height: 100%;
  background: var(--color-border);
  border-radius: var(--radius-sm) 0 0 var(--radius-sm);
  transition: background var(--transition-base);
}

.project-item:hover {
  border-color: var(--color-cyan);
  box-shadow: var(--glow-cyan);
}

.project-item:hover::before {
  background: var(--color-cyan);
}

/* Project name + status on one row */
.project-meta {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-bottom: var(--space-2);
}

.project-name {
  font-family: var(--font-mono);
  font-size: var(--text-base);
  color: var(--color-text-bright);
  font-weight: bold;
  letter-spacing: 0.03em;
}

/* Status badge */
.project-status {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: bold;
  padding: 2px var(--space-2);
  border-radius: var(--radius-sm);
  letter-spacing: 0.08em;
  border: 1px solid currentColor;
  /* Color is set per-class below */
}

.status-live {
  color: var(--color-status-live);
  background: #001a00;
}

.status-wip {
  color: var(--color-status-wip);
  background: #1a1400;
}

.status-soon {
  color: var(--color-status-soon);
  background: #001a22;
}

.status-archived {
  color: var(--color-status-archived);
  background: #0a0a0a;
}

.project-desc {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin: 0;
  line-height: var(--leading-base);
}

.project-link {
  display: inline-block;
  margin-top: var(--space-3);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-cyan);
  text-decoration: none;
  letter-spacing: 0.05em;
}

.project-link:hover {
  color: var(--color-text-bright);
  text-decoration: underline;
}


/* ═══════════════════════════════════════════════════════════════════
   12. SECTION: WRITING
   Blog / notes placeholder and future post list.
════════════════════════════════════════════════════════════════════ */

/* Placeholder post slots — visual hints of content to come */
.placeholder-post-slot {
  display: flex;
  gap: var(--space-4);
  align-items: center;
  padding: var(--space-3) var(--space-4);
  margin-bottom: var(--space-3);
  background: var(--color-bg-panel);
  border: 1px dashed var(--color-border);
  opacity: 0.5;
  border-radius: var(--radius-sm);
}

.placeholder-date {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  white-space: nowrap;
  flex-shrink: 0;
}

.placeholder-title {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  font-style: italic;
}

/* Real post list — hidden until you have actual posts
   PLACEHOLDER: uncomment when used */
.post-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
}

.post-item {
  display: grid;
  grid-template-columns: auto 1fr;
  grid-template-rows: auto auto;
  gap: var(--space-1) var(--space-4);
  align-items: start;
}

.post-date {
  grid-column: 1;
  grid-row: 1;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  white-space: nowrap;
}

.post-title {
  grid-column: 2;
  grid-row: 1;
  font-family: var(--font-mono);
  font-size: var(--text-base);
  color: var(--color-link);
  font-weight: bold;
}

.post-title:hover {
  color: var(--color-text-bright);
}

.post-excerpt {
  grid-column: 2;
  grid-row: 2;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin: 0;
}


/* ═══════════════════════════════════════════════════════════════════
   13. SECTION: OUTPOSTS / DIRECTORY
   List of subdomains and sister sites.
════════════════════════════════════════════════════════════════════ */

.outposts-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.outpost-item {
  display: flex;
  align-items: flex-start;
  gap: var(--space-4);
  padding: var(--space-3) var(--space-4);
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  transition: border-color var(--transition-base);
}

.outpost-item:hover {
  border-color: var(--color-border-glow);
}

/* Outpost status badge */
.outpost-status-badge {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: bold;
  padding: 2px var(--space-2);
  border-radius: var(--radius-sm);
  letter-spacing: 0.08em;
  border: 1px solid;
  white-space: nowrap;
  flex-shrink: 0;
}

/* Different colors for SOON vs LATER vs LIVE */
.outpost-soon .outpost-status-badge {
  color: var(--color-cyan);
  border-color: var(--color-cyan);
  background: #001a22;
}

.outpost-later .outpost-status-badge {
  color: var(--color-text-muted);
  border-color: var(--color-border);
  background: transparent;
}

.outpost-live .outpost-status-badge {
  color: var(--color-green);
  border-color: var(--color-green);
  background: #001a00;
}

.outpost-info {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.outpost-name {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-bright);
  font-weight: bold;
}

a.outpost-name:hover {
  color: var(--color-cyan);
}

.outpost-desc {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}


/* ═══════════════════════════════════════════════════════════════════
   14. SECTION: LINKS / BLOGROLL
   Grouped link lists.
════════════════════════════════════════════════════════════════════ */

/* Link policy line */
.link-policy {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin-bottom: var(--space-6);
  font-family: var(--font-mono);
  font-style: italic;
}

/* Link group — a category with a label and a list */
.links-group {
  margin-bottom: var(--space-6);
}

.links-group-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-magenta);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  margin-bottom: var(--space-3);
  padding-bottom: var(--space-1);
  border-bottom: 1px solid var(--color-border);
  /* h3 reset */
  font-weight: normal;
}

.links-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.links-list li {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  padding-left: var(--space-4);
  position: relative;
}

.links-list li::before {
  content: "→";
  position: absolute;
  left: 0;
  color: var(--color-border);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
}

.links-list a {
  color: var(--color-link);
  font-weight: bold;
}

.links-list a:hover {
  color: var(--color-text-bright);
}


/* ═══════════════════════════════════════════════════════════════════
   15. SECTION: CONTACT
   Email link and placeholder for future PGP / socials.
════════════════════════════════════════════════════════════════════ */

/* Big, obvious email link */
.contact-email {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: var(--text-base);
  color: var(--color-green);
  text-decoration: none;
  border: 1px solid var(--color-green);
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-sm);
  letter-spacing: 0.04em;
  transition: background var(--transition-base),
              box-shadow var(--transition-base),
              color var(--transition-base);
}

.contact-email:hover {
  background: #001a00;
  box-shadow: var(--glow-green);
  color: var(--color-text-bright);
}

.contact-email:visited {
  color: var(--color-green);
}

/* Contact links list */
.contact-links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-4);
}

.contact-links a {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  text-decoration: none;
  border: 1px solid var(--color-border);
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-sm);
  transition: border-color var(--transition-fast), color var(--transition-fast);
}

.contact-links a:hover {
  border-color: var(--color-cyan);
  color: var(--color-cyan);
}

/* PGP details block */
.pgp-block {
  margin-top: var(--space-4);
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  padding: var(--space-4);
  border-radius: var(--radius-sm);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
}


/* ═══════════════════════════════════════════════════════════════════
   16. SECTION: COLOPHON
   The "how this site is made" definition list.
   Uses <dl> / <dt> / <dd> styled in Section 2 (Typography).
   Additional colophon-specific styles here.
════════════════════════════════════════════════════════════════════ */

.colophon-list {
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  padding: var(--space-5) var(--space-6);
  border-radius: var(--radius-sm);
  /* dt / dd styles are in Section 2 */
}


/* ═══════════════════════════════════════════════════════════════════
   17. FOOTER
   Badge row, footer nav, credits, back-to-top.
════════════════════════════════════════════════════════════════════ */

.site-footer {
  background: var(--color-bg-footer);
  border-top: 2px solid var(--color-border);
  padding: var(--space-8) var(--space-6) var(--space-6);
  text-align: center;
}

/* 88×31 badge row */
.badge-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  justify-content: center;
  margin-bottom: var(--space-6);
}

/* Each badge — either a real <img> or a placeholder <div> */
.badge {
  width: 88px;
  height: 31px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border-radius: var(--radius-sm);
}

.badge img {
  width: 88px;
  height: 31px;
  object-fit: cover;
  image-rendering: pixelated; /* keeps pixel art crisp */
  display: block;
}

/* Placeholder badge style — remove once you have real badge images */
.badge-placeholder {
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  font-family: var(--font-mono);
  font-size: 0.6rem;
  color: var(--color-text-muted);
  letter-spacing: 0.05em;
  text-align: center;
  text-transform: uppercase;
  padding: 2px;
  transition: border-color var(--transition-fast);
}

.badge-placeholder:hover {
  border-color: var(--color-cyan);
}

/* Footer navigation */
.footer-nav {
  margin-bottom: var(--space-4);
}

.footer-nav ul {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
  justify-content: center;
}

.footer-nav a {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  text-decoration: none;
  letter-spacing: 0.05em;
}

.footer-nav a:hover {
  color: var(--color-cyan);
}

/* Footer credits text */
.footer-credits {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin: 0 0 var(--space-4);
  max-width: 100%;
}

/* Back to top link */
.back-to-top {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  text-decoration: none;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-top: var(--space-4);
  transition: color var(--transition-fast);
}

.back-to-top:hover {
  color: var(--color-cyan);
  text-shadow: var(--glow-cyan);
}


/* ═══════════════════════════════════════════════════════════════════
   18. DECORATIVE ELEMENTS
   Scanline bars, pixel placeholders, animations.
════════════════════════════════════════════════════════════════════ */

/* Scanline bar at top and bottom of header/footer
   Classic CRT "interlace lines" aesthetic */
.scanline-bar {
  width: 100%;
  height: 4px;
  background: repeating-linear-gradient(
    90deg,
    var(--color-cyan)   0px,
    var(--color-cyan)   2px,
    transparent         2px,
    transparent         6px,
    var(--color-green)  6px,
    var(--color-green)  8px,
    transparent         8px,
    transparent         14px,
    var(--color-magenta) 14px,
    var(--color-magenta) 16px,
    transparent          16px,
    transparent          22px
  );
  opacity: 0.6;
}

/* Pixel placeholder blocks
   Used everywhere a real image or element will eventually go.
   High visibility — you'll want to replace these! */
.pixel-placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  background: repeating-linear-gradient(
    45deg,
    #0a1428 0px,
    #0a1428 4px,
    #0d1a36 4px,
    #0d1a36 8px
  );
  border: 1px dashed var(--color-border);
  border-radius: var(--radius-sm);
  text-align: center;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  letter-spacing: 0.04em;
  line-height: 1.4;
}

/* Mascot placeholder — square, with "MASCOT" text */
.pixel-mascot {
  width: 90px;
  height: 90px;
}

/* Banner placeholder */
.pixel-banner-img {
  width: 100%;
  height: 80px;
  margin-bottom: var(--space-6);
  font-size: 0.65rem;
}

/* ─── ANIMATIONS ─────────────────────────────────────────────── */

/* Blinking cursor / status dot */
@keyframes blink {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0; }
}

/* Subtle glow pulse — for accents you want to draw attention to */
@keyframes glow-pulse {
  0%, 100% { text-shadow: var(--glow-green); }
  50%       { text-shadow: 0 0 20px #00ff4199, 0 0 40px #00ff4144; }
}

/* Slow scanline sweep — retro CRT effect (optional, CPU-light) */
@keyframes scanline-sweep {
  0%   { background-position: 0 0; }
  100% { background-position: 0 100vh; }
}

/* Used on the site logo for a subtle phosphor effect */
.site-logo-text {
  animation: glow-pulse 3s ease-in-out infinite;
}


/* ═══════════════════════════════════════════════════════════════════
   19. RESPONSIVE — MOBILE OVERRIDES
   These rules override the desktop styles for narrow screens.
   Media queries are at the end so they take precedence.

   Breakpoints used:
     768px — the classic tablet / stacked-column breakpoint
     480px — small phone
════════════════════════════════════════════════════════════════════ */

/* ── Tablet and below: stack sidebar above main ── */
@media (max-width: 768px) {

  /* Two-column grid becomes single column */
  .layout-wrapper {
    grid-template-columns: 1fr;
  }

  /* Sidebar loses sticky behaviour and sits above main content */
  .sidebar {
    position: static;
    border-right: none;
    border-bottom: 1px solid var(--color-border);
    flex-direction: row;
    flex-wrap: wrap;
    gap: var(--space-4);
    padding: var(--space-4);
  }

  /* Hide mascot on mobile to save space */
  .sidebar-mascot {
    display: none;
  }

  /* Sidebar widgets shrink and sit side by side */
  .sidebar-widget,
  .sidebar-nav,
  .visitor-counter {
    flex: 1 1 140px;
    min-width: 120px;
  }

  /* Header inner becomes vertical */
  .header-inner {
    flex-direction: column;
    align-items: flex-start;
    padding: var(--space-3) var(--space-4);
  }

  /* Status bar goes full-width */
  .status-bar {
    width: 100%;
  }

  /* Nav links wrap and get slightly smaller */
  .primary-nav a {
    padding: var(--space-2) var(--space-3);
    font-size: var(--text-xs);
  }

  /* Main content gets less horizontal padding */
  .main-content {
    padding: var(--space-6) var(--space-4);
  }

  /* Site title slightly smaller */
  .site-title {
    font-size: var(--text-lg);
  }

  /* p max-width relaxes on small screens */
  p {
    max-width: 100%;
  }

}

/* ── Small phone adjustments ── */
@media (max-width: 480px) {

  :root {
    /* Slightly reduce base font size on very small screens */
    font-size: 15px;
  }

  /* Badge row wraps tightly */
  .badge-row {
    gap: var(--space-1);
  }

  /* Footer nav links go smaller */
  .footer-nav a {
    font-size: var(--text-xs);
  }

  /* Header: logo text gets smaller */
  .site-logo-text {
    font-size: var(--text-xl);
  }

  /* Project items lose their left-border accent on tiny screens */
  .project-item {
    padding: var(--space-3) var(--space-4);
  }

}

/* ── Reduced motion: respect user OS preference ──
   Turn off all animations if the user has requested reduced motion.
   This is an accessibility setting. */
@media (prefers-reduced-motion: reduce) {

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }

}


/* ═══════════════════════════════════════════════════════════════════
   20. PRINT STYLES
   When someone prints this page (or saves as PDF).
   Hide nav, sidebar, decorative stuff. Keep readable text.
════════════════════════════════════════════════════════════════════ */

@media print {

  /* White background, black text */
  body {
    background: #fff;
    color: #000;
    background-image: none;
  }

  /* Hide nav, sidebar, badges, decorative elements */
  .site-header .primary-nav,
  .sidebar,
  .badge-row,
  .back-to-top,
  .scanline-bar,
  .pixel-placeholder,
  .status-bar {
    display: none !important;
  }

  /* Single column */
  .layout-wrapper {
    grid-template-columns: 1fr;
  }

  /* Show full URLs next to links */
  a[href]::after {
    content: " (" attr(href) ")";
    font-size: var(--text-xs);
    color: #666;
  }

  /* Don't show # anchors */
  a[href^="#"]::after {
    content: "";
  }

}


/* ═══════════════════════════════════════════════════════════════════
   PLACEHOLDER NOTES FOR FUTURE PHASES
   ────────────────────────────────────────────────────────────────
   PHASE 1 additions to consider:
   - Add @font-face for a pixel / bitmap web font for h1/h2
   - Add CSS variables for a light theme: [data-theme="light"] { ... }
   - Add IntersectionObserver-driven .nav-active class (tiny JS)
   - Add CSS Grid subgrid for more complex project card layouts

   PHASE 2 additions to consider:
   - Guestbook form styles
   - Comment section styles
   - Dark/light toggle animation

   PHASE 3+:
   - Dashboard styles
   - Auth state indicators
════════════════════════════════════════════════════════════════════ */


/* ═══════════════════════════════════════════════════════════════════
   PAGE 2 & 3 ADDITIONS — writing and guestbook pages
   Added in Phase 0, iteration 2.
   All rules here extend the base style.css without overwriting it.
════════════════════════════════════════════════════════════════════ */


/* ───────────────────────────────────────────────────────────────────
   SHARED — sub-page elements used on both writing and guestbook pages
─────────────────────────────────────────────────────────────────── */

/*
  On sub-pages, the site title is a <p> not <h1> (semantic correctness).
  Give it the same visual weight as the homepage version.
*/
.site-title p,
p.site-title {
  font-family: var(--font-heading);
  font-size: var(--text-xl);
  font-weight: bold;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  line-height: 1;
  margin: 0;
}

p.site-title a {
  color: var(--color-text-bright);
  text-decoration: none;
  transition: color var(--transition-fast), text-shadow var(--transition-fast);
}

p.site-title a:hover {
  color: var(--color-green);
  text-shadow: var(--glow-green);
}

/*
  Active nav link — the current page indicator.
  aria-current="page" is the semantic marker;
  .nav-active is for CSS styling.
  Both are set in the HTML on the correct <a> tag.
*/
.primary-nav a[aria-current="page"],
.primary-nav a.nav-active {
  color: var(--color-green);
  background: #0a1820;
  border-bottom: 2px solid var(--color-green);
}

/* Page header block — the big h1 + subtitle at top of each sub-page */
.page-header {
  margin-bottom: var(--space-6);
  padding-bottom: var(--space-4);
}

.page-title {
  font-size: var(--text-2xl);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  line-height: 1.1;
  margin-bottom: var(--space-3);
  display: flex;
  align-items: center;
  gap: var(--space-3);
}

/* The decorative symbol before the page title */
.page-title-accent {
  color: var(--color-cyan);
  text-shadow: var(--glow-cyan);
  font-size: var(--text-xl);
  flex-shrink: 0;
}

.page-subtitle {
  font-size: var(--text-md);
  color: var(--color-text-muted);
  max-width: 60ch;
  margin-bottom: var(--space-3);
}

/* Archive count next to year in sidebar */
.archive-count {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin-left: var(--space-2);
}

/* Archive list in sidebar */
.archive-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.archive-list a {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  text-decoration: none;
  padding: var(--space-1) var(--space-2);
  border-left: 2px solid transparent;
  display: block;
  transition: color var(--transition-fast), border-color var(--transition-fast);
}

.archive-list a:hover {
  color: var(--color-cyan);
  border-left-color: var(--color-cyan);
}


/* ───────────────────────────────────────────────────────────────────
   PAGE-SPECIFIC ACCENT COLORS
   body.page-writing  → cyan accent theme (matches "data / notes" vibe)
   body.page-guestbook → magenta accent theme (warmer, more social)
   These override specific elements per page using the body class.
─────────────────────────────────────────────────────────────────── */

/* Writing page: cyan accent on section headings */
.page-writing .page-title-accent,
.page-writing .section-icon {
  color: var(--color-cyan);
  text-shadow: var(--glow-cyan);
}

.page-writing .page-header {
  border-bottom: 2px solid var(--color-cyan);
}

/* Guestbook page: magenta accent */
.page-guestbook .page-title-accent,
.page-guestbook .section-icon {
  color: var(--color-magenta);
  text-shadow: var(--glow-magenta);
}

.page-guestbook .page-header {
  border-bottom: 2px solid var(--color-magenta);
}

.page-guestbook .section-header h2 {
  border-bottom-color: var(--color-magenta);
}

.page-guestbook .sidebar-nav a:hover {
  color: var(--color-magenta);
  border-left-color: var(--color-magenta);
  background: #200010;
}


/* ───────────────────────────────────────────────────────────────────
   WRITING PAGE SPECIFIC STYLES
─────────────────────────────────────────────────────────────────── */

/* RSS feed notice line below the page subtitle */
.feed-notice {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin: 0;
  letter-spacing: 0.04em;
}

.feed-notice a {
  color: var(--color-cyan);
}

/* Writing section intro text */
.writing-intro p {
  max-width: 66ch;
}

/* ── RSS subscribe widget in sidebar ── */
.sidebar-rss {
  /* container */
}

/* The prominent RSS subscribe button */
.rss-button {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: bold;
  color: var(--color-green);
  border: 1px solid var(--color-green);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  text-decoration: none;
  margin-bottom: var(--space-3);
  transition: background var(--transition-base),
              box-shadow var(--transition-base);
  letter-spacing: 0.05em;
}

.rss-button:hover {
  background: #001a00;
  box-shadow: var(--glow-green);
  color: var(--color-text-bright);
}

.rss-icon {
  font-size: var(--text-base);
  color: var(--color-green);
  text-shadow: var(--glow-green);
}

/* Small note about how to use RSS */
.rss-explainer {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  line-height: 1.5;
  margin: 0;
}

/* ── Post list ── */
.post-list-section {
  margin-bottom: var(--space-12);
}

/*
  "No posts yet" empty state — shown before first post.
  Remove from HTML once real posts exist.
*/
.empty-state {
  background: var(--color-bg-panel);
  border: 1px dashed var(--color-border);
  padding: var(--space-6) var(--space-6);
  border-radius: var(--radius-sm);
  text-align: center;
  margin-bottom: var(--space-6);
}

.empty-state-text {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin: 0;
  max-width: 100%;
}

/*
  Individual post entry card.
  Uses h-entry microformat classes — don't remove those from HTML.
  .post-entry--placeholder = greyed out, for draft/coming-soon slots
*/
.post-entry {
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-cyan);
  padding: var(--space-5) var(--space-6);
  margin-bottom: var(--space-4);
  border-radius: var(--radius-sm);
  transition: border-color var(--transition-base),
              box-shadow var(--transition-base);
}

.post-entry:hover {
  border-color: var(--color-cyan);
  box-shadow: var(--glow-cyan);
}

/* Placeholder post entry — visually de-emphasised */
.post-entry--placeholder {
  opacity: 0.45;
  border-left-color: var(--color-border);
  pointer-events: none; /* can't click placeholder entries */
}

/* Date + tags row */
.post-entry-meta {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  margin-bottom: var(--space-3);
  flex-wrap: wrap;
}

/* Post date */
.post-date {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  letter-spacing: 0.06em;
  white-space: nowrap;
}

/* Tags list — inline chips */
.post-tags {
  display: flex;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.post-tag {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-cyan);
  background: #001a22;
  border: 1px solid var(--color-cyan);
  padding: 1px var(--space-2);
  border-radius: var(--radius-sm);
  letter-spacing: 0.06em;
  opacity: 0.8;
}

/* Post title */
.post-entry-title {
  font-size: var(--text-lg);
  font-family: var(--font-heading);
  margin-bottom: var(--space-2);
  line-height: var(--leading-tight);
}

.post-entry-title a {
  color: var(--color-text-bright);
  text-decoration: none;
  transition: color var(--transition-fast);
}

.post-entry-title a:hover {
  color: var(--color-cyan);
  text-shadow: var(--glow-cyan);
}

/* Placeholder title (no link) */
.post-entry-title span.p-name {
  color: var(--color-text-muted);
}

/* Post summary */
.post-entry-summary {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin-bottom: var(--space-3);
  line-height: var(--leading-base);
}

/* "Read post →" link at bottom of entry */
.post-read-more {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-cyan);
  text-decoration: none;
  letter-spacing: 0.06em;
  transition: color var(--transition-fast);
}

.post-read-more:hover {
  color: var(--color-text-bright);
  text-decoration: underline;
}

/* Subscribe section at bottom of writing page */
.writing-subscribe .section-body {
  max-width: 66ch;
}

.rss-reader-note {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin-bottom: var(--space-4);
}

.archive-notice {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}


/* ───────────────────────────────────────────────────────────────────
   GUESTBOOK PAGE SPECIFIC STYLES
─────────────────────────────────────────────────────────────────── */

/* Guestbook counter in sidebar — same digit style as homepage */
.gb-counter {
  /* uses .counter-display / .counter-digit from base styles */
}

/* Sidebar rules list — short punchy lines */
.gb-rules-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.gb-rules-list li {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  padding-left: var(--space-3);
  position: relative;
}

.gb-rules-list li::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: var(--color-green);
  font-size: 0.65rem;
}

/* Sidebar explainer text */
.gb-explainer-text {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  line-height: 1.6;
  margin: 0;
}

/* ── Phase 0 mailto block ── */
.gb-mailto-block {
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-magenta);
  padding: var(--space-5) var(--space-6);
  border-radius: var(--radius-sm);
  margin-bottom: var(--space-6);
}

.gb-mailto-block p {
  margin-bottom: var(--space-3);
}

/* Override the base contact-email color to magenta on guestbook page */
.gb-mailto-link {
  color: var(--color-magenta) !important;
  border-color: var(--color-magenta) !important;
}

.gb-mailto-link:hover {
  background: #200010 !important;
  box-shadow: var(--glow-magenta) !important;
  color: var(--color-text-bright) !important;
}

.gb-mailto-note {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin-top: var(--space-3);
  margin-bottom: 0;
}

/* ── Form preview collapsible ── */
.gb-form-preview {
  margin-bottom: var(--space-4);
}

.gb-form-preview > summary {
  cursor: pointer;
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  padding: var(--space-3) 0;
  user-select: none;
  transition: color var(--transition-fast);
}

.gb-form-preview > summary:hover {
  color: var(--color-magenta);
}

/* ── Form itself ── */
.gb-form {
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  padding: var(--space-6);
  border-radius: var(--radius-sm);
  margin-top: var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
}

/* Disabled state overlay hint */
.form-disabled {
  opacity: 0.6;
  pointer-events: none;
  position: relative;
}

/* One row = label + input stacked vertically */
.form-row {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.form-label {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  letter-spacing: 0.04em;
}

/* Required star */
.form-required {
  color: var(--color-magenta);
  margin-left: var(--space-1);
}

/* Optional tag */
.form-optional {
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  font-weight: normal;
  margin-left: var(--space-2);
}

/* All inputs and textarea share these base styles */
.form-input {
  background: #060a16;
  color: var(--color-text);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  padding: var(--space-3) var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  width: 100%;
  transition: border-color var(--transition-base),
              box-shadow var(--transition-base);
  /* Prevent browser styling on autofill */
  -webkit-text-fill-color: var(--color-text);
}

.form-input:focus {
  outline: none;
  border-color: var(--color-magenta);
  box-shadow: var(--glow-magenta);
}

/* Placeholder text in inputs */
.form-input::placeholder {
  color: var(--color-text-muted);
  opacity: 0.5;
}

.form-textarea {
  resize: vertical;   /* allow vertical resize only — horizontal would break layout */
  min-height: 120px;
  line-height: var(--leading-base);
}

/* Hint text below an input */
.form-hint {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin: 0;
}

/* "Form not yet active" notice */
.form-inactive-notice {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-yellow);
  background: #1a1400;
  border: 1px solid var(--color-yellow);
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-sm);
  margin: 0;
}

/* Submit button */
.form-submit {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: bold;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-bg);
  background: var(--color-magenta);
  border: none;
  padding: var(--space-3) var(--space-6);
  border-radius: var(--radius-sm);
  cursor: pointer;
  align-self: flex-start;
  transition: background var(--transition-base),
              box-shadow var(--transition-base);
}

.form-submit:hover:not([disabled]) {
  background: var(--color-text-bright);
  box-shadow: var(--glow-magenta);
}

.form-submit[disabled] {
  opacity: 0.4;
  cursor: not-allowed;
}

/* ── Guestbook entries ── */
.gb-entries-section {
  margin-bottom: var(--space-12);
}

/*
  Individual guestbook entry.
  .h-card is a microformat2 marker for IndieWeb tools.
  Don't remove it from the HTML — it does something even if invisible.
*/
.gb-entry {
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  padding: var(--space-5) var(--space-6);
  margin-bottom: var(--space-4);
  position: relative;
  transition: border-color var(--transition-base);
}

.gb-entry:hover {
  border-color: var(--color-magenta);
}

/* Decorative corner marker — retro "guestbook" aesthetic */
.gb-entry::before {
  content: "❝";
  position: absolute;
  top: var(--space-3);
  right: var(--space-4);
  color: var(--color-border);
  font-size: var(--text-2xl);
  line-height: 1;
  opacity: 0.4;
}

/* Entry header: author info + date on one row */
.gb-entry-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-4);
  margin-bottom: var(--space-3);
  flex-wrap: wrap;
}

.gb-entry-author {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
}

/* Visitor's name */
.gb-entry-name {
  font-family: var(--font-mono);
  font-size: var(--text-base);
  color: var(--color-text-bright);
  font-weight: bold;
  letter-spacing: 0.03em;
}

/* Visitor's website link */
.gb-entry-site {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-magenta);
  text-decoration: none;
  border-bottom: 1px dashed var(--color-magenta);
  padding-bottom: 1px;
  transition: color var(--transition-fast);
}

.gb-entry-site:hover {
  color: var(--color-text-bright);
  border-bottom-color: var(--color-text-bright);
}

/* Entry date */
.gb-entry-date {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  white-space: nowrap;
  flex-shrink: 0;
}

/* Message block — using <blockquote> semantically */
.gb-entry-message {
  margin: 0;
  padding-left: var(--space-4);
  border-left: 2px solid var(--color-border);
}

.gb-entry-message p {
  font-size: var(--text-sm);
  color: var(--color-text);
  line-height: var(--leading-loose);
  margin: 0;
  max-width: 70ch;
}

/* Thin divider between entries */
.gb-entry-divider {
  border: none;
  border-top: 1px solid var(--color-border);
  margin: 0 0 var(--space-4);
}

/* Small label on example/seed entries — remove on real entries */
.gb-entry-example-note {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin-top: var(--space-3);
  margin-bottom: 0;
  font-style: italic;
  opacity: 0.5;
}

/* "Be the first to sign" empty note */
.gb-empty-note {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  text-align: center;
  padding: var(--space-4);
  border: 1px dashed var(--color-border);
  border-radius: var(--radius-sm);
  margin-top: var(--space-4);
}

/* ── Moderation policy section ── */
.gb-policy-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin-bottom: var(--space-4);
  list-style: none;
}

.gb-policy-list li {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  line-height: var(--leading-base);
  padding-left: var(--space-5);
  position: relative;
}

.gb-policy-list li::before {
  content: "//";
  position: absolute;
  left: 0;
  color: var(--color-border);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
}

.gb-policy-list strong {
  color: var(--color-text-bright);
  display: block;
  margin-bottom: var(--space-1);
}


/* ───────────────────────────────────────────────────────────────────
   RESPONSIVE — overrides for writing and guestbook pages
   (These supplement the base responsive rules in Section 19)
─────────────────────────────────────────────────────────────────── */

@media (max-width: 768px) {

  .page-title {
    font-size: var(--text-xl);
  }

  /* Form goes full width on mobile */
  .gb-form {
    padding: var(--space-4);
  }

  /* Entry header stacks on mobile */
  .gb-entry-header {
    flex-direction: column;
    gap: var(--space-1);
  }

  /* Post entry meta stacks */
  .post-entry-meta {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-2);
  }

}

@media (max-width: 480px) {

  .gb-entry {
    padding: var(--space-4);
  }

  .gb-mailto-block {
    padding: var(--space-4);
  }

}



/* ═══════════════════════════════════════════════════════════════════
   PAGES 4 & 5 ADDITIONS — projects and links pages
   Added in Phase 0, iteration 3.
════════════════════════════════════════════════════════════════════ */


/* ───────────────────────────────────────────────────────────────────
   PAGE ACCENT COLORS — projects (green) and links (yellow)
─────────────────────────────────────────────────────────────────── */

.page-projects .page-title-accent,
.page-projects .section-icon {
  color: var(--color-green);
  text-shadow: var(--glow-green);
}

.page-projects .page-header {
  border-bottom: 2px solid var(--color-green);
}

.page-projects .section-header h2 {
  border-bottom-color: var(--color-green);
}

.page-projects .sidebar-nav a:hover {
  color: var(--color-green);
  border-left-color: var(--color-green);
  background: #0a2010;
}

/* Links page uses yellow/amber accent */
.page-links .page-title-accent,
.page-links .section-icon {
  color: var(--color-yellow);
  text-shadow: 0 0 8px #ffe60066, 0 0 16px #ffe60022;
}

.page-links .page-header {
  border-bottom: 2px solid var(--color-yellow);
}

.page-links .section-header h2 {
  border-bottom-color: var(--color-yellow);
}

.page-links .sidebar-nav a:hover {
  color: var(--color-yellow);
  border-left-color: var(--color-yellow);
  background: #1a1400;
}


/* ───────────────────────────────────────────────────────────────────
   PROJECTS PAGE
─────────────────────────────────────────────────────────────────── */

/* Status indicator dots in sidebar */
.proj-status-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.proj-status-item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
}

.proj-status-dot {
  font-size: 0.6rem;
  flex-shrink: 0;
}

.dot-live     { color: var(--color-green);   text-shadow: var(--glow-green); }
.dot-wip      { color: var(--color-yellow);  }
.dot-soon     { color: var(--color-cyan);    text-shadow: var(--glow-cyan); }
.dot-archived { color: var(--color-text-muted); }

.proj-status-label {
  color: var(--color-text-muted);
  flex: 1;
}

.proj-status-count {
  color: var(--color-text-bright);
  font-weight: bold;
}

/* Lab note in sidebar */
.proj-note-text {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  line-height: 1.6;
  margin: 0;
  font-style: italic;
}

/* Projects page subtitle link */
.projects-page-header a {
  color: var(--color-cyan);
}

/*
  Projects grid — two columns on desktop, one on mobile.
  Each project card is an <article>.
*/
.projects-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-5);
  margin-bottom: var(--space-6);
}

/* Individual project card */
.project-card {
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  display: flex;
  flex-direction: column;
  gap: 0;
  overflow: hidden;
  transition: border-color var(--transition-base),
              box-shadow var(--transition-base);
}

.project-card:hover {
  border-color: var(--color-green);
  box-shadow: var(--glow-green);
}

/* Placeholder card — dimmed, non-interactive */
.project-card--placeholder {
  opacity: 0.55;
}

.project-card--placeholder:hover {
  border-color: var(--color-border);
  box-shadow: none;
}

/* Archived card — fully greyed */
.project-card--archived {
  opacity: 0.4;
}

/* Card header area */
.project-card-header {
  padding: var(--space-4) var(--space-5);
  border-bottom: 1px solid var(--color-border);
  background: #0c1428;
}

/* Title + status badge on one row */
.project-card-title-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  margin-bottom: var(--space-2);
  flex-wrap: wrap;
}

/* Card h2 — each card has its own h2 */
.project-card-name {
  font-family: var(--font-mono);
  font-size: var(--text-base);
  color: var(--color-text-bright);
  font-weight: bold;
  letter-spacing: 0.04em;
  /* Override section h2 styles */
  border: none;
  padding: 0;
  text-transform: none;
  letter-spacing: normal;
}

/* Tags list on the card */
.project-card-tags {
  display: flex;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.proj-tag {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-green);
  background: #001a00;
  border: 1px solid #003300;
  padding: 1px var(--space-2);
  border-radius: var(--radius-sm);
  letter-spacing: 0.04em;
}

/* Card body — description */
.project-card-body {
  padding: var(--space-4) var(--space-5);
  flex: 1; /* fills available space so all cards in a row are same height */
}

.project-card-desc {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  line-height: var(--leading-base);
  margin: 0;
  max-width: 100%;
}

/* Card footer — links */
.project-card-footer {
  padding: var(--space-3) var(--space-5);
  border-top: 1px solid var(--color-border);
  display: flex;
  gap: var(--space-4);
  align-items: center;
  flex-wrap: wrap;
  background: #08101e;
}

/* Primary link — "view project →" */
.proj-link--primary {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-green);
  text-decoration: none;
  font-weight: bold;
  letter-spacing: 0.06em;
  transition: color var(--transition-fast);
}

.proj-link--primary:hover {
  color: var(--color-text-bright);
  text-decoration: underline;
}

/* Secondary link — "build log →" */
.proj-link--secondary {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  text-decoration: none;
  letter-spacing: 0.04em;
  transition: color var(--transition-fast);
}

.proj-link--secondary:hover {
  color: var(--color-cyan);
}

/* Placeholder text when no links yet */
.proj-link-placeholder {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  font-style: italic;
  opacity: 0.6;
}

/* Planned projects list — lighter than full cards */
.planned-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.planned-item {
  padding: var(--space-3) var(--space-5);
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-cyan);
  border-radius: var(--radius-sm);
  transition: border-color var(--transition-base);
}

.planned-item:hover {
  border-left-color: var(--color-green);
}

.planned-item-meta {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-bottom: var(--space-1);
}

.planned-name {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-bright);
  font-weight: bold;
}

.planned-desc {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin: 0;
}

/* Archive details/summary block */
.archive-details {
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  padding: var(--space-4) var(--space-5);
}

.archive-details > summary {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  cursor: pointer;
  user-select: none;
  padding: var(--space-2) 0;
  transition: color var(--transition-fast);
}

.archive-details > summary:hover {
  color: var(--color-green);
}

.archive-details-body {
  margin-top: var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

/* Single-column grid override for archived cards */
.archive-details-body .projects-grid {
  grid-template-columns: 1fr;
}

/* Responsive: single column on tablet */
@media (max-width: 768px) {
  .projects-grid {
    grid-template-columns: 1fr;
  }
}


/* ───────────────────────────────────────────────────────────────────
   LINKS PAGE
─────────────────────────────────────────────────────────────────── */

/* "Last curated" note under page subtitle */
.links-updated-note {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin: 0;
}

/* Links count in sidebar */
.links-count {
  /* uses .counter-display / .counter-digit from base styles */
}

/* Short policy in sidebar */
.links-policy-short {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  line-height: 1.6;
  margin: 0;
  font-style: italic;
}

/* Full policy blockquote at top of page */
.links-policy-block {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  border-left: 3px solid var(--color-yellow);
  padding: var(--space-3) var(--space-5);
  margin: 0;
  background: var(--color-bg-panel);
  border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
  font-style: italic;
  line-height: var(--leading-base);
}

/* Each link category section */
.links-category {
  margin-bottom: var(--space-10);
  scroll-margin-top: 80px;
}

/* Optional note below a category heading */
.category-note {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin-bottom: var(--space-5);
  font-style: italic;
  max-width: 60ch;
}

/* The link list itself */
.link-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

/* Individual link item */
.link-item {
  padding: var(--space-4) var(--space-5);
  background: var(--color-bg-panel);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  transition: border-color var(--transition-base),
              box-shadow var(--transition-base);
}

.link-item:hover {
  border-color: var(--color-yellow);
  box-shadow: 0 0 8px #ffe60022;
}

/* Link name + tag on one row */
.link-item-header {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-bottom: var(--space-2);
  flex-wrap: wrap;
}

/* The link itself */
.link-name {
  font-family: var(--font-mono);
  font-size: var(--text-base);
  color: var(--color-yellow);
  font-weight: bold;
  text-decoration: none;
  letter-spacing: 0.02em;
  transition: color var(--transition-fast),
              text-shadow var(--transition-fast);
}

.link-name:hover {
  color: var(--color-text-bright);
  text-shadow: 0 0 8px #ffe60066;
}

/* Category tag chip next to link name */
.link-tag {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  background: #0a0e1a;
  border: 1px solid var(--color-border);
  padding: 1px var(--space-2);
  border-radius: var(--radius-sm);
  letter-spacing: 0.06em;
  white-space: nowrap;
}

/* Link description */
.link-desc {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  line-height: var(--leading-base);
  margin: 0;
  max-width: 66ch;
}

