.mobile-tabbar { grid-template-columns:repeat(4,minmax(0,1fr)); }
.app-view-panel[hidden] { display:none !important; }
body:not(.has-mobile-shell) .mobile-tabbar { display:grid; position:relative; inset:auto; width:min(1180px,calc(100% - 40px)); margin:0 auto 18px; padding:0; border-top:0; border-bottom:1px solid var(--navy); background:transparent; box-shadow:none; backdrop-filter:none; }
body:not(.has-mobile-shell) .mobile-tabbar button { min-height:48px; border-top:0; border-bottom:3px solid transparent; font-size:14px; }
body:not(.has-mobile-shell) .mobile-tabbar button.is-active { border-bottom-color:var(--brick); }
body:not(.has-mobile-shell) .contacts-view-panel:not([hidden]) { display:block; width:min(700px,calc(100% - 40px)); margin:0 auto; padding:18px 0 48px; }
.calendar-visual { position:relative; }
.is-map-view #month-calendar { visibility:hidden; pointer-events:none; }
.city-map-panel { position:absolute; inset:0; z-index:2; isolation:isolate; border:1px solid var(--navy); border-top:0; background:var(--paper-light); }
.city-map-panel[hidden], .city-map-panel [hidden] { display:none !important; }
.city-map { height:100%; width:100%; background:#f3ecdc; font-family:var(--font-sans); }
.city-map.is-raster-map .leaflet-tile-pane { filter:grayscale(1) sepia(.25) contrast(.85) brightness(1.05); }
.city-map:focus-visible { outline:3px solid var(--brick); outline-offset:-3px; }
.city-map .leaflet-control-zoom { border:1px solid var(--navy); box-shadow:0 2px 6px rgba(16,40,59,.12); border-radius:5px; overflow:hidden; }
.city-map .leaflet-control-zoom a { width:40px; height:40px; line-height:40px; background:var(--paper-light); color:var(--navy); }
.city-map .leaflet-control-zoom a.leaflet-disabled { color:var(--muted); background:#eeeadd; }
.city-map .leaflet-control-attribution { font-size:10px; background:rgba(251,247,237,.94); color:var(--navy); }
.city-map .leaflet-control-attribution a { color:var(--navy); }
.map-reset { position:absolute; top:10px; right:10px; z-index:800; display:grid; place-items:center; width:42px; height:42px; padding:9px; border:1px solid var(--navy); border-radius:5px; background:var(--paper-light); color:var(--navy); box-shadow:0 2px 6px rgba(16,40,59,.12); cursor:pointer; }
.map-reset svg { width:22px; height:22px; fill:none; stroke:currentColor; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; }
.city-map > .leaflet-popup-pane { z-index:1200; }
.map-status { position:absolute; inset:auto 12px 90px; z-index:800; margin:0; padding:12px 14px; background:var(--paper-light); border:1px solid var(--line); border-radius:5px; color:var(--navy); font-size:13px; line-height:1.5; }
.map-status button { display:block; min-height:36px; margin-top:6px; border:0; padding:4px 0; background:transparent; color:var(--brick); font:600 13px var(--font-sans); cursor:pointer; }
.map-event-summary { position:absolute; bottom:24px; left:10px; right:10px; z-index:800; display:flex; align-items:center; gap:8px; width:fit-content; max-width:calc(100% - 20px); margin:0; padding:4px 5px 4px 9px; background:rgba(251,247,237,.96); border:1px solid var(--line); border-radius:4px; color:var(--navy); font-size:11px; line-height:1.45; }
.map-summary-close { flex:none; display:grid; place-items:center; width:28px; height:28px; padding:0; border:0; border-radius:3px; background:transparent; color:var(--muted); font:400 21px/1 var(--font-sans); cursor:pointer; }
.map-summary-close:hover, .map-summary-close:focus-visible { background:var(--paper); color:var(--navy); }
.map-event-marker, .map-category-swatch, .map-event-link { --map-event-color:var(--blue); }
.map-event-marker { background:transparent; border:0; isolation:isolate; }
:is(.map-event-marker,.map-category-swatch,.map-event-link).category-music { --map-event-color:#3f657c; }
:is(.map-event-marker,.map-category-swatch,.map-event-link).category-theatre { --map-event-color:var(--brick); }
:is(.map-event-marker,.map-category-swatch,.map-event-link).category-cinema { --map-event-color:#5b5274; }
:is(.map-event-marker,.map-category-swatch,.map-event-link).category-exhibitions { --map-event-color:#9a663e; }
:is(.map-event-marker,.map-category-swatch,.map-event-link).category-education { --map-event-color:#55705b; }
:is(.map-event-marker,.map-category-swatch,.map-event-link).category-city { --map-event-color:#36706d; }
:is(.map-event-marker,.map-category-swatch,.map-event-link).category-gastro { --map-event-color:var(--ochre); }
:is(.map-event-marker,.map-category-swatch,.map-event-link).category-sports { --map-event-color:#6b5a86; }
.map-category-swatch { stop-color:var(--map-event-color); }
.map-event-pin { position:absolute; inset:0; display:block; filter:drop-shadow(0 2px 2px rgba(16,40,59,.22)); }
.map-event-pin svg { width:28px; height:30px; overflow:visible; }
.map-event-pin path { fill:var(--map-event-color); stroke:var(--paper-light); stroke-width:2; }
.map-event-pin circle { fill:var(--paper-light); }
.map-event-count { fill:var(--paper-light); font:700 11px var(--font-sans); }
.map-event-marker.is-selected .map-event-pin path { stroke:var(--navy); stroke-width:3; }
.map-event-marker:focus-visible { outline:3px solid var(--navy); outline-offset:3px; }
.city-map .leaflet-popup-content-wrapper, .city-map .leaflet-popup-tip { background:var(--paper-light); color:var(--navy); }
.map-events-popup { font:400 13px/1.4 var(--font-sans); }
.map-events-popup strong { display:block; margin-bottom:8px; font-size:14px; }
.map-events-popup .map-event-link { display:block; margin:8px 0; padding:5px 8px; border-left:3px solid var(--map-event-color); color:var(--navy); text-decoration:none; }
.map-events-popup .map-event-link:is(.is-focused-event,:focus) { background:#e9e2d3; outline:none; }
.map-events-popup .map-event-link:hover { color:var(--brick); }
.map-event-link small { display:block; margin-top:4px; color:var(--muted); font-size:11px; }
.map-locate { position:absolute; left:10px; top:104px; z-index:800; display:grid; place-items:center; width:42px; height:42px; padding:9px; border:1px solid var(--navy); border-radius:5px; background:var(--paper-light); color:var(--navy); box-shadow:0 2px 6px rgba(16,40,59,.12); cursor:pointer; }
.map-locate svg, .agenda-show-on-map svg { width:22px; height:22px; fill:none; stroke:currentColor; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; }
.map-locate.is-located { background:var(--navy); color:var(--paper-light); }
.map-locate:disabled { cursor:wait; opacity:.6; }
.map-location-status { position:absolute; top:60px; right:10px; z-index:800; display:flex; gap:6px; align-items:start; max-width:min(310px,calc(100% - 74px)); padding:10px 8px 10px 12px; background:var(--paper-light); border:1px solid var(--line); border-radius:5px; color:var(--navy); font-size:12px; line-height:1.5; box-shadow:0 2px 6px rgba(16,40,59,.12); }
.map-location-status button { flex:none; width:28px; height:28px; border:0; padding:0; background:transparent; color:var(--navy); font-size:22px; cursor:pointer; }
.map-user-location { display:grid; place-items:center; background:transparent; }
.map-user-location span { display:block; width:16px; height:16px; border:3px solid white; border-radius:50%; background:#3f657c; box-shadow:0 0 0 6px rgba(63,101,124,.17),0 1px 5px rgba(16,40,59,.3); }
.agenda-show-on-map { display:none; }
.is-map-view .calendar-day-agenda-event { grid-template-columns:118px minmax(0,1fr) 40px; gap:12px; }
.is-map-view .agenda-show-on-map { display:grid; place-items:center; width:40px; height:44px; padding:8px; border:1px solid var(--line); border-radius:5px; background:transparent; color:var(--brick); cursor:pointer; }
.is-map-view .agenda-show-on-map:hover { border-color:var(--brick); background:var(--paper-light); }
.is-map-view .agenda-show-on-map:disabled { opacity:.3; cursor:default; border-color:transparent; }
.is-map-view.has-mobile-shell .calendar-day-agenda-event { grid-template-columns:46px minmax(0,1fr) 36px; gap:6px; }
.is-map-view.has-mobile-shell .agenda-show-on-map { width:36px; padding:6px; }
