@import url('https://fonts.googleapis.com/css2?family=Inter+Tight:ital,wght@0,400;0,500;0,600;0,700;1,400&family=JetBrains+Mono:wght@400;500&display=swap');

:root {
  --paper: #f5f1ea; --paper-2: #ece6db; --paper-3: #e2dacf;
  --ink: #1d1d1b; --ink-2: #3a3a37; --ink-3: #52524c; --ink-4: #8a877f;
  --accent: #2f8a4f; --accent-2: #267a43;
  /* --link-muted is the resting underline color; on hover it rises to --ink. */
  --link-muted: #cac4b6;
  --code-bg: #e2dacf; --code-fg: #1d1d1b;
  --code-keyword: #7ec699; --code-string: #e6c07b; --code-comment: #6a6a65; --code-fn: #61afef;
  --radius: 8px;
  --footer-border: rgba(29,29,27,.15);
  --border-mid: rgba(29,29,27,.12);
}

/* ── Dark mode via JS toggle (data-theme="dark" on <html>) ── */
[data-theme="dark"] {
  --paper: #121110; --paper-2: #1b1917; --paper-3: #242220;
  --ink: #e8e4dc; --ink-2: #c4c0b8; --ink-3: #9a968e; --ink-4: #6a665e;
  --accent: #4aad6a; --accent-2: #3d9459;
  --link-muted: var(--ink-4);
  --code-bg: #2a2725; --code-fg: #e8e4dc;
  --footer-border: rgba(232,228,220,.12);
  --border-mid: rgba(232,228,220,.10);
}
[data-theme="dark"] .post-card { border-color: var(--ink-3); }

/* ── Base ── */
* { box-sizing: border-box; margin: 0; padding: 0; }
html { background: var(--paper); color: var(--ink); font-family: "Inter Tight", system-ui, sans-serif; -webkit-font-smoothing: antialiased; transition: background-color .2s, color .2s; }
body { max-width: 640px; margin: 0 auto; padding: 40px 20px 64px; }

/* Theme toggle button — lives in the nav */
.theme-toggle {
  background: none; border: 1px dashed var(--ink-4); border-radius: 4px;
  padding: 2px 6px; cursor: pointer; color: var(--ink-4);
  font-family: "JetBrains Mono", monospace; font-size: 10px; letter-spacing: .08em;
  margin-left: auto; transition: color .15s, border-color .15s, opacity .15s; line-height: 1.4;
  display: inline-flex; align-items: center; justify-content: center;
}
.theme-toggle:hover { color: var(--ink-2); border-color: var(--ink-2); }
.theme-toggle .theme-icon { display: block; }

/* Language toggle — sits in the nav, before .theme-toggle */
.lang-toggle {
  display: inline-flex; align-items: center; gap: 5px;
  border: 1px dashed var(--ink-4); border-radius: 4px;
  padding: 2px 7px; line-height: 1.4;
  font-family: "JetBrains Mono", monospace; font-size: 10px; letter-spacing: .08em;
  margin-left: auto;
}
.lang-toggle .lang-opt {
  background: none; border: none; padding: 0; cursor: pointer;
  font: inherit; letter-spacing: inherit; color: var(--ink-4);
  transition: color .15s;
  -webkit-tap-highlight-color: transparent;
}
.lang-toggle .lang-opt.active { color: var(--ink); }
.lang-toggle .lang-opt:hover:not(.disabled):not(.active) { color: var(--ink-2); }
.lang-toggle .lang-opt.disabled { cursor: default; color: var(--ink-4); text-decoration: line-through; text-decoration-thickness: 1px; }
.lang-toggle .lang-sep { color: var(--ink-4); opacity: .7; }

/* View toggle — resume/story switcher. Visual twin of .lang-toggle. */
.view-toggle {
  display: inline-flex; align-items: center; gap: 5px;
  border: 1px dashed var(--ink-4); border-radius: 4px;
  padding: 2px 7px; line-height: 1.4;
  font-family: "JetBrains Mono", monospace; font-size: 10px; letter-spacing: .08em;
  margin-left: auto;
}
.view-toggle .view-opt {
  background: none; border: none; padding: 0; cursor: pointer;
  font: inherit; letter-spacing: inherit; color: var(--ink-4);
  transition: color .15s;
  -webkit-tap-highlight-color: transparent;
}
.view-toggle .view-opt.active { color: var(--ink); }
.view-toggle .view-opt:hover:not(.active) { color: var(--ink-2); }
.view-toggle .view-sep { color: var(--ink-4); opacity: .7; }
.view-toggle + .theme-toggle { margin-left: 6px; }

/* Generic per-element language visibility. Pages can wrap variants in
   <span data-lang="en">…</span><span data-lang="es">…</span> and they'll
   swap based on <html data-lang>. Scoped under body so we don't hide the
   <html> element (which itself carries data-lang). */
body [data-lang="en"], body [data-lang="es"] { display: none; }
html[data-lang="en"] body [data-lang="en"],
html[data-lang="es"] body [data-lang="es"] { display: revert; }

/* ── Hub (index) ── */
.post-list { list-style: none; }
.post-card { border: 1.5px solid var(--ink); border-radius: var(--radius); padding: 16px 18px; margin-bottom: 12px; transition: background .15s, border-color .15s; }
.post-card:hover { background: var(--paper-2); }
.post-card a { text-decoration: none; color: inherit; display: block; }
.post-card .post-title { font-weight: 600; font-size: 16px; color: var(--ink); margin-bottom: 4px; display: flex; align-items: center; gap: 8px; }
.post-card .post-title .arrow { font-family: "JetBrains Mono", monospace; font-size: 14px; color: var(--ink-4); transition: transform .15s; }
.post-card:hover .post-title .arrow { transform: translateX(3px); }
.post-card .post-desc { font-size: 13px; color: var(--ink-2); line-height: 1.5; margin-top: 2px; }
.post-card .post-meta { font-family: "JetBrains Mono", monospace; font-size: 10px; color: var(--ink-4); margin-top: 8px; letter-spacing: .05em; text-transform: uppercase; display: flex; gap: 12px; }

.project-badge { display: inline-block; font-family: "JetBrains Mono", monospace; font-size: 10px; letter-spacing: .05em; text-transform: none; padding: 2px 7px; border-radius: 4px; border: 1px solid; }

/* ── Post article ── */
article { }
.post-header { margin-bottom: 24px; }
.post-header h1 { font-size: 28px; font-weight: 700; letter-spacing: -0.03em; line-height: 1.2; margin-top: 0; margin-bottom: 8px; }
.post-header .eyebrow { font-family: "JetBrains Mono", monospace; font-size: 10px; letter-spacing: .18em; text-transform: uppercase; color: var(--ink-3); margin-bottom: 24px; display: flex; align-items: center; gap: 10px; }
.post-header .lede { font-size: 15px; color: var(--ink-4); line-height: 1.6; margin: 0; }
.post-header .lede + .lede { margin-top: 12px; }
/* When the lede directly follows the H1 (no eyebrow in between, e.g. hub
   pages), restore the 24px gap that the eyebrow's margin-bottom normally
   contributes. */
.post-header h1 + .lede { margin-top: 24px; }

article h2 { font-size: 18px; font-weight: 600; margin-top: 36px; margin-bottom: 12px; letter-spacing: -0.01em; border-bottom: 1px solid var(--border-mid); padding-bottom: 6px; overflow: hidden; }

/* Resume pages — denser, PDF-inspired layout (data-accent="resume") */

/* Page header */
html[data-accent="resume"] .post-header { margin-bottom: 12px; }
html[data-accent="resume"] .post-header h1 { font-size: 24px; margin-bottom: 4px; }
html[data-accent="resume"] .post-header .lede { font-size: 13px; margin: 0; color: var(--ink-3); }

/* Top-level section header (EXPERIENCE, EDUCATION, INDEPENDENT BUILDING) */
html[data-accent="resume"] article h2 {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  margin-top: 20px;
  margin-bottom: 6px;
  padding-bottom: 3px;
  border-bottom: 1px solid var(--ink-3);
  display: block;
}

/* Company block: bold name + location, then nested roles */
html[data-accent="resume"] article .company { margin-top: 10px; }
html[data-accent="resume"] article .company-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 2px;
}
html[data-accent="resume"] article .company-header h3 {
  font-size: 13px;
  font-weight: 700;
  margin: 0;
}
html[data-accent="resume"] article .company-header .company-meta {
  font-size: 11px;
  font-weight: 600;
  color: var(--ink-3);
  white-space: nowrap;
  flex-shrink: 0;
}

/* Role under company */
html[data-accent="resume"] article .role { margin-top: 6px; }
html[data-accent="resume"] article .role-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 2px;
}
html[data-accent="resume"] article .role-header h4 {
  font-size: 12px;
  font-weight: 600;
  margin: 0;
}
html[data-accent="resume"] article .role-header .dates {
  font-size: 11px;
  font-weight: 400;
  color: var(--ink-3);
  letter-spacing: 0.04em;
  white-space: nowrap;
  flex-shrink: 0;
}

/* Story view (data-view="story") — title-case, slightly larger headings, looser rhythm */
html[data-view="story"] article h2 {
  font-size: 15px;
  font-weight: 700;
  letter-spacing: -0.005em;
  text-transform: none;
  margin-top: 26px;
  margin-bottom: 8px;
  padding-bottom: 5px;
}

/* Body density */
html[data-accent="resume"] article section { margin-bottom: 8px; }
html[data-accent="resume"] article ul { margin-top: 3px; margin-bottom: 6px; padding-left: 18px; }
html[data-accent="resume"] article ul li { margin: 2px 0; line-height: 1.45; font-size: 12.5px; }
html[data-accent="resume"] article p { margin: 4px 0; line-height: 1.5; font-size: 13px; }
article p { font-size: 15px; color: var(--ink-2); line-height: 1.7; margin-bottom: 16px; }
article p strong { color: var(--ink); font-weight: 600; }
/* Link styles live in one place — see `.link` further down. */
article ul, article ol { font-size: 15px; color: var(--ink-2); line-height: 1.7; margin-bottom: 16px; padding-left: 20px; }
article li { margin-bottom: 6px; }

/* ── Inline code ── */
article code { font-family: "JetBrains Mono", monospace; font-size: 13px; background: var(--code-bg); padding: 1px 5px; border-radius: 3px; color: var(--code-fg); transition: background .2s, color .2s; }

/* ── Code blocks ── */
article pre { background: var(--code-bg); color: var(--code-fg); border-radius: var(--radius); padding: 16px 18px; margin-top: 20px; margin-bottom: 20px; overflow-x: auto; -webkit-overflow-scrolling: touch; line-height: 1.6; }
article pre code { background: none; padding: 0; font-size: 12.5px; color: inherit; }

/* ── Site map / directory tree ── */
/* Shared: anchor styling for any .map-tree variant */
.map-tree { font-family: "JetBrains Mono", monospace; }
/* Link styles live in one place — see `.link` further down. */
.map-tree .tree-desc { color: var(--ink-4); font-size: 11px; }

/* Flat tree (ul/li with ::before tree chars) */
ul.map-tree { list-style: none; padding: 0; font-size: 13px; line-height: 2; }
ul.map-tree li { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
ul.map-tree li::before { content: '├── '; color: var(--ink-4); }
ul.map-tree li:last-child::before { content: '└── '; }

/* Hierarchical tree (literal box-drawing chars in a pre-wrapped block) */
div.map-tree { font-size: 13px; line-height: 2.4; color: var(--ink-4); white-space: pre; overflow-x: auto; -webkit-overflow-scrolling: touch; margin-bottom: 24px; }
div.map-tree + div.map-tree { margin-top: -12px; }

/* ── Callout box ── */
.callout { background: var(--paper-2); border-left: 3px solid var(--accent); border-radius: 0 var(--radius) var(--radius) 0; padding: 14px 16px; margin-bottom: 20px; font-size: 14px; color: var(--ink-2); line-height: 1.6; transition: background .2s; }

/* ── Source table ── */
.source-wrap { overflow-x: auto; margin: 0 0 24px; -webkit-overflow-scrolling: touch; }
.source-table { width: 100%; border-collapse: collapse; table-layout: fixed; font-size: 13px; }
.source-table th { font-family: "JetBrains Mono", monospace; font-size: 10px; letter-spacing: .05em; color: var(--ink-4); text-align: left; padding: 6px 10px; border-bottom: 1px solid var(--footer-border); white-space: nowrap; user-select: none; position: relative; }
.source-table .th-inner { display: inline-flex; align-items: center; gap: 4px; }
.source-table .col-resize { position: absolute; right: 0; top: 0; bottom: 0; width: 5px; cursor: col-resize; z-index: 2; }
.source-table .col-resize:hover, .source-table .col-resize.dragging { background: var(--accent); opacity: .4; }
.source-table.resizing { cursor: col-resize; user-select: none; }
.source-table.resizing td, .source-table.resizing th { pointer-events: none; }
.source-table.resizing .col-resize { pointer-events: auto; }
.source-table .th-sort { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; transition: color .15s; }
.source-table .th-sort:hover { color: var(--ink-2); }
.source-table th.sort-asc .th-sort::after,
.source-table th.sort-desc .th-sort::after { font-size: 8px; opacity: .6; margin-left: 2px; }
.source-table th.sort-asc .th-sort::after { content: "▲"; }
.source-table th.sort-desc .th-sort::after { content: "▼"; }
.th-filter-btn { background: none; border: 1px solid transparent; border-radius: 3px; padding: 2px 4px; cursor: pointer; color: var(--ink-4); opacity: .4; transition: opacity .15s, color .15s, border-color .15s, background .15s; display: inline-flex; align-items: center; }
.th-filter-btn:hover { opacity: 1; color: var(--ink-2); background: var(--paper-2); }
.th-filter-btn.filter-active { opacity: 1; color: var(--accent); border-color: var(--accent); background: rgba(47, 138, 79, .08); }
.th-dropdown { display: none; position: absolute; top: 100%; left: 0; z-index: 10; background: var(--paper); border: 1px solid var(--footer-border); border-radius: var(--radius); box-shadow: 0 4px 12px rgba(0,0,0,.12); padding: 4px 0; min-width: 120px; margin-top: 2px; }
[data-theme="dark"] .th-dropdown { box-shadow: 0 4px 12px rgba(0,0,0,.4); }
.th-dropdown.open { display: block; }
.fd-option { padding: 5px 12px; cursor: pointer; font-size: 12px; font-family: "JetBrains Mono", monospace; color: var(--ink-3); transition: background .1s; display: flex; align-items: center; gap: 6px; }
.fd-option:hover { background: var(--paper-2); }
.fd-option.fd-active { color: var(--ink); }
.fd-option.fd-active::before { content: "✓"; font-size: 10px; color: var(--accent); width: 12px; flex-shrink: 0; }
.source-table td { padding: 7px 10px; border-bottom: 1px solid var(--footer-border); color: var(--ink-2); vertical-align: middle; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.source-table .empty-cell { color: var(--ink-4); }
.source-table .cell-relation { font-size: 12px; }
.source-table .cell-children { }
.source-table .ref-page { display: inline; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; }
.source-table .cell-relation .ref-page { margin-right: 6px; }
.source-table tbody tr { transition: background .1s; }
.source-table tbody tr:hover { background: var(--paper-2); }
.source-readme { margin-top: 48px; padding-top: 32px; border-top: 1px solid var(--footer-border); }
.source-readme h2 { font-size: 18px; margin: 0 0 16px; }
.source-readme h3 { font-size: 14px; margin: 24px 0 8px; color: var(--ink-2); }
.source-readme p { font-size: 14px; color: var(--ink-2); line-height: 1.6; margin: 0 0 12px; }
.source-readme ul { font-size: 14px; color: var(--ink-2); line-height: 1.6; margin: 0 0 12px; padding-left: 20px; }
.source-readme code { font-family: "JetBrains Mono", monospace; font-size: 12px; background: var(--paper-2); padding: 1px 5px; border-radius: 3px; }
.pill { font-family: "JetBrains Mono", monospace; font-size: 11px; padding: 1px 7px; border-radius: 3px; white-space: nowrap; display: inline-block; line-height: 1.5; max-width: 100%; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; }
.pill-hub { background: rgba(139, 126, 200, .15); color: #7c6dbb; }
.pill-post { background: rgba(68, 147, 164, .15); color: #3d8a9c; }
.pill-link { background: rgba(180, 135, 80, .15); color: #a07840; }
.pill-resume { background: rgba(120, 160, 120, .15); color: #5a8a5a; }
.pill-en { background: rgba(100, 140, 180, .15); color: #5a7fa0; }
.pill-es { background: rgba(200, 155, 60, .15); color: #a08030; }
.pill-published { background: rgba(47, 138, 79, .15); color: #2f8a4f; }
.pill-default { background: rgba(140, 140, 140, .1); color: var(--ink-3); }
[data-theme="dark"] .pill-hub { background: rgba(139, 126, 200, .2); color: #a99be0; }
[data-theme="dark"] .pill-post { background: rgba(68, 147, 164, .2); color: #6abcd0; }
[data-theme="dark"] .pill-link { background: rgba(180, 135, 80, .2); color: #d0a860; }
[data-theme="dark"] .pill-resume { background: rgba(120, 160, 120, .2); color: #80b880; }
[data-theme="dark"] .pill-en { background: rgba(100, 140, 180, .2); color: #80aad0; }
[data-theme="dark"] .pill-es { background: rgba(200, 155, 60, .2); color: #d0b050; }
[data-theme="dark"] .pill-published { background: rgba(47, 138, 79, .25); color: #5cc47a; }
[data-theme="dark"] .pill-default { background: rgba(160, 160, 160, .15); }

/* ── Footer ── */
footer { margin-top: 48px; border-top: 1px solid var(--footer-border); padding-top: 16px; font-family: "JetBrains Mono", monospace; font-size: 9px; letter-spacing: .15em; text-transform: uppercase; color: var(--ink-4); display: flex; align-items: center; }
footer .footer-right { margin-left: auto; display: inline-flex; align-items: center; gap: 3px; text-transform: none; font-size: 9px; letter-spacing: .02em; color: var(--ink-4); text-decoration: none; transition: color .15s; }
footer .footer-right:hover { color: var(--ink-2); }
footer .footer-right svg { width: 10px; height: 10px; }
footer .email-text { font-family: "JetBrains Mono", monospace; font-size: 12px; color: var(--ink-4); letter-spacing: .02em; text-transform: none; }
footer .copy-btn { background: none; border: none; cursor: pointer; padding: 4px; border-radius: 4px; color: var(--ink-4); transition: color .15s; display: inline-flex; align-items: center; vertical-align: middle; margin-left: 6px; }
footer .copy-btn:hover { color: var(--ink-2); }
footer .copy-btn svg { width: 16px; height: 16px; }
footer .copy-btn .check { display: none; }
footer .copy-btn.copied .clipboard { display: none; }
footer .copy-btn.copied .check { display: block; color: var(--accent); }

/* ── AI disclosure ── */
.ai-disclosure { font-size: 12px; color: var(--ink-4); line-height: 1.6; padding-top: 32px; }

/* ── Floating inline-demo videos (mp4 bookmarks rendered by the editorial pipeline) ── */
.demo-float { float: right; width: 160px; margin: 36px 0 24px 32px; text-decoration: none; display: block; border-bottom: none; position: relative; overflow: hidden; border-radius: 12px; }
.demo-float-left { float: left; margin: 36px 32px 24px 0; }
/* When a demo-float-left immediately follows an h2, indent it slightly so the
   heading's full-width underline doesn't visually run into the video's edge. */
article h2 + .demo-float-left { margin-left: 16px; margin-top: 12px; }
.demo-float video { display: block; width: 100%; border-radius: 12px; box-shadow: 0 2px 16px hsla(38,30%,10%,.12), 0 1px 4px hsla(38,30%,10%,.08); }
[data-theme="dark"] .demo-float video { box-shadow: 0 2px 20px hsla(38,10%,5%,.5), 0 1px 6px hsla(38,10%,5%,.3); }
.demo-float .vid-dark { display: none; }
[data-theme="dark"] .demo-float .vid-light { display: none; }
[data-theme="dark"] .demo-float .vid-dark { display: block; }
.demo-float::after { content: ""; position: absolute; inset: 0; border-radius: 12px; pointer-events: none; border: 2px solid transparent; background: linear-gradient(135deg, #B65C3A, #D4900A, #F4A261) border-box; -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0); mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; opacity: 0.5; }
[data-theme="dark"] .demo-float::after { background: none; border-color: #D4900A; opacity: 0.5; }
@media (max-width: 500px) { .demo-float { width: calc(38% - 8px); margin: 20px 0 24px 20px; } .demo-float-left { margin: 20px 28px 24px 0; } }

/* ── Caribbean wallpaper for Óyeme-accented pages ── */
[data-accent="oyeme"] body::after { content: ""; position: fixed; inset: 0; pointer-events: none; z-index: -1; background-image: url("https://oyeme.app/patterns/caribbean-light.svg"); background-size: 2400px auto; background-repeat: repeat; opacity: 0.035; filter: brightness(0.65) saturate(1.4); }
[data-accent="oyeme"][data-theme="dark"] body::after { background-image: url("https://oyeme.app/patterns/caribbean-dark.svg"); opacity: 0.03; filter: none; }

/* ── Color system (per-page accent via data-accent on <html>) ── */
[data-accent="oyeme"]   { --accent: #B65C3A; --accent-2: #a04d2f; }
[data-accent="steve"]   { --accent: #c23b3b; --accent-2: #a83232; }
[data-accent="pbc"]     { --accent: #1f6490; --accent-2: #17557a; }
[data-theme="dark"][data-accent="oyeme"]   { --accent: #B65C3A; --accent-2: #a04d2f; }
[data-theme="dark"][data-accent="steve"]   { --accent: #e05252; --accent-2: #c94545; }
[data-theme="dark"][data-accent="pbc"]     { --accent: #6ec8d8; --accent-2: #5ab4c2; }

/* ── Site header (component-based layout) ── */
.site-header {
  display: flex;
  flex-wrap: nowrap;
  column-gap: 8px;
  align-items: center;
  margin-bottom: 40px;
  font-family: "JetBrains Mono", monospace;
  font-size: 10px;
  letter-spacing: .08em;
}
/* Link styles live in one place — see `.link` further down. */
.site-header .sep { color: var(--ink-4); opacity: .7; }

/* lang-toggle / theme-toggle / site-footer / view-toggle let their inner element flow into the parent flex */
lang-toggle, theme-toggle, site-footer, view-toggle { display: contents; }

/* site-nav fills remaining header space; segments shrink proportionally */
site-nav {
  display: flex;
  flex: 1 1 0%;
  align-items: baseline;
  column-gap: 8px;
  min-width: 0;
  margin-right: 12px;
  font-family: "JetBrains Mono", monospace;
  font-size: 10px;
  letter-spacing: .08em;
}

site-nav a, site-nav .crumb-leaf {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 2ch;
}
site-nav a { flex-shrink: 0; }
site-nav a:first-child { flex-shrink: 10; min-width: 6ch; }
site-nav .crumb-leaf { flex-shrink: 2; }
site-nav .sep { flex-shrink: 0; }

site-nav .brand-compact { display: none; }

/* Push lang-toggle / view-toggle to the right in the header flex row */
.site-header lang-toggle .lang-toggle { margin-left: auto; }
.site-header lang-toggle + theme-toggle .theme-toggle { margin-left: 6px; }
.site-header view-toggle .view-toggle { margin-left: auto; }
.site-header view-toggle + theme-toggle .theme-toggle { margin-left: 6px; }

@media (min-width: 700px) {
  body { max-width: 680px; padding: 56px 24px 80px; }
  .post-header h1 { font-size: 32px; }
  site-nav { flex: 0 1 auto; }
  site-nav a, site-nav .crumb-leaf { overflow: visible; white-space: normal; flex-shrink: 0; }
}

/* ── Mobile bump: all px font-sizes scaled ~15% on phones ──
   Values rounded to whole pixels. Larger sizes round down, smaller up. */
@media (max-width: 600px) {
  .theme-toggle,
  .lang-toggle,
  .site-header,
  site-nav { font-size: 11px; }
  .post-card .post-title { font-size: 18px; }
  .post-card .post-title .arrow { font-size: 16px; }
  .post-card .post-desc { font-size: 15px; }
  .post-card .post-meta { font-size: 11px; }
  .project-badge { font-size: 11px; }
  .post-header h1 { font-size: 32px; }
  .post-header .eyebrow { font-size: 11px; }
  .post-header .lede { font-size: 17px; }
  article h2 { font-size: 21px; }
  article p,
  article ul,
  article ol { font-size: 17px; }
  article code { font-size: 15px; }
  article pre code { font-size: 14px; }
  .map-tree .tree-desc { font-size: 13px; }
  ul.map-tree,
  div.map-tree { font-size: 15px; }
  .callout { font-size: 16px; }
  footer { font-size: 10px; }
  footer .email-text { font-size: 14px; }
  .ai-disclosure { font-size: 14px; }
}

/* ── Links ── one rule, every link. ────────────────────────────────────────────
   Existing anchors in the site-header, map-tree, and article body all inherit
   the same treatment via the grouped selectors below — no per-context styling.

   Default: text inherits container color; dashed underline at --link-muted,
            1px, offset 3px; skip-ink clears descenders.
   Hover:   underline rises to --ink-2 (higher contrast, closer to text color).
            Text never changes — the underline does the work. Both --link-muted
            and --ink-2 flip per theme, so the rise-to-more-contrast effect
            works in both modes.
*/
:where(article, .map-tree, .site-header) a {
  color: var(--ink-2);
  text-decoration: underline;
  text-decoration-style: dashed;
  text-decoration-color: var(--link-muted);
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  text-decoration-skip-ink: auto;
  transition: text-decoration-color .15s ease, color .15s ease;
}
/* Lede sits even more muted than body — let its links inherit --ink-4. */
:where(.lede) a { color: inherit; }

:where(article, .map-tree, .site-header) a:hover {
  text-decoration-color: var(--ink);
  color: var(--ink);
}
