:root{--color-bg-primary: #0a0a0a;--color-bg-secondary: #111111;--color-bg-tertiary: #1a1a1a;--color-bg-card: #151515;--color-bg-elevated: #1e1e1e;--color-text-primary: #fafafa;--color-text-secondary: #a0a0a0;--color-text-tertiary: #6b6b6b;--color-text-muted: #4a4a4a;--color-accent: #f5a623;--color-accent-hover: #ffc107;--color-accent-subtle: rgba(245, 166, 35, .15);--color-border: rgba(255, 255, 255, .08);--color-border-strong: rgba(255, 255, 255, .15);--color-success: #10b981;--color-warning: #f59e0b;--color-error: #ef4444;--font-serif: "Playfair Display", Georgia, serif;--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "JetBrains Mono", "SF Mono", Monaco, monospace;--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 24px;--space-xl: 32px;--space-2xl: 48px;--header-height: 64px;--transition-fast: .15s ease;--transition-base: .25s ease;--transition-slow: .4s ease;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .5)}*{margin:0;padding:0;box-sizing:border-box}body{font-family:var(--font-sans);background:var(--color-bg-primary);color:var(--color-text-primary);overflow:hidden;font-size:15px;line-height:1.5;font-weight:400;letter-spacing:-.01em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{height:100vh;display:flex;flex-direction:column}.header{height:var(--header-height);background:#0a0a0ae6;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-bottom:1px solid var(--color-border);display:flex;align-items:center;padding:0 var(--space-md);z-index:1000}.header-left{flex:0 0 auto}.logo{display:flex;align-items:center;gap:var(--space-sm);font-size:18px;font-weight:600;color:var(--color-text-primary);text-decoration:none}.logo svg{display:none}.logo:before{content:"◉";color:var(--color-accent);font-size:1.3em}.header-center{flex:1;display:flex;justify-content:center;padding:0 var(--space-lg)}.search-box{width:100%;max-width:480px;position:relative}.search-box input{width:100%;height:44px;padding:0 var(--space-md) 0 48px;border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-bg-tertiary);font-family:var(--font-sans);font-size:14px;color:var(--color-text-primary);transition:all var(--transition-fast)}.search-box input:focus{outline:none;border-color:var(--color-accent);background:var(--color-bg-elevated);box-shadow:0 0 0 3px var(--color-accent-subtle)}.search-box input::placeholder{color:var(--color-text-tertiary)}.search-icon{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:var(--color-text-tertiary)}.search-results{position:absolute;top:calc(100% + 8px);left:0;right:0;background:var(--color-bg-card);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);max-height:320px;overflow-y:auto;z-index:100}.search-results.hidden{display:none}.search-result-item{padding:var(--space-md);cursor:pointer;border-bottom:1px solid var(--color-border);display:flex;align-items:flex-start;gap:var(--space-md);transition:background var(--transition-fast)}.search-result-item:hover{background:var(--color-bg-elevated)}.search-result-item:last-child{border-bottom:none}.search-result-icon{color:var(--color-accent);flex-shrink:0;margin-top:2px}.search-result-text{flex:1;min-width:0}.search-result-name{font-size:14px;font-weight:500;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-result-address{font-size:12px;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.search-loading{padding:var(--space-lg);text-align:center;color:var(--color-text-tertiary);font-size:13px}.header-right{flex:0 0 auto;display:flex;align-items:center;gap:var(--space-md)}.status-badge{padding:6px 14px;border-radius:var(--radius-full);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.status-badge.disabled{background:#ef444426;color:var(--color-error)}.status-badge.enabled{background:#10b98126;color:var(--color-success)}.main-content{flex:1;position:relative;display:flex}#map{flex:1;height:100%;background:var(--color-bg-primary)}.leaflet-tile-container{background:var(--color-bg-primary)}.leaflet-container{background:var(--color-bg-primary);font-family:var(--font-sans)}.leaflet-control-attribution{background:#0a0a0acc!important;color:var(--color-text-tertiary)!important;font-size:10px!important;padding:4px 8px!important;border-radius:var(--radius-sm)!important}.leaflet-control-attribution a{color:var(--color-text-secondary)!important}.leaflet-control-zoom{border:none!important;box-shadow:var(--shadow-md)!important}.leaflet-control-zoom a{background:var(--color-bg-card)!important;color:var(--color-text-primary)!important;border:1px solid var(--color-border)!important;width:36px!important;height:36px!important;line-height:36px!important;font-size:18px!important;transition:all var(--transition-fast)!important}.leaflet-control-zoom a:hover{background:var(--color-bg-elevated)!important;border-color:var(--color-accent)!important;color:var(--color-accent)!important}.leaflet-control-zoom-in{border-radius:var(--radius-md) var(--radius-md) 0 0!important}.leaflet-control-zoom-out{border-radius:0 0 var(--radius-md) var(--radius-md)!important}.side-panel{position:absolute;left:0;right:0;bottom:0;height:45%;max-height:420px;background:var(--color-bg-card);border-top:1px solid var(--color-border);box-shadow:0 -8px 32px #00000080;z-index:900;display:flex;flex-direction:row;border-radius:var(--radius-xl) var(--radius-xl) 0 0;transition:transform var(--transition-slow)}.side-panel.hidden{transform:translateY(100%)}.panel-header{padding:var(--space-md) var(--space-lg);border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;align-items:center}.panel-header h3{font-family:var(--font-serif);font-size:20px;font-weight:500;color:var(--color-text-primary)}.close-btn{background:none;border:none;padding:var(--space-sm);cursor:pointer;color:var(--color-text-secondary);border-radius:var(--radius-full);transition:all var(--transition-fast)}.close-btn:hover{background:var(--color-bg-elevated);color:var(--color-text-primary)}.panel-preview{flex:0 0 55%;padding:var(--space-lg);display:flex;align-items:center;justify-content:center;background:var(--color-bg-tertiary);border-radius:var(--radius-xl) 0 0 0}.panel-info{flex:1;display:flex;flex-direction:column;overflow:hidden}.panel-content{flex:1;overflow-y:auto;padding:var(--space-lg)}.streetview-container{width:100%;height:100%;max-height:100%;background:var(--color-bg-primary);border-radius:var(--radius-lg);overflow:hidden;position:relative;cursor:pointer;box-shadow:var(--shadow-lg);border:1px solid var(--color-border)}.streetview-container img{width:100%;height:100%;object-fit:cover;transition:transform var(--transition-slow),filter var(--transition-base)}.streetview-container:hover img{transform:scale(1.02);filter:brightness(.8)}.streetview-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#0006;opacity:0;transition:opacity var(--transition-base)}.streetview-container:hover .streetview-overlay{opacity:1}.overlay-icon{margin-bottom:var(--space-md);filter:drop-shadow(0 2px 8px rgba(0,0,0,.5))}.overlay-text{font-size:14px;font-weight:600;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,.5)}.location-info{display:flex;flex-direction:column;gap:var(--space-md)}.info-row{display:flex;flex-direction:column;gap:4px}.info-row .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-tertiary)}.info-row .value{font-size:14px;color:var(--color-text-primary);font-weight:500}.status-cached{color:var(--color-accent)!important}.click-panel{position:absolute;bottom:5%;left:50%;transform:translate(-50%);background:var(--color-bg-card);border:1px solid var(--color-border);border-radius:var(--radius-lg);width:400px;box-shadow:var(--shadow-lg);z-index:800;transition:opacity var(--transition-base),transform var(--transition-base);overflow:hidden}.click-panel.hidden{opacity:0;transform:translate(-50%) translateY(20px);pointer-events:none}.click-panel:not(.hidden)~.map-controls,body:has(.click-panel:not(.hidden)) .map-controls{opacity:0;pointer-events:none;transition:opacity var(--transition-base)}.click-panel-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md) var(--space-lg);border-bottom:1px solid var(--color-border)}.click-panel-header h4{font-family:var(--font-serif);font-size:16px;font-weight:500;margin:0;color:var(--color-text-primary)}.panel-close-btn{background:none;border:none;color:var(--color-text-tertiary);cursor:pointer;padding:var(--space-xs);border-radius:var(--radius-sm);transition:all var(--transition-fast)}.panel-close-btn:hover{color:var(--color-text-primary);background:var(--color-bg-tertiary)}.click-panel-content{padding:var(--space-lg)}.coords-display{font-family:var(--font-mono);font-size:13px;color:var(--color-text-secondary);margin-bottom:var(--space-md)}.heading-row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}.heading-label{font-size:12px;color:var(--color-text-tertiary)}.heading-value{font-family:var(--font-mono);font-size:13px;font-weight:600;color:var(--color-accent)}.click-panel .hint-text{font-size:11px;color:var(--color-text-tertiary);font-style:italic;margin-bottom:var(--space-lg)}.click-actions{margin-bottom:var(--space-md)}.click-actions .btn{width:100%}.disabled-notice{font-size:11px;color:var(--color-text-tertiary);text-align:center;line-height:1.5;margin:0}.map-controls.pin-mode-active .control-btn:not(#pinModeBtn){opacity:.4;pointer-events:none}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);font-family:var(--font-sans);font-weight:600;font-size:13px;cursor:pointer;transition:all var(--transition-fast);border:none}.btn-primary{background:var(--color-accent);color:var(--color-bg-primary)}.btn-primary:hover:not(.disabled){background:var(--color-accent-hover);transform:translateY(-1px)}.btn-primary.disabled{opacity:.5;cursor:not-allowed}.btn-secondary{background:var(--color-bg-elevated);color:var(--color-text-primary);border:1px solid var(--color-border)}.btn-secondary:hover{border-color:var(--color-border-strong);background:var(--color-bg-tertiary)}.map-controls{position:absolute;top:calc(var(--header-height) + var(--space-md));right:var(--space-md);display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);z-index:800}.control-btn{width:60px;height:60px;background:var(--color-bg-card);border:1px solid var(--color-border);border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--transition-fast);color:var(--color-text-secondary)}.control-btn:hover{background:var(--color-bg-elevated);border-color:var(--color-accent);color:var(--color-accent)}.control-btn.active{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-bg-primary)}.control-btn.control-btn-small{width:36px;height:36px}.control-btn.control-btn-round{border-radius:var(--radius-full)}.pin-mode-indicator{position:absolute;bottom:var(--space-lg);left:50%;transform:translate(-50%);background:var(--color-bg-card);border:1px solid var(--color-accent);border-radius:var(--radius-full);padding:var(--space-sm) var(--space-lg);display:flex;align-items:center;gap:var(--space-md);box-shadow:var(--shadow-lg);z-index:800;font-size:13px;color:var(--color-text-primary)}.pin-mode-indicator.hidden{display:none}.pin-mode-indicator button{background:none;border:1px solid var(--color-border);padding:4px 12px;border-radius:var(--radius-full);font-size:12px;color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast)}.pin-mode-indicator button:hover{border-color:var(--color-error);color:var(--color-error)}.dropped-camera{background:transparent!important;border:none!important}.dropped-camera .camera-wrapper{width:160px;height:160px;display:flex;align-items:center;justify-content:center}.dropped-camera .arrow-rotate{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;transform-origin:center center;pointer-events:none}.dropped-camera .cam{width:120px;height:120px;filter:drop-shadow(0 2px 8px rgba(0,0,0,.5));z-index:2;animation:camera-drop .4s ease-out;transition:transform .15s ease-out}.dropped-camera .cam-arrow{position:absolute;top:-30px;left:50%;width:3px;height:28px;margin-left:-1.5px;background:var(--color-accent);z-index:1;border-radius:2px}.dropped-camera .cam-arrow:before{content:"";position:absolute;top:-8px;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:10px solid var(--color-accent)}@keyframes camera-drop{0%{transform:scale(1.5);opacity:0}60%{transform:scale(1);opacity:1}80%{transform:scale(1.1)}to{transform:scale(1)}}.dropped-camera .binos{display:none}.cached-marker,.custom-marker{background:var(--color-accent)!important;border:3px solid var(--color-bg-primary)!important;border-radius:50%!important;box-shadow:0 2px 8px #f5a62366!important;cursor:pointer!important;transition:all var(--transition-fast)!important}.cached-marker:hover,.custom-marker:hover{transform:scale(1.3);box-shadow:0 4px 16px #f5a62399}.custom-marker.selected{background:#ef4444!important;box-shadow:0 4px 16px #ef444499!important}.marker-dot{width:16px;height:16px;background:var(--color-accent);border:2px solid var(--color-bg-primary);border-radius:50%;box-shadow:0 2px 8px #f5a62366;transition:all var(--transition-fast)}.marker-dot:hover{transform:scale(1.3);box-shadow:0 4px 16px #f5a62399}.panorama-modal{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--color-bg-primary);z-index:2000;display:flex;flex-direction:column}.panorama-modal.hidden{display:none}.panorama-header{height:var(--header-height);background:#0a0a0ae6;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;padding:0 var(--space-lg)}.panorama-header h3{font-family:var(--font-serif);font-size:18px;font-weight:500}.panorama-close{background:none;border:1px solid var(--color-border);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-full);color:var(--color-text-secondary);font-size:13px;cursor:pointer;transition:all var(--transition-fast)}.panorama-close:hover{border-color:var(--color-error);color:var(--color-error)}.panorama-container{flex:1}.rotation-mode-cursor{cursor:crosshair!important}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-bg-tertiary)}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--color-text-muted)}@media (max-width: 768px){.side-panel{flex-direction:column;height:60%;max-height:none}.panel-preview{flex:0 0 50%;border-radius:var(--radius-xl) var(--radius-xl) 0 0}.panel-info{flex:1}.click-panel{left:var(--space-sm);right:var(--space-sm);width:auto}.map-controls{right:var(--space-sm)}}.notification-toast{position:fixed;bottom:var(--space-lg);left:50%;transform:translate(-50%);background:var(--color-bg-card);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-md) var(--space-lg);display:flex;align-items:center;gap:var(--space-md);box-shadow:var(--shadow-lg);z-index:10000;animation:slideUp .3s ease}.notification-toast.notification-success{border-color:var(--color-success)}.notification-toast.notification-error{border-color:var(--color-error)}.notification-toast.notification-info{border-color:var(--color-accent)}.notification-toast button{background:none;border:none;color:var(--color-text-secondary);font-size:18px;cursor:pointer;padding:0;line-height:1}.notification-toast button:hover{color:var(--color-text-primary)}@keyframes slideUp{0%{opacity:0;transform:translate(-50%) translateY(20px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.spinner{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.status-generated{color:var(--color-accent)!important}
