/* ==========================================================================
   ehrhart.net — site styles
   One stylesheet for every page. Colours live in the "theme" blocks just below;
   a page picks its theme with   theme: light | alpine | aquatic   in its page file.
   ========================================================================== */

/* ---- fonts (self-hosted, SIL Open Font License) ---- */
@font-face{font-family:"Shippori Mincho";font-weight:400;font-style:normal;font-display:swap;src:url(fonts/shippori-mincho-latin-400-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Shippori Mincho";font-weight:500;font-style:normal;font-display:swap;src:url(fonts/shippori-mincho-latin-500-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Shippori Mincho";font-weight:600;font-style:normal;font-display:swap;src:url(fonts/shippori-mincho-latin-600-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Shippori Mincho";font-weight:400;font-style:normal;font-display:swap;src:url(fonts/shippori-mincho-latin-ext-400-normal.woff2) format("woff2");unicode-range:U+0100-02AF,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Shippori Mincho";font-weight:500;font-style:normal;font-display:swap;src:url(fonts/shippori-mincho-latin-ext-500-normal.woff2) format("woff2");unicode-range:U+0100-02AF,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Shippori Mincho";font-weight:600;font-style:normal;font-display:swap;src:url(fonts/shippori-mincho-latin-ext-600-normal.woff2) format("woff2");unicode-range:U+0100-02AF,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Zen Kaku Gothic New";font-weight:400;font-style:normal;font-display:swap;src:url(fonts/zen-kaku-gothic-new-latin-400-normal.woff2) format("woff2")}
@font-face{font-family:"Zen Kaku Gothic New";font-weight:500;font-style:normal;font-display:swap;src:url(fonts/zen-kaku-gothic-new-latin-500-normal.woff2) format("woff2")}
@font-face{font-family:"Zen Kaku Gothic New";font-weight:700;font-style:normal;font-display:swap;src:url(fonts/zen-kaku-gothic-new-latin-700-normal.woff2) format("woff2")}
/* just the two characters 坂上 (Sakaue), cut from the same typefaces, so the family name looks identical on every device */
@font-face{font-family:"Shippori Mincho";font-weight:400;font-style:normal;font-display:swap;src:url(fonts/shippori-mincho-sakaue-400.woff2) format("woff2");unicode-range:U+4E0A,U+5742}
@font-face{font-family:"Shippori Mincho";font-weight:500;font-style:normal;font-display:swap;src:url(fonts/shippori-mincho-sakaue-500.woff2) format("woff2");unicode-range:U+4E0A,U+5742}
@font-face{font-family:"Zen Kaku Gothic New";font-weight:500;font-style:normal;font-display:swap;src:url(fonts/zen-kaku-gothic-new-sakaue-500.woff2) format("woff2");unicode-range:U+4E0A,U+5742}

/* ---- themes ---- */
:root{
  --paper:#f6f2ea; --surface:#fffdf8; --ink:#1d1b18; --muted:#6f695e; --hair:#dcd4c4;
  --accent:#c4201a; --seal:#ec1c23; --on-photo:#fffdf8;
  --serif:"Shippori Mincho","Hiragino Mincho ProN","Yu Mincho",Georgia,"Times New Roman",serif;
  --sans:"Zen Kaku Gothic New","Hiragino Sans","Yu Gothic",system-ui,-apple-system,"Segoe UI",sans-serif;
  --wrap:1320px; --pad:clamp(16px,4vw,48px); --gap:8px; --row-max:600px; --pair-w:900px; --row-max-m:82vh;
  --header-h:64px;
  color-scheme:light;
}
html[data-theme="alpine"]{
  --paper:#0c1219; --surface:#121a23; --ink:#eef2f5; --muted:#8e9ba8; --hair:#222d39;
  --accent:#f2a65a; color-scheme:dark;
}
html[data-theme="aquatic"]{
  --paper:#03131a; --surface:#08202a; --ink:#e9f4f3; --muted:#7fa0a3; --hair:#10303a;
  --accent:#ff8d5e; color-scheme:dark;
}

/* on the dark pages the seal sits on a small disc of paper, like a stamp */
html:not([data-theme="light"]) .brand img,html:not([data-theme="light"]) .footer-seal img,html:not([data-theme="light"]) .tp-home img{background:#f6f2ea;border-radius:50%;padding:2px}

/* ---- base ---- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--header-h) + 16px)}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.6;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}
html[data-theme="light"] body{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .35 0 0 0 0 .3 0 0 0 0 .2 0 0 0 .07 0'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23n)'/%3E%3C/svg%3E")}
img{max-width:100%;height:auto;display:block}
a{color:inherit}
h1,h2,h3{font-family:var(--serif);font-weight:500;line-height:1.12;margin:0;letter-spacing:-.005em}
p{margin:0}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
::selection{background:var(--accent);color:#fff}
.skip{position:absolute;left:-999px;top:8px;z-index:200;background:var(--ink);color:var(--paper);padding:10px 16px;border-radius:4px}
.skip:focus{left:8px}
.eyebrow{font-family:var(--sans);font-size:12px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.eyebrow a{text-decoration:none}
.eyebrow a:hover{color:var(--accent)}
.dot{display:inline-block;width:4px;height:4px;border-radius:50%;background:var(--accent);margin:0 .9em;vertical-align:middle}
.rule{display:block;width:44px;height:2px;background:var(--seal);margin:28px 0}

/* ---- header ---- */
.site-header{position:sticky;top:0;z-index:100;height:var(--header-h);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;
  padding:0 var(--pad);background:color-mix(in srgb,var(--paper) 84%,transparent);
  -webkit-backdrop-filter:saturate(1.4) blur(14px);backdrop-filter:saturate(1.4) blur(14px);
  border-bottom:1px solid transparent;transition:border-color .3s}
.site-header.scrolled{border-bottom-color:var(--hair)}
.brand{display:inline-flex;align-items:center;gap:12px;text-decoration:none;justify-self:start}
.brand img{width:34px;height:34px;transition:transform .5s cubic-bezier(.2,.7,.2,1)}
.brand:hover img{transform:rotate(-8deg) scale(1.06)}
.brand span{font-family:var(--serif);font-size:19px;letter-spacing:.06em}
.header-title{font-family:var(--serif);font-size:17px;letter-spacing:.02em;opacity:0;transform:translateY(6px);transition:opacity .35s,transform .35s;white-space:nowrap}
.site-header.past-hero .header-title{opacity:1;transform:none}
.topics-btn{justify-self:end;display:inline-flex;align-items:center;gap:10px;background:none;border:1px solid var(--hair);color:inherit;
  border-radius:999px;padding:9px 16px 9px 18px;font:500 12px/1 var(--sans);letter-spacing:.18em;text-transform:uppercase;cursor:pointer;
  transition:border-color .25s,background .25s,color .25s}
.topics-btn:hover{border-color:var(--ink)}
.topics-btn .ic{display:inline-flex}
.topics-btn .ic-close{display:none}
.topics-btn[aria-expanded="true"] .ic-open{display:none}
.topics-btn[aria-expanded="true"] .ic-close{display:inline-flex}

/* ---- topics panel ---- */
.topics-panel{position:fixed;inset:var(--header-h) 0 0 0;z-index:90;background:var(--paper);overflow:auto;
  opacity:0;visibility:hidden;transition:opacity .3s,visibility .3s}
.topics-panel.open{opacity:1;visibility:visible}
.topics-panel-in{max-width:var(--wrap);margin:0 auto;padding:clamp(24px,5vw,64px) var(--pad) 64px}
.topics-panel ul{list-style:none;margin:24px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:4px 40px}
.topics-panel li a{display:grid;grid-template-columns:96px 1fr;grid-template-rows:auto auto;column-gap:20px;align-items:center;padding:14px 0;
  border-bottom:1px solid var(--hair);text-decoration:none;opacity:0;transform:translateY(10px);transition:opacity .45s,transform .45s}
.topics-panel.open li a{opacity:1;transform:none}
.topics-panel.open li:nth-child(n+2) a{transition-delay:.03s}
.topics-panel.open li:nth-child(n+4) a{transition-delay:.06s}
.topics-panel.open li:nth-child(n+7) a{transition-delay:.09s}
.tp-thumb{grid-row:1 / span 2;width:96px;aspect-ratio:3/2;overflow:hidden;border-radius:2px;background:var(--hair)}
.tp-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .6s}
.tp-name{font-family:var(--serif);font-size:24px;line-height:1.15;align-self:end;transition:color .2s}
.tp-count{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);align-self:start;margin-top:4px}
.topics-panel li a:hover .tp-name,.topics-panel li a[aria-current] .tp-name{color:var(--accent)}
.topics-panel li a:hover img{transform:scale(1.06)}
.tp-home{margin-top:36px}
.tp-home a{display:inline-flex;gap:10px;align-items:center;text-decoration:none;font-size:13px;letter-spacing:.16em;text-transform:uppercase}
.tp-home a:hover{color:var(--accent)}
body.panel-open{overflow:hidden}

/* ---- layout ---- */
main{display:block}
main>section,main>figure,main>nav,main>p{max-width:var(--wrap);margin-inline:auto;padding-inline:var(--pad)}

/* ---- home hero ---- */
.home-hero{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:clamp(28px,5vw,80px);align-items:center;
  padding-block:clamp(28px,5vw,72px) clamp(40px,6vw,96px)}
.home-hero .seal{width:clamp(84px,9vw,132px);height:auto;margin-bottom:clamp(20px,3vw,36px);animation:stamp .9s cubic-bezier(.2,.8,.2,1) both .15s}
@keyframes stamp{0%{opacity:0;transform:scale(1.35) rotate(-10deg)}60%{opacity:1}100%{opacity:1;transform:none}}
.home-hero h1{font-size:clamp(44px,6vw,90px);font-weight:500;line-height:1.1;letter-spacing:-.015em}
.home-hero h1 .ln{display:block}
.home-hero h1 .ln[lang="ja"]{letter-spacing:.06em}
.home-hero h1 .reading{display:inline-block;margin-left:.9em;font-family:var(--sans);font-size:max(10px,.17em);font-weight:500;letter-spacing:.34em;text-transform:uppercase;color:var(--muted);vertical-align:middle;translate:0 -.35em}
.home-hero h1 .the{display:block;font-size:.34em;letter-spacing:.3em;text-transform:uppercase;font-family:var(--sans);font-weight:500;color:var(--muted);margin:0 0 .9em .12em}
.stats{font-size:13px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
.home-hero-photo{position:relative}
.home-hero-photo::before{content:"";position:absolute;inset:18px -18px -18px 18px;border:1px solid var(--seal);opacity:.55;border-radius:2px;pointer-events:none}
.hero-photo{position:relative;display:block;aspect-ratio:var(--a, 4/3);overflow:hidden;border-radius:2px;background:var(--c,var(--hair));box-shadow:0 30px 60px -30px rgba(40,30,10,.45)}
.hero-photo img{width:100%;height:100%;object-fit:cover}

.family-top{padding-bottom:clamp(40px,6vw,96px)}

/* ---- section titles ---- */
.section-title{display:flex;align-items:center;gap:24px;font-size:clamp(24px,2.6vw,34px);margin:0 0 clamp(20px,2.4vw,32px)}
.section-title::after{content:"";flex:1;height:1px;background:var(--hair)}
.section-title:has(.section-link)::after{order:1}
.section-title .section-link{order:2}
.section-rule{height:1px;border:0;background:var(--hair);margin:0 0 clamp(24px,3vw,40px)}
.section-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 32px;margin-bottom:clamp(20px,2.4vw,32px)}
.section-head .section-title{flex:1 1 320px;margin-bottom:8px}
.section-head p{color:var(--muted);font-size:15px;flex:0 1 auto;margin-bottom:12px}

/* ---- topic cards (home) ---- */
.topics{padding-bottom:clamp(56px,8vw,120px)}
.topic-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(10px,1.6vw,24px)}
.topic-card{display:block;text-decoration:none}
.topic-img{display:block;aspect-ratio:3/2;overflow:hidden;border-radius:3px;background:var(--hair);position:relative}
.topic-img::after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06);border-radius:inherit}
.topic-card img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s cubic-bezier(.2,.7,.2,1)}
.topic-text{display:flex;flex-direction:column;gap:7px;padding:14px 2px clamp(10px,1.6vw,22px)}
.topic-title{font-family:var(--serif);font-size:clamp(19px,2vw,28px);line-height:1.15;font-weight:500;transition:color .25s}
.topic-count{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);display:flex;align-items:center;gap:10px;white-space:nowrap}
.topic-count::before{content:"";width:18px;height:2px;background:var(--seal);transition:width .4s cubic-bezier(.2,.7,.2,1)}
.topic-card:hover img,.topic-card:focus-visible img{transform:scale(1.05)}
.topic-card:hover .topic-title,.topic-card:focus-visible .topic-title{color:var(--accent)}
.topic-card:hover .topic-count::before,.topic-card:focus-visible .topic-count::before{width:40px}

/* ---- topic page hero ---- */
.page-hero{padding-block:clamp(36px,5.6vw,84px) clamp(32px,4.4vw,64px)}
.page-hero h1{font-size:clamp(42px,7.2vw,104px);margin-top:22px;letter-spacing:-.02em}
.page-hero .rule{margin:clamp(20px,2.6vw,34px) 0}
.tagline{font-family:var(--serif);font-size:clamp(18px,1.9vw,24px);line-height:1.5;color:var(--muted);max-width:46ch;text-wrap:balance}
.page-hero.has-side{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:clamp(24px,5vw,80px);align-items:center}
.hero-side{margin:0;width:min(340px,34vw,calc(var(--a,1) * 80vh))}
/* a very tall photo (the chess cabinet): sized by height so it stays within one screen, and centred in the right half */
.page-hero.tall-side{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.tall-side .hero-side{justify-self:center;width:min(100%,calc(var(--a,1) * min(840px,80vh)))}
/* first thing under the title is the narrower column of pairs (Aquatic): the photo's right edge lines up with it */
.page-hero.over-pairs{padding-right:max(var(--pad),calc((min(var(--wrap),100%) - var(--pair-w)) / 2))}
/* the same thin vermilion "shadow line" as the photo beside the Home title */
.hero-side{position:relative}
.hero-side::before{content:"";position:absolute;inset:18px -18px -18px 18px;border:1px solid var(--seal);opacity:.55;border-radius:2px;pointer-events:none}
.hero-side .ph{position:relative;display:block;border-radius:2px;box-shadow:0 30px 70px -30px rgba(0,0,0,.8)}
html[data-theme="light"] .hero-side .ph{box-shadow:0 30px 60px -30px rgba(40,30,10,.45)}

/* ---- photo rows ---- */
.gallery{padding-bottom:clamp(40px,6vw,88px)}
.row{display:flex;gap:var(--gap);margin:0 auto var(--gap);max-width:min(calc(var(--A) * var(--row-max)),var(--cap,9999px))}
.half{display:contents}
.row .ph,.row .phf{flex-grow:calc(var(--a) * 100);flex-shrink:1;flex-basis:0;min-width:0}
.phf{margin:0}
.phf>.ph{display:block}
.ph{position:relative;display:block;aspect-ratio:var(--a);overflow:hidden;border-radius:2px;background:var(--c,var(--hair));cursor:zoom-in}
.ph img{width:100%;height:100%;object-fit:cover;transition:transform .9s cubic-bezier(.2,.7,.2,1),opacity .5s}
.ph::after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06);border-radius:inherit;pointer-events:none;transition:background .3s}
@media (hover:hover){
  .ph:hover img{transform:scale(1.035)}
}
figcaption{font-size:13.5px;line-height:1.45;color:var(--muted);padding-top:9px}
figcaption a{color:var(--ink);text-decoration-color:var(--accent);text-underline-offset:3px}
figcaption a:hover{color:var(--accent)}

/* ---- lead photo (Alpine): the whole picture, never cropped, sized to fit on one screen ---- */
.lead{--lead-h:min(calc(100vh - var(--header-h) - 72px),900px);box-sizing:content-box;margin-block:0 clamp(40px,6vw,88px);
  max-width:min(calc(var(--wrap) - 2 * var(--pad)),calc(var(--a) * var(--lead-h)))}
main>.lead{max-width:min(calc(var(--wrap) - 2 * var(--pad)),calc(var(--a) * var(--lead-h)))}
.lead figcaption{font-family:var(--serif);font-size:clamp(15px,1.4vw,19px);color:var(--muted);padding-top:12px}

/* ---- the range chart (Alpine) ---- */
.range-wrap{padding-bottom:clamp(48px,7vw,104px)}
.range-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:12px 48px;align-items:end;margin-bottom:20px}
.range-head h2{font-size:clamp(26px,3vw,40px)}
.range-head p{color:var(--muted);font-size:15px;max-width:60ch}
.range-scroll{overflow-x:auto;border:1px solid var(--hair);border-radius:4px;background:var(--surface);scrollbar-width:thin}
.range{display:block;width:100%;min-width:1040px;height:auto}
.range{--sky0:#0c1219;--sky1:#1d2e42;--sky2:#3a4a5c;--haze:#0c1219;--haze-o:.55;--grid:#ffffff;--grid-o:.13;--rim:rgba(255,255,255,.42);--snow:#fbfdff;--snow-shade:#b9c9d9;--snow-line:transparent}
html[data-theme="light"] .range{--sky0:#fbf8f2;--sky1:#f1ebdf;--sky2:#e6dece;--haze:#f6f2ea;--haze-o:.7;--grid:#1d1b18;--grid-o:.16;--rim:rgba(29,27,24,.38);--snow:#fffefb;--snow-shade:#ece6d9;--snow-line:rgba(29,27,24,.45)}
.range .sky0{stop-color:var(--sky0)}.range .sky1{stop-color:var(--sky1)}.range .sky2{stop-color:var(--sky2)}
.range .hz0{stop-color:var(--haze);stop-opacity:0}.range .hz1{stop-color:var(--haze);stop-opacity:var(--haze-o)}
.range .grid line{stroke:var(--grid);stroke-opacity:var(--grid-o);stroke-dasharray:2 5}
.range .grid text,.range .sealbl{fill:var(--muted);font:500 10.5px var(--sans);letter-spacing:.08em}
.range .grid .gm{opacity:.7}
.range .sea{stroke:var(--hair);stroke-width:1}
.range .pk .m{fill:var(--f);stroke:var(--f);stroke-width:.5;stroke-linejoin:round;transition:fill .25s,stroke .25s}
.range .pk .ml{stroke:var(--rim);stroke-width:.7}
html[data-theme="light"] .range .pk .m{fill:var(--g);stroke:var(--g)}
html[data-theme="light"] .range .pk .ml{stroke:var(--rim)}
.range .pk .s{pointer-events:none;stroke:var(--snow-line);stroke-width:.5;stroke-linejoin:round}
.range .pk .sl{fill:var(--snow)}
.range .pk .sr{fill:var(--snow-shade)}
.range .lb text{fill:var(--ink);font:500 11px var(--sans);letter-spacing:.02em;transition:fill .2s}
.range .lb .el{fill:var(--muted);font-weight:400;transition:fill .2s}
.range a{cursor:pointer;text-decoration:none}
.range .pk.on .ml,html[data-theme="light"] .range .pk.on .ml{fill:var(--accent)}
.range .pk.on .mr,html[data-theme="light"] .range .pk.on .mr{fill:color-mix(in srgb,var(--accent) 62%,#000);stroke:color-mix(in srgb,var(--accent) 62%,#000)}
.range .lb.on text,.range .lb.on .el{fill:var(--accent)}
/* ---- castle map (Castles): Japan in ink wash, a sketch of every featured castle ---- */
.castle-map .range-scroll{background:var(--surface)}
.cmap{display:block;width:100%;min-width:1040px;height:auto;
  --paper:#fdfbf6;--land:#e9e2d4;--coast:rgba(29,27,24,.55);--stone:#d9d1c1;--dark:#3a3631;--roof:#8a847a;--roof-g:#7f8f80;--wash:#c9c1b1}
html:not([data-theme="light"]) .cmap{--paper:#e8e3d8;--land:#2b3440;--coast:rgba(255,255,255,.35);--stone:#5c5a55;--dark:#151515;--roof:#8a847a;--roof-g:#6f8a77;--wash:#6b6a66}
.cmap .land path{fill:var(--land);stroke:var(--coast);stroke-width:.8;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.cmap .land .lake{fill:var(--surface);stroke:var(--coast);stroke-width:.6}
.cmap .inset{fill:var(--surface);stroke:var(--hair)}
.cmap .cm-note{fill:var(--muted);font:500 10px var(--sans);letter-spacing:.14em;text-transform:uppercase}
.cmap .cm-ln{stroke:var(--ink);stroke-width:1;stroke-opacity:.55;transition:stroke .2s,stroke-opacity .2s,stroke-width .2s}
.cmap .cm-ln.on{stroke:var(--accent);stroke-opacity:1;stroke-width:1.6}
.cmap .cm-pin .pn{fill:var(--paper);stroke:var(--ink);stroke-width:1.4;transition:fill .2s,stroke .2s}
.cmap .cm-pin .pn-halo{fill:transparent}
.cmap .cm-pin:hover .pn,.cmap .cm-pin.on .pn{fill:var(--accent);stroke:var(--accent)}
.cmap .cm-pin.on .pn-halo{fill:var(--accent);fill-opacity:.15}
.cmap a{cursor:pointer;text-decoration:none;outline:none}
.cmap .hit{fill:transparent}
.cmap .dr{transition:filter .2s}
.cmap .wl{fill:var(--paper);stroke:var(--ink);stroke-width:.8;stroke-opacity:.8}
.cmap .wl-d{fill:var(--dark);stroke:var(--ink);stroke-width:.8}
.cmap .rf{fill:var(--roof);stroke:var(--ink);stroke-width:.8;stroke-opacity:.85;stroke-linejoin:round}
.cmap .rf-d{fill:var(--dark);stroke:var(--ink);stroke-width:.8;stroke-linejoin:round}
.cmap .rf-g{fill:var(--roof-g);stroke:var(--ink);stroke-width:.8;stroke-opacity:.85;stroke-linejoin:round}
.cmap .gb{fill:var(--paper);stroke:var(--ink);stroke-width:.8;stroke-opacity:.8;stroke-linejoin:round}
.cmap .wn{fill:var(--ink);fill-opacity:.55}
.cmap .wl-d + .wn,.cmap .bl{fill:var(--paper)}
.cmap .bl{stroke:var(--ink);stroke-width:.6}
.cmap .st{fill:var(--stone);stroke:var(--ink);stroke-width:.8;stroke-opacity:.7;stroke-linejoin:round}
.cmap .sl,.cmap .sl2{fill:none;stroke:var(--ink);stroke-width:.6;stroke-opacity:.45;stroke-linecap:round}
.cmap .gt{fill:var(--surface);stroke:var(--ink);stroke-width:.8;stroke-opacity:.7}
.cmap .sh{fill:none;stroke:var(--ink);stroke-width:1.2;stroke-linecap:round}
.cmap .nm{fill:var(--ink);font:500 17px var(--serif);transition:fill .2s}
.cmap .kj{font-size:12px;fill:var(--muted)}
.cmap .pl{fill:var(--muted);font:500 10px var(--sans);letter-spacing:.14em;text-transform:uppercase}
.cmap .gm text{fill:var(--muted);font:500 10px var(--sans);letter-spacing:.14em;text-transform:uppercase;transition:fill .2s}
.cmap .gm:hover text{fill:var(--accent)}
.cmap .cm-castle.on .nm{fill:var(--accent)}
.cmap .cm-castle.on .dr{filter:drop-shadow(0 0 6px color-mix(in srgb,var(--accent) 45%,transparent))}
.section-link{margin-left:auto;font:500 11px var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);text-decoration:none;white-space:nowrap;transition:color .2s}
.section-link:hover{color:var(--accent)}
.section-title small{font-size:.62em;color:var(--muted);font-weight:400;margin-left:.35em}
.range-hint{display:none;align-items:center;gap:10px;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-top:12px}

/* ---- peaks (Alpine) ---- */
.peaks{padding-bottom:clamp(40px,6vw,88px)}
.peak{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,780px);gap:clamp(20px,4vw,64px);align-items:start;
  padding-block:clamp(28px,3.4vw,48px);border-top:1px solid var(--hair);scroll-margin-top:calc(var(--header-h) + 8px)}
.peak:target{animation:flash 2.2s ease-out}
@keyframes flash{0%,35%{background:color-mix(in srgb,var(--accent) 12%,transparent)}100%{background:transparent}}
.peak-no{font-size:12px;letter-spacing:.2em;color:var(--accent);font-weight:500}
.peak-no i{font-style:normal;color:var(--muted);opacity:.7}
.peak h3{font-size:clamp(26px,2.7vw,38px);margin-top:10px}
.peak h3 small{display:block;font-size:.58em;font-weight:400;color:var(--muted);margin-top:6px;letter-spacing:.01em}
.elev{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 22px;font-family:var(--serif);font-size:clamp(30px,3.2vw,46px);line-height:1.1;margin-top:10px;font-feature-settings:"lnum","tnum"}
.elev small{font-family:var(--sans);font-size:12px;font-weight:500;letter-spacing:.18em;text-transform:uppercase;margin-left:6px;color:var(--muted)}
.elev .m{font-size:.62em;color:var(--muted)}
.spark{display:block;width:100%;max-width:230px;height:28px;margin-top:20px;fill:color-mix(in srgb,var(--muted) 42%,transparent)}
.spark .hi{fill:var(--accent)}
.also{font-size:14.5px;color:var(--muted);margin-top:16px}
.also b{color:var(--ink);font-weight:500}
.note{font-size:14.5px;line-height:1.65;color:var(--muted);margin-top:14px;max-width:52ch}
.note b{color:var(--ink);font-weight:500}
.diptych{display:flex;gap:4px;width:100%}
.diptych .phf{flex-grow:calc(var(--a) * 100);flex-shrink:1;flex-basis:0;min-width:0}
.diptych .summit figcaption,.diptych .right figcaption{text-align:right}

/* ---- altimeter: a to-scale ruler at the screen edge that follows the peak being viewed (wide screens) ---- */
.altimeter{display:none;position:fixed;right:26px;top:calc(50% + var(--header-h) / 2);translate:0 -50%;height:min(64vh,600px);width:16px;z-index:40;
  opacity:0;visibility:hidden;transition:opacity .45s,visibility .45s}
@media (min-width:1600px){.altimeter{display:block}}
.altimeter.show{opacity:1;visibility:visible}
.altimeter::before{content:"";position:absolute;right:0;top:0;bottom:0;width:1px;background:var(--hair)}
.altimeter a{position:absolute;right:0;top:var(--y);width:7px;height:1px;background:var(--muted);opacity:.55;transition:width .25s,background .25s,opacity .25s}
.altimeter a::after{content:"";position:absolute;inset:-3px 0 -3px -14px}
.altimeter a:hover,.altimeter a.on{width:16px;height:2px;margin-top:-.5px;background:var(--accent);opacity:1}
.alt-read{position:absolute;right:28px;top:var(--y,0%);translate:0 -50%;text-align:right;white-space:nowrap;transition:top .6s cubic-bezier(.2,.7,.2,1)}
.alt-read b{display:block;font:500 19px/1.1 var(--serif);color:var(--ink);font-feature-settings:"lnum","tnum"}
.alt-read b::after{content:" ft";font:500 10px var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.alt-read i{display:block;font:500 10.5px/1.3 var(--sans);font-style:normal;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:3px}
.alt-end{position:absolute;right:0;font:500 9.5px var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);opacity:.7;white-space:nowrap}
.alt-hi{bottom:calc(100% + 8px)}.alt-lo{top:calc(100% + 8px)}
/* the timeline (Hawaii) is the altimeter with months: every tick is a month with photos, its length the number of photos */
.altimeter.timeline a{width:calc(4px + var(--n,1) * .4px);height:1px}
.altimeter.timeline a:hover,.altimeter.timeline a.on{width:calc(6px + var(--n,1) * .4px);height:2px}
.altimeter.timeline{right:34px}
.timeline .alt-read{right:36px}
.timeline .alt-read b{font-size:17px}
.alt-year{position:absolute;left:calc(100% + 5px);top:var(--y);translate:0 -50%;font:500 9px/1 var(--sans);letter-spacing:.08em;color:var(--muted);opacity:.75}
.timeline .alt-read b::after{content:none}

/* ---- pairs + mosaic (Aquatic) ---- */
.pairs{padding-bottom:clamp(40px,6vw,88px)}
.pair{max-width:var(--pair-w);margin:0 auto clamp(36px,5vw,72px)}
.pair .left figcaption{font-family:var(--serif);font-size:clamp(17px,1.6vw,21px);color:var(--ink);line-height:1.35}
.pair figcaption{padding-top:12px}
.mosaic{--cols:7;--mg:3px;display:flex;flex-wrap:wrap;justify-content:center;gap:var(--mg)}
.mosaic .ph{flex:0 0 calc((100% - (var(--cols) - 1) * var(--mg)) / var(--cols));aspect-ratio:1;border-radius:0}

/* ---- pager + footer ---- */
.pager{display:grid;grid-template-columns:1fr 1fr;gap:clamp(10px,1.6vw,24px);padding-top:clamp(24px,4vw,56px)}
.pager-card{display:grid;grid-template-columns:minmax(0,42%) minmax(0,1fr);align-items:stretch;text-decoration:none;border:1px solid var(--hair);border-radius:3px;overflow:hidden;
  background:var(--surface);transition:border-color .3s}
.pager-card:hover{border-color:var(--muted)}
.pager-img{display:block;position:relative;overflow:hidden;background:var(--hair);min-height:clamp(104px,13vw,184px)}
.pager-card img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform 1.1s cubic-bezier(.2,.7,.2,1)}
.pager-card:hover img{transform:scale(1.05)}
.pager-text{display:flex;flex-direction:column;justify-content:center;gap:8px;padding:clamp(14px,2.4vw,36px)}
.pager-title{font-family:var(--serif);font-size:clamp(19px,2.3vw,32px);line-height:1.12;transition:color .25s}
.pager-card:hover .pager-title{color:var(--accent)}
.pager-arrow{display:inline-flex;margin-top:6px;color:var(--accent);transition:translate .3s}
.pager-card.next{grid-template-columns:minmax(0,1fr) minmax(0,42%);text-align:right}
.pager-card.next .pager-img{order:2}
.pager-card.next .pager-text{align-items:flex-end}
.pager-card.prev .pager-arrow{transform:scaleX(-1);align-self:flex-start}
.pager-card.next:hover .pager-arrow{translate:6px 0}
.pager-card.prev:hover .pager-arrow{translate:-6px 0}
.all-topics{text-align:center;padding-top:28px}
.all-topics a{font-size:12px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;text-decoration:none;border-bottom:1px solid var(--hair);padding-bottom:5px;transition:color .2s,border-color .2s}
.all-topics a:hover{color:var(--accent);border-color:var(--accent)}
.site-footer{margin-top:clamp(56px,8vw,120px);padding:clamp(36px,5vw,64px) var(--pad) 56px;border-top:1px solid var(--hair);text-align:center}
.footer-seal{display:inline-block;transition:transform .5s cubic-bezier(.2,.7,.2,1)}
.footer-seal:hover{transform:rotate(-8deg) scale(1.06)}
.footer-seal img{width:44px;height:44px}
.footer-name{font-family:var(--serif);font-size:20px;margin-top:14px}
.footer-small{font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--muted);margin-top:6px}

/* ---- back to top ---- */
.to-top{position:fixed;right:clamp(14px,2.4vw,28px);bottom:clamp(14px,2.4vw,28px);z-index:60;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;
  background:color-mix(in srgb,var(--paper) 88%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--hair);color:var(--ink);
  opacity:0;visibility:hidden;translate:0 10px;transition:opacity .3s,visibility .3s,translate .3s,border-color .25s,color .25s}
.to-top.show{opacity:1;visibility:visible;translate:0 0}
.to-top:hover{border-color:var(--accent);color:var(--accent)}
@media (min-width:1600px){.has-altimeter .to-top{right:auto;left:28px}}

/* ---- reveal on scroll (only when JavaScript is running) ---- */
.js .reveal{opacity:0;transform:translateY(18px);transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1)}
.js .reveal.in{opacity:1;transform:none}

/* ---- lightbox (PhotoSwipe) ---- */
.pswp{--pswp-bg:#0a0a0b;--pswp-placeholder-bg:#1a1a1c;--pswp-icon-color:#f4f1ea;--pswp-icon-color-secondary:#1a1a1c;--pswp-icon-stroke-color:#1a1a1c;font-family:var(--sans)}
.pswp__counter{font:500 12px/30px var(--sans);letter-spacing:.18em;margin-inline-start:20px;margin-top:15px;opacity:.8;text-shadow:none}
.pswp__cap{position:absolute;left:0;right:0;bottom:0;padding:28px 20px calc(18px + env(safe-area-inset-bottom));text-align:center;color:#f4f1ea;
  font-family:var(--serif);font-size:clamp(15px,1.5vw,18px);line-height:1.4;background:linear-gradient(180deg,rgba(10,10,11,0),rgba(10,10,11,.7));pointer-events:none;
  transition:opacity .25s}
.pswp__cap:empty{display:none}
.pswp--zoomed-in .pswp__cap{opacity:0}
.pswp__orig{display:flex;align-items:center;height:60px;padding:0 12px;color:#f4f1ea;font:500 11px/1 var(--sans);letter-spacing:.18em;text-transform:uppercase;text-decoration:none;opacity:.8}
.pswp__orig:hover{opacity:1;color:#fff}
.pswp__orig span{border:1px solid rgba(244,241,234,.45);border-radius:999px;padding:8px 13px}
.pswp__full{position:absolute;left:50%;top:18px;translate:-50% 0;padding:7px 14px;border-radius:999px;background:rgba(20,20,22,.78);color:#f4f1ea;
  font:500 11px/1 var(--sans);letter-spacing:.16em;text-transform:uppercase;opacity:0;transition:opacity .25s;pointer-events:none}
/* PhotoSwipe fades its own toolbar items in and out by opacity, so this note is switched with visibility instead */
.pswp .pswp__full{visibility:hidden}
.pswp.pswp--fetching .pswp__full{visibility:visible;opacity:1}
.pswp img{image-rendering:auto}

/* ---- responsive ---- */
@media (max-width:1000px){
  .mosaic{--cols:5}
  .home-hero{grid-template-columns:1fr;gap:36px}
  .home-hero-photo{order:-1}
  .home-hero-photo::before,.hero-side::before{inset:12px -10px -12px 10px}
  .home-hero .seal{width:72px;margin-bottom:18px}
  .peak{grid-template-columns:1fr;gap:20px}
  .spark{max-width:200px}
  .range-head{grid-template-columns:1fr}
  .range-hint{display:flex}
}
@media (max-width:700px){
  :root{--gap:5px;--header-h:56px}
  .header-title{display:none}
  .site-header{grid-template-columns:1fr auto}
  .topics-btn{padding:8px 12px 8px 14px}
  .row{display:block;max-width:none;margin-bottom:0}
  .half{display:flex;gap:var(--gap);margin:0 auto var(--gap);max-width:min(calc(var(--A) * var(--row-max-m)),var(--cap,9999px))}
  .topic-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .topic-img{aspect-ratio:4/3}
  .topic-count{letter-spacing:.14em}
  .topic-count::before{width:12px}
  .page-hero.has-side{grid-template-columns:1fr}
  .hero-side,.tall-side .hero-side{justify-self:start;width:min(300px,70vw,calc(var(--a,1) * 72vh))}
  .lead{padding-inline:0;max-width:none}
  main>.lead{max-width:none}
  .lead-ph{border-radius:0}
  .lead figcaption{padding-inline:16px}
  .diptych{flex-direction:column;gap:var(--gap)}
  .diptych .phf{flex:0 0 auto}
  .diptych .summit figcaption,.diptych .right figcaption{text-align:left}
  .diptych figcaption{padding-bottom:10px}
  .mosaic{--cols:3;--mg:2px}
  .pager{grid-template-columns:1fr}
  .tp-name{font-size:21px}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-delay:0s!important;transition-duration:.01ms!important}
  .js .reveal{opacity:1;transform:none}
}
@media print{
  .site-header,.topics-panel,.pager,.all-topics,.range-hint,.to-top,.altimeter{display:none!important}
  .js .reveal{opacity:1;transform:none}
  body{background:#fff}
}
