:root{
  --ink:#22251f; --muted:#6b6f66; --paper:#faf7f0; --card:#ffffff;
  --accent:#b4552d; --accent-soft:#f3e3d7; --line:#e5ddcd;
  --chip:#efe9db; --shadow:0 1px 3px rgba(34,37,31,.12),0 4px 14px rgba(34,37,31,.06);
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;font-family:ui-rounded,"Segoe UI",system-ui,-apple-system,Roboto,"Helvetica Neue",Arial,sans-serif;background:var(--paper);color:var(--ink);display:flex;flex-direction:column}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.topbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.6rem 1rem;background:var(--ink);color:#f5efe2}
.brand{display:flex;align-items:center;gap:.7rem;min-width:0}
.brand-die{font-size:1.9rem;line-height:1}
.topbar h1{margin:0;font-size:1.35rem;letter-spacing:.02em}
.tagline{margin:.05rem 0 0;font-size:.8rem;color:#cfc7b2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.count{font-size:.85rem;color:#e8dfc9;white-space:nowrap}
.layout{flex:1;display:grid;grid-template-columns:420px 1fr;min-height:0}
.panel{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--line);background:var(--paper)}
.controls{flex:none;padding:.8rem .9rem .4rem;border-bottom:1px solid var(--line)}
.search input{width:100%;padding:.6rem .8rem;font-size:1rem;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--ink)}
.search input:focus{outline:2px solid var(--accent);outline-offset:1px}
.chips{display:flex;flex-wrap:wrap;gap:.4rem;margin:.65rem 0 .2rem}
.chip{border:1px solid var(--line);background:var(--chip);color:var(--ink);padding:.32rem .65rem;border-radius:999px;font-size:.82rem;cursor:pointer}
.chip[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:#fff}
.row-controls{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem;margin:.55rem 0 .5rem;font-size:.88rem}
.row-controls select{padding:.35rem .5rem;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);max-width:170px}
.check{display:flex;align-items:center;gap:.35rem;cursor:pointer}
.ghost{border:1px solid var(--line);background:#fff;border-radius:8px;padding:.35rem .6rem;cursor:pointer;color:var(--ink)}
.ghost:hover{border-color:var(--accent)}
.results{flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding:.7rem .9rem;display:flex;flex-direction:column;gap:.7rem}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:.75rem .85rem;box-shadow:var(--shadow);cursor:pointer}
.card:hover{border-color:var(--accent)}
.card.active{border-color:var(--accent);outline:2px solid var(--accent-soft)}
.card-head{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem}
.card-name{margin:0;font-size:1.02rem}
.card-rating{font-size:.85rem;color:#8a6d00;white-space:nowrap}
.card-meta{margin:.25rem 0 .45rem;font-size:.84rem;color:var(--muted)}
.card-tags{display:flex;flex-wrap:wrap;gap:.3rem;margin-bottom:.45rem}
.tag{font-size:.72rem;background:var(--accent-soft);color:#7c3a1c;border-radius:999px;padding:.14rem .5rem;text-transform:capitalize}
.card-high,.card-events,.card-hours{margin:.3rem 0;font-size:.86rem;line-height:1.35}
.card-events{border-left:3px solid var(--accent);padding-left:.5rem}
.card-events b{color:var(--accent)}
.card-hours{color:var(--muted);font-size:.8rem}
.card-actions{display:flex;gap:.45rem;margin-top:.55rem;flex-wrap:wrap}
.btn{font-size:.82rem;text-decoration:none;border:1px solid var(--line);border-radius:8px;padding:.35rem .6rem;color:var(--ink);background:#fff}
.btn.directions{background:var(--accent);border-color:var(--accent);color:#fff}
.btn[hidden]{display:none}
.empty{color:var(--muted);text-align:center;padding:2rem 1rem;font-size:.95rem}
.panel-footer{flex:none;padding:.55rem .9rem;border-top:1px solid var(--line)}
.panel-footer p{margin:0;font-size:.74rem;color:var(--muted);line-height:1.4}
.map-wrap{position:relative;min-height:0}
#map{position:absolute;inset:0}
.leaflet-popup-content{font-family:inherit;font-size:.88rem;line-height:1.4}
.leaflet-popup-content h4{margin:.1rem 0 .3rem;font-size:.98rem}
.leaflet-popup-content .pop-addr{color:var(--muted)}
.leaflet-popup-content a{color:var(--accent)}
@media (max-width:860px){
  html,body{height:auto}
  body{display:block}
  .topbar{position:sticky;top:0;z-index:1100}
  .layout{display:flex;flex-direction:column;min-height:0}
  .map-wrap{order:1;height:46vh;min-height:280px;flex:none}
  .panel{order:2;display:block;min-height:0;border-right:none;border-top:1px solid var(--line)}
  .results{overflow:visible}
  .tagline{display:none}
}
/* store detail view */
body.no-scroll{overflow:hidden}
.card-dist{color:var(--accent);font-weight:600;white-space:nowrap}
.card-more{margin-left:auto;align-self:center;font-size:.8rem;font-weight:600;color:var(--accent);white-space:nowrap}
.pop-actions{margin-top:.45rem}
.pop-details{border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:8px;padding:.32rem .6rem;font-size:.82rem;cursor:pointer}
.detail-backdrop{position:fixed;inset:0;background:rgba(22,22,17,.5);opacity:0;transition:opacity .25s ease;z-index:1500}
.detail-backdrop.open{opacity:1}
.detail-backdrop[hidden],.detail[hidden]{display:none}
.detail{position:fixed;top:0;right:0;height:100dvh;width:min(470px,100vw);background:var(--paper);z-index:1600;transform:translateX(105%);transition:transform .28s ease;display:flex;flex-direction:column;box-shadow:-10px 0 34px rgba(0,0,0,.28)}
.detail.open{transform:none}
.detail-close{position:absolute;top:.6rem;right:.6rem;z-index:3;width:2.2rem;height:2.2rem;border-radius:50%;border:1px solid var(--line);background:#fff;color:var(--ink);font-size:.95rem;cursor:pointer;box-shadow:var(--shadow)}
.detail-scroll{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.d-hero{display:flex;gap:.85rem;padding:1.15rem 1rem 1rem;background:linear-gradient(135deg,#26231d,#4c3a28);color:#f5efe2}
.d-hero-icon{font-size:2.5rem;line-height:1.1}
.d-hero-main{min-width:0}
.d-hero h2{margin:.05rem 0 .2rem;font-size:1.4rem;padding-right:2.1rem;line-height:1.2}
.d-sub{margin:0 0 .5rem;font-size:.88rem;color:#d9cfb6}
.d-hero .tag{background:rgba(245,239,226,.16);color:#f0e6cd}
.photo-cta{display:flex;gap:.7rem;align-items:center;margin:.9rem 1rem 0;padding:.7rem .8rem;background:#fff;border:1.5px dashed var(--accent);border-radius:12px;color:var(--ink);text-decoration:none}
.photo-cta:hover{background:var(--accent-soft)}
.photo-cta-icon{font-size:1.5rem}
.photo-cta small{display:block;color:var(--muted);font-size:.78rem;margin-top:.1rem;line-height:1.35}
.d-sec{padding:.95rem 1rem 0}
.d-sec h3{margin:0 0 .45rem;font-size:.82rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--accent)}
.d-line{margin:.3rem 0;font-size:.92rem;line-height:1.45}
.d-line a{color:var(--accent)}
.d-note{font-size:.8rem;color:var(--muted)}
.hours-list{list-style:none;margin:.35rem 0 0;padding:0;font-size:.9rem}
.hours-list li{padding:.22rem 0;border-bottom:1px dotted var(--line)}
.hours-list li.today{font-weight:700;color:var(--ink)}
.hours-list li.today::after{content:" · today";color:var(--accent);font-size:.78rem}
.d-events{margin:.2rem 0;font-size:.92rem;line-height:1.5;background:#fff;border-left:3px solid var(--accent);border-radius:0 10px 10px 0;padding:.55rem .7rem}
.d-showmap{margin-top:.6rem;cursor:pointer}
.d-nearby{display:flex;flex-direction:column;gap:.45rem}
.d-nearby-btn{display:flex;justify-content:space-between;align-items:baseline;gap:.6rem;text-align:left;background:#fff;border:1px solid var(--line);border-radius:10px;padding:.55rem .7rem;font-size:.92rem;color:var(--ink);cursor:pointer;box-shadow:var(--shadow)}
.d-nearby-btn:hover{border-color:var(--accent)}
.d-nearby-meta{font-size:.8rem;color:var(--muted);white-space:nowrap}
.d-verified{padding:.9rem 1rem 0;font-size:.76rem;color:var(--muted)}
.d-actions{position:sticky;bottom:0;display:flex;gap:.45rem;padding:.7rem 1rem calc(.7rem + env(safe-area-inset-bottom));background:var(--paper);border-top:1px solid var(--line);margin-top:1rem}
.d-actions .btn{flex:1;text-align:center;padding:.5rem .4rem;cursor:pointer}
@media (max-width:860px){
  .detail{top:auto;bottom:0;left:0;right:0;width:auto;height:auto;max-height:92dvh;border-radius:18px 18px 0 0;transform:translateY(105%);box-shadow:0 -10px 34px rgba(0,0,0,.28)}
  .detail.open{transform:none}
}
/* phase 2: open status, parsed events, feature chips */
.card-status{margin:.05rem 0 .35rem;font-size:.8rem;font-weight:600}
.card-status.open{color:#1e7a34}
.card-status.soon{color:#a86e00}
.card-status.closed{color:var(--muted);font-weight:500}
.chip.feature{background:#e8e2d2}
.chip.feature[aria-pressed="true"]{background:#4c5b43;border-color:#4c5b43;color:#fff}
.tag.feature{background:#e3e8da;color:#3d4a33;text-transform:none}
.d-status.open{color:#9be29b}
.d-status.soon{color:#ffd27a}
.d-status.closed{color:#cfc7b2}
.d-features{margin-top:.45rem}
.d-events-list{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}
/* phase 3: meeple colors, favorites, crawl, passport, fix form */
.meeple-stripe{display:flex;height:6px}
.meeple-stripe i{flex:1}
.meeple-marker{background:none;border:none}
.meeple-marker svg{display:block;filter:drop-shadow(0 2px 2px rgba(0,0,0,.35))}
.marker-cluster-small{background-color:rgba(242,183,5,.45)}
.marker-cluster-small div{background-color:rgba(242,183,5,.85);color:#4a3800}
.marker-cluster-medium{background-color:rgba(240,127,19,.45)}
.marker-cluster-medium div{background-color:rgba(240,127,19,.85);color:#fff}
.marker-cluster-large{background-color:rgba(226,72,61,.45)}
.marker-cluster-large div{background-color:rgba(226,72,61,.88);color:#fff}
.marker-cluster div{font-weight:700}
.chip-dot{display:inline-block;width:.55rem;height:.55rem;border-radius:50%;margin-right:.35rem}
.btn.fav{font-size:1.02rem;line-height:1;padding:.32rem .55rem;color:var(--muted)}
.btn.fav.on{color:#d43a2f;border-color:#d43a2f;background:#fdecea}
.visited-badge{font-size:.7rem;font-weight:700;background:#e8f5ea;color:#1d5229;border:1px solid rgba(61,153,80,.4);border-radius:999px;padding:.12rem .45rem;white-space:nowrap}
.d-visit-btns{display:flex;gap:.45rem;margin-top:.65rem;flex-wrap:wrap}
.d-visit-btns .btn{cursor:pointer}
.d-visit.on{background:#e8f5ea;border-color:#3d9950;color:#1d5229;font-weight:700}
.d-fix{margin:.7rem 1rem 1.1rem;cursor:pointer}
.panel-page{padding-bottom:1.2rem}
.crawl-stop{display:flex;gap:.7rem;align-items:flex-start;padding:.55rem 0;border-bottom:1px dotted var(--line)}
.crawl-num{flex:none;width:1.6rem;height:1.6rem;border-radius:50%;color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center;font-size:.85rem;margin-top:.1rem}
.crawl-meta{font-size:.8rem;color:var(--muted)}
.crawl-open{display:block;text-align:center;margin-top:.9rem;padding:.6rem .4rem}
.passport-big{font-size:1.15rem}
.pbar{height:9px;background:#e9e2d0;border-radius:99px;overflow:hidden;margin:.35rem 0 .6rem}
.pbar>i{display:block;height:100%;background:linear-gradient(90deg,#e2483d,#f07f13,#f2b705,#3d9950,#2470c2,#7d4fc9);border-radius:99px}
.pbar.city{height:6px;margin:0 0 .45rem}
.pbar.city>i{background:var(--accent)}
.prow{display:flex;justify-content:space-between;font-size:.88rem;padding:.25rem 0 .1rem}
.passport-cities{margin-top:1rem}
.fix-label{display:block;font-size:.85rem;font-weight:600;margin-top:.75rem}
.fix-label input,.fix-label textarea{display:block;width:100%;margin-top:.3rem;padding:.55rem .7rem;border:1px solid var(--line);border-radius:10px;font:inherit;font-weight:400;background:#fff;color:var(--ink)}
.fix-submit{width:100%;margin-top:.85rem;padding:.55rem;cursor:pointer}
.fix-status{font-size:.88rem;color:#1e7a34;min-height:1.2em}
/* phase 3.5: traditional meeple, d20 menu, toolbelt, modern polish */
body{font-family:"Nunito",ui-rounded,"Segoe UI",system-ui,-apple-system,Roboto,"Helvetica Neue",Arial,sans-serif}
h1,h2,h3,.card-name{font-family:"Nunito",ui-rounded,system-ui,sans-serif}
.topbar h1{font-weight:900;letter-spacing:.01em}
.topbar{box-shadow:0 2px 12px rgba(20,20,16,.25)}
.brand{position:relative}
.brand-btn{background:none;border:none;padding:2px;cursor:pointer;display:flex;align-items:center;border-radius:12px;transition:transform .18s ease}
.brand-btn svg{width:37px;height:44px;filter:drop-shadow(0 2px 3px rgba(0,0,0,.35))}
.brand-btn:hover{transform:scale(1.07)}
.brand-btn:focus-visible{outline:2px solid #f2b705;outline-offset:2px}
.brand-menu{position:absolute;top:calc(100% + 10px);left:0;background:#fff;color:var(--ink);border:1px solid var(--line);border-radius:16px;box-shadow:0 16px 40px rgba(20,20,16,.28);padding:.4rem;min-width:238px;z-index:1300;display:flex;flex-direction:column}
.brand-menu[hidden]{display:none}
.brand-menu button{display:flex;align-items:center;gap:.55rem;text-align:left;background:none;border:none;padding:.58rem .65rem;border-radius:10px;font:inherit;font-weight:800;font-size:.94rem;color:var(--ink);cursor:pointer}
.brand-menu button:hover{background:var(--accent-soft)}
.brand-menu button.on::after{content:"✓ on";margin-left:auto;font-size:.76rem;color:var(--accent)}
.brand-menu-note{font-size:.74rem;color:var(--muted);line-height:1.4;padding:.5rem .65rem .35rem;border-top:1px dotted var(--line);margin-top:.3rem}
.toolbelt{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.7rem}
.tool-btn,.tool-pill span{display:inline-flex;align-items:center;gap:.3rem;background:#fff;border:1.5px solid var(--line);border-radius:999px;padding:.44rem .85rem;font:inherit;font-weight:800;font-size:.87rem;color:var(--ink);cursor:pointer;box-shadow:var(--shadow);transition:transform .13s ease,border-color .13s ease,background .13s ease}
.tool-btn:hover,.tool-pill:hover span{transform:translateY(-1px);border-color:var(--accent)}
.tool-pill{position:relative;display:inline-flex}
.tool-pill input{position:absolute;opacity:0;pointer-events:none}
.tool-pill input:checked + span{background:#fdecea;border-color:#d43a2f;color:#b02a20}
.tool-pill input:focus-visible + span{outline:2px solid var(--accent);outline-offset:2px}
.quick-tools{flex:none;display:flex;align-items:center;flex-wrap:wrap;gap:.2rem;padding:.55rem .9rem .1rem;font-size:.8rem;color:var(--muted)}
.quick-tools button{background:none;border:none;color:var(--accent);font:inherit;font-weight:800;font-size:.8rem;cursor:pointer;padding:.15rem .25rem;border-radius:6px}
.quick-tools button:hover{background:var(--accent-soft)}
.quick-tools button.on{text-decoration:underline}
.controls{background:rgba(255,255,255,.55)}
.search input{border-radius:999px;padding:.62rem 1rem;font-weight:600}
.chip{font-weight:700;transition:background .13s ease,color .13s ease,border-color .13s ease}
.card{border-radius:18px;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease}
.card:hover{transform:translateY(-2px);box-shadow:0 4px 8px rgba(34,37,31,.10),0 10px 24px rgba(34,37,31,.10)}
.btn{border-radius:10px;font-weight:700;transition:border-color .13s ease,background .13s ease}
.btn:hover{border-color:var(--accent)}
.ghost{font-weight:700}
.d-hero h2{font-weight:900}
.detail{box-shadow:-14px 0 44px rgba(0,0,0,.30)}
:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.d-event{padding:.5rem .7rem;border-bottom:1px dotted var(--line);font-size:.9rem;line-height:1.45}
.d-event:last-child{border-bottom:none}
.d-event.today{background:#fdf3e3;box-shadow:inset 3px 0 0 var(--accent)}
.d-ev-meta{font-size:.76rem;color:var(--muted);margin-top:.15rem}

.passport-mascot{display:block;width:132px;margin:4px auto 2px}
.browse-nav{padding:.7rem .9rem;border-top:1px solid var(--line);background:#fff}
.browse-nav p{margin:.25rem 0;font-size:.86rem;line-height:1.7}
.browse-nav .browse-title{font-weight:900;font-size:.8rem;text-transform:uppercase;letter-spacing:.6px;color:var(--muted)}
.browse-nav a{color:#2470c2;text-decoration:none;font-weight:700}
.browse-nav a:hover{text-decoration:underline}
.d-claim{display:block;margin:0 1rem 1.1rem;padding:.55rem .8rem;background:var(--accent-soft);border:1px dashed var(--accent);border-radius:12px;color:var(--ink);text-decoration:none;font-weight:800;font-size:.92rem;text-align:center}
.d-claim:hover{background:#ffe1de}
.d-claimed{font-weight:900;color:#ffe9a8}
