@keyframes p-flash{from{background:rgba(23,21,15,.12)}to{background:transparent}}
@keyframes p-in{from{opacity:0}to{opacity:1}}

body[data-tab="photos"]{
  --paper:#fbfaf7;--ink:#17150f;--mute:#6b665c;--line:#e5e1d8;--ph:#e9e6df;--ease:cubic-bezier(.2,.8,.2,1);
  --bar:100px;--film:112px;--mw:340px;--top:calc(16px + var(--bar) + 12px);
  --serif:'Newsreader',Georgia,serif;--sans:'Hanken Grotesk',system-ui,sans-serif;
  background:var(--paper);color:var(--ink);font:15px/1.5 var(--sans);

  a{color:inherit}
  :focus-visible{outline:2px solid var(--ink);outline-offset:3px}
  .bar,.mosaic{background:rgba(251,250,247,.94);backdrop-filter:blur(8px);border:1px solid var(--line);box-shadow:0 10px 30px -18px rgba(23,21,15,.35)}
  .maplibregl-ctrl-attrib{font-size:10px}
  .maplibregl-ctrl-bottom-right{bottom:var(--film)} /* above the filmstrip */
  &.paged .maplibregl-ctrl-bottom-right{bottom:0}
  &.paged .maplibregl-ctrl-attrib:not(:hover,:focus-within) .maplibregl-ctrl-attrib-inner{display:none} /* the inset is small: credits on hover */

  /* the map shrinks into a corner inset above the filmstrip while a page is open */
  &.paged #map{inset:auto 16px calc(var(--film) + 16px) auto;width:360px;height:240px;border-radius:12px}
  &.paged #map{box-shadow:0 0 0 6px #fff,0 18px 40px -16px rgba(23,21,15,.45)}

  /* the tab bar sits in the top bar's first row, on the right */
  #tabs{top:27px;right:30px;background:#fff;border:1px solid var(--line);border-radius:99px;padding:3px;backdrop-filter:none;font-family:var(--sans)}
  #tabs a{color:var(--mute);border-radius:99px;font-weight:500;font-size:12.5px}
  #tabs a:hover{color:var(--ink)}
  #tabs a[aria-current]{background:var(--ink);color:#fff}

  .btn{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--ink);background:var(--ink);color:#fff;padding:8px 16px;font-weight:500;font-size:14px;line-height:1.2;border-radius:99px;text-decoration:none;transition:background .2s,color .2s}
  .btn:hover{background:#3a362c}
  .link{text-decoration:underline;text-underline-offset:3px;font-size:12px;color:var(--mute)}
  .link:hover{color:var(--ink)}

  /* ---------- top bar: title, trip chooser, legend (always visible, ruling 17) ---------- */
  .bar{position:fixed;top:16px;left:16px;right:16px;height:var(--bar);z-index:6;padding:10px 18px 12px;display:grid;grid-template-columns:auto auto 1fr;grid-template-rows:40px 1fr;align-items:center;column-gap:18px}
  .brand{margin:0;font:400 32px/1 var(--serif);letter-spacing:-.01em;white-space:nowrap}
  .brand i{font-size:23px;color:var(--mute)}
  #p-trips-btn{justify-self:start;font:italic 400 17px var(--serif);border:1px solid var(--line);background:#fff;border-radius:99px;padding:4px 14px}
  #p-trips-btn:hover,#p-trips-btn[aria-expanded=true]{border-color:var(--ink)}
  #p-trips{position:absolute;top:calc(100% + 12px);left:-1px;width:var(--mw);max-height:calc(100vh - var(--bar) - var(--film) - 56px);overflow:auto;margin:0;padding:6px 0;list-style:none;z-index:2;background:#fff;border:1px solid var(--line);box-shadow:0 18px 40px -16px rgba(23,21,15,.45);scrollbar-width:thin}
  #p-trips a{display:block;padding:10px 18px;text-decoration:none;border-bottom:1px solid var(--line)}
  #p-trips li:last-child a{border:0}
  #p-trips a:hover{background:var(--paper)}
  #p-trips b{display:block;font:500 17px/1.2 var(--serif)}
  #p-trips small{color:var(--mute);font-size:12px}
  .legend{grid-column:1/-1;display:flex;align-items:center;gap:12px;min-width:0}
  .lbl{margin:0;flex:none;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--mute)}
  .chips{display:flex;gap:6px;min-width:0;overflow-x:auto;scrollbar-width:none;padding:2px}
  .chip{flex:none;display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;border-radius:99px;padding:3px 10px 3px 8px;font-size:12.5px;transition:background .2s,color .2s}
  .chip .ic{color:var(--c);font-size:14px}
  .chip .n{font-size:11px;color:var(--mute)}
  .chip:hover{border-color:var(--ink)}
  .chip[aria-pressed=true]{background:var(--ink);color:#fff;border-color:var(--ink)}
  .chip[aria-pressed=true] .n{color:#d8d3c8}
  .chip.q{font-style:italic}

  /* ---------- the mosaic: a contact sheet of the places in view ---------- */
  .mosaic{position:fixed;left:16px;top:var(--top);bottom:calc(var(--film) + 16px);width:var(--mw);z-index:5;display:flex;flex-direction:column;padding:12px 14px 0}
  &.paged .mosaic{visibility:hidden}
  .count{margin:0 0 8px;font-size:12px;color:var(--mute)}
  .tiles{flex:1;min-height:0;overflow:auto;margin:0 -14px;padding:0 14px 14px;border-top:1px solid var(--line);scrollbar-width:thin}
  .more{display:block;width:100%;margin:10px 0 0;text-align:left;background:#fff;border:1px dashed var(--mute);padding:7px 10px;font-size:12.5px}
  .more:hover{border-color:var(--ink)}
  .empty{margin:0;padding:18px 0 4px;color:var(--mute);font:italic 400 17px/1.4 var(--serif)}
  .empty .btn{margin-top:10px;font:500 13px var(--sans)}
  .sheet{list-style:none;margin:10px 0 0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .sheet a{display:block;position:relative;text-decoration:none;border-bottom:4px solid var(--c);background:var(--ph)}
  .sheet .th{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;background:var(--ph)}
  .sheet .th.img-ph{color:var(--mute);font-size:11px}
  .sheet .nm{position:absolute;left:0;right:0;bottom:0;padding:18px 8px 5px;font:500 14px/1.15 var(--serif);color:#fff;background:linear-gradient(transparent,rgba(23,21,15,.78));text-shadow:0 1px 2px rgba(0,0,0,.4)}
  .sheet a:hover .th,.sheet a:focus-visible .th{filter:brightness(1.08)}

  /* ---------- the filmstrip: the route along the bottom ---------- */
  .film{position:fixed;left:0;right:0;bottom:0;height:var(--film);z-index:6;display:flex;background:rgba(251,250,247,.96);backdrop-filter:blur(8px);border-top:1px solid var(--line);box-shadow:0 -10px 30px -22px rgba(23,21,15,.35)}
  .sum{flex:0 0 200px;padding:12px 18px;border-right:1px solid var(--line);display:flex;flex-direction:column}
  .sum .ttl{font:italic 400 22px/1 var(--serif)}
  .sum p{margin:6px 0 0;font-size:12.5px;line-height:1.4;color:var(--mute)}
  .sum strong{color:var(--ink);font-weight:600}
  .sum .link{margin-top:auto;align-self:flex-start}
  .frames{flex:1;min-width:0;list-style:none;margin:0;padding:10px 14px;display:flex;align-items:flex-start;overflow-x:auto;scrollbar-width:thin}
  .frames>li{flex:none;display:flex;align-items:flex-start;border-radius:2px}
  .frames>li[draggable]{cursor:grab}
  .frames>li.moved .frame{animation:p-flash .6s ease-out}
  .frames>li.empty{align-self:center;max-width:520px;color:var(--mute);font:italic 400 18px/1.4 var(--serif)}
  .leg{align-self:center;padding:0 10px;margin-top:-18px;font-size:11px;color:var(--mute);white-space:nowrap}
  .frame{position:relative;width:124px}
  .frame .stop{display:block;width:100%;text-align:left}
  .frame .th{display:block;width:124px;height:62px;object-fit:cover;background:var(--ph);border-bottom:3px solid var(--c)}
  .frame .th.img-ph{font-size:10px;color:var(--mute)}
  .frame .nm{display:block;margin-top:5px;font-size:12px;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .frame .nm b{font-weight:600}
  .frame .ctl{position:absolute;top:4px;right:4px;display:flex;gap:2px;opacity:0;transition:opacity .2s}
  .frame:hover .ctl,.frame:focus-within .ctl{opacity:1}
  .frame .ctl button{width:22px;height:22px;background:rgba(255,255,255,.95);font-size:14px;line-height:22px}
  .frame .ctl button:hover{background:var(--ink);color:#fff}
  .frame .ctl button:disabled{opacity:.35;cursor:default;background:rgba(255,255,255,.95);color:var(--ink)}
  .sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

  /* ---------- photo markers (markers.js 'photos'): framed prints, stacks as decks ---------- */
  .pe-photo .fr{width:46px;height:46px;border-radius:0;overflow:hidden;border:3px solid var(--c);background:var(--ph);box-shadow:0 0 0 1.5px #fff,0 6px 16px -6px rgba(23,21,15,.55);transition:transform .25s var(--ease)}
  .pe-photo .img-ph{color:var(--mute);background:var(--ph);font-size:7px}
  .pe-photo:hover .fr,.pe-photo.on .fr{transform:scale(1.18)}
  .pe-photo.inr .fr{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--ink),0 6px 16px -6px rgba(23,21,15,.55)}
  .pe-photo.cur .fr{outline:3px solid var(--ink);outline-offset:3px}
  .pe-photo .ico{left:-7px;bottom:-7px;width:20px;height:20px;border-radius:3px;background:var(--c);color:var(--ink);font-size:12px;box-shadow:0 0 0 1.5px #fff}
  /* a stack is a deck: two prints fanned behind the leader, the count on an ink tab below */
  .pe-photo.stack::before,.pe-photo.stack::after{content:"";position:absolute;left:0;top:0;width:46px;height:46px;z-index:-1;background:#fff;border:3px solid #fff;box-shadow:0 5px 14px -6px rgba(23,21,15,.5);transition:transform .3s var(--ease)}
  .pe-photo.stack::before{transform:rotate(-9deg) translate(-4px,2px);background:#f1eee7}
  .pe-photo.stack::after{transform:rotate(7deg) translate(4px,-2px)}
  .pe-photo.stack:hover::before{transform:rotate(-18deg) translate(-12px,4px)}
  .pe-photo.stack:hover::after{transform:rotate(15deg) translate(12px,-4px)}
  .pe-photo.stack .fr{box-shadow:0 0 0 1.5px #fff,0 6px 16px -6px rgba(23,21,15,.55)}
  .pe-photo.stack .ct{right:-10px;top:auto;bottom:-10px;min-width:24px;height:20px;padding:0 7px;border-radius:99px;background:var(--ink);color:#fff;font:600 11px/1 var(--sans);box-shadow:0 0 0 1.5px #fff}
  /* in the corner inset the prints shrink, so the place and the trip's dashed preview stay readable */
  &.paged .pe-photo .fr,&.paged .pe-photo.stack::before,&.paged .pe-photo.stack::after{width:24px;height:24px;border-width:2px}
  &.paged .pe-photo :is(.ico,.ct){display:none}
  /* route numbers (ruling 20): ink tabs ringed in the stop's colour, above every frame */
  .pe-num{min-width:20px;height:20px;padding:0 5px;border:0;border-radius:10px;background:var(--ink);color:#fff;font:600 11px/1 var(--sans);box-shadow:0 0 0 1.5px #fff,0 0 0 3.5px var(--c)}

  /* hover popup: a white print with a colour edge */
  .pe-pop{z-index:11} /* above the route badges (markers.js z 10) */
  .pe-pop .maplibregl-popup-content{padding:0;border-radius:0;width:250px;overflow:hidden;background:#fff;color:var(--ink);box-shadow:0 16px 36px -14px rgba(23,21,15,.55);font:13px/1.4 var(--sans);cursor:pointer}
  .pe-pop .maplibregl-popup-tip{display:none}
  .pe-pop :is(img,.img-ph){display:block;width:100%;height:118px;object-fit:cover;background:var(--ph);color:var(--mute);border-bottom:4px solid var(--c)}
  .pe-pop b{display:block;padding:9px 12px 0;font:500 17px/1.2 var(--serif)}
  .pe-pop span:not(.img-ph){display:block;padding:3px 12px 0;color:var(--mute);font-size:12.5px}
  .pe-pop i{display:block;padding:5px 12px 10px;font:normal 600 10.5px var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--mute)}

  /* ---------- the gallery page: the left of the screen, below the bar, above the filmstrip ---------- */
  .page{position:fixed;left:16px;top:var(--top);right:calc(360px + 32px);bottom:calc(var(--film) + 16px);z-index:5;overflow-y:auto;background:var(--paper);border:1px solid var(--line);box-shadow:0 10px 30px -18px rgba(23,21,15,.35);visibility:hidden;scrollbar-width:thin}
  &.paged .page{visibility:visible;animation:p-in .35s var(--ease)}
  .page:focus{outline:0}
  .pbar{position:sticky;top:0;z-index:3;display:flex;align-items:center;padding:10px 28px;background:rgba(251,250,247,.9);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
  .back{font-weight:500;font-size:14px}
  .back:hover{text-decoration:underline;text-underline-offset:3px}
  .page{
    .hero{margin:0}
    .hero :is(img,.img-ph){display:block;width:100%;height:min(56vh,480px);object-fit:cover;background:var(--ph)}
    .hero figcaption{padding:8px 28px 0}
    .pbody{padding:28px 28px 48px}
    .pbody>:not(.gal){max-width:760px}
    .kick{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);margin:0 0 14px}
    h1{font:400 clamp(34px,3.4vw,52px)/1.04 var(--serif);letter-spacing:-.015em;margin:0 0 10px;text-wrap:balance}
    h1:focus{outline:0}
    .sub{font:italic 400 20px var(--serif);color:var(--mute);margin:0 0 18px}
    .lede{font:400 20px/1.5 var(--serif);margin:0 0 24px}
    .tagline{font:italic 400 21px/1.45 var(--serif);margin:0 0 24px}
    .acts{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:26px}
    .btn.pri{background:var(--ink);color:#fff}
    .btn.rem{background:#fff;color:var(--ink)}
    .btn.rem:hover{background:var(--paper)}
    .facts{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin:0 0 18px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
    .facts div{padding:12px 16px 12px 0;min-width:0}
    .facts dt{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--mute)}
    .facts dd{margin:2px 0 0;font:400 22px/1.15 var(--serif);overflow-wrap:anywhere}
    .est{font-size:13px;color:var(--mute);margin:-6px 0 18px}
    .months{display:flex;gap:3px;margin:0 0 6px}
    .months span{width:24px;height:26px;display:grid;place-items:center;font-size:10.5px;border:1px solid var(--line);color:var(--mute);background:#fff}
    .months span.y{background:var(--ink);color:#fff;border-color:var(--ink)}
    .months-text{font-size:12.5px;color:var(--mute);margin:0 0 8px}
    .ints{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:4px 14px;margin:14px 0 0}
    .ints li{display:inline-flex;align-items:center;gap:6px;font-size:13.5px}
    .ints i{width:8px;height:8px;border-radius:2px;background:var(--c)}
    .ints small{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--mute)}
    h3{font:500 12px var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--mute);margin:36px 0 12px;padding-top:14px;border-top:1px solid var(--line)}
    .tips{margin:0;padding-left:20px}
    .tips li{margin:0 0 8px}
    /* every photo large, each with its credit */
    .gal{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:22px 14px}
    .gal figure{margin:0;min-width:0}
    .gal .ph{display:block;width:100%;cursor:zoom-in}
    .gal :is(img,.img-ph){display:block;width:100%;aspect-ratio:3/2;object-fit:cover;background:var(--ph);transition:filter .2s}
    .gal .ph:hover img{filter:brightness(1.06)}
    /* a trip's photos from its stops: a strip */
    .gal.two{display:flex;gap:12px;overflow-x:auto;padding-bottom:8px;scrollbar-width:thin}
    .gal.two figure{flex:0 0 260px}
    .gal.two :is(img,.img-ph){aspect-ratio:4/3}
    figcaption{font-size:12px;color:var(--mute);margin-top:6px;line-height:1.4}
    .cr{display:block;font-size:11px;color:var(--mute);margin-top:2px}
    .cr a{color:var(--mute)}
    :is(.near,.src,.tstops){list-style:none;margin:0;padding:0}
    .near{display:grid;grid-template-columns:repeat(3,1fr);gap:10px 14px}
    .near a{display:flex;flex-direction:column;text-decoration:none;padding:8px 0;border-top:1px solid var(--line)}
    .near b{font:500 16px/1.2 var(--serif)}
    .near span{font-size:12px;color:var(--mute)}
    .near a:hover b{text-decoration:underline;text-underline-offset:3px}
    .tstops{counter-reset:s}
    .tstops a{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:8px 0;border-bottom:1px solid var(--line);text-decoration:none}
    .tstops b{font:500 17px/1.2 var(--serif)}
    .tstops span{font-size:12px;color:var(--mute);white-space:nowrap}
    .tstops a:hover b{text-decoration:underline;text-underline-offset:3px}
    .src li{padding:2px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .src a{font-size:12.5px;color:var(--mute)}
    .legs{width:100%;border-collapse:collapse;font-size:14px}
    .legs td{padding:10px 4px;border-top:1px solid var(--line);vertical-align:top}
    .legs td.n{font-size:12.5px;color:var(--mute);white-space:nowrap;text-align:right}
    .legs small{display:block;color:var(--mute);font-size:13px;line-height:1.4;margin-top:2px}
    .by{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--mute);border:1px solid var(--line);padding:0 5px}
    .img-ph{display:grid;place-items:center;background:var(--ph);color:var(--mute);font-size:13px}
  }
}
