{
  "version": 3,
  "sources": ["/cdn/shop/t/22/assets/kr-press-studio-core.js?cb=1783040899241"],
  "sourcesContent": ["/* ============================================================================\n   KR Maps Press \u2014 Studio core (shared model + spread renderer + maps)\n   window.KRPressStudio.create({store, config, bus, urls, engine}) -> studio\n   Ported from design/Book Studio v3.dc.html (logic class) per ARCHITECTURE.md.\n   Vanilla JS, IIFE, no deps beyond Leaflet (arrives via window.krMapsReady).\n   Model is DOM-free (Node-testable); renderSpread/renderThumb need a document.\n   Public API documented in scratchpad/specs/studio-api.md.\n   ============================================================================ */\n(function (root) {\n'use strict';\n\nvar HAS_DOC = typeof document !== 'undefined';\n\n/* \u2500\u2500 tiny DOM helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\nfunction el(tag, cls, attrs, children) {\n  var n = document.createElement(tag);\n  if (cls) n.className = cls;\n  if (attrs) {\n    for (var k in attrs) {\n      if (attrs[k] == null) continue;\n      if (k === 'style') n.style.cssText = attrs[k];\n      else if (k === 'text') n.textContent = attrs[k];\n      else n.setAttribute(k, attrs[k]);\n    }\n  }\n  if (children) {\n    for (var i = 0; i < children.length; i++) {\n      var c = children[i];\n      if (c == null) continue;\n      n.appendChild(typeof c === 'string' ? document.createTextNode(c) : c);\n    }\n  }\n  return n;\n}\nvar SVGNS = 'http://www.w3.org/2000/svg';\nfunction svgEl(tag, attrs, children) {\n  var n = document.createElementNS(SVGNS, tag);\n  if (attrs) for (var k in attrs) { if (attrs[k] != null) n.setAttribute(k, attrs[k]); }\n  if (children) for (var i = 0; i < children.length; i++) { if (children[i]) n.appendChild(children[i]); }\n  return n;\n}\n\n/* \u2500\u2500 pure math / format helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\nfunction hav(a, b) {\n  var R = 6371, toR = Math.PI / 180;\n  var dLat = (b.lat - a.lat) * toR, dLon = (b.lng - a.lng) * toR;\n  var s = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n    Math.cos(a.lat * toR) * Math.cos(b.lat * toR) * Math.sin(dLon / 2) * Math.sin(dLon / 2);\n  return 2 * R * Math.asin(Math.sqrt(s));\n}\n/* bounding-box diagonal, km \u2014 the geographic \"size\" of a point set, used to\n   scale the back-cover brush's collapse distance to the trip itself (a\n   city-only trip and a continent-hopping trip need very different km\n   thresholds to keep their real shape). */\nfunction bboxDiagKm(pts) {\n  var minLa = Infinity, maxLa = -Infinity, minLo = Infinity, maxLo = -Infinity;\n  pts.forEach(function (p) {\n    if (p.lat < minLa) minLa = p.lat; if (p.lat > maxLa) maxLa = p.lat;\n    if (p.lng < minLo) minLo = p.lng; if (p.lng > maxLo) maxLo = p.lng;\n  });\n  if (!isFinite(minLa)) return 0;\n  return hav({ lat: minLa, lng: minLo }, { lat: maxLa, lng: maxLo });\n}\nfunction minsOf(t) { return t ? (+t.slice(0, 2)) * 60 + (+t.slice(3, 5)) : null; }\nfunction fmtMinSpan(m) {\n  var h = Math.floor(m / 60), mm = m % 60;\n  return h > 0 ? (h + 'h ' + (mm < 10 ? '0' : '') + mm + 'm') : (mm + ' min');\n}\nfunction pad2(n) { return String(n).padStart(2, '0'); }\nvar NUM_WORDS = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten',\n  'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty'];\nfunction wordNum(n) { return (n >= 0 && n < NUM_WORDS.length) ? NUM_WORDS[n] : String(n); }\nfunction capWord(s) { return s ? s.charAt(0).toUpperCase() + s.slice(1) : s; }\nfunction roman(n) {\n  if (!n || n < 1 || n > 3999) return String(n || '');\n  var T = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'],\n    [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I']];\n  var out = '';\n  for (var i = 0; i < T.length; i++) { while (n >= T[i][0]) { out += T[i][1]; n -= T[i][0]; } }\n  return out;\n}\nfunction dmsOf(v, isLat) {\n  if (v == null || isNaN(v)) return '';\n  var h = isLat ? (v < 0 ? 'S' : 'N') : (v < 0 ? 'W' : 'E');\n  v = Math.abs(v);\n  var d = Math.floor(v), m = Math.round((v - d) * 60);\n  if (m === 60) { d++; m = 0; }\n  return pad2(d) + '\u00B0' + pad2(m) + '\u2032' + h;\n}\nfunction safeDate(date) { try { return new Date(date + 'T12:00:00'); } catch (e) { return null; } }\nfunction wkdayOf(date, long) {\n  var d = safeDate(date);\n  try { return d ? d.toLocaleDateString('en-GB', { weekday: long ? 'long' : 'short' }) : ''; } catch (e) { return ''; }\n}\nfunction monOf(date, long) {\n  var d = safeDate(date);\n  try { return d ? d.toLocaleDateString('en-GB', { month: long ? 'long' : 'short' }) : ''; } catch (e) { return ''; }\n}\nfunction dayNum(date) { return date ? +date.slice(8, 10) : 0; }\nfunction yearOf(date) { return date ? +date.slice(0, 4) : null; }\nfunction tsOf(p) {\n  if (!p || !p.date) return null;\n  var t = p.t && /^\\d\\d:\\d\\d$/.test(p.t) ? p.t : '12:00';\n  var v = Date.parse(p.date + 'T' + t + ':00');\n  return isNaN(v) ? null : v;\n}\n/* '2 \u2013 17 AUGUST 2018' style ranges */\nfunction dateRangeLong(d1, d2) {\n  if (!d1) return '';\n  if (!d2) d2 = d1;\n  var y1 = yearOf(d1), y2 = yearOf(d2);\n  if (d1 === d2) return dayNum(d1) + ' ' + monOf(d1, true).toUpperCase() + ' ' + y1;\n  if (y1 === y2 && d1.slice(5, 7) === d2.slice(5, 7)) {\n    return dayNum(d1) + ' \u2013 ' + dayNum(d2) + ' ' + monOf(d1, true).toUpperCase() + ' ' + y1;\n  }\n  if (y1 === y2) {\n    return dayNum(d1) + ' ' + monOf(d1, false).toUpperCase() + ' \u2013 ' + dayNum(d2) + ' ' + monOf(d2, false).toUpperCase() + ' ' + y1;\n  }\n  return dayNum(d1) + ' ' + monOf(d1, false).toUpperCase() + ' ' + y1 + ' \u2013 ' + dayNum(d2) + ' ' + monOf(d2, false).toUpperCase() + ' ' + y2;\n}\n/* '3 \u2013 4 AUG' style compact ranges */\nfunction dateRangeCompact(d1, d2) {\n  if (!d1) return '';\n  if (!d2) d2 = d1;\n  if (d1 === d2) return dayNum(d1) + ' ' + monOf(d1, false).toUpperCase();\n  if (d1.slice(0, 7) === d2.slice(0, 7)) return dayNum(d1) + ' \u2013 ' + dayNum(d2) + ' ' + monOf(d1, false).toUpperCase();\n  return dayNum(d1) + ' ' + monOf(d1, false).toUpperCase() + ' \u2013 ' + dayNum(d2) + ' ' + monOf(d2, false).toUpperCase();\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   create({store, config, bus, urls, engine}) \u2192 studio instance\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\nfunction create(ctx) {\n  ctx = ctx || {};\n  var store = ctx.store;\n  var config = ctx.config || {};\n  var bus = ctx.bus || { emit: function () {}, on: function () {}, off: function () {} };\n  var urls = ctx.urls || { thumb: function () { return null; }, mid: function () { return null; } };\n  var engine = ctx.engine;\n  if (!store || !store.project) throw new Error('KRPressStudio.create: store.project required');\n  if (!engine || !engine.deriveChapters) throw new Error('KRPressStudio.create: engine required');\n\n  var destroyed = false;\n\n  /* ephemeral (non-persisted) studio state \u2014 shells read this directly */\n  var state = { cur: 'cover', reasoning: false, guides: false, wizard: null };\n\n  /* \u2500\u2500 edits: persisted user overrides in project.edits \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     layouts, heroes, frInclude, moments, dismissed, stats, units, tempUnit,\n     routePal, routeW, routeSkip, zoomAdj, bookMode, mapTone, momSeq, rev  */\n  var DEF_STATS = { days: true, frames: true, distance: true, weather: true, elevation: false, coords: false };\n  function E() { return (store.project && store.project.edits) || {}; }\n  function edit(reason, fn) {\n    store.update(function (p) {\n      if (!p.edits) p.edits = {};\n      fn(p.edits, p);\n      p.edits.rev = (p.edits.rev || 0) + 1;\n    });\n    emit(reason);\n  }\n  function emit(reason, extra) {\n    var d = { reason: reason };\n    if (extra) { for (var k in extra) d[k] = extra[k]; }\n    bus.emit('studio-changed', d);\n  }\n  function Elayouts() { return E().layouts || {}; }\n  function Eheroes() { return E().heroes || {}; }\n  function EfrInclude() { return E().frInclude || {}; }\n  function Emoments() { return E().moments || []; }\n  function Edismissed() { return E().dismissed || {}; }\n  function Estats() { var s = {}, e = E().stats || {}; for (var k in DEF_STATS) s[k] = (k in e) ? !!e[k] : DEF_STATS[k]; return s; }\n  function ErouteSkip() { return E().routeSkip || {}; }\n  function EzoomAdj() { return E().zoomAdj || {}; }\n  function EmapMode() { return E().mapMode || {}; }   /* kind \u2192 'dot' (route line when absent) */\n  function ErouteW() { var v = E().routeW; return v == null ? 100 : v; }\n  function ErouteBow() { var v = E().routeBow; return v == null ? 100 : v; }\n  function Erev() { return E().rev || 0; }\n\n  /* \u2500\u2500 mode + derivation (engine feeds the design's data shapes) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  /* _autoMode: the effective mode derive() picked when the user hasn't\n     explicitly chosen one yet (see derive() below). Once setBookMode()\n     writes an explicit edits.bookMode, that always wins and this is unused. */\n  var _autoMode = null;\n  function bookMode() { var m = E().bookMode; return m != null ? m : (_autoMode || 'trip'); }\n  function modeKey() {\n    var m = bookMode();\n    return (m && typeof m === 'object') ? ('journey:' + m.journey) : String(m);\n  }\n  function isSingle() { var m = bookMode(); return !!(m && typeof m === 'object' && m.journey != null); }\n\n  var _photos = [], _derived = null, _pools = {}, _byId = {}, _chIdx = [], _deriveKey = '';\n  var _book = null, _bookKey = null, _struct = null, _structKey = null, _defs = null;\n  var _sugs = null, _sugKey = null;\n  var _enrichStarted = false, _enrichNotified = false;\n\n  function derive() {\n    _photos = engine.toStudioPhotos ? engine.toStudioPhotos(store.project.photos || []) : (store.project.photos || []);\n    var explicitMode = E().bookMode;\n    var mode = explicitMode;\n    if (mode == null) {\n      /* No explicit choice yet. A trip that never left one place \u2014 a\n         \"bunch of days around Vienna\" with no leg boundaries \u2014 otherwise\n         composes as one giant catch-all chapter dumping every day's photos\n         into an undifferentiated grid. Probe what trip mode would produce;\n         if it's a single leg spanning more than one day, days-as-chapters\n         (the same structure a single-journey trip already gets) reads far\n         better, so make that the default instead of the literal 'trip'\n         string. Cheap: derive() only runs on create/mode-change/enrich. */\n      var probe = engine.deriveChapters(_photos, 'trip') || {};\n      var legs = probe.chapters || [];\n      mode = (legs.length === 1 && (legs[0].days || 0) > 1) ? { journey: 0 } : 'trip';\n    }\n    _autoMode = (explicitMode == null) ? mode : null;\n    /* enrichment rides along so the engine can bake wx/elev into chapter st\n       (older engines that take two args simply ignore the extra one) */\n    _derived = engine.deriveChapters(_photos, mode, (store.project && store.project.enrichment) || {}) || {};\n    /* normalize pools \u2192 {ci: StudioPhoto[]} sorted by date+time.\n       The engine emits pools as arrays of PHOTO ID STRINGS (per the\n       ARCHITECTURE contract) \u2014 resolve them against the StudioPhoto\n       records here so everything downstream works with objects. */\n    var photoById = {};\n    _photos.forEach(function (p) { if (p && p.id != null) photoById[p.id] = p; });\n    _pools = {}; _byId = {}; _chIdx = [];\n    var rawPools = _derived.pools || [];\n    var keys = Array.isArray(rawPools)\n      ? rawPools.map(function (_, i) { return i; })\n      : Object.keys(rawPools).map(Number).sort(function (a, b) { return a - b; });\n    keys.forEach(function (ci) {\n      var arr = (rawPools[ci] || []).map(function (entry) {\n        return typeof entry === 'string' ? photoById[entry] : entry;\n      }).filter(Boolean);\n      arr.sort(function (a, b) {\n        var d = String(a.date || '').localeCompare(String(b.date || ''));\n        return d !== 0 ? d : String(a.t || '').localeCompare(String(b.t || ''));\n      });\n      _pools[ci] = arr;\n      _chIdx.push(ci);\n      arr.forEach(function (p) { _byId[p.id] = p; });\n    });\n    _deriveKey = modeKey() + '|' + _photos.length + '|' + _chIdx.length;\n    _book = null; _bookKey = null; _struct = null; _structKey = null; _defs = null; _sugs = null; _sugKey = null;\n    maybeEnrich();\n  }\n  function recompose() { derive(); emit('recompose'); }\n\n  function CHAPTERS() {\n    var raw = (_derived && _derived.chapters) || [];\n    return raw.map(function (c, i) {\n      c = c || {};\n      var pool = _pools[_chIdx[i]] || [];\n      var st = c.st || {};\n      return {\n        id: c.id != null ? c.id : String(i),\n        num: c.num || pad2(i + 1),\n        title: c.title || ('Chapter ' + (i + 1)),\n        sub: c.sub || '',\n        dates: c.dates || (pool.length ? dateRangeCompact(pool[0].date, pool[pool.length - 1].date) : ''),\n        days: c.days != null ? c.days : uniqDates(pool).length,\n        frames: c.frames != null ? c.frames : pool.length,\n        date: c.date || (pool.length ? pool[0].date : null),\n        st: {\n          km: st.km != null ? st.km : (st.kmv != null ? st.kmv : null),\n          wx: st.wx || st.weather || '',\n          elev: st.elev != null ? st.elev : (st.elevM != null ? st.elevM : null),\n          elevPre: st.elevPre || '', elevSuf: st.elevSuf || '',\n          coords: st.coords || ''\n        }\n      };\n    });\n  }\n  function TRIP_WPS() {\n    return ((_derived && _derived.waypoints) || []).map(function (w) {\n      return { name: w.name || '', lat: w.lat, lng: w.lng, leg: w.leg || 0 };\n    });\n  }\n  function pools() { return _pools; }\n  function poolN(ci) { return (_pools[ci] || []).length; }\n  function byId(id) { return _byId[id] || null; }\n  function uniqDates(arr) {\n    var seen = {}, out = [];\n    (arr || []).forEach(function (p) { if (p.date && !seen[p.date]) { seen[p.date] = 1; out.push(p.date); } });\n    return out.sort();\n  }\n  function tripDates() {\n    var all = [];\n    _chIdx.forEach(function (ci) { all = all.concat(_pools[ci] || []); });\n    return uniqDates(all);\n  }\n  function tripDayNo(date) { var i = tripDates().indexOf(date); return i < 0 ? 0 : i + 1; }\n  function dayLabel(date) { return (wkdayOf(date, false) + ' ' + dayNum(date) + ' ' + monOf(date, false)).toUpperCase(); }\n\n  /* totals \u2014 prefer engine's, compute fallbacks from real data */\n  function totals() {\n    var t = (_derived && _derived.totals) || {};\n    var dates = tripDates();\n    var wps = TRIP_WPS();\n    var km = t.km;\n    if (km == null) {\n      km = 0;\n      for (var i = 1; i < wps.length; i++) km += hav(wps[i - 1], wps[i]);\n      km = Math.round(km);\n    }\n    var photosN = t.photos != null ? t.photos : (function () {\n      var n = 0; _chIdx.forEach(function (ci) { n += poolN(ci); }); return n;\n    })();\n    var placesN = t.places != null ? t.places : (function () {\n      var seen = {}, n = 0;\n      _chIdx.forEach(function (ci) {\n        (_pools[ci] || []).forEach(function (p) { var k = String(p.place || '').toLowerCase(); if (k && !seen[k]) { seen[k] = 1; n++; } });\n      });\n      return n;\n    })();\n    var coords = t.coords || (function () {\n      if (!wps.length) return '';\n      var la = 0, lo = 0;\n      wps.forEach(function (w) { la += w.lat; lo += w.lng; });\n      return dmsOf(la / wps.length, true) + ' ' + dmsOf(lo / wps.length, false);\n    })();\n    return {\n      days: t.days != null ? t.days : dates.length,\n      km: km,\n      journeys: t.journeys != null ? t.journeys : CHAPTERS().length,\n      photos: photosN,\n      places: placesN,\n      dates: t.dates || dateRangeLong(dates[0], dates[dates.length - 1]),\n      coords: coords,\n      year: t.year != null ? t.year : (yearOf(dates[dates.length - 1]) || new Date().getFullYear()),\n      firstDate: dates[0] || null, lastDate: dates[dates.length - 1] || null,\n      narrative: t.narrative || ''\n    };\n  }\n\n  /* \u2500\u2500 enrichment (Open-Meteo; fetched once, cached into project) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  /* one async 'enrich' ping for the terminal no-fetch paths, so shells\n     waiting on the event (mobile \"FETCHING WEATHER\") never hang */\n  function _notifyEnrich() {\n    if (_enrichNotified || destroyed) return;\n    _enrichNotified = true;\n    timers.enrichT = setTimeout(function () { if (!destroyed) emit('enrich'); }, 0);\n  }\n  function maybeEnrich() {\n    /* _enrichStarted is checked BEFORE any fetch \u2014 the post-fetch re-derive\n       below re-enters this function and must never refetch or loop */\n    if (_enrichStarted || destroyed) return;\n    if (!engine.enrich || store.project.enrichment) { _notifyEnrich(); return; }\n    var ch = (_derived && _derived.chapters) || [];\n    if (!ch.length) { _notifyEnrich(); return; }\n    _enrichStarted = true;\n    try {\n      Promise.resolve(engine.enrich(ch, {})).then(function (enr) {\n        if (destroyed) return;\n        if (enr) {\n          store.update(function (p) { p.enrichment = enr; });\n          /* re-derive so chapters bake the values (also invalidates the\n             BOOK/CHAPTERS caches); maybeEnrich re-entry is a no-op */\n          derive();\n        }\n        _enrichNotified = true;\n        emit('enrich');\n      }).catch(function () { _notifyEnrich(); });\n    } catch (e) { _notifyEnrich(); }\n  }\n  /* normalized weather lookup \u2014 tolerant of several enrichment shapes */\n  function wxFor(date) {\n    if (!date) return '';\n    var enr = store.project.enrichment;\n    var raw = '';\n    if (enr) {\n      if (enr.wxByDate && enr.wxByDate[date] != null) raw = enr.wxByDate[date];\n      else if (enr.byDate && enr.byDate[date] != null) raw = enr.byDate[date];\n      else if (Array.isArray(enr.days)) {\n        for (var i = 0; i < enr.days.length; i++) { if (enr.days[i] && enr.days[i].date === date) { raw = enr.days[i].wx || enr.days[i].weather || ''; break; } }\n      } else if (typeof enr[date] === 'string') raw = enr[date];\n    }\n    if (raw && typeof raw === 'object') raw = raw.wx || raw.weather || '';\n    return convTemp(String(raw || ''));\n  }\n  function elevFor(date) {\n    if (!date) return null;\n    var enr = store.project.enrichment;\n    if (!enr) return null;\n    var v = null;\n    if (enr.elevByDate && enr.elevByDate[date] != null) v = enr.elevByDate[date];\n    else if (enr.byDate && enr.byDate[date] != null && typeof enr.byDate[date] === 'object') v = enr.byDate[date].elev;\n    else if (Array.isArray(enr.days)) {\n      for (var i = 0; i < enr.days.length; i++) { if (enr.days[i] && enr.days[i].date === date) { v = enr.days[i].elev; break; } }\n    }\n    return v == null ? null : v;\n  }\n\n  /* \u2500\u2500 units + formatting (ported verbatim; read persisted edits) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function isMi() { return (E().units || 'mi') !== 'km'; }\n  function unitLabel() { return isMi() ? 'MI' : 'KM'; }\n  function unitSuffix() { return isMi() ? 'mi' : 'km'; }\n  function distVal(km) { return isMi() ? km * 0.621371 : km; }\n  function fmtDistN(km) { var v = distVal(km); return v >= 100 ? Math.round(v).toLocaleString('en-US') : String(Math.round(v * 10) / 10); }\n  function fmtDist(km) { return fmtDistN(km) + ' ' + unitSuffix(); }\n  function fmtElev(mtr) {\n    if (mtr == null || isNaN(mtr)) return '';\n    return isMi() ? ((Math.round(mtr * 3.28084 / 10) * 10).toLocaleString('en-US') + ' ft') : (Math.round(mtr).toLocaleString('en-US') + ' m');\n  }\n  function isF() { return (E().tempUnit || 'f') !== 'c'; }\n  function convTemp(str) {\n    if (!str) return str;\n    var f = isF();\n    return str.replace(/(-?\\d+)\u00B0/g, function (_, n) { return (f ? Math.round(+n * 9 / 5 + 32) : +n) + '\u00B0'; });\n  }\n  function setUnits(u) { edit('units', function (e) { e.units = u === 'km' ? 'km' : 'mi'; }); }\n  function setTempUnit(u) { edit('units', function (e) { e.tempUnit = u === 'c' ? 'c' : 'f'; }); }\n\n  /* \u2500\u2500 KINDS \u2014 moment page kinds (ported verbatim) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  var _kinds = null;\n  function KINDS() {\n    if (_kinds) return _kinds;\n    _kinds = {\n      hike:      { icon: '\u25B2', name: 'A hike', short: 'Hike', eyebrow: 'TRAIL DAY', hint: 'Path traced from your photos\u2019 GPS + guessed distance, ascent, moving time', layout: 'hike', w: 0.6 },\n      meal:      { icon: '\u2299', name: 'A meal to remember', short: 'Meal', eyebrow: 'THE TABLE', hint: 'Hero dish on the left, the order set like a receipt on the right', layout: 'meal', w: 0.32 },\n      water:     { icon: '\u2248', name: 'On the water', short: 'On the water', eyebrow: 'ON THE WATER', hint: 'Boat, river or beach day \u2014 hours aboard, pinned where it happened', layout: 'hi', w: 0.5 },\n      wildlife:  { icon: '\u25C9', name: 'Wildlife encounter', short: 'Wildlife', eyebrow: 'THE ENCOUNTER', hint: 'The sighting, the photos that caught it, the spot on the map', layout: 'hi', w: 0.5 },\n      market:    { icon: '\u25A6', name: 'Market morning', short: 'Market', eyebrow: 'THE MARKET', hint: 'Dense stall-by-stall grid + how far you wandered', layout: 'hi', w: 0.5 },\n      show:      { icon: '\u266A', name: 'Ceremony / performance', short: 'Performance', eyebrow: 'THE PERFORMANCE', hint: 'Programme-style page \u2014 runtime read from your photos', layout: 'hi', w: 0.5 },\n      sight:     { icon: '\u25C8', name: 'The visit', short: 'Visit', eyebrow: 'THE VISIT', hint: 'Temple, palace, museum \u2014 time on site, way in to way out', layout: 'hi', w: 0.5 },\n      sunset:    { icon: '\u2600', name: 'Golden hour', short: 'Golden hour', eyebrow: 'GOLDEN HOUR', hint: 'Sun math + the photos that caught the light', layout: 'hi', w: 0.35 },\n      highlight: { icon: '\u2726', name: 'Just an experience', short: 'Highlight', eyebrow: 'THE MOMENT', hint: 'Photos on one page, their story + stats on the other', layout: 'hi', w: 0.5 },\n      notes:     { icon: '\u270E', name: 'Notes page', short: 'Notes', eyebrow: 'FIELD NOTES', hint: 'Ruled, dotted or blank \u2014 for handwriting after print', layout: 'notes', w: 0.08, bare: true },\n      quote:     { icon: '\u275D', name: 'Quote page', short: 'Quote', eyebrow: 'A LINE', hint: 'One line somebody said, set large \u2014 photo optional', layout: 'quote', w: 0.15, bare: true }\n    };\n    return _kinds;\n  }\n  function guessKind(place, avgMin) {\n    var p = String(place || '').toLowerCase();\n    if (/pasar|market|fish/.test(p)) return 'market';\n    if (/gunung|terrace|puncak|nona|hill|limbong|londa|batu/.test(p)) return 'hike';\n    if (/monkey|orangutan|satwa|macaque|zoo/.test(p)) return 'wildlife';\n    if (/lake|tempe|port|kumai|river|tanjung|beach|kedonganan/.test(p)) return 'water';\n    if (/gamelan|dancer|legong|wayang|musician/.test(p)) return 'show';\n    if (/pura|temple|candi|borobudur|prambanan|mendut|kraton|taman sari|palace|puri|uluwatu|tanah lot/.test(p)) return 'sight';\n    if (avgMin != null && avgMin >= 1020) return 'sunset';\n    return 'highlight';\n  }\n\n  /* \u2500\u2500 FR_PRESETS \u2014 magazine packing presets 2\u201312 (verbatim) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  var _pre = null;\n  function FR_PRESETS() {\n    if (_pre) return _pre;\n    _pre = {\n      duo:      { n: 2,  cp: 2, name: 'Duo',            sub: '2 / spread',  areas: ['1/1/3/3', '1/4/3/6'] },\n      mosaic:   { n: 3,  cp: 2, name: 'Mosaic',         sub: '3 / spread',  areas: ['1/1/3/3', '1/4/2/6', '2/4/3/6'] },\n      band:     { n: 4,  cp: 2, name: 'Hero band',      sub: '4 / spread',  areas: ['1/1/3/3', '1/4/2/6', '2/4/3/5', '2/5/3/6'] },\n      quartet:  { n: 4,  cp: 2, name: 'Quartet',        sub: '4 wide',      areas: ['1/1/2/3', '2/1/3/3', '1/4/2/6', '2/4/3/6'] },\n      five:     { n: 5,  cp: 2, name: 'Sidebar five',   sub: '5 / spread',  areas: ['1/1/3/3', '1/4/2/5', '1/5/2/6', '2/4/3/5', '2/5/3/6'] },\n      grid6:    { n: 6,  cp: 3, name: 'Editorial six',  sub: '6 / spread',  areas: ['1/1/3/3', '1/3/2/4', '2/3/3/4', '1/5/2/8', '2/5/3/6', '2/6/3/8'] },\n      seven:    { n: 7,  cp: 3, name: 'Seven up',       sub: '7 / spread',  areas: ['1/1/3/3', '1/3/2/4', '2/3/3/4', '1/5/2/8', '2/5/3/6', '2/6/3/7', '2/7/3/8'] },\n      contact8: { n: 8,  cp: 2, name: 'Contact eight',  sub: '8 / spread',  areas: ['1/1/2/2', '1/2/2/3', '2/1/3/2', '2/2/3/3', '1/4/2/5', '1/5/2/6', '2/4/3/5', '2/5/3/6'] },\n      nine:     { n: 9,  cp: 3, name: 'Nine up',        sub: '9 / spread',  areas: ['1/1/2/2', '1/2/2/4', '2/1/3/3', '2/3/3/4', '1/5/2/6', '1/6/2/8', '2/5/3/6', '2/6/3/7', '2/7/3/8'] },\n      ten:      { n: 10, cp: 3, name: 'Ten up',         sub: '10 / spread', areas: ['1/1/2/2', '1/2/2/3', '1/3/2/4', '2/1/3/3', '2/3/3/4', '1/5/2/6', '1/6/2/8', '2/5/3/6', '2/6/3/7', '2/7/3/8'] },\n      eleven:   { n: 11, cp: 3, name: 'Eleven up',      sub: '11 / spread', areas: ['1/1/2/2', '1/2/2/3', '1/3/2/4', '2/1/3/3', '2/3/3/4', '1/5/2/6', '1/6/2/7', '1/7/2/8', '2/5/3/6', '2/6/3/7', '2/7/3/8'] },\n      dozen:    { n: 12, cp: 3, name: 'Contact twelve', sub: '12 / spread', areas: ['1/1/2/2', '1/2/2/3', '1/3/2/4', '2/1/3/2', '2/2/3/3', '2/3/3/4', '1/5/2/6', '1/6/2/7', '1/7/2/8', '2/5/3/6', '2/6/3/7', '2/7/3/8'] }\n    };\n    return _pre;\n  }\n  function presetForCount(n) {\n    var m = { 2: 'duo', 3: 'mosaic', 4: 'band', 5: 'five', 6: 'grid6', 7: 'seven', 8: 'contact8', 9: 'nine', 10: 'ten', 11: 'eleven', 12: 'dozen' };\n    return m[Math.max(2, Math.min(12, n))];\n  }\n  function colsCss(cp) { return cp === 3 ? '1fr 1fr 1fr 4.4cqw 1fr 1fr 1fr' : '1fr 1fr 4.4cqw 1fr 1fr'; }\n  function effPreset(sp) {\n    var c = photosFor(sp).length;\n    var k = Elayouts()[sp.id], P = FR_PRESETS();\n    if (k && P[k] && P[k].n <= Math.max(2, c)) return k;\n    return presetForCount(c);\n  }\n  /* caption for a photo \u2014 place + time + golden flag (production CAPS) */\n  function capFor(id, fallback) {\n    var rec = _byId[id];\n    if (!rec) return fallback || String(id || '').toUpperCase();\n    var cap = String(rec.place || '').toUpperCase();\n    if (rec.t) cap += ' \u00B7 ' + rec.t;\n    if (rec.golden) cap += ' \u00B7 GOLDEN HOUR';\n    return cap;\n  }\n  function photosFor(sp) {\n    if (!sp || sp.type !== 'frames') return [];\n    var names = EfrInclude()[sp.id] || (sp.chunk ? sp.chunk.map(function (p) { return p.id; }) : []);\n    var out = [];\n    names.forEach(function (id) {\n      var rec = _byId[id];\n      if (!rec) return;\n      out.push({\n        id: id,\n        img: urls.thumb(id),\n        cap: String(rec.place || '').toUpperCase() + (rec.t ? ' \u00B7 ' + rec.t : ''),\n        chip: rec.score != null ? (rec.score.toFixed(2) + (rec.golden ? ' \u00B7 golden hour' : '')) : ''\n      });\n    });\n    return out;\n  }\n  function toggleFr(sid, id) {\n    var sp = BOOK().find(function (x) { return x.id === sid; });\n    var cur = EfrInclude()[sid] || (sp && sp.chunk ? sp.chunk.map(function (p) { return p.id; }) : []);\n    var P = FR_PRESETS();\n    var lay = Elayouts()[sid];\n    var effKey = (lay && P[lay] && P[lay].n <= Math.max(2, cur.length)) ? lay : presetForCount(cur.length);\n    var cap = (P[effKey] || {}).n || cur.length;\n    var idx = cur.indexOf(id), next;\n    if (idx >= 0 && idx < cap) {\n      next = cur.filter(function (x) { return x !== id; });\n      if (next.length < 2) return;\n    } else if (idx >= 0) {\n      next = cur.filter(function (x) { return x !== id; });\n      next.splice(Math.min(cap - 1, next.length), 0, id);\n    } else {\n      next = cur.slice();\n      if (next.length >= cap) next.splice(Math.max(0, cap - 1), 0, id); else next.push(id);\n    }\n    edit('frames', function (e) {\n      if (!e.frInclude) e.frInclude = {};\n      e.frInclude[sid] = next;\n    });\n  }\n\n  /* \u2500\u2500 moments \u2014 calc + guesses (ported verbatim) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function momRecs(m) {\n    return (m.ids || []).map(function (id) { return _byId[id]; }).filter(Boolean)\n      .sort(function (a, b) { return String(a.t).localeCompare(String(b.t)); });\n  }\n  function momCalc(m) {\n    var recs = momRecs(m);\n    if (!recs.length) return { n: 0, t1: '\u2014', t2: '\u2014', span: 0, places: [], distKm: 0, ptsN: 0, wx: wxFor(m.date) || '' };\n    var t1 = recs[0].t || '\u2014', t2 = recs[recs.length - 1].t || t1;\n    var span = Math.max(0, (minsOf(t2) || 0) - (minsOf(t1) || 0));\n    var places = [];\n    recs.forEach(function (p) { if (places.indexOf(p.place) < 0) places.push(p.place); });\n    var pts = [];\n    recs.forEach(function (p) {\n      if (p.lat == null) return;\n      var last = pts[pts.length - 1];\n      if (!last || last.lat !== p.lat || last.lng !== p.lng) pts.push(p);\n    });\n    var dist = 0;\n    for (var i = 1; i < pts.length; i++) dist += hav(pts[i - 1], pts[i]);\n    return { n: recs.length, t1: t1, t2: t2, span: span, places: places, distKm: dist * 1.3, ptsN: pts.length, wx: wxFor(m.date) || '' };\n  }\n  function momGuesses(m) {\n    var c = momCalc(m);\n    var walkKm = c.distKm > 0.4 ? c.distKm : Math.max(0.8, (c.span / 60) * 2.6 * 0.55);\n    var g = {};\n    if (m.kind === 'hike') {\n      g.dist = '\u2248 ' + fmtDist(walkKm);\n      var ascM = Math.round((walkKm * 34 + (/gunung|nona|puncak|toraja/i.test(c.places.join(' ')) ? 140 : 0)) / 10) * 10;\n      g.ascent = '\u2248 +' + fmtElev(ascM);\n      g.dur = c.span > 0 ? fmtMinSpan(c.span) : '\u2014';\n      g.pace = c.span > 0 ? (Math.round(c.span / Math.max(0.5, distVal(walkKm))) + ' min / ' + unitSuffix()) : '\u2014';\n    }\n    if (m.kind === 'water') g.aboard = c.span > 0 ? fmtMinSpan(c.span) : '\u2014';\n    if (m.kind === 'meal') g.table = c.span > 0 ? fmtMinSpan(c.span) : '\u2014';\n    if (m.kind === 'market' || m.kind === 'sight') g.walk = '\u2248 ' + fmtDist(walkKm);\n    if (m.kind === 'show') g.runtime = c.span > 0 ? fmtMinSpan(c.span) : '\u2014';\n    return g;\n  }\n  function momStat(m, key, fallback) { return (m.stats && m.stats[key]) || fallback || '\u2014'; }\n\n  /* \u2500\u2500 SUGGESTIONS \u2014 burst pattern watcher (ported verbatim) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function SUGGESTIONS() {\n    if (!_chIdx.length) return [];\n    var dismissed = Edismissed(), moments = Emoments();\n    var key = Object.keys(dismissed).length + '|' + moments.length + '|' + _deriveKey;\n    if (_sugs && _sugKey === key) return _sugs;\n    var used = {};\n    moments.forEach(function (m) { (m.ids || []).forEach(function (id) { used[id] = 1; }); });\n    var out = [];\n    _chIdx.forEach(function (ci) {\n      var groups = {};\n      (_pools[ci] || []).forEach(function (p) {\n        var k = p.date + '|' + p.place;\n        (groups[k] = groups[k] || []).push(p);\n      });\n      Object.keys(groups).forEach(function (k) {\n        var g = groups[k].slice().sort(function (a, b) { return String(a.t).localeCompare(String(b.t)); });\n        if (g.length < 6) return;\n        var m1 = minsOf(g[0].t), m2 = minsOf(g[g.length - 1].t);\n        if (m1 == null || m2 == null) return;\n        var span = m2 - m1;\n        if (span > 260 || span < 8) return;\n        var overlap = g.filter(function (p) { return used[p.id]; }).length;\n        if (overlap >= g.length * 0.4) return;\n        var id = 'sug-' + g[0].date + '-' + String(g[0].place).toLowerCase().replace(/[^a-z0-9]+/g, '-');\n        if (dismissed[id]) return;\n        out.push({\n          id: id, ci: ci, date: g[0].date, place: g[0].place, ids: g.map(function (p) { return p.id; }),\n          t1: g[0].t, t2: g[g.length - 1].t, span: span, kind: guessKind(g[0].place, Math.round((m1 + m2) / 2))\n        });\n      });\n    });\n    out.sort(function (a, b) { return b.ids.length - a.ids.length; });\n    out = out.slice(0, 6);\n    _sugs = out; _sugKey = key;\n    return out;\n  }\n  function sugLineFor(sug) {\n    var K = KINDS()[sug.kind] || {};\n    return sug.ids.length + ' PHOTOS IN ' + fmtMinSpan(sug.span).toUpperCase() + ' AT ' + shortPlace(sug.place).toUpperCase() + ' \u00B7 LOOKS LIKE: ' + (K.short || '').toUpperCase();\n  }\n  function sugTitleFor(sug) {\n    var pl = shortPlace(sug.place || 'the day');\n    var t = {\n      market: 'Morning at ' + pl, hike: 'The walk at ' + pl, water: pl + ', from the water',\n      wildlife: 'The ' + pl.toLowerCase() + ' encounter', show: 'An evening of ' + pl.toLowerCase(),\n      sight: pl + ', properly', sunset: 'Last light at ' + pl, meal: 'The table at ' + pl\n    };\n    return t[sug.kind] || ('That time at ' + pl);\n  }\n  function sugAnchor(sug) {\n    var B = BOOK();\n    var hit = B.find(function (sp) { return sp.type === 'frames' && sp.chunk && sp.chunk.some(function (p) { return p.id === sug.ids[0]; }); });\n    if (hit) return hit.id;\n    var first = B.filter(function (sp) { return sp.ch === sug.ci; })[0];\n    return first ? first.id : (B[1] ? B[1].id : 'cover');\n  }\n  function sugForSpread(sp) {\n    if (!sp || sp.type !== 'frames' || !sp.chunk) return null;\n    var ids = {};\n    sp.chunk.forEach(function (p) { ids[p.id] = 1; });\n    return SUGGESTIONS().find(function (sg) {\n      var n = sg.ids.filter(function (id) { return ids[id]; }).length;\n      return n >= Math.min(4, Math.ceil(sg.ids.length * 0.5));\n    }) || null;\n  }\n  function dismissSug(id) {\n    edit('dismiss', function (e) {\n      if (!e.dismissed) e.dismissed = {};\n      e.dismissed[id] = true;\n    });\n  }\n\n  /* \u2500\u2500 wizard state machine + moment CRUD (persisted via edits) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function openAddPage() {\n    var cur = spreadById(state.cur) || {};\n    state.wizard = {\n      step: 'kind', anchorId: cur.id || 'cover', ci: cur.ch >= 0 ? cur.ch : (_chIdx[0] || 0),\n      date: cur.date || null, sel: {}, kind: null, title: '', note: '', variant: 'ruled', sug: null\n    };\n    emit('wizard');\n  }\n  function openWizardFromSug(sug) {\n    var sel = {};\n    sug.ids.forEach(function (id) { sel[id] = 1; });\n    state.wizard = {\n      step: 'detail', anchorId: sugAnchor(sug), ci: sug.ci, date: sug.date,\n      sel: sel, kind: sug.kind, title: sugTitleFor(sug), note: '', variant: 'ruled', sug: sug\n    };\n    emit('wizard');\n  }\n  function wizClose() { state.wizard = null; emit('wizard'); }\n  function wizBack() { wizPatch({ step: 'kind' }); }\n  function wizPatch(patch) {\n    if (!state.wizard) return;\n    for (var k in patch) state.wizard[k] = patch[k];\n    emit('wizard');\n  }\n  function wizPickKind(k) {\n    var w = state.wizard; if (!w) return;\n    var patch = { kind: k, step: 'detail' };\n    if (!w.title && w.sug) {\n      var s2 = {}; for (var kk in w.sug) s2[kk] = w.sug[kk]; s2.kind = k;\n      patch.title = sugTitleFor(s2);\n    }\n    wizPatch(patch);\n  }\n  function wizToggle(id) {\n    var w = state.wizard; if (!w) return;\n    if (w.sel[id]) delete w.sel[id]; else w.sel[id] = 1;\n    emit('wizard');\n  }\n  function wizSetTitle(v) { wizPatch({ title: String(v || '') }); }\n  function wizSetNote(v) { wizPatch({ note: String(v || '') }); }\n  function wizSetVariant(v) { wizPatch({ variant: v }); }\n  function wizPool(w) {\n    w = w || state.wizard; if (!w) return [];\n    var pool = _pools[w.ci] || [];\n    var byDate = w.date ? pool.filter(function (p) { return p.date === w.date; }) : [];\n    if (!byDate.length) byDate = pool;\n    return byDate.slice().sort(function (a, b) { return String(a.t).localeCompare(String(b.t)); }).slice(0, 48);\n  }\n  function wizMoment(w) {\n    w = w || state.wizard; if (!w) return null;\n    var pool = _pools[w.ci] || [];\n    var ids = pool.filter(function (p) { return w.sel[p.id]; }).map(function (p) { return p.id; });\n    var date = w.date;\n    if (!date && ids.length) { var r = _byId[ids[0]]; date = r ? r.date : null; }\n    return { id: 'tmp', kind: w.kind || 'highlight', ids: ids, date: date, title: w.title, note: w.note, stats: {} };\n  }\n  function wizCreate() {\n    var w = state.wizard; if (!w || !w.kind) return null;\n    var K = KINDS()[w.kind] || {};\n    var tmp = wizMoment(w);\n    if (!K.bare && tmp.ids.length < 1) return null;\n    var mid = (E().momSeq || 0) + 1;\n    var title = w.title;\n    if (!title && !K.bare) {\n      var mc0 = momCalc(tmp);\n      if ((mc0.places || [])[0]) title = sugTitleFor({ kind: w.kind, place: mc0.places[0] });\n    }\n    var m = {\n      id: 'x' + mid, kind: w.kind, ids: K.bare && w.kind === 'notes' ? [] : tmp.ids,\n      date: tmp.date || w.date, ci: w.ci, anchorId: w.anchorId,\n      title: title || '', note: w.note, stats: {}, variant: w.variant\n    };\n    edit('moment-add', function (e) {\n      e.momSeq = mid;\n      if (!e.moments) e.moments = [];\n      e.moments.push(m);\n      if (w.kind === 'notes') {\n        if (!e.layouts) e.layouts = {};\n        e.layouts['mm-' + m.id] = w.variant;\n      }\n    });\n    state.wizard = null;\n    emit('wizard');\n    timers.navT = setTimeout(function () { if (!destroyed) _nav('mm-' + m.id); }, 40);\n    return m.id;\n  }\n  function curMoment() {\n    var sp = spreadById(state.cur);\n    return sp && sp.type === 'momentPage' ? sp.m : null;\n  }\n  function momUpdate(id, patch) {\n    edit('moment', function (e) {\n      e.moments = (e.moments || []).map(function (m) {\n        if (m.id !== id) return m;\n        var n = {}; for (var k in m) n[k] = m[k];\n        for (var k2 in patch) n[k2] = patch[k2];\n        return n;\n      });\n    });\n  }\n  function momSetKind(k) {\n    var m = curMoment(); if (!m || m.kind === k) return;\n    momUpdate(m.id, { kind: k });\n    timers.tileT = setTimeout(function () { if (!destroyed) applyTiles(); }, 30);\n  }\n  function momSetTitle(v) { var m = curMoment(); if (m) momUpdate(m.id, { title: String(v || '') }); }\n  function momSetNote(v) { var m = curMoment(); if (m) momUpdate(m.id, { note: String(v || '') }); }\n  function momSetStat(key, v) {\n    var m = curMoment(); if (!m) return;\n    var st = {}; for (var k in (m.stats || {})) st[k] = m.stats[k];\n    st[key] = String(v == null ? '' : v);\n    momUpdate(m.id, { stats: st });\n  }\n  function momTogglePhoto(id) {\n    var m = curMoment(); if (!m) return;\n    var next = m.ids.indexOf(id) >= 0 ? m.ids.filter(function (x) { return x !== id; }) : m.ids.concat([id]);\n    if (!next.length && m.kind !== 'quote') return;\n    var pool = _pools[m.ci] || [];\n    next = pool.filter(function (p) { return next.indexOf(p.id) >= 0; }).map(function (p) { return p.id; });\n    momUpdate(m.id, { ids: next });\n  }\n  function momRemove() {\n    var m = curMoment(); if (!m) return;\n    var anchorOk = m.anchorId && !!spreadById(m.anchorId);\n    var mid = m.id, target = anchorOk ? m.anchorId : 'cover';\n    edit('moment-remove', function (e) {\n      e.moments = (e.moments || []).filter(function (x) { return x.id !== mid; });\n    });\n    state.cur = target;\n    emit('nav');\n  }\n\n  /* \u2500\u2500 place shortener \u2014 production-generic (design table was demo data) \u2500\u2500 */\n  function shortPlace(name) {\n    var s = String(name || '').replace(/\\s*\\(.*?\\)\\s*/g, ' ').split(',')[0].replace(/\\s+/g, ' ').trim();\n    if (s.length > 26) {\n      var words = s.split(' '), out = '';\n      for (var i = 0; i < words.length; i++) {\n        var next = (out ? out + ' ' : '') + words[i];\n        if (next.length > 24 && out) break;\n        out = next;\n      }\n      s = out || s.slice(0, 24);\n    }\n    return s;\n  }\n\n  /* \u2500\u2500 PALETTES + leg colors (verbatim; routePal persisted) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  var _pals = null;\n  function PALETTES() {\n    if (_pals) return _pals;\n    _pals = [\n      { id: 'spectrum',   name: 'SPECTRUM',   colors: ['hsl(14,58%,47%)', 'hsl(80,58%,42%)', 'hsl(146,58%,47%)', 'hsl(212,58%,42%)', 'hsl(278,58%,47%)'] },\n      { id: 'terracotta', name: 'TERRACOTTA', colors: ['#C8432F', '#C97A3B', '#A65B2E', '#8A4A28', '#6F3D24'] },\n      { id: 'batik',      name: 'BATIK',      colors: ['#2B4C7E', '#456F8C', '#6E8F6B', '#C99A3B', '#C8432F'] },\n      { id: 'sunset',     name: 'SUNSET',     colors: ['#5B2A57', '#8E3B60', '#C8503F', '#E07B39', '#D9A441'] },\n      { id: 'forest',     name: 'FOREST',     colors: ['#2F4A32', '#41683B', '#5C8046', '#7E9455', '#A3A26B'] },\n      { id: 'ocean',      name: 'OCEAN',      colors: ['#123F54', '#1B6273', '#2F8390', '#55A0A0', '#83B8A9'] },\n      { id: 'slate',      name: 'SLATE',      colors: ['hsl(211,30%,28%)', 'hsl(211,30%,37%)', 'hsl(211,30%,46%)', 'hsl(211,30%,55%)', 'hsl(211,30%,64%)'] },\n      { id: 'ink',        name: 'INK',        colors: ['#23282E', '#39434E', '#4E5964', '#67727C', '#828D96'] }\n    ];\n    return _pals;\n  }\n  /* hex or hsl(h,s%,l%) \u2192 {h,s,l} \u2014 only used by legColor's wraparound\n     rotation below, so it only needs to handle the two formats PALETTES()\n     actually uses. */\n  function _colorHsl(color) {\n    var m = /^hsl\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%\\s*\\)$/i.exec(color);\n    if (m) return { h: +m[1], s: +m[2], l: +m[3] };\n    var hex = /^#([0-9a-f]{6})$/i.exec(color || '');\n    if (!hex) return { h: 0, s: 0, l: 50 };\n    var r = parseInt(hex[1].slice(0, 2), 16) / 255, g = parseInt(hex[1].slice(2, 4), 16) / 255, b = parseInt(hex[1].slice(4, 6), 16) / 255;\n    var mx = Math.max(r, g, b), mn = Math.min(r, g, b), l = (mx + mn) / 2, h = 0, s = 0;\n    if (mx !== mn) {\n      var d = mx - mn;\n      s = l > 0.5 ? d / (2 - mx - mn) : d / (mx + mn);\n      if (mx === r) h = (g - b) / d + (g < b ? 6 : 0);\n      else if (mx === g) h = (b - r) / d + 2;\n      else h = (r - g) / d + 4;\n      h *= 60;\n    }\n    return { h: h, s: s * 100, l: l * 100 };\n  }\n  function legColor(i) {\n    var id = E().routePal || String((config.maps && config.maps.chapterPalette) || 'terracotta').toLowerCase();\n    var pals = PALETTES(), pal = null;\n    for (var k = 0; k < pals.length; k++) { if (pals[k].id === id) { pal = pals[k]; break; } }\n    if (!pal) pal = pals[1];\n    var n = pal.colors.length;\n    var idx = ((i % n) + n) % n;\n    var cycle = Math.floor(i / n);\n    /* every palette has exactly 5 stops. A 6th+ chapter (a real case \u2014\n       e.g. a photo library of repeat visits to one region across many\n       years, which this leg-splitter now correctly surfaces as separate\n       chapters) would otherwise silently repeat chapter 1's exact color\n       at chapter 6, chapter 2's at chapter 7, etc. \u2014 reintroducing the\n       \"can't tell these chapters apart\" problem the split fix was meant\n       to close. Past the first lap, rotate hue a bit each additional lap\n       so it stays visually distinct while keeping the palette's mood. */\n    if (cycle <= 0) return pal.colors[idx];\n    var hsl = _colorHsl(pal.colors[idx]);\n    var h2 = (hsl.h + cycle * 27) % 360;\n    return 'hsl(' + h2.toFixed(1) + ',' + hsl.s.toFixed(0) + '%,' + hsl.l.toFixed(0) + '%)';\n  }\n  function setRoutePal(id) {\n    edit('route', function (e) { e.routePal = id; });\n    timers.palT = setTimeout(function () { if (!destroyed) redrawRoutes(false); }, 20);\n  }\n  function setRouteW(v) {\n    v = Math.max(40, Math.min(240, parseInt(v, 10) || 100));\n    edit('route', function (e) { e.routeW = v; });\n    clearTimeout(timers.wT);\n    timers.wT = setTimeout(function () { if (!destroyed) redrawRoutes(false); }, 60);\n  }\n  function toggleStop(name) {\n    edit('route', function (e) {\n      if (!e.routeSkip) e.routeSkip = {};\n      if (e.routeSkip[name]) delete e.routeSkip[name]; else e.routeSkip[name] = true;\n    });\n    timers.stopT = setTimeout(function () { if (!destroyed) redrawRoutes(false); }, 20);\n  }\n\n  /* \u2500\u2500 back-cover brush shape (0 = one loose stroke \u2026 100 = every stop) \u2500\u2500\n     50 is the design's original look; the value drives waypoint collapse\n     distance, resample density and smoothing passes in coverArt(). */\n  function coverShape() {\n    var v = E().coverShape;\n    return v == null ? 50 : v;\n  }\n  function setCoverShape(v) {\n    v = parseInt(v, 10);\n    if (isNaN(v)) v = 50;\n    v = Math.max(0, Math.min(100, v));\n    edit('cover-shape', function (e) { e.coverShape = v; });\n  }\n\n  /* \u2500\u2500 back-cover brush thickness (0 = thin/dry-brush \u2026 100 = bold/inked) \u2500\n     50 keeps the design's original stroke weight unchanged; scales the\n     wMax passed to every _brushRibbon layer (and the spatter fleck size)\n     in coverArt() by a multiplier anchored at 1\u00D7 on 50. */\n  function coverThickness() {\n    var v = E().coverThickness;\n    return v == null ? 50 : v;\n  }\n  function setCoverThickness(v) {\n    v = parseInt(v, 10);\n    if (isNaN(v)) v = 50;\n    v = Math.max(0, Math.min(100, v));\n    edit('cover-thickness', function (e) { e.coverThickness = v; });\n  }\n\n  /* \u2500\u2500 layout / hero / stat / mode edits \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function setLayout(sid, k) {\n    edit('layout', function (e) {\n      if (!e.layouts) e.layouts = {};\n      e.layouts[sid] = k;\n    });\n  }\n  function setHero(sid, photoId) {\n    edit('hero', function (e) {\n      if (!e.heroes) e.heroes = {};\n      e.heroes[sid] = photoId;\n    });\n  }\n  function toggleStat(k) {\n    var cur = Estats();\n    edit('stats', function (e) {\n      if (!e.stats) e.stats = {};\n      for (var kk in cur) e.stats[kk] = cur[kk];\n      e.stats[k] = !cur[k];\n    });\n  }\n  function setBookMode(mode) {\n    edit('book-mode', function (e) {\n      e.bookMode = mode;\n      e.frInclude = {};\n    });\n    state.cur = 'cover';\n    derive();\n    emit('recompose');\n  }\n  function setMapTone(tone) {\n    edit('map-tone', function (e) { e.mapTone = tone; });\n    applyTiles();\n  }\n  function toggleReasoning() { state.reasoning = !state.reasoning; emit('reasoning'); }\n  function toggleGuides() { state.guides = !state.guides; emit('guides'); }\n\n  /* \u2500\u2500 structural spreads \u2014 generated from REAL data (was hardcoded) \u2500\u2500\u2500\u2500\u2500\u2500 */\n  function pickBest(arr, preferLand) {\n    if (!arr || !arr.length) return null;\n    var cands = arr;\n    if (preferLand) {\n      var lands = arr.filter(function (p) { return p.land; });\n      if (lands.length) cands = lands;\n    }\n    var best = cands[0], bs = -Infinity;\n    cands.forEach(function (p) {\n      var s = (p.score || 0) + (p.land ? 0.1 : 0);\n      if (s > bs) { bs = s; best = p; }\n    });\n    return best;\n  }\n  function wpsOfLeg(ci) { return TRIP_WPS().filter(function (w) { return w.leg === ci; }); }\n  function defaults() {\n    if (_defs && _structKey === _deriveKey) return _defs;\n    var all = [];\n    _chIdx.forEach(function (ci) { all = all.concat(_pools[ci] || []); });\n    var coverP = pickBest(all, true);\n    var heroes = {};\n    _chIdx.forEach(function (ci) {\n      var pool = (_pools[ci] || []).filter(function (p) { return !coverP || p.id !== coverP.id; });\n      heroes[ci] = pickBest(pool.length ? pool : (_pools[ci] || []), false);\n    });\n    var lastCi = _chIdx[_chIdx.length - 1];\n    var lastPool = (_pools[lastCi] || []).filter(function (p) {\n      return (!coverP || p.id !== coverP.id) && (!heroes[lastCi] || p.id !== heroes[lastCi].id);\n    });\n    var closingP = pickBest(lastPool, true) || pickBest(_pools[lastCi] || [], true) || coverP;\n    /* transit gaps \u2014 real >800 km jumps between consecutive legs (trip mode) */\n    var transits = [];\n    if (!isSingle()) {\n      for (var i = 1; i < _chIdx.length; i++) {\n        var prevCi = _chIdx[i - 1], ci = _chIdx[i];\n        var aW = wpsOfLeg(prevCi), bW = wpsOfLeg(ci);\n        var A = aW.length ? aW[aW.length - 1] : lastCoord(_pools[prevCi]);\n        var B = bW.length ? bW[0] : firstCoord(_pools[ci]);\n        if (!A || !B) continue;\n        var km = hav(A, B);\n        if (km <= 800) continue;\n        var prevPool = _pools[prevCi] || [], pool = _pools[ci] || [];\n        var lastP = prevPool[prevPool.length - 1] || null, firstP = pool[0] || null;\n        var gapH = null;\n        if (lastP && firstP) {\n          var t1 = tsOf(lastP), t2 = tsOf(firstP);\n          if (t1 != null && t2 != null && t2 > t1) gapH = (t2 - t1) / 3600000;\n        }\n        transits.push({\n          ci: ci, km: Math.round(km), gapH: gapH,\n          from: { name: shortPlace(A.name || chTitle(prevCi)), lat: A.lat, lng: A.lng, t: lastP ? lastP.t : '', date: lastP ? lastP.date : null },\n          to: { name: shortPlace(B.name || chTitle(ci)), lat: B.lat, lng: B.lng, t: firstP ? firstP.t : '', date: firstP ? firstP.date : null },\n          photoId: firstP ? firstP.id : null\n        });\n      }\n    }\n    var struct = {};\n    if (coverP) struct[coverP.id] = 1;\n    if (closingP) struct[closingP.id] = 1;\n    _chIdx.forEach(function (ci) { if (heroes[ci]) struct[heroes[ci].id] = 1; });\n    transits.forEach(function (t) { if (t.photoId) struct[t.photoId] = 1; });\n    _defs = { coverP: coverP, closingP: closingP, heroes: heroes, transits: transits, struct: struct };\n    _structKey = _deriveKey;\n    return _defs;\n  }\n  function firstCoord(pool) {\n    for (var i = 0; i < (pool || []).length; i++) { if (pool[i].lat != null) return { name: pool[i].place, lat: pool[i].lat, lng: pool[i].lng }; }\n    return null;\n  }\n  function lastCoord(pool) {\n    for (var i = (pool || []).length - 1; i >= 0; i--) { if (pool[i].lat != null) return { name: pool[i].place, lat: pool[i].lat, lng: pool[i].lng }; }\n    return null;\n  }\n  function chTitle(ci) { var c = CHAPTERS()[ci]; return c ? c.title : ''; }\n\n  /* frames chunking \u2014 a spread NEVER mixes days (ported verbatim) */\n  function _mkChunks(pool, ci, idPrefix, target) {\n    var out = [];\n    var byDate = {}, order = [];\n    pool.forEach(function (p) { if (!byDate[p.date]) { byDate[p.date] = []; order.push(p.date); } byDate[p.date].push(p); });\n    var k = 0;\n    order.forEach(function (date) {\n      var dayPool = byDate[date];\n      var nCh = Math.max(1, Math.ceil(dayPool.length / target));\n      var base = Math.floor(dayPool.length / nCh), rem = dayPool.length % nCh, off = 0;\n      for (var j = 0; j < nCh; j++) {\n        var sz = base + (j < rem ? 1 : 0);\n        var chunk = dayPool.slice(off, off + sz); off += sz;\n        if (chunk.length < 2 && j > 0 && out.length) {\n          out[out.length - 1].chunk = out[out.length - 1].chunk.concat(chunk);\n          continue;\n        }\n        out.push(_mkFrameSpread(chunk, ci, idPrefix + '-' + (k++), date, j === 0, target));\n      }\n    });\n    return out;\n  }\n  function _mkFrameSpread(chunk, ci, id, date, dayStart, target) {\n    var counts = {};\n    chunk.forEach(function (p) { counts[p.place] = (counts[p.place] || 0) + 1; });\n    var top = Object.keys(counts).sort(function (a, b) { return counts[b] - counts[a]; })[0] || '';\n    var short = shortPlace(top);\n    return {\n      id: id, type: 'frames', ch: ci, w: Math.min(0.97, 0.55 + chunk.length * 0.04),\n      label: 'Photos \u00B7 ' + short, flow: 'Photos \u2014 ' + short, chunk: chunk,\n      date: date, dayStart: dayStart,\n      why: chunk.length + ' photos on one spread \u2014 ' + top + ' carries it. Spreads never mix days: each one belongs to ' + dayLabel(date) + '. Density adapts (' + target + ' per spread here) so the whole roll prints.'\n    };\n  }\n\n  /* structural (non-frames) spreads for the current derivation */\n  function SPREADS() {\n    var D = defaults();\n    var T = totals(), CH = CHAPTERS();\n    var out = [];\n    var coverWhy = D.coverP\n      ? 'Cover takes the strongest landscape of all ' + T.photos + ' photos \u2014 ' + shortPlace(D.coverP.place) + (D.coverP.t ? ' at ' + D.coverP.t : '') + ', score ' + (D.coverP.score || 0).toFixed(2) + (D.coverP.golden ? ' (golden hour)' : '') + '. Title reads first \u2192 last journey.'\n      : 'Cover \u2014 add photos to compose it.';\n    out.push({\n      id: 'cover', type: 'cover', ch: -1, w: 0.45, label: 'Cover', flow: 'Cover \u2014 A Field Journal',\n      heroId: D.coverP ? D.coverP.id : null, why: coverWhy\n    });\n    /* overview always runs right after the cover \u2014 a single-place book\n       gets a whole-trip map (one point per day) here for exactly the same\n       reason a multi-journey book does: orient before immersing. */\n    out.push({\n      id: 'intro', type: 'intro', ch: -1, w: 0.55, label: 'The Journey', flow: 'The Journey \u2014 orientation',\n      why: isSingle()\n        ? 'One overview map before the days begin \u2014 the reader sees the whole place before the daily detail. After this, one map per day.'\n        : 'One trip-overview map before anything else \u2014 the reader is oriented before they are immersed. After this, exactly one map per journey.',\n      note: 'orientation before immersion', noteCol: '#E7B25A'\n    });\n    if (!isSingle()) {\n      D.transits.forEach(function (t) {\n        out.push({\n          id: 'tr-' + (CH[t.ci] ? CH[t.ci].id : t.ci), type: 'transit', ch: t.ci, w: 0.5,\n          label: 'Getting there', flow: 'Transit \u2014 ' + t.from.name + ' \u2192 ' + t.to.name,\n          from: t.from, to: t.to, km: t.km, gapH: t.gapH, photoId: t.photoId,\n          date: t.to.date, stops: [\n            { code: t.from.name.slice(0, 3).toUpperCase(), name: t.from.name, sub: (t.from.t ? 'LAST PHOTO ' + t.from.t : '') + (t.from.date ? ' \u00B7 ' + dayLabel(t.from.date) : ''), role: 'ORIGIN', lat: t.from.lat, lng: t.from.lng },\n            { code: t.to.name.slice(0, 3).toUpperCase(), name: t.to.name, sub: (t.to.t ? 'FIRST PHOTO ' + t.to.t : '') + (t.to.date ? ' \u00B7 ' + dayLabel(t.to.date) : ''), role: 'ARRIVAL', lat: t.to.lat, lng: t.to.lng }\n          ],\n          why: t.from.name + ' \u2192 ' + t.to.name + ' is a ' + fmtDist(t.km) + ' jump between journeys \u2014 rather than force a photo chapter, the engine folds the crossing into a transit spread: the great-circle does the storytelling.',\n          note: 'movement \u2014 the map does the storytelling', noteCol: '#E7B25A'\n        });\n      });\n      CH.forEach(function (c, ci) {\n        var hero = D.heroes[_chIdx[ci]];\n        out.push({\n          id: 'ch-' + c.id, type: 'chapter', ch: _chIdx[ci], w: 0.6,\n          label: 'Opener \u00B7 hero + map', flow: 'Chapter ' + c.num + ' \u2014 ' + c.title,\n          heroId: hero ? hero.id : null,\n          why: 'Hero leads, the journey map rides beside it \u2014 the book\u2019s default opener. One map per journey, always; switch this spread to Immersive or Map-first in the inspector.'\n        });\n      });\n    } else {\n      /* Day openers render via the SAME renderer as trip-mode chapter\n         openers (renderChapter/chapterBits/statRowsAll derive title, dates,\n         stats and the per-day map generically from groupOf(sp) \u2014 see the\n         comment on renderChapter). Only the fields that function actually\n         reads need to be set here. */\n      CH.forEach(function (c, ci) {\n        var pool = _pools[_chIdx[ci]] || [];\n        if (!pool.length) return;\n        var date = c.date || pool[0].date;\n        var best = D.heroes[_chIdx[ci]] || pickBest(pool, false);\n        var placeCounts = {};\n        pool.forEach(function (p) { placeCounts[p.place] = (placeCounts[p.place] || 0) + 1; });\n        var places = Object.keys(placeCounts).sort(function (a, b) { return placeCounts[b] - placeCounts[a]; });\n        out.push({\n          id: 'do-' + date, type: 'dayopen', ch: _chIdx[ci], w: 0.45, date: date, dayStart: true,\n          label: 'Day opener \u00B7 hero + map', flow: 'Day ' + pad2(ci + 1) + ' \u2014 ' + shortPlace(places[0] || ''),\n          heroId: best ? best.id : null,\n          why: 'Hero leads, today\u2019s own route rides beside it \u2014 the same opener a chapter gets. One map per day; switch this spread to Immersive or Map-first in the inspector.'\n        });\n      });\n    }\n    out.push({\n      id: 'closing', type: 'closing', ch: -1, w: 0.3, label: 'Closing', flow: 'Closing \u2014 the line, drawn',\n      photoId: D.closingP ? D.closingP.id : null,\n      why: 'The end photo is a strong landscape, deliberately distinct from the cover. Colophon set in the trip\u2019s mono voice: KR MAPS \u00B7 ' + roman(T.year) + '.'\n    });\n    return out;\n  }\n\n  /* moment \u2192 spread (verbatim) */\n  function _momSpread(m, single) {\n    var K = KINDS()[m.kind] || {};\n    var ci = m.ci;\n    if (single) {\n      var CH = CHAPTERS();\n      var di = -1;\n      for (var i = 0; i < CH.length; i++) { if (CH[i].date === m.date) { di = _chIdx[i]; break; } }\n      if (di >= 0) ci = di;\n    }\n    var title = m.title || K.name;\n    var why;\n    if (m.kind === 'notes') why = 'A deliberate blank \u2014 ruled space to write in by hand once the book is printed. The engine will never fill it.';\n    else if (m.kind === 'quote') why = 'One line, set large. You added it; the engine just keeps the margins honest.';\n    else if (m.kind === 'hike') why = 'You marked ' + (m.ids || []).length + ' photos as a hike \u2014 the path is traced from their GPS in capture order, and distance, ascent and moving time are guessed from photo times. Type over any number in the inspector.';\n    else why = 'You highlighted ' + (m.ids || []).length + ' photos as one experience \u2014 they hold one page, the story and its numbers hold the other, pinned on a small map.';\n    return {\n      id: 'mm-' + m.id, type: 'momentPage', kind: m.kind, ch: ci, w: K.w || 0.4, date: m.date, m: m,\n      label: (K.short || 'Page') + ' \u00B7 ' + title, flow: (K.short || 'Page') + ' \u2014 ' + title, why: why\n    };\n  }\n  function _spliceMoments(out, single) {\n    Emoments().forEach(function (m) {\n      var sp = _momSpread(m, single);\n      var at = -1;\n      for (var i = 0; i < out.length; i++) { if (out[i].id === m.anchorId) { at = i; break; } }\n      if (at < 0) {\n        var lastOfCh = -1;\n        out.forEach(function (x, i2) { if (x.ch === sp.ch) lastOfCh = i2; });\n        at = lastOfCh >= 0 ? lastOfCh : out.length - 2;\n      }\n      while (at + 1 < out.length && out[at + 1].type === 'momentPage' && out[at + 1].m && out[at + 1].m.anchorId === m.anchorId) at++;\n      out.splice(at + 1, 0, sp);\n    });\n    return out;\n  }\n\n  /* \u2500\u2500 50-spread budget \u2014 raise frames density BEFORE chunking \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     Only kicks in when the design's default targets (8, or 11 for pools\n     over 40) would overshoot the print run. The remaining spread allowance\n     is shared across chapters proportionally to pool size, then a day-aware\n     pass keeps raising the densest chapters because chunks never mix days.\n     Density caps at 12 ('dozen' is the largest grid preset \u2014 beyond that\n     photos would silently drop to the tray), so pathological books (many\n     tiny days) can still exceed 50; the shells gate ordering on bookStats. */\n  var BUDGET = 50;\n  function _framesCountFor(pool, target) {\n    var byDate = {}, n = 0;\n    pool.forEach(function (p) { byDate[p.date] = (byDate[p.date] || 0) + 1; });\n    for (var d in byDate) n += Math.max(1, Math.ceil(byDate[d] / target));\n    return n;\n  }\n  function _budgetTargets(plan, structuralN) {\n    /* plan: [{ci, pool, def}] chapters that will actually chunk (pool \u2265 2) */\n    var targets = {};\n    var total = 0, poolSum = 0;\n    plan.forEach(function (c) {\n      targets[c.ci] = c.def;\n      total += _framesCountFor(c.pool, c.def);\n      poolSum += c.pool.length;\n    });\n    var remaining = BUDGET - structuralN;\n    if (total <= remaining || !plan.length || poolSum <= 0) return targets;\n    if (remaining < plan.length) remaining = plan.length;   /* every chunking chapter keeps \u22651 spread */\n    plan.forEach(function (c) {\n      var share = Math.max(1, Math.floor(remaining * c.pool.length / poolSum));\n      targets[c.ci] = Math.min(12, Math.max(c.def, Math.ceil(c.pool.length / share)));\n    });\n    /* day-boundary quantization can leave the estimate over budget after the\n       proportional pass \u2014 keep bumping the chapter that saves the most */\n    var maxIter = plan.length * 12 + 4;\n    while (maxIter-- > 0) {\n      var est = 0;\n      plan.forEach(function (c) { est += _framesCountFor(c.pool, targets[c.ci]); });\n      if (est <= remaining) break;\n      var best = null, bestSave = -1;\n      plan.forEach(function (c) {\n        if (targets[c.ci] >= 12) return;\n        var save = _framesCountFor(c.pool, targets[c.ci]) - _framesCountFor(c.pool, targets[c.ci] + 1);\n        if (save > bestSave) { best = c.ci; bestSave = save; }\n      });\n      if (best == null) break;   /* everything at the cap \u2014 order gate handles it */\n      targets[best] += 1;\n    }\n    return targets;\n  }\n\n  /* \u2500\u2500 BOOK \u2014 composed spread list; cache key includes edits.rev \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function BOOK() {\n    var key = _deriveKey + '|' + Erev();\n    if (_book && _bookKey === key) return _book;\n    var D = defaults();\n    var S = SPREADS();\n    var single = isSingle();\n    var out = [];\n    if (single) {\n      out.push(findSp(S, 'cover'));\n      out.push(findSp(S, 'intro'));\n      var ex = {};\n      if (D.coverP) ex[D.coverP.id] = 1;\n      if (D.closingP) ex[D.closingP.id] = 1;\n      /* collect the chunkable pools first so the budget can set density */\n      var sPlan = [];\n      CHAPTERS().forEach(function (c, i) {\n        var ci = _chIdx[i];\n        var open = S.find(function (s) { return s.type === 'dayopen' && s.ch === ci; });\n        if (!open) return;\n        var pool = (_pools[ci] || []).filter(function (p) { return p.id !== open.heroId && !ex[p.id]; });\n        sPlan.push({ ci: ci, open: open, pool: pool, def: 8 });\n      });\n      var sStructural = 2 /* cover+intro */ + sPlan.length + 1 /* closing */ + Emoments().length;\n      var sTargets = _budgetTargets(sPlan.filter(function (c) { return c.pool.length >= 2; }), sStructural);\n      sPlan.forEach(function (entry) {\n        out.push(entry.open);\n        if (entry.pool.length >= 2) {\n          var target = sTargets[entry.ci] != null ? sTargets[entry.ci] : entry.def;\n          _mkChunks(entry.pool, entry.ci, 'sfr' + entry.ci, target).forEach(function (c2) { c2.dayStart = false; out.push(c2); });\n        }\n      });\n      out.push(findSp(S, 'closing'));\n      out = out.filter(Boolean);\n      _spliceMoments(out, true);\n    } else {\n      out.push(findSp(S, 'cover'));\n      out.push(findSp(S, 'intro'));\n      var EX = D.struct;\n      var CH = CHAPTERS();\n      var tPlan = [];\n      CH.forEach(function (c, i) {\n        var ci = _chIdx[i];\n        var pool = (_pools[ci] || []).filter(function (p) { return !EX[p.id]; });\n        tPlan.push({ ci: ci, pool: pool, def: pool.length > 40 ? 11 : 8 });\n      });\n      var tStructural = 2 /* cover+intro */ + D.transits.length + CH.length + 1 /* closing */ + Emoments().length;\n      var tTargets = _budgetTargets(tPlan.filter(function (c) { return c.pool.length >= 2; }), tStructural);\n      CH.forEach(function (c, i) {\n        var ci = _chIdx[i];\n        S.forEach(function (s) { if (s.type === 'transit' && s.ch === ci) out.push(s); });\n        var opener = S.find(function (s) { return s.type === 'chapter' && s.ch === ci; });\n        if (opener) out.push(opener);\n        var entry = tPlan[i];\n        if (entry.pool.length >= 2) {\n          var target = tTargets[ci] != null ? tTargets[ci] : entry.def;\n          _mkChunks(entry.pool, ci, 'fr' + ci, target).forEach(function (s2) { out.push(s2); });\n        }\n      });\n      out.push(findSp(S, 'closing'));\n      out = out.filter(Boolean);\n      _spliceMoments(out, false);\n    }\n    /* page numbers: spread i \u2265 1 \u2192 PP 2i\u20132i+1; cover = COVER */\n    var final = [];\n    for (var z = 0; z < out.length; z++) {\n      var cp = {};\n      for (var k2 in out[z]) cp[k2] = out[z][k2];\n      if (z === 0) { cp.pp = 'COVER'; cp.ppl = ''; cp.ppr = ''; }\n      else { cp.pp = 'PP ' + (z * 2) + '\u2013' + (z * 2 + 1); cp.ppl = String(z * 2); cp.ppr = String(z * 2 + 1); }\n      final.push(cp);\n    }\n    /* flow note on the densest frames spread \u2014 'the peak' */\n    var peak = null;\n    final.forEach(function (sp) { if (sp.type === 'frames' && (!peak || sp.w > peak.w)) peak = sp; });\n    if (peak && !peak.note) { peak.note = 'the peak \u2014 densest spread'; peak.noteCol = '#E7B25A'; }\n    _book = final; _bookKey = key;\n    return final;\n  }\n  function findSp(S, id) { return S.find(function (s) { return s.id === id; }); }\n  function spreadById(id) { return BOOK().find(function (s) { return s.id === id; }); }\n  function spreadIndex(id) { return BOOK().findIndex(function (s) { return s.id === id; }); }\n  function totalPP() { return (BOOK().length - 1) * 2 + 1; }\n  function bookStats() {\n    var B = BOOK();\n    return {\n      spreads: B.length, totalPP: totalPP(), pages: totalPP() + 1, budget: BUDGET,\n      photos: totals().photos, suggestions: SUGGESTIONS().length\n    };\n  }\n  /* every photo id the PRINTED book actually places on a page, in book\n     order \u2014 the upload step ships exactly these (a 500-photo library with\n     a 60-photo book uploads 60 files, not 500). Mirrors what the\n     renderers consume per spread type; moment pages count only the\n     frames that print (momPrintsCap), since unprinted picks feed maps\n     and stats, not imagery. */\n  function printPhotoIds() {\n    var seen = {}, out = [];\n    function add(id) { if (id && !seen[id]) { seen[id] = 1; out.push(id); } }\n    BOOK().forEach(function (sp) {\n      if (sp.type === 'cover') add(Eheroes().cover || sp.heroId);\n      else if (sp.type === 'chapter' || sp.type === 'dayopen' || sp.type === 'day') add(heroIdFor(sp));\n      else if (sp.type === 'frames') photosFor(sp).slice(0, FR_PRESETS()[effPreset(sp)].n).forEach(function (p) { add(p.id); });\n      else if (sp.type === 'momentPage' && sp.m) sp.m.ids.slice(0, momPrintsCap(sp, sp.m)).forEach(add);\n      else if (sp.photoId) add(sp.photoId);\n    });\n    return out;\n  }\n\n  /* \u2500\u2500 labels + type names + crumb \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  var TYPE_NAMES = {\n    cover: 'COVER', intro: 'THE JOURNEY', transit: 'TRANSIT', chapter: 'CHAPTER OPENER',\n    frames: 'PHOTOS', day: 'DAY STORY', dayopen: 'DAY OPENER', quote: 'QUIET \u00B7 QUOTE',\n    full: 'FULL BLEED', moment: 'MOMENT', closing: 'CLOSING'\n  };\n  function typeName(sp) {\n    if (!sp) return '';\n    if (sp.type === 'momentPage') {\n      var K = KINDS()[sp.kind] || {};\n      return (K.short || 'MOMENT').toUpperCase() + ' \u2014 YOUR PAGE';\n    }\n    return TYPE_NAMES[sp.type] || '';\n  }\n  function labelFor(sp) {\n    if (!sp) return '';\n    if (sp.type !== 'chapter') return sp.label;\n    var l = Elayouts()[sp.id] || 'heromap';\n    return 'Opener \u00B7 ' + ({ mapstats: 'map + hero', heromap: 'hero + map', immersive: 'immersive' }[l] || l);\n  }\n  function groupOf(sp) {\n    if (!sp || sp.ch < 0) return null;\n    var CH = CHAPTERS();\n    var i = _chIdx.indexOf(sp.ch);\n    return i >= 0 ? CH[i] : null;\n  }\n  function crumb() {\n    var sp = spreadById(state.cur) || BOOK()[0];\n    if (!sp) return '';\n    var bits = [];\n    var g = groupOf(sp);\n    if (g) bits.push((isSingle() ? 'DAY ' : 'CHAPTER ') + g.num + ' \u2014 ' + String(g.title).toUpperCase());\n    bits.push(labelFor(sp).toUpperCase());\n    bits.push('SPREAD ' + (spreadIndex(sp.id) + 1) + ' OF ' + BOOK().length);\n    bits.push(sp.pp);\n    return bits.join(' \u00B7 ');\n  }\n  function folioTitle() {\n    var p = store.project || {};\n    var t = String(p.title || 'Field Journal').toUpperCase();\n    if (p.subtitle) t += ' \u2014 ' + String(p.subtitle).toUpperCase();\n    return t;\n  }\n\n  /* \u2500\u2500 navigation (model only \u2014 shells own keyboard/scroll) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function _nav(id) {\n    if (state.cur === id) return;\n    if (!spreadById(id)) return;\n    state.cur = id;\n    emit('nav');\n  }\n  function navTo(id) { _nav(id); }\n  function navRel(d) {\n    var arr = BOOK();\n    var i = spreadIndex(state.cur);\n    if (i < 0) i = 0;\n    var n = Math.min(arr.length - 1, Math.max(0, i + d));\n    if (n !== i) _nav(arr[n].id);\n  }\n  function navPrev() { navRel(-1); }\n  function navNext() { navRel(1); }\n  function cur() { return spreadById(state.cur) || BOOK()[0] || null; }\n\n  /* \u2500\u2500 reasoning chips + pacing notes (type-generic port) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function chipsFor(sp) {\n    if (!sp) return [];\n    var D = defaults(), T = totals();\n    var defs = null;\n    if (sp.type === 'cover') {\n      var cvP = D.coverP;\n      defs = [\n        ['left:6%; top:8%;', 'Back cover stays quiet \u2014 the journey inked once, in the shape it was actually walked.'],\n        ['left:54%; top:8%;', 'Cover = strongest landscape of ' + T.photos + (cvP ? ' \u00B7 ' + (cvP.score || 0).toFixed(2) + (cvP.golden ? ' \u00B7 golden hour' : '') : '') + '.']\n      ];\n    } else if (sp.type === 'intro') {\n      defs = [\n        ['left:6%; top:6%;', 'Chapters ARE journeys \u2014 stitched in chain order.'],\n        ['left:54%; bottom:10%;', 'One overview map here, then exactly one map per journey.']\n      ];\n    } else if (sp.type === 'transit') {\n      defs = [\n        ['left:6%; top:6%;', 'A ' + fmtDist(sp.km || 0) + ' jump between journeys \u2192 folded into a transit spread.'],\n        ['left:54%; top:8%;', 'Great-circle drawn from your photos\u2019 own coordinates.']\n      ];\n    } else if (sp.type === 'chapter') {\n      var hero = _byId[Eheroes()[sp.id] || sp.heroId];\n      defs = [\n        ['left:6%; top:6%;', 'Hero leads by default \u2014 the reader lands in the place before the map.' + (hero && hero.score != null ? ' Hero: ' + hero.score.toFixed(2) + ' \u2014 best of ' + poolN(sp.ch) + '.' : '')],\n        ['left:54%; top:8%;', 'The journey map rides alongside. One map per journey, always.']\n      ];\n    } else if (sp.type === 'frames') {\n      defs = [\n        ['left:6%; top:12%;', photosFor(sp).length + ' photos packed \u2014 density set per journey, not per template.'],\n        ['left:54%; bottom:12%;', 'Ordered by capture time \u2014 the spread reads the way the day did.']\n      ];\n    } else if (sp.type === 'dayopen') {\n      var heroD = _byId[Eheroes()[sp.id] || sp.heroId];\n      defs = [\n        ['left:6%; top:6%;', 'Single-place book: days ARE the chapters. Hero leads by default.' + (heroD && heroD.score != null ? ' Hero: ' + heroD.score.toFixed(2) + ' \u2014 best of ' + poolN(sp.ch) + '.' : '')],\n        ['left:54%; top:8%;', 'Today\u2019s own route rides alongside. One map per day, always.']\n      ];\n    } else if (sp.type === 'momentPage') {\n      var mom = sp.m;\n      defs = mom && mom.kind === 'hike'\n        ? [['left:6%; top:8%;', 'Marked by you as a hike \u2014 the path is your photos\u2019 GPS, joined in capture order.'], ['left:54%; top:8%;', '\u2248 figures are guesses from photo times + GPS spread. Type over them in the inspector.']]\n        : (mom && (mom.kind === 'notes' || mom.kind === 'quote'))\n          ? [['left:6%; top:8%;', 'A page the engine will never fill \u2014 yours after print.']]\n          : [['left:6%; top:8%;', 'You highlighted these photos as one experience \u2014 photos on one page, story on the other.'], ['left:54%; bottom:12%;', 'Stats guessed from the frames; the small map pins where it happened.']];\n    } else if (sp.type === 'closing') {\n      defs = [\n        ['left:6%; top:8%;', 'End frame: strong landscape, distinct from the cover.'],\n        ['left:54%; top:8%;', 'Colophon in the trip\u2019s mono voice.']\n      ];\n    } else if (sp.type === 'quote') {\n      defs = [['left:6%; top:8%;', 'One photo earns the space \u2014 pacing breather after a dense entry.'], ['left:54%; top:8%;', 'Matte + hairline: the margin does the work.']];\n    } else if (sp.type === 'full') {\n      defs = [['left:6%; top:8%;', 'Horizon clears the gutter across the fold.'], ['left:60%; bottom:16%;', 'Folio suppressed on full-bleed.']];\n    } else if (sp.type === 'moment') {\n      defs = [['left:6%; top:8%;', 'A detected moment \u2014 placed to let the book exhale.']];\n    } else if (sp.type === 'day') {\n      defs = [['left:6%; top:8%;', 'This day carries a story \u2014 expanded from the chapter summary.'], ['left:54%; bottom:8%;', 'Waypoints named from the nearest photos \u00B7 1.2 km merge.']];\n    }\n    return (defs || []).map(function (rc) { return { pos: rc[0], text: rc[1] }; });\n  }\n  var PACE_NOTES = {\n    cover: 'Sets the register: one frame, no noise.',\n    intro: 'Medium weight \u2014 text and map share the load.',\n    transit: 'Movement spread \u2014 keeps tempo without photo density.',\n    chapter: 'Standard opener weight \u2014 orientation before the frames.',\n    day: 'Story spread \u2014 text carries part of the load.',\n    quote: 'The quietest point of the book \u2014 deliberate.',\n    full: 'A breather \u2014 one photo, full width.',\n    moment: 'Exhale after the peak.',\n    closing: 'Quiet close, mirrored to the cover.'\n  };\n  function paceNoteFor(sp) {\n    if (!sp) return '';\n    if (sp.type === 'frames') {\n      return sp.note ? 'THE peak \u2014 nothing denser follows.' : 'Dense by design \u2014 the engine spends its quiet on the journey\u2019s closers.';\n    }\n    if (sp.type === 'dayopen') return 'Chapter-weight opener \u2014 each day starts quiet before its frames.';\n    if (sp.type === 'momentPage') return 'A page you asked for \u2014 the engine holds space and renumbers the folios around it.';\n    return PACE_NOTES[sp.type] || '';\n  }\n\n  /* \u2500\u2500 Leaflet machinery (ported verbatim; Leaflet via krMapsReady) \u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  var timers = {};      /* tracked timeouts, cleared on destroy */\n  var _live = {};       /* kind \u2192 live Leaflet map */\n\n  function mapsCfg() { return config.maps || {}; }\n  function toneName() { return E().mapTone || mapsCfg().tone || 'Print'; }\n  /* Stadia Maps only \u2014 this app used to offer CARTO/MapTiler as fallback\n     providers, but Stadia is the one the client already has a key for, and\n     Stadia's own ToS blocks server-side proxying/caching of tiles (\"proxying\n     or caching without prior authorization\" \u2014 confirmed 2026-07-01 when the\n     krmaps-api Worker's tile-proxy route was retired for exactly this 403).\n     So the key is used the way Stadia actually supports it: client-side,\n     with the key RESTRICTED to your domain(s) on the Stadia dashboard \u2014 that\n     domain check is the real security boundary, not hiding the key. */\n  function stadiaKey() { return String(mapsCfg().stadiaKey || '').trim(); }\n  function tones() {\n    var sk = stadiaKey();\n    var q = sk ? ('?api_key=' + sk) : '';\n    var st = function (style, ext, retina) { return 'https://tiles.stadiamaps.com/tiles/' + style + '/{z}/{x}/{y}' + (retina === false ? '' : '{r}') + '.' + (ext || 'png') + q; };\n    return {\n      Print:      { url: st('alidade_smooth'), sub: 'abc', filter: 'sepia(.32) saturate(1.25) hue-rotate(-10deg) brightness(1.03) contrast(.95)', outdoor: st('outdoors') },\n      Voyager:    { url: st('stamen_terrain'), sub: 'abc', outdoor: st('outdoors') },\n      Dark:       { url: st('alidade_smooth_dark'), sub: 'abc', outdoor: st('outdoors') },\n      Watercolor: { url: st('stamen_watercolor', 'jpg', false), sub: 'abc', filter: 'saturate(.94)', outdoor: st('stamen_terrain') },\n      Toner:      { url: st('stamen_toner_lite'), sub: 'abc', filter: 'contrast(.92) brightness(1.03)', outdoor: st('outdoors') },\n      Outdoors:   { url: st('outdoors'), sub: 'abc', outdoor: st('outdoors') },\n      Satellite:  { url: st('alidade_satellite'), sub: 'abc', filter: 'saturate(.9) brightness(1.04)', outdoor: st('alidade_satellite') }\n    };\n  }\n  function mapCredit() { return '\u00A9 Stadia Maps \u00B7 Stamen \u00B7 \u00A9 OpenStreetMap'; }\n  function mapCreditShort() { return '\u00A9 Stadia \u00B7 Stamen'; }\n  /* the visual tone picker \u2014 every swatch is a REAL Stadia tile (same z/x/y,\n     over Vienna \u2014 no reason not to) so the reader compares actual styles,\n     not a guess or a CSS-filter mockup. Filters applied here match tileMap()\n     exactly so the swatch is honest about what the map will look like. */\n  var TONE_SWATCH_TILE = { z: 11, x: 1117, y: 710 };\n  function mapToneOptions() {\n    var cur = String(toneName()).toLowerCase();\n    var T = tones();\n    return Object.keys(T).map(function (name) {\n      var t = T[name];\n      var url = t.url\n        .replace('{z}', TONE_SWATCH_TILE.z).replace('{x}', TONE_SWATCH_TILE.x).replace('{y}', TONE_SWATCH_TILE.y)\n        .replace('{r}', '@2x').replace('{s}', (t.sub || 'a').charAt(0));\n      return { key: name, name: name.toUpperCase(), swatch: url, filter: t.filter || 'none', active: cur === name.toLowerCase() };\n    });\n  }\n\n  function mapKindFor(sp) {\n    if (!sp) return null;\n    if (sp.type === 'intro') return 'overview';\n    if (sp.type === 'transit') return 'transit:' + sp.id;\n    if (sp.type === 'chapter') return 'leg' + (sp.ch >= 0 ? sp.ch : 0);\n    if (sp.type === 'day' || sp.type === 'dayopen') return 'day:' + sp.id;\n    if (sp.type === 'momentPage') {\n      var lay = (KINDS()[sp.kind] || {}).layout;\n      if (lay === 'hike' || lay === 'hi') return 'mom:' + sp.id;\n    }\n    return null;\n  }\n  function curMapKind() { return mapKindFor(spreadById(state.cur)); }\n  function zoomLabel() {\n    var kind = curMapKind();\n    var adj = kind ? (EzoomAdj()[kind] || 0) : 0;\n    return adj ? ((adj > 0 ? '+' : '') + adj.toFixed(1)) : 'FIT';\n  }\n  function mapKindLabel(kind) {\n    if (kind === 'overview') return 'TRIP OVERVIEW';\n    if (String(kind).slice(0, 8) === 'transit:') return 'FLIGHT MAP';\n    var dot = EmapMode()[kind] === 'dot';\n    if (String(kind).slice(0, 4) === 'day:') return dot ? 'DAY \u2014 PLACE DOT' : 'DAY ROUTE';\n    if (String(kind).slice(0, 4) === 'mom:') return 'THIS PAGE\u2019S MAP';\n    return dot ? 'CHAPTER \u2014 PLACE DOT' : 'JOURNEY MAP';\n  }\n\n  function _fitMap(map, bounds, pad, maxZoom) {\n    var L = root.L; if (!L || !map || !bounds) return;\n    try {\n      var adj = EzoomAdj()[map._krKindHint] || 0;\n      if (!adj) { map.fitBounds(bounds, { padding: [pad, pad], maxZoom: maxZoom, animate: false }); return; }\n      var z = map.getBoundsZoom(bounds, false, L.point(pad, pad));\n      if (maxZoom != null && z > maxZoom) z = maxZoom;\n      z = Math.max(2, Math.min(18, z + adj));\n      map.setView(bounds.getCenter(), z, { animate: false });\n    } catch (e) {}\n  }\n  function _refitNow(m) {\n    if (!m || !m._container || !HAS_DOC || !document.body.contains(m._container)) return;\n    try {\n      m.invalidateSize(true);\n      if (m._krb) {\n        var sz = m.getSize();\n        var pad = Math.max(6, Math.min(26, Math.round(Math.min(sz.x > 0 ? sz.x : 200, sz.y > 0 ? sz.y : 200) * 0.12)));\n        _fitMap(m, m._krb, pad, (m._krfit || {}).maxZoom);\n      }\n    } catch (e) {}\n  }\n  function zoomBy(d) {\n    var kind = curMapKind(); if (!kind) return;\n    var cur0 = EzoomAdj()[kind] || 0;\n    var v = Math.max(-3, Math.min(3, cur0 + d));\n    edit('map-zoom', function (e) {\n      if (!e.zoomAdj) e.zoomAdj = {};\n      if (v === 0) delete e.zoomAdj[kind]; else e.zoomAdj[kind] = v;\n    });\n    timers.zoomT = setTimeout(function () { var m = _live[kind]; if (m && !destroyed) _refitNow(m); }, 20);\n  }\n  function zoomResetCur() {\n    var kind = curMapKind(); if (!kind) return;\n    edit('map-zoom', function (e) {\n      if (e.zoomAdj) delete e.zoomAdj[kind];\n    });\n    timers.zoomT = setTimeout(function () { var m = _live[kind]; if (m && !destroyed) _refitNow(m); }, 20);\n  }\n  /* ROUTE LINE \u21C4 PLACE DOT on the current opener's map. Stored per kind\n     (like zoomAdj) so each chapter/day decides for itself. The live map is\n     redrawn here; a shell that also rebuilds the stage just remounts the\n     map fresh \u2014 the timer's redraw of the replaced instance no-ops behind\n     drawOneRoute's document.body.contains guard. */\n  function setMapMode(mode) {\n    var kind = curMapKind(); if (!kind) return;\n    mode = mode === 'dot' ? 'dot' : 'route';\n    if ((EmapMode()[kind] === 'dot' ? 'dot' : 'route') === mode) return;\n    edit('map-mode', function (e) {\n      if (!e.mapMode) e.mapMode = {};\n      if (mode === 'dot') e.mapMode[kind] = 'dot'; else delete e.mapMode[kind];\n    });\n    timers.modeT = setTimeout(function () { var m = _live[kind]; if (m && !destroyed) drawOneRoute(m, kind, false); }, 20);\n  }\n  /* the one mark a PLACE DOT map shows \u2014 the opener's most-photographed\n     place (ties break toward more photos), averaged over that place's own\n     shots so the dot sits on the place, not on a route midpoint */\n  function chDotPin(kind) {\n    kind = String(kind || '');\n    var ci = 0, recs = [];\n    if (kind.slice(0, 4) === 'day:') {\n      var spD = spreadById(kind.slice(4));\n      ci = spD && spD.ch >= 0 ? spD.ch : 0;\n      if (spD && spD.date) recs = (_pools[ci] || []).filter(function (p) { return p.date === spD.date && p.lat != null && p.lng != null; });\n    } else {\n      var mL = /^leg(\\d+)$/.exec(kind);\n      if (!mL) return null;\n      ci = parseInt(mL[1], 10);\n      recs = (_pools[ci] || []).filter(function (p) { return p.lat != null && p.lng != null; });\n    }\n    var cnt = {}, best = null;\n    recs.forEach(function (p) {\n      var k = String(p.place || '').toLowerCase(); if (!k) return;\n      cnt[k] = (cnt[k] || 0) + 1;\n      if (!best || cnt[k] > cnt[best]) best = k;\n    });\n    if (best) {\n      var lat = 0, lng = 0, n = 0, name = '';\n      recs.forEach(function (p) {\n        if (String(p.place || '').toLowerCase() !== best) return;\n        lat += p.lat; lng += p.lng; n++;\n        if (!name) name = p.place;\n      });\n      return { name: name, lat: lat / n, lng: lng / n, leg: ci };\n    }\n    /* leg-level fallback only (a day with no GPS of its own borrowing its\n       OWN leg's route is still honest \u2014 same journey). Do NOT fall further\n       to TRIP_WPS() when the leg itself has zero waypoints (a leg with no\n       GPS photos at all, e.g. an old undated-by-place visit): that used to\n       borrow a real place belonging to a DIFFERENT leg/journey entirely\n       and relabel it with `leg: ci`, producing a specific, confidently\n       wrong place name on the map. Returning null here instead makes the\n       caller (routeData's dot-mode branch, chapterBits' mapLabel) fall\n       back to the ordinary dimmed route-line map / the chapter's own\n       place-name title \u2014 uninformative for a truly location-less chapter,\n       but never actively wrong. */\n    var wf = wpsOfLeg(ci);\n    if (!wf.length) return null;\n    var mid = wf[Math.floor(wf.length / 2)];\n    return { name: mid.name, lat: mid.lat, lng: mid.lng, leg: ci };\n  }\n\n  /* wait for the theme's Leaflet loader \u2014 NEVER inject our own */\n  function ensureLeaflet(cb) {\n    if (root.L) { cb(); return; }\n    if (root.krMapsReady && typeof root.krMapsReady.then === 'function') {\n      root.krMapsReady.then(function () { if (!destroyed) cb(); }).catch(function () {});\n    }\n  }\n  function makeMap(elm, onReady) {\n    if (!HAS_DOC || !elm) return;\n    var refit = function (map, tries) {\n      if (!elm._map || destroyed) return;\n      map.invalidateSize(true);\n      if (map._krb) {\n        var sz = map.getSize();\n        var pad = Math.max(6, Math.min(26, Math.round(Math.min(sz.x > 0 ? sz.x : 200, sz.y > 0 ? sz.y : 200) * 0.12)));\n        _fitMap(map, map._krb, pad, (map._krfit || {}).maxZoom);\n      }\n      if (map.getSize().x <= 1 && tries < 50) { setTimeout(function () { refit(map, tries + 1); }, 140); }\n    };\n    var startTries = 0;\n    var start = function () {\n      if (destroyed) return;\n      if (!root.L) { ensureLeaflet(function () { setTimeout(start, 0); }); return; }\n      if (elm._map) return;\n      if (!elm.isConnected || elm.clientHeight <= 0 || elm.clientWidth <= 0) {\n        // renderSpread builds the sheet BEFORE the shell inserts it \u2014 keep\n        // retrying while disconnected too (capped: an abandoned sheet that\n        // never enters the DOM stops polling after ~7 s).\n        if (startTries++ < 80) setTimeout(start, 90);\n        return;\n      }\n      var L = root.L;\n      var map = L.map(elm, {\n        zoomControl: false, attributionControl: false, dragging: false, scrollWheelZoom: false,\n        doubleClickZoom: false, boxZoom: false, keyboard: false, touchZoom: false, tap: false,\n        zoomSnap: 0.25, fadeAnimation: false\n      });\n      elm._map = map;\n      onReady(map, L);\n      refit(map, 0);\n      setTimeout(function () { refit(map, 0); }, 500);\n      setTimeout(function () { refit(map, 0); }, 1400);\n      try {\n        var ro = new ResizeObserver(function () { refit(map, 999); });\n        ro.observe(elm);\n        elm._ro2 = ro;\n      } catch (e) {}\n    };\n    start();\n  }\n  function mountMap(elm, kind) {\n    if (!elm || !HAS_DOC) return;\n    if (elm._map) {\n      if (elm._krKind === kind) {\n        var m0 = elm._map;\n        setTimeout(function () { if (!destroyed) _refitNow(m0); }, 80);\n        return;\n      }\n      try { elm._map.remove(); } catch (e) {}\n      elm._map = null;\n    }\n    elm._krKind = kind;\n    makeMap(elm, function (map) {\n      map._krKindHint = kind;\n      _live[kind] = map;\n      tileMap(map);\n      /* print renders (__KRP_PRINT_DPR set) draw routes synchronously \u2014\n         the 1.1s draw-on animation could be photographed mid-stroke */\n      var anim = !root.__KRP_PRINT_DPR;\n      if (String(kind).slice(0, 8) === 'transit:') drawFlight(map, kind, anim);\n      else drawOneRoute(map, kind, anim);\n    });\n  }\n  function tileMap(m) {\n    var L = root.L; if (!L || !m) return;\n    var tone = toneName();\n    var t = tones()[tone] || tones().Print;\n    var url = t.url, filter = t.filter || 'none';\n    var hint = String(m._krKindHint || '');\n    var isHike = false;\n    if (t.outdoor && hint.slice(0, 4) === 'mom:') {\n      var spId = hint.slice(4);\n      var mm = Emoments().find(function (m0) { return 'mm-' + m0.id === spId; });\n      if (mm && mm.kind === 'hike') { url = t.outdoor; filter = 'saturate(.92) contrast(.96)'; isHike = true; }\n    }\n    if (m._krTiles) { try { m.removeLayer(m._krTiles); } catch (e) {} }\n    /* PRINT-GRADE TILES \u2014 same extents, denser imagery. Request Stadia's\n       @2x renders outright ({r} forced, not display-dependent), AND draw\n       the whole map from one zoom level deeper shown at half size\n       (tileSize 128 + zoomOffset 1 \u2014 the trick detectRetina plays on\n       retina screens, applied unconditionally). Together that's ~4x the\n       pixel density of a plain screen map: lines and labels render fine\n       and crisp, the way the printed page will, instead of chunky\n       screen-zoom cartography. Watercolor has no @2x variant (its URL\n       carries no {r}) \u2014 it still gets the overzoom half of the trick. */\n    m._krTiles = L.tileLayer(url.replace('{r}', '@2x'), { subdomains: t.sub || 'abc', tileSize: 128, zoomOffset: 1, maxZoom: 18, crossOrigin: true });\n    /* Leaflet never retries a failed tile \u2014 one dropped request (blip,\n       rate-limit) leaves a permanent hole that reads as a glitchy tile\n       border. Re-ask up to twice with a little backoff; after that the\n       hole stays (better than hammering a genuinely failing URL). */\n    m._krTiles.on('tileerror', function (ev) {\n      var img = ev && ev.tile;\n      if (!img || !img.src) return;\n      var tries = img._krRetry || 0;\n      if (tries >= 2) return;\n      img._krRetry = tries + 1;\n      var src = img.src;\n      setTimeout(function () {\n        if (destroyed || !img.isConnected) return;\n        img.src = '';\n        img.src = src;\n      }, 500 * (tries + 1) + Math.round(Math.random() * 300));\n    });\n    m._krTiles.addTo(m);\n    m._krTiles.bringToBack();\n    /* seam-free flattening: live img grid while this layer loads, one\n       canvas once it lands (see flatSnapshot above). 'tileload' with the\n       canvas already up = a retried tile arriving late \u2014 redraw it in. */\n    flatCanvas(m);\n    flatShow(m);\n    m._krTiles.on('load', function () { flatSchedule(m); });\n    m._krTiles.on('tileload', function () {\n      if (m._krFlat && m._krFlat.style.display !== 'none') flatSchedule(m);\n    });\n    try {\n      var pane = m.getPane('tilePane');\n      if (pane) pane.style.filter = filter;\n      /* tone class on the container so kr-press-studio.css can theme too */\n      var c = m._container;\n      if (c) {\n        c.className = c.className.replace(/\\s*krp-tone-[a-z]+/g, '').replace(/\\s*krp-map--hike/g, '');\n        c.className += ' krp-tone-' + String(tone).toLowerCase() + (isHike ? ' krp-map--hike' : '');\n      }\n    } catch (e) {}\n  }\n  /* \u2500\u2500 seamless static maps: flatten loaded tiles into ONE canvas \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     Every map here is non-interactive, but Leaflet still composites each\n     tile as its own layer \u2014 and at the fractional zooms our .25-step fits\n     land on, per-tile edges get anti-aliased independently, which shows as\n     hairline grid lines (worst over flat water). No amount of 1px overlap\n     hides that on every GPU. So once a view's tiles finish loading they're\n     drawn into a single canvas (one raster = zero internal edges) and the\n     img grid is hidden. Any view change shows the grid again and\n     re-snapshots after the new tiles land. drawImage of crossOrigin tiles\n     is safe (Stadia serves CORS headers), and the flattened canvas is the\n     natural base for print/PDF export later. Geometry is normalized\n     through getBoundingClientRect ratios, so ancestor scaling (the stage\n     zoom, cqw page sizing) cancels out. */\n  function flatCanvas(m) {\n    if (m._krFlat) return m._krFlat;\n    var c = document.createElement('canvas');\n    c.className = 'krp-map-flat';\n    /* z 250: above the hidden tile pane (200), below overlays (400+) */\n    c.style.cssText = 'position:absolute;left:0;top:0;width:100%;height:100%;z-index:250;pointer-events:none;display:none;';\n    m._container.appendChild(c);\n    m._krFlat = c;\n    m.on('movestart zoomstart move', function () { flatShow(m); });\n    m.on('moveend zoomend resize', function () { flatSchedule(m); });\n    return c;\n  }\n  function flatShow(m) {\n    try {\n      var pane = m.getPane && m.getPane('tilePane');\n      if (pane) pane.style.visibility = '';\n      if (m._krFlat) m._krFlat.style.display = 'none';\n    } catch (e) {}\n  }\n  function flatSchedule(m) {\n    if (m._krFlatT) clearTimeout(m._krFlatT);\n    m._krFlatT = setTimeout(function () { flatSnapshot(m); }, 140);\n  }\n  function flatSnapshot(m) {\n    try {\n      if (destroyed || !m || !m._container || !HAS_DOC || !document.body.contains(m._container)) return;\n      if (m._krTiles && m._krTiles._loading === true) return;  /* wait for the layer's own 'load' */\n      var pane = m.getPane('tilePane');\n      if (!pane) return;\n      /* only the CURRENT zoom level's container \u2014 a not-yet-pruned old\n         level would bake in at a different scale, misaligned at joints */\n      var lvl = m._krTiles && m._krTiles._level && m._krTiles._level.el;\n      var tiles = (lvl || pane).querySelectorAll('img.leaflet-tile-loaded');\n      if (!tiles.length) return;\n      var rect = m._container.getBoundingClientRect();\n      if (rect.width < 4 || rect.height < 4) return;\n      var c = flatCanvas(m);\n      /* backing scale: device pixels for crispness, capped so a deeply\n         stage-zoomed map can't mint a monster canvas */\n      /* __KRP_PRINT_DPR: the print renderer (kr-press-print.js) sets an\n         exact raster scale (300dpi / 96csspx = 3.125) so map bakes match\n         print density instead of the screen's devicePixelRatio; the cap\n         rises so a full-page 297mm map (3508px @ 300dpi) isn't clipped. */\n      var pd = root.__KRP_PRINT_DPR;\n      var dpr = pd || Math.max(1, Math.min(2.5, root.devicePixelRatio || 1));\n      var W = Math.round(rect.width * dpr), H = Math.round(rect.height * dpr);\n      var CAP = pd ? 4200 : 2800;\n      if (W > CAP) { H = Math.round(H * CAP / W); W = CAP; }\n      if (H > CAP) { W = Math.round(W * CAP / H); H = CAP; }\n      if (c.width !== W) c.width = W;\n      if (c.height !== H) c.height = H;\n      var ctx = c.getContext('2d');\n      if (!ctx) return;\n      ctx.clearRect(0, 0, W, H);\n      var drawn = 0;\n      for (var i = 0; i < tiles.length; i++) {\n        var img = tiles[i];\n        if (!img.complete || !img.naturalWidth) continue;\n        var tr = img.getBoundingClientRect();\n        var x = Math.round((tr.left - rect.left) / rect.width * W);\n        var y = Math.round((tr.top - rect.top) / rect.height * H);\n        var x2 = Math.round((tr.right - rect.left) / rect.width * W);\n        var y2 = Math.round((tr.bottom - rect.top) / rect.height * H);\n        if (x2 <= 0 || y2 <= 0 || x >= W || y >= H) continue;\n        /* EXACT shared-edge tiling: adjacent tiles' true rects meet at the\n           same float coordinate, so rounding each EDGE (not each size)\n           gives both neighbours the identical integer boundary \u2014 no gap,\n           no overlap, and content displacement bounded by half a backing\n           pixel. Never stretch a tile to \"cover\" a joint: scaled imagery\n           shifts by a full pixel at the far edge and visibly cuts labels\n           in half at the boundary (that bug shipped once already). */\n        try { ctx.drawImage(img, x, y, x2 - x, y2 - y); drawn++; } catch (e2) {}\n      }\n      if (!drawn) return;\n      c.style.filter = pane.style.filter || '';\n      c.style.display = '';\n      pane.style.visibility = 'hidden';\n    } catch (e) { flatShow(m); }\n  }\n  /* The bake's backing resolution is whatever the map measured AT SNAPSHOT\n     TIME \u2014 but the stage zoom scales the sheet with a CSS transform, which\n     fires no map events. Zoom the book canvas to 300% and a rest-time bake\n     is just stretched 3x: the basemap goes soft while the SVG route and\n     page text stay crisp (they re-rasterize). The desktop shell calls this\n     after a zoom gesture settles: any flattened map whose on-screen size\n     outgrew its bake (or shrank to a fraction of it) is re-baked from the\n     same already-loaded tiles at the new effective resolution. */\n  function refreshMapRasters() {\n    if (!HAS_DOC) return;\n    eachMap(function (m) {\n      var c = m._krFlat;\n      if (!c || c.style.display === 'none' || !c.width) return;\n      var rect = m._container.getBoundingClientRect();\n      if (rect.width < 4) return;\n      var dpr = Math.max(1, Math.min(2.5, root.devicePixelRatio || 1));\n      var want = Math.min(2800, Math.round(rect.width * dpr));\n      if (want > c.width * 1.15 || want < c.width * 0.5) flatSchedule(m);\n    });\n  }\n  function eachMap(fn) {\n    Object.keys(_live).forEach(function (kind) {\n      var m = _live[kind];\n      if (m && m._container && HAS_DOC && document.body.contains(m._container)) fn(m, kind);\n    });\n  }\n  function applyTiles() { if (!root.L) return; eachMap(function (m) { tileMap(m); }); }\n  function redrawRoutes(animate) {\n    eachMap(function (m, kind) {\n      if (String(kind).slice(0, 8) === 'transit:') drawFlight(m, kind, animate);\n      else drawOneRoute(m, kind, animate);\n    });\n  }\n\n  /* route data per map kind \u2014 real waypoints/pools (was demo TRIP_WPS) */\n  function routeData(kind) {\n    kind = String(kind || '');\n    /* PLACE DOT mode (openers only) \u2014 one mark on the chapter's home\n       ground instead of the whole route */\n    if (EmapMode()[kind] === 'dot' && (kind.slice(0, 4) === 'day:' || /^leg\\d+$/.test(kind))) {\n      var pinM = chDotPin(kind);\n      if (pinM) return { chDot: true, pin: pinM, wps: [pinM] };\n    }\n    if (kind.slice(0, 4) === 'day:') {\n      var spD = spreadById(kind.slice(4));\n      var wpsD = [];\n      if (spD && spD.date && spD.ch >= 0) {\n        var seenD = {};\n        (_pools[spD.ch] || []).forEach(function (p) {\n          if (p.date !== spD.date || p.lat == null) return;\n          var k = String(p.place).toLowerCase();\n          if (seenD[k]) return; seenD[k] = 1;\n          wpsD.push({ name: p.place, lat: p.lat, lng: p.lng, leg: spD.ch });\n        });\n      }\n      if (wpsD.length < 2) wpsD = wpsOfLeg(spD ? spD.ch : 0);\n      if (wpsD.length < 2) wpsD = TRIP_WPS();\n      return { wps: wpsD, fitSelf: true };\n    }\n    if (kind.slice(0, 4) === 'mom:') {\n      var spId = kind.slice(4);\n      var mm = Emoments().find(function (m0) { return 'mm-' + m0.id === spId; });\n      var wps2 = [];\n      if (mm) {\n        momRecs(mm).forEach(function (p) {\n          if (p.lat == null || p.lng == null) return;\n          var last = wps2[wps2.length - 1];\n          if (last && last.lat === p.lat && last.lng === p.lng) return;\n          wps2.push({ name: p.place, lat: p.lat, lng: p.lng, leg: (mm.ci || 0) });\n        });\n      }\n      if (wps2.length === 1) {\n        var o = wps2[0];\n        var seqPts = [], ctx2 = [];\n        if (mm) {\n          var seenN = {};\n          (_pools[mm.ci] || []).forEach(function (p) {\n            if (p.date !== mm.date || p.lat == null) return;\n            var n2 = String(p.place).toLowerCase();\n            if (seenN[n2]) return; seenN[n2] = 1;\n            var pt = { name: p.place, lat: p.lat, lng: p.lng };\n            if (hav(o, pt) < 45) seqPts.push(pt);\n          });\n          var pinAt = seqPts.findIndex(function (p2) { return String(p2.name).toLowerCase() === String(o.name).toLowerCase(); });\n          if (pinAt < 0) { seqPts.unshift(o); pinAt = 0; }\n          var lo = Math.max(0, pinAt - 2), hi = Math.min(seqPts.length, pinAt + 3);\n          seqPts = seqPts.slice(lo, hi);\n          ctx2 = seqPts.filter(function (p2) { return String(p2.name).toLowerCase() !== String(o.name).toLowerCase(); });\n        }\n        var wpsAll = [o].concat(ctx2.map(function (c2) { return { name: c2.name, lat: c2.lat, lng: c2.lng, leg: o.leg }; }));\n        if (wpsAll.length === 1) wpsAll.push({ name: o.name, lat: o.lat + 0.006, lng: o.lng + 0.006, leg: o.leg });\n        return { wps: wpsAll, fitSelf: true, dotsOnly: true, pin: o, ctx: ctx2, seq: seqPts.map(function (p2) { return [p2.lat, p2.lng]; }) };\n      }\n      if (!wps2.length) {\n        var fall = TRIP_WPS();\n        wps2 = fall.length >= 2 ? fall.slice(0, 2) : [{ name: '\u2014', lat: 0, lng: 0, leg: 0 }, { name: '\u2014', lat: 0.02, lng: 0.03, leg: 0 }];\n      }\n      return { wps: wps2, fitSelf: true };\n    }\n    var skip = ErouteSkip();\n    var wps = TRIP_WPS().filter(function (w) { return !skip[w.name]; });\n    if (wps.length < 2) wps = TRIP_WPS();\n    var m = /^leg(\\d+)$/.exec(kind);\n    return { wps: wps, highlightLeg: m ? parseInt(m[1], 10) : null };\n  }\n  function segArc(a, b, i) {\n    var dx = b.lng - a.lng, dy = b.lat - a.lat, dist = Math.hypot(dx, dy);\n    if (dist < 0.05) return [[a.lat, a.lng], [b.lat, b.lng]];\n    var perpX = -dy, perpY = dx, pLen = Math.hypot(perpX, perpY);\n    var bowMul = ErouteBow() / 100;\n    var sign = (i % 2 === 0) ? 1 : -1, bowScale = (0.15 + ((i % 3) * 0.05)) * bowMul, S = 90, out = [];\n    for (var j = 0; j <= S; j++) {\n      var t = j / S, lx = a.lng + dx * t, ly = a.lat + dy * t;\n      var bow = 4 * t * (1 - t) * (dist * bowScale) * sign;\n      out.push([ly + (perpY / pLen) * bow, lx + (perpX / pLen) * bow]);\n    }\n    return out;\n  }\n  function drawOneRoute(map, kind, animate) {\n    var L = root.L;\n    if (!map || !L || !map._container || !HAS_DOC || !document.body.contains(map._container)) return;\n    var wf = ErouteW() / 100;\n    var data = routeData(kind);\n    if (data.chDot && data.pin) { drawChapterDot(map, data.pin); return; }\n    var wps = data.wps, n = wps.length, pairs = n - 1, HL = data.highlightLeg;\n    if (pairs < 1) return;\n    if (!map._krHalo) { map._krHalo = L.layerGroup().addTo(map); map._krColor = L.layerGroup().addTo(map); map._krDots = L.layerGroup().addTo(map); }\n    map._krHalo.clearLayers(); map._krColor.clearLayers(); map._krDots.clearLayers();\n    var arcs = [], allPts = [], arcStart = [];\n    for (var i = 0; i < pairs; i++) {\n      arcStart.push(allPts.length);\n      var arc = segArc(wps[i], wps[i + 1], i);\n      arcs.push(arc);\n      for (var k = 0; k < arc.length; k++) allPts.push(arc[k]);\n    }\n    var lc = function (leg) { return (HL != null) ? (leg === HL ? legColor(leg) : '#B7AFA0') : legColor(leg); };\n    var color = [], cumEnd = [];\n    for (var p2 = 0; p2 < pairs; p2++) {\n      var arc2 = arcs[p2], legB = wps[p2 + 1].leg || 0, step = 9;\n      for (var j = 0; j < arc2.length - 1; j += step) {\n        var endJ = Math.min(j + step, arc2.length - 1);\n        var seg = arc2.slice(j, endJ + 1);\n        var isHi = HL == null || legB === HL;\n        color.push({ seg: seg, c: lc(legB), o: isHi ? 0.95 : 0.55, w: (isHi ? 3 : 1.8) * wf });\n        cumEnd.push(arcStart[p2] + endJ);\n      }\n    }\n    var haloLine = L.polyline([], { color: '#fff', weight: 5.6 * wf, opacity: 0.65, lineCap: 'round', lineJoin: 'round', interactive: false }).addTo(map._krHalo);\n    var dots = wps.map(function (w, wi) {\n      var leg = w.leg || 0, hi = (HL == null) || (leg === HL);\n      var big = (HL != null) ? hi : (wi === 0 || wi === n - 1);\n      return { ll: [w.lat, w.lng], hi: hi, big: big, c: lc(leg), at: Math.round((wi / Math.max(1, n - 1)) * color.length) };\n    });\n    var addSeg = function (kk) { var c = color[kk]; if (c) L.polyline(c.seg, { color: c.c, weight: c.w, opacity: c.o, lineCap: 'butt', lineJoin: 'round', interactive: false }).addTo(map._krColor); };\n    var addDot = function (d) {\n      if (HL != null) {\n        if (d.hi) L.circleMarker(d.ll, { radius: 5, color: '#fff', weight: 2.4, fillColor: d.c, fillOpacity: 1, interactive: false }).addTo(map._krDots);\n        else L.circleMarker(d.ll, { radius: 3, color: d.c, weight: 1.6, fillColor: '#fff', fillOpacity: 0.85, interactive: false }).addTo(map._krDots);\n      } else {\n        L.circleMarker(d.ll, { radius: d.big ? 5.5 : 3.4, color: d.big ? '#fff' : d.c, weight: d.big ? 2.4 : 1.8, fillColor: d.big ? d.c : '#fff', fillOpacity: 1, interactive: false }).addTo(map._krDots);\n      }\n    };\n    var setHaloTo = function (kk) { if (kk < 0) { haloLine.setLatLngs([]); return; } haloLine.setLatLngs(allPts.slice(0, cumEnd[kk] + 1)); };\n    var isDay = !!data.fitSelf;\n    var sz = map.getSize();\n    var pad = Math.max(6, Math.min(26, Math.round(Math.min(sz.x > 0 ? sz.x : 200, sz.y > 0 ? sz.y : 200) * 0.12)));\n    var b = L.latLngBounds(allPts); map._krb = b; map._krfit = { maxZoom: isDay ? 14 : 8 };\n    _fitMap(map, b, pad, isDay ? 14 : 8);\n    var token = (map._krToken = (map._krToken || 0) + 1);\n    if (data.dotsOnly) {\n      var pin = data.pin || wps[0];\n      var pc = lc(pin.leg || 0);\n      if (data.seq && data.seq.length > 1) {\n        L.polyline(data.seq, { color: '#9AA4AC', weight: 1.5, opacity: 0.85, dashArray: '2 5', lineCap: 'round', lineJoin: 'round', interactive: false }).addTo(map._krColor);\n      }\n      (data.ctx || []).forEach(function (c2) {\n        L.circleMarker([c2.lat, c2.lng], { radius: 3, color: '#9AA4AC', weight: 1.4, fillColor: '#fff', fillOpacity: 0.9, interactive: false }).addTo(map._krDots);\n        L.marker([c2.lat, c2.lng], { icon: L.divIcon({ className: '', html: '<div class=\"krp-mapdot-label\">' + escHtml(String(c2.name || '').toUpperCase()) + '</div>', iconSize: [0, 0] }), interactive: false }).addTo(map._krDots);\n      });\n      L.circleMarker([pin.lat, pin.lng], { radius: 11, color: pc, weight: 1.5, fillColor: pc, fillOpacity: 0.13, interactive: false }).addTo(map._krHalo);\n      L.circleMarker([pin.lat, pin.lng], { radius: 5.5, color: '#fff', weight: 2.4, fillColor: pc, fillOpacity: 1, interactive: false }).addTo(map._krDots);\n      L.marker([pin.lat, pin.lng], { icon: L.divIcon({ className: '', html: '<div class=\"krp-mappin-label\">' + escHtml(String(pin.name || '').toUpperCase()) + '</div>', iconSize: [0, 0] }), interactive: false }).addTo(map._krDots);\n      return;\n    }\n    if (!animate) { for (var q = 0; q < color.length; q++) addSeg(q); setHaloTo(color.length - 1); dots.forEach(addDot); return; }\n    addDot(dots[0]);\n    var head = 0, di = 1, total = color.length, T = 1100;\n    var t0 = (typeof performance !== 'undefined' && performance.now) ? performance.now() : Date.now();\n    var frame = function (now) {\n      if (map._krToken !== token || destroyed) return;\n      var p = Math.min(1, ((now || Date.now()) - t0) / T), target = Math.floor(p * total);\n      while (head < target) { addSeg(head); setHaloTo(head); head++; while (di < dots.length - 1 && dots[di].at <= head) { addDot(dots[di]); di++; } }\n      if (p < 1) { requestAnimationFrame(frame); }\n      else { for (; head < total; head++) addSeg(head); setHaloTo(total - 1); while (di < dots.length) { addDot(dots[di]); di++; } }\n    };\n    requestAnimationFrame(frame);\n    setTimeout(function () {\n      if (map._krToken === token && !destroyed && head < total) {\n        for (; head < total; head++) addSeg(head);\n        setHaloTo(total - 1);\n        while (di < dots.length) { addDot(dots[di]); di++; }\n      }\n    }, T + 800);\n  }\n  /* PLACE DOT rendering \u2014 a halo'd marker with the place's name, framed at\n     a regional zoom (the \u00B10.5\u00B0/\u00B10.7\u00B0 box is ~a 110 km window) so the page\n     reads \"this is roughly where the chapter lives\" rather than tracing a\n     route. Static on purpose: one mark needs no draw-on animation. */\n  function drawChapterDot(map, pin) {\n    var L = root.L;\n    if (!map || !L || !map._container || !HAS_DOC || !document.body.contains(map._container)) return;\n    if (!map._krHalo) { map._krHalo = L.layerGroup().addTo(map); map._krColor = L.layerGroup().addTo(map); map._krDots = L.layerGroup().addTo(map); }\n    map._krHalo.clearLayers(); map._krColor.clearLayers(); map._krDots.clearLayers();\n    map._krToken = (map._krToken || 0) + 1;   /* cancels any in-flight route animation */\n    var pc = legColor(pin.leg || 0);\n    var b = L.latLngBounds([[pin.lat - 0.5, pin.lng - 0.7], [pin.lat + 0.5, pin.lng + 0.7]]);\n    map._krb = b; map._krfit = { maxZoom: 9 };\n    var sz = map.getSize();\n    var pad = Math.max(6, Math.min(26, Math.round(Math.min(sz.x > 0 ? sz.x : 200, sz.y > 0 ? sz.y : 200) * 0.12)));\n    _fitMap(map, b, pad, 9);\n    L.circleMarker([pin.lat, pin.lng], { radius: 14, color: pc, weight: 1.4, opacity: 0.5, fillColor: pc, fillOpacity: 0.12, interactive: false }).addTo(map._krHalo);\n    L.circleMarker([pin.lat, pin.lng], { radius: 6, color: '#fff', weight: 2.6, fillColor: pc, fillOpacity: 1, interactive: false }).addTo(map._krDots);\n    L.marker([pin.lat, pin.lng], { icon: L.divIcon({ className: '', html: '<div class=\"krp-mappin-label\">' + escHtml(String(pin.name || '').toUpperCase()) + '</div>', iconSize: [0, 0] }), interactive: false }).addTo(map._krDots);\n  }\n  function greatCircle(a, b, segs) {\n    var toR = Math.PI / 180, toD = 180 / Math.PI;\n    var lat1 = a.lat * toR, lon1 = a.lng * toR, lat2 = b.lat * toR, lon2 = b.lng * toR;\n    var d = 2 * Math.asin(Math.min(1, Math.sqrt(Math.pow(Math.sin((lat2 - lat1) / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin((lon2 - lon1) / 2), 2))));\n    if (!d) return [[a.lat, a.lng], [b.lat, b.lng]];\n    var pts = [];\n    for (var i = 0; i <= segs; i++) {\n      var f = i / segs, A = Math.sin((1 - f) * d) / Math.sin(d), B = Math.sin(f * d) / Math.sin(d);\n      var x = A * Math.cos(lat1) * Math.cos(lon1) + B * Math.cos(lat2) * Math.cos(lon2);\n      var y = A * Math.cos(lat1) * Math.sin(lon1) + B * Math.cos(lat2) * Math.sin(lon2);\n      var z = A * Math.sin(lat1) + B * Math.sin(lat2);\n      pts.push([Math.atan2(z, Math.sqrt(x * x + y * y)) * toD, Math.atan2(y, x) * toD]);\n    }\n    return pts;\n  }\n  /* transit map \u2014 great-circle between the REAL gap endpoints (no fake stops) */\n  function drawFlight(map, kind, animate) {\n    var L = root.L;\n    if (!map || !L || !map._container || !HAS_DOC || !document.body.contains(map._container)) return;\n    var sp = spreadById(String(kind).slice(8));\n    var stops = (sp && sp.stops) ? sp.stops.filter(function (s) { return s.lat != null && s.lng != null; }) : [];\n    if (stops.length < 2) return;\n    if (!map._krHalo) { map._krHalo = L.layerGroup().addTo(map); map._krColor = L.layerGroup().addTo(map); map._krDots = L.layerGroup().addTo(map); }\n    map._krHalo.clearLayers(); map._krColor.clearLayers(); map._krDots.clearLayers();\n    var allPts = [];\n    for (var s = 0; s < stops.length - 1; s++) {\n      var gc = greatCircle(stops[s], stops[s + 1], 110);\n      for (var i = (s > 0 ? 1 : 0); i < gc.length; i++) allPts.push(gc[i]);\n    }\n    var wf = ErouteW() / 100;\n    var lineC = legColor(sp.ch >= 0 ? sp.ch : 0);\n    var haloLine = L.polyline([], { color: '#fff', weight: 5.2 * wf, opacity: 0.6, lineCap: 'round', lineJoin: 'round', interactive: false }).addTo(map._krHalo);\n    var colorLine = L.polyline([], { color: lineC, weight: 2.4 * wf, opacity: 0.98, lineCap: 'round', lineJoin: 'round', interactive: false }).addTo(map._krColor);\n    var addStop = function (st, big) { L.circleMarker([st.lat, st.lng], { radius: big ? 5.5 : 4, color: '#fff', weight: 2.2, fillColor: lineC, fillOpacity: 1, interactive: false }).addTo(map._krDots); };\n    var szF = map.getSize();\n    var padF = Math.max(6, Math.min(30, Math.round(Math.min(szF.x > 0 ? szF.x : 200, szF.y > 0 ? szF.y : 200) * 0.12)));\n    var b = L.latLngBounds(allPts); map._krb = b; map._krfit = { maxZoom: 12 };\n    _fitMap(map, b, padF, 12);\n    var total = allPts.length;\n    var stopAt = stops.map(function (st, i2) { return Math.round((i2 / (stops.length - 1)) * (total - 1)); });\n    var token = (map._krToken = (map._krToken || 0) + 1);\n    var setTo = function (idx) { if (idx < 0) { haloLine.setLatLngs([]); colorLine.setLatLngs([]); return; } var pts = allPts.slice(0, idx + 1); haloLine.setLatLngs(pts); colorLine.setLatLngs(pts); };\n    if (!animate) { setTo(total - 1); stops.forEach(function (st, i2) { addStop(st, i2 === 0 || i2 === stops.length - 1); }); return; }\n    addStop(stops[0], true);\n    var head = 0, si = 1, T = 1200;\n    var t0 = (typeof performance !== 'undefined' && performance.now) ? performance.now() : Date.now();\n    var frame = function (now) {\n      if (map._krToken !== token || destroyed) return;\n      var p = Math.min(1, ((now || Date.now()) - t0) / T), target = Math.floor(p * (total - 1));\n      if (target > head) { head = target; setTo(head); while (si < stops.length - 1 && stopAt[si] <= head) { addStop(stops[si], false); si++; } }\n      if (p < 1) requestAnimationFrame(frame);\n      else { setTo(total - 1); while (si < stops.length) { addStop(stops[si], si === stops.length - 1); si++; } }\n    };\n    requestAnimationFrame(frame);\n    setTimeout(function () {\n      if (map._krToken === token && !destroyed && head < total - 1) {\n        setTo(total - 1);\n        while (si < stops.length) { addStop(stops[si], si === stops.length - 1); si++; }\n      }\n    }, T + 800);\n  }\n  function escHtml(s) {\n    return String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n  }\n\n  /* \u2500\u2500 back-cover brush-ribbon generative art (ported verbatim) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function _resample(pts, N) {\n    var Larr = [0];\n    for (var i = 1; i < pts.length; i++) Larr.push(Larr[i - 1] + Math.hypot(pts[i][0] - pts[i - 1][0], pts[i][1] - pts[i - 1][1]));\n    var total = Larr[Larr.length - 1] || 1, out = [];\n    for (var k = 0; k < N; k++) {\n      var target = total * k / (N - 1), j = 1;\n      while (j < Larr.length - 1 && Larr[j] < target) j++;\n      var f = (target - Larr[j - 1]) / Math.max(0.0001, Larr[j] - Larr[j - 1]);\n      out.push([pts[j - 1][0] + (pts[j][0] - pts[j - 1][0]) * f, pts[j - 1][1] + (pts[j][1] - pts[j - 1][1]) * f]);\n    }\n    return out;\n  }\n  function _smoothPts(pts, passes) {\n    for (var p = 0; p < passes; p++) {\n      var out = [pts[0]];\n      for (var i = 1; i < pts.length - 1; i++) {\n        out.push([(pts[i - 1][0] + pts[i][0] * 2 + pts[i + 1][0]) / 4, (pts[i - 1][1] + pts[i][1] * 2 + pts[i + 1][1]) / 4]);\n      }\n      out.push(pts[pts.length - 1]);\n      pts = out;\n    }\n    return pts;\n  }\n  function _brushRibbon(pts, opts) {\n    var n = pts.length; if (n < 3) return '';\n    var wMax = opts.wMax || 4, frac = opts.frac == null ? 1 : opts.frac;\n    var t0 = opts.t0 || 0, t1 = opts.t1 == null ? 1 : opts.t1;\n    var off = opts.off || 0, seed = opts.seed || 1;\n    var rough = opts.rough == null ? 0.16 : opts.rough;\n    var i0 = Math.round(t0 * (n - 1)), i1 = Math.round(t1 * (n - 1));\n    if (i1 - i0 < 2) return '';\n    var top = [], bot = [];\n    for (var i = i0; i <= i1; i++) {\n      var p = pts[i], pa = pts[Math.max(0, i - 1)], pb = pts[Math.min(n - 1, i + 1)];\n      var dx = pb[0] - pa[0], dy = pb[1] - pa[1];\n      var len = Math.hypot(dx, dy) || 1;\n      var nx = -dy / len, ny = dx / len;\n      var t = (i - i0) / Math.max(1, i1 - i0);\n      /* sumi profile: needle entry, quick press to a full belly, long tapering tail */\n      var press = Math.min(1, t / 0.07);\n      var body = Math.pow(press, 0.8) * Math.pow(1 - t, 0.62) * (1 + 0.18 * Math.sin(t * 5.2 + seed));\n      var w = Math.max(0.05, wMax * frac * (0.03 + 1.12 * body));\n      var eTop = 1 + rough * Math.sin(i * 2.63 + seed * 7.1) + rough * 0.6 * Math.sin(i * 5.7 + seed * 3.3);\n      var eBot = 1 + rough * Math.sin(i * 2.11 + seed * 4.7 + 2.1) + rough * 0.6 * Math.sin(i * 6.3 + seed * 1.9 + 1.2);\n      var cx = p[0] + nx * w * off, cy = p[1] + ny * w * off;\n      top.push([cx + nx * (w / 2) * eTop, cy + ny * (w / 2) * eTop]);\n      bot.push([cx - nx * (w / 2) * eBot, cy - ny * (w / 2) * eBot]);\n    }\n    var d = 'M' + top.map(function (q) { return q[0].toFixed(1) + ' ' + q[1].toFixed(1); }).join('L');\n    for (var k2 = bot.length - 1; k2 >= 0; k2--) { d += 'L' + bot[k2][0].toFixed(1) + ' ' + bot[k2][1].toFixed(1); }\n    return d + 'Z';\n  }\n  function _extendFlick(pts, len, bend) {\n    var n = pts.length; if (n < 3) return pts;\n    var a = pts[n - 3], b = pts[n - 1];\n    var dx = b[0] - a[0], dy = b[1] - a[1];\n    var L2 = Math.hypot(dx, dy) || 1;\n    var ux = dx / L2, uy = dy / L2, px = -uy, py = ux;\n    var out = pts.slice(), steps = 7;\n    for (var i = 1; i <= steps; i++) {\n      var f = i / steps;\n      out.push([b[0] + ux * len * f + px * bend * f * f, b[1] + uy * len * f + py * bend * f * f]);\n    }\n    return out;\n  }\n  function _spatter(pts, seed, count, sizeMul) {\n    sizeMul = sizeMul == null ? 1 : sizeMul;\n    var n = pts.length, d = '';\n    for (var i = 0; i < count; i++) {\n      var rr = function (k) { var x = Math.sin(seed * 12.9898 + i * 78.233 + k * 37.719) * 43758.5453; return x - Math.floor(x); };\n      var t = 0.7 + rr(1) * 0.32;\n      var idx = Math.min(n - 1, Math.round(t * (n - 1)));\n      var p = pts[idx];\n      var ox = (rr(2) - 0.5) * 15, oy = (rr(3) - 0.5) * 11;\n      var r = (0.3 + rr(4) * 0.7) * sizeMul;\n      d += 'M' + (p[0] + ox).toFixed(1) + ' ' + (p[1] + oy).toFixed(1)\n        + 'm-' + r.toFixed(2) + ' 0'\n        + 'a' + r.toFixed(2) + ' ' + r.toFixed(2) + ' 0 1 0 ' + (r * 2).toFixed(2) + ' 0'\n        + 'a' + r.toFixed(2) + ' ' + r.toFixed(2) + ' 0 1 0 -' + (r * 2).toFixed(2) + ' 0';\n    }\n    return d;\n  }\n  /* project the real trip route into the 200\u00D774 back-cover box */\n  function coverArt() {\n    var out = { mode: (Elayouts().cover || 'brush'), wash: '', path: '', gap1: '', gap2: '', gap3: '', spatter: '', dotted: '', start: null, end: null };\n    var bw = routeData('overview').wps;\n    if (!bw || bw.length < 2) return out;\n    /* Shape slider \u2192 collapse distance as a FRACTION OF THE TRIP'S OWN\n       geographic span, not a fixed km number. A flat threshold (the design's\n       original 70 km) erases every stop of a city-scale trip \u2014 e.g. eleven\n       days entirely inside Vienna, span ~20 km \u2014 down to its two endpoints,\n       while barely simplifying a continent-hopping trip. Scaling to the\n       trip's own bounding-box diagonal keeps loops legible at any scale. */\n    var spanKm = Math.max(0.4, bboxDiagKm(bw));\n    var shp = coverShape();\n    var lp = function (lo, mid, hi) { return shp <= 50 ? lo + (mid - lo) * shp / 50 : mid + (hi - mid) * (shp - 50) / 50; };\n    var collapseKm = Math.max(0.05, spanKm * lp(0.11, 0.022, 0.004));\n    var arcStep = Math.max(2, Math.round(lp(14, 10, 4)));\n    var bsimp = [];\n    bw.forEach(function (p) {\n      if (!bsimp.length || hav(bsimp[bsimp.length - 1], p) > collapseKm) bsimp.push(p);\n    });\n    var lastW = bw[bw.length - 1];\n    if (bsimp[bsimp.length - 1] !== lastW) {\n      if (hav(bsimp[bsimp.length - 1], lastW) > collapseKm * 0.36) bsimp.push(lastW); else bsimp[bsimp.length - 1] = lastW;\n    }\n    if (bsimp.length < 2) bsimp = [bw[0], bw[bw.length - 1]];\n    var apts = [];\n    for (var bi = 0; bi < bsimp.length - 1; bi++) {\n      var arcB = segArc(bsimp[bi], bsimp[bi + 1], bi);\n      for (var bj = 0; bj < arcB.length - 1; bj += arcStep) apts.push(arcB[bj]);\n      apts.push(arcB[arcB.length - 1]);\n    }\n    if (apts.length < 2) return out;\n    /* Resample/smoothing density track how many real stops survived the\n       collapse (not a flat number), so a busy loop keeps enough points to\n       still read as a loop instead of being ironed flat by a fixed pass\n       count meant for a 2-point arc. */\n    var passes = Math.round(lp(5, 3, 1));\n    var nPts = Math.max(40, Math.min(220, bsimp.length * Math.round(lp(5, 7, 10))));\n    var minLa = Infinity, maxLa = -Infinity, minLo = Infinity, maxLo = -Infinity;\n    apts.forEach(function (p) { if (p[0] < minLa) minLa = p[0]; if (p[0] > maxLa) maxLa = p[0]; if (p[1] < minLo) minLo = p[1]; if (p[1] > maxLo) maxLo = p[1]; });\n    var BW = 200, BH = 74, padBX = 10, padBY = 8;\n    var scB = Math.min((BW - padBX * 2) / Math.max(0.0001, maxLo - minLo), (BH - padBY * 2) / Math.max(0.0001, maxLa - minLa));\n    var offBX = (BW - (maxLo - minLo) * scB) / 2, offBY = (BH - (maxLa - minLa) * scB) / 2;\n    var toXY = function (p) { return [offBX + (p[1] - minLo) * scB, offBY + (maxLa - p[0]) * scB]; };\n    var xyPts = apts.map(toXY);\n    if (out.mode === 'brush') {\n      var smB = _smoothPts(_resample(xyPts, nPts), passes);\n      smB = _extendFlick(smB, 12, -3.5);\n      /* thickness slider \u2192 wMax multiplier, anchored at 1\u00D7 on 50 so the\n         default stroke weight is unchanged. */\n      var thk = coverThickness();\n      var thMul = thk <= 50 ? 0.4 + (1 - 0.4) * thk / 50 : 1 + (2.4 - 1) * (thk - 50) / 50;\n      out.wash = _brushRibbon(smB, { wMax: 8.4 * thMul, seed: 4, rough: 0.34, t0: 0.01 });\n      out.path = _brushRibbon(smB, { wMax: 6.1 * thMul, seed: 1, rough: 0.17 });\n      out.gap1 = _brushRibbon(smB, { wMax: 6.1 * thMul, frac: 0.2, t0: 0.5, t1: 1, off: 0.52, seed: 2, rough: 0.5 });\n      out.gap2 = _brushRibbon(smB, { wMax: 6.1 * thMul, frac: 0.16, t0: 0.62, t1: 1, off: -0.55, seed: 3, rough: 0.5 });\n      out.gap3 = _brushRibbon(smB, { wMax: 6.1 * thMul, frac: 0.1, t0: 0.4, t1: 0.97, off: 0.06, seed: 5, rough: 0.5 });\n      out.spatter = _spatter(smB, 7, 5, thMul);\n    } else {\n      out.dotted = xyPts.map(function (xy, i) { return (i ? 'L' : 'M') + xy[0].toFixed(1) + ' ' + xy[1].toFixed(1); }).join('');\n      out.start = xyPts[0]; out.end = xyPts[xyPts.length - 1];\n    }\n    return out;\n  }\n\n  /* \u2500\u2500 thumbCells \u2014 schematic mini-layouts (filmstrip/flow/candidates) \u2500\u2500\u2500\u2500 */\n  function thumbCells(sp, variant) {\n    var pos = function (l, t, w, h, bg, extra) {\n      return { style: 'position:absolute; left:' + l + '%; top:' + t + '%; width:' + w + '%; height:' + h + '%; background:' + bg + '; background-size:cover; background-position:center;' + (extra || '') };\n    };\n    var img = function (u) { return u ? ('#889098 url(\\'' + u + '\\') center/cover no-repeat') : '#DDD9CD'; };\n    var th = function (id) { return id ? urls.thumb(id) : null; };\n    var MAP = '#E3E0D6', BAR = '#DDD9CD', INK = '#22272D';\n    var type = sp.type, v = variant || Elayouts()[sp.id];\n    var D = defaults();\n    var heroId = Eheroes()[sp.id] || sp.heroId;\n    if (type === 'cover') {\n      var cv = v || Elayouts().cover || 'brush';\n      var covId = Eheroes().cover || (D.coverP ? D.coverP.id : null);\n      return [pos(0, 0, 50, 100, INK),\n        cv === 'dotted' ? pos(9, 42, 32, 1.6, '#5C6670') : pos(9, 38, 32, 7, '#5F6B76', 'border-radius:4px; transform:rotate(-7deg);'),\n        pos(50, 0, 50, 100, img(th(covId))), pos(56, 74, 26, 4, 'rgba(244,241,234,.85)')];\n    }\n    if (type === 'intro') return [pos(7, 12, 30, 5, BAR), pos(7, 24, 34, 4, BAR), pos(7, 34, 26, 4, BAR), pos(7, 66, 34, 22, BAR), pos(50, 0, 50, 100, MAP), pos(58, 30, 32, 3, legColor(0), 'border-radius:3px; transform:rotate(-14deg);')];\n    if (type === 'transit') return [pos(7, 14, 30, 6, BAR), pos(7, 30, 34, 4, BAR), pos(7, 44, 34, 4, BAR), pos(7, 64, 36, 24, img(th(sp.photoId))), pos(50, 0, 50, 100, '#DCE6EC'), pos(56, 44, 34, 3, legColor(sp.ch >= 0 ? sp.ch : 0), 'border-radius:3px; transform:rotate(-8deg);')];\n    if (type === 'chapter' || type === 'dayopen') {\n      var hImg = img(th(heroId));\n      if ((v || 'heromap') === 'heromap') return [pos(0, 0, 50, 100, hImg), pos(50, 0, 50, 74, MAP), pos(54, 82, 14, 6, BAR), pos(72, 82, 14, 6, BAR)];\n      if (v === 'immersive') return [pos(0, 0, 100, 100, hImg), pos(5, 42, 26, 48, 'rgba(251,250,247,.96)'), pos(8, 50, 20, 16, MAP)];\n      if (v === 'titlepage') return [pos(7, 14, 30, 8, BAR), pos(7, 30, 22, 4, BAR), pos(7, 70, 36, 3, BAR), pos(7, 78, 36, 3, BAR), pos(7, 86, 36, 3, BAR), pos(50, 0, 50, 100, hImg)];\n      if (v === 'heroonly') return [pos(0, 0, 100, 100, hImg), pos(5, 72, 26, 7, 'rgba(244,241,234,.9)'), pos(5, 84, 20, 4, 'rgba(244,241,234,.72)')];\n      return [pos(7, 12, 28, 7, BAR), pos(7, 26, 20, 4, BAR), pos(7, 36, 36, 42, MAP), pos(7, 84, 30, 5, BAR), pos(50, 0, 50, 100, hImg)];\n    }\n    if (type === 'frames') {\n      var key = variant || effPreset(sp);\n      var pre = FR_PRESETS()[key] || FR_PRESETS().contact8;\n      var ph2 = photosFor(sp);\n      var cp2 = pre.cp, g2 = 4, u2 = (100 - g2) / (2 * cp2);\n      var xOf = function (line) { return line <= cp2 + 1 ? (line - 1) * u2 : cp2 * u2 + g2 + (line - cp2 - 2) * u2; };\n      return pre.areas.slice(0, Math.min(pre.n, Math.max(1, ph2.length))).map(function (a, i) {\n        var q = a.split('/').map(Number);\n        var l2 = xOf(q[1]) + 1, w2 = xOf(q[3]) - xOf(q[1]) - 2, t2 = (q[0] - 1) * 50 + 5, h2 = (q[2] - q[0]) * 50 - 10;\n        return pos(l2, t2, w2, h2, ph2[i] ? img(ph2[i].img) : BAR);\n      });\n    }\n    if (type === 'day') return [pos(0, 0, 50, 100, img(th(heroId))), pos(56, 12, 30, 6, BAR), pos(56, 26, 34, 4, BAR), pos(56, 38, 26, 4, BAR), pos(56, 52, 38, 38, MAP)];\n    if (type === 'quote') return [pos(12, 38, 26, 4, BAR), pos(10, 48, 30, 4, BAR), pos(58, 16, 34, 62, img(th(sp.photoId))), pos(58, 84, 22, 4, BAR)];\n    if (type === 'full') {\n      var fImg = img(th(sp.photoId || sp.img));\n      if (v === 'whisper') return [pos(0, 0, 100, 100, fImg)];\n      return [pos(0, 0, 100, 100, fImg), pos(0, 84, 100, 16, 'rgba(251,250,247,.95)')];\n    }\n    if (type === 'moment') return [pos(0, 0, 100, 100, img(th(sp.photoId))), pos(5, 62, 20, 7, 'rgba(251,244,229,.95)', 'border-radius:6px;'), pos(5, 74, 26, 6, 'rgba(244,241,234,.9)')];\n    if (type === 'momentPage') {\n      var mIds = (sp.m && sp.m.ids) || [];\n      var im1 = mIds[0] ? img(th(mIds[0])) : BAR;\n      var im2 = mIds[1] ? img(th(mIds[1])) : BAR;\n      if (sp.kind === 'hike') return [pos(7, 12, 30, 6, BAR), pos(7, 26, 26, 4, BAR), pos(7, 38, 34, 9, BAR), pos(7, 58, 17, 26, im1), pos(26, 58, 17, 26, im2), pos(50, 0, 50, 100, MAP), pos(58, 34, 32, 3, legColor(sp.ch >= 0 ? sp.ch : 0), 'border-radius:3px; transform:rotate(-20deg);')];\n      if (sp.kind === 'meal') return [pos(0, 0, 50, 100, im1), pos(58, 16, 34, 64, '#FDFCF8', 'box-shadow:0 2px 8px rgba(0,0,0,.18);'), pos(62, 24, 22, 6, BAR), pos(62, 38, 26, 3, BAR), pos(62, 46, 26, 3, BAR), pos(62, 54, 26, 3, BAR)];\n      if (sp.kind === 'notes') return [pos(7, 12, 34, 7, BAR), pos(7, 32, 86, 1.6, '#E3DFD2'), pos(7, 44, 86, 1.6, '#E3DFD2'), pos(7, 56, 86, 1.6, '#E3DFD2'), pos(7, 68, 86, 1.6, '#E3DFD2'), pos(7, 80, 86, 1.6, '#E3DFD2')];\n      if (sp.kind === 'quote') return mIds.length ? [pos(12, 38, 26, 4, BAR), pos(10, 48, 30, 4, BAR), pos(58, 16, 34, 62, im1), pos(58, 84, 22, 4, BAR)] : [pos(30, 40, 40, 5, BAR), pos(38, 52, 24, 3, BAR)];\n      /* 'hi' highlight family \u2014 four page layouts */\n      var hv = variant || Elayouts()[sp.id] || 'hi';\n      if (hv === 'solo') return [pos(0, 0, 50, 100, im1), pos(56, 12, 30, 6, BAR), pos(56, 26, 24, 4, BAR), pos(56, 56, 38, 36, MAP)];\n      if (hv === 'story') return [pos(2, 4, 28, 44, im1), pos(32, 4, 16, 44, im2), pos(2, 52, 46, 44, mIds[2] ? img(th(mIds[2])) : BAR), pos(56, 12, 30, 6, BAR), pos(56, 30, 36, 3, BAR), pos(56, 38, 36, 3, BAR), pos(56, 46, 32, 3, BAR), pos(56, 80, 26, 5, BAR)];\n      if (hv === 'immerse') return [pos(0, 0, 100, 100, im1), pos(5, 40, 26, 50, 'rgba(251,250,247,.96)'), pos(8, 48, 20, 6, BAR), pos(8, 58, 16, 4, BAR), pos(8, 68, 18, 3, BAR)];\n      return [pos(2, 4, 28, 44, im1), pos(32, 4, 16, 44, im2), pos(2, 52, 46, 44, mIds[2] ? img(th(mIds[2])) : BAR), pos(56, 12, 30, 6, BAR), pos(56, 26, 24, 4, BAR), pos(56, 56, 38, 36, MAP)];\n    }\n    if (type === 'closing') return [pos(0, 0, 50, 100, img(th(sp.photoId))), pos(62, 32, 26, 5, BAR), pos(58, 44, 34, 4, BAR), pos(66, 60, 18, 3, BAR)];\n    return [pos(0, 0, 100, 100, '#EEEBE2')];\n  }\n  /* DOM helper for thumbCells \u2014 spans (never empty divs) */\n  function renderThumb(sp, opts) {\n    opts = opts || {};\n    var box = el('div', 'krp-thumb' + (opts.cls ? ' ' + opts.cls : ''));\n    thumbCells(sp, opts.variant).forEach(function (c) {\n      box.appendChild(el('span', 'krp-thumb-cell', { style: c.style, text: '\u00A0' }));\n    });\n    return box;\n  }\n\n  /* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     RENDERERS \u2014 DOM for every spread type (both shells render identical\n     pages). Photo cells are <img> in content-bearing wrappers \u2014 the live\n     site hides empty <div>s, so decorative layers are spans/pseudo/svg.\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n  function phImg(id, mid) {\n    if (!id) return null;\n    var src = mid ? (urls.mid(id) || urls.thumb(id)) : urls.thumb(id);\n    if (!src) return null;\n    /* data-pid + data-tier let a shell upgrade the CURRENT spread's photos\n       as the reader zooms in: thumb-tier cells (frames/highlight grids,\n       side photos \u2014 320 px at rest, cheap to flip through) step up to the\n       2200 px mid, and mid-tier heroes step up to the full-resolution\n       original from IndexedDB. See kr-press-builder.js\n       applyStageTransform \u2192 upgradeSheetImages(). */\n    return el('img', null, { src: src, loading: 'lazy', alt: '', draggable: 'false', 'data-pid': id, 'data-tier': mid ? 'mid' : 'thumb' });\n  }\n  function phBox(cls, id, o) {\n    o = o || {};\n    var box = el('div', 'krp-ph' + (cls ? ' ' + cls : ''), o.style ? { style: o.style } : null);\n    var img = phImg(id, o.mid);\n    if (img) box.appendChild(img);\n    if (o.cap != null && o.cap !== '') box.appendChild(el('span', 'krp-cap' + (o.capCls ? ' ' + o.capCls : ''), { text: o.cap }));\n    if (o.chip) box.appendChild(el('span', 'krp-score', { text: o.chip }));\n    if (!box.childNodes.length) box.appendChild(el('span', 'krp-seed', { text: '\u00A0' }));\n    return box;\n  }\n  function mapWrap(kind, o) {\n    o = o || {};\n    var wrap = el('div', 'krp-mapwrap' + (o.cls ? ' ' + o.cls : ''));\n    var m = el('div', 'krp-map', { 'data-krp-kind': kind });\n    m.appendChild(el('span', 'krp-seed', { text: '\u00A0' }));\n    wrap.appendChild(m);\n    if (o.header) {\n      wrap.appendChild(el('span', 'krp-maphead', null, [\n        el('span', 'krp-maphead-l', { text: o.header[0] }),\n        el('span', 'krp-maphead-r', { text: o.header[1] })\n      ]));\n    }\n    if (o.label) wrap.appendChild(el('span', 'krp-maplabel', { text: o.label }));\n    wrap.appendChild(el('span', 'krp-mapcredit', { text: o.credit === 'l' ? mapCredit() : mapCreditShort() }));\n    if (o.mount !== false) mountMap(m, kind);\n    return wrap;\n  }\n  function statBand(cls, stats) {\n    var band = el('div', 'krp-statband' + (cls ? ' ' + cls : ''), null, (stats || []).map(function (st) {\n      return el('span', 'krp-stat', null, [\n        el('span', 'krp-stat-v', { text: st.v }),\n        el('span', 'krp-stat-k', { text: st.k })\n      ]);\n    }));\n    if (!band.childNodes.length) band.appendChild(el('span', 'krp-seed', { text: ' ' }));\n    return band;\n  }\n  function eyebrow(cls, text, color) {\n    return el('div', 'krp-eyebrow' + (cls ? ' ' + cls : ''), color ? { style: 'color:' + color + ';' } : null, [text]);\n  }\n  function introStats() {\n    var T = totals();\n    /* JOURNEYS is meaningless in single mode \u2014 numerically it's just DAYS\n       again \u2014 so that row is dropped there instead of duplicating it. */\n    var rows = [\n      { k: 'DAYS', v: String(T.days) },\n      { k: unitLabel(), v: '\u2248 ' + fmtDistN(T.km) },\n      { k: 'PHOTOS', v: String(T.photos) },\n      { k: 'PLACES', v: String(T.places) }\n    ];\n    if (!isSingle()) rows.splice(2, 0, { k: 'JOURNEYS', v: String(T.journeys) });\n    return rows;\n  }\n  function clStats() {\n    var T = totals();\n    return [\n      { k: 'DAYS', v: String(T.days) },\n      { k: unitLabel(), v: fmtDistN(T.km) },\n      { k: 'PHOTOS', v: String(T.photos) },\n      { k: 'PLACES', v: String(T.places) }\n    ];\n  }\n  function tocItems() {\n    var B = BOOK(), CH = CHAPTERS();\n    return CH.map(function (c, i) {\n      var first = B.find(function (sp) { return sp.ch === _chIdx[i] && sp.type !== 'transit'; });\n      return { c: legColor(i), num: c.num, title: c.title, sub: c.sub, meta: c.dates + ' \u00B7 P. ' + (first && first.ppl ? first.ppl : '\u2014') };\n    });\n  }\n  function introTitle() {\n    var p = store.project || {};\n    return String(p.title || 'The Journey') + (p.subtitle ? ' \u2014 ' + p.subtitle : '');\n  }\n  function heroIdFor(sp) { return Eheroes()[sp.id] || sp.heroId || null; }\n\n  function renderCover(sp) {\n    var T = totals();\n    var art = coverArt();\n    var frag = el('div', 'krp-2up krp-cov');\n    /* back cover (left) */\n    var svg = svgEl('svg', { viewBox: '0 0 200 74', 'class': 'krp-cov-art', 'aria-hidden': 'true' });\n    if (art.mode === 'brush') {\n      /* krp-cov-inkpath = mix-blend-mode:multiply (see kr-press-studio.css)\n         so wet ink pools darker wherever the wash/pass/gap/spatter layers\n         actually cross each other \u2014 the same trick real sumi brushwork\n         does when a stroke doubles back over itself. .krp-cov-art carries\n         isolation:isolate so the multiplying stays scoped to these layers\n         and doesn't also darken against the (very dark) cover background\n         behind the artwork. */\n      if (art.wash) svg.appendChild(svgEl('path', { d: art.wash, fill: '#6B7682', opacity: '0.14', 'class': 'krp-cov-inkpath' }));\n      if (art.path) svg.appendChild(svgEl('path', { d: art.path, fill: '#6B7682', opacity: '0.92', 'class': 'krp-cov-inkpath' }));\n      if (art.gap1) svg.appendChild(svgEl('path', { d: art.gap1, fill: '#22272D', opacity: '0.55', 'class': 'krp-cov-inkpath' }));\n      if (art.gap2) svg.appendChild(svgEl('path', { d: art.gap2, fill: '#22272D', opacity: '0.45', 'class': 'krp-cov-inkpath' }));\n      if (art.gap3) svg.appendChild(svgEl('path', { d: art.gap3, fill: '#22272D', opacity: '0.5', 'class': 'krp-cov-inkpath' }));\n      if (art.spatter) svg.appendChild(svgEl('path', { d: art.spatter, fill: '#6B7682', opacity: '0.72', 'class': 'krp-cov-inkpath' }));\n    } else {\n      if (art.dotted) svg.appendChild(svgEl('path', { d: art.dotted, fill: 'none', stroke: '#5C6670', 'stroke-width': '1.5', 'stroke-linecap': 'round', 'stroke-dasharray': '1 2.2' }));\n      if (art.start) svg.appendChild(svgEl('circle', { cx: art.start[0].toFixed(1), cy: art.start[1].toFixed(1), r: '2.8', fill: 'none', stroke: '#8A949D', 'stroke-width': '1.4' }));\n      if (art.end) svg.appendChild(svgEl('circle', { cx: art.end[0].toFixed(1), cy: art.end[1].toFixed(1), r: '2.8', fill: '#8A949D' }));\n    }\n    var blurb = el('div', 'krp-cov-blurb');\n    blurb.appendChild(document.createTextNode(wordNum(T.days).toUpperCase() + ' DAYS ACROSS ' + wordNum(T.journeys).toUpperCase() + ' ' + (isSingle() ? 'PLACES' : 'JOURNEYS') + ' \u2014'));\n    blurb.appendChild(el('br'));\n    blurb.appendChild(document.createTextNode('TRACED FROM THE PLACES THAT EARNED A PHOTOGRAPH.'));\n    frag.appendChild(el('div', 'krp-page krp-cov-back', null, [\n      svg,\n      el('div', 'krp-cov-caption', null, [\n        blurb,\n        el('div', 'krp-cov-colophon', { text: 'KR MAPS \u00B7 ' + roman(T.year) })\n      ])\n    ]));\n    /* front cover (right) */\n    var heroId = Eheroes().cover || sp.heroId;\n    var front = el('div', 'krp-page krp-cov-front');\n    front.appendChild(phBox('krp-ph--fill krp-scrim--cover', heroId, { mid: true }));\n    var p = store.project || {};\n    front.appendChild(el('div', 'krp-cov-txt', null, [\n      el('div', 'krp-cov-eyebrow', { text: 'A FIELD JOURNAL' }),\n      el('div', 'krp-cov-title', { text: String(p.title || 'The Trip') }),\n      p.subtitle ? el('div', 'krp-cov-sub', { text: String(p.subtitle) }) : null,\n      el('div', 'krp-cov-meta', { text: (T.firstDate ? (monOf(T.firstDate, true) + ' ' + T.year).toUpperCase() : String(T.year)) + (T.coords ? ' \u00B7 ' + T.coords : '') })\n    ]));\n    frag.appendChild(front);\n    return frag;\n  }\n\n  function renderIntro(sp) {\n    var T = totals();\n    var CH = CHAPTERS();\n    var single = isSingle();\n    /* single mode's day titles are already compound (\"Karlsplatz &\n       MuseumsQuartier\") \u2014 naming one more \"dominant place\" on top reads\n       redundant and shortPlace()'s legend-label truncation mangles longer\n       compounds anyway, so the sentence just doesn't need one. */\n    var para = T.narrative || (single\n      ? ('A ' + T.days + '-day trip that never left one place \u2014 ' + CH.map(function (c) { return c.title; }).join(', ') + '.')\n      : ('A ' + T.days + '-day trip across ' + T.journeys + ' journeys \u2014 ' + CH.map(function (c) { return c.title; }).join(', ') + '.'));\n    var left = el('div', 'krp-page krp-int-l', null, [\n      eyebrow('krp-int-eyebrow', 'THE JOURNEY'),\n      el('div', 'krp-int-title', { text: introTitle() }),\n      el('div', 'krp-int-dates', { text: T.dates + (T.coords ? ' \u00B7 ' + T.coords : '') }),\n      el('p', 'krp-int-para', { text: para }),\n      statBand('krp-int-stats', introStats()),\n      el('div', 'krp-int-toc', null, [\n        el('div', 'krp-int-toclabel', { text: wordNum(CH.length).toUpperCase() + (single ? ' DAYS, IN ORDER' : ' JOURNEYS, IN CHAIN ORDER') })\n      ].concat(tocItems().map(function (t) {\n        return el('div', 'krp-int-tocrow', null, [\n          el('i', 'krp-dot', { style: 'background:' + t.c + ';', text: '\u00A0' }),\n          el('span', 'krp-int-tocnum', { text: t.num }),\n          el('span', 'krp-int-toctitle', { text: t.title }),\n          el('span', 'krp-int-tocmeta', { text: t.meta })\n        ]);\n      })))\n    ]);\n    /* one stop per REAL chapter, not a hardcoded 5-way split \u2014 that\n       silently dropped chapter 6+ off the end (CH.length > 5) and\n       fabricated phantom extra segments via i%CH.length wraparound\n       (CH.length < 5, e.g. 2 chapters rendering as a misleading A/B/A/B/A). */\n    var gradN = Math.max(1, CH.length);\n    var gradStops = gradN === 1\n      ? [legColor(0) + ' 0%', legColor(0) + ' 100%']\n      : CH.map(function (c, i) { return legColor(i) + ' ' + Math.round(i / (gradN - 1) * 100) + '%'; });\n    var grad = 'linear-gradient(90deg,' + gradStops.join(',') + ')';\n    var right = el('div', 'krp-page krp-int-r');\n    var mw = mapWrap('overview', { cls: 'krp-mapwrap--fill', credit: 'l' });\n    mw.appendChild(el('span', 'krp-int-legend', null, [\n      el('span', 'krp-int-legendlabel', { text: 'ONE LINE \u00B7 COLOURED BY ' + (single ? 'DAY' : 'JOURNEY') }),\n      el('span', 'krp-int-legendrow', null, [\n        el('span', 'krp-int-legendcode', { text: shortPlace(CH.length ? CH[0].title : '').slice(0, 4).toUpperCase() }),\n        el('i', 'krp-int-legendbar', { style: 'background:' + grad + ';', text: '\u00A0' }),\n        el('span', 'krp-int-legendcode', { text: shortPlace(CH.length ? CH[CH.length - 1].title : '').slice(0, 4).toUpperCase() })\n      ])\n    ]));\n    right.appendChild(mw);\n    return el('div', 'krp-2up krp-int', null, [left, right]);\n  }\n\n  function renderTransit(sp) {\n    var g = groupOf(sp);\n    var accent = legColor(sp.ch >= 0 ? sp.ch : 0);\n    var stats = [{ v: '\u2248' + fmtDist(sp.km || 0), k: 'GREAT CIRCLE' }];\n    if (sp.gapH != null) stats.push({ v: fmtMinSpan(Math.round(sp.gapH * 60)), k: 'BETWEEN FRAMES' });\n    var stopsBox = el('div', 'krp-tra-stops', null, (sp.stops || []).map(function (s) {\n      return el('div', 'krp-tra-stop', null, [\n        el('i', 'krp-tra-stopdot', { style: 'background:' + accent + '; box-shadow:0 0 0 0.35cqw ' + accent + '22;', text: '\u00A0' }),\n        el('span', 'krp-tra-code', { text: s.code }),\n        el('span', 'krp-tra-nm', null, [\n          el('span', 'krp-tra-name', { text: s.name }),\n          el('span', 'krp-tra-sub', { text: s.sub })\n        ]),\n        el('span', 'krp-tra-role', { text: s.role })\n      ]);\n    }));\n    var photoRec = _byId[sp.photoId];\n    var left = el('div', 'krp-page krp-tra-l', null, [\n      el('div', 'krp-tra-eyerow', null, [\n        el('span', 'krp-tra-ch', { style: 'color:' + accent + ';', text: 'CHAPTER ' + (g ? g.num : '') }),\n        el('span', 'krp-tra-getting', { text: 'GETTING THERE' })\n      ]),\n      el('div', 'krp-tra-title', { text: sp.from.name + ' \u2192 ' + sp.to.name }),\n      el('div', 'krp-tra-meta', { text: (sp.to.date ? dayLabel(sp.to.date) + ' ' + yearOf(sp.to.date) : '') + ' \u00B7 ONE CROSSING, NO PHOTOS BETWEEN' }),\n      statBand('krp-tra-stats', stats),\n      stopsBox,\n      sp.photoId ? phBox('krp-tra-photo', sp.photoId, {\n        cap: (photoRec ? String(photoRec.place || '').toUpperCase() : sp.to.name.toUpperCase()) + ' \u00B7 FIRST PHOTO' + (sp.to.t ? ' \u00B7 ' + sp.to.t : '')\n      }) : null\n    ]);\n    var right = el('div', 'krp-page krp-tra-r', null, [\n      mapWrap('transit:' + sp.id, { cls: 'krp-mapwrap--fill krp-map--flight', label: 'GREAT-CIRCLE ROUTE \u00B7 FROM YOUR PHOTOS', credit: 'l' })\n    ]);\n    return el('div', 'krp-2up krp-tra', null, [left, right]);\n  }\n\n  function chapterBits(sp) {\n    var g = groupOf(sp) || {};\n    var st = g.st || {};\n    var single = isSingle();\n    var kindB = sp.type === 'dayopen' ? ('day:' + sp.id) : ('leg' + sp.ch);\n    var mapLabel;\n    if (EmapMode()[kindB] === 'dot') {\n      var pinB = chDotPin(kindB);\n      mapLabel = 'THE SETTING \u2014 ' + String((pinB && pinB.name) || g.title || '').toUpperCase() + ' \u00B7 ONE MARK, NO ROUTE';\n    } else {\n      mapLabel = single\n        ? ('TODAY\u2019S ROUTE \u2014 ' + String(g.title || '').toUpperCase() + ' \u00B7 WAYPOINTS FROM NEAREST PHOTOS')\n        : ('THIS JOURNEY \u2014 ' + String(g.title || '').toUpperCase() + ' \u00B7 WHOLE TRIP FOR CONTEXT');\n    }\n    return {\n      g: g,\n      accent: legColor(sp.ch),\n      eyebrowTxt: single\n        ? ('DAY ' + (g.num || '') + ' OF ' + pad2(CHAPTERS().length) + ' \u00B7 TRIP')\n        : ('CHAPTER ' + (g.num || '') + ' OF ' + pad2(CHAPTERS().length) + ' \u00B7 JOURNEY'),\n      title: g.title || '',\n      sub: g.sub || '',\n      dates: (g.dates || '') + (g.date ? ' ' + yearOf(g.date) : '') + (st.coords ? ' \u00B7 ' + st.coords : ''),\n      mapLabel: mapLabel,\n      stats: statRowsAll(sp).filter(function (r) { return r.on && r.v; }).map(function (r) { return { k: r.k, v: r.v }; })\n    };\n  }\n  /* chapter openers AND single-mode day openers share this renderer \u2014\n     five layouts (mapstats/heromap/immersive with a map, titlepage/heroonly\n     without one), the only difference between the two opener types is which\n     map the mapped layouts show: the whole trip highlighting one leg, or\n     just that day's own waypoints. */\n  function renderChapter(sp) {\n    var b = chapterBits(sp);\n    var lay = Elayouts()[sp.id] || 'heromap';\n    var heroId = heroIdFor(sp);\n    var heroCap = capFor(heroId, '');\n    var kind = sp.type === 'dayopen' ? ('day:' + sp.id) : ('leg' + sp.ch);\n    if (lay === 'titlepage') {\n      /* no map \u2014 a classic half-title: type breathes on the left page,\n         the data rows settle at the foot, hero fills the right page */\n      var tpRows = b.stats.map(function (st) {\n        return el('div', 'krp-ch-tprow', null, [\n          el('span', 'krp-ch-tpk', { text: st.k }),\n          el('span', 'krp-ch-tpv', { text: st.v })\n        ]);\n      });\n      var leftTp = el('div', 'krp-page krp-ch-l krp-ch-tp', null, [\n        eyebrow('krp-ch-eyebrow', b.eyebrowTxt, b.accent),\n        el('div', 'krp-ch-title krp-ch-tptitle', { text: b.title }),\n        b.sub ? el('div', 'krp-ch-sub', { text: b.sub }) : null,\n        el('div', 'krp-ch-dates', { text: b.dates }),\n        tpRows.length ? el('div', 'krp-ch-tplist', null, tpRows) : null\n      ]);\n      var rightTp = el('div', 'krp-page krp-ch-r', null, [phBox('krp-ph--fill', heroId, { mid: true, cap: heroCap })]);\n      return el('div', 'krp-2up krp-ch krp-ch--titlepage', null, [leftTp, rightTp]);\n    }\n    if (lay === 'heroonly') {\n      /* no map \u2014 the hero runs across the whole spread, heromap's text\n         treatment sits bottom-left with the stat band in light ink */\n      var wrapHo = el('div', 'krp-fill krp-ch krp-ch--heroonly');\n      wrapHo.appendChild(phBox('krp-ph--fill krp-scrim--bottom', heroId, { mid: true }));\n      wrapHo.appendChild(el('span', 'krp-cap krp-ch-imcap', { text: heroCap }));\n      wrapHo.appendChild(el('div', 'krp-ch-herotxt', null, [\n        eyebrow('krp-ch-heroeyebrow', b.eyebrowTxt),\n        el('div', 'krp-ch-title', { text: b.title }),\n        b.sub ? el('div', 'krp-ch-herosub', { text: b.sub }) : null,\n        el('div', 'krp-ch-herodates', { text: b.dates }),\n        b.stats.length ? statBand('krp-ch-herostats', b.stats) : null\n      ]));\n      return wrapHo;\n    }\n    if (lay === 'mapstats') {\n      var left1 = el('div', 'krp-page krp-ch-l', null, [\n        eyebrow('krp-ch-eyebrow', b.eyebrowTxt, b.accent),\n        el('div', 'krp-ch-title', { text: b.title }),\n        b.sub ? el('div', 'krp-ch-sub', { text: b.sub }) : null,\n        el('div', 'krp-ch-dates', { text: b.dates }),\n        mapWrap(kind, { cls: 'krp-mapwrap--grow', label: b.mapLabel }),\n        statBand('krp-ch-stats', b.stats)\n      ]);\n      var right1 = el('div', 'krp-page krp-ch-r', null, [phBox('krp-ph--fill', heroId, { mid: true, cap: heroCap })]);\n      return el('div', 'krp-2up krp-ch krp-ch--mapstats', null, [left1, right1]);\n    }\n    if (lay === 'immersive') {\n      var wrap = el('div', 'krp-fill krp-ch krp-ch--immersive');\n      wrap.appendChild(phBox('krp-ph--fill krp-scrim--left', heroId, { mid: true }));\n      wrap.appendChild(el('span', 'krp-cap krp-ch-imcap', { text: heroCap }));\n      wrap.appendChild(el('div', 'krp-ch-card', null, [\n        eyebrow('krp-ch-cardeyebrow', b.eyebrowTxt, b.accent),\n        el('div', 'krp-ch-cardtitle', { text: b.title }),\n        b.sub ? el('div', 'krp-ch-cardsub', { text: b.sub }) : null,\n        el('div', 'krp-ch-carddates', { text: b.dates }),\n        mapWrap(kind, { cls: 'krp-ch-cardmap' }),\n        statBand('krp-ch-cardstats', b.stats)\n      ]));\n      return wrap;\n    }\n    /* heromap (default) */\n    var hero = el('div', 'krp-page krp-ch-hero', null, [\n      phBox('krp-ph--fill krp-scrim--bottom', heroId, { mid: true }),\n      el('div', 'krp-ch-herotxt', null, [\n        eyebrow('krp-ch-heroeyebrow', b.eyebrowTxt),\n        el('div', 'krp-ch-title', { text: b.title }),\n        b.sub ? el('div', 'krp-ch-herosub', { text: b.sub }) : null,\n        el('div', 'krp-ch-herodates', { text: b.dates })\n      ])\n    ]);\n    var col = el('div', 'krp-page krp-ch-col', null, [\n      mapWrap(kind, { cls: 'krp-mapwrap--grow', label: b.mapLabel }),\n      statBand('krp-ch-statstrip', b.stats)\n    ]);\n    return el('div', 'krp-2up krp-ch krp-ch--heromap', null, [hero, col]);\n  }\n\n  function renderFrames(sp, opts) {\n    var g = groupOf(sp) || {};\n    var phs = photosFor(sp);\n    var pre = FR_PRESETS()[effPreset(sp)];\n    var wrap = el('div', 'krp-fill krp-fr');\n    if (!isSingle() && sp.dayStart && sp.date) {\n      wrap.appendChild(el('div', 'krp-fr-dayhead', null, [\n        el('span', 'krp-fr-daydate', { text: wkdayOf(sp.date, true) + ' ' + dayNum(sp.date) + ' ' + monOf(sp.date, true) }),\n        el('span', 'krp-fr-daymeta', { text: 'DAY ' + pad2(tripDayNo(sp.date)) + ' OF ' + tripDates().length + (wxFor(sp.date) ? ' \u00B7 ' + wxFor(sp.date).toUpperCase() : '') })\n      ]));\n    }\n    var label = String(sp.label || '').replace('Photos \u00B7 ', '').toUpperCase();\n    wrap.appendChild(el('div', 'krp-fr-head', null, [\n      el('span', 'krp-fr-header', { text: 'PHOTOS \u2014 ' + (isSingle() ? 'DAY ' : 'CHAPTER ') + (g.num || '') + ' \u00B7 ' + String(g.title || '').toUpperCase() + (label ? ' \u00B7 ' + label : '') }),\n      el('span', 'krp-fr-note', { text: Math.min(pre.n, phs.length) + ' OF ' + phs.length + ' THIS SPREAD \u00B7 ' + (isSingle() ? 'DAY' : 'JOURNEY') + ' POOL ' + (poolN(sp.ch) || (g.frames || 0)) })\n    ]));\n    var grid = el('div', 'krp-fr-grid', { style: 'grid-template-columns:' + colsCss(pre.cp) + ';' });\n    pre.areas.slice(0, Math.min(pre.n, phs.length)).forEach(function (a, i) {\n      var p = phs[i];\n      grid.appendChild(phBox('krp-fr-cell', p.id, {\n        style: 'grid-area:' + a + ';',\n        cap: p.cap,\n        chip: (opts && opts.reasoning && p.chip) ? p.chip : null\n      }));\n    });\n    wrap.appendChild(grid);\n    return wrap;\n  }\n\n  function renderDay(sp) {\n    var accent = legColor(sp.ch >= 0 ? sp.ch : 0);\n    var heroId = heroIdFor(sp);\n    var left = el('div', 'krp-page', null, [phBox('krp-ph--fill', heroId, { mid: true, cap: sp.heroCap || capFor(heroId, '') })]);\n    var right = el('div', 'krp-page krp-day-r', null, [\n      eyebrow('krp-day-eyebrow', sp.eyebrow || ('DAY ' + pad2(tripDayNo(sp.date)) + ' \u00B7 ' + dayLabel(sp.date)), accent),\n      el('div', 'krp-day-title', { text: sp.title || '' }),\n      sp.route ? el('div', 'krp-day-route', { text: sp.route }) : null,\n      sp.para ? el('p', 'krp-day-para', { text: sp.para }) : null,\n      el('div', 'krp-day-chips', null, (sp.chips || []).map(function (c) {\n        return el('span', 'krp-day-chip' + (c.gold ? ' krp-day-chip--gold' : ''), { text: c.label });\n      })),\n      mapWrap('day:' + sp.id, {\n        cls: 'krp-mapwrap--grow',\n        header: ['ROUTE \u00B7 DAY ' + pad2(tripDayNo(sp.date)), (sp.dist ? fmtDist(sp.dist).toUpperCase() + ' \u00B7 ' : '') + 'WAYPOINTS FROM NEAREST PHOTOS']\n      })\n    ]);\n    return el('div', 'krp-2up krp-day', null, [left, right]);\n  }\n\n  /* dayopen now renders via renderChapter (hero+map/mapstats/immersive,\n     same as a trip-mode chapter opener) \u2014 see the comment above that\n     function. The doTitle/doPlaces/doSummary/doStats fields set on the\n     spread by SPREADS() are unused by rendering now; chapterBits()/\n     statRowsAll() derive the same information generically from groupOf(sp)\n     so DATA ON THE PAGE toggles and the layout picker work identically to\n     chapter openers. */\n\n  function quoteLayout(quoteText, attr, photoId, capL, capR) {\n    var left = el('div', 'krp-page krp-qt-l', null, [\n      el('div', 'krp-qt-quote', { text: quoteText }),\n      el('div', 'krp-qt-attr', { text: attr })\n    ]);\n    var right = el('div', 'krp-page krp-qt-r', null, [\n      el('div', 'krp-qt-inner', null, [\n        phBox('krp-qt-matte', photoId, { mid: true }),\n        el('div', 'krp-qt-caprow', null, [\n          el('span', 'krp-qt-capl', { text: capL || '' }),\n          el('span', 'krp-qt-capr', { text: capR || '' })\n        ])\n      ])\n    ]);\n    return el('div', 'krp-2up krp-qt', null, [left, right]);\n  }\n  function renderQuote(sp) {\n    return quoteLayout(sp.quote || '', sp.attr || '', sp.photoId, sp.capL, sp.capR);\n  }\n\n  function renderFull(sp) {\n    var lay = Elayouts()[sp.id] || 'band';\n    var wrap = el('div', 'krp-fill krp-fu');\n    wrap.appendChild(phBox('krp-ph--fill', sp.photoId || null, { mid: true }));\n    if (lay === 'whisper') {\n      wrap.appendChild(el('span', 'krp-cap krp-fu-whisper', { text: sp.metaShort || sp.meta || '' }));\n    } else {\n      wrap.appendChild(el('div', 'krp-fu-band', null, [\n        el('span', 'krp-fu-title', { text: sp.title || '' }),\n        el('span', 'krp-fu-meta', { text: sp.meta || '' })\n      ]));\n    }\n    return wrap;\n  }\n\n  function renderMoment(sp) {\n    var lay = Elayouts()[sp.id] || 'band';\n    var wrap = el('div', 'krp-fill krp-mo');\n    wrap.appendChild(phBox('krp-ph--fill krp-scrim--bottom', sp.photoId || null, { mid: true }));\n    var block = el('div', 'krp-mo-block', null, [\n      el('span', 'krp-mo-pill', null, [\n        el('span', 'krp-mo-pillicon', { text: sp.badgeIcon || '\u2600' }),\n        el('span', 'krp-mo-pilltxt', { text: sp.badgeText || 'MOMENT' })\n      ]),\n      el('div', 'krp-mo-title', { text: sp.title || '' })\n    ]);\n    if (lay === 'band' && sp.lines && sp.lines.length) {\n      var data = el('div', 'krp-mo-data');\n      sp.lines.forEach(function (l, i) {\n        if (i) data.appendChild(el('br'));\n        data.appendChild(document.createTextNode(l));\n      });\n      block.appendChild(data);\n    }\n    wrap.appendChild(block);\n    return wrap;\n  }\n\n  /* momentPage view \u2014 all computed fields for renderers + inspector */\n  /* how many of a moment's picked photos actually PRINT on its page \u2014 the\n     rest still steer the map pins, the time window and the stats. The cap\n     follows the kind's fixed slots (hike sides = 2, meal hero = 1, quote\n     photo = 1) or, for the 'hi' highlight family, the chosen layout. */\n  function momPrintsCap(sp, mom) {\n    if (mom.kind === 'notes') return 0;\n    if (mom.kind === 'quote') return 1;\n    if (mom.kind === 'hike') return 2;\n    if (mom.kind === 'meal') return 1;\n    var lay = Elayouts()[sp.id] || 'hi';\n    return (lay === 'solo' || lay === 'immerse') ? 1 : 4;\n  }\n  function momPageHasMap(sp, mom) {\n    if (mom.kind === 'hike') return true;\n    if ((KINDS()[mom.kind] || {}).layout !== 'hi') return false;\n    var lay = Elayouts()[sp.id] || 'hi';\n    return lay === 'hi' || lay === 'solo';\n  }\n  function momView(sp) {\n    var mom = sp && sp.type === 'momentPage' ? sp.m : null;\n    if (!mom) return null;\n    var K = KINDS()[mom.kind] || {};\n    var mc = momCalc(mom);\n    var mg = momGuesses(mom);\n    var mPlace = shortPlace(mc.places[0] || '');\n    var accent = sp.ch >= 0 ? legColor(sp.ch) : '#9A6A2E';\n    var noteTxt = String(mom.note || '').trim();\n    var meta = (mom.date ? ('DAY ' + pad2(tripDayNo(mom.date)) + ' \u00B7 ' + dayLabel(mom.date) + ' ' + yearOf(mom.date)) : '') + (mc.n ? ' \u00B7 ' + mc.t1 + ' \u2013 ' + mc.t2 : '');\n    var stats, statRows = [];\n    if (mom.kind === 'hike') {\n      stats = [\n        { k: 'DISTANCE', v: momStat(mom, 'dist', mg.dist) }, { k: 'ASCENT', v: momStat(mom, 'ascent', mg.ascent) },\n        { k: 'MOVING', v: momStat(mom, 'dur', mg.dur) }, { k: 'PHOTOS', v: String(mc.n) }\n      ];\n      statRows = [['dist', 'DISTANCE'], ['ascent', 'ASCENT'], ['dur', 'MOVING'], ['pace', 'PACE']].map(function (rr) {\n        return { key: rr[0], k: rr[1], v: momStat(mom, rr[0], mg[rr[0]] || '') };\n      });\n    } else if (mom.kind === 'meal') {\n      stats = [{ k: 'AT THE TABLE', v: momStat(mom, 'table', mg.table) }, { k: 'PHOTOS', v: String(mc.n) }, { k: 'WEATHER', v: mc.wx || '\u2014' }];\n    } else {\n      var kindStat = mom.kind === 'water' ? { k: 'ON THE WATER', v: mg.aboard || '\u2014' }\n        : mom.kind === 'market' ? { k: 'WANDERED', v: mg.walk || '\u2014' }\n        : mom.kind === 'sight' ? { k: 'ON SITE', v: mc.span ? fmtMinSpan(mc.span) : '\u2014' }\n        : mom.kind === 'show' ? { k: 'RUNTIME', v: mg.runtime || '\u2014' }\n        : mom.kind === 'sunset' ? { k: 'LAST PHOTO', v: mc.t2 }\n        : { k: 'PLACES', v: String(mc.places.length) };\n      stats = [{ k: 'PHOTOS', v: String(mc.n) }, { k: 'WINDOW', v: mc.n ? (mc.t1 + ' \u2013 ' + mc.t2) : '\u2014' }, kindStat, { k: 'WEATHER', v: mc.wx || '\u2014' }];\n    }\n    var side = mom.ids.slice(0, 2).map(function (id) {\n      var rec = _byId[id] || {};\n      return { id: id, cap: String(rec.place || '').toUpperCase() + (rec.t ? ' \u00B7 ' + rec.t : '') };\n    });\n    var grids = { 1: ['1/1/3/3'], 2: ['1/1/2/3', '2/1/3/3'], 3: ['1/1/3/2', '1/2/2/3', '2/2/3/3'], 4: ['1/1/2/2', '1/2/2/3', '2/1/3/2', '2/2/3/3'] };\n    var phG = mom.ids.slice(0, 4);\n    var ars = grids[Math.max(1, Math.min(4, phG.length))] || grids[4];\n    var grid = phG.map(function (id, i) {\n      var rec = _byId[id] || {};\n      return {\n        id: id, area: ars[i], cap: String(rec.place || '').toUpperCase() + (rec.t ? ' \u00B7 ' + rec.t : ''),\n        more: (i === phG.length - 1 && mom.ids.length > 4) ? ('+' + (mom.ids.length - 4) + ' MORE') : null\n      };\n    });\n    var orderLines = noteTxt ? noteTxt.split('\\n').map(function (s2) { return s2.trim(); }).filter(Boolean).slice(0, 7) : [];\n    var order = orderLines.length\n      ? orderLines.map(function (nm, i) { return { name: nm, no: pad2(i + 1), muted: false }; })\n      : [{ name: 'Write the order in the inspector \u2014 one dish per line', no: '', muted: true }, { name: '\u2014', no: '', muted: true }, { name: '\u2014', no: '', muted: true }];\n    var pv = Elayouts()[sp.id] || mom.variant || 'ruled';\n    var hero0 = mom.ids.length ? _byId[mom.ids[0]] : null;\n    return {\n      layout: K.layout || 'hi', kind: mom.kind, accent: accent, icon: K.icon || '\u2726',\n      pageLayout: (K.layout || 'hi') === 'hi' ? (Elayouts()[sp.id] || 'hi') : null,\n      eyebrow: (K.eyebrow || 'THE MOMENT') + (mPlace ? ' \u00B7 ' + mPlace.toUpperCase() : ''),\n      title: mom.title || K.name, meta: meta, stats: stats, statRows: statRows,\n      noteText: noteTxt || (mom.kind === 'hike' ? 'How was the trail? A line or two \u2014 set it in the inspector.' : 'What happened here? A line or two \u2014 set it in the inspector.'),\n      noteEmpty: !noteTxt,\n      sidePhotos: side, gridPhotos: grid, order: order,\n      heroId: mom.ids.length ? mom.ids[0] : null,\n      heroCap: hero0 ? (String(hero0.place || '').toUpperCase() + ' \u00B7 ' + (hero0.t || '')) : 'PICK A PHOTO FROM THE TRAY \u2192',\n      heroCap2: mPlace ? (mPlace + (mc.t1 !== '\u2014' ? ' \u2014 ' + mc.t1 : '')) : '',\n      guessNote: mom.kind === 'hike' ? '\u2248 FIGURES GUESSED FROM PHOTO TIMES + GPS SPREAD \u2014 TYPE OVER THEM IN THE INSPECTOR' : '',\n      mapKind: 'mom:' + sp.id,\n      mapLabel: (mc.ptsN || 0) < 2\n        ? ('THE DAY\u2019S LINE \u2014 ' + (mPlace || '').toUpperCase() + ' PINNED \u00B7 DOTS = SAME-DAY STOPS')\n        : (mom.kind === 'hike' ? ('THE PATH \u2014 TRACED FROM ' + mc.ptsN + ' GPS POINTS') : ('WHERE IT HAPPENED \u2014 ' + (mPlace || '').toUpperCase())),\n      paper: pv,\n      quotePhoto: mom.kind === 'quote' && mom.ids.length > 0,\n      quoteBare: mom.kind === 'quote' && mom.ids.length === 0,\n      quoteText: '\u201C' + (noteTxt || 'Set the line in the inspector \u2014 this page holds it.') + '\u201D',\n      quoteAttr: ((mom.title || mPlace || 'A line from the trip') + (mom.date ? ' \u00B7 ' + dayLabel(mom.date) + ' ' + yearOf(mom.date) : '')).toUpperCase(),\n      noteLabel: mom.kind === 'meal' ? 'THE ORDER \u2014 ONE DISH PER LINE' : (mom.kind === 'quote' ? 'THE LINE ITSELF' : 'NOTE ON THE PAGE'),\n      notePh: mom.kind === 'meal' ? 'One dish per line \u2014 prints like a receipt' : (mom.kind === 'quote' ? 'The line itself, as it was said' : 'A sentence or two in your own voice'),\n      calc: mc, guesses: mg\n    };\n  }\n\n  function renderMomentPage(sp) {\n    var v = momView(sp);\n    if (!v) return el('div', 'krp-fill', null, ['\u00A0']);\n    if (v.layout === 'hike') {\n      var left = el('div', 'krp-page krp-mm-hike-l', null, [\n        el('div', 'krp-mm-eyerow', null, [\n          el('span', 'krp-mm-icon', { style: 'color:' + v.accent + ';', text: v.icon }),\n          eyebrow('krp-mm-eyebrow', v.eyebrow, v.accent)\n        ]),\n        el('div', 'krp-mm-title', { text: v.title }),\n        el('div', 'krp-mm-meta', { text: v.meta }),\n        statBand('krp-mm-stats', v.stats),\n        el('div', 'krp-mm-note' + (v.noteEmpty ? ' krp-mm-note--empty' : ''), { text: v.noteText }),\n        el('div', 'krp-mm-sides', null, v.sidePhotos.map(function (p) {\n          return phBox('krp-mm-side', p.id, { cap: p.cap });\n        })),\n        v.guessNote ? el('div', 'krp-mm-guessnote', { text: v.guessNote }) : null\n      ]);\n      var right = el('div', 'krp-page krp-mm-hike-r', null, [\n        mapWrap(v.mapKind, { cls: 'krp-mapwrap--fill', label: v.mapLabel })\n      ]);\n      return el('div', 'krp-2up krp-mm', null, [left, right]);\n    }\n    if (v.layout === 'meal') {\n      var leftM = el('div', 'krp-page', null, [phBox('krp-ph--fill', v.heroId, { mid: true, cap: v.heroCap })]);\n      var card = el('div', 'krp-mm-receipt', null, [\n        el('div', 'krp-mm-eyerow', null, [\n          el('span', 'krp-mm-icon', { style: 'color:' + v.accent + ';', text: v.icon }),\n          eyebrow('krp-mm-eyebrow', v.eyebrow, v.accent)\n        ]),\n        el('div', 'krp-mm-rtitle', { text: v.title }),\n        el('div', 'krp-mm-meta', { text: v.meta }),\n        el('div', 'krp-mm-orderlabel', { text: 'THE ORDER' })\n      ].concat(v.order.map(function (o) {\n        return el('div', 'krp-mm-orderrow', null, [\n          el('span', 'krp-mm-dish' + (o.muted ? ' krp-mm-dish--muted' : ''), { text: o.name }),\n          el('span', 'krp-mm-dishno', { text: o.no })\n        ]);\n      })).concat([statBand('krp-mm-rstats', v.stats.slice(0, 3))]));\n      var rightM = el('div', 'krp-page krp-mm-meal-r', null, [card]);\n      return el('div', 'krp-2up krp-mm', null, [leftM, rightM]);\n    }\n    if (v.layout === 'notes') {\n      var paperCls = v.paper === 'dot' ? 'krp-mm-paper--dot' : (v.paper === 'blank' ? 'krp-mm-paper--blank' : 'krp-mm-paper--ruled');\n      return el('div', 'krp-fill krp-mm krp-mm-notes', null, [\n        el('div', 'krp-mm-noteshead', null, [\n          el('div', 'krp-mm-notesheadl', null, [\n            eyebrow('krp-mm-eyebrow', v.icon + ' ' + v.eyebrow, v.accent),\n            el('div', 'krp-mm-title', { text: v.title })\n          ]),\n          el('div', 'krp-mm-meta', { text: v.meta })\n        ]),\n        el('div', 'krp-mm-paper ' + paperCls, { text: '\u00A0' }),\n        el('div', 'krp-mm-notesfoot', { text: 'LEFT BLANK ON PURPOSE \u2014 SPACE FOR INK AFTER PRINT' })\n      ]);\n    }\n    if (v.layout === 'quote') {\n      if (v.quotePhoto) return quoteLayout(v.quoteText, v.quoteAttr, v.heroId, v.heroCap2, v.meta);\n      return el('div', 'krp-fill krp-qt-bare', null, [\n        el('div', 'krp-qt-barequote', { text: v.quoteText }),\n        el('i', 'krp-divider', { text: '\u00A0' }),\n        el('div', 'krp-qt-bareattr', { text: v.quoteAttr })\n      ]);\n    }\n    /* 'hi' family \u2014 highlight pages, four layouts: grid+map (default),\n       one frame + story, story with no map (words breathe), and a\n       full-bleed photo with a floating card. */\n    var hiLay = v.pageLayout || 'hi';\n    var hiStory = function (o2) {\n      return el('div', 'krp-page krp-mm-hi-r', null, [\n        el('div', 'krp-mm-eyerow', null, [\n          el('span', 'krp-mm-icon', { style: 'color:' + v.accent + ';', text: v.icon }),\n          eyebrow('krp-mm-eyebrow', v.eyebrow, v.accent)\n        ]),\n        el('div', 'krp-mm-title', { text: v.title }),\n        el('div', 'krp-mm-meta', { text: v.meta }),\n        el('p', 'krp-mm-note ' + (o2.map ? 'krp-mm-note--clamp' : 'krp-mm-note--tall') + (v.noteEmpty ? ' krp-mm-note--empty' : ''), { text: v.noteText }),\n        statBand('krp-mm-stats', v.stats),\n        o2.map ? mapWrap(v.mapKind, { cls: 'krp-mapwrap--grow', label: v.mapLabel }) : null\n      ]);\n    };\n    if (hiLay === 'immerse') {\n      var wrapIm = el('div', 'krp-fill krp-mm krp-mm--immerse');\n      wrapIm.appendChild(phBox('krp-ph--fill krp-scrim--left', v.heroId, { mid: true }));\n      wrapIm.appendChild(el('span', 'krp-cap krp-mm-imcap', { text: v.heroCap }));\n      wrapIm.appendChild(el('div', 'krp-mm-card', null, [\n        el('div', 'krp-mm-eyerow', null, [\n          el('span', 'krp-mm-icon', { style: 'color:' + v.accent + ';', text: v.icon }),\n          eyebrow('krp-mm-eyebrow', v.eyebrow, v.accent)\n        ]),\n        el('div', 'krp-mm-title krp-mm-cardtitle', { text: v.title }),\n        el('div', 'krp-mm-meta', { text: v.meta }),\n        el('p', 'krp-mm-note krp-mm-note--clamp' + (v.noteEmpty ? ' krp-mm-note--empty' : ''), { text: v.noteText }),\n        statBand('krp-mm-stats krp-mm-cardstats', v.stats)\n      ]));\n      return wrapIm;\n    }\n    if (hiLay === 'solo') {\n      var leftSo = el('div', 'krp-page', null, [phBox('krp-ph--fill', v.heroId, { mid: true, cap: v.heroCap })]);\n      return el('div', 'krp-2up krp-mm krp-mm-hi', null, [leftSo, hiStory({ map: true })]);\n    }\n    var gridBox = el('div', 'krp-page krp-mm-higrid');\n    v.gridPhotos.forEach(function (p) {\n      var cell = phBox('krp-mm-hicell', p.id, { style: 'grid-area:' + p.area + ';', cap: p.cap });\n      if (p.more) cell.appendChild(el('span', 'krp-mm-more', { text: p.more }));\n      gridBox.appendChild(cell);\n    });\n    return el('div', 'krp-2up krp-mm krp-mm-hi', null, [gridBox, hiStory({ map: hiLay !== 'story' })]);\n  }\n\n  function renderClosing(sp) {\n    var T = totals();\n    var rec = _byId[sp.photoId] || {};\n    var left = el('div', 'krp-page', null, [\n      phBox('krp-ph--fill', sp.photoId, { mid: true, cap: (String(rec.place || '').toUpperCase() || 'THE LAST FRAME') + ' \u00B7 THE LAST EVENING' })\n    ]);\n    var line = el('div', 'krp-cl-line');\n    line.appendChild(document.createTextNode(capWord(wordNum(T.days)) + ' days, ' + wordNum(T.journeys) + (isSingle() ? ' places,' : ' journeys,')));\n    line.appendChild(el('br'));\n    line.appendChild(document.createTextNode('one line on the map.'));\n    var colo = el('div', 'krp-cl-colophon');\n    colo.appendChild(document.createTextNode('KR MAPS \u00B7 ' + roman(T.year)));\n    colo.appendChild(el('br'));\n    colo.appendChild(el('span', 'krp-cl-colophon2', { text: 'COMPOSED BY THE JOURNEY ENGINE \u00B7 EDITED BY YOU' }));\n    var right = el('div', 'krp-page krp-cl-r', null, [\n      el('div', 'krp-cl-eyebrow', { text: 'THE JOURNEY, CLOSED' }),\n      line,\n      statBand('krp-cl-stats', clStats()),\n      el('i', 'krp-divider', { text: '\u00A0' }),\n      colo\n    ]);\n    return el('div', 'krp-2up krp-cl', null, [left, right]);\n  }\n\n  /* furniture: guides overlay (spans/pseudo only \u2014 never empty divs) */\n  function guidesOverlay() {\n    return el('div', 'krp-guides', null, [\n      el('span', 'krp-guide-safetag', { text: '10 MM SAFE' }),\n      el('i', 'krp-guide-spineline', { text: '\u00A0' }),\n      el('span', 'krp-guide-spinetag', { text: 'SPINE' })\n    ]);\n  }\n  function renderSpread(sp, opts) {\n    if (!HAS_DOC) throw new Error('renderSpread needs a document');\n    sp = (typeof sp === 'string') ? spreadById(sp) : sp;\n    if (!sp) return el('div', 'krp-sheet', null, ['\u00A0']);\n    opts = opts || {};\n    var guides = ('guides' in opts) ? !!opts.guides : state.guides;\n    var reasoning = ('reasoning' in opts) ? !!opts.reasoning : state.reasoning;\n    var mountMaps = opts.maps !== false;\n    var lay = Elayouts()[sp.id];\n    var sheet = el('div', 'krp-sheet krp-sheet--' + sp.type + (sp.type !== 'cover' ? ' krp-sheet--spine' : ' krp-sheet--cover'), { 'data-spread-id': sp.id });\n    /* body */\n    var prevMount = mountMap;\n    if (!mountMaps) mountMap = function () {}; /* render-only pass (thumbnails, tests) */\n    var body;\n    try {\n      if (sp.type === 'cover') body = renderCover(sp);\n      else if (sp.type === 'intro') body = renderIntro(sp);\n      else if (sp.type === 'transit') body = renderTransit(sp);\n      else if (sp.type === 'chapter' || sp.type === 'dayopen') body = renderChapter(sp);\n      else if (sp.type === 'frames') body = renderFrames(sp, { reasoning: reasoning });\n      else if (sp.type === 'day') body = renderDay(sp);\n      else if (sp.type === 'quote') body = renderQuote(sp);\n      else if (sp.type === 'full') body = renderFull(sp);\n      else if (sp.type === 'moment') body = renderMoment(sp);\n      else if (sp.type === 'momentPage') body = renderMomentPage(sp);\n      else if (sp.type === 'closing') body = renderClosing(sp);\n      else body = el('div', 'krp-fill', null, ['\u00A0']);\n    } finally {\n      mountMap = prevMount;\n    }\n    sheet.appendChild(body);\n    /* folios \u2014 suppressed on cover/full/moment + immersive chapter/dayopen */\n    var folioTypes = { intro: 1, transit: 1, chapter: 1, frames: 1, day: 1, dayopen: 1, quote: 1, closing: 1, momentPage: 1 };\n    var folioOn = opts.folios !== false && folioTypes[sp.type] && !((sp.type === 'chapter' || sp.type === 'dayopen') && lay === 'immersive');\n    if (folioOn && sp.ppl) {\n      sheet.appendChild(el('span', 'krp-folio krp-folio--l', { text: sp.ppl + ' \u00B7 ' + folioTitle() }));\n      sheet.appendChild(el('span', 'krp-folio krp-folio--r', { text: sp.ppr }));\n    }\n    if (guides) sheet.appendChild(guidesOverlay());\n    if (reasoning) {\n      var chips = chipsFor(sp);\n      if (chips.length) {\n        sheet.appendChild(el('div', 'krp-rchips', null, chips.map(function (c) {\n          return el('div', 'krp-rchip', { style: c.pos }, [\n            el('i', 'krp-rchip-dot', { text: '\u00A0' }),\n            el('span', 'krp-rchip-txt', { text: c.text })\n          ]);\n        })));\n      }\n    }\n    return sheet;\n  }\n\n  /* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     VIEWS \u2014 shared descriptor builders both shells consume (data only)\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n  function layoutCandidates(sp) {\n    if (!sp) return [];\n    var mom = sp.type === 'momentPage' ? sp.m : null;\n    var defs = [];\n    if (sp.type === 'chapter' || sp.type === 'dayopen') {\n      defs = [\n        ['mapstats', 'Map + hero', 'orient first'], ['heromap', 'Hero + map', 'immerse first'], ['immersive', 'Immersive', 'map as inset'],\n        ['titlepage', 'Title page', 'no map \u00B7 type first'], ['heroonly', 'Full bleed', 'no map \u00B7 photo only']\n      ];\n    } else if (sp.type === 'frames') {\n      var P = FR_PRESETS();\n      var cnt = photosFor(sp).length;\n      defs = Object.keys(P)\n        .filter(function (k) { return P[k].n <= Math.max(2, cnt); })\n        .sort(function (a, b) { return P[b].n - P[a].n; })\n        .map(function (k) { return [k, P[k].name, P[k].sub]; });\n    } else if (sp.type === 'full') {\n      defs = [['band', 'Caption band', 'titled'], ['whisper', 'Whisper', 'corner cap only']];\n    } else if (sp.type === 'moment') {\n      defs = [['band', 'With data', 'time \u00B7 sun \u00B7 window'], ['whisper', 'Title only', 'quieter']];\n    } else if (sp.type === 'momentPage' && mom && mom.kind === 'notes') {\n      defs = [['ruled', 'Ruled', 'feint lines'], ['dot', 'Dot grid', 'journal'], ['blank', 'Blank', 'clean']];\n    } else if (sp.type === 'momentPage' && mom && (KINDS()[mom.kind] || {}).layout === 'hi') {\n      defs = [\n        ['hi', 'Grid + map', 'photos left \u00B7 story right'], ['solo', 'One frame', 'hero left \u00B7 story right'],\n        ['story', 'Story', 'no map \u00B7 words breathe'], ['immerse', 'Full bleed', 'one photo \u00B7 floating card']\n      ];\n    } else if (sp.type === 'cover') {\n      defs = [['brush', 'Brush stroke', 'one gesture'], ['dotted', 'Dotted line', 'quieter']];\n    }\n    var momDef = mom ? (((KINDS()[mom.kind] || {}).layout === 'hi') ? 'hi' : (mom.variant || 'ruled')) : null;\n    var effLay = sp.type === 'frames' ? effPreset(sp)\n      : (mom ? (Elayouts()[sp.id] || momDef)\n        : (sp.type === 'cover' ? (Elayouts().cover || 'brush')\n          : (Elayouts()[sp.id] || ((sp.type === 'chapter' || sp.type === 'dayopen') ? 'heromap' : 'band'))));\n    return defs.map(function (cd) {\n      return { key: cd[0], name: cd[1], sub: cd[2], active: effLay === cd[0] };\n    });\n  }\n  function layoutNoteFor(sp) {\n    if (!sp || sp.type !== 'frames') return '';\n    var phs = photosFor(sp);\n    var pre = FR_PRESETS()[effPreset(sp)];\n    var hidden = Math.max(0, phs.length - pre.n);\n    return hidden > 0\n      ? hidden + ' photo' + (hidden > 1 ? 's' : '') + ' now off the page \u2014 greyed in the tray with a NO ROOM tag. Tap a greyed photo to swap it on; it takes the last slot.'\n      : 'Engine default: densest grid that fits every frame of this batch (' + phs.length + ').';\n  }\n  /* DATA ON THE PAGE rows (chapter openers) \u2014 real values, toggle states */\n  function statRowsAll(sp) {\n    var g = groupOf(sp);\n    if (!g) return [];\n    var st = g.st || {};\n    var stats = Estats();\n    var poolCount = poolN(sp.ch) || g.frames || 0;\n    var wx = st.wx || (g.date ? wxFor(g.date) : '');\n    var rows = [\n      { key: 'days', k: 'DAYS', v: String(g.days || '') },\n      { key: 'frames', k: 'PHOTOS', v: String(poolCount) },\n      { key: 'distance', k: 'DISTANCE', v: st.km != null ? ('\u2248 ' + fmtDist(st.km)) : '' },\n      { key: 'weather', k: 'WEATHER', v: convTemp(wx) || '' },\n      { key: 'elevation', k: 'ELEVATION', v: st.elev != null ? ((st.elevPre || '') + fmtElev(st.elev) + (st.elevSuf || '')) : '' },\n      { key: 'coords', k: 'COORDS', v: st.coords || '' }\n    ];\n    rows.forEach(function (r) { r.on = !!stats[r.key]; });\n    return rows;\n  }\n  function dataView(sp) {\n    return { shown: !!sp && (sp.type === 'chapter' || sp.type === 'dayopen'), rows: statRowsAll(sp) };\n  }\n  /* photo tray descriptors \u2014 cover/chapter/frames/moment behaviours */\n  function trayView(sp) {\n    if (!sp) return { shown: false, items: [] };\n    var mom = sp.type === 'momentPage' ? sp.m : null;\n    var heroable = sp.type === 'chapter' || sp.type === 'day' || sp.type === 'dayopen';\n    var shown = (sp.ch >= 0 || sp.type === 'cover') && !(mom && mom.kind === 'notes');\n    if (sp.type === 'frames' && !photosFor(sp).length) shown = false;\n    var items = [], action = null, title = '', meta = '', note = '';\n    var g = groupOf(sp);\n    if (shown && sp.type === 'cover') {\n      action = 'cover-hero';\n      title = 'COVER PHOTO'; meta = 'TOP OF ' + totals().photos;\n      note = 'The strongest landscapes across the whole trip, scored by the aesthetic model. Tap one to put it on the cover.';\n      var allP = [];\n      _chIdx.forEach(function (ci) { (_pools[ci] || []).forEach(function (p) { if (p.land) allP.push(p); }); });\n      allP.sort(function (a, b) { return b.score - a.score; });\n      var curCover = Eheroes().cover || sp.heroId;\n      items = allP.slice(0, 12).map(function (p) {\n        return { id: p.id, tag: p.id === curCover ? 'HERO' : null, dim: false, score: p.score.toFixed(2) + (p.golden ? ' \u00B7 golden' : '') };\n      });\n    } else if (shown && mom) {\n      action = 'moment';\n      /* honest tags: only the first `cap` picks PRINT as photos \u2014 the rest\n         of the selection still pins the map and shapes the stats/window.\n         One tray, two tag texts; no second list to manage. */\n      var capM = momPrintsCap(sp, mom);\n      var hasMapM = momPageHasMap(sp, mom);\n      var printsM = Math.min(capM, mom.ids.length);\n      var restTag = hasMapM ? 'ON MAP' : 'IN STATS';\n      title = 'ON THIS PAGE';\n      meta = mom.ids.length + ' PICKED \u00B7 ' + printsM + ' PRINT';\n      note = 'That day\u2019s pool \u2014 tap to add or pull a photo. ' +\n        (capM === 1 ? 'The first pick prints as the photo; ' : 'The first ' + capM + ' picks print as photos; ') +\n        (hasMapM ? 'every pick still pins the map and feeds the stats.' : 'every pick still feeds the stats.');\n      var poolM = (_pools[mom.ci] || []).filter(function (p) { return !mom.date || p.date === mom.date; }).slice(0, 24);\n      items = poolM.map(function (p) {\n        var ixM = mom.ids.indexOf(p.id);\n        return {\n          id: p.id,\n          tag: ixM < 0 ? null : (ixM < capM ? 'ON PAGE' : restTag),\n          dim: ixM < 0,\n          score: p.score.toFixed(2) + (p.golden ? ' \u00B7 golden' : '')\n        };\n      });\n    } else if (shown && sp.type === 'frames' && sp.chunk) {\n      action = 'frames';\n      var phs = photosFor(sp);\n      title = 'ON THIS SPREAD'; meta = phs.length + ' OF ' + (poolN(sp.ch) || '\u2014') + ' POOL';\n      note = 'Bright = printing on this spread. Grey = off the page \u2014 toggled off, or no room in this layout. Tap any photo to flip it; swaps take the last slot.';\n      var included = EfrInclude()[sp.id] || sp.chunk.map(function (p) { return p.id; });\n      var frCap = FR_PRESETS()[effPreset(sp)].n;\n      items = sp.chunk.map(function (p) {\n        var idxI = included.indexOf(p.id);\n        var onPage = idxI >= 0 && idxI < frCap;\n        var overflow = idxI >= frCap;\n        return {\n          id: p.id, tag: onPage ? 'ON PAGE' : (overflow ? 'NO ROOM' : null),\n          dim: !onPage, score: p.score.toFixed(2) + (p.golden ? ' \u00B7 golden' : '')\n        };\n      });\n    } else if (shown) {\n      action = heroable ? 'hero' : null;\n      title = 'IN THIS JOURNEY'; meta = (poolN(sp.ch) || (g ? g.frames : 0)) + ' FRAMES';\n      note = heroable\n        ? 'The journey\u2019s strongest photos. Tap one to promote it to hero \u2014 scores follow the aesthetic model.'\n        : 'The engine\u2019s top picks for this journey. Scores visible with Reasoning on.';\n      var pool = (_pools[sp.ch] || []).slice().sort(function (a, b) { return b.score - a.score; }).slice(0, 12);\n      var curHero = heroIdFor(sp);\n      items = pool.map(function (p) {\n        return { id: p.id, tag: (heroable && p.id === curHero) ? 'HERO' : null, dim: false, score: p.score.toFixed(2) + (p.golden ? ' \u00B7 golden' : '') };\n      });\n    }\n    return { shown: shown && items.length > 0, title: title, meta: meta, note: note, action: action, items: items };\n  }\n  /* route-line inspector (intro + chapter spreads) */\n  function routeView(sp) {\n    var shown = !!sp && (sp.type === 'intro' || sp.type === 'chapter');\n    if (!shown) return { shown: false, stops: [], palettes: [] };\n    var skip = ErouteSkip();\n    var curPalId = E().routePal || String((config.maps && config.maps.chapterPalette) || 'terracotta').toLowerCase();\n    var stops = TRIP_WPS().map(function (wp) {\n      return { name: wp.name, leg: wp.leg, skipped: !!skip[wp.name], color: legColor(wp.leg) };\n    });\n    var offN = Object.keys(skip).length;\n    var basemapNote = stadiaKey()\n      ? 'HIKE PAGES SWITCH TO THE OUTDOOR TOPO STYLE AUTOMATICALLY, WHATEVER TONE THE REST OF THE BOOK USES.'\n      : 'NO STADIA KEY YET \u2014 TILES WON\u2019T LOAD. PASTE ONE IN THE SECTION SETTINGS (RESTRICT IT TO YOUR DOMAIN ON THE STADIA DASHBOARD).';\n    return {\n      shown: true,\n      meta: (TRIP_WPS().length - offN) + ' STOPS' + (offN ? ' \u00B7 ' + offN + ' SKIPPED' : ''),\n      palettes: PALETTES().map(function (pl) {\n        return { id: pl.id, name: pl.name, colors: pl.colors, active: pl.id === curPalId };\n      }),\n      width: ErouteW(),\n      stops: stops,\n      note: basemapNote\n    };\n  }\n  function mapView(sp) {\n    var kind = mapKindFor(sp);\n    if (!kind) return { shown: false };\n    var isOpener = !!sp && (sp.type === 'chapter' || sp.type === 'dayopen');\n    if (isOpener) {\n      /* the no-map opener layouts put nothing on the page to control \u2014\n         hide the whole MAP block (zoom, mode, style) rather than offer\n         knobs that visibly do nothing */\n      var layM = Elayouts()[sp.id] || 'heromap';\n      if (layM === 'titlepage' || layM === 'heroonly') return { shown: false };\n    }\n    /* same rule for highlight pages on their no-map layouts (story/immerse) */\n    if (sp.type === 'momentPage' && sp.m && !momPageHasMap(sp, sp.m)) return { shown: false };\n    var adj = EzoomAdj()[kind] || 0;\n    return {\n      shown: true, kind: kind, label: mapKindLabel(kind),\n      zoomLabel: adj ? ((adj > 0 ? '+' : '') + adj.toFixed(1)) : 'FIT',\n      modeShown: isOpener,\n      mode: EmapMode()[kind] === 'dot' ? 'dot' : 'route'\n    };\n  }\n  /* wizard view \u2014 everything the wizard UI needs, both shells */\n  function wizView() {\n    var w = state.wizard;\n    if (!w) return { on: false };\n    var KK = KINDS();\n    var mkKind = function (k) {\n      var d = KK[k];\n      return {\n        key: k, icon: d.icon, name: d.name, hint: d.hint,\n        selected: w.kind === k, guessed: !!(w.sug && w.sug.kind === k)\n      };\n    };\n    var anchorSp = spreadById(w.anchorId);\n    var tmpM = wizMoment(w);\n    var mcW = momCalc(tmpM);\n    var mgW = momGuesses(tmpM);\n    var KD = KK[w.kind] || {};\n    var wizStats = [];\n    if (w.kind && !KD.bare) {\n      wizStats.push({ k: 'PHOTOS', v: String(mcW.n) });\n      wizStats.push({ k: 'WINDOW', v: mcW.n ? (mcW.t1 + ' \u2013 ' + mcW.t2) : '\u2014' });\n      if (w.kind === 'hike') { wizStats.push({ k: 'DISTANCE', v: mgW.dist || '\u2014' }); wizStats.push({ k: 'ASCENT', v: mgW.ascent || '\u2014' }); }\n      else if (w.kind === 'water') wizStats.push({ k: 'ON THE WATER', v: mgW.aboard || '\u2014' });\n      else if (w.kind === 'meal') wizStats.push({ k: 'AT THE TABLE', v: mgW.table || '\u2014' });\n      else if (w.kind === 'market' || w.kind === 'sight') wizStats.push({ k: 'WANDERED', v: mgW.walk || '\u2014' });\n      else if (w.kind === 'show') wizStats.push({ k: 'RUNTIME', v: mgW.runtime || '\u2014' });\n      wizStats.push({ k: 'WEATHER', v: mcW.wx || '\u2014' });\n    }\n    var canAdd = !!w.kind && (!!KD.bare || mcW.n >= 1);\n    return {\n      on: true, step: w.step,\n      after: 'GOES AFTER: ' + (anchorSp ? String(anchorSp.flow || anchorSp.label || '').toUpperCase() : '\u2014'),\n      guessShown: !!w.sug && w.step === 'kind',\n      guessLine: w.sug ? sugLineFor(w.sug) : '',\n      kinds: Object.keys(KK).filter(function (k) { return !KK[k].bare; }).map(mkKind),\n      kindsBare: Object.keys(KK).filter(function (k) { return KK[k].bare; }).map(mkKind),\n      hasPhotos: !KD.bare,\n      selLine: mcW.n + ' SELECTED' + (mcW.n ? ' \u00B7 ' + mcW.t1 + ' \u2013 ' + mcW.t2 : ''),\n      photos: wizPool(w).map(function (p) {\n        return { id: p.id, t: p.t, on: !!w.sel[p.id] };\n      }),\n      kindIcon: KD.icon || '\u2726', kindName: KD.name || 'Pick a kind',\n      why: w.sug\n        ? (w.sug.ids.length + ' photos inside ' + fmtMinSpan(w.sug.span) + ' at ' + shortPlace(w.sug.place) + ' \u2014 the burst pattern of one real experience. It reads like a ' + ((KK[w.sug.kind] || {}).short || 'moment').toLowerCase() + '.')\n        : (KD.bare\n          ? 'No photos on this one \u2014 deliberate space in the book. Words and paper are yours; edit them any time in the inspector.'\n          : (mcW.n\n            ? (mcW.n + ' photos between ' + mcW.t1 + ' and ' + mcW.t2 + ((mcW.places || [])[0] ? (' at ' + shortPlace(mcW.places[0])) : '') + ' \u2014 one experience, one page.')\n            : 'Pick the frames that belong to this experience \u2014 the page and its stats follow.')),\n      variantsShown: w.kind === 'notes',\n      variants: [['ruled', 'RULED'], ['dot', 'DOT GRID'], ['blank', 'BLANK']].map(function (vv) {\n        return { key: vv[0], label: vv[1], active: (w.variant || 'ruled') === vv[0] };\n      }),\n      statsShown: wizStats.length > 0, stats: wizStats,\n      footNote: KD.bare ? 'NO PHOTOS NEEDED \u2014 WORDS EDIT IN THE INSPECTOR' : (mcW.n ? 'GUESSES FOLLOW THE PICK \u00B7 TITLE & WORDS EDIT IN THE INSPECTOR' : 'PICK AT LEAST ONE PHOTO'),\n      canAdd: canAdd\n    };\n  }\n\n  /* \u2500\u2500 lifecycle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function destroy() {\n    destroyed = true;\n    Object.keys(timers).forEach(function (k) { clearTimeout(timers[k]); });\n    Object.keys(_live).forEach(function (kind) {\n      var m = _live[kind];\n      try {\n        if (m) {\n          m._krToken = (m._krToken || 0) + 1; /* cancel rAF draw loops */\n          var c = m._container;\n          if (c && c._ro2) { try { c._ro2.disconnect(); } catch (e) {} c._ro2 = null; }\n          m.remove();\n          if (c) { c._map = null; c._krKind = null; }\n        }\n      } catch (e) {}\n    });\n    _live = {};\n  }\n\n  /* \u2500\u2500 init \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  derive();\n  state.cur = 'cover';\n\n  /* \u2500\u2500 public API (design member names preserved; see studio-api.md) \u2500\u2500\u2500\u2500\u2500\u2500 */\n  var api = {\n    /* lifecycle */\n    destroy: destroy, recompose: recompose,\n    /* ephemeral state (cur/reasoning/guides/wizard) */\n    state: state,\n    edits: E,\n    /* book model */\n    BOOK: BOOK, SPREADS: SPREADS, CHAPTERS: CHAPTERS, TRIP_WPS: TRIP_WPS,\n    KINDS: KINDS, FR_PRESETS: FR_PRESETS, PALETTES: PALETTES,\n    presetForCount: presetForCount, colsCss: colsCss, effPreset: effPreset,\n    photosFor: photosFor, toggleFr: toggleFr, poolN: poolN, pools: pools, byId: byId,\n    totals: totals, bookStats: bookStats, totalPP: totalPP,\n    spreadById: spreadById, spreadIndex: spreadIndex,\n    labelFor: labelFor, typeName: typeName, capFor: capFor, shortPlace: shortPlace,\n    tripDates: tripDates, tripDayNo: tripDayNo, dayLabel: dayLabel,\n    legColor: legColor, wxFor: wxFor, elevFor: elevFor, guessKind: guessKind,\n    isSingle: isSingle, bookMode: bookMode, folioTitle: folioTitle, crumb: crumb,\n    /* navigation */\n    cur: cur, navTo: navTo, navPrev: navPrev, navNext: navNext, navRel: navRel,\n    /* suggestions */\n    SUGGESTIONS: SUGGESTIONS, sugForSpread: sugForSpread, sugLineFor: sugLineFor,\n    sugTitleFor: sugTitleFor, sugAnchor: sugAnchor, dismissSug: dismissSug,\n    /* moments */\n    momCalc: momCalc, momGuesses: momGuesses, momStat: momStat, momRecs: momRecs,\n    curMoment: curMoment, momSetKind: momSetKind, momSetTitle: momSetTitle,\n    momSetNote: momSetNote, momSetStat: momSetStat, momTogglePhoto: momTogglePhoto,\n    momRemove: momRemove, momView: momView,\n    /* wizard */\n    openAddPage: openAddPage, openWizardFromSug: openWizardFromSug,\n    wizClose: wizClose, wizBack: wizBack, wizPickKind: wizPickKind,\n    wizToggle: wizToggle, wizSetTitle: wizSetTitle, wizSetNote: wizSetNote,\n    wizSetVariant: wizSetVariant, wizPool: wizPool, wizMoment: wizMoment,\n    wizCreate: wizCreate, wizView: wizView,\n    /* edits */\n    setLayout: setLayout, setHero: setHero, toggleStat: toggleStat,\n    setUnits: setUnits, setTempUnit: setTempUnit,\n    setRoutePal: setRoutePal, setRouteW: setRouteW, toggleStop: toggleStop,\n    coverShape: coverShape, setCoverShape: setCoverShape,\n    coverThickness: coverThickness, setCoverThickness: setCoverThickness,\n    zoomBy: zoomBy, zoomResetCur: zoomResetCur, setMapMode: setMapMode,\n    setBookMode: setBookMode, setMapTone: setMapTone,\n    toggleReasoning: toggleReasoning, toggleGuides: toggleGuides,\n    /* units + formatting */\n    isMi: isMi, unitLabel: unitLabel, unitSuffix: unitSuffix,\n    distVal: distVal, fmtDist: fmtDist, fmtDistN: fmtDistN, fmtElev: fmtElev,\n    convTemp: convTemp, fmtMins: fmtMinSpan, minsOf: minsOf,\n    /* maps */\n    mountMap: mountMap, makeMap: makeMap, applyTiles: applyTiles,\n    refreshMapRasters: refreshMapRasters,\n    redrawRoutes: redrawRoutes, drawOneRoute: drawOneRoute, drawFlight: drawFlight,\n    routeData: routeData, segArc: segArc, greatCircle: greatCircle,\n    curMapKind: curMapKind, mapKindFor: mapKindFor, zoomLabel: zoomLabel,\n    mapCredit: mapCredit, mapCreditShort: mapCreditShort,\n    /* cover art */\n    coverArt: coverArt,\n    _resample: _resample, _smoothPts: _smoothPts, _extendFlick: _extendFlick,\n    _brushRibbon: _brushRibbon, _spatter: _spatter,\n    /* rendering */\n    renderSpread: renderSpread, renderThumb: renderThumb, thumbCells: thumbCells,\n    /* reasoning / pacing / inspector views */\n    chipsFor: chipsFor, paceNoteFor: paceNoteFor,\n    layoutCandidates: layoutCandidates, layoutNoteFor: layoutNoteFor,\n    statRowsAll: statRowsAll, dataView: dataView, trayView: trayView,\n    routeView: routeView, mapView: mapView, mapToneOptions: mapToneOptions,\n    printPhotoIds: printPhotoIds\n  };\n  return api;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 order pipeline \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   Turns a finished studio draft into a paid print order without the photos\n   ever leaving the browser un-consented. Called by the desktop/mobile order\n   popovers after the customer confirms format + consent. Steps:\n     1. mint a print job            POST  {jobBase}/new\n     2. downscale + upload photos   PUT   {jobBase}/{job}/asset/{id}.jpg\n        (client-side to 7,200px long edge, JPEG \u2014 originals stay on device;\n         EXIF orientation baked in, GPS/time already carried by the manifest)\n     3. post the manifest           POST  {jobBase}/{job}/manifest\n     4. render the PDF              POST  {renderBase}/render  (queued; poll\n        {renderBase}/render/status?job= to done)\n     5. mint a checkout             POST  {jobBase}/{job}/checkout  -> cart\n        permalink with the _job token the orders/paid webhook resolves.\n   onProgress({phase, done, total, ...}) drives the popover's progress UI.\n   Everything downstream (render, Prodigi) is already proven; this is the\n   studio->cloud bridge that was the last missing link. */\nfunction krpDownscaleJpeg(blob, maxEdge, quality) {\n  /* createImageBitmap with from-image applies EXIF orientation, so the\n     uploaded pixels are already upright (no orientation tag needed). */\n  var bmpP = (typeof createImageBitmap === 'function')\n    ? createImageBitmap(blob, { imageOrientation: 'from-image' })\n    : Promise.reject(new Error('no createImageBitmap'));\n  return bmpP.then(function (bmp) {\n    var w = bmp.width, h = bmp.height, longEdge = Math.max(w, h);\n    var scale = longEdge > maxEdge ? maxEdge / longEdge : 1;\n    var cw = Math.max(1, Math.round(w * scale)), ch = Math.max(1, Math.round(h * scale));\n    var canvas = document.createElement('canvas');\n    canvas.width = cw; canvas.height = ch;\n    canvas.getContext('2d').drawImage(bmp, 0, 0, cw, ch);\n    if (bmp.close) bmp.close();\n    return new Promise(function (res, rej) {\n      canvas.toBlob(function (out) {\n        canvas.width = canvas.height = 0;   // free the backing store\n        out ? res(out) : rej(new Error('jpeg encode failed'));\n      }, 'image/jpeg', quality);\n    });\n  });\n}\n\nfunction krpRunPool(items, worker, limit) {\n  return new Promise(function (resolve, reject) {\n    var i = 0, active = 0, done = 0, total = items.length, failed = false;\n    if (!total) { resolve(); return; }\n    function pump() {\n      if (failed) return;\n      if (done === total) { resolve(); return; }\n      while (active < limit && i < total) {\n        var item = items[i++]; active++;\n        worker(item).then(function () {\n          active--; done++; pump();\n        }, function (e) { failed = true; reject(e); });\n      }\n    }\n    pump();\n  });\n}\n\nfunction krpOrder(opts) {\n  var jobBase = String(opts.jobBase || '').replace(/\\/+$/, '');\n  var renderBase = String(opts.renderBase || 'https://krmaps-render.krmaps.workers.dev').replace(/\\/+$/, '');\n  var urls = opts.urls, studio = opts.studio, project = opts.project;\n  var onProgress = opts.onProgress || function () {};\n  var MAX_EDGE = opts.maxEdge || 7200, QUALITY = opts.quality || 0.85;\n\n  function step(phase, extra) { onProgress(Object.assign({ phase: phase }, extra || {})); }\n  var job;\n\n  return Promise.resolve()\n    .then(function () {\n      step('minting');\n      return fetch(jobBase + '/new', { method: 'POST' }).then(function (r) {\n        if (!r.ok) throw new Error('could not start a print job (' + r.status + ')');\n        return r.json();\n      });\n    })\n    .then(function (j) {\n      job = j.job;\n      if (!job) throw new Error('no job token returned');\n      var ids = studio.printPhotoIds() || [];\n      var total = ids.length, done = 0;\n      step('uploading', { done: 0, total: total });\n      return krpRunPool(ids, function (id) {\n        return Promise.resolve(urls.full(id)).then(function (u) {\n          if (!u) return;                 // demo/mid-only photo \u2014 nothing to upload\n          return fetch(u).then(function (r) { return r.blob(); })\n            .then(function (blob) { return krpDownscaleJpeg(blob, MAX_EDGE, QUALITY); })\n            .then(function (jpeg) {\n              return fetch(jobBase + '/' + job + '/asset/' + id + '.jpg', {\n                method: 'PUT',\n                headers: { 'Content-Type': 'image/jpeg', 'Content-Length': String(jpeg.size) },\n                body: jpeg\n              });\n            })\n            .then(function (r) { if (!r.ok) throw new Error('upload failed for a photo (' + r.status + ')'); });\n        }).then(function () { done++; step('uploading', { done: done, total: total }); });\n      }, opts.concurrency || 4);\n    })\n    .then(function () {\n      step('manifest');\n      return fetch(jobBase + '/' + job + '/manifest', {\n        method: 'POST', headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ v: 1, project: project })\n      }).then(function (r) { if (!r.ok) throw new Error('manifest failed (' + r.status + ')'); });\n    })\n    .then(function () {\n      step('rendering');\n      return fetch(renderBase + '/render', {\n        method: 'POST', headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ job: job, jobBase: jobBase })\n      }).then(function (r) {\n        return r.json().then(function (b) {\n          if (r.status !== 202 && !(b && b.queued)) throw new Error('render did not queue (' + r.status + ')');\n          if (typeof b.ahead === 'number' && b.ahead > 0) step('rendering', { ahead: b.ahead, approxWaitSeconds: b.approxWaitSeconds });\n        });\n      });\n    })\n    .then(function () {\n      var t0 = Date.now(), MAX = (opts.renderTimeoutMs || 15 * 60 * 1000);\n      return new Promise(function (resolve, reject) {\n        (function poll() {\n          fetch(renderBase + '/render/status?job=' + job).then(function (r) { return r.json(); }).then(function (s) {\n            if (s.state === 'done') { step('rendered', { pageCount: s.pageCount }); resolve(s); return; }\n            if (s.state === 'failed') { reject(new Error('render failed: ' + (s.error || 'unknown'))); return; }\n            if (Date.now() - t0 > MAX) { reject(new Error('render timed out')); return; }\n            if (s.state === 'queued') step('rendering', { ahead: s.ahead, approxWaitSeconds: s.approxWaitSeconds });\n            setTimeout(poll, 4000);\n          }, function () { setTimeout(poll, 4000); });   // tolerate a transient blip\n        })();\n      });\n    })\n    .then(function () {\n      step('checkout');\n      return fetch(jobBase + '/' + job + '/checkout', {\n        method: 'POST', headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ binding: opts.binding, variantId: opts.variantId, quantity: opts.quantity || 1, title: opts.title || project.title || '' })\n      }).then(function (r) {\n        return r.json().then(function (b) {\n          if (!r.ok || !b.checkoutUrl) throw new Error('checkout failed (' + r.status + ')');\n          step('done', { checkoutUrl: b.checkoutUrl });\n          return { job: job, checkoutUrl: b.checkoutUrl };\n        });\n      });\n    });\n}\n\nroot.KRPressStudio = root.KRPressStudio || { create: create };\nroot.KRPressStudio.order = krpOrder;\nroot.KRPressStudio.downscaleJpeg = krpDownscaleJpeg;\n})(typeof window !== 'undefined' ? window : globalThis);\n"],
  "mappings": "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",
  "names": ["cur", "ci", "pool", "ctx", "s"]
}
