.places-toggle { grid-template-columns: repeat(2, 1fr); max-width: 320px; margin-bottom: 18px; }
.places-map { height: min(62svh, 600px); min-height: 340px; width: 100%; border: 5px solid var(--paper); border-radius: 3px; box-shadow: var(--print-shadow); z-index: 0; background: var(--paper-2); color: var(--ink); font-family: var(--ui); }
.places-map-status { margin: 14px 0 8px; color: var(--on-wall-2); font-size: 14px; }
.map-key { display: flex; flex-wrap: wrap; gap: 16px; margin-bottom: 20px; font-size: 13px; }
.map-key span::before { content: ""; display: inline-block; width: 11px; height: 11px; border: 2px solid var(--paper); border-radius: 50%; margin-right: 6px; background: var(--pin-colour); }
.map-key .worth, .place-map-pin.worth { --pin-colour: var(--worth); }
.map-key .partly, .place-map-pin.partly { --pin-colour: var(--partly); }
.map-key .skip, .place-map-pin.skip { --pin-colour: var(--skip); }
.place-map-pin.unrated { --pin-colour: var(--wall); }
.place-map-pin { background: none; border: 0; }
.place-map-pin span { display: block; width: 28px; height: 28px; border-radius: 50% 50% 50% 3px; transform: rotate(-45deg); background: var(--pin-colour); border: 3px solid var(--paper); box-shadow: 0 3px 8px rgba(8, 14, 80, .34); }
.place-map-pin span::after { content: ""; position: absolute; width: 6px; height: 6px; background: var(--ink); border-radius: 50%; top: 8px; left: 8px; }
.places-map .leaflet-popup-content-wrapper { background: var(--paper); color: var(--ink); border-radius: 3px; box-shadow: var(--print-shadow); }
.places-map .leaflet-popup-content { font: 14px/1.45 var(--ui); overflow-wrap: anywhere; }
.place-map-print h3 { font: 700 20px/1.2 var(--hand); margin: 0 16px 6px 0; }
.place-map-print p { margin: 6px 0; }
.place-map-print .links { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 10px; }
.place-map-print a { color: var(--wall); padding: 6px 0; font-weight: 600; }
.map-verdict { font-weight: 700; }
.map-verdict.worth { color: var(--worth-ink); }
.map-verdict.partly { color: var(--partly-ink); }
.map-verdict.skip { color: var(--skip-ink); }
.places-map .leaflet-control-attribution { font-size: 11px; }
.places-map .leaflet-control-zoom a { color: var(--ink); min-width: 36px; height: 36px; line-height: 36px; }
@media (prefers-reduced-motion: reduce) {
  .places-map *, .places-map *::before, .places-map *::after { transition: none !important; animation: none !important; }
}
.places-tools { display: grid; gap: 10px; margin-bottom: 14px; }
.places-search { width: 100%; box-sizing: border-box; font: 16px var(--ui); padding: 11px 14px; border: 0; border-radius: 12px; background: rgba(255, 255, 255, .16); color: var(--on-wall, #fff); }
.places-search::placeholder { color: var(--on-wall-2); }
.places-filters { display: flex; gap: 8px; overflow-x: auto; scrollbar-width: none; padding-bottom: 2px; }
.places-filters .chip { flex: none; white-space: nowrap; }
.place-from { font-size: 13px; margin-top: 6px; color: var(--ink-3); overflow-wrap: anywhere; }
.place-from .ts { font-weight: 700; margin-right: 6px; }
.place-status { display: flex; gap: 6px; margin-top: 10px; }
.place-status .chip { min-height: 36px; padding: 0 12px; font-size: 13px; }
.place[data-status="skip"] { opacity: .6; }
.place .place-status .chip { background: #eef0ff; color: var(--wall, #2233d8); box-shadow: none; }
.place .place-status .chip[aria-pressed="true"] { background: var(--wall, #2233d8); color: #fff; }
.places-title { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.place .place-status .chip { min-height: 32px; padding: 0 11px; }
.place-status { margin-top: 8px; }
.place-from a { color: inherit; padding: 6px 0; display: inline-block; }

/* Map: full screen above the tab bar, with a list sheet that rests at peek, half or full height. */
.places-fs { position: fixed; inset: 0 0 calc(108px + var(--safe-b)) 0; z-index: 15; background: var(--paper-2); overscroll-behavior: none; }
.places-fs[hidden] { display: none; }
.places-fs .places-map { position: absolute; inset: 0; height: auto; min-height: 0; border: 0; border-radius: 0; box-shadow: none; }
.places-back { position: absolute; z-index: 500; left: 12px; top: calc(12px + env(safe-area-inset-top, 0px)); background: var(--paper); color: var(--ink); box-shadow: 0 3px 10px rgba(8, 14, 80, .3); }
.place-map-pin.try { --pin-colour: var(--wall); }
.place-map-pin.been { --pin-colour: var(--worth); }
.place-map-pin.skip { --pin-colour: #8d93a6; }
.place-cluster { background: none; }
.place-cluster span { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; background: var(--wall); color: #fff; border: 3px solid var(--paper); font: 800 15px var(--ui); box-shadow: 0 3px 8px rgba(8, 14, 80, .34); }
.places-sheet { position: absolute; z-index: 600; left: 0; right: 0; bottom: 0; height: 85%; background: var(--wall); color: #fff; border-radius: 20px 20px 0 0; box-shadow: 0 -6px 24px rgba(8, 14, 80, .3); display: flex; flex-direction: column; transition: transform var(--m-long) var(--m-sheet); will-change: transform; }
.places-sheet { --places-peek: 280px; }
.places-sheet[data-snap="peek"] { transform: translateY(max(0px, calc(100% - var(--places-peek)))); }
.places-sheet[data-snap="half"] { transform: translateY(45%); }
.places-sheet[data-snap="full"] { transform: translateY(0); }
.places-sheet.dragging { transition: none; }
.places-grab { align-self: stretch; height: 28px; border: 0; background: none; padding: 0; cursor: grab; touch-action: none; position: relative; }
.places-grab::after { content: ""; position: absolute; left: 50%; top: 12px; width: 40px; height: 4px; margin-left: -20px; border-radius: 2px; background: rgba(255, 255, 255, .55); }
.places-sheet h2 { margin: 0 16px; font: 800 20px/1.2 var(--ui); }
.places-sheet .places-map-status { margin: 2px 16px 10px; font-size: 13px; }
.places-sheet-list { flex: 1; overflow: hidden; padding: 0 12px calc(24px + var(--safe-b)); display: grid; gap: 10px; align-content: start; }
.places-sheet[data-snap="full"] .places-sheet-list { overflow-y: auto; overscroll-behavior: contain; }
.places-sheet[data-snap="half"] .places-sheet-list { overflow-y: auto; overscroll-behavior: contain; }
.place-row { background: var(--paper); color: var(--ink); border-radius: 3px; padding: 10px 12px 12px; }
.place-row.selected { outline: 3px solid var(--worth); }
.place-row[data-status="skip"] { opacity: .65; }
.place-row p { margin: 4px 0 0; font-size: 14px; }
.place-row-name { display: block; width: 100%; text-align: left; border: 0; background: none; padding: 4px 0; color: var(--ink); font: 700 17px/1.2 var(--hand); }
.place-row-name span { display: block; font: 400 13px var(--ui); color: var(--ink-3); margin-top: 2px; }
.places-empty { color: #fff; padding: 8px 4px; }
@media (prefers-reduced-motion: reduce) { .places-sheet { transition: none; } }
.place-row .place-status { margin-top: 8px; }
.place-row .place-status .chip { min-height: 32px; padding: 0 11px; background: #eef0ff; color: var(--wall, #2233d8); box-shadow: none; }
.place-row .place-status .chip[aria-pressed="true"] { background: var(--wall, #2233d8); color: #fff; }
.place-row .place-from a { color: inherit; padding: 6px 0; display: inline-block; }
.places-export summary { cursor: pointer; font-size: 14px; color: var(--on-wall-2); padding: 6px 0; list-style: none; }
.places-export summary::-webkit-details-marker { display: none; }
.places-export[open] { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
