:root{--bg:#f4f5f7;--panel:#fff;--text:#1f2937;--muted:#6b7280;--stroke:#d9dee5;--pin:#374151}*{box-sizing:border-box}body,html{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:Manrope,Segoe UI,Tahoma,sans-serif}.app-shell{height:100%}.app-main{height:100dvh}.map-wrap{--overlay-offset-x:12px;--overlay-offset-y:12px;--overlay-gap:8px;--sidebar-width:min(320px,calc(100% - 24px));--fab-reserved-width:106px;--overlay-motion:0.24s cubic-bezier(0.22,1,0.36,1);height:100%;overflow:visible;position:relative}#map{inset:0}#map,.map-fab{position:absolute}.map-fab{background:hsla(0,0%,100%,.96);border:1px solid var(--stroke);border-radius:999px;box-shadow:0 8px 18px rgba(15,23,42,.14);color:#111827;font-size:.82rem;font-weight:700;left:var(--overlay-offset-x);letter-spacing:.01em;min-width:86px;padding:.42rem .72rem;top:calc(var(--overlay-offset-y) + 9px);transition:transform var(--overlay-motion),box-shadow .2s ease,opacity var(--overlay-motion);z-index:520}.map-fab:before{content:"☰";margin-right:.35rem}.map-fab:focus-visible,.map-fab:hover{box-shadow:0 10px 22px rgba(15,23,42,.18);outline:none;transform:translateY(-1px)}.map-fab[aria-expanded=true]{opacity:0;pointer-events:none;transform:translateY(-4px)}.filter-dock{left:calc(var(--overlay-offset-x) + var(--sidebar-width) + var(--overlay-gap));overflow:visible;position:absolute;right:var(--overlay-offset-x);top:var(--overlay-offset-y);transition:transform var(--overlay-motion),opacity var(--overlay-motion);z-index:515}.hover-sidebar.is-collapsed+.filter-dock{transform:translateX(calc((var(--sidebar-width) + var(--overlay-gap) - var(--fab-reserved-width))*-1))}.filter-dock-row{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;gap:.45rem;overflow-x:auto;overflow-y:visible;padding:.18rem .12rem .22rem;scrollbar-color:rgba(130,144,163,.62) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;touch-action:pan-x}.filter-dock-row::-webkit-scrollbar{height:7px}.filter-dock-row::-webkit-scrollbar-track{background:transparent}.filter-dock-row::-webkit-scrollbar-thumb{background:rgba(130,144,163,.58);border-radius:999px}.filter-btn{align-items:center;backdrop-filter:blur(4px) saturate(128%);-webkit-backdrop-filter:blur(4px) saturate(128%);background:hsla(0,0%,100%,.62);border:1px solid var(--category-color,var(--stroke));border-radius:999px;box-shadow:0 6px 14px rgba(15,23,42,.13);color:#111827;cursor:pointer;display:inline-flex;flex:0 0 auto;font-size:.8rem;font-weight:700;gap:.36rem;justify-content:center;line-height:1.25;max-width:150px;min-height:36px;min-width:108px;overflow:hidden;padding:.5rem .72rem;position:relative;text-align:center;text-overflow:ellipsis;transition:transform .16s ease,box-shadow .16s ease,background-color .16s ease,border-color .16s ease,color .16s ease;white-space:nowrap}.filter-btn-icon{flex:0 0 auto;line-height:1}.filter-btn-label{min-width:0;overflow:hidden;text-overflow:ellipsis}.filter-btn:after{background:var(--category-color,var(--stroke));border-radius:999px;bottom:.24rem;content:"";height:2px;left:.62rem;opacity:0;pointer-events:none;position:absolute;right:.62rem;transform:scaleX(.45);transition:transform .16s ease,opacity .16s ease}.filter-btn:focus-visible,.filter-btn:hover{background:hsla(0,0%,100%,.72);border-color:var(--category-color,rgba(100,116,139,.8));box-shadow:0 8px 18px rgba(15,23,42,.16);outline:none;transform:translateY(-1px)}.filter-btn.filter-btn-active{background:linear-gradient(132deg,hsla(0,0%,100%,.96),hsla(0,0%,100%,.76)),var(--category-color,#b4c4d9);border-color:var(--category-color,#b4c4d9);box-shadow:0 0 0 2px hsla(0,0%,100%,.82),0 0 0 4px rgba(15,23,42,.08),0 10px 22px rgba(15,23,42,.2);color:#0f172a;transform:translateY(-1px)}.filter-btn.filter-btn-active:after{background:var(--category-color,#b4c4d9);opacity:1;transform:scaleX(1)}.leaflet-bottom.leaflet-right{margin:0 10px 10px 0}.leaflet-control-zoom{border:0!important;border-radius:12px!important;box-shadow:0 8px 18px rgba(15,23,42,.14)!important;overflow:hidden}.leaflet-control-zoom a{background:hsla(0,0%,100%,.97)!important;border:0!important;border-bottom:1px solid #e5e7eb!important;color:#111827!important;height:34px!important;line-height:32px!important;transition:background-color .18s ease,color .18s ease!important;width:34px!important}.leaflet-control-zoom a:last-child{border-bottom:0!important}.leaflet-control-zoom a:hover{background:#f3f6fa!important}.leaflet-touch .leaflet-control-zoom a{height:38px!important;line-height:36px!important;width:38px!important}@media (min-width:901px){.leaflet-control-attribution{backdrop-filter:none;-webkit-backdrop-filter:none;background:transparent!important;border:0!important;border-radius:0;box-shadow:none!important;padding:0!important}.filter-dock{overflow-x:auto;overflow-y:visible;scrollbar-color:rgba(130,144,163,.62) transparent;scrollbar-width:thin}.filter-dock::-webkit-scrollbar{height:7px}.filter-dock::-webkit-scrollbar-track{background:transparent}.filter-dock::-webkit-scrollbar-thumb{background:rgba(130,144,163,.58);border-radius:999px}.filter-dock-row{min-width:100%;overflow:visible;padding:.44rem .14rem .58rem;width:-moz-max-content;width:max-content}.filter-btn{box-shadow:0 4px 10px rgba(15,23,42,.12);margin-block:0}.filter-btn:focus-visible,.filter-btn:hover{box-shadow:0 5px 12px rgba(15,23,42,.14)}.filter-btn.filter-btn-active{box-shadow:0 0 0 2px hsla(0,0%,100%,.82),0 0 0 4px rgba(15,23,42,.08),0 6px 14px rgba(15,23,42,.18)}}.hover-sidebar{backdrop-filter:none;-webkit-backdrop-filter:none;background:transparent;border:0;border-radius:14px;box-shadow:none;display:flex;flex-direction:column;left:var(--overlay-offset-x);max-height:calc(100% - 24px);min-height:0;overflow:hidden;position:absolute;top:var(--overlay-offset-y);transition:transform var(--overlay-motion),opacity var(--overlay-motion),box-shadow .2s ease;width:var(--sidebar-width);will-change:transform,opacity;z-index:510}.hover-sidebar:before{content:none}.hover-sidebar.is-collapsed{opacity:0;pointer-events:none;transform:translateX(-108%)}.hover-sidebar-header{align-items:flex-start;background:hsla(0,0%,100%,.78);border:1px solid hsla(0,0%,100%,.74);border-radius:12px;box-shadow:0 8px 20px rgba(15,23,42,.08);cursor:pointer;display:flex;gap:.5rem;justify-content:space-between;padding:.72rem .72rem .9rem;position:relative;text-align:left;transition:transform .16s ease,opacity .16s ease;width:100%;z-index:1}.hover-sidebar-header:focus-visible,.hover-sidebar-header:hover{opacity:.98;outline:none;transform:translateY(-1px)}.hover-sidebar-heading-group{align-items:flex-start;display:flex;flex-direction:column}.hover-sidebar-title{box-shadow:none;font-size:1rem;font-weight:700}.hover-sidebar-count,.hover-sidebar-title{align-items:center;background:transparent;border:0;display:inline-flex;padding:0}.hover-sidebar-count{color:var(--muted);font-size:.82rem;margin:.36rem 0 0}.hover-sidebar-header-indicator{background:hsla(0,0%,100%,.72);border:1px solid rgba(217,222,229,.9);border-radius:999px;color:#4b5563;flex:0 0 auto;font-size:.76rem;font-weight:700;letter-spacing:.01em;line-height:1;padding:.27rem .56rem}.hover-sidebar-language{background:hsla(0,0%,100%,.72);border:1px solid rgba(226,232,240,.78);border-radius:10px;box-shadow:0 6px 14px rgba(15,23,42,.06);margin:.36rem .72rem .42rem;padding:.34rem .46rem;position:relative;z-index:1}.hover-sidebar-language.is-hidden{display:none}.guide-language-switch{border:0;display:flex;flex-wrap:wrap;gap:.5rem;margin:0;padding:0}.guide-language-option{align-items:center;color:#475569;cursor:pointer;display:inline-flex;font-size:.78rem;gap:.28rem;line-height:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.guide-language-option input{accent-color:#64748b;margin:0}.hover-sidebar-body{flex:1 1 auto;min-height:0;overflow-y:auto;padding:.42rem .82rem .9rem;position:relative;scrollbar-color:transparent transparent;scrollbar-gutter:stable;scrollbar-width:thin;transition:scrollbar-color .24s ease;z-index:1}.hover-sidebar-body.scrollbar-visible{scrollbar-color:rgba(132,145,163,.65) hsla(0,0%,100%,.08)}.hover-sidebar-body::-webkit-scrollbar{width:10px}.hover-sidebar-body::-webkit-scrollbar-track{background:hsla(0,0%,100%,0);border-radius:999px;-webkit-transition:background-color .24s ease;transition:background-color .24s ease}.hover-sidebar-body::-webkit-scrollbar-thumb{background:rgba(130,144,163,0);background-clip:content-box;border:2px solid hsla(0,0%,100%,0);border-radius:999px;-webkit-transition:background-color .24s ease,border-color .24s ease;transition:background-color .24s ease,border-color .24s ease}.hover-sidebar-body.scrollbar-visible::-webkit-scrollbar-track{background:hsla(0,0%,100%,.08)}.hover-sidebar-body.scrollbar-visible::-webkit-scrollbar-thumb{background:rgba(130,144,163,.8);border-color:hsla(0,0%,100%,.08)}.hover-sidebar-body::-webkit-scrollbar-thumb:hover{background:rgba(109,124,146,.92);background-clip:content-box}.restaurant-list{list-style:none;margin:0;padding:0 0 .28rem}.restaurant-list li+li{margin-top:.5rem}.restaurant-list li{animation:item-in .22s ease both}.restaurant-button{backdrop-filter:blur(8px) saturate(135%);-webkit-backdrop-filter:blur(8px) saturate(135%);background:hsla(0,0%,100%,.85);border:1px solid hsla(0,0%,100%,.62);border-radius:10px;cursor:pointer;overflow:hidden;padding:.66rem .72rem;position:relative;text-align:left;transition:border-color .18s ease,background-color .18s ease,transform .18s ease,box-shadow .18s ease;width:100%}.restaurant-button:focus-visible,.restaurant-button:hover{background:hsla(0,0%,100%,.9);border-color:rgba(228,235,245,.88);box-shadow:0 8px 16px rgba(15,23,42,.12);outline:none;transform:translateY(-1px)}.restaurant-button.restaurant-button-active{background:rgba(241,246,253,.95);border-color:rgba(192,206,225,.9);box-shadow:inset 0 0 0 1px rgba(197,210,227,.92),0 6px 14px rgba(15,23,42,.09)}@keyframes item-in{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}.restaurant-name{font-size:.91rem;font-weight:700;margin:0}.restaurant-button.restaurant-button-has-ribbon .restaurant-name{padding-right:6.6rem}.restaurant-special-ribbon{align-items:center;background:linear-gradient(140deg,rgba(254,243,199,.92),rgba(255,237,213,.96));border:1px solid rgba(245,158,11,.42);border-radius:999px;box-shadow:0 4px 10px rgba(245,158,11,.18);color:#9a3412;display:inline-flex;font-size:.61rem;font-weight:800;letter-spacing:.04em;line-height:1;padding:.14rem .5rem;pointer-events:none;position:absolute;right:.48rem;text-transform:uppercase;top:.46rem}.restaurant-rating{color:#d97706;font-size:.78rem;font-weight:700;letter-spacing:.02em;line-height:1;margin:.22rem 0 0}.restaurant-meta{align-items:center;color:var(--restaurant-accent,var(--muted));display:inline-flex;font-size:.8rem;font-weight:600;gap:.34rem;margin:.22rem 0 0}.restaurant-meta:before{background:var(--restaurant-accent,var(--muted));border-radius:999px;box-shadow:0 0 0 2px var(--restaurant-accent-soft,rgba(100,116,139,.24));content:"";flex:0 0 auto;height:.46rem;width:.46rem}.numbered-marker-wrap{background:transparent;border:0}.numbered-marker-row{gap:.38rem;max-width:232px;overflow:visible;position:relative}.numbered-marker,.numbered-marker-row{align-items:center;display:inline-flex}.numbered-marker{background:var(--marker-color,var(--pin));border:2px solid #fff;border-radius:999px;box-shadow:0 2px 8px rgba(0,0,0,.22);color:#fff;flex:0 0 auto;font-size:.72rem;font-weight:700;height:24px;justify-content:center;width:24px}.numbered-marker-label{backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);background:hsla(0,0%,100%,.88);border:1px solid rgba(203,213,225,.88);border-radius:9px;box-shadow:0 2px 8px rgba(15,23,42,.1);display:flex;flex-direction:column;gap:.06rem;min-width:0;padding:.22rem .42rem;position:relative;z-index:1}.numbered-marker-wrap[data-label-side=left] .numbered-marker-label{position:absolute;right:calc(100% + .38rem);top:50%;transform:translateY(-50%)}.numbered-marker-wrap[data-label-side=left] .numbered-marker-category,.numbered-marker-wrap[data-label-side=left] .numbered-marker-name{text-align:right}.numbered-marker-name{color:#0f172a;font-size:.69rem;font-weight:700;line-height:1.12}.numbered-marker-category,.numbered-marker-name{display:block;max-width:188px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.numbered-marker-category{color:#475569;font-size:.62rem;line-height:1.08}.status-message{background:hsla(0,0%,100%,.96);border:1px solid var(--stroke);border-radius:8px;color:#334155;font-size:.8rem;left:50%;max-width:min(92%,520px);padding:.5rem .66rem;position:absolute;top:12px;transform:translateX(-50%);z-index:530}.status-message.is-hidden{display:none}.status-message.error{background:#fff5f7;border-color:#f1b4be;color:#9f1239}.rating-stars-empty{color:#d6d3d1}.popup{max-width:280px}.popup h3{font-size:.98rem;margin:0 0 .4rem}.popup .popup-rating{color:#d97706;font-size:.82rem;font-weight:700;letter-spacing:.02em;line-height:1;margin:-.1rem 0 .35rem}.popup .popup-price{color:#0f766e;font-size:.8rem;font-weight:700;line-height:1.2;margin:-.05rem 0 .38rem}.popup .popup-comment,.popup .popup-meta{font-size:.88rem;margin:.3rem 0 .45rem}.popup .popup-meta{color:var(--muted)}.popup .popup-comment{white-space:pre-line}.popup .popup-comment-wrap{margin:.24rem 0 .4rem}.popup .popup-comment-wrap .popup-comment{margin:0}.popup .popup-map-link,.popup .popup-reservation-link{align-items:center;background:rgba(248,250,252,.9);border:1px solid rgba(15,23,42,.16);border-radius:999px;color:#1d4ed8;display:inline-flex;font-size:.8rem;font-weight:600;margin:.12rem 0 .38rem;padding:.2rem .52rem;text-decoration:none;transition:transform .16s ease,background-color .16s ease,border-color .16s ease}.popup .popup-map-link{background:rgba(241,245,249,.92);border-color:rgba(15,23,42,.22);color:#0f172a}.popup .popup-reservation-link{background:rgba(240,253,244,.9);border-color:rgba(22,101,52,.22);color:#166534}.popup .popup-map-link:hover,.popup .popup-reservation-link:hover{text-decoration:none;transform:translateY(-1px)}.popup .popup-map-link+.popup-reservation-link{margin-left:.28rem}.photo-wrap{margin-top:.45rem}.photo-stage{position:relative}.photo-stage img{border:1px solid #e5e7eb;border-radius:8px;display:block;height:140px;-o-object-fit:cover;object-fit:cover;opacity:1;transition:opacity .18s ease-in-out;width:100%}.photo-stage img.is-transitioning{opacity:.2}.photo-progress-track{background:rgba(71,85,105,.22);border-radius:999px;bottom:8px;height:3px;left:8px;overflow:hidden;pointer-events:none;position:absolute;right:8px}.photo-progress-track.is-hidden{opacity:0}.photo-progress-bar{background:rgba(100,116,139,.52);height:100%;transform:scaleX(0);transform-origin:left center;width:100%}.photo-controls{align-items:center;display:flex;justify-content:space-between;margin-top:.3rem}.photo-controls button{background:#fff;border:1px solid #e5e7eb;border-radius:7px;cursor:pointer;font-size:.78rem;padding:2px 8px}.photo-counter{color:var(--muted);font-size:.78rem}@media (max-width:900px){.map-wrap{--overlay-offset-x:8px;--overlay-offset-y:8px;--sidebar-width:min(360px,calc(100% - 16px))}.map-wrap.mobile-sheet-layout .map-fab{display:none}.map-wrap.mobile-sheet-layout .leaflet-top.leaflet-left{margin-left:8px;margin-top:8px}.map-wrap.mobile-sheet-layout .leaflet-control-attribution{backdrop-filter:none;-webkit-backdrop-filter:none;background:transparent!important;border:0!important;border-radius:0;box-shadow:none!important;font-size:.64rem;line-height:1.2;padding:0!important}.map-wrap.mobile-sheet-layout .hover-sidebar{backdrop-filter:blur(16px) saturate(138%);-webkit-backdrop-filter:blur(16px) saturate(138%);background:hsla(0,0%,100%,.52);border:1px solid hsla(0,0%,100%,.82);border-radius:16px;bottom:8px;box-shadow:0 14px 32px rgba(15,23,42,.18);height:clamp(var(--mobile-sheet-min-height,112px),var(--mobile-sheet-height,34dvh),var(--mobile-sheet-max-height,50dvh));left:8px;max-height:var(--mobile-sheet-max-height,50dvh);overflow:hidden;right:8px;top:auto;transition:height .16s ease,box-shadow .2s ease;width:auto}.map-wrap.mobile-sheet-layout .hover-sidebar,.map-wrap.mobile-sheet-layout .hover-sidebar.is-collapsed{opacity:1;pointer-events:auto;transform:translateX(0)}.map-wrap.mobile-sheet-layout .hover-sidebar.mobile-sheet-dragging{transition:none}.map-wrap.mobile-sheet-layout .hover-sidebar-header{background:hsla(0,0%,100%,.56);border:0;border-bottom:1px solid rgba(226,232,240,.86);border-radius:0;box-shadow:none;cursor:ns-resize;padding:.96rem .82rem .74rem;position:relative;touch-action:none;z-index:2}.map-wrap.mobile-sheet-layout .hover-sidebar-header:before{background:rgba(148,163,184,.85);border-radius:999px;content:"";height:4px;left:50%;position:absolute;top:.3rem;transform:translateX(-50%);width:42px}.map-wrap.mobile-sheet-layout .hover-sidebar-header-indicator{background:rgba(248,250,252,.86)}.map-wrap.mobile-sheet-layout .hover-sidebar-language{background:hsla(0,0%,100%,.56);border:0;border-bottom:1px solid rgba(226,232,240,.86);border-radius:0;box-shadow:none;margin:0;padding:.32rem .82rem .5rem;z-index:2}.map-wrap.mobile-sheet-layout .filter-dock{left:auto;max-width:none;overflow:visible;padding:.45rem .82rem .5rem;position:relative;right:auto;top:auto;transition:none;z-index:2}.map-wrap.mobile-sheet-layout .filter-dock-row{align-items:center;flex-wrap:nowrap;gap:.42rem;overflow-x:auto;overflow-y:visible;padding:.34rem .04rem .4rem;scrollbar-width:none;-webkit-overflow-scrolling:touch}.map-wrap.mobile-sheet-layout .filter-dock-row::-webkit-scrollbar{display:none}.map-wrap.mobile-sheet-layout .filter-btn{box-shadow:0 2px 6px rgba(15,23,42,.1);flex:0 0 auto;max-width:none;min-height:28px;min-width:-moz-max-content;min-width:max-content;padding:.24rem .62rem}.map-wrap.mobile-sheet-layout .filter-btn:focus-visible,.map-wrap.mobile-sheet-layout .filter-btn:hover{box-shadow:0 3px 8px rgba(15,23,42,.12)}.map-wrap.mobile-sheet-layout .filter-btn.filter-btn-active{box-shadow:0 0 0 1px hsla(0,0%,100%,.84),0 0 0 3px rgba(15,23,42,.08),0 4px 10px rgba(15,23,42,.16)}.map-wrap.mobile-sheet-layout .filter-btn:after{bottom:.16rem;left:.48rem;right:.48rem}.map-wrap.mobile-sheet-layout .hover-sidebar-body{padding:.4rem .82rem .92rem;transition:padding .2s ease}.status-message{left:8px;max-width:none;right:8px;top:8px;transform:none}}