/* ============================================================
   MitiruEngine — minimal theme stylesheet
   Single sheet. No build step, no preprocessor.
   Color tokens drive light/dark modes. Manual toggle wins over OS.
   ============================================================ */

:root {
  /* ----- color tokens (light, default) ----- */
  --c-bg: #ffffff;
  --c-bg-alt: #f6f7f9;
  --c-bg-elev: #ffffff;
  --c-bg-code: #f3f5f9;
  --c-bg-hero-top: #fafbfc;
  --c-bg-header: rgba(255, 255, 255, 0.92);
  --c-fg: #1c2330;
  --c-fg-soft: #5a6675;
  --c-fg-mute: #8c95a3;
  --c-fg-invert: #ffffff;
  --c-accent: #2563eb;
  --c-accent-hover: #1d4ed8;
  --c-accent-grad-2: #0ea5e9;
  --c-accent-soft: #dbeafe;
  --c-accent-on-soft: #1d4ed8;
  --c-border: #e4e8ee;
  --c-rule: #eef1f5;
  --c-shadow: 0 1px 2px rgba(20, 25, 35, 0.05);
  --c-shadow-hover: 0 8px 24px rgba(20, 25, 35, 0.06);
  --c-shadow-card: 0 10px 24px rgba(20, 25, 35, 0.08);
  --c-shadow-soft: 0 6px 18px rgba(20, 25, 35, 0.05);

  /* code-block syntax tokens (light theme defaults — dark theme overrides below) */
  --c-code-fg: #1a2030;
  --c-code-comment: #8b949e;
  --c-code-kw: #ff7b72;
  --c-code-fn: #d2a8ff;
  --c-code-str: #a5d6ff;
  --c-code-pp: #79c0ff;

  /* badge — example kinds */
  --c-badge-overlay: rgba(15, 22, 35, 0.78);
  --c-badge-cef: #2563eb;
  --c-badge-headless: #475569;
  --c-badge-headless-soft: #f1f5f9;
  --c-badge-headless-on: #475569;

  /* badge — ADR statuses */
  --c-adr-accepted-bg: #d1fae5;
  --c-adr-accepted-fg: #065f46;
  --c-adr-accepted-bd: #a7f3d0;
  --c-adr-proposed-bg: #fef3c7;
  --c-adr-proposed-fg: #92400e;
  --c-adr-proposed-bd: #fde68a;
  --c-adr-rejected-bg: #fee2e2;
  --c-adr-rejected-fg: #991b1b;
  --c-adr-rejected-bd: #fecaca;
  --c-adr-superseded-bg: #e0e7ff;
  --c-adr-superseded-fg: #3730a3;
  --c-adr-superseded-bd: #c7d2fe;
  --c-adr-deprecated-bg: #f3f4f6;
  --c-adr-deprecated-fg: #4b5563;
  --c-adr-deprecated-bd: #d1d5db;

  /* footer (kept dark in both themes — it is intentional accent) */
  --c-footer-bg: #0f1623;
  --c-footer-fg: #c7cfdb;
  --c-footer-fg-strong: #ffffff;
  --c-footer-fg-mute: #8893a4;
  --c-footer-link: #9fc3ff;

  /* ----- shape & layout ----- */
  --r-max-width: 1140px;
  --r-pad: 1.5rem;
  --r-radius: 8px;
  --r-radius-lg: 12px;
  --r-tap: 44px;

  /* ----- typography (Siv3D / ebiten 風: system font 優先で軽く・読みやすく) ----- */
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Hiragino Kaku Gothic ProN", "Hiragino Sans", "Yu Gothic", "Noto Sans JP", Roboto, "Inter", system-ui, sans-serif;
  --font-mono: "JetBrains Mono", "SF Mono", "Cascadia Mono", Menlo, Consolas, ui-monospace, monospace;
  --font-jp: -apple-system, "Hiragino Kaku Gothic ProN", "Hiragino Sans", "Yu Gothic", "Noto Sans JP", "Segoe UI", sans-serif;
}

/* ----- dark mode: auto-follow OS, unless [data-theme] is set on <html> ----- */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --c-bg: #0f1419;
    --c-bg-alt: #161c24;
    --c-bg-elev: #1a2230;
    --c-bg-code: #0a0f17;
    --c-code-fg: #e6edf3;
    --c-bg-hero-top: #11171f;
    --c-bg-header: rgba(15, 20, 25, 0.85);
    --c-fg: #e6ecf2;
    --c-fg-soft: #b3bdc9;
    --c-fg-mute: #7d8593;
    --c-fg-invert: #0f1419;
    --c-accent: #60a5fa;
    --c-accent-hover: #93c5fd;
    --c-accent-grad-2: #38bdf8;
    --c-accent-soft: #1e3a5f;
    --c-accent-on-soft: #bfdbfe;
    --c-border: #2a323d;
    --c-rule: #1e252e;
    --c-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
    --c-shadow-hover: 0 8px 24px rgba(0, 0, 0, 0.4);
    --c-shadow-card: 0 10px 24px rgba(0, 0, 0, 0.5);
    --c-shadow-soft: 0 6px 18px rgba(0, 0, 0, 0.35);

    --c-badge-overlay: rgba(0, 0, 0, 0.7);
    --c-badge-cef: #3b82f6;
    --c-badge-headless: #64748b;
    --c-badge-headless-soft: #1e252e;
    --c-badge-headless-on: #b3bdc9;

    --c-adr-accepted-bg: #064e3b;
    --c-adr-accepted-fg: #a7f3d0;
    --c-adr-accepted-bd: #065f46;
    --c-adr-proposed-bg: #5a3a00;
    --c-adr-proposed-fg: #fde68a;
    --c-adr-proposed-bd: #92400e;
    --c-adr-rejected-bg: #5b1e1e;
    --c-adr-rejected-fg: #fecaca;
    --c-adr-rejected-bd: #991b1b;
    --c-adr-superseded-bg: #1e1b4b;
    --c-adr-superseded-fg: #c7d2fe;
    --c-adr-superseded-bd: #3730a3;
    --c-adr-deprecated-bg: #1f242c;
    --c-adr-deprecated-fg: #c5cbd4;
    --c-adr-deprecated-bd: #3a424d;
  }
}

/* ----- dark mode: explicit manual override ----- */
:root[data-theme="dark"] {
  --c-bg: #0f1419;
  --c-bg-alt: #161c24;
  --c-code-fg: #e6edf3;
  --c-bg-elev: #1a2230;
  --c-bg-code: #0a0f17;
  --c-bg-hero-top: #11171f;
  --c-bg-header: rgba(15, 20, 25, 0.85);
  --c-fg: #e6ecf2;
  --c-fg-soft: #b3bdc9;
  --c-fg-mute: #7d8593;
  --c-fg-invert: #0f1419;
  --c-accent: #60a5fa;
  --c-accent-hover: #93c5fd;
  --c-accent-grad-2: #38bdf8;
  --c-accent-soft: #1e3a5f;
  --c-accent-on-soft: #bfdbfe;
  --c-border: #2a323d;
  --c-rule: #1e252e;
  --c-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
  --c-shadow-hover: 0 8px 24px rgba(0, 0, 0, 0.4);
  --c-shadow-card: 0 10px 24px rgba(0, 0, 0, 0.5);
  --c-shadow-soft: 0 6px 18px rgba(0, 0, 0, 0.35);

  --c-badge-overlay: rgba(0, 0, 0, 0.7);
  --c-badge-cef: #3b82f6;
  --c-badge-headless: #64748b;
  --c-badge-headless-soft: #1e252e;
  --c-badge-headless-on: #b3bdc9;

  --c-adr-accepted-bg: #064e3b;
  --c-adr-accepted-fg: #a7f3d0;
  --c-adr-accepted-bd: #065f46;
  --c-adr-proposed-bg: #5a3a00;
  --c-adr-proposed-fg: #fde68a;
  --c-adr-proposed-bd: #92400e;
  --c-adr-rejected-bg: #5b1e1e;
  --c-adr-rejected-fg: #fecaca;
  --c-adr-rejected-bd: #991b1b;
  --c-adr-superseded-bg: #1e1b4b;
  --c-adr-superseded-fg: #c7d2fe;
  --c-adr-superseded-bd: #3730a3;
  --c-adr-deprecated-bg: #1f242c;
  --c-adr-deprecated-fg: #c5cbd4;
  --c-adr-deprecated-bd: #3a424d;
}

/* :root[data-theme="light"] explicitly re-asserts light values so it
   always overrides the OS @media block above. Values mirror the
   defaults in :root. */
:root[data-theme="light"] {
  --c-bg: #ffffff;
  --c-bg-alt: #f6f7f9;
  --c-bg-elev: #ffffff;
  --c-bg-code: #f3f5f9;
  --c-code-fg: #1a2030;
  --c-bg-hero-top: #fafbfc;
  --c-bg-header: rgba(255, 255, 255, 0.92);
  --c-fg: #1c2330;
  --c-fg-soft: #5a6675;
  --c-fg-mute: #8c95a3;
  --c-fg-invert: #ffffff;
  --c-accent: #2563eb;
  --c-accent-hover: #1d4ed8;
  --c-accent-grad-2: #0ea5e9;
  --c-accent-soft: #dbeafe;
  --c-accent-on-soft: #1d4ed8;
  --c-border: #e4e8ee;
  --c-rule: #eef1f5;
  --c-shadow: 0 1px 2px rgba(20, 25, 35, 0.05);
  --c-shadow-hover: 0 8px 24px rgba(20, 25, 35, 0.06);
  --c-shadow-card: 0 10px 24px rgba(20, 25, 35, 0.08);
  --c-shadow-soft: 0 6px 18px rgba(20, 25, 35, 0.05);

  --c-badge-overlay: rgba(15, 22, 35, 0.78);
  --c-badge-cef: #2563eb;
  --c-badge-headless: #475569;
  --c-badge-headless-soft: #f1f5f9;
  --c-badge-headless-on: #475569;

  --c-adr-accepted-bg: #d1fae5;
  --c-adr-accepted-fg: #065f46;
  --c-adr-accepted-bd: #a7f3d0;
  --c-adr-proposed-bg: #fef3c7;
  --c-adr-proposed-fg: #92400e;
  --c-adr-proposed-bd: #fde68a;
  --c-adr-rejected-bg: #fee2e2;
  --c-adr-rejected-fg: #991b1b;
  --c-adr-rejected-bd: #fecaca;
  --c-adr-superseded-bg: #e0e7ff;
  --c-adr-superseded-fg: #3730a3;
  --c-adr-superseded-bd: #c7d2fe;
  --c-adr-deprecated-bg: #f3f4f6;
  --c-adr-deprecated-fg: #4b5563;
  --c-adr-deprecated-bd: #d1d5db;
}

* { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  font-family: var(--font-sans);
  color: var(--c-fg);
  background: var(--c-bg);
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

html[lang="ja"] body {
  font-family: var(--font-jp);
  line-height: 1.8;
  font-feature-settings: "palt" 1;
}
html[lang="ja"] .page-article__body,
html[lang="ja"] .chapter-article__body,
html[lang="ja"] .example-detail__body,
html[lang="ja"] .api-page__content,
html[lang="ja"] .adr-page__article {
  line-break: strict;
}

a {
  color: var(--c-accent);
  text-decoration: none;
}
a:hover { text-decoration: underline; }

code, pre, kbd, samp { font-family: var(--font-mono); }

.container {
  max-width: var(--r-max-width);
  margin: 0 auto;
  padding-left: var(--r-pad);
  padding-right: var(--r-pad);
}

.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;
}

/* ----- header ----- */
.site-header {
  border-bottom: 1px solid var(--c-rule);
  position: sticky; top: 0;
  background: var(--c-bg-header);
  backdrop-filter: saturate(180%) blur(8px);
  z-index: 10;
}
.site-header__inner {
  display: flex; align-items: center; justify-content: space-between;
  height: 64px;
  gap: 0.5rem;
}
.site-header__brand { display: flex; align-items: center; gap: 0.55rem; color: var(--c-fg); font-weight: 700; }
.site-header__brand:hover { text-decoration: none; color: var(--c-accent); }
.site-header__brand-mark {
  display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px; border-radius: 6px;
  background: linear-gradient(135deg, var(--c-accent) 0%, var(--c-accent-grad-2) 100%);
  color: var(--c-fg-invert); font-weight: 800; font-size: 0.95rem;
}
.site-nav { display: flex; align-items: center; gap: 1.5rem; font-size: 0.93rem; }
.site-nav a { color: var(--c-fg-soft); white-space: nowrap; }
.site-nav a:hover { color: var(--c-accent); text-decoration: none; }
.site-nav__github { display: inline-flex; }
.site-nav__lang { color: var(--c-fg-mute); font-size: 0.85rem; }
.site-nav__lang a { color: var(--c-fg-mute); margin-left: 0.3rem; }
.site-nav__lang strong { color: var(--c-fg); margin-left: 0.3rem; }

/* ----- theme toggle button ----- */
.theme-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  padding: 0;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  background: transparent;
  color: var(--c-fg-soft);
  cursor: pointer;
  transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
}
.theme-toggle:hover {
  color: var(--c-accent);
  border-color: var(--c-accent);
}
.theme-toggle:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}
.theme-toggle svg { display: block; width: 18px; height: 18px; }
/* default: show moon (light theme is active, click to go dark) */
.theme-toggle .theme-toggle__icon--sun { display: none; }
.theme-toggle .theme-toggle__icon--moon { display: block; }
:root[data-theme="dark"] .theme-toggle .theme-toggle__icon--sun { display: block; }
:root[data-theme="dark"] .theme-toggle .theme-toggle__icon--moon { display: none; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .theme-toggle .theme-toggle__icon--sun { display: block; }
  :root:not([data-theme="light"]) .theme-toggle .theme-toggle__icon--moon { display: none; }
}

/* ----- hamburger nav toggle (mobile) -----
   The checkbox is the source of truth for nav open/close state — CSS-only,
   works without JavaScript. The <label> is the visible button. The checkbox
   itself is visually hidden but kept focusable for keyboard users. */
.nav-toggle {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}
.nav-toggle__label {
  display: none;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  color: var(--c-fg-soft);
  cursor: pointer;
  background: transparent;
}
.nav-toggle__label:hover { color: var(--c-accent); border-color: var(--c-accent); }
.nav-toggle:focus-visible + .nav-toggle__label {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}
.nav-toggle__label svg { display: block; width: 20px; height: 20px; }

/* ----- hero ----- */
.hero {
  padding: 5rem 0 4rem;
  background: linear-gradient(180deg, var(--c-bg-hero-top) 0%, var(--c-bg) 100%);
  border-bottom: 1px solid var(--c-rule);
}
.hero__eyebrow {
  margin: 0 0 0.6rem;
  font-size: 0.85rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-fg-mute);
  font-weight: 500;
}
.hero__title {
  margin: 0 0 1.2rem;
  font-size: clamp(2rem, 4vw + 0.4rem, 3.4rem);
  line-height: 1.15;
  font-weight: 700;
  letter-spacing: -0.02em;
}
.hero__sub {
  margin: 0 0 2rem;
  font-size: 1.18rem;
  color: var(--c-fg-soft);
  max-width: 640px;
}
.hero__cta { display: flex; flex-wrap: wrap; gap: 0.85rem; }

.btn {
  display: inline-flex; align-items: center; gap: 0.4rem;
  padding: 0.7rem 1.4rem;
  border-radius: var(--r-radius);
  font-weight: 600; font-size: 0.97rem;
  border: 1px solid transparent;
  transition: transform 80ms ease, background 120ms ease, color 120ms ease;
  min-height: var(--r-tap);
}
.btn:hover { text-decoration: none; transform: translateY(-1px); }
.btn--primary { background: var(--c-accent); color: var(--c-fg-invert); }
.btn--primary:hover { background: var(--c-accent-hover); color: var(--c-fg-invert); }
.btn--secondary { background: var(--c-bg); color: var(--c-fg); border-color: var(--c-border); }
.btn--secondary:hover { background: var(--c-bg-alt); color: var(--c-fg); }

/* ----- shared section title ----- */
.section-title {
  margin: 0 0 2.5rem;
  font-size: 1.6rem;
  font-weight: 700;
  letter-spacing: -0.01em;
  position: relative;
  padding-bottom: 0.75rem;
}
.section-title::after {
  content: "";
  position: absolute; left: 0; bottom: 0;
  width: 40px; height: 3px; border-radius: 2px;
  background: var(--c-accent);
}

/* ----- position pillars ----- */
.position { padding: 5rem 0; }
.position__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 2rem;
}
.position__pillar {
  padding: 1.75rem;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  background: var(--c-bg-elev);
  box-shadow: var(--c-shadow);
}
.position__num {
  margin: 0 0 0.5rem;
  font-family: var(--font-mono);
  font-size: 0.8rem;
  color: var(--c-fg-mute);
  letter-spacing: 0.08em;
}
.position__pillar h3 {
  margin: 0 0 0.8rem;
  font-size: 1.15rem;
  font-weight: 700;
}
.position__pillar p {
  margin: 0;
  color: var(--c-fg-soft);
  font-size: 0.97rem;
}

/* ----- features ----- */
.features { padding: 5rem 0; background: var(--c-bg-alt); border-top: 1px solid var(--c-rule); border-bottom: 1px solid var(--c-rule); }
.features__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1.5rem;
}
.feature-card {
  padding: 1.5rem;
  background: var(--c-bg-elev);
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  transition: transform 120ms ease, box-shadow 120ms ease;
}
.feature-card:hover { transform: translateY(-2px); box-shadow: var(--c-shadow-hover); }
.feature-card h3 { margin: 0 0 0.6rem; font-size: 1.05rem; font-weight: 700; }
.feature-card p { margin: 0; color: var(--c-fg-soft); font-size: 0.93rem; }
.feature-card code { background: var(--c-bg-alt); padding: 0.1em 0.35em; border-radius: 3px; font-size: 0.88em; color: var(--c-fg); }

/* ----- code sample ----- */
.code-sample { padding: 5rem 0; }
.code-sample__grid {
  display: grid;
  grid-template-columns: 1fr 1.4fr;
  gap: 3rem;
  align-items: start;
}
@media (max-width: 880px) {
  .code-sample__grid { grid-template-columns: 1fr; gap: 1.5rem; }
}
.code-sample__copy h3 { margin: 0 0 0.75rem; font-size: 1.15rem; font-weight: 700; }
.code-sample__copy p { color: var(--c-fg-soft); margin: 0 0 0.9rem; }
.code-sample__copy code { background: var(--c-bg-alt); padding: 0.12em 0.4em; border-radius: 3px; font-size: 0.88em; color: var(--c-fg); }
.code-sample__pre { display: flex; flex-direction: column; gap: 1rem; }
.code-sample__pre pre {
  margin: 0;
  background: var(--c-bg-code);
  color: var(--c-code-fg);
  padding: 1.1rem 1.2rem;
  border-radius: var(--r-radius);
  font-size: 0.85rem;
  line-height: 1.55;
  overflow-x: auto;
}
.code-sample__pre code { color: inherit; background: transparent; padding: 0; }

.tok-c  { color: var(--c-code-comment); }
.tok-kw { color: var(--c-code-kw); }
.tok-fn { color: var(--c-code-fn); }
.tok-s  { color: var(--c-code-str); }
.tok-pp { color: var(--c-code-pp); }

.link-arrow { font-weight: 600; }

/* ----- single & list pages ----- */
.page-article, .page-list { padding: 4rem 0; }
.page-article__header h1, .page-list__header h1 { margin: 0 0 1rem; font-size: 2rem; letter-spacing: -0.01em; }
.page-article__lede { color: var(--c-fg-soft); font-size: 1.1rem; margin: 0 0 2rem; }
.page-article__body h2 { margin-top: 2.2rem; padding-bottom: 0.4rem; border-bottom: 1px solid var(--c-rule); font-size: 1.25rem; line-height: 1.45; }
.page-article__body h3 { margin-top: 1.6rem; font-size: 1.05rem; line-height: 1.45; }
.page-article__body pre { background: var(--c-bg-code); color: var(--c-code-fg); padding: 0.7rem 1rem; border-radius: var(--r-radius); overflow-x: auto; font-size: 0.88rem; line-height: 1.55; border: 1px solid var(--c-rule); }
.page-article__body code { background: var(--c-bg-alt); padding: 0.1em 0.35em; border-radius: 3px; font-size: 0.9em; }
.page-list__items { list-style: none; padding: 0; }
.page-list__items li { padding: 0.6rem 0; border-bottom: 1px solid var(--c-rule); }

/* ----- list lede / source link / meta ----- */
.page-list__lede { color: var(--c-fg-soft); font-size: 1.1rem; margin: 0 0 1.5rem; }
.page-article__eyebrow {
  margin: 0 0 0.4rem;
  font-size: 0.85rem;
  letter-spacing: 0.04em;
  color: var(--c-fg-mute);
  text-transform: uppercase;
  font-weight: 500;
}
.page-article__eyebrow a { color: var(--c-fg-soft); }
.page-article__eyebrow a:hover { color: var(--c-accent); }
.page-article__date { margin-left: 0.6rem; color: var(--c-fg-mute); }
.page-article__meta { display: flex; align-items: center; gap: 0.7rem; margin: 0.3rem 0 1.2rem; }
.page-article__source {
  margin: 1rem 0 0;
  padding: 0.55rem 0.8rem;
  background: var(--c-bg-alt);
  border-left: 3px solid var(--c-accent-soft);
  border-radius: 4px;
  font-size: 0.88rem;
  color: var(--c-fg-soft);
}
.page-article__source code { background: transparent; padding: 0; font-size: 0.9em; }

/* ----- release notes list ----- */
.release-list { list-style: none; padding: 0; margin: 0; }
.release-list__item { border-bottom: 1px solid var(--c-rule); }
.release-list__link {
  display: grid;
  grid-template-columns: 140px 1fr;
  gap: 0.4rem 1.5rem;
  align-items: baseline;
  padding: 1rem 0;
  color: var(--c-fg);
}
.release-list__link:hover { text-decoration: none; background: var(--c-bg-alt); }
.release-list__date {
  font-family: var(--font-mono);
  color: var(--c-fg-mute);
  font-size: 0.92rem;
}
.release-list__title { font-weight: 600; color: var(--c-accent); }
.release-list__desc {
  grid-column: 2;
  color: var(--c-fg-soft);
  font-size: 0.93rem;
  margin-top: 0.2rem;
}
@media (max-width: 640px) {
  .release-list__link { grid-template-columns: 1fr; gap: 0.2rem; padding: 0.9rem 0; }
  .release-list__desc { grid-column: 1; }
}

/* ----- ADR list ----- */
.adr-list { list-style: none; padding: 0; margin: 0; }
.adr-list__item { border-bottom: 1px solid var(--c-rule); }
.adr-list__link {
  display: flex;
  align-items: center;
  gap: 0.8rem;
  padding: 0.9rem 0;
  color: var(--c-fg);
}
.adr-list__link:hover { text-decoration: none; background: var(--c-bg-alt); }
.adr-list__title { flex: 1; font-weight: 600; color: var(--c-accent); }
.adr-list__date {
  font-family: var(--font-mono);
  color: var(--c-fg-mute);
  font-size: 0.88rem;
}
.adr-badge {
  display: inline-block;
  padding: 0.12em 0.6em;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  border-radius: 4px;
  border: 1px solid transparent;
}
.adr-badge--accepted   { background: var(--c-adr-accepted-bg);   color: var(--c-adr-accepted-fg);   border-color: var(--c-adr-accepted-bd); }
.adr-badge--proposed   { background: var(--c-adr-proposed-bg);   color: var(--c-adr-proposed-fg);   border-color: var(--c-adr-proposed-bd); }
.adr-badge--rejected   { background: var(--c-adr-rejected-bg);   color: var(--c-adr-rejected-fg);   border-color: var(--c-adr-rejected-bd); }
.adr-badge--superseded { background: var(--c-adr-superseded-bg); color: var(--c-adr-superseded-fg); border-color: var(--c-adr-superseded-bd); }
.adr-badge--deprecated { background: var(--c-adr-deprecated-bg); color: var(--c-adr-deprecated-fg); border-color: var(--c-adr-deprecated-bd); }

/* ----- examples gallery (list + card) ----- */
.example-gallery { padding: 4rem 0 5rem; }
.example-gallery__header { margin-bottom: 2.5rem; }
.example-gallery__header h1 { margin: 0 0 0.6rem; font-size: 2.1rem; letter-spacing: -0.01em; }
.example-gallery__lede { color: var(--c-fg-soft); font-size: 1.08rem; margin: 0 0 1rem; max-width: 720px; }
.example-gallery__intro { color: var(--c-fg-soft); max-width: 720px; }
.example-gallery__intro p { margin: 0 0 0.8rem; }

.example-grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 1.4rem;
}
.example-card {
  background: var(--c-bg-elev);
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  overflow: hidden;
  transition: transform 120ms ease, box-shadow 120ms ease, border-color 120ms ease;
}
.example-card:hover { transform: translateY(-2px); box-shadow: var(--c-shadow-card); border-color: var(--c-accent-soft); }
.example-card__link { display: block; color: inherit; }
.example-card__link:hover { text-decoration: none; }
.example-card__media {
  position: relative;
  aspect-ratio: 16 / 9;
  background: var(--c-bg-alt);
  border-bottom: 1px solid var(--c-rule);
}
.example-card__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.example-card__badge {
  position: absolute;
  top: 0.6rem;
  right: 0.6rem;
  padding: 0.15rem 0.55rem;
  font-family: var(--font-mono);
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  border-radius: 999px;
  background: var(--c-badge-overlay);
  color: var(--c-fg-invert);
}
.example-card__badge--cef { background: var(--c-badge-cef); }
.example-card__badge--headless { background: var(--c-badge-headless); }
.example-card__body { padding: 1rem 1.1rem 1.2rem; }
.example-card__title { margin: 0 0 0.4rem; font-size: 1.02rem; font-weight: 700; color: var(--c-fg); }
.example-card__desc { margin: 0; font-size: 0.9rem; color: var(--c-fg-soft); line-height: 1.5; }

/* ----- example detail page ----- */
.example-detail { padding: 3.5rem 0 4.5rem; max-width: 880px; }
.example-detail__eyebrow {
  margin: 0 0 0.8rem;
  font-size: 0.85rem;
  color: var(--c-fg-mute);
  letter-spacing: 0.04em;
}
.example-detail__eyebrow a { color: var(--c-fg-soft); }
.example-detail__eyebrow a:hover { color: var(--c-accent); }
.example-detail__kind {
  display: inline-block;
  margin-left: 0.6rem;
  padding: 0.1rem 0.5rem;
  font-family: var(--font-mono);
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  border-radius: 999px;
  background: var(--c-bg-alt);
  color: var(--c-fg-soft);
  border: 1px solid var(--c-border);
}
.example-detail__kind--cef { background: var(--c-accent-soft); color: var(--c-accent-on-soft); border-color: transparent; }
.example-detail__kind--headless { background: var(--c-badge-headless-soft); color: var(--c-badge-headless-on); }
.example-detail__header h1 { margin: 0 0 0.8rem; font-size: 2rem; letter-spacing: -0.01em; }
.example-detail__lede { color: var(--c-fg-soft); font-size: 1.1rem; margin: 0 0 2rem; }
.example-detail__shot {
  margin: 0 0 2rem;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  overflow: hidden;
  background: var(--c-bg-alt);
}
.example-detail__shot img { display: block; width: 100%; height: auto; }
.example-detail__apis {
  margin: 0 0 2rem;
  padding: 1rem 1.2rem;
  background: var(--c-bg-alt);
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
}
.example-detail__apis h2 { margin: 0 0 0.6rem; font-size: 0.95rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--c-fg-soft); border: none; padding: 0; }
.example-detail__apis ul { margin: 0; padding-left: 1.1rem; }
.example-detail__apis li { font-size: 0.92rem; line-height: 1.6; }
.example-detail__apis code { background: var(--c-bg); padding: 0.08em 0.35em; border-radius: 3px; font-size: 0.86em; border: 1px solid var(--c-rule); }
.example-detail__body h2 { margin-top: 2.2rem; padding-bottom: 0.4rem; border-bottom: 1px solid var(--c-rule); font-size: 1.25rem; }
.example-detail__body h3 { margin-top: 1.6rem; font-size: 1.05rem; }
.example-detail__body pre { background: var(--c-bg-code); color: var(--c-code-fg); padding: 0.7rem 1rem; border-radius: var(--r-radius); overflow-x: auto; font-size: 0.88rem; line-height: 1.55; border: 1px solid var(--c-rule); }
.example-detail__body code { background: var(--c-bg-alt); padding: 0.1em 0.35em; border-radius: 3px; font-size: 0.9em; }
.example-detail__body pre code { background: transparent; padding: 0; }
.example-detail__source { margin-top: 2rem; font-size: 0.98rem; }

/* ----- example detail: category + prev/next nav ----- */
.example-detail__sep { margin: 0 0.35rem; color: var(--c-fg-mute); }
.example-detail__cat {
  display: inline-block;
  padding: 0.1rem 0.55rem;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.03em;
  border-radius: 999px;
  background: var(--c-bg-alt);
  color: var(--c-fg-soft);
  border: 1px solid var(--c-border);
  text-decoration: none;
}
.example-detail__cat:hover { text-decoration: none; opacity: 0.85; }
.example-detail__cat--dev-basics       { background: #4f6e8c; color: #ffffff; border-color: #4f6e8c; }
.example-detail__cat--2d               { background: #6d4f8c; color: #ffffff; border-color: #6d4f8c; }
.example-detail__cat--ui               { background: #2f7a73; color: #ffffff; border-color: #2f7a73; }
.example-detail__cat--games            { background: #b8542a; color: #ffffff; border-color: #b8542a; }
.example-detail__cat--bridge           { background: #8a4d2a; color: #ffffff; border-color: #8a4d2a; }
.example-detail__cat--scripted-scene   { background: #5a3e8c; color: #ffffff; border-color: #5a3e8c; }
.example-detail__cat--architecture     { background: #3d5a73; color: #ffffff; border-color: #3d5a73; }

.example-detail__nav {
  margin-top: 3rem;
  padding-top: 1.6rem;
  border-top: 1px solid var(--c-rule);
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 1.2rem;
  align-items: center;
}
.example-detail__nav-prev a,
.example-detail__nav-next a {
  display: inline-flex;
  flex-direction: column;
  gap: 0.15rem;
  padding: 0.6rem 0.9rem;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  background: var(--c-bg-elev);
  text-decoration: none;
  color: var(--c-fg);
  transition: border-color 120ms ease, background 120ms ease;
  max-width: 100%;
}
.example-detail__nav-prev a:hover,
.example-detail__nav-next a:hover {
  border-color: var(--c-accent-soft);
  background: var(--c-bg);
  text-decoration: none;
}
.example-detail__nav-prev { justify-self: start; }
.example-detail__nav-next { justify-self: end; text-align: right; }
.example-detail__nav-next a { align-items: flex-end; }
.example-detail__nav-label {
  font-size: 0.75rem;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--c-fg-mute);
}
.example-detail__nav-title { font-weight: 600; }
.example-detail__nav-arrow { font-size: 0.85rem; color: var(--c-fg-mute); }
.example-detail__nav-cat a {
  font-size: 0.85rem;
  color: var(--c-fg-soft);
  text-decoration: none;
  border-bottom: 1px dashed var(--c-rule);
  padding-bottom: 1px;
}
.example-detail__nav-cat a:hover { color: var(--c-accent); border-color: var(--c-accent-soft); text-decoration: none; }

@media (max-width: 640px) {
  .example-detail__nav { grid-template-columns: 1fr; gap: 0.8rem; }
  .example-detail__nav-next { justify-self: stretch; text-align: left; }
  .example-detail__nav-next a { align-items: flex-start; }
  .example-detail__nav-cat { order: 3; text-align: center; }
}

/* ----- guides list ----- */
.guides-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1rem;
}
.guides-list__link {
  display: block;
  padding: 1.1rem 1.2rem;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  background: var(--c-bg-elev);
  color: var(--c-fg);
  transition: transform 120ms ease, box-shadow 120ms ease, border-color 120ms ease;
}
.guides-list__link:hover {
  text-decoration: none;
  transform: translateY(-1px);
  box-shadow: var(--c-shadow-soft);
  border-color: var(--c-accent-soft);
}
.guides-list__title { display: block; font-weight: 700; color: var(--c-accent); margin-bottom: 0.35rem; }
.guides-list__desc { display: block; color: var(--c-fg-soft); font-size: 0.93rem; line-height: 1.5; }

/* ----- footer ----- */
.site-footer {
  background: var(--c-footer-bg);
  color: var(--c-footer-fg);
  padding: 3.5rem 0 3rem;
  margin-top: 4rem;
}
.site-footer a { color: var(--c-footer-link); }
.site-footer__inner {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 2rem;
}
.site-footer__brand { margin: 0 0 0.4rem; font-weight: 700; color: var(--c-footer-fg-strong); }
.site-footer__copy { margin: 0; font-size: 0.88rem; color: var(--c-footer-fg-mute); }
.site-footer__h { margin: 0 0 0.7rem; font-size: 0.9rem; font-weight: 600; color: var(--c-footer-fg-strong); }
.site-footer p { margin: 0 0 0.4rem; font-size: 0.92rem; }

/* ============================================================
   API reference pages (generated from docs/API_CATALOG.md)
   ============================================================ */

.api-page { padding: 3.5rem 0 4rem; }
.api-page--list { max-width: 960px; }
.api-page--single { max-width: 1100px; }

.api-page__eyebrow {
  margin: 0 0 0.5rem;
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-fg-mute);
}
.api-page__eyebrow a { color: var(--c-fg-mute); }
.api-page__eyebrow a:hover { color: var(--c-accent); }

.api-page__header h1 {
  margin: 0 0 0.6rem;
  font-size: clamp(1.6rem, 2.4vw + 0.6rem, 2.3rem);
  letter-spacing: -0.01em;
}
.api-page__title-code {
  font-family: var(--font-mono);
  font-size: inherit;
  background: var(--c-bg-alt);
  padding: 0.15em 0.5em;
  border-radius: var(--r-radius);
  border: 1px solid var(--c-border);
}
.api-page__lede {
  margin: 0 0 2rem;
  color: var(--c-fg-soft);
  font-size: 1.05rem;
  max-width: 760px;
}
.api-page__back { margin-top: 2.5rem; font-size: 0.95rem; }

.api-index__lede {
  margin: 0 0 1.5rem;
  color: var(--c-fg-soft);
  font-size: 0.98rem;
}
.api-index__lede code {
  background: var(--c-bg-alt);
  padding: 0.1em 0.35em;
  border-radius: 3px;
  font-size: 0.9em;
}

/* Search box (used on the index and inline on big pages). */
.api-search {
  margin: 0 0 1.5rem;
  padding: 1rem 1.1rem;
  background: var(--c-bg-alt);
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
}
.api-search--inline { margin-top: 0.5rem; padding: 0.8rem 1rem; }
.api-search input[type="search"] {
  width: 100%;
  padding: 0.6rem 0.9rem;
  font: inherit;
  font-size: 1rem;
  border: 1px solid var(--c-border);
  border-radius: 6px;
  background: var(--c-bg);
  color: var(--c-fg);
  min-height: var(--r-tap);
  -webkit-appearance: none;
  appearance: none;
}
.api-search input[type="search"]:focus {
  outline: none;
  border-color: var(--c-accent);
  box-shadow: 0 0 0 3px var(--c-accent-soft);
}
.api-search__hint {
  margin: 0.55rem 0 0;
  font-size: 0.82rem;
  color: var(--c-fg-mute);
}
.api-search__empty {
  margin: 1rem 0;
  padding: 0.75rem 1rem;
  background: var(--c-bg-alt);
  border-left: 3px solid var(--c-accent);
  color: var(--c-fg-soft);
  font-size: 0.92rem;
}

/* Namespace index list. */
.api-namespace-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 0.6rem;
}
.api-namespace-list__item {
  padding: 0.85rem 1rem;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  background: var(--c-bg-elev);
  transition: border-color 100ms ease, box-shadow 100ms ease;
}
.api-namespace-list__item:hover {
  border-color: var(--c-accent);
  box-shadow: var(--c-shadow);
}
.api-namespace-list__link {
  display: block;
  font-family: var(--font-mono);
  font-weight: 600;
  color: var(--c-fg);
  font-size: 0.97rem;
  word-break: break-word;
}
.api-namespace-list__link:hover { color: var(--c-accent); text-decoration: none; }
.api-namespace-list__link code {
  background: transparent;
  padding: 0;
  font-size: inherit;
}
.api-namespace-list__meta {
  display: block;
  margin-top: 0.25rem;
  font-size: 0.82rem;
  color: var(--c-fg-mute);
}

/* Per-namespace page. */
.api-namespace__lede {
  margin: 0 0 1.5rem;
  color: var(--c-fg-soft);
  font-size: 1rem;
}

.api-class-index {
  width: 100%;
  border-collapse: collapse;
  margin: 0 0 2.2rem;
  font-size: 0.92rem;
}
.api-class-index thead th {
  text-align: left;
  padding: 0.55rem 0.7rem;
  border-bottom: 2px solid var(--c-border);
  font-weight: 600;
  color: var(--c-fg-soft);
  font-size: 0.85rem;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}
.api-class-index td {
  padding: 0.4rem 0.7rem;
  border-bottom: 1px solid var(--c-rule);
  vertical-align: top;
}
.api-class-index tr:hover td { background: var(--c-bg-alt); }
.api-class-index td:first-child {
  width: 60%;
  font-family: var(--font-mono);
}
.api-class-index td:nth-child(2) {
  color: var(--c-fg-mute);
  font-size: 0.86rem;
}
.api-class-index td:nth-child(3) {
  color: var(--c-fg-mute);
  font-size: 0.86rem;
  width: 5rem;
}

/* Per-class collapsible block. */
.api-class {
  margin: 0 0 0.9rem;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  background: var(--c-bg-elev);
  overflow: hidden;
}
.api-class[open] {
  box-shadow: var(--c-shadow);
}
.api-class--free {
  padding: 1rem 1.2rem;
  background: var(--c-bg-alt);
}
.api-class__summary {
  list-style: none;
  cursor: pointer;
  padding: 0.7rem 1rem;
  display: flex;
  align-items: center;
  gap: 0.6rem;
  background: var(--c-bg-alt);
  border-bottom: 1px solid transparent;
  user-select: none;
  min-height: var(--r-tap);
}
.api-class__summary::-webkit-details-marker { display: none; }
.api-class__summary::marker { content: ''; }
.api-class__summary::before {
  content: '\25B6';  /* black right-pointing triangle */
  color: var(--c-fg-mute);
  font-size: 0.7rem;
  transition: transform 100ms ease;
}
.api-class[open] > .api-class__summary::before {
  transform: rotate(90deg);
}
.api-class[open] > .api-class__summary {
  border-bottom-color: var(--c-rule);
}
.api-class__kind {
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--c-fg-mute);
  font-weight: 600;
}
.api-class__name {
  font-family: var(--font-mono);
  font-size: 0.98rem;
  background: transparent;
  padding: 0;
  color: var(--c-fg);
}
.api-class__extra {
  font-family: var(--font-mono);
  font-size: 0.85rem;
  color: var(--c-fg-mute);
}
.api-class__count {
  margin-left: auto;
  font-size: 0.78rem;
  color: var(--c-fg-mute);
  background: var(--c-bg);
  padding: 0.1rem 0.5rem;
  border-radius: 999px;
  border: 1px solid var(--c-border);
}
.api-class__body {
  padding: 0.4rem 0.4rem 0.6rem;
}
.api-class__empty {
  margin: 0.5rem 0.8rem;
  color: var(--c-fg-mute);
  font-style: italic;
  font-size: 0.9rem;
}

.api-method {
  padding: 0.32rem 0.8rem;
  border-bottom: 1px solid var(--c-rule);
}
.api-method:last-child { border-bottom: none; }
.api-method code {
  background: transparent;
  padding: 0;
  font-family: var(--font-mono);
  font-size: 0.84rem;
  color: var(--c-fg);
  white-space: pre-wrap;
  word-break: break-word;
}

.api-source-note {
  margin: 2.5rem 0 0;
  font-size: 0.85rem;
  color: var(--c-fg-mute);
}

/* ============================================================
   Responsive breakpoints
   ============================================================ */

/* tablet / small laptop: nav + grid still fit, no hamburger yet */
@media (max-width: 1024px) {
  .features__grid { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
  .position__grid { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
}

/* mobile: stack nav into hamburger, single-column grids
   Breakpoint is 960px because the JA nav has 7 multi-char labels
   plus search/GitHub/?/theme buttons — below that the nav crowds the
   brand and chars start wrapping vertically. */
@media (max-width: 960px) {
  :root {
    --r-pad: 1rem;
  }

  .site-header__inner {
    height: 56px;
    gap: 0.4rem;
  }

  /* hamburger button visible */
  .nav-toggle__label {
    display: inline-flex;
    order: 3;
  }

  /* nav collapses behind hamburger */
  .site-nav {
    order: 4;
    position: absolute;
    top: 56px;
    left: 0;
    right: 0;
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    padding: 0.5rem var(--r-pad) 1rem;
    background: var(--c-bg);
    border-bottom: 1px solid var(--c-rule);
    box-shadow: var(--c-shadow);
    max-height: 0;
    overflow: hidden;
    transition: max-height 200ms ease, padding 200ms ease;
    visibility: hidden;
  }
  .site-nav a {
    display: block;
    padding: 0.85rem 0.3rem;
    border-bottom: 1px solid var(--c-rule);
    min-height: var(--r-tap);
    font-size: 1rem;
  }
  .site-nav a:last-child { border-bottom: none; }
  .site-nav__github { padding: 0.85rem 0.3rem; }
  .site-nav__lang { padding: 0.85rem 0.3rem; }

  .nav-toggle:checked ~ .site-nav,
  body.is-nav-open .site-nav {
    max-height: 80vh;
    visibility: visible;
    overflow-y: auto;
  }

  /* hero scales down */
  .hero { padding: 3rem 0 2.5rem; }
  .hero__title { font-size: clamp(1.6rem, 7vw, 2.4rem); }
  .hero__sub { font-size: 1.02rem; }
  .hero__cta .btn { flex: 1 1 auto; justify-content: center; }

  /* section spacing */
  .position { padding: 3rem 0; }
  .features { padding: 3rem 0; }
  .code-sample { padding: 3rem 0; }
  .section-title { margin-bottom: 1.5rem; font-size: 1.35rem; }

  /* one-column grids on phones */
  .position__grid { grid-template-columns: 1fr; gap: 1rem; }
  .features__grid { grid-template-columns: 1fr; gap: 1rem; }
  .example-grid { grid-template-columns: 1fr; }
  .guides-list { grid-template-columns: 1fr; }
  .api-namespace-list { grid-template-columns: 1fr; }

  /* API class index becomes scrollable */
  .api-class-index { display: block; overflow-x: auto; white-space: nowrap; }
  .api-class-index td:first-child { width: auto; }

  /* page padding */
  .page-article, .page-list, .api-page, .example-gallery, .example-detail {
    padding-top: 2.5rem;
    padding-bottom: 3rem;
  }
  .page-article__header h1,
  .page-list__header h1,
  .example-gallery__header h1,
  .example-detail__header h1 { font-size: 1.55rem; }

  /* code blocks: never wrap, always horizontal scroll */
  pre {
    overflow-x: auto;
    word-wrap: normal;
    white-space: pre;
  }
}

/* very small phones (360px-ish): tighter padding, smaller hero */
@media (max-width: 480px) {
  :root {
    --r-pad: 0.85rem;
  }
  .site-header__brand-name { font-size: 0.97rem; }
  .hero { padding: 2.5rem 0 2rem; }
  .hero__title { font-size: 1.65rem; }
  .hero__sub { font-size: 0.97rem; }
  .feature-card, .position__pillar, .guides-list__link { padding: 1.1rem; }
  .api-search { padding: 0.7rem 0.8rem; }
  .api-class__summary { padding: 0.55rem 0.6rem; gap: 0.35rem; }
  .api-method { padding: 0.3rem 0.5rem; }
  .api-method code { font-size: 0.78rem; }
}

/* original 640px tweaks kept for backwards compat */
@media (max-width: 640px) {
  .api-class-index td:first-child { width: 55%; }
}

/* ----- respect reduced motion ----- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    transition: none !important;
    animation: none !important;
    scroll-behavior: auto !important;
  }
}

/* ============================================================
   showcase — image-driven gallery of in-tree examples.
   Sits between hero/position and features. Placeholder images
   are swapped in by the capture pipeline.
   ============================================================ */
.showcase {
  padding: 5rem 0;
  background: var(--c-bg-alt);
  border-top: 1px solid var(--c-rule);
  border-bottom: 1px solid var(--c-rule);
}
.showcase__lede {
  margin: -1.5rem 0 2rem;
  color: var(--c-fg-soft);
  font-size: 0.97rem;
  max-width: 56ch;
}
.showcase-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1.5rem;
}
.showcase-card {
  display: flex;
  flex-direction: column;
  background: var(--c-bg-elev);
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  box-shadow: var(--c-shadow);
  transition: transform 140ms ease, box-shadow 140ms ease, border-color 140ms ease;
}
.showcase-card:hover,
.showcase-card:focus-visible {
  transform: translateY(-3px);
  box-shadow: var(--c-shadow-card);
  border-color: var(--c-accent-soft);
}
.showcase-card:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}
.showcase-card__media {
  position: relative;
  aspect-ratio: 16 / 9;
  background: var(--c-bg-alt);
  overflow: hidden;
}
.showcase-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
}
.showcase-card__body {
  padding: 1rem 1.1rem 1.15rem;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  flex: 1 1 auto;
}
.showcase-card__title {
  margin: 0;
  font-family: var(--font-mono);
  font-size: 0.92rem;
  font-weight: 700;
  letter-spacing: -0.005em;
  color: var(--c-fg);
}
.showcase-caption {
  margin: 0;
  color: var(--c-fg-soft);
  font-size: 0.9rem;
  line-height: 1.45;
}

/* Tablet: 2 columns */
@media (max-width: 1024px) {
  .showcase-grid { grid-template-columns: repeat(2, 1fr); }
}

/* Phone: 1 column */
@media (max-width: 720px) {
  .showcase { padding: 3rem 0; }
  .showcase-grid { grid-template-columns: 1fr; gap: 1.25rem; }
  .showcase__lede { margin-top: -1rem; }
}

/* ============================================================
   Site search - Pagefind trigger + modal
   The trigger sits inside .site-nav alongside the GitHub link
   and theme toggle. The modal is mounted lazily.
   ============================================================ */
.search-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  padding: 0;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  background: transparent;
  color: var(--c-fg-soft);
  cursor: pointer;
  transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
}
.search-trigger:hover {
  color: var(--c-accent);
  border-color: var(--c-accent);
}
.search-trigger:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}
.search-trigger svg {
  display: block;
  width: 18px;
  height: 18px;
}

body.search-open {
  overflow: hidden;
}

.search-dialog {
  position: fixed;
  inset: 0;
  z-index: 100;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 4rem 1rem 1rem;
  opacity: 0;
  pointer-events: none;
  transition: opacity 180ms ease;
}
.search-dialog[hidden] {
  display: none;
}
.search-dialog.is-open {
  opacity: 1;
  pointer-events: auto;
}
.search-dialog__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(15, 22, 35, 0.45);
  backdrop-filter: blur(4px);
}
:root[data-theme="dark"] .search-dialog__backdrop {
  background: rgba(0, 0, 0, 0.65);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .search-dialog__backdrop {
    background: rgba(0, 0, 0, 0.65);
  }
}
.search-dialog__panel {
  position: relative;
  z-index: 1;
  width: min(720px, 100%);
  max-height: calc(100vh - 5rem);
  display: flex;
  flex-direction: column;
  background: var(--c-bg-elev);
  border: 1px solid var(--c-border);
  border-radius: calc(var(--r-radius) + 2px);
  overflow: hidden;
  box-shadow: var(--c-shadow-card);
  transform: translateY(-8px);
  transition: transform 180ms ease;
}
.search-dialog.is-open .search-dialog__panel {
  transform: translateY(0);
}
.search-dialog__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.85rem 1rem;
  border-bottom: 1px solid var(--c-rule);
}
.search-dialog__title {
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--c-fg-soft);
  margin: 0;
}
.search-dialog__close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  background: transparent;
  color: var(--c-fg-soft);
  cursor: pointer;
}
.search-dialog__close:hover {
  color: var(--c-accent);
  border-color: var(--c-accent);
}
.search-dialog__close:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}
.search-dialog__close svg { width: 16px; height: 16px; }
.search-dialog__body {
  flex: 1 1 auto;
  overflow-y: auto;
  padding: 0.75rem 1rem 1rem;
}

/* ----- Pagefind UI overrides — match theme tokens -----
   Pagefind UI exposes documented CSS custom properties.
   See https://pagefind.app/docs/ui-usage/ for the full list.
   We avoid restyling Pagefind's internals beyond these tokens. */
.search-dialog {
  --pagefind-ui-scale:                0.95;
  --pagefind-ui-primary:              var(--c-accent);
  --pagefind-ui-text:                 var(--c-fg);
  --pagefind-ui-background:           var(--c-bg-elev);
  --pagefind-ui-border:               var(--c-border);
  --pagefind-ui-tag:                  var(--c-bg-alt);
  --pagefind-ui-border-width:         1px;
  --pagefind-ui-border-radius:        var(--r-radius);
  --pagefind-ui-image-border-radius:  var(--r-radius);
  --pagefind-ui-image-box-ratio:      3 / 2;
  --pagefind-ui-font:                 var(--font-sans);
}

.search-dialog .pagefind-ui__search-input {
  background: var(--c-bg);
  color: var(--c-fg);
}
.search-dialog .pagefind-ui__search-input::placeholder {
  color: var(--c-fg-mute);
}
.search-dialog .pagefind-ui__result-title a {
  color: var(--c-fg);
}
.search-dialog .pagefind-ui__result-title a:hover {
  color: var(--c-accent);
}
.search-dialog .pagefind-ui__result-excerpt {
  color: var(--c-fg-soft);
}
.search-dialog .pagefind-ui__result mark {
  background: var(--c-accent-soft);
  color: var(--c-accent-on-soft);
  padding: 0 0.15em;
  border-radius: 2px;
}
.search-dialog .pagefind-ui__message {
  color: var(--c-fg-soft);
}

/* Narrow viewports: full-bleed search modal. */
@media (max-width: 600px) {
  .search-dialog {
    padding: 0;
  }
  .search-dialog__panel {
    width: 100%;
    max-height: 100vh;
    height: 100vh;
    border-radius: 0;
    border-left: 0;
    border-right: 0;
  }
}

/* ============================================================
   Examples gallery (list page) - /examples/ grid of all 13 cards
   ============================================================ */
.example-gallery {
  padding: 3rem 0 5rem;
}
.example-gallery__header {
  margin-bottom: 2rem;
}
.example-gallery__intro {
  color: var(--c-fg-soft);
  max-width: 70ch;
}
/* ----- examples filter (category pills) ----- */
.example-filter {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin: 0 0 1.6rem;
  padding-bottom: 1rem;
  border-bottom: 1px solid var(--c-rule);
}
.example-filter__chip {
  appearance: none;
  font: inherit;
  font-size: 0.85rem;
  padding: 0.35rem 0.85rem;
  border-radius: 999px;
  background: var(--c-bg-elev);
  color: var(--c-fg-soft);
  border: 1px solid var(--c-border);
  cursor: pointer;
  transition: background 120ms ease, border-color 120ms ease, color 120ms ease;
}
.example-filter__chip:hover {
  border-color: var(--c-accent-soft);
  color: var(--c-fg);
}
.example-filter__chip.is-active {
  background: var(--c-accent);
  color: var(--c-fg-invert);
  border-color: var(--c-accent);
}
.example-filter__chip:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}

/* ----- examples grid (Siv3D-style: big screenshot + 1-line title + 1 category pill) ----- */
.examples-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.4rem;
}
.example-card {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--c-bg-elev);
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  box-shadow: var(--c-shadow);
  transition: transform 160ms ease, box-shadow 160ms ease, border-color 160ms ease;
}
.example-card:hover,
.example-card:focus-visible {
  transform: translateY(-2px);
  box-shadow: var(--c-shadow-card);
  border-color: var(--c-accent-soft);
}
.example-card:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}
.example-card[hidden] { display: none; }

.example-card__media {
  position: relative;
  aspect-ratio: 16 / 9;
  background: var(--c-bg-alt);
  overflow: hidden;
}
.example-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
  transition: transform 200ms ease;
}
.example-card:hover .example-card__media img,
.example-card:focus-visible .example-card__media img {
  transform: scale(1.03);
}

.example-card__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.6rem;
  padding: 0.7rem 0.95rem 0.85rem;
}
.example-card__title {
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--c-fg);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex: 1 1 auto;
  min-width: 0;
}
.example-card__cat {
  flex: 0 0 auto;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.03em;
  padding: 0.2rem 0.6rem;
  border-radius: 999px;
  background: var(--c-bg-alt);
  color: var(--c-fg-soft);
  border: 1px solid var(--c-border);
}

/* Category-specific pill colors (kept low-saturation to match the theme). */
.example-card__cat--dev-basics,
.example-filter__chip--dev-basics.is-active        { background: #4f6e8c; color: #ffffff; border-color: #4f6e8c; }
.example-card__cat--2d,
.example-filter__chip--2d.is-active                { background: #6d4f8c; color: #ffffff; border-color: #6d4f8c; }
.example-card__cat--ui,
.example-filter__chip--ui.is-active                { background: #2f7a73; color: #ffffff; border-color: #2f7a73; }
.example-card__cat--games,
.example-filter__chip--games.is-active             { background: #b8542a; color: #ffffff; border-color: #b8542a; }
.example-card__cat--bridge,
.example-filter__chip--bridge.is-active            { background: #8a4d2a; color: #ffffff; border-color: #8a4d2a; }
.example-card__cat--scripted-scene,
.example-filter__chip--scripted-scene.is-active    { background: #5a3e8c; color: #ffffff; border-color: #5a3e8c; }
.example-card__cat--architecture,
.example-filter__chip--architecture.is-active      { background: #3d5a73; color: #ffffff; border-color: #3d5a73; }

@media (max-width: 1024px) {
  .examples-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .example-gallery { padding: 2rem 0 3.5rem; }
  .examples-grid { grid-template-columns: 1fr; gap: 1rem; }
  .example-filter { gap: 0.4rem; }
  .example-filter__chip { font-size: 0.8rem; padding: 0.3rem 0.7rem; }
}

/* ============= Hero image (landing page) ============= */
.hero-image {
  max-width: 1100px;
  margin: 0 auto;
  padding: 1rem 0 0;
  position: relative;
}
.hero-image__link {
  display: block;
  text-decoration: none;
  border-radius: calc(var(--r-radius) + 2px);
  overflow: hidden;
  transition: transform 0.18s ease, box-shadow 0.18s ease, border 0.18s ease;
  border: 1px solid transparent;
}
.hero-image__link:hover,
.hero-image__link:focus-visible {
  transform: translateY(-2px);
  box-shadow: var(--c-shadow-card);
  border: 1px solid var(--c-accent-soft);
}
.hero-image__link img {
  width: 100%;
  height: auto;
  display: block;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border-radius: inherit;
}
.hero-image__caption {
  margin: 0.6rem auto 0;
  max-width: 60ch;
  text-align: center;
  color: var(--c-fg-soft);
  font-size: 0.88rem;
}
@media (max-width: 720px) {
  .hero-image { padding: 0.5rem 0 0; }
}

/* ============= API page layout ============= */
.api-page {
  display: grid;
  grid-template-columns: 220px minmax(0, 1fr) 200px;
  gap: 2rem;
  padding: 2rem 0 4rem;
}

/* The list (index) page has no sidebar/TOC — collapse to a single full-width
   column so the namespace grid (auto-fit minmax 260px) can actually use the
   page width. */
.api-page--list {
  display: block;
  max-width: 1100px;
  margin: 0 auto;
}

.api-sidebar,
.api-toc {
  position: sticky;
  top: 5rem;
  max-height: calc(100vh - 6rem);
  overflow-y: auto;
}

.api-sidebar nav ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.api-sidebar a {
  display: block;
  padding: 0.35rem 0.6rem;
  font-family: var(--font-mono);
  font-size: 0.82rem;
  color: var(--c-fg-soft);
  text-decoration: none;
  border-radius: calc(var(--r-radius) - 2px);
}

.api-sidebar a:hover,
.api-sidebar a:focus {
  color: var(--c-accent);
}

.api-sidebar a.is-active {
  background: var(--c-accent-soft);
  color: var(--c-accent);
  font-weight: 600;
  border-radius: calc(var(--r-radius) - 2px);
}

.api-sidebar__collapsible summary {
  cursor: pointer;
  font-weight: 600;
  font-size: 0.85rem;
  color: var(--c-fg);
  padding: 0.3rem 0.6rem;
  list-style: none;
}

.api-sidebar__collapsible summary::-webkit-details-marker {
  display: none;
}

.api-toc__title {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--c-fg-soft);
  padding: 0.3rem 0.6rem;
  margin: 0 0 0.4rem;
}

.api-toc a {
  display: block;
  padding: 0.3rem 0.6rem;
  font-size: 0.82rem;
  color: var(--c-fg-soft);
  text-decoration: none;
  border-radius: calc(var(--r-radius) - 2px);
}

.api-toc a:hover,
.api-toc a:focus {
  color: var(--c-accent);
}

.api-toc nav > ul,
.api-toc #TableOfContents > ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

@media (max-width: 1024px) {
  .api-page {
    grid-template-columns: 1fr;
  }

  .api-toc {
    display: none;
  }

  .api-sidebar {
    position: static;
    max-height: none;
    overflow-y: visible;
  }
}

@media (max-width: 720px) {
  .api-sidebar__collapsible:not([open]) summary::after {
    content: " \25BC";
    font-size: 0.7rem;
  }

  .api-sidebar__collapsible[open] summary::after {
    content: " \25B2";
    font-size: 0.7rem;
  }
}

/* ============= ADR page layout (reuses API sidebar styles, no TOC) ============= */
.adr-page {
  grid-template-columns: 220px minmax(0, 1fr);
}

.adr-sidebar__status {
  margin-left: 0.4rem;
  font-size: 0.65rem;
  vertical-align: middle;
}

.adr-page__date {
  margin: 0.25rem 0 1rem;
  color: var(--c-fg-soft);
  font-size: 0.88rem;
}

@media (max-width: 1024px) {
  .adr-page {
    grid-template-columns: 1fr;
  }
}

/* ============================================================
   Round 34 — home redesign: big hero + polished cards
   ============================================================ */

/* ── 巨大ヒーロー ─────────────────────────────────── */
.home-hero {
  position: relative;
  overflow: hidden;
  padding: clamp(3.5rem, 8vw, 5.5rem) 0 clamp(3rem, 7vw, 4.5rem);
  text-align: center;
  color: var(--c-fg);
  isolation: isolate;
}

.home-hero__bg {
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(ellipse at 50% 0%, rgba(37, 99, 235, 0.08), transparent 60%),
    linear-gradient(180deg, var(--c-bg-hero-top) 0%, var(--c-bg) 100%);
  border-bottom: 1px solid var(--c-rule);
}

[data-theme="dark"] .home-hero__bg {
  background:
    radial-gradient(ellipse at 50% 0%, rgba(96, 165, 250, 0.10), transparent 60%),
    linear-gradient(180deg, var(--c-bg-hero-top) 0%, var(--c-bg) 100%);
  border-bottom: 1px solid var(--c-rule);
}

.home-hero__inner {
  position: relative;
}

.home-hero__title {
  margin: 0 auto;
  font-size: clamp(2.6rem, 8vw, 5.5rem);
  font-weight: 800;
  letter-spacing: -0.035em;
  line-height: 1.05;
  color: var(--c-fg);
}

[data-theme="dark"] .home-hero__title {
  color: var(--c-fg);
}

.home-hero__sub {
  margin: 1.4rem auto 2.4rem;
  max-width: 640px;
  font-size: clamp(1rem, 1.5vw, 1.2rem);
  line-height: 1.7;
  color: var(--c-fg-soft);
}

.home-hero__cta {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 0.9rem;
}

/* ── 大きめボタン + ゴーストボタン ─────────────────── */
.btn--lg {
  padding: 0.85rem 1.6rem;
  font-size: 1rem;
  border-radius: 10px;
  box-shadow: var(--c-shadow);
}
.btn--lg.btn--primary {
  box-shadow: 0 2px 6px rgba(37, 99, 235, 0.18);
}
.btn--lg.btn--primary:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 14px rgba(37, 99, 235, 0.24);
}
.btn--ghost {
  background: transparent;
  color: var(--c-fg);
  border-color: transparent;
  text-decoration: underline;
  text-underline-offset: 4px;
  text-decoration-color: rgba(0, 0, 0, 0.18);
}
.btn--ghost:hover {
  text-decoration-color: var(--c-fg);
  background: rgba(0, 0, 0, 0.04);
}
[data-theme="dark"] .btn--ghost {
  color: var(--c-fg);
  text-decoration-color: rgba(255, 255, 255, 0.18);
}
[data-theme="dark"] .btn--ghost:hover {
  background: rgba(255, 255, 255, 0.06);
  text-decoration-color: rgba(255, 255, 255, 0.45);
}

/* ── home リード文 ───────────────────────────────── */
.home__lead {
  max-width: 780px;
  margin: 2.5rem auto 0;
  padding: 0 1.2rem;
  font-size: 1.15rem;
  line-height: 1.85;
  color: var(--c-fg-soft);
  text-align: center;
}

/* ── 3 分でわかる ────────────────────────────────── */
.three-min { padding: 5rem 0; background: var(--c-bg-alt); }
.three-min .container { max-width: 980px; }
.three-min__lede {
  max-width: 720px;
  margin: 0.4rem auto 2rem;
  font-size: 1.05rem;
  line-height: 1.85;
  color: var(--c-fg-soft);
}
.three-min__code {
  margin: 0 auto 2.4rem;
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 16px 40px rgba(20, 25, 35, 0.10);
  border: 1px solid var(--c-border);
  background: #0f1623;
  color: #e6edf3;
}
.three-min__code pre,
.three-min__code .highlight,
.three-min__code .chroma,
.three-min__code code {
  background: transparent !important;
  color: inherit !important;
}
.three-min__code pre {
  margin: 0;
  padding: 1rem 1.2rem;
  font-size: 0.92rem;
  line-height: 1.55;
  overflow-x: auto;
}

.three-min__nextsteps {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem;
}
.three-min__step {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding: 1.4rem 1.3rem;
  background: var(--c-bg);
  border: 1px solid var(--c-border);
  border-radius: 12px;
  color: var(--c-fg);
  text-decoration: none;
  transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
  box-shadow: var(--c-shadow);
}
.three-min__step:hover {
  transform: translateY(-3px);
  box-shadow: 0 14px 36px rgba(20, 25, 35, 0.12);
  border-color: rgba(99, 102, 241, 0.55);
  text-decoration: none;
}
.three-min__step-num {
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.78rem;
  color: var(--c-accent);
  letter-spacing: 0.18em;
}
.three-min__step strong {
  font-size: 1.05rem;
  font-weight: 700;
}
.three-min__step span {
  color: var(--c-fg-soft);
  font-size: 0.92rem;
  line-height: 1.6;
}

@media (max-width: 760px) {
  .three-min__nextsteps { grid-template-columns: 1fr; }
}

/* ── feature-card に絵文字アイコン ─────────────────── */
.feature-card {
  position: relative;
  padding: 1.6rem 1.4rem 1.4rem;
}
.feature-card__icon {
  font-size: 1.8rem;
  margin-bottom: 0.6rem;
  line-height: 1;
}
.feature-card h3 { font-size: 1.08rem; }
.feature-card p { font-size: 0.95rem; line-height: 1.75; }

/* ── ヒーロー画像をやさしく演出 ────────────────────── */
.hero-image {
  margin: 4rem auto;
  max-width: 1100px;
}
.hero-image__link {
  display: block;
  border-radius: 14px;
  overflow: hidden;
  box-shadow:
    0 30px 60px -20px rgba(20, 25, 35, 0.25),
    0 0 0 1px var(--c-border);
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.hero-image__link:hover {
  transform: translateY(-4px);
  box-shadow:
    0 40px 70px -22px rgba(20, 25, 35, 0.30),
    0 0 0 1px rgba(99, 102, 241, 0.45);
}
.hero-image__caption {
  margin-top: 0.9rem;
  text-align: center;
  font-size: 0.95rem;
  color: var(--c-fg-soft);
  line-height: 1.7;
}

/* ── tutorial cards (チュートリアル一覧) ─────────────── */
.tutorials-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
  margin: 1.4rem 0 2rem;
}
@media (min-width: 780px) {
  .tutorials-grid { grid-template-columns: repeat(2, 1fr); }
}
.tutorial-card {
  display: block;
  padding: 1.6rem 1.4rem;
  background: var(--c-bg-elev);
  border: 1px solid var(--c-border);
  border-radius: 12px;
  color: var(--c-fg);
  text-decoration: none;
  box-shadow: var(--c-shadow);
  transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}
.tutorial-card:hover:not(.tutorial-card--coming) {
  transform: translateY(-3px);
  box-shadow: 0 14px 36px rgba(20, 25, 35, 0.12);
  border-color: rgba(99, 102, 241, 0.45);
  text-decoration: none;
}
.tutorial-card--coming {
  opacity: 0.55;
  cursor: default;
}
.tutorial-card__num {
  display: inline-block;
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  color: var(--c-accent);
  margin-bottom: 0.5rem;
}
.tutorial-card h3 {
  margin: 0 0 0.3rem;
  font-size: 1.1rem;
  font-weight: 700;
}
.tutorial-card__time {
  margin: 0 0 0.5rem;
  font-size: 0.85rem;
  color: var(--c-fg-mute);
}
.tutorial-card__desc {
  margin: 0;
  font-size: 0.92rem;
  line-height: 1.7;
  color: var(--c-fg-soft);
}

/* ── 旧 hero (legacy) を home では使わない場合の保険 ── */
.home-hero + .hero { display: none; }

/* ── tutorial: C++ beginner notes ────────────────────── */
.cpp-note {
  margin: 1rem 0 1.4rem;
  padding: 0.85rem 1.1rem 0.95rem;
  background: var(--c-bg-alt);
  border-left: 3px solid var(--c-accent);
  border-radius: 0 6px 6px 0;
  font-size: 0.93rem;
}
.cpp-note__title {
  display: block;
  font-size: 0.78rem;
  letter-spacing: 0.06em;
  color: var(--c-accent);
  margin-bottom: 0.4rem;
  text-transform: uppercase;
  font-weight: 700;
}
.cpp-note p { margin: 0.35rem 0 0; }
.cpp-note p:first-of-type { margin-top: 0; }
.cpp-note code { background: var(--c-bg); padding: 0.05em 0.3em; border-radius: 3px; }

/* ── tutorial screenshot figures ─────────────────────── */
.tutorial-figure {
  margin: 1.5rem 0 1.8rem;
  padding: 0;
  background: var(--c-bg-alt);
  border: 1px solid var(--c-rule);
  border-radius: var(--r-radius);
  overflow: hidden;
}
.tutorial-figure img {
  display: block;
  width: 100%;
  height: auto;
  max-width: 760px;
  margin: 0 auto;
  /* until the screenshot is added, broken-image area stays minimal */
  min-height: 1px;
}
.tutorial-figure figcaption {
  padding: 0.7rem 1rem;
  font-size: 0.88rem;
  color: var(--c-fg-soft);
  border-top: 1px solid var(--c-rule);
  background: var(--c-bg);
}

/* ── architecture page (図 + 表 + 既知制限) ─────────── */
.architecture-page .arch-figure {
  margin: 1.8rem 0 2.4rem;
  padding: 1rem;
  background: var(--c-bg-alt);
  border: 1px solid var(--c-rule);
  border-radius: var(--r-radius);
}
.architecture-page .arch-svg {
  display: block;
  width: 100%;
  height: auto;
  max-width: 760px;
  margin: 0 auto;
}
.architecture-page .arch-figure figcaption {
  margin-top: 0.6rem;
  text-align: center;
  font-size: 0.85rem;
  color: var(--c-fg-soft);
}
.architecture-page table {
  width: 100%;
  border-collapse: collapse;
  margin: 1.2rem 0;
  font-size: 0.92rem;
}
.architecture-page th,
.architecture-page td {
  padding: 0.55rem 0.8rem;
  border-bottom: 1px solid var(--c-rule);
  vertical-align: top;
  text-align: left;
}
.architecture-page th {
  background: var(--c-bg-alt);
  font-weight: 700;
  color: var(--c-fg);
}

/* ============= Chapters (Reference articles) ============= */
.chapter-list { padding: 4rem 0 5rem; }
.chapter-list__header { margin-bottom: 2.4rem; }
.chapter-list__header h1 { margin: 0 0 0.6rem; font-size: 2.1rem; letter-spacing: -0.01em; }
.chapter-list__lede { color: var(--c-fg-soft); font-size: 1.05rem; margin: 0 0 1rem; max-width: 720px; }
.chapter-list__intro { color: var(--c-fg-soft); max-width: 720px; }
.chapter-list__intro p { margin: 0 0 0.8rem; }

.chapter-list__items {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 1.4rem;
  counter-reset: chapter;
  list-style: none;
  margin: 0;
  padding: 0;
}
.chapter-list__item { margin: 0; padding: 0; }
.chapter-list__link {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border: 1px solid var(--c-border);
  border-radius: 12px;
  background: var(--c-bg-elev);
  color: var(--c-fg);
  text-decoration: none;
  transition: transform 160ms ease, box-shadow 200ms ease, border-color 160ms ease;
  height: 100%;
}
.chapter-list__thumb {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: color-mix(in srgb, var(--chapter-accent, var(--c-accent)) 18%, var(--c-bg-alt));
  border-bottom: 1px solid var(--c-rule);
  overflow: hidden;
}
.chapter-list__thumb svg {
  display: block;
  width: 100%;
  height: 100%;
}
.chapter-list__body {
  display: flex;
  flex-direction: column;
  padding: 1rem 1.2rem 1.25rem;
  gap: 0.4rem;
}
.chapter-list__link::before {
  counter-increment: chapter;
  content: "CHAPTER " counter(chapter, decimal-leading-zero);
  font-family: var(--font-mono);
  font-size: 0.74rem;
  letter-spacing: 0.1em;
  color: var(--chapter-accent, var(--c-accent));
  font-weight: 700;
  margin-bottom: 0.05rem;
  order: 0;
}
.chapter-list__link:hover {
  text-decoration: none;
  transform: translateY(-3px);
  box-shadow: var(--c-shadow-card);
  border-color: color-mix(in srgb, var(--chapter-accent, var(--c-accent)) 45%, var(--c-border));
}
.chapter-list__title {
  display: block;
  font-weight: 700;
  font-size: 1.08rem;
  color: var(--c-fg);
  line-height: 1.4;
}
.chapter-list__desc {
  display: block;
  color: var(--c-fg-soft);
  font-size: 0.9rem;
  line-height: 1.6;
}

/* Mobile: single column, smaller thumb. */
@media (max-width: 600px) {
  .chapter-list__items { gap: 1rem; }
  .chapter-list__body { padding: 0.9rem 1rem 1.05rem; }
  .chapter-list__title { font-size: 1rem; }
  .chapter-list__desc { font-size: 0.88rem; }
}

.chapter-article { padding: 3.5rem 0 4.5rem; max-width: 880px; }
.chapter-article__eyebrow { margin: 0 0 0.6rem; font-size: 0.85rem; color: var(--c-fg-mute); letter-spacing: 0.04em; }
.chapter-article__eyebrow a { color: var(--c-fg-soft); }
.chapter-article__eyebrow a:hover { color: var(--c-accent); }
.chapter-article__header h1 { margin: 0 0 0.8rem; font-size: 2rem; letter-spacing: -0.01em; }
.chapter-article__lede { color: var(--c-fg-soft); font-size: 1.05rem; margin: 0 0 2rem; }
.chapter-article__body h2 { margin-top: 2.2rem; padding-bottom: 0.4rem; border-bottom: 1px solid var(--c-rule); font-size: 1.25rem; }
.chapter-article__body h3 { margin-top: 1.6rem; font-size: 1.05rem; }
.chapter-article__body pre { background: var(--c-bg-code); color: var(--c-code-fg); padding: 0.7rem 1rem; border-radius: var(--r-radius); overflow-x: auto; font-size: 0.88rem; line-height: 1.55; border: 1px solid var(--c-rule); }
.chapter-article__body code { background: var(--c-bg-alt); padding: 0.1em 0.35em; border-radius: 3px; font-size: 0.9em; }
.chapter-article__body pre code { background: transparent; padding: 0; }
.chapter-article__body ul { padding-left: 1.4rem; }
.chapter-article__body li { margin: 0.25rem 0; }

.chapter-article__nav {
  margin-top: 3rem;
  padding-top: 1.6rem;
  border-top: 1px solid var(--c-rule);
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.2rem;
}
.chapter-article__nav-prev a,
.chapter-article__nav-next a {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  padding: 0.7rem 1rem;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  background: var(--c-bg-elev);
  text-decoration: none;
  color: var(--c-fg);
  transition: border-color 120ms ease, background 120ms ease;
}
.chapter-article__nav-prev a:hover,
.chapter-article__nav-next a:hover {
  border-color: var(--c-accent-soft);
  background: var(--c-bg);
  text-decoration: none;
}
.chapter-article__nav-next { text-align: right; }
.chapter-article__nav-next a { align-items: flex-end; }
.chapter-article__nav-label {
  font-size: 0.75rem;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--c-fg-mute);
}
.chapter-article__nav-title { font-weight: 600; }
.chapter-article__nav-arrow { font-size: 0.85rem; color: var(--c-fg-mute); }

@media (max-width: 640px) {
  .chapter-article__nav { grid-template-columns: 1fr; }
  .chapter-article__nav-next { text-align: left; }
  .chapter-article__nav-next a { align-items: flex-start; }
}

/* ============================================================
   Round 37 — Siv3D / ebiten 風リバンプ
   - layout の取りこぼし class (site-main / site-footer__col 等)
   - typography 微調整
   - 余白・読みやすさ優先
   ============================================================ */

/* ── site-main: footer を画面下に押し下げる sticky 構造 ── */
.site-main {
  min-height: 60vh;
  display: block;
}

/* ── page-list の intro ブロック ── */
.page-list__intro {
  color: var(--c-fg-soft);
  max-width: 70ch;
  margin: 0 0 1.5rem;
  font-size: 1rem;
  line-height: 1.75;
}
.page-list__intro p { margin: 0 0 0.8rem; }
.page-list__intro p:last-child { margin-bottom: 0; }

/* ── footer 3-col layout (現状 stack していて寂しいので grid 化) ── */
.site-footer {
  background: var(--c-footer-bg);
  color: var(--c-footer-fg);
  padding: 3rem 0 2.4rem;
  margin-top: 4rem;
}
.site-footer__inner {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr;
  gap: 2.2rem;
  align-items: start;
}
.site-footer__col {
  min-width: 0;
}
.site-footer__col p {
  color: var(--c-footer-fg);
  line-height: 1.7;
  margin: 0 0 0.4rem;
  font-size: 0.92rem;
}
.site-footer__col p a { color: var(--c-footer-link); }
.site-footer__col p a:hover { color: var(--c-footer-fg-strong); }

@media (max-width: 720px) {
  .site-footer__inner {
    grid-template-columns: 1fr;
    gap: 1.6rem;
  }
}

/* ── api-page article (api-sidebar + 本文 + api-toc の grid) ── */
.api-page__article {
  min-width: 0;
}
.api-page__article > header {
  margin: 0 0 1.6rem;
  padding-bottom: 1rem;
  border-bottom: 1px solid var(--c-rule);
}
.api-page__article > header h1 {
  margin: 0 0 0.6rem;
  font-size: 1.85rem;
  letter-spacing: -0.01em;
  word-break: break-word;
}
.api-page__description {
  color: var(--c-fg-soft);
  font-size: 1.02rem;
  line-height: 1.7;
  margin: 0;
  max-width: 72ch;
}
.api-page__content {
  font-size: 0.97rem;
  line-height: 1.75;
}
.api-page__content h2 {
  margin: 2rem 0 0.8rem;
  padding-bottom: 0.4rem;
  border-bottom: 1px solid var(--c-rule);
  font-size: 1.25rem;
}
.api-page__content h3 {
  margin: 1.5rem 0 0.6rem;
  font-size: 1.05rem;
}
.api-page__content pre {
  background: var(--c-bg-code);
  color: var(--c-code-fg);
  padding: 0.7rem 1rem;
  border-radius: var(--r-radius);
  overflow-x: auto;
  font-size: 0.88rem;
  line-height: 1.55;
  border: 1px solid var(--c-rule);
}
.api-page__content code {
  background: var(--c-bg-alt);
  padding: 0.1em 0.35em;
  border-radius: 3px;
  font-size: 0.9em;
  border: 1px solid var(--c-rule);
}
.api-page__content pre code {
  background: transparent;
  border: 0;
  padding: 0;
}
.api-page__content table {
  width: 100%;
  border-collapse: collapse;
  margin: 1.2rem 0;
  font-size: 0.92rem;
}
.api-page__content th,
.api-page__content td {
  padding: 0.55rem 0.8rem;
  border-bottom: 1px solid var(--c-rule);
  vertical-align: top;
  text-align: left;
}
.api-page__content th {
  background: var(--c-bg-alt);
  font-weight: 700;
}
.api-page__content ul,
.api-page__content ol {
  padding-left: 1.4rem;
}
.api-page__content li { margin: 0.2rem 0; }

/* adr-page__article inherits api-page__article (already styled). 個別の余白だけ */
.adr-page__article > header {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  align-items: flex-start;
  padding-bottom: 1.2rem;
}
.adr-page__article > header h1 { margin: 0; }

/* ── api-page__body は古い list view 用に残置 ── */
.api-page__body {
  font-size: 0.97rem;
  line-height: 1.7;
}

/* ── typography 微調整 (Siv3D / ebiten 風: ふんわり大きすぎない見出し) ── */
.page-article h1,
.page-list h1,
.example-detail h1,
.example-gallery__header h1,
.chapter-list__header h1,
.chapter-article__header h1,
.api-page__article > header h1 {
  font-weight: 700;
}

/* 全体の hero / heading: gradient text やめて落ち着いた表示に */
body {
  font-feature-settings: "palt" 1, "kern" 1;
}

/* link の下線を hover 時のみ控えめに */
.page-article__body a,
.chapter-article__body a,
.example-detail__body a,
.api-page__content a {
  color: var(--c-accent);
  text-decoration: underline;
  text-decoration-color: var(--c-accent-soft);
  text-underline-offset: 3px;
  transition: text-decoration-color 120ms ease;
}
.page-article__body a:hover,
.chapter-article__body a:hover,
.example-detail__body a:hover,
.api-page__content a:hover {
  text-decoration-color: var(--c-accent);
}

/* ── code / pre の見た目を統一 (Siv3D の落ち着いた dark block 風) ── */
.page-article__body pre,
.chapter-article__body pre,
.example-detail__body pre,
.api-page__content pre {
  border: 1px solid #1f2937;
  box-shadow: 0 1px 2px rgba(20, 25, 35, 0.04);
}
[data-theme="dark"] .page-article__body pre,
[data-theme="dark"] .chapter-article__body pre,
[data-theme="dark"] .example-detail__body pre,
[data-theme="dark"] .api-page__content pre {
  border-color: #1a2230;
}

/* ── three-min の code block: 行間 / フォントサイズ統一
   (背景/文字色は .three-min__code そのものに掛けて子要素は transparent) ── */
.three-min__code .highlight,
.three-min__code .chroma {
  margin: 0;
}

/* ── inline code: 隣の文字とぶつかり気味を解消 ── */
:not(pre) > code {
  white-space: nowrap;
}

/* ── feature-card の絵文字アイコンを少し小さく / 余白整理 ── */
.feature-card__icon {
  font-size: 1.6rem;
  line-height: 1;
  margin-bottom: 0.7rem;
  opacity: 0.92;
}

/* ── home の section 余白を画面サイズに応じて調整 ── */
.three-min,
.position,
.features,
.showcase {
  padding: clamp(3rem, 6vw, 5rem) 0;
}

/* ── section-title: アクセントバーを左寄せに (Siv3D 風) ── */
.section-title {
  text-align: center;
  position: relative;
}
.section-title::after {
  margin: 0.55rem auto 0;
}

/* ── tutorials-grid の grid-template を 3 列でも崩れないように ── */
@media (min-width: 1024px) {
  .tutorials-grid { grid-template-columns: repeat(3, 1fr); }
}

/* (chapter-list counter / hover overrides removed — handled in the main
   .chapter-list__link block above with chapter-accent color-mix.) */

/* ── architecture-page の SVG figure を中央寄せ + soft shadow ── */
.architecture-page .arch-figure {
  box-shadow: var(--c-shadow);
}

/* ── examples gallery: title の前に小さなアクセント色のラベル無し時の余白 ── */
.example-gallery__header h1 {
  margin: 0 0 0.5rem;
  font-size: clamp(1.6rem, 3vw, 2.1rem);
}

/* ── visited link を消す (Siv3D 風: 訪問済み色は使わない) ── */
.example-card:visited,
.chapter-list__link:visited,
.guides-list__link:visited,
.three-min__step:visited,
.tutorial-card:visited,
.showcase-card:visited {
  color: inherit;
}

/* ── scrollbar styling (subtle, technical-feel) ── */
* {
  scrollbar-color: var(--c-border) transparent;
  scrollbar-width: thin;
}
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-thumb {
  background: var(--c-border);
  border-radius: 5px;
  border: 2px solid var(--c-bg);
}
*::-webkit-scrollbar-thumb:hover {
  background: var(--c-fg-mute);
}
*::-webkit-scrollbar-track { background: transparent; }

/* ── selection color (subtle accent) ── */
::selection {
  background: var(--c-accent-soft);
  color: var(--c-accent-on-soft);
}

/* ── focus-visible (a11y polish) ── */
a:focus-visible,
button:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
  border-radius: 3px;
}

/* ── article body: 段落の最大幅で読みやすさを担保 ── */
.page-article__body > p,
.chapter-article__body > p,
.example-detail__body > p,
.api-page__content > p {
  max-width: 72ch;
}

/* ── mobile polish: home-hero タイトル / CTA をもう一段小さく ── */
@media (max-width: 640px) {
  .home-hero {
    padding: 2.8rem 0 2.5rem;
  }
  .home-hero__title {
    font-size: clamp(2rem, 9vw, 2.8rem);
    letter-spacing: -0.025em;
  }
  .home-hero__sub {
    font-size: 0.97rem;
    margin: 1rem auto 1.6rem;
  }
  .home-hero__cta .btn--lg {
    padding: 0.7rem 1.2rem;
    font-size: 0.95rem;
  }
  .home-hero__cta {
    flex-direction: column;
    align-items: stretch;
    gap: 0.6rem;
  }
  .home-hero__cta .btn { justify-content: center; }

  .three-min__nextsteps,
  .position__grid,
  .features__grid,
  .showcase-grid {
    grid-template-columns: 1fr;
  }

  .api-page__article > header h1 { font-size: 1.4rem; }
}

/* ── tablet (641-1023): 2 列に ── */
@media (min-width: 641px) and (max-width: 1023px) {
  .three-min__nextsteps,
  .position__grid,
  .features__grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ============================================================
   playful — small interactive bits.
   Owned by Agent I. Independent of the layout-level CSS above
   so it can be lifted/changed without touching the rest.
   ============================================================ */

/* Hero-anchored canvas demo. Sits inside .home-hero, under the CTA. */
.home-hero__playful {
  margin-top: 2rem;
}
.playful-canvas {
  display: block;
  border-radius: var(--r-radius);
  background: linear-gradient(180deg,
              color-mix(in srgb, var(--c-bg-elev) 92%, transparent),
              color-mix(in srgb, var(--c-bg-alt) 92%, transparent));
  border: 1px solid var(--c-border);
  padding: 0.75rem;
  box-shadow: var(--c-shadow);
}
[data-theme="dark"] .playful-canvas {
  background: linear-gradient(180deg,
              color-mix(in srgb, var(--c-bg-elev) 80%, transparent),
              color-mix(in srgb, var(--c-bg-alt) 80%, transparent));
}
.playful-canvas__surface {
  display: block;
  width: 100%;
  height: 180px;
  border-radius: calc(var(--r-radius) - 2px);
  cursor: crosshair;
}
.playful-canvas__hint {
  margin: 0.6rem 0 0;
  font-size: 0.82rem;
  color: var(--c-fg-soft);
  text-align: center;
}
@media (max-width: 640px) {
  .playful-canvas__surface { height: 120px; }
  .playful-canvas { padding: 0.4rem; }
}

/* Scroll-fade — opt-in via [data-fade]. */
[data-fade] {
  opacity: 0;
  transform: translateY(14px);
  transition: opacity 480ms ease, transform 480ms ease;
  will-change: opacity, transform;
}
[data-fade].is-visible {
  opacity: 1;
  transform: translateY(0);
  will-change: auto;
}

/* Card hover lift / glow. Layered onto existing cards, doesn't replace
   the 1.03 scale set elsewhere. */
.showcase-card,
.three-min__step,
.features__card {
  transition: transform 220ms ease,
              box-shadow 220ms ease,
              border-color 220ms ease;
}
.showcase-card:hover,
.three-min__step:hover,
.features__card:hover {
  border-color: color-mix(in srgb, var(--c-accent) 35%, var(--c-border));
  box-shadow: 0 12px 28px color-mix(in srgb, var(--c-accent) 12%, transparent),
              var(--c-shadow-card);
}
.showcase-card:active,
.three-min__step:active,
.features__card:active {
  transform: translateY(1px);
}

/* Header "?" button. Mirrors .theme-toggle dimensions. */
.shortcuts-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  padding: 0;
  border: 1px solid var(--c-border);
  background: var(--c-bg-elev);
  color: var(--c-fg-soft);
  border-radius: var(--r-radius);
  cursor: pointer;
  transition: background-color 160ms ease, color 160ms ease, border-color 160ms ease;
}
.shortcuts-trigger:hover {
  color: var(--c-accent);
  border-color: color-mix(in srgb, var(--c-accent) 45%, var(--c-border));
}
.shortcuts-trigger:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}
.shortcuts-trigger__kbd {
  font-family: var(--font-mono);
  font-size: 0.85rem;
  font-weight: 700;
  background: transparent;
  border: 0;
  padding: 0;
  color: inherit;
}

/* Shortcuts modal — mirrors the .search-dialog look so the two feel
   consistent without sharing rules. */
.shortcuts-dialog {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 6vh 1rem 1rem;
  opacity: 0;
  pointer-events: none;
  transition: opacity 180ms ease;
}
.shortcuts-dialog[hidden] { display: none; }
.shortcuts-dialog.is-open {
  opacity: 1;
  pointer-events: auto;
}
.shortcuts-dialog__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(15, 22, 35, 0.42);
}
[data-theme="dark"] .shortcuts-dialog__backdrop {
  background: rgba(0, 0, 0, 0.55);
}
.shortcuts-dialog__panel {
  position: relative;
  width: min(560px, 100%);
  background: var(--c-bg-elev);
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius-lg);
  box-shadow: 0 18px 42px rgba(20, 25, 35, 0.18);
  transform: translateY(-8px);
  transition: transform 180ms ease;
}
.shortcuts-dialog.is-open .shortcuts-dialog__panel {
  transform: translateY(0);
}
.shortcuts-dialog__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.9rem 1.1rem;
  border-bottom: 1px solid var(--c-rule);
}
.shortcuts-dialog__title {
  margin: 0;
  font-size: 1rem;
  color: var(--c-fg);
}
.shortcuts-dialog__close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  background: transparent;
  border: 1px solid transparent;
  border-radius: var(--r-radius);
  color: var(--c-fg-soft);
  cursor: pointer;
}
.shortcuts-dialog__close:hover { color: var(--c-accent); }
.shortcuts-dialog__close:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}
.shortcuts-dialog__body {
  padding: 1rem 1.1rem 1.1rem;
}
.shortcuts-list {
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 0.4rem;
}
.shortcuts-list__row {
  display: grid;
  grid-template-columns: minmax(110px, 0.5fr) 1fr;
  align-items: center;
  gap: 0.9rem;
  padding: 0.35rem 0;
  border-bottom: 1px dashed var(--c-rule);
}
.shortcuts-list__row:last-child { border-bottom: 0; }
.shortcuts-list dt {
  margin: 0;
  display: flex;
  gap: 0.3rem;
  align-items: center;
}
.shortcuts-list dd {
  margin: 0;
  color: var(--c-fg-soft);
  font-size: 0.92rem;
}
.shortcuts-list kbd {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 0.78rem;
  line-height: 1;
  padding: 3px 6px;
  background: var(--c-bg-alt);
  border: 1px solid var(--c-border);
  border-bottom-width: 2px;
  border-radius: 4px;
  color: var(--c-fg);
  min-width: 18px;
  text-align: center;
}
.shortcuts-dialog__foot {
  margin: 0.9rem 0 0;
  color: var(--c-fg-mute);
  font-size: 0.8rem;
}

@media (max-width: 640px) {
  .shortcuts-trigger { display: none; }
  .shortcuts-list__row { grid-template-columns: minmax(96px, auto) 1fr; }
}

/* Reduced motion: kill our scroll-fade transform/opacity instantly,
   and keep the canvas frame static (JS already handles the actual loop). */
@media (prefers-reduced-motion: reduce) {
  [data-fade],
  [data-fade].is-visible {
    opacity: 1;
    transform: none;
    transition: none;
  }
  .shortcuts-dialog,
  .shortcuts-dialog__panel,
  .showcase-card,
  .three-min__step,
  .features__card {
    transition: none !important;
  }
}

/* ============================================================
   Round 38 — Full CSS audit fixes
   - Chroma syntax highlighting (all token classes used by Hugo)
   - Missing BEM classes from rendered HTML (48 audited)
   - Resilience: blockquote / table / details / pre overflow / images
   - A11y polish: scroll-margin, print styles, high-contrast
   - Dark mode coverage for newly added rules
   ============================================================ */

/* ── Chroma token palette (light defaults) ── */
:root {
  --c-syn-keyword: #d73a49;
  --c-syn-comment: #6a737d;
  --c-syn-string:  #032f62;
  --c-syn-number:  #005cc5;
  --c-syn-name:    #24292e;
  --c-syn-builtin: #6f42c1;
  --c-syn-operator:#d73a49;
  --c-syn-punct:   #24292e;
  --c-syn-err:     #b31d28;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --c-syn-keyword: #ff7b72;
    --c-syn-comment: #8b949e;
    --c-syn-string:  #a5d6ff;
    --c-syn-number:  #79c0ff;
    --c-syn-name:    #e6edf3;
    --c-syn-builtin: #d2a8ff;
    --c-syn-operator:#ff7b72;
    --c-syn-punct:   #e6edf3;
    --c-syn-err:     #ffa198;
  }
}
:root[data-theme="dark"] {
  --c-syn-keyword: #ff7b72;
  --c-syn-comment: #8b949e;
  --c-syn-string:  #a5d6ff;
  --c-syn-number:  #79c0ff;
  --c-syn-name:    #e6edf3;
  --c-syn-builtin: #d2a8ff;
  --c-syn-operator:#ff7b72;
  --c-syn-punct:   #e6edf3;
  --c-syn-err:     #ffa198;
}
:root[data-theme="light"] {
  --c-syn-keyword: #d73a49;
  --c-syn-comment: #6a737d;
  --c-syn-string:  #032f62;
  --c-syn-number:  #005cc5;
  --c-syn-name:    #24292e;
  --c-syn-builtin: #6f42c1;
  --c-syn-operator:#d73a49;
  --c-syn-punct:   #24292e;
  --c-syn-err:     #b31d28;
}

/* Chroma sits inside our dark code-block background regardless of page
   theme. Force dark-friendly token colors locally on the chroma scope. */
.chroma {
  /* Light theme defaults (github-light flavor). */
  --c-syn-keyword: #d73a49;
  --c-syn-comment: #6a737d;
  --c-syn-string:  #032f62;
  --c-syn-number:  #005cc5;
  --c-syn-name:    #24292e;
  --c-syn-builtin: #6f42c1;
  --c-syn-operator:#d73a49;
  --c-syn-punct:   #24292e;
  --c-syn-err:     #b31d28;

  color: var(--c-code-fg);
  background: transparent;
}

/* Dark theme syntax tokens (github-dark flavor). */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .chroma {
    --c-syn-keyword: #ff7b72;
    --c-syn-comment: #8b949e;
    --c-syn-string:  #a5d6ff;
    --c-syn-number:  #79c0ff;
    --c-syn-name:    #e6edf3;
    --c-syn-builtin: #d2a8ff;
    --c-syn-operator:#ff7b72;
    --c-syn-punct:   #e6edf3;
    --c-syn-err:     #ffa198;
  }
}
:root[data-theme="dark"] .chroma {
  --c-syn-keyword: #ff7b72;
  --c-syn-comment: #8b949e;
  --c-syn-string:  #a5d6ff;
  --c-syn-number:  #79c0ff;
  --c-syn-name:    #e6edf3;
  --c-syn-builtin: #d2a8ff;
  --c-syn-operator:#ff7b72;
  --c-syn-punct:   #e6edf3;
  --c-syn-err:     #ffa198;
}
/* three-min code block always uses dark bg (hero showcase). */
.three-min__code .chroma {
  --c-syn-keyword: #ff7b72;
  --c-syn-comment: #8b949e;
  --c-syn-string:  #a5d6ff;
  --c-syn-number:  #79c0ff;
  --c-syn-name:    #e6edf3;
  --c-syn-builtin: #d2a8ff;
  --c-syn-operator:#ff7b72;
  --c-syn-punct:   #e6edf3;
  --c-syn-err:     #ffa198;
}

/* Per-line wrapper Hugo emits for code blocks. */
.chroma .line {
  display: block;
}

/* Token classes — flat selectors, Chroma emits class on <span>. */
.chroma .k,
.chroma .kc,
.chroma .kd,
.chroma .kn,
.chroma .kp,
.chroma .kr,
.chroma .kt {
  color: var(--c-syn-keyword);
  font-weight: 600;
}

.chroma .c,
.chroma .c1,
.chroma .cl,
.chroma .cm,
.chroma .cs,
.chroma .cp,
.chroma .cpf {
  color: var(--c-syn-comment);
  font-style: italic;
}

.chroma .s,
.chroma .s1,
.chroma .s2,
.chroma .sa,
.chroma .sb,
.chroma .sc,
.chroma .dl,
.chroma .sd,
.chroma .se,
.chroma .sh,
.chroma .si,
.chroma .sx,
.chroma .sr,
.chroma .ss {
  color: var(--c-syn-string);
}

.chroma .m,
.chroma .mb,
.chroma .mf,
.chroma .mh,
.chroma .mi,
.chroma .il,
.chroma .mo {
  color: var(--c-syn-number);
}

.chroma .n,
.chroma .na,
.chroma .nc,
.chroma .nd,
.chroma .ne,
.chroma .nl,
.chroma .nn,
.chroma .no,
.chroma .np,
.chroma .nt,
.chroma .nv,
.chroma .nx,
.chroma .py {
  color: var(--c-syn-name);
}

.chroma .nb {
  color: var(--c-syn-builtin);
}

.chroma .nf {
  color: var(--c-syn-builtin);
}

.chroma .o,
.chroma .ow {
  color: var(--c-syn-operator);
}

.chroma .p {
  color: var(--c-syn-punct);
}

.chroma .err {
  color: var(--c-syn-err);
  background: rgba(248, 81, 73, 0.12);
  border-radius: 2px;
}

/* Generic <pre><code class="language-X"> defaults outside Chroma. */
code[class*="language-"] {
  font-family: var(--font-mono);
  font-size: inherit;
  background: transparent;
  padding: 0;
  color: inherit;
}
pre > code[class*="language-"] {
  display: block;
  white-space: pre;
}

/* ── ADR sidebar (reuses api-sidebar; adds ADR-only spacing) ── */
.adr-sidebar {
  padding-top: 0.6rem;
}
.adr-sidebar .adr-sidebar__status {
  display: inline-flex;
  align-items: center;
  margin-bottom: 0.8rem;
}

/* ── example-card kind pill + API chip list ── */
.example-card__kind {
  display: inline-block;
  margin-top: 0.45rem;
  padding: 0.18rem 0.55rem;
  font-family: var(--font-mono);
  font-size: 0.7rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  border-radius: 999px;
  background: var(--c-bg-alt);
  color: var(--c-fg-soft);
  border: 1px solid var(--c-border);
  white-space: nowrap;
  vertical-align: middle;
}
.example-card__kind--cef       { background: var(--c-accent-soft); color: var(--c-accent-on-soft); border-color: transparent; }
.example-card__kind--engine    { background: var(--c-bg-alt); color: var(--c-fg-soft); border-color: var(--c-border); }
.example-card__kind--headless  { background: var(--c-badge-headless-soft); color: var(--c-badge-headless-on); border-color: transparent; }

.example-detail__kind--engine  { background: var(--c-bg-alt); color: var(--c-fg-soft); border-color: var(--c-border); }

.example-card__apis {
  list-style: none;
  margin: 0.75rem 0 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}
.example-card__api-chip {
  display: inline-flex;
  align-items: center;
  padding: 0.15rem 0.5rem;
  font-size: 0.72rem;
  line-height: 1.4;
  background: var(--c-bg-alt);
  border: 1px solid var(--c-border);
  border-radius: 999px;
  color: var(--c-fg-soft);
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.example-card__api-chip code {
  font-family: var(--font-mono);
  font-size: 0.72rem;
  background: transparent;
  padding: 0;
  color: var(--c-fg);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 22ch;
}
.example-card__api-chip--more {
  font-style: italic;
  color: var(--c-fg-mute);
  background: transparent;
  border-style: dashed;
}

/* ── guides-list item (li reset; visuals live on the link) ── */
.guides-list__item {
  list-style: none;
  padding: 0;
  margin: 0;
}

/* ── theme-toggle icon base (variants --moon / --sun already exist) ── */
.theme-toggle__icon {
  width: 1.1rem;
  height: 1.1rem;
  display: block;
  pointer-events: none;
}

/* ============================================================
   Resilience — global element styles for long-form pages
   ============================================================ */

/* Blockquotes — used heavily in guides for callouts. */
.page-article__body blockquote,
.chapter-article__body blockquote,
.example-detail__body blockquote,
.api-page__content blockquote {
  margin: 1.4rem 0;
  padding: 0.8rem 1.1rem;
  border-left: 3px solid var(--c-accent);
  background: var(--c-bg-alt);
  color: var(--c-fg-soft);
  border-radius: 0 var(--r-radius) var(--r-radius) 0;
}
.page-article__body blockquote > :first-child,
.chapter-article__body blockquote > :first-child,
.example-detail__body blockquote > :first-child,
.api-page__content blockquote > :first-child { margin-top: 0; }
.page-article__body blockquote > :last-child,
.chapter-article__body blockquote > :last-child,
.example-detail__body blockquote > :last-child,
.api-page__content blockquote > :last-child  { margin-bottom: 0; }
.page-article__body blockquote p,
.chapter-article__body blockquote p,
.example-detail__body blockquote p,
.api-page__content blockquote p {
  margin: 0.5rem 0;
}

/* Tables — used in matrices, scope docs. Scroll horizontally on narrow viewports. */
.page-article__body table,
.chapter-article__body table,
.example-detail__body table,
.api-page__content table {
  display: block;
  width: 100%;
  max-width: 100%;
  overflow-x: auto;
  border-collapse: collapse;
  margin: 1.4rem 0;
  font-size: 0.92rem;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
}
.page-article__body table thead,
.chapter-article__body table thead,
.example-detail__body table thead,
.api-page__content table thead {
  background: var(--c-bg-alt);
}
.page-article__body table th,
.chapter-article__body table th,
.example-detail__body table th,
.api-page__content table th,
.page-article__body table td,
.chapter-article__body table td,
.example-detail__body table td,
.api-page__content table td {
  text-align: left;
  padding: 0.5rem 0.75rem;
  border-bottom: 1px solid var(--c-rule);
  vertical-align: top;
  line-height: 1.6;
}
/* Compact first column (tool / API / key names) — keep short labels
   on a single line rather than breaking "C++ コンパイラ" mid-word. */
.page-article__body table td:first-child,
.chapter-article__body table td:first-child,
.example-detail__body table td:first-child,
.api-page__content table td:first-child {
  white-space: nowrap;
}
.page-article__body table th,
.chapter-article__body table th,
.example-detail__body table th,
.api-page__content table th {
  font-weight: 700;
  color: var(--c-fg);
  border-bottom-color: var(--c-border);
}
.page-article__body table tr:last-child td,
.chapter-article__body table tr:last-child td,
.example-detail__body table tr:last-child td,
.api-page__content table tr:last-child td {
  border-bottom: none;
}

/* <details> outside api-sidebar — generic callouts. */
.page-article__body details,
.chapter-article__body details,
.example-detail__body details,
.api-page__content details {
  margin: 1.2rem 0;
  padding: 0.6rem 0.9rem;
  border: 1px solid var(--c-border);
  border-radius: var(--r-radius);
  background: var(--c-bg-alt);
}
.page-article__body details > summary,
.chapter-article__body details > summary,
.example-detail__body details > summary,
.api-page__content details > summary {
  cursor: pointer;
  font-weight: 600;
  color: var(--c-fg);
  list-style: none;
  padding: 0.2rem 0;
}
.page-article__body details > summary::-webkit-details-marker,
.chapter-article__body details > summary::-webkit-details-marker,
.example-detail__body details > summary::-webkit-details-marker,
.api-page__content details > summary::-webkit-details-marker {
  display: none;
}
.page-article__body details > summary::before,
.chapter-article__body details > summary::before,
.example-detail__body details > summary::before,
.api-page__content details > summary::before {
  content: "▸";
  display: inline-block;
  margin-right: 0.45rem;
  color: var(--c-fg-mute);
  transition: transform 120ms ease;
}
.page-article__body details[open] > summary::before,
.chapter-article__body details[open] > summary::before,
.example-detail__body details[open] > summary::before,
.api-page__content details[open] > summary::before {
  transform: rotate(90deg);
}

/* Images in long-form copy never overflow the column. */
.page-article__body img,
.chapter-article__body img,
.example-detail__body img,
.api-page__content img {
  max-width: 100%;
  height: auto;
}

/* Stray <pre> still scrolls horizontally. */
pre {
  max-width: 100%;
  overflow-x: auto;
}

/* Long inline <code> never overflows the viewport. */
:not(pre) > code {
  overflow-wrap: anywhere;
  word-break: break-word;
}

/* Anchor offset — sticky header (~64px) friendly. */
.page-article__body :is(h2, h3, h4, h5, h6),
.chapter-article__body :is(h2, h3, h4, h5, h6),
.example-detail__body :is(h2, h3, h4, h5, h6),
.api-page__content :is(h2, h3, h4, h5, h6),
.adr-page__article :is(h2, h3, h4, h5, h6) {
  scroll-margin-top: 5rem;
}

/* Dark-mode polish for newly defined chips/pills. */
[data-theme="dark"] .example-card__api-chip,
[data-theme="dark"] .example-card__kind {
  background: var(--c-bg-elev);
}
[data-theme="dark"] .example-card__kind--cef {
  background: var(--c-accent-soft);
  color: var(--c-accent-on-soft);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .example-card__api-chip,
  :root:not([data-theme="light"]) .example-card__kind {
    background: var(--c-bg-elev);
  }
  :root:not([data-theme="light"]) .example-card__kind--cef {
    background: var(--c-accent-soft);
    color: var(--c-accent-on-soft);
  }
}

/* ── Print styles — strip chrome so docs are readable on paper ── */
@media print {
  .site-header,
  .site-footer,
  .nav-toggle,
  .theme-toggle,
  .site-nav,
  .home-hero__bg,
  .search-trigger,
  .search-dialog {
    display: none !important;
  }
  .site-main {
    padding: 0;
  }
  body {
    background: #ffffff;
    color: #000000;
  }
  a {
    color: inherit;
    text-decoration: underline;
  }
  pre, code, .chroma {
    background: #f3f3f3 !important;
    color: #000000 !important;
    border: 1px solid #cccccc;
  }
  .chroma .k, .chroma .kc, .chroma .kd, .chroma .kn,
  .chroma .kp, .chroma .kr, .chroma .kt,
  .chroma .c, .chroma .c1, .chroma .cl, .chroma .cm, .chroma .cp, .chroma .cpf,
  .chroma .s, .chroma .s1, .chroma .s2, .chroma .se,
  .chroma .m, .chroma .mf, .chroma .mh, .chroma .mi,
  .chroma .n, .chroma .na, .chroma .nb, .chroma .nc, .chroma .nf,
  .chroma .nl, .chroma .nt, .chroma .nv, .chroma .nx,
  .chroma .o, .chroma .p {
    color: #000000 !important;
  }
  .example-card,
  .feature-card,
  .position__pillar,
  .tutorial-card {
    box-shadow: none !important;
    border: 1px solid #cccccc !important;
    page-break-inside: avoid;
  }
  h1, h2, h3 {
    page-break-after: avoid;
  }
}

/* ── High-contrast (Windows forced-colors) ── */
@media (forced-colors: active) {
  .btn,
  .example-card,
  .feature-card,
  .position__pillar,
  .tutorial-card {
    border: 1px solid CanvasText;
  }
  .example-card__kind,
  .example-card__api-chip,
  .adr-badge {
    border: 1px solid CanvasText;
    forced-color-adjust: none;
  }
}

/* ── Responsive sweep for new chip grids ── */
@media (max-width: 640px) {
  .example-card__apis {
    gap: 0.3rem;
  }
  .example-card__api-chip code {
    max-width: 16ch;
  }
  .page-article__body table,
  .chapter-article__body table,
  .example-detail__body table,
  .api-page__content table {
    font-size: 0.85rem;
  }
}

/* ============================================================
   Round 39 playful additions
   ============================================================ */

/* --- Konami mascot (fixed bottom-right) --- */
.konami-mascot {
  position: fixed;
  right: 1.5rem;
  bottom: 1.5rem;
  width: 64px;
  height: 56px;
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 320ms ease, transform 320ms ease;
  pointer-events: none;
  z-index: 9999;
  filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.18));
}
.konami-mascot--visible {
  opacity: 1;
  transform: translateY(0);
  animation: konami-bounce 1.6s ease-in-out infinite;
}
.konami-mascot--still.konami-mascot--visible {
  animation: none;
}
@keyframes konami-bounce {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-10px); }
}

/* --- Card tilt micro-interaction (uses --tilt-x / --tilt-y from JS) ---
   Restricted to .guides-list__link so it does not fight the new
   chapter-list grid hover (which uses translateY + accent border). */
.guides-list__link {
  --tilt-x: 0deg;
  --tilt-y: 0deg;

  transform: perspective(700px) rotateX(var(--tilt-x)) rotateY(var(--tilt-y));
  transition: transform 150ms ease, box-shadow 200ms ease;
  transform-style: preserve-3d;
  will-change: transform;
}
.guides-list__link:hover {
  box-shadow: 0 8px 20px -10px rgba(60, 80, 130, 0.35);
}
.guides-list__link:not(:hover) {
  transition: transform 220ms ease, box-shadow 220ms ease;
}

/* --- Section reveal flourish: animated underline on first heading inside .is-visible --- */
[data-fade] :is(h1, h2, h3).reveal-flourish::after,
[data-fade].is-visible :is(.page-article__title, .home-section__title, h2):first-of-type::after {
  content: "";
  display: block;
  height: 2px;
  width: 0;
  margin-top: 0.45rem;
  background: linear-gradient(90deg, var(--c-accent, #3865ff) 0%, transparent 100%);
  transition: width 720ms cubic-bezier(0.2, 0.7, 0.1, 1) 120ms;
}
[data-fade].is-visible :is(.page-article__title, .home-section__title, h2):first-of-type::after {
  width: 68%;
  max-width: 16rem;
}

@media (prefers-reduced-motion: reduce) {
  .konami-mascot,
  .konami-mascot--visible { animation: none !important; }
  .guides-list__link,
  .chapter-list__link {
    transform: none !important;
    transition: box-shadow 200ms ease;
  }
  [data-fade].is-visible :is(.page-article__title, .home-section__title, h2):first-of-type::after {
    transition: none;
  }
}

@media (forced-colors: active) {
  .konami-mascot { filter: none; }
  [data-fade].is-visible :is(.page-article__title, .home-section__title, h2):first-of-type::after {
    background: CanvasText;
  }
}

/* --- Round 39 home page: concept hero card + capability pillars --- */
.hero-image--concept {
  max-width: 760px;
  margin: 2rem auto 2.5rem;
  padding: 0;
}
.hero-image__concept {
  display: grid;
  gap: 0.85rem;
  padding: 1.6rem 1.8rem;
  background: var(--c-surface, #fff);
  border: 1px solid var(--c-border, #d8dee9);
  border-radius: 14px;
  box-shadow: 0 18px 36px -22px rgba(36, 56, 90, 0.32);
}
.hero-image__row {
  display: flex;
  align-items: center;
  gap: 0.9rem;
}
.hero-image__chip {
  font-family: var(--font-mono, ui-monospace, Menlo, monospace);
  font-size: 0.92rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  padding: 0.32em 0.7em;
  border-radius: 999px;
  background: #283149;
  color: #fff;
  white-space: nowrap;
  min-width: 7.5rem;
  text-align: center;
}
.hero-image__chip--web {
  background: #c0d6ff;
  color: #1a325e;
}
.hero-image__chip--data {
  background: #f4d8a3;
  color: #6b4a18;
}
.hero-image__label {
  color: var(--c-text-muted, #4d566b);
  font-size: 0.95rem;
}
.hero-image__caption {
  max-width: 760px;
  margin: 1.1rem auto 0;
  text-align: center;
  color: var(--c-text-muted, #4d566b);
  font-size: 0.95rem;
  line-height: 1.65;
  padding: 0 1rem;
}

.home-section {
  max-width: 960px;
  margin: 3rem auto;
  padding: 0 1.2rem;
}
.home-section__header {
  text-align: center;
  margin-bottom: 1.75rem;
}
.home-section__title {
  font-size: 1.65rem;
  font-weight: 700;
  margin: 0 0 0.55rem;
  display: inline-block;
}
.home-section__lede {
  color: var(--c-text-muted, #4d566b);
  font-size: 1rem;
  line-height: 1.7;
  max-width: 640px;
  margin: 0 auto;
}
.home-pillars {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 1.1rem;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
.home-pillar {
  background: var(--c-surface, #fff);
  border: 1px solid var(--c-border, #d8dee9);
  border-radius: 12px;
  padding: 1.25rem 1.35rem;
  transition: transform 200ms ease, box-shadow 200ms ease;
}
.home-pillar:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 22px -14px rgba(36, 56, 90, 0.28);
}
.home-pillar__title {
  margin: 0 0 0.55rem;
  font-size: 1.05rem;
  font-weight: 700;
}
.home-pillar__body {
  margin: 0;
  color: var(--c-text-muted, #4d566b);
  line-height: 1.7;
  font-size: 0.95rem;
}
.home-pillar__body code {
  background: var(--c-code-bg, #f3f4f8);
  padding: 0.05em 0.4em;
  border-radius: 4px;
  font-size: 0.86em;
}
.home-showcase__footnote {
  margin-top: 1.4rem;
  text-align: center;
  color: var(--c-text-muted, #4d566b);
  font-size: 0.85rem;
  font-style: italic;
}

@media (prefers-reduced-motion: reduce) {
  .home-pillar { transition: none; }
  .home-pillar:hover { transform: none; }
}

/* ============================================================
   Round 40: hero title flourish + footer playfulness
   ============================================================ */

/* --- Hero title: animated gradient underline that draws on load --- */
.home-hero__title {
  position: relative;
  display: inline-block;
}
.home-hero__title-text {
  position: relative;
  background: linear-gradient(90deg, var(--c-fg, #1a2230) 0%, var(--c-fg, #1a2230) 100%);
  background-clip: text;
  -webkit-background-clip: text;
}
.home-hero__title-underline {
  display: block;
  height: 2px;
  width: 4rem;
  margin: 0.55rem auto 0;
  background: var(--c-accent, #3865ff);
  opacity: 0.85;
}


/* --- Footer: chip palette + easter terminal --- */
.site-footer__brand {
  display: flex;
  align-items: center;
  gap: 0.55rem;
}
.site-footer__brand-mark {
  display: inline-flex;
  width: 1.6rem;
  height: 1.6rem;
  color: var(--c-accent, #3865ff);
}
.site-footer__build {
  margin-top: 0.7rem;
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: center;
  font-size: 0.78rem;
  color: var(--c-fg-soft, #4d566b);
}
.site-footer__build code {
  background: transparent;
  color: inherit;
  padding: 0;
  font-size: 0.78rem;
}
.site-footer__build-chip {
  padding: 0.15em 0.55em;
  border-radius: 999px;
  background: #283149;
  color: #fff;
  font-size: 0.7rem;
  font-family: var(--font-mono, ui-monospace, Menlo, monospace);
  letter-spacing: 0.02em;
}
.site-footer__build-chip--web {
  background: #c0d6ff;
  color: #1a325e;
}
.site-footer__build-chip--data {
  background: #f4d8a3;
  color: #6b4a18;
}
.site-footer__hint {
  margin-top: 0.6rem;
  font-size: 0.8rem;
  color: var(--c-fg-soft, #4d566b);
}
.site-footer__hint kbd {
  display: inline-block;
  font-family: var(--font-mono, ui-monospace, Menlo, monospace);
  font-size: 0.78rem;
  padding: 0.04em 0.45em;
  border: 1px solid var(--c-border, #d8dee9);
  border-radius: 4px;
  background: var(--c-bg-elev, #fff);
  color: var(--c-fg, #1a2230);
}
.site-footer__easter {
  margin-top: 0.7rem;
  font-family: var(--font-mono, ui-monospace, Menlo, monospace);
  font-size: 0.78rem;
  color: var(--c-fg-soft, #4d566b);
  display: flex;
  align-items: baseline;
  gap: 0.25rem;
}
.site-footer__easter-prompt code {
  background: transparent;
  padding: 0;
  font-size: inherit;
  color: inherit;
}
.site-footer__easter-cursor {
  display: inline-block;
  width: 0.55ch;
  opacity: 0.6;
  background: var(--c-fg-soft, #4d566b);
}

/* --- 404 page --- */
.notfound {
  min-height: 60vh;
  display: grid;
  place-items: center;
  text-align: center;
  padding: 4rem 1.5rem;
}
.notfound__code {
  font-family: var(--font-mono, ui-monospace, Menlo, monospace);
  font-size: clamp(3.5rem, 10vw, 5.5rem);
  font-weight: 700;
  line-height: 1;
  margin: 0 0 1rem;
  color: var(--c-fg, #1a2230);
  letter-spacing: -0.04em;
}
.notfound__title {
  font-size: 1.5rem;
  margin: 0 0 0.6rem;
}
.notfound__lede {
  color: var(--c-fg-soft, #4d566b);
  max-width: 460px;
  margin: 0 auto 1.4rem;
  line-height: 1.7;
}
.notfound__links {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  justify-content: center;
}
.notfound__mascot {
  margin: 0 auto 1.4rem;
  width: 88px;
  height: 76px;
  color: var(--c-fg-mute, #707582);
  opacity: 0.6;
}

@media (prefers-reduced-motion: reduce) {
  .home-hero__title-underline,
  .btn--primary::after,
  .site-footer__easter-cursor,
  .notfound__mascot {
    animation: none !important;
  }
  .home-hero__title-underline { width: 100%; }
}

/* ============================================================
   Chapter accent palette — chapter list layout lives earlier in this
   file (~line 2284). Only the detail page rules + the home-pillar
   palette rotation are kept here.
   ============================================================ */

/* Chapter detail: icon + heading accent */
.chapter-article {
  --chapter-accent: #6b7280;
}
.chapter-article__icon {
  color: var(--chapter-accent);
  margin: 0 0 0.6rem;
}
.chapter-article__icon svg {
  width: 48px;
  height: 48px;
}
.chapter-article__body > h2::before {
  content: "";
  display: inline-block;
  width: 3px;
  height: 0.9em;
  background: var(--chapter-accent);
  margin-right: 0.55rem;
  vertical-align: middle;
  border-radius: 2px;
}

/* Home pillars: rotate through the chapter palette so the four cards each
   pick up a different accent strip. */
.home-pillar {
  --pillar-accent: #6b7280;

  border-top: 3px solid var(--pillar-accent);
}
.home-pillar:nth-child(1) { --pillar-accent: #ec4899; }
.home-pillar:nth-child(2) { --pillar-accent: #f97316; }
.home-pillar:nth-child(3) { --pillar-accent: #0ea5e9; }
.home-pillar:nth-child(4) { --pillar-accent: #22c55e; }

/* ============================================================
   Round 41: page anatomy — eyebrow, summary, TOC, pager
   ============================================================ */

.page-eyebrow {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
  margin: 0 0 0.85rem;
  font-size: 0.85rem;
  color: var(--c-fg-soft, #4d566b);
  letter-spacing: 0.02em;
}
.page-eyebrow a {
  color: var(--c-accent, #3865ff);
  text-decoration: none;
}
.page-eyebrow a:hover { text-decoration: underline; }
.page-eyebrow__num {
  font-family: var(--font-mono, ui-monospace, Menlo, monospace);
  font-weight: 600;
  color: var(--c-fg, #1a2230);
}
.page-eyebrow__total {
  color: var(--c-fg-mute, #707582);
  font-size: 0.78rem;
}

.page-summary {
  margin: 1.6rem 0 2.4rem;
  padding: 1rem 1.2rem;
  border-left: 3px solid var(--chapter-accent, var(--c-accent-soft, #dbeafe));
  background: var(--c-bg-alt, #f6f7f9);
  border-radius: 0 8px 8px 0;
}
.page-summary__h {
  margin: 0 0 0.45rem;
  font-size: 0.92rem;
  font-weight: 600;
  letter-spacing: 0.01em;
  color: var(--c-fg-soft, #4d566b);
}
.page-summary ul {
  margin: 0;
  padding-left: 1.2rem;
  font-size: 0.95rem;
  line-height: 1.65;
}
.page-summary li { margin-bottom: 0.2rem; }

.page-with-toc {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 220px;
  gap: 2.5rem;
  align-items: start;
}
.page-toc {
  position: sticky;
  top: 5rem;
  align-self: start;
  max-height: calc(100vh - 6rem);
  overflow-y: auto;
  font-size: 0.88rem;
  color: var(--c-fg-soft, #4d566b);
  border-left: 1px solid var(--c-border, #d8dee9);
  padding-left: 1rem;
}
.page-toc h2 {
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin: 0 0 0.5rem;
  color: var(--c-fg-mute, #707582);
  font-weight: 600;
}
.page-toc ul {
  list-style: none;
  padding: 0;
  margin: 0;
}
.page-toc li { margin: 0.2rem 0; }
.page-toc a {
  color: var(--c-fg-soft, #4d566b);
  text-decoration: none;
  line-height: 1.45;
  display: block;
  padding: 0.08rem 0;
}
.page-toc a:hover { color: var(--c-accent, #3865ff); }
.page-toc ul ul {
  padding-left: 0.9rem;
  font-size: 0.84rem;
}

@media (max-width: 1023px) {
  .page-with-toc { grid-template-columns: 1fr; }

  .page-toc {
    position: static;
    max-height: none;
    border-left: none;
    padding-left: 0;
    border-top: 1px solid var(--c-border, #d8dee9);
    padding-top: 1.2rem;
    margin-top: 2rem;
  }
}

.page-pager {
  margin: 3rem 0 1rem;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
  padding-top: 1.6rem;
  border-top: 1px solid var(--c-border, #d8dee9);
}
.page-pager > div { min-width: 0; }
.page-pager a {
  display: block;
  padding: 0.9rem 1.1rem;
  border: 1px solid var(--c-border, #d8dee9);
  border-radius: 8px;
  text-decoration: none;
  color: var(--c-fg, #1a2230);
  background: var(--c-bg-elev, #fff);
  font-size: 0.94rem;
  line-height: 1.5;
}
.page-pager a:hover {
  border-color: var(--c-accent, #3865ff);
  color: var(--c-accent, #3865ff);
}
.page-pager__next { text-align: right; }
.page-pager__prev::before { content: "← "; color: var(--c-fg-mute, #707582); }
.page-pager__next::after  { content: " →"; color: var(--c-fg-mute, #707582); }
