:root{--bg:#faf7f2;--fg:#1f1a16;--muted:#6d6459;--panel:#fff;--panel-border:#1f1a161f;--accent:#f25c05;--shadow:0 2px 10px #1f1a162e}@media (prefers-color-scheme:dark){:root{--bg:#17130f;--fg:#f0e9e1;--muted:#a89c8e;--panel:#241e18;--panel-border:#f0e9e124;--shadow:0 2px 12px #0000008c}}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100dvh}body{background:var(--bg);color:var(--fg);-webkit-font-smoothing:antialiased;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.app-shell{flex-direction:column;height:100dvh;display:flex}.app-header{border-bottom:1px solid var(--panel-border);align-items:baseline;gap:.75rem;padding:.6rem 1rem;display:flex}.app-header h1{letter-spacing:-.01em;font-size:1.15rem;font-weight:700}.app-header p{color:var(--muted);font-size:.85rem}.view-stats{font-variant-numeric:tabular-nums}.app-header .build-info{white-space:nowrap;margin-left:auto;font-size:.72rem}.build-info a{color:inherit;text-underline-offset:2px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.build-info a:hover{color:var(--accent)}@media (max-width:560px){.build-info{display:none}}.app-main{flex:1;min-height:0}.map-wrap{height:100%;position:relative}.map-root,.map-wrap .leaflet-container{background:var(--bg);width:100%;height:100%}.map-placeholder{height:100%;color:var(--muted);place-items:center;font-size:.95rem;display:grid}.price-pin{box-shadow:var(--shadow);white-space:nowrap;cursor:pointer;border:2px solid #ffffffe6;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:700;line-height:1.3;position:absolute;transform:translate(-50%,-50%)}@media (prefers-color-scheme:dark){.price-pin{border-color:#17130fd9}}.price-pin--group{padding:5px 11px;font-size:13px}.price-pin-count{opacity:.72;margin-left:5px;font-weight:600}.leaflet-marker-icon:focus-visible{outline:none}.leaflet-marker-icon:focus-visible .price-pin{box-shadow:0 0 0 3px var(--accent), var(--shadow)}.map-empty{z-index:1000;background:var(--panel);border:1px solid var(--panel-border);max-width:calc(100% - 24px);box-shadow:var(--shadow);color:var(--muted);text-align:center;border-radius:999px;padding:8px 16px;font-size:.85rem;position:absolute;top:12px;left:50%;transform:translate(-50%)}.map-fab,.pick-bar{z-index:1100;position:absolute;bottom:24px;left:50%;transform:translate(-50%)}.map-fab{border:1px solid var(--panel-border);background:var(--accent);color:#fff;font:inherit;box-shadow:var(--shadow);cursor:pointer;border-radius:999px;padding:10px 20px;font-size:.9rem;font-weight:700}.map-fab[aria-disabled=true]{background:var(--panel);color:var(--muted);cursor:not-allowed}.pick-bar{background:var(--panel);border:1px solid var(--panel-border);box-shadow:var(--shadow);border-radius:999px;align-items:center;gap:8px;padding:8px 10px 8px 16px;font-size:.85rem;display:flex}.pick-bar button{border:1px solid var(--panel-border);color:var(--fg);font:inherit;cursor:pointer;background:0 0;border-radius:999px;padding:6px 12px;font-size:.82rem}.pick-hint{z-index:1100;background:var(--panel);border:1px solid var(--panel-border);color:var(--muted);white-space:nowrap;border-radius:999px;padding:6px 14px;font-size:.78rem;position:absolute;bottom:74px;left:50%;transform:translate(-50%)}.map-locate{z-index:1100;border:1px solid var(--panel-border);background:var(--panel);width:40px;height:40px;color:var(--fg);box-shadow:var(--shadow);cursor:pointer;border-radius:50%;place-items:center;display:grid;position:absolute;top:12px;right:12px}@media (hover:hover){.map-locate:hover:not(:disabled){color:var(--accent)}}.map-locate:disabled{cursor:progress;color:var(--muted)}.map-locate svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round}.map-locate[aria-busy=true] svg{animation:1.1s linear infinite locate-spin}@keyframes locate-spin{to{rotate:360deg}}@media (prefers-reduced-motion:reduce){.map-locate[aria-busy=true] svg{opacity:.5;animation:none}}.locate-error{z-index:1100;background:var(--panel);border:1px solid var(--panel-border);max-width:min(260px,100% - 24px);box-shadow:var(--shadow);color:var(--muted);border-radius:10px;padding:6px 12px;font-size:.78rem;position:absolute;top:60px;right:12px}.user-dot{width:16px;height:16px;box-shadow:var(--shadow);background:#1d7fe0;border:3px solid #fff;border-radius:50%;position:absolute;transform:translate(-50%,-50%)}.venue-dot{background:var(--accent);width:16px;height:16px;box-shadow:var(--shadow);cursor:pointer;border:3px solid #fff;border-radius:50%;position:absolute;transform:translate(-50%,-50%)}.venue-dot--taken{background:var(--panel);border-color:var(--accent)}.venue-sheet{z-index:1100;background:var(--panel);border:1px solid var(--panel-border);width:320px;max-height:min(60%,420px);box-shadow:var(--shadow);border-radius:14px;flex-direction:column;padding:12px;display:flex;position:absolute;bottom:24px;right:12px}.venue-sheet-head{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.venue-sheet-head h2{font-size:.95rem}.venue-sheet-head button{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:none;padding:4px 6px;font-size:1rem;line-height:1}.venue-note{color:var(--muted);padding:6px 2px;font-size:.82rem}.venue-list{overscroll-behavior:contain;margin:0 -4px;list-style:none;overflow-y:auto}.venue-list button{text-align:left;width:100%;color:var(--fg);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:8px;gap:2px;padding:8px;display:grid}.venue-list button:hover,.venue-list button:focus-visible{background:var(--bg)}.venue-name{font-size:.88rem;font-weight:600}.venue-meta{color:var(--muted);font-size:.76rem}.venue-fallback{border:1px solid var(--panel-border);color:var(--fg);font:inherit;cursor:pointer;background:0 0;border-radius:999px;margin-top:8px;padding:8px;font-size:.8rem}.spot-pin{background:var(--accent);width:22px;height:22px;box-shadow:var(--shadow);cursor:grab;border:2px solid #fff;border-radius:50% 50% 50% 0;position:absolute;transform:translate(-50%,-100%)rotate(-45deg)}.submit-primary{font-weight:700;background:var(--accent)!important;border-color:var(--accent)!important;color:#fff!important}.submit-dialog{border:1px solid var(--panel-border);background:var(--panel);width:min(420px,100vw - 32px);max-height:calc(100dvh - 32px);color:var(--fg);box-shadow:var(--shadow);border-radius:14px;margin:auto;padding:20px;overflow-y:auto}.submit-dialog::backdrop{background:#00000073}.submit-dialog h2{margin-bottom:12px;font-size:1.05rem}.submit-form{gap:10px;display:grid}.submit-row{grid-template-columns:1fr 1fr;gap:10px;display:grid}.submit-field{min-width:0;color:var(--muted);gap:4px;font-size:.8rem;display:grid}.submit-field input,.submit-field select{border:1px solid var(--panel-border);background:var(--bg);width:100%;min-width:0;color:var(--fg);font:inherit;border-radius:8px;padding:8px 10px;font-size:.9rem}.submit-field em{color:#d73027;font-size:.75rem;font-style:normal}.submit-subject{font-size:.9rem}.submit-subject-meta{color:var(--muted);margin-top:2px;font-size:.8rem}.submit-error{color:#d73027;font-size:.82rem}.submit-actions{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.submit-actions button,.submit-done button{border:1px solid var(--panel-border);color:var(--fg);font:inherit;cursor:pointer;background:0 0;border-radius:999px;padding:8px 16px;font-size:.85rem}.submit-done{justify-items:start;gap:12px;font-size:.9rem;display:grid}.nearby-list{background:var(--bg);border:1px solid var(--panel-border);color:var(--muted);border-radius:10px;gap:6px;padding:10px;font-size:.8rem;display:grid}.nearby-list button{border:1px solid var(--panel-border);background:var(--panel);color:var(--fg);font:inherit;cursor:pointer;border-radius:999px;justify-self:start;padding:5px 12px;font-size:.82rem}.popup-update{border:1px solid var(--panel-border);color:var(--accent);font:inherit;cursor:pointer;background:0 0;border-radius:999px;margin-top:6px;padding:5px 12px;font-size:.8rem;font-weight:600}.submit-hp{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.legend{z-index:1000;background:var(--panel);border:1px solid var(--panel-border);max-width:300px;box-shadow:var(--shadow);border-radius:10px;padding:10px 12px;font-size:.78rem;position:absolute;bottom:24px;left:12px}.legend-title{margin-bottom:6px;font-weight:700;display:block}.legend ul{gap:3px;list-style:none;display:grid}.legend li{align-items:center;gap:7px;display:flex}.legend-swatch{border-radius:4px;flex:none;width:14px;height:14px}.legend-note{color:var(--muted);margin-top:6px;font-size:.7rem;display:block}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:var(--panel);color:var(--fg);box-shadow:var(--shadow)}.leaflet-popup-content{font:inherit;gap:3px;margin:12px 14px;font-size:.85rem;display:grid}.popup-name{font-size:.95rem}.popup-price{color:var(--accent);font-size:1rem;font-weight:700}.popup-meta{color:var(--muted);font-size:.78rem}.popup-link{color:var(--accent);margin-top:4px;font-weight:600;text-decoration:none}.popup-link:hover{text-decoration:underline}.leaflet-container a.leaflet-popup-close-button{color:var(--muted)}.leaflet-container .leaflet-bar a,.leaflet-touch .leaflet-bar a{background:var(--panel);color:var(--fg);border-bottom-color:var(--panel-border)}.leaflet-container .leaflet-bar a:hover,.leaflet-touch .leaflet-bar a:hover{background:var(--panel-border)}@media (max-width:560px){.app-header{gap:.5rem;padding:.5rem .75rem}.app-header h1{white-space:nowrap;font-size:1rem}.app-header p{font-size:.75rem}.map-empty{max-width:calc(100% - 120px)}.map-fab{padding:12px 18px;bottom:34px;left:auto;right:12px;transform:none}.legend{max-width:calc(100% - 165px);padding:8px 10px;font-size:.7rem;bottom:34px;left:12px}.legend-title{margin-bottom:4px;font-size:.7rem}.legend ul{align-items:center;gap:3px;display:flex}.legend li{gap:3px}.legend-label{display:none}.legend li:first-child .legend-label,.legend li:last-child .legend-label{white-space:nowrap;display:inline}.legend-note{display:none}.pick-bar{border-radius:16px;flex-wrap:wrap;justify-content:center;max-width:calc(100% - 24px);padding:10px 12px;font-size:.8rem;bottom:34px}.pick-bar span{text-align:center;flex-basis:100%}.pick-bar button{flex:1;padding:10px 12px}.pick-hint{font-size:.72rem;bottom:88px}.venue-sheet{width:auto;max-height:58%;padding:12px 14px calc(14px + env(safe-area-inset-bottom));border-bottom:none;border-radius:16px 16px 0 0;bottom:0;left:0;right:0}.venue-list button{padding:10px 8px}.venue-fallback{padding:12px}.submit-dialog{width:calc(100vw - 16px);padding:16px}.submit-dialog h2{font-size:1rem}.submit-field input,.submit-field select{font-size:16px}}@media (prefers-color-scheme:dark){.leaflet-tile-pane{filter:brightness(.6)invert()contrast(3)hue-rotate(200deg)saturate(.3)brightness(.7)}.leaflet-container .leaflet-control-attribution{color:var(--muted);background:#17130fcc}}.admin-shell{align-content:start;gap:1.5rem;max-width:1100px;margin:0 auto;padding:1rem 1rem 3rem;display:grid}.admin-header{border-bottom:1px solid var(--panel-border);align-items:baseline;gap:.75rem;padding-bottom:.6rem;display:flex}.admin-header h1{font-size:1.15rem}.admin-header a{color:var(--muted);font-size:.85rem;text-decoration:none}.admin-header a:hover{color:var(--accent)}.admin-signout{margin-left:auto}.admin-section{gap:.6rem;display:grid}.admin-section h2{font-size:.95rem;font-weight:700}.admin-tiles{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;display:grid}.admin-tile{background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;gap:2px;padding:12px 14px;display:grid}.admin-tile strong{font-variant-numeric:tabular-nums;font-size:1.5rem;line-height:1.1}.admin-tile-label{color:var(--muted);font-size:.75rem}.admin-tile-note{color:var(--muted);font-size:.72rem}.admin-scroll{border:1px solid var(--panel-border);background:var(--panel);border-radius:12px;overflow-x:auto}.admin-table{border-collapse:collapse;width:100%;font-size:.82rem}.admin-table th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);white-space:nowrap;font-size:.72rem;font-weight:600}.admin-table th,.admin-table td{border-bottom:1px solid var(--panel-border);vertical-align:top;padding:8px 12px}.admin-table tr:last-child td{border-bottom:none}.admin-table td{white-space:nowrap}.admin-num{font-variant-numeric:tabular-nums}.admin-bar-name{white-space:normal;font-weight:600;display:block}.admin-dim{color:var(--muted);font-size:.75rem}.admin-id{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:block}.admin-line{white-space:normal;max-width:22rem;display:block}.admin-actions{background:var(--panel);border-left:1px solid var(--panel-border);position:sticky;right:0}.admin-row-hidden td{opacity:.55}.admin-tag{background:var(--bg);border:1px solid var(--panel-border);color:var(--muted);border-radius:999px;margin-top:3px;padding:1px 7px;font-size:.68rem;display:inline-block}.admin-search{align-items:center;gap:8px;display:flex}.admin-search input{border:1px solid var(--panel-border);background:var(--panel);min-width:0;max-width:320px;color:var(--fg);font:inherit;border-radius:8px;flex:1;padding:8px 10px;font-size:.85rem}.admin-search a{color:var(--muted);font-size:.8rem}.admin-search button,.admin-signout button,.admin-table button{border:1px solid var(--panel-border);color:var(--fg);font:inherit;cursor:pointer;background:0 0;border-radius:999px;padding:7px 14px;font-size:.8rem}.admin-primary{font-weight:600;border-color:var(--accent)!important;color:var(--accent)!important}.admin-danger{font-weight:600;color:#d73027!important;border-color:#d73027!important}.admin-note{color:var(--muted);font-size:.78rem;line-height:1.5}.admin-note code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.95em}.admin-login{background:var(--panel);border:1px solid var(--panel-border);border-radius:14px;justify-items:start;gap:12px;width:min(320px,100%);margin-top:2rem;padding:20px;display:grid}.admin-login h1{font-size:1rem}.admin-login .submit-field{width:100%}.admin-login button{border:1px solid var(--panel-border);font:inherit;cursor:pointer;background:0 0;border-radius:999px;padding:8px 16px;font-size:.85rem}@media (max-width:560px){.admin-shell{gap:1.1rem;padding:.75rem .75rem 2rem}.admin-tile strong{font-size:1.25rem}.admin-search input,.admin-login input{font-size:16px}}
