:root {
    --bg: #f4efe2;
    --ink: #2e2718;
    --ink2: #5b5238;
    --label: #6f6240; /* >=4.5:1 on --bg AND --card (was #8a7c56 at ~3.6:1) */
    --link: #4a5f8c;
    --rule: #d8caa2;
    --card: #fffaf0;
    --nav: #efe7d4;
    /* Route-map cartography (light-only pages). Sea = soft blue, land = warm
       cream, coast = blue-grey. Kept separate from the paper tokens above so
       the maps read as maps; retune here and every route map updates. */
    --map-sea: #d3e3ef;
    --map-land: #f7f1e1;
    --map-coast: #9db8c9;
    --map-muni: #cdbf9b;   /* light municipality borders (urban maps) */
    --map-pref: #8aa0b4;   /* heavier prefecture borders */
    --map-label: #33414f;  /* place-name labels + scale bar */
  }
  * { box-sizing: border-box; }
  html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
  body {
    margin: 0;
    background: var(--bg);
    color: var(--ink);
    font: 17px/1.6 "Iowan Old Style", "Palatino Linotype", Georgia, serif;
    padding: 0 0 64px;
  }
  a { color: var(--link); }

  /* Site masthead — large logo (back to the live map) + section menu beneath.
     Non-sticky, so the in-article sticky ToC never has to clear it. */
  .site-header {
    background: var(--nav); border-bottom: 1px solid var(--rule);
    padding: 22px 20px 0;
    display: flex; flex-direction: column; align-items: center; text-align: center;
  }
  .hdr-logo { display: inline-block; line-height: 0; }
  .hdr-logo img { height: 52px; width: auto; display: block; }
  @media (max-width: 560px) { .hdr-logo img { height: 38px; } }
  .site-menu {
    display: flex; flex-wrap: wrap; justify-content: center; gap: 4px;
    padding: 14px 0 12px;
  }
  .hdr-link {
    font: 600 13px/1 system-ui, -apple-system, "Segoe UI", sans-serif;
    text-transform: uppercase; letter-spacing: 0.07em;
    text-decoration: none; color: var(--ink2);
    padding: 9px 15px; border-radius: 8px;
  }
  .hdr-link:hover { background: var(--card); color: var(--link); }
  /* Masthead search — a plain GET to /articles/?q=…, which the hub already
     reads on load, so it works with scripting disabled. */
  .hdr-search { display: inline-flex; align-items: center; margin-left: 6px; }
  .hdr-search input {
    font: 13px/1.2 system-ui, -apple-system, "Segoe UI", sans-serif;
    color: var(--ink); background: var(--card);
    border: 1px solid var(--rule); border-radius: 999px;
    padding: 7px 14px; width: 170px; transition: width 0.15s ease;
  }
  .hdr-search input:focus { outline: 2px solid var(--link); outline-offset: 1px; border-color: var(--link); width: 230px; }
  @media (max-width: 560px) { .hdr-search input { width: 128px; } .hdr-search input:focus { width: 160px; } }
  /* Language toggle (EN · 日本語) in the masthead */
  .lang-toggle { margin-top: 8px; font: 600 12px/1 system-ui, -apple-system, "Segoe UI", sans-serif; letter-spacing: 0.04em; }
  .lang-toggle .lang-cur { color: var(--ink); }
  .lang-toggle .lang-alt { color: var(--label); text-decoration: none; }
  .lang-toggle .lang-alt:hover { color: var(--link); text-decoration: underline; }
  .lang-toggle .lang-sep { color: var(--rule); margin: 0 7px; }

  main { max-width: 1140px; margin: 0 auto; padding: 0 24px; }
  header.page { padding: 36px 0 4px; } /* index + static pages; articles use .a-head */
  .eyebrow {
    font: 600 12px/1.4 system-ui, -apple-system, "Segoe UI", sans-serif;
    letter-spacing: 0.09em; text-transform: uppercase; color: var(--label);
    margin: 0 0 10px;
  }
  .ey-sep { margin: 0 7px; color: var(--rule); }
  h1 { font-size: clamp(33px, 4.2vw, 42px); line-height: 1.1; margin: 0 0 6px; font-weight: 700; letter-spacing: -0.01em; }
  .name-ja { font-size: 20px; color: var(--ink2); margin: 0 0 4px; }
  .lead { font-size: 18px; margin: 14px 0 8px; max-width: 70ch; }
  p { margin: 0 0 16px; }

  /* ===== Article shell v2 =====
     One grid for the whole article. Title, standfirst, hero, prose, timeline,
     and CTAs all live in column 1 (one shared left AND right edge — this is
     what fixes the old three-competing-right-edges misalignment); the rail
     (quick-facts infobox + ToC) occupies a named area spanning both rows, so
     its cell is full page height and the inner wrapper can stay sticky for the
     entire scroll (the old layout's sticky died after ~one viewport because
     its cell was only as tall as the infobox itself). On small screens the
     areas restack: head → rail (compact facts + chip ToC) → body. */
  .article-grid { display: grid; grid-template-columns: minmax(0, 1fr); grid-template-areas: "head" "rail" "body"; column-gap: 48px; }
  .a-head { grid-area: head; padding: 34px 0 0; }
  .a-rail { grid-area: rail; min-width: 0; margin-top: 24px; }
  .a-body { grid-area: body; min-width: 0; }
  @media (min-width: 880px) {
    .article-grid { grid-template-columns: minmax(0, 1fr) 300px; grid-template-areas: "head rail" "body rail"; }
    .a-rail { margin-top: 0; }
    .a-rail-in { position: sticky; top: 18px; padding-top: 34px; }
  }
  .a-head .lead {
    font-size: 19px; line-height: 1.7; color: var(--ink);
    margin: 18px 0 0; padding-bottom: 28px; border-bottom: 1px solid var(--rule);
  }
  .toc {
    border: 1px solid var(--rule); border-radius: 10px; background: var(--card);
    padding: 12px 14px; font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
  }
  .toc-h {
    font: 600 11px/1.4 system-ui, sans-serif; text-transform: uppercase;
    letter-spacing: 0.09em; color: var(--label); margin: 0 0 8px;
  }
  .toc ul { list-style: none; margin: 0; padding: 0; }
  .toc li { margin: 0 0 4px; }
  .toc a {
    display: block; padding: 5px 8px; border-radius: 6px;
    font-size: 14px; text-decoration: none; color: var(--ink2);
  }
  .toc a:hover { background: rgba(74,95,140,0.08); color: var(--link); }
  .toc a.active { background: rgba(74,95,140,0.1); color: var(--link); font-weight: 600; }
  /* Small screens: the ToC becomes a horizontal "on this page" chip row */
  @media (max-width: 879px) {
    .toc ul { display: flex; flex-wrap: wrap; gap: 7px; }
    .toc li { margin: 0; }
    .toc a { border: 1px solid var(--rule); border-radius: 999px; padding: 6px 12px; font-size: 13px; background: var(--bg); }
  }

  .sections { min-width: 0; }
  /* Collapsible sections, mobile-Wikipedia style: each section is a native
     <details> whose <summary> carries the encyclopedia h2 (serif, hairline
     rule). The lead, hero, and quick facts stay always-visible above; the
     named sections (History/Timeline/Sources/Gallery) start collapsed and
     expand on tap/click — no JS required to operate, content stays in the
     served HTML (Cmd 6/8), and the ToC/print scripts auto-expand as needed. */
  .section { margin: 0; }
  details.section > summary { list-style: none; cursor: pointer; }
  details.section > summary::-webkit-details-marker { display: none; }
  details.section > summary:hover h2.sec-title { color: var(--link); }
  details.section > summary:focus-visible { outline: 2px solid var(--link); outline-offset: 2px; border-radius: 4px; }
  h2.sec-title {
    font: 700 24px/1.3 "Iowan Old Style", "Palatino Linotype", Georgia, serif;
    color: var(--ink); margin: 42px 0 0; padding-bottom: 8px;
    border-bottom: 1px solid var(--rule); scroll-margin-top: 24px;
    position: relative; padding-right: 36px;
  }
  h2.sec-title::after {
    content: "▸"; position: absolute; right: 8px; top: 4px;
    font-size: 17px; color: var(--label);
  }
  details.section[open] > summary h2.sec-title::after { content: "▾"; color: var(--ink2); }
  .section:first-child > summary h2.sec-title { margin-top: 30px; }
  .sec-body { padding-top: 14px; }
  .sections p { max-width: 70ch; line-height: 1.7; }
  .sec-body > p, .sec-body > ul { margin-top: 0; }
  .sec-body > :last-child { margin-bottom: 26px; }

  /* Timeline — year pill + a continuous vertical rail along the event text */
  ul.events { list-style: none; margin: 10px 0 0; padding: 0; }
  ul.events li { display: grid; grid-template-columns: 66px minmax(0, 1fr); }
  ul.events li .yr {
    font: 700 14px/1 system-ui, -apple-system, "Segoe UI", sans-serif;
    font-variant-numeric: tabular-nums; color: var(--ink2);
    background: var(--card); border: 1px solid var(--rule); border-radius: 8px;
    padding: 7px 0 6px; text-align: center; height: fit-content;
  }
  ul.events li .ev {
    font-size: 16px; line-height: 1.65; color: var(--ink);
    border-left: 2px solid var(--rule); margin-left: 16px;
    padding: 5px 0 26px 18px;
  }
  ul.events li:last-child .ev { padding-bottom: 8px; }
  .sources ul { list-style: none; margin: 0; padding: 0; }
  .sources a { color: var(--link); }
  .sources li { margin-bottom: 6px; }
  .ja-history p { color: var(--ink2); }
  .src-note { font: 13px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; color: var(--label); margin-top: 6px; }

  /* Lines index page */
  .index-jump { margin: 18px 0 8px; font-family: system-ui, -apple-system, "Segoe UI", sans-serif; }
  .index-jump ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
  .index-jump a {
    display: inline-block; padding: 6px 12px; border: 1px solid var(--rule); border-radius: 999px;
    background: var(--card); text-decoration: none; color: var(--ink2); font-size: 13px;
  }
  .index-jump a:hover { border-color: var(--link); color: var(--link); }
  .grp-count { font-variant-numeric: tabular-nums; color: var(--label); font-size: 0.82em; font-weight: 600; }
  .line-group { margin: 28px 0 0; scroll-margin-top: 70px; }
  .line-group h2 {
    font: 600 13px/1.4 system-ui, -apple-system, "Segoe UI", sans-serif;
    letter-spacing: 0.08em; text-transform: uppercase; color: var(--label);
    margin: 0 0 10px; padding-bottom: 6px; border-bottom: 1px solid var(--rule);
  }
  .line-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr; gap: 0; }
  @media (min-width: 620px) { .line-list { grid-template-columns: 1fr 1fr; column-gap: 24px; } }
  .line-list a {
    display: flex; align-items: baseline; gap: 8px; padding: 9px 8px; border-radius: 7px;
    text-decoration: none; color: var(--ink); border-bottom: 1px solid rgba(216,202,162,0.45);
  }
  .line-list a:hover { background: rgba(74,95,140,0.07); }
  .li-en { font-weight: 600; }
  .li-ja { color: var(--label); font-size: 13px; }

  .backlink {
    display: inline-block; margin-top: 28px; padding: 10px 16px;
    background: var(--card); border: 1px solid var(--rule); border-radius: 8px;
    color: var(--link); text-decoration: none; font-weight: 600;
    font-family: system-ui, -apple-system, "Segoe UI", sans-serif; font-size: 15px;
  }
  .backlink:hover { border-color: var(--link); }

  /* Mini route map under the quick facts (line articles) */
  .mini-map { margin: 0 0 16px; border: 1px solid var(--rule); border-radius: 10px; background: var(--card); overflow: hidden; }
  .mini-map svg { display: block; width: 100%; height: auto; background: #fdf9ee; }
  .mini-map figcaption {
    font: 600 10.5px/1.4 system-ui, -apple-system, "Segoe UI", sans-serif;
    text-transform: uppercase; letter-spacing: 0.07em; color: var(--label);
    padding: 7px 12px; border-top: 1px solid var(--rule);
  }

  /* Related-articles pill row (nav between articles, outside the sections) */
  .related { margin-top: 34px; }
  .rel-h {
    font: 700 11px/1.4 system-ui, -apple-system, "Segoe UI", sans-serif;
    text-transform: uppercase; letter-spacing: 0.09em; color: var(--label); margin: 0 0 10px;
  }
  .related ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
  .related a {
    display: inline-flex; align-items: baseline; gap: 8px;
    border: 1px solid var(--rule); background: var(--card); border-radius: 999px;
    padding: 8px 14px; text-decoration: none;
  }
  .related a:hover { border-color: var(--link); }
  .rel-name { font: 600 14px/1.2 system-ui, -apple-system, "Segoe UI", sans-serif; color: var(--ink); }
  .rel-type { font: 600 10px/1 system-ui, -apple-system, "Segoe UI", sans-serif; text-transform: uppercase; letter-spacing: 0.05em; color: var(--label); }

  /* Article-end call-to-action row (primary = live map / hub, ghost = index) */
  .cta-row { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 36px; }
  .btn-primary, .btn-ghost {
    display: inline-block; padding: 11px 18px; border-radius: 9px;
    text-decoration: none; font-weight: 600; font-size: 15px;
    font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
  }
  .btn-primary { background: var(--link); border: 1px solid var(--link); color: #fffaf0; }
  .btn-primary:hover { background: #3e5179; }
  .btn-ghost { background: var(--card); border: 1px solid var(--rule); color: var(--link); }
  .btn-ghost:hover { border-color: var(--link); }
  footer.page {
    margin-top: 40px; padding-top: 16px; border-top: 1px solid var(--rule);
    font: 13px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; color: var(--label);
  }

  /* Multiple nav links group on the right */
  .nav-links { display: flex; align-items: center; gap: 8px; }

  /* Quick-facts infobox (sidebar; every value from verified fields) */
  .infobox {
    border: 1px solid var(--rule); border-top: 3px solid var(--link);
    border-radius: 10px; background: var(--card);
    padding: 13px 16px 5px; margin-bottom: 16px;
    font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
  }
  .infobox .ib-h {
    font: 700 11px/1.4 system-ui, sans-serif; text-transform: uppercase;
    letter-spacing: 0.09em; color: var(--label); margin: 0 0 2px;
  }
  /* No column gap: the dt's right padding carries the spacing instead, so the
     per-row hairline (border on both cells) reads as one continuous line. */
  .infobox dl { margin: 0; display: grid; grid-template-columns: auto minmax(0, 1fr); }
  .infobox dt {
    color: var(--label); font-size: 11px; text-transform: uppercase;
    letter-spacing: 0.04em; white-space: nowrap; align-self: baseline;
    padding: 9px 14px 9px 0; border-bottom: 1px solid rgba(216,202,162,0.45);
  }
  .infobox dd {
    margin: 0; font-size: 14px; line-height: 1.5; color: var(--ink);
    padding: 8px 0 9px; border-bottom: 1px solid rgba(216,202,162,0.45);
  }
  .infobox dt:last-of-type, .infobox dd:last-of-type { border-bottom: none; }

  /* Rolling-stock index entries (name + ja + a meta sub-line) */
  .rs-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr; gap: 0; }
  @media (min-width: 620px) { .rs-list { grid-template-columns: 1fr 1fr; column-gap: 24px; } }
  .rs-list a {
    display: block; padding: 10px 8px; border-radius: 7px; text-decoration: none;
    color: var(--ink); border-bottom: 1px solid rgba(216,202,162,0.45);
  }
  .rs-list a:hover { background: rgba(74,95,140,0.07); }
  .rs-list .li-en { font-weight: 600; }
  .rs-list .li-ja { color: var(--label); font-size: 13px; margin-left: 6px; }
  .rs-meta {
    display: block; margin-top: 2px; color: var(--label); font-size: 12.5px;
    font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
  }

  /* Articles hub (/articles/) — category overview cards + full per-category lists */
  .cat-cards { display: grid; grid-template-columns: 1fr; gap: 14px; margin: 24px 0 10px; }
  @media (min-width: 640px) { .cat-cards { grid-template-columns: repeat(3, 1fr); } }
  .cat-card {
    display: block; border: 1px solid var(--rule); border-radius: 12px; background: var(--card);
    padding: 16px 18px; text-decoration: none; color: var(--ink);
  }
  .cat-card:hover { border-color: var(--link); }
  .cc-title { font: 700 19px/1.2 "Iowan Old Style", "Palatino Linotype", Georgia, serif; margin: 0; }
  .cc-count { font-variant-numeric: tabular-nums; color: var(--link); font-weight: 700; font-size: 0.85em; }
  .cc-desc {
    font: 13.5px/1.45 system-ui, -apple-system, "Segoe UI", sans-serif;
    color: var(--ink2); margin: 6px 0 0;
  }
  .see-all {
    font: 600 11px/1 system-ui, -apple-system, "Segoe UI", sans-serif;
    text-transform: uppercase; letter-spacing: 0.06em; text-decoration: none;
    color: var(--link); margin-left: 10px; white-space: nowrap;
  }
  .see-all:hover { text-decoration: underline; }

  /* Article photos — self-hosted Wikimedia Commons images (lead hero, figures
     interleaved with the prose, and the end gallery). All imgs carry explicit
     width/height attrs from the verified data so the box is reserved before
     the lazy load lands (no blank-box layout shift). */
  figure { margin: 0; }
  .lead-hero { margin: 28px 0 10px; border: 1px solid var(--rule); border-radius: 12px; overflow: hidden; background: var(--card); }
  .lead-hero img { display: block; width: 100%; height: auto; max-height: 460px; object-fit: cover; }
  .lead-hero figcaption { padding: 7px 12px; }
  .prose-fig { margin: 28px 0; border: 1px solid var(--rule); border-radius: 12px; overflow: hidden; background: var(--card); }
  .prose-fig img { display: block; width: 100%; height: auto; max-height: 440px; object-fit: cover; }
  .prose-fig figcaption { padding: 8px 12px; }
  .gallery .ph-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 14px; margin-top: 6px; }
  .ph { border: 1px solid var(--rule); border-radius: 10px; overflow: hidden; background: var(--card); }
  .ph img { display: block; width: 100%; height: 180px; object-fit: cover; background: var(--bg); }
  .ph figcaption { padding: 8px 11px; }
  .ph-cap { display: block; font: 400 12.5px/1.45 system-ui, -apple-system, "Segoe UI", sans-serif; color: var(--ink); margin-bottom: 3px; }
  .ph-credit { font: 400 11.5px/1.4 system-ui, -apple-system, "Segoe UI", sans-serif; color: var(--ink2); }
  .ph-credit a, .lead-hero figcaption a { color: var(--link); text-decoration: none; }
  .ph-credit a:hover, .lead-hero figcaption a:hover { text-decoration: underline; }
  /* Gallery: tap-to-enlarge thumbnails + photo count + intro note */
  .sec-count { font: 600 13px/1 system-ui, -apple-system, "Segoe UI", sans-serif; color: var(--label); letter-spacing: 0.02em; }
  .gallery-note { font: 13.5px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; color: var(--ink2); margin: 0 0 14px; }
  .ph-link { display: block; line-height: 0; cursor: zoom-in; }
  .ph-link img { transition: opacity 0.15s ease, transform 0.15s ease; }
  .ph-link:hover img { opacity: 0.92; }
  .ph-link:focus-visible { outline: 2px solid var(--link); outline-offset: 2px; }

  /* Static prose page (How it works). */
  .prose { max-width: 760px; }
  .prose h2 {
    font: 700 21px/1.3 "Iowan Old Style", "Palatino Linotype", Georgia, serif;
    color: var(--ink); margin: 30px 0 8px;
  }
  .prose p { color: var(--ink); margin: 0 0 12px; }
  .prose ul { margin: 0 0 14px; padding-left: 22px; }
  .prose li { color: var(--ink); margin: 5px 0; }
  .prose a { color: var(--link); }
  .badge-sch { color: #2f7d54; font-weight: 600; white-space: nowrap; }
  .badge-est { color: #9a6a16; font-weight: 600; white-space: nowrap; }
  /* Sample "Scheduled vs Estimated" status cards (How it works) */
  .status-cards { display: grid; grid-template-columns: 1fr; gap: 14px; margin: 6px 0 16px; }
  @media (min-width: 540px) { .status-cards { grid-template-columns: 1fr 1fr; } }
  .status-card { margin: 0; border: 1px solid var(--rule); border-radius: 12px; overflow: hidden; background: var(--card); }
  .status-card img { display: block; width: 100%; height: 150px; object-fit: cover; background: var(--bg); }
  .status-card figcaption { padding: 11px 13px 13px; }
  .status-card .sc-cap { display: block; margin-top: 6px; font: 13.5px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; color: var(--ink2); }

  /* Breadcrumb trail under the masthead */
  .breadcrumb { max-width: 1140px; margin: 0 auto; padding: 10px 24px 0; font: 13px/1.5 system-ui,-apple-system,"Segoe UI",sans-serif; color: var(--label); }
  .breadcrumb a { color: var(--link); text-decoration: none; }
  .breadcrumb a:hover { text-decoration: underline; }
  .bc-sep { margin: 0 7px; color: var(--rule); }
  .bc-here { color: var(--ink2); }

  /* Article keyword search (Articles hub) */
  .search-wrap { margin: 18px 0 4px; }
  #article-search { width: 100%; max-width: 560px; box-sizing: border-box; padding: 12px 15px; font: 16px/1.3 system-ui,-apple-system,"Segoe UI",sans-serif; color: var(--ink); background: var(--card); border: 1px solid var(--rule); border-radius: 10px; }
  #article-search:focus { outline: 2px solid var(--link); outline-offset: 1px; border-color: var(--link); }
  .search-hint { font: 13px/1.5 system-ui,sans-serif; color: var(--label); margin: 6px 0 0; }
  #search-results { list-style: none; margin: 14px 0 0; padding: 0; }
  #search-results li { margin: 0 0 2px; }
  #search-results a { display: block; padding: 10px 12px; border-radius: 8px; text-decoration: none; color: var(--ink); border-bottom: 1px solid rgba(216,202,162,0.45); }
  #search-results a:hover { background: rgba(74,95,140,0.07); }
  .sr-type { display: inline-block; font: 600 10px/1 system-ui,sans-serif; text-transform: uppercase; letter-spacing: 0.06em; color: var(--label); border: 1px solid var(--rule); border-radius: 999px; padding: 3px 7px; margin-left: 8px; vertical-align: middle; }
  .sr-ja { color: var(--label); font-size: 13px; margin-left: 6px; }
  .sr-snip { display: block; font: 13px/1.5 system-ui,sans-serif; color: var(--ink2); margin-top: 3px; }
  .sr-empty { color: var(--label); font: 14px/1.5 system-ui,sans-serif; padding: 10px 2px; }
  mark { background: #f5e6a8; color: inherit; padding: 0 1px; border-radius: 2px; }
  .hub-source-note { margin: 12px 0 0; padding-left: 12px; border-left: 3px solid var(--rule); font: 14px/1.6 system-ui,sans-serif; color: var(--ink2); max-width: 64ch; }
  /* While a query is active, hide the browse cards/lists so results stand alone */
  body.searching .hub-lead, body.searching .hub-source-note, body.searching .cat-cards, body.searching .browse-sections { display: none; }

  /* Japanese pages — a real Mincho stack (instead of per-glyph fallback to the
     OS gothic default) and the looser leading kanji needs. */
  html[lang="ja"] body { font-family: "Iowan Old Style", "Palatino Linotype", "Hiragino Mincho ProN", "Yu Mincho", "Noto Serif JP", Georgia, serif; }
  html[lang="ja"] h1 { line-height: 1.25; letter-spacing: 0; }
  html[lang="ja"] .a-head .lead, html[lang="ja"] .sections p { line-height: 1.95; }
  html[lang="ja"] ul.events li .ev { line-height: 1.85; }

  /* Print — the article body is the document; chrome stays on screen. */
  @media print {
    .site-header, .breadcrumb, .toc, .cta-row, .backlink, footer.page { display: none !important; }
    body { background: #fff; color: #000; font-size: 12pt; padding: 0; }
    .article-grid { display: block; }
    .a-rail { margin: 0 0 14pt; }
    .infobox { border: 1pt solid #999; border-radius: 0; }
    .sources a[href]::after { content: " (" attr(href) ")"; font-size: 90%; }
    .lead-hero, .prose-fig, .ph { border-color: #999; break-inside: avoid; }
  }