:root{--menubar-height: 32px;--toolbar-height: 40px;--statusbar-height: 26px;--panel-width: 260px;--panel-min-width: 200px;--panel-max-width: 400px;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-lg: 16px;--spacing-xl: 24px;--font-size-xs: 11px;--font-size-sm: 12px;--font-size-md: 13px;--font-size-lg: 14px;--font-size-xl: 16px;--font-family: "Pretendard", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-family-mono: "JetBrains Mono", "Fira Code", "Consolas", monospace;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--radius-xl: 12px;--transition-fast: .1s ease;--transition-normal: .2s ease;--transition-slow: .3s ease;--z-panel: 100;--z-toolbar: 200;--z-menubar: 300;--z-dropdown: 400;--z-dialog: 500;--z-tooltip: 600}:root,[data-theme=light]{--color-primary: #0066cc;--color-primary-hover: #0052a3;--color-primary-light: #e6f2ff;--color-accent: #10b981;--color-warning: #f59e0b;--color-danger: #ef4444;--bg-app: #f8fafc;--bg-panel: #ffffff;--bg-menubar: #ffffff;--bg-toolbar: #ffffff;--bg-statusbar: #f1f5f9;--bg-hover: #f1f5f9;--bg-active: #e2e8f0;--bg-selected: #dbeafe;--bg-input: #ffffff;--bg-button: #f1f5f9;--bg-button-hover: #e2e8f0;--text-primary: #1e293b;--text-secondary: #64748b;--text-muted: #94a3b8;--text-disabled: #cbd5e1;--text-inverse: #ffffff;--border-color: #e2e8f0;--border-color-strong: #cbd5e1;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1);--map-overlay-bg: rgba(255, 255, 255, .9)}[data-theme=dark]{--color-primary: #3b82f6;--color-primary-hover: #60a5fa;--color-primary-light: #1e3a5f;--color-accent: #34d399;--color-warning: #fbbf24;--color-danger: #f87171;--bg-app: #0f172a;--bg-panel: #1e293b;--bg-menubar: #1e293b;--bg-toolbar: #1e293b;--bg-statusbar: #1e293b;--bg-hover: #334155;--bg-active: #475569;--bg-selected: #1e3a5f;--bg-input: #0f172a;--bg-button: #334155;--bg-button-hover: #475569;--text-primary: #f1f5f9;--text-secondary: #94a3b8;--text-muted: #64748b;--text-disabled: #475569;--text-inverse: #0f172a;--border-color: #334155;--border-color-strong: #475569;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .4);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .5);--map-overlay-bg: rgba(30, 41, 59, .9)}#app{display:flex;flex-direction:column;height:100vh;width:100vw;overflow:hidden;background:var(--bg-app);color:var(--text-primary);font-family:var(--font-family);font-size:var(--font-size-md)}#menubar{height:var(--menubar-height);background:var(--bg-menubar);border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-sm);z-index:var(--z-menubar);flex-shrink:0}.menu-left{display:flex;align-items:center;height:100%}.app-logo{display:flex;align-items:center;height:100%;padding:4px 8px}.logo-text{font-size:18px;font-weight:700;color:#06c;letter-spacing:-.5px}.btn-help{background:transparent;border:none;font-size:13px;cursor:pointer;margin-left:8px;padding:4px 6px;display:flex;align-items:center;justify-content:center;transition:transform .2s;line-height:1}.btn-help:hover{transform:scale(1.15)}.menu-right{display:flex;align-items:center;margin-left:auto}#toolbar{height:var(--toolbar-height);background:var(--bg-toolbar);border-bottom:1px solid var(--border-color);display:flex;align-items:center;padding:0 var(--spacing-md);gap:var(--spacing-sm);z-index:var(--z-toolbar);flex-shrink:0}#main-container{display:flex;flex:1;overflow:hidden}#left-panel{width:var(--panel-width);min-width:var(--panel-min-width);max-width:var(--panel-max-width);background:var(--bg-panel);border-right:1px solid var(--border-color);display:flex;flex-direction:column;z-index:var(--z-panel);flex-shrink:0}.panel-resizer{width:4px;background:transparent;cursor:ew-resize;transition:background var(--transition-fast)}.panel-resizer:hover,.panel-resizer.active{background:var(--color-primary)}#browser-panel{height:35%;min-height:100px;border-bottom:1px solid var(--border-color);overflow:hidden;display:flex;flex-direction:column}#layer-panel{flex:1;overflow:hidden;display:flex;flex-direction:column}.panel-header{height:32px;background:var(--bg-toolbar);border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-md);font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);flex-shrink:0}.panel-header-title{display:flex;align-items:center;gap:var(--spacing-sm)}.panel-header-actions{display:flex;align-items:center;gap:var(--spacing-xs)}.panel-content{flex:1;overflow:auto;padding:var(--spacing-sm)}#map-container{flex:1;position:relative;overflow:hidden;background:var(--bg-app)}#map{width:100%;height:100%}#statusbar{height:var(--statusbar-height);background:var(--bg-statusbar);border-top:1px solid var(--border-color);display:flex;align-items:center;padding:0 var(--spacing-md);font-size:var(--font-size-xs);color:var(--text-secondary);gap:var(--spacing-lg);flex-shrink:0}.statusbar-item{display:flex;align-items:center;gap:var(--spacing-xs)}.statusbar-item.coordinates{min-width:200px;font-family:var(--font-family-mono);font-size:var(--font-size-xs)}.statusbar-item.scale{min-width:100px}.scale-label{color:var(--text-secondary)}.scale-input{background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);color:var(--text-primary);font-family:var(--font-family-mono);font-size:var(--font-size-xs);padding:2px 4px;width:90px;text-align:right;transition:border-color var(--transition-fast),background var(--transition-fast)}.scale-input:hover{border-color:var(--border-color);background:var(--bg-hover)}.scale-input:focus{outline:none;border-color:var(--color-primary);background:var(--bg-panel)}.scale-value,.coord-value{color:var(--text-primary)}.statusbar-item.crs{min-width:100px;cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm);transition:background var(--transition-fast)}.statusbar-item.crs:hover{background:var(--bg-hover)}.statusbar-spacer{flex:1}#attribute-panel{height:0;background:var(--bg-panel);border-top:1px solid var(--border-color);overflow:hidden;transition:height var(--transition-normal)}#attribute-panel.open{height:220px}#right-panel{width:0;background:var(--bg-panel);border-left:1px solid var(--border-color);overflow:hidden;transition:width var(--transition-normal)}#right-panel.open{width:var(--panel-width)}[data-theme=dark] ::-webkit-scrollbar-thumb{background:var(--border-color)}[data-theme=dark] ::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.crs-dropdown{position:relative}.crs-dropdown-menu{display:none;position:absolute;bottom:100%;left:0;min-width:220px;background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:var(--spacing-xs);margin-bottom:var(--spacing-xs);z-index:var(--z-dropdown)}.crs-dropdown.open .crs-dropdown-menu{display:block}.crs-option{display:flex;flex-direction:column;padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast)}.crs-option:hover{background:var(--bg-hover)}.crs-code{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary)}.crs-name{font-size:var(--font-size-xs);color:var(--text-muted)}.crs-value{color:var(--text-primary);font-weight:500}.menu-item.dropdown{position:relative}.menu-item .dropdown-menu{display:none;position:absolute;top:100%;left:0;min-width:160px;background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:var(--spacing-xs);z-index:var(--z-dropdown)}.menu-item.dropdown.open .dropdown-menu{display:block}.menu-button{padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-sm);font-size:var(--font-size-sm);color:var(--text-primary);background:transparent;cursor:pointer;transition:background var(--transition-fast)}.menu-button:hover{background:var(--bg-hover)}.menu-item.disabled .menu-button{color:var(--text-disabled);cursor:not-allowed}.menu-item.disabled .menu-button:hover{background:transparent}.dropdown-item{padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-sm);color:var(--text-primary);cursor:pointer;border-radius:var(--radius-sm);transition:background var(--transition-fast)}.dropdown-item.disabled{color:var(--text-muted);cursor:default;pointer-events:none}.dropdown-item.submenu-label{font-size:11px;font-weight:600;color:var(--text-muted);cursor:default;text-transform:uppercase;letter-spacing:.5px;padding-top:var(--spacing-xs);padding-bottom:var(--spacing-xs)}.dropdown-item.submenu-label:hover{background:transparent}.recent-files-list{max-height:200px;overflow-y:auto}.recent-files-list .dropdown-item{font-size:12px;padding-left:calc(var(--spacing-md) + 8px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#left-panel.hidden{display:none}.layer-list{list-style:none;padding:0;margin:0}.layer-empty{padding:var(--spacing-lg);text-align:center;color:var(--text-muted);font-size:var(--font-size-sm);line-height:1.6}.layer-item{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-sm);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast);-webkit-user-select:none;user-select:none}.layer-item:hover{background:var(--bg-hover)}.layer-item.selected{background:var(--bg-selected)}.layer-item.dragging{opacity:.5;background:var(--bg-active)}.layer-item.drop-above{border-top:2px solid var(--color-primary)}.layer-item.drop-below{border-bottom:2px solid var(--color-primary)}.layer-item input[type=checkbox]{margin:0;width:14px;height:14px;cursor:pointer;accent-color:var(--color-primary)}.layer-color{cursor:pointer;width:12px;height:12px;border-radius:2px;flex-shrink:0}.layer-name{flex:1;font-size:var(--font-size-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layer-count{font-size:var(--font-size-xs);color:var(--text-muted)}.layer-menu-btn{width:20px;height:20px;padding:0;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;color:var(--text-muted);opacity:0;transition:all var(--transition-fast)}.layer-item:hover .layer-menu-btn{opacity:1}.layer-menu-btn:hover{background:var(--bg-active);color:var(--text-primary)}.layer-context-menu{background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:var(--spacing-xs);min-width:140px;z-index:var(--z-dropdown)}.context-menu-item{padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-sm);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast);color:var(--text-primary)}.context-menu-item:hover{background:var(--bg-hover)}.context-menu-item.danger{color:var(--color-danger)}.context-menu-item.danger:hover{background:#ef44441a}.context-menu-divider{height:1px;background:var(--border-color);margin:var(--spacing-xs) 0}.file-drop-zone{border:2px dashed var(--border-color);border-radius:var(--radius-md);padding:var(--spacing-lg);text-align:center;color:var(--text-muted);font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast);margin:var(--spacing-sm)}.file-drop-zone:hover{border-color:var(--color-primary);background:var(--color-primary-light)}.file-drop-zone.dragover{border-color:var(--color-primary);background:var(--color-primary-light);border-style:solid}.file-drop-zone .file-types{font-size:var(--font-size-xs);margin-top:var(--spacing-xs);opacity:.7}.panel-header-actions .btn-icon{width:22px;height:22px}.panel-header-actions .btn-icon svg{width:14px;height:14px}.attribute-panel{height:0;background:var(--bg-panel);border-top:1px solid var(--border-color);overflow:hidden;transition:height var(--transition-normal);display:flex;flex-direction:column}.attribute-panel.open{height:250px}.attribute-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-toolbar);border-bottom:1px solid var(--border-color);flex-shrink:0}.attribute-title{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-sm);font-weight:600}.attribute-count{font-weight:400;color:var(--text-muted)}.attribute-actions{display:flex;gap:var(--spacing-xs)}.attribute-content{flex:1;overflow:auto}.attribute-table{width:100%;border-collapse:collapse;font-size:var(--font-size-sm)}.attribute-table th,.attribute-table td{padding:var(--spacing-sm) var(--spacing-md);text-align:left;border-bottom:1px solid var(--border-color);white-space:nowrap;max-width:200px;overflow:hidden;text-overflow:ellipsis}.attribute-table th{background:var(--bg-toolbar);font-weight:600;position:sticky;top:0;z-index:1;cursor:pointer;-webkit-user-select:none;user-select:none}.attribute-table th.sortable:hover{background:var(--bg-hover)}.attribute-table th .sort-icon{display:inline-block;width:12px;margin-left:4px}.attribute-table th.asc .sort-icon:after{content:"▲";font-size:10px;color:var(--color-primary)}.attribute-table th.desc .sort-icon:after{content:"▼";font-size:10px;color:var(--color-primary)}.attribute-table th.row-num,.attribute-table td.row-num{width:40px;text-align:center;color:var(--text-muted);background:var(--bg-app)}.attribute-table tbody tr{cursor:pointer;transition:background var(--transition-fast)}.attribute-table tbody tr:hover{background:var(--bg-hover)}.attribute-table tbody tr.selected,.attribute-table tbody tr.selected:hover{background:var(--bg-selected)}.attribute-resizer{height:4px;background:transparent;cursor:ns-resize;transition:background var(--transition-fast)}.attribute-resizer:hover,.attribute-resizer.active{background:var(--color-primary)}.color-picker-popup{background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:var(--spacing-md);min-width:180px;z-index:var(--z-dropdown)}.color-picker-header{font-size:var(--font-size-sm);font-weight:600;margin-bottom:var(--spacing-sm);color:var(--text-primary)}.color-picker-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--spacing-xs);margin-bottom:var(--spacing-md)}.color-item{width:32px;height:32px;border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast);border:2px solid transparent}.color-item:hover{transform:scale(1.1);box-shadow:0 2px 8px #0003}.color-item.active{border-color:var(--text-primary);box-shadow:0 0 0 2px var(--bg-panel)}.color-picker-custom{display:flex;align-items:center;gap:var(--spacing-sm);padding-top:var(--spacing-sm);border-top:1px solid var(--border-color)}.color-picker-custom label{font-size:var(--font-size-xs);color:var(--text-muted)}.color-picker-custom .color-input{width:40px;height:28px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-sm);cursor:pointer;background:transparent}.color-picker-custom .color-input::-webkit-color-swatch-wrapper{padding:0}.color-picker-custom .color-input::-webkit-color-swatch{border:none;border-radius:2px}.style-section{margin-top:var(--spacing-md);padding-top:var(--spacing-md);border-top:1px solid var(--border-color)}.style-section label{display:block;font-size:var(--font-size-xs);color:var(--text-muted);margin-bottom:var(--spacing-sm)}.style-section:first-of-type{margin-top:0;padding-top:0;border-top:none}.stroke-style-options{display:flex;gap:var(--spacing-xs)}.stroke-btn{flex:1;padding:var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast);text-align:center}.stroke-btn:hover{background:var(--bg-hover);border-color:var(--color-primary)}.stroke-btn.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.opacity-slider{width:100%;height:6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg-input);border-radius:3px;outline:none;margin-top:var(--spacing-xs)}.opacity-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--color-primary);cursor:pointer;border:2px solid white;box-shadow:0 1px 3px #0003}.opacity-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--color-primary);cursor:pointer;border:2px solid white;box-shadow:0 1px 3px #0003}.opacity-value{font-weight:600;color:var(--text-primary)}.layer-item.primary-selected{background:var(--bg-selected);box-shadow:inset 3px 0 0 var(--color-primary)}.layer-item.selected:not(.primary-selected){background:var(--bg-selected);opacity:.85}.layer-multi-select-info{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-xs) var(--spacing-sm);background:var(--color-primary);color:#fff;font-size:var(--font-size-xs);font-weight:500;margin:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-sm)}.layer-multi-select-info span{display:flex;align-items:center;gap:var(--spacing-xs)}.clear-selection-btn{width:18px;height:18px;padding:0;border:none;border-radius:var(--radius-sm);background:#fff3;color:#fff;font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background var(--transition-fast)}.clear-selection-btn:hover{background:#ffffff4d}.context-menu-header{padding:var(--spacing-xs) var(--spacing-md);font-size:var(--font-size-xs);font-weight:600;color:var(--text-muted);border-bottom:1px solid var(--border-color);margin-bottom:var(--spacing-xs)}.privacy-modal .privacy-content{max-width:600px;max-height:80vh;background:var(--bg-panel);border:1px solid var(--border-color);box-shadow:var(--shadow-lg)}.privacy-modal .modal-header{background:var(--bg-toolbar);border-bottom:1px solid var(--border-color)}.privacy-body{max-height:60vh;overflow-y:auto;background:var(--bg-panel);padding:var(--spacing-md)}.privacy-modal .modal-footer{background:var(--bg-toolbar);border-top:1px solid var(--border-color);display:flex;gap:var(--spacing-sm);justify-content:flex-end;padding:var(--spacing-md)}#privacy-download-pdf{display:flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-xs) var(--spacing-md);background:var(--bg-hover);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--font-size-sm);font-weight:500;cursor:pointer;transition:all var(--transition-fast)}#privacy-download-pdf:hover{background:var(--bg-active);border-color:var(--color-primary);color:var(--color-primary)}#privacy-download-pdf svg{flex-shrink:0}.privacy-meta{display:flex;gap:var(--spacing-md);font-size:var(--font-size-xs);color:var(--text-muted);padding-bottom:var(--spacing-md);border-bottom:1px solid var(--border-color);margin-bottom:var(--spacing-md)}.privacy-intro{font-size:var(--font-size-sm);line-height:1.7;color:var(--text-secondary);padding-bottom:var(--spacing-md);border-bottom:1px solid var(--border-color);margin-bottom:var(--spacing-md)}.privacy-sections{display:flex;flex-direction:column;gap:var(--spacing-lg)}.privacy-section h4{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-sm)}.privacy-section-content{font-size:var(--font-size-sm);line-height:1.7;color:var(--text-secondary)}.privacy-section-content strong{color:var(--text-primary);font-weight:600}.privacy-consent-section{margin:var(--spacing-md) 0}.privacy-consent-box{background:var(--bg-app);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:var(--spacing-md);margin-bottom:var(--spacing-sm)}.privacy-consent-header{display:flex;align-items:center;gap:var(--spacing-sm);font-weight:600;font-size:var(--font-size-sm);margin-bottom:var(--spacing-sm)}.privacy-required-badge{background:var(--color-danger);color:#fff;font-size:var(--font-size-xs);padding:2px 6px;border-radius:var(--radius-sm);font-weight:500}.privacy-consent-summary{display:flex;flex-direction:column;gap:var(--spacing-xs);margin-bottom:var(--spacing-sm)}.privacy-consent-item{display:flex;font-size:var(--font-size-xs)}.consent-label{width:70px;color:var(--text-muted);flex-shrink:0}.consent-value{color:var(--text-primary)}.privacy-full-link{font-size:var(--font-size-xs);color:var(--color-primary);padding:0;text-decoration:underline}.privacy-full-link:hover{color:var(--color-primary-dark)}.privacy-full-btn.btn-outline{padding:var(--spacing-xs) var(--spacing-md);background:transparent;border:1px solid var(--color-primary);border-radius:var(--radius-sm);color:var(--color-primary);font-size:var(--font-size-xs);font-weight:500;cursor:pointer;transition:all var(--transition-fast)}.privacy-full-btn.btn-outline:hover{background:var(--color-primary);color:var(--text-inverse)}.privacy-consent-checkbox{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-sm);cursor:pointer;padding:var(--spacing-sm);border-radius:var(--radius-sm);transition:background var(--transition-fast)}.privacy-consent-checkbox:hover{background:var(--bg-hover)}.privacy-consent-checkbox input[type=checkbox]{width:18px;height:18px;accent-color:var(--color-primary);cursor:pointer}.privacy-consent-checkbox em{color:var(--color-danger);font-style:normal;font-size:var(--font-size-xs)}.privacy-management{display:flex;flex-direction:column;gap:var(--spacing-md)}.privacy-section-card{background:var(--bg-app);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:var(--spacing-md)}.privacy-section-card h4{font-size:var(--font-size-sm);font-weight:600;margin-bottom:var(--spacing-sm);color:var(--text-primary)}.privacy-description{font-size:var(--font-size-xs);color:var(--text-muted);margin-bottom:var(--spacing-sm)}.consent-info-card{background:var(--bg-panel);border-radius:var(--radius-sm);padding:var(--spacing-sm)}.consent-info-card.empty{text-align:center;color:var(--text-muted);font-size:var(--font-size-sm)}.consent-status{margin-bottom:var(--spacing-sm)}.consent-badge{display:inline-block;padding:2px 8px;border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:500}.consent-badge.active{background:var(--color-success);color:#fff}.consent-details{display:flex;flex-direction:column;gap:var(--spacing-xs)}.consent-detail-item{display:flex;font-size:var(--font-size-xs)}.detail-label{width:80px;color:var(--text-muted);flex-shrink:0}.detail-value{color:var(--text-primary)}.privacy-actions{display:flex;flex-direction:column;gap:var(--spacing-sm)}.privacy-action-item{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-sm);background:var(--bg-panel);border-radius:var(--radius-sm)}.privacy-action-item.danger{border:1px solid rgba(239,68,68,.3)}.action-info strong{display:block;font-size:var(--font-size-sm);margin-bottom:2px}.action-info p{font-size:var(--font-size-xs);color:var(--text-muted);margin:0}.privacy-officer-info{display:flex;flex-direction:column;gap:var(--spacing-xs);margin-bottom:var(--spacing-sm)}.officer-item{display:flex;font-size:var(--font-size-sm)}.officer-label{width:60px;color:var(--text-muted)}.officer-value{color:var(--text-primary)}a.officer-value{color:var(--color-primary);text-decoration:none}a.officer-value:hover{text-decoration:underline}.privacy-help-text{font-size:var(--font-size-xs);color:var(--text-muted);margin:0}.data-modal .data-content{max-width:450px}.my-data-modal h4{font-size:var(--font-size-md);font-weight:600;margin-bottom:var(--spacing-md);color:var(--text-primary)}.data-section{margin-bottom:var(--spacing-md);padding:var(--spacing-sm);background:var(--bg-app);border-radius:var(--radius-sm)}.data-section h5{font-size:var(--font-size-xs);font-weight:600;color:var(--text-muted);margin-bottom:var(--spacing-sm);text-transform:uppercase;letter-spacing:.5px}.data-item{display:flex;justify-content:space-between;font-size:var(--font-size-sm);padding:var(--spacing-xs) 0}.data-item:not(:last-child){border-bottom:1px solid var(--border-color)}.data-label{color:var(--text-muted)}.data-value{color:var(--text-primary);font-weight:500}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body{width:100%;height:100%;font-family:var(--font-family);font-size:var(--font-size-md);line-height:1.5;-webkit-font-smoothing:antialiased;color:var(--text-primary)}button{font-family:inherit;font-size:inherit;border:none;background:none;cursor:pointer;color:inherit}button:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{font-family:inherit;font-size:inherit;color:inherit;background:var(--bg-input);border:1px solid var(--border-color);border-radius:var(--radius-sm);padding:var(--spacing-xs) var(--spacing-sm)}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-xs);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-sm);font-size:var(--font-size-sm);font-weight:500;transition:all var(--transition-fast)}.btn-icon{width:28px;height:28px;padding:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-secondary)}.btn-icon:hover{background:var(--bg-hover);color:var(--text-primary)}.btn-icon.active{background:var(--bg-selected);color:var(--color-primary)}.btn-primary{background:var(--color-primary);color:var(--text-inverse)}.btn-primary:hover{background:var(--color-primary-hover)}.toolbar-group{display:flex;align-items:center;gap:2px;padding:0 var(--spacing-xs);border-right:1px solid var(--border-color)}.toolbar-group:last-child{border-right:none}.dropdown{position:relative}.dropdown-menu{position:absolute;top:100%;left:0;min-width:160px;background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);z-index:var(--z-dropdown);padding:var(--spacing-xs);display:none}.dropdown-menu.open{display:block}.dropdown-item{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-sm);font-size:var(--font-size-sm);color:var(--text-primary);cursor:pointer;transition:background var(--transition-fast)}.dropdown-item:hover{background:var(--bg-hover)}.dropdown-divider{height:1px;background:var(--border-color);margin:var(--spacing-xs) 0}.copyright{font-size:var(--font-size-xs);color:var(--text-muted);margin-right:var(--spacing-md);white-space:nowrap}.theme-toggle{width:28px;height:28px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;background:var(--bg-button);color:var(--text-secondary);transition:all var(--transition-fast)}.theme-toggle:hover{background:var(--bg-button-hover);color:var(--text-primary)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-color-strong);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.ol-control button{background:var(--bg-panel)!important;color:var(--text-primary)!important;border:1px solid var(--border-color)!important;border-radius:var(--radius-sm)!important}.ol-control button:hover{background:var(--bg-hover)!important}.ol-zoom{top:var(--spacing-sm)!important;right:var(--spacing-sm)!important;left:auto!important}.ol-scale-line{background:var(--map-overlay-bg)!important;border-radius:var(--radius-sm)!important}.ol-scale-line-inner{color:var(--text-primary)!important;border-color:var(--text-primary)!important;font-size:var(--font-size-xs)!important}.ol-attribution{background:var(--map-overlay-bg)!important;font-size:var(--font-size-xs)!important}.ol-attribution a{color:var(--color-primary)!important}.measure-tooltip{position:relative;background:#000c;border-radius:4px;color:#fff;padding:4px 8px;font-size:12px;font-weight:500;white-space:nowrap;pointer-events:none}.measure-tooltip.measuring{background:#ffc107e6;color:#000}.measure-tooltip.final{background:#ff9800f2;color:#000;font-weight:600}.measure-tooltip:after{content:"";position:absolute;bottom:-6px;left:50%;transform:translate(-50%);border-width:6px 6px 0;border-style:solid;border-color:rgba(0,0,0,.8) transparent transparent transparent}.measure-tooltip.measuring:after{border-color:rgba(255,193,7,.9) transparent transparent transparent}.measure-tooltip.final:after{border-color:rgba(255,152,0,.95) transparent transparent transparent}.choropleth-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:2000}.choropleth-content{background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:360px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column}.choropleth-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.choropleth-header h3{font-size:var(--font-size-md);font-weight:600;margin:0}.choropleth-close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--text-muted);border-radius:var(--radius-sm);transition:all var(--transition-fast)}.choropleth-close:hover{background:var(--bg-hover);color:var(--text-primary)}.choropleth-body{padding:var(--spacing-lg);overflow-y:auto;flex:1}.choropleth-form-group{margin-bottom:var(--spacing-md)}.choropleth-form-group label{display:block;font-size:var(--font-size-sm);font-weight:500;margin-bottom:var(--spacing-xs);color:var(--text-muted)}.choropleth-form-group select,.choropleth-form-group input[type=range]{width:100%;color:var(--text-primary);background:var(--bg-input)}.choropleth-layer-name{font-size:var(--font-size-sm);color:var(--text-primary);padding:var(--spacing-sm);background:var(--bg-app);border-radius:var(--radius-sm)}.color-ramp-preview-container{display:block;width:100%;margin-top:var(--spacing-sm)}.color-ramp-preview{display:flex;width:100%;height:24px;border-radius:var(--radius-sm);overflow:hidden;border:1px solid var(--border-color);box-shadow:inset 0 1px 3px #0000001a}.color-ramp-item{flex:1}.color-ramp-preview-labels{display:flex;justify-content:space-between;font-size:var(--font-size-xs);color:var(--text-muted);margin-top:4px}.choropleth-form-group input[type=range]{height:6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg-input);border-radius:3px;outline:none}.choropleth-form-group input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--color-primary);cursor:pointer}#classes-value{display:inline-block;margin-left:var(--spacing-sm);font-weight:600;color:var(--color-primary)}.choropleth-reverse-group .checkbox-label{display:flex;align-items:center;gap:var(--spacing-sm);cursor:pointer;font-size:var(--font-size-sm);color:var(--text-primary)}.choropleth-reverse-group .checkbox-label input[type=checkbox]{width:16px;height:16px;cursor:pointer}.custom-colors-group{padding:var(--spacing-sm);background:var(--bg-app);border-radius:var(--radius-md);border:1px solid var(--border-color)}.custom-color-inputs{display:flex;gap:var(--spacing-xs);flex-wrap:wrap;margin-bottom:var(--spacing-sm)}.custom-color-input{width:36px;height:36px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-sm);cursor:pointer;background:var(--bg-input)}.custom-color-input::-webkit-color-swatch-wrapper{padding:0}.custom-color-input::-webkit-color-swatch{border:none;border-radius:2px}.custom-color-actions{display:flex;gap:var(--spacing-xs)}.custom-color-actions .btn-sm{padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-xs);background:var(--bg-hover);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-primary)}.custom-color-actions .btn-sm:hover{background:var(--bg-active)}.choropleth-preview-legend{margin-top:var(--spacing-md);padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-md)}.legend-items{display:flex;flex-direction:column;gap:var(--spacing-xs)}.legend-item{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-xs)}.legend-color{width:24px;height:16px;border-radius:2px;flex-shrink:0}.legend-range{color:var(--text-muted)}.choropleth-footer{display:flex;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.choropleth-footer .btn{flex:1;padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:500;transition:all var(--transition-fast)}.choropleth-footer .btn-secondary{background:var(--bg-hover);color:var(--text-primary)}.choropleth-footer .btn-secondary:hover{background:var(--bg-active)}.choropleth-footer .btn-primary{background:var(--color-primary);color:#fff}.choropleth-footer .btn-primary:hover{background:var(--color-primary-dark)}.file-upload-area{border:2px dashed var(--border-color);border-radius:var(--radius-md);padding:var(--spacing-lg);text-align:center;cursor:pointer;transition:all var(--transition-fast);background:var(--bg-app)}.file-upload-area:hover,.file-upload-area.dragover{border-color:var(--color-primary);background:var(--bg-hover)}.upload-placeholder{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-sm);color:var(--text-muted)}.upload-icon{font-size:32px}.upload-success{display:flex;align-items:center;gap:var(--spacing-sm);color:var(--color-success, #10b981)}.success-icon{font-size:20px;font-weight:700}#csv-row-count{color:var(--text-muted);font-size:var(--font-size-sm)}.join-fields-list{max-height:120px;overflow-y:auto;padding:var(--spacing-sm);background:var(--bg-app);border-radius:var(--radius-sm);border:1px solid var(--border-color)}.field-checkbox{display:flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-xs) 0;cursor:pointer;font-size:var(--font-size-sm);color:var(--text-primary)}.field-checkbox input[type=checkbox]{width:16px;height:16px;cursor:pointer}.placeholder-text{color:var(--text-muted);font-size:var(--font-size-sm);text-align:center;padding:var(--spacing-sm)}.join-preview{margin-top:var(--spacing-md);padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-md);border:1px solid var(--border-color)}.preview-title{font-size:var(--font-size-sm);font-weight:600;margin-bottom:var(--spacing-sm);color:var(--text-primary)}.preview-stats{display:flex;gap:var(--spacing-lg)}.stat-item{font-size:var(--font-size-sm);color:var(--text-primary)}.stat-label{color:var(--text-muted)}#match-count{color:var(--color-success, #10b981);font-weight:600}#unmatch-count{color:var(--color-warning, #f59e0b);font-weight:600}#match-rate{color:var(--color-primary);font-weight:600}.add-layer-menu .menu-item{padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-sm);color:var(--text-primary);cursor:pointer;border-radius:var(--radius-sm);transition:background var(--transition-fast)}.add-layer-menu .menu-item:hover{background:var(--bg-hover)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:2000;opacity:0;visibility:hidden;transition:opacity var(--transition-fast),visibility var(--transition-fast)}.modal-overlay.active{opacity:1;visibility:visible}.modal{background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:360px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;transform:scale(.9);transition:transform var(--transition-fast)}.modal-overlay.active .modal{transform:scale(1)}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.modal-header h3{margin:0;font-size:var(--font-size-md);font-weight:600}.modal-close{background:none;border:none;font-size:24px;color:var(--text-muted);cursor:pointer;padding:0;line-height:1;transition:color var(--transition-fast)}.modal-close:hover{color:var(--text-primary)}.modal-body{padding:var(--spacing-lg);overflow-y:auto;flex:1}.modal-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.form-control{width:100%;padding:var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:var(--font-size-sm)}.form-control:focus{outline:none;border-color:var(--color-primary)}.label-modal{max-width:400px}.form-range{flex:1;margin-right:var(--spacing-sm)}.form-control-color{width:50px;height:30px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-sm);cursor:pointer}.form-group{display:flex;align-items:center;gap:var(--spacing-sm);margin-bottom:var(--spacing-md)}.form-group label{min-width:80px;font-size:var(--font-size-sm)}.buffer-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:2000}.buffer-content{background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:360px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column}.buffer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.buffer-header h3{font-size:var(--font-size-md);font-weight:600;margin:0}.buffer-close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--text-muted);border-radius:var(--radius-sm);transition:all var(--transition-fast)}.buffer-close:hover{background:var(--bg-hover);color:var(--text-primary)}.buffer-body{padding:var(--spacing-lg);overflow-y:auto;flex:1}.buffer-form-group{margin-bottom:var(--spacing-md)}.buffer-form-group label{display:block;font-size:var(--font-size-sm);font-weight:500;margin-bottom:var(--spacing-xs);color:var(--text-muted)}.buffer-form-group select,.buffer-form-group input[type=number],.buffer-form-group input[type=range]{width:100%;padding:var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary)}.buffer-form-group input[type=color]{width:60px;height:32px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-sm);cursor:pointer}.buffer-form-group input[type=checkbox]{margin-right:var(--spacing-xs)}.buffer-layer-name{font-size:var(--font-size-sm);color:var(--text-primary);padding:var(--spacing-sm);background:var(--bg-app);border-radius:var(--radius-sm)}#buffer-opacity-value{display:inline-block;margin-left:var(--spacing-sm);font-weight:600;color:var(--color-primary)}.buffer-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.export-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:2000}.export-content{background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:380px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column}.export-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.export-header h3{font-size:var(--font-size-md);font-weight:600;margin:0}.export-close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--text-muted);border-radius:var(--radius-sm);transition:all var(--transition-fast)}.export-close:hover{background:var(--bg-hover);color:var(--text-primary)}.export-body{padding:var(--spacing-lg);overflow-y:auto;flex:1}.export-form-group{margin-bottom:var(--spacing-md)}.export-form-group label{display:block;font-size:var(--font-size-sm);font-weight:500;margin-bottom:var(--spacing-xs);color:var(--text-muted)}.export-form-group input[type=text],.export-form-group select{width:100%;padding:var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary)}.export-form-group input[type=range]{width:calc(100% - 50px);vertical-align:middle}#export-quality-value{display:inline-block;width:40px;text-align:right;font-weight:600;color:var(--color-primary)}.export-preview{margin-top:var(--spacing-md);padding:var(--spacing-lg);background:var(--bg-app);border-radius:var(--radius-md);text-align:center;color:var(--text-muted);font-size:var(--font-size-sm)}.export-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.field-calc-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:2000}.field-calc-content{background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:500px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column}.field-calc-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.field-calc-header h3{font-size:var(--font-size-md);font-weight:600;margin:0}.field-calc-close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--text-muted);border-radius:var(--radius-sm);transition:all var(--transition-fast)}.field-calc-close:hover{background:var(--bg-hover);color:var(--text-primary)}.field-calc-body{padding:var(--spacing-lg);overflow-y:auto;flex:1}.field-calc-info{margin-bottom:var(--spacing-md);padding:var(--spacing-sm);background:var(--bg-app);border-radius:var(--radius-sm);font-size:var(--font-size-sm)}.field-calc-row{display:flex;gap:var(--spacing-md);margin-bottom:var(--spacing-md)}.field-calc-col{flex:1}.field-calc-col label{display:block;font-size:var(--font-size-sm);margin-bottom:var(--spacing-xs);color:var(--text-muted)}.field-calc-col input[type=text],.field-calc-col select{width:100%;padding:var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary)}.field-calc-col input:disabled,.field-calc-col select:disabled{opacity:.5;cursor:not-allowed}.field-calc-section{margin-bottom:var(--spacing-md)}.field-calc-section label{display:block;font-size:var(--font-size-sm);margin-bottom:var(--spacing-xs);color:var(--text-muted)}.field-calc-section textarea{width:100%;padding:var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-family:monospace;resize:vertical}.field-calc-helpers{display:flex;flex-direction:column;gap:var(--spacing-sm)}.helper-section{padding:var(--spacing-sm);background:var(--bg-app);border-radius:var(--radius-sm)}.helper-section label{display:block;font-size:var(--font-size-xs);color:var(--text-muted);margin-bottom:var(--spacing-xs)}.helper-buttons{display:flex;flex-wrap:wrap;gap:4px}.helper-buttons button{padding:4px 8px;font-size:var(--font-size-xs);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-panel);color:var(--text-primary);cursor:pointer;transition:all var(--transition-fast)}.helper-buttons button:hover{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.helper-buttons .field-btn{font-family:monospace;color:var(--color-primary)}.helper-buttons .geo-btn{color:#22c55e}.helper-buttons .no-fields{font-size:var(--font-size-xs);color:var(--text-muted)}.field-calc-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.spatial-ops-modal .modal-content{max-width:450px;background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.spatial-ops-modal .modal-body{padding:var(--spacing-lg)}.spatial-ops-modal .form-group{margin-bottom:var(--spacing-md)}.spatial-ops-modal .form-group label{display:block;margin-bottom:var(--spacing-xs);font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary)}.spatial-ops-modal .form-group select{width:100%;padding:var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:var(--font-size-sm)}.operation-description{background:var(--bg-hover);border-radius:var(--radius-sm);padding:var(--spacing-sm) var(--spacing-md);margin-bottom:var(--spacing-md)}.operation-description p{margin:0;font-size:var(--font-size-sm);color:var(--text-muted)}.operation-preview{display:flex;justify-content:center;padding:var(--spacing-md)}.preview-diagram{position:relative;width:150px;height:100px}.preview-shape{position:absolute;width:70px;height:70px;border-radius:50%;opacity:.5;transition:all var(--transition-fast)}.preview-shape.shape1{background:#3b82f6;left:10px;top:15px}.preview-shape.shape2{background:#ef4444;left:70px;top:15px}.preview-diagram.intersect .preview-shape.shape1,.preview-diagram.intersect .preview-shape.shape2{opacity:.3}.preview-diagram.intersect:after{content:"";position:absolute;width:30px;height:50px;background:#22c55e;border-radius:50%;left:60px;top:25px;opacity:.8}.preview-diagram.union .preview-shape,.preview-diagram.difference .preview-shape.shape1{opacity:.7}.preview-diagram.difference .preview-shape.shape2{opacity:.3;border:2px dashed #ef4444;background:transparent}.preview-diagram.clip .preview-shape.shape1{opacity:.7}.preview-diagram.clip .preview-shape.shape2{opacity:.3;border:2px solid #ef4444;background:transparent}.heatmap-modal .modal-content{max-width:400px;background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.heatmap-modal .modal-body{padding:var(--spacing-lg)}.heatmap-modal .form-group{display:block;margin-bottom:var(--spacing-md)}.heatmap-modal .form-group label{display:block;margin-bottom:var(--spacing-xs);font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary)}.heatmap-modal .form-group select,.heatmap-modal .form-group input[type=range]{width:100%}.heatmap-modal .form-group select{padding:var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:var(--font-size-sm)}.gradient-preview-container{display:block;width:100%;margin-top:var(--spacing-sm);clear:both}.gradient-preview{display:block;width:100%;height:24px;border-radius:var(--radius-sm);border:1px solid var(--border-color);box-shadow:inset 0 1px 3px #0000001a}.gradient-preview-labels{display:flex;justify-content:space-between;font-size:var(--font-size-xs);color:var(--text-muted);margin-top:4px}.bookmark-modal .modal-content{max-width:400px;background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.bookmark-modal .modal-body{padding:var(--spacing-lg)}.bookmark-add-section{display:flex;gap:var(--spacing-sm);margin-bottom:var(--spacing-md)}.bookmark-add-section input{flex:1;padding:var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:var(--font-size-sm)}.bookmark-list-section{max-height:300px;overflow-y:auto}.bookmark-list{display:flex;flex-direction:column;gap:var(--spacing-xs)}.no-bookmarks{text-align:center;color:var(--text-muted);font-size:var(--font-size-sm);padding:var(--spacing-lg)}.bookmark-item{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-hover);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast)}.bookmark-item:hover{background:var(--bg-active)}.bookmark-info{display:flex;flex-direction:column;gap:2px}.bookmark-name{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary)}.bookmark-date{font-size:var(--font-size-xs);color:var(--text-muted)}.bookmark-actions{display:flex;gap:var(--spacing-xs)}.bookmark-actions button{opacity:.6;transition:opacity var(--transition-fast)}.bookmark-actions button:hover{opacity:1}.bookmark-delete:hover{color:var(--color-danger)}.bookmark-modal .modal-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.btn-sm{padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-xs)}.coord-import-modal .modal-content{max-width:450px;background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.coord-import-modal .modal-body{padding:var(--spacing-lg)}.coord-import-modal .form-group{margin-bottom:var(--spacing-md)}.coord-import-modal .form-group label{display:block;margin-bottom:var(--spacing-xs);font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary)}.coord-import-modal .form-group select,.coord-import-modal .form-group input[type=text]{width:100%;padding:var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:var(--font-size-sm)}.coord-preview{margin-top:var(--spacing-md);padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-md);border:1px solid var(--border-color)}.coord-preview .preview-title{font-size:var(--font-size-sm);font-weight:600;margin-bottom:var(--spacing-sm);color:var(--text-primary)}.coord-preview .preview-info{display:flex;gap:var(--spacing-lg);font-size:var(--font-size-sm);color:var(--text-primary)}.coord-preview .preview-info strong{color:var(--color-primary)}.coord-import-modal .modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.coord-import-modal .modal-header h3{margin:0;font-size:var(--font-size-md);font-weight:600;color:var(--text-primary)}.coord-import-modal .modal-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.chart-map-modal .modal-content{max-width:450px;background:var(--bg-panel)}.chart-map-modal .modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.chart-map-modal .modal-header h3{margin:0;font-size:var(--font-size-md);font-weight:600;color:var(--text-primary)}.chart-map-modal .modal-body{padding:var(--spacing-lg);max-height:60vh;overflow-y:auto}.chart-map-modal .modal-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.chart-map-modal .field-list{max-height:150px;overflow-y:auto;border:1px solid var(--border-color);border-radius:var(--radius-md);padding:var(--spacing-sm);background:var(--bg-app)}.chart-map-modal .field-checkbox{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-xs) var(--spacing-sm);cursor:pointer;border-radius:var(--radius-sm);color:var(--text-primary)}.chart-map-modal .field-checkbox:hover{background:var(--bg-hover)}.chart-map-modal .color-box{width:14px;height:14px;border-radius:2px;flex-shrink:0}.chart-map-modal .no-fields{color:var(--text-secondary);font-size:var(--font-size-sm);padding:var(--spacing-sm)}.chart-map-modal .chart-preview{margin-top:var(--spacing-md);padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-md);border:1px solid var(--border-color)}.chart-map-modal .preview-title{font-size:var(--font-size-sm);font-weight:600;margin-bottom:var(--spacing-sm);color:var(--text-primary)}.chart-map-modal .preview-legend{display:flex;flex-wrap:wrap;gap:var(--spacing-sm)}.chart-map-modal .legend-item{display:flex;align-items:center;gap:var(--spacing-xs);font-size:var(--font-size-sm);color:var(--text-primary)}.chart-map-modal .legend-color{width:12px;height:12px;border-radius:2px}.chart-map-modal .no-selection{color:var(--text-secondary);font-size:var(--font-size-sm)}.chart-overlay{pointer-events:none}.chart-overlay svg{filter:drop-shadow(0 2px 4px rgba(0,0,0,.3))}.chart-map-legend{position:absolute;bottom:40px;right:10px;background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:var(--spacing-sm) var(--spacing-md);box-shadow:var(--shadow-md);z-index:100;max-width:250px}.chart-legend-title{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-sm);padding-bottom:var(--spacing-xs);border-bottom:1px solid var(--border-color)}.chart-legend-items{display:flex;flex-direction:column;gap:var(--spacing-xs)}.chart-legend-item{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-xs);color:var(--text-primary)}.chart-legend-color{width:14px;height:14px;border-radius:2px;flex-shrink:0}.chart-legend-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.heatmap-legend{position:absolute;bottom:40px;left:10px;background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:var(--spacing-sm) var(--spacing-md);box-shadow:var(--shadow-md);z-index:100;min-width:150px}.heatmap-legend-title{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-sm)}.heatmap-legend-bar{height:16px;border-radius:4px;margin-bottom:var(--spacing-xs)}.heatmap-legend-labels{display:flex;justify-content:space-between;font-size:var(--font-size-xs);color:var(--text-muted)}.choropleth-legend{position:absolute;bottom:40px;left:10px;background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:var(--spacing-sm) var(--spacing-md);box-shadow:var(--shadow-md);z-index:100;max-width:200px}.choropleth-legend-title{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-xs)}.choropleth-legend-subtitle{font-size:var(--font-size-xs);color:var(--text-muted);margin-bottom:var(--spacing-sm);padding-bottom:var(--spacing-xs);border-bottom:1px solid var(--border-color)}.choropleth-legend-items{display:flex;flex-direction:column;gap:2px}.choropleth-legend-item{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-xs);color:var(--text-primary)}.choropleth-legend-color{width:20px;height:14px;border-radius:2px;flex-shrink:0;border:1px solid var(--border-color)}.choropleth-legend-label{white-space:nowrap}.isochrone-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal)}.isochrone-modal .modal-content,.isochrone-content{max-width:550px;background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);overflow:hidden}.isochrone-modal .modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.isochrone-modal .modal-header h3{margin:0;font-size:var(--font-size-md);font-weight:600;color:var(--text-primary)}.isochrone-modal .modal-close{background:none;border:none;font-size:24px;cursor:pointer;color:var(--text-muted);padding:0;line-height:1}.isochrone-modal .modal-close:hover{color:var(--text-primary)}.isochrone-modal .modal-body{padding:var(--spacing-lg);max-height:60vh;overflow-y:auto}.isochrone-modal .modal-footer{display:flex;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color);justify-content:flex-end}.isochrone-modal .form-group{margin-bottom:var(--spacing-md)}.isochrone-modal .form-group label{display:block;font-size:var(--font-size-sm);font-weight:500;margin-bottom:var(--spacing-xs);color:var(--text-muted)}.isochrone-modal .form-group select,.isochrone-modal .form-group input[type=text],.isochrone-modal .form-group input[type=password]{width:100%;padding:var(--spacing-sm);background:var(--bg-input);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-primary)}.api-key-input-group{display:flex;gap:var(--spacing-xs)}.api-key-input-group input{flex:1}.api-key-input-group .btn-sm{padding:var(--spacing-xs) var(--spacing-sm);background:var(--bg-hover);border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:var(--font-size-xs)}.form-hint{display:block;margin-top:var(--spacing-xs);font-size:var(--font-size-xs);color:var(--text-muted)}.form-hint a{color:var(--color-primary)}.point-selection{display:flex;gap:var(--spacing-sm);align-items:center}.point-display{flex:1;padding:var(--spacing-sm);background:var(--bg-app);border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:var(--font-size-sm);color:var(--text-muted);font-family:monospace}.point-display.has-point{color:var(--text-primary)}.interval-checkboxes{display:flex;flex-wrap:wrap;gap:var(--spacing-sm)}.interval-checkbox{display:flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-xs) var(--spacing-sm);background:var(--bg-app);border:1px solid var(--border-color);border-radius:var(--radius-sm);cursor:pointer;font-size:var(--font-size-sm)}.interval-checkbox:hover{background:var(--bg-hover)}.interval-checkbox input:checked+span{color:var(--color-primary);font-weight:500}.intervals-input{display:flex;flex-direction:column;gap:var(--spacing-xs)}.intervals-input input[type=text]{width:100%;padding:var(--spacing-sm);background:var(--bg-input);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--font-size-sm)}.intervals-input input[type=text]:focus{outline:none;border-color:var(--color-primary)}.isochrone-info{padding:var(--spacing-sm);background:var(--bg-app);border-radius:var(--radius-sm);font-size:var(--font-size-xs);color:var(--text-muted)}.isochrone-info p{margin:0}.isochrone-legend{position:absolute;bottom:40px;left:10px;background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:var(--spacing-sm) var(--spacing-md);box-shadow:var(--shadow-md);z-index:100;min-width:130px}.isochrone-legend-title{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-sm);padding-bottom:var(--spacing-xs);border-bottom:1px solid var(--border-color)}.isochrone-legend-items{display:flex;flex-direction:column;gap:2px}.isochrone-legend-item{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-xs);color:var(--text-primary)}.isochrone-legend-color{width:20px;height:14px;border-radius:2px;flex-shrink:0;border:1px solid var(--border-color)}.isochrone-legend-label{white-space:nowrap}.routing-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal)}.routing-modal .modal-content,.routing-content{max-width:550px;background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);overflow:hidden}.routing-modal .modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.routing-modal .modal-header h3{margin:0;font-size:var(--font-size-md);font-weight:600;color:var(--text-primary)}.routing-modal .modal-close{background:none;border:none;font-size:24px;cursor:pointer;color:var(--text-muted);padding:0;line-height:1}.routing-modal .modal-close:hover{color:var(--text-primary)}.routing-modal .modal-body{padding:var(--spacing-lg);max-height:60vh;overflow-y:auto}.routing-modal .modal-footer{display:flex;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color);justify-content:flex-end}.routing-modal .form-group{margin-bottom:var(--spacing-md)}.routing-modal .form-group label{display:block;font-size:var(--font-size-sm);font-weight:500;margin-bottom:var(--spacing-xs);color:var(--text-muted)}.routing-modal .form-group select,.routing-modal .form-group input[type=text],.routing-modal .form-group input[type=password]{width:100%;padding:var(--spacing-sm);background:var(--bg-input);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-primary)}.routing-points-section{background:var(--bg-app);border-radius:var(--radius-md);padding:var(--spacing-md);margin-bottom:var(--spacing-md)}.routing-point-group{margin-bottom:var(--spacing-sm)}.routing-point-group:last-child{margin-bottom:0}.routing-point-header{display:flex;align-items:center;gap:var(--spacing-sm);margin-bottom:var(--spacing-xs)}.routing-point-marker{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);font-weight:600;color:#fff;flex-shrink:0}.routing-point-marker.start{background:#22c55e}.routing-point-marker.end{background:#ef4444}.routing-point-marker.waypoint{background:#3b82f6}.routing-point-label{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary);flex:1}.routing-point-selects{display:flex;gap:var(--spacing-xs);padding-left:32px}.routing-layer-select{width:40%;padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-xs);background:var(--bg-input);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-primary)}.routing-feature-select{flex:1;padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-xs);background:var(--bg-input);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-primary)}.swap-btn{margin-left:auto}.swap-btn:hover{background:var(--color-primary);color:#fff}.waypoints-container{border-left:2px dashed var(--border-color);margin-left:11px;padding-left:var(--spacing-md);margin-top:var(--spacing-xs);margin-bottom:var(--spacing-xs)}.waypoints-container .routing-point-selects{padding-left:32px}.add-waypoint-container{display:flex;justify-content:center;padding:var(--spacing-xs) 0;margin-left:32px}.add-waypoint-container .btn{font-size:var(--font-size-xs);padding:var(--spacing-xs) var(--spacing-sm);background:var(--bg-hover);border:1px dashed var(--border-color);color:var(--text-muted)}.add-waypoint-container .btn:hover{background:var(--bg-active);border-color:var(--color-primary);color:var(--color-primary)}.remove-waypoint-btn{width:20px;height:20px;padding:0;font-size:14px;line-height:1;border-radius:50%;background:var(--bg-hover);color:var(--text-muted)}.remove-waypoint-btn:hover{background:#ef4444;color:#fff}.route-result{background:var(--bg-app);border-radius:var(--radius-md);padding:var(--spacing-md);margin-bottom:var(--spacing-md)}.route-result-title{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-sm);padding-bottom:var(--spacing-xs);border-bottom:1px solid var(--border-color)}.route-result-content{display:flex;gap:var(--spacing-lg)}.route-stat{display:flex;flex-direction:column;gap:2px}.route-stat-label{font-size:var(--font-size-xs);color:var(--text-muted)}.route-stat-value{font-size:var(--font-size-md);font-weight:600;color:var(--color-primary)}.routing-info{padding:var(--spacing-sm);background:var(--bg-app);border-radius:var(--radius-sm);font-size:var(--font-size-xs);color:var(--text-muted)}.routing-info p{margin:0}.drawing-modal .modal-content{max-width:400px;background:var(--bg-panel)}.drawing-modal .modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.drawing-modal .modal-header h3{margin:0;font-size:var(--font-size-md);font-weight:600;color:var(--text-primary)}.drawing-modal .modal-body{padding:var(--spacing-lg)}.drawing-modal .modal-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.geometry-type-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--spacing-sm)}.geo-type-btn{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-md);background:var(--bg-app);border:1px solid var(--border-color);border-radius:var(--radius-md);cursor:pointer;color:var(--text-primary);transition:all .2s}.geo-type-btn:hover{background:var(--bg-hover);border-color:var(--color-primary)}.geo-type-btn.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.geo-type-btn svg{width:24px;height:24px}.geo-type-btn span{font-size:var(--font-size-xs)}.drawing-status{margin-top:var(--spacing-md);padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-md);border:1px solid var(--border-color)}.drawing-status .status-info{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--spacing-sm);color:var(--text-primary);font-size:var(--font-size-sm)}.drawing-status .status-actions{display:flex;gap:var(--spacing-sm)}.btn-small{padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-xs)}.restore-modal{position:fixed;top:0;left:0;width:100%;height:100%;background:#0009;display:flex;align-items:center;justify-content:center;z-index:10000}.restore-content{background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);max-width:400px;width:90%;animation:modalFadeIn .2s ease-out}@keyframes modalFadeIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.restore-content .modal-header{padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.restore-content .modal-header h3{margin:0;font-size:var(--font-size-lg);color:var(--text-primary)}.restore-content .modal-body{padding:var(--spacing-lg)}.restore-content .modal-body p{margin:0;color:var(--text-secondary);line-height:1.6}.restore-content .modal-footer{padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color);display:flex;justify-content:flex-end;gap:var(--spacing-sm)}.cloud-modal .modal-content{max-width:520px;width:90vw}.cloud-content{background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.cloud-content .modal-header{padding:var(--spacing-lg) var(--spacing-xl);border-bottom:1px solid var(--border-color);display:flex;justify-content:space-between;align-items:center}.cloud-content .modal-header h3{margin:0;font-size:var(--font-size-xl)}.cloud-content .modal-body{padding:var(--spacing-xl)}.cloud-content .form-group{display:block;margin-bottom:var(--spacing-lg)}.cloud-content .form-group label{display:block;font-size:var(--font-size-md);margin-bottom:var(--spacing-sm);color:var(--text-secondary)}.cloud-content .form-group input{width:100%;padding:var(--spacing-md);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:var(--font-size-md)}.cloud-info{background:var(--bg-app);padding:var(--spacing-md);border-radius:var(--radius-md);margin-bottom:var(--spacing-md);font-size:var(--font-size-sm);line-height:1.6}.cloud-info p{margin:0 0 var(--spacing-sm) 0}.cloud-info ol{margin:0;padding-left:var(--spacing-lg)}.cloud-info a{color:var(--color-primary)}.sql-details{margin-bottom:var(--spacing-md);font-size:var(--font-size-sm)}.sql-details summary{cursor:pointer;color:var(--color-primary);margin-bottom:var(--spacing-sm)}.sql-code{background:var(--bg-app);padding:var(--spacing-sm);border-radius:var(--radius-sm);font-size:var(--font-size-xs);overflow-x:auto;white-space:pre}.cloud-tabs{display:flex;gap:var(--spacing-xs);margin-bottom:var(--spacing-md);border-bottom:1px solid var(--border-color);padding-bottom:var(--spacing-xs)}.cloud-tab{padding:var(--spacing-sm) var(--spacing-md);border:none;background:none;color:var(--text-secondary);cursor:pointer;font-size:var(--font-size-sm);border-bottom:2px solid transparent;margin-bottom:-1px}.cloud-tab:hover{color:var(--text-primary)}.cloud-tab.active{color:var(--color-primary);border-bottom-color:var(--color-primary)}.btn-full{width:100%;margin-top:var(--spacing-md);padding:var(--spacing-md) var(--spacing-lg);font-size:var(--font-size-md)}.cloud-reset-config{margin-top:var(--spacing-lg);text-align:center}.btn-link{background:none;border:none;color:var(--text-muted);font-size:var(--font-size-xs);cursor:pointer;text-decoration:underline}.btn-link:hover{color:var(--text-primary)}.cloud-user-info{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-sm);margin-bottom:var(--spacing-md)}.user-email{font-size:var(--font-size-sm);color:var(--text-primary)}.admin-badge{display:inline-block;padding:2px 6px;margin-left:var(--spacing-xs);font-size:var(--font-size-xs);font-weight:600;color:#fff;background:var(--color-primary);border-radius:var(--radius-sm)}.header-auth{display:flex;align-items:center;gap:var(--spacing-sm);margin-right:var(--spacing-md)}.header-auth .btn-primary{color:#fff!important}.header-auth .btn-secondary{color:var(--text-primary)}.admin-badge{color:#fff!important}.header-user-email{font-size:var(--font-size-sm);color:var(--text-secondary)}.cloud-actions{margin-bottom:var(--spacing-md)}.cloud-actions button{width:100%;display:flex;align-items:center;justify-content:center;gap:var(--spacing-sm)}.cloud-project-list{max-height:300px;overflow-y:auto}.project-item{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-sm) var(--spacing-md);border:1px solid var(--border-color);border-radius:var(--radius-sm);margin-bottom:var(--spacing-xs)}.project-info{display:flex;flex-direction:column;gap:2px}.project-name{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary)}.project-date{font-size:var(--font-size-xs);color:var(--text-muted)}.project-actions{display:flex;gap:var(--spacing-xs)}.empty-list,.loading,.error{text-align:center;padding:var(--spacing-lg);color:var(--text-muted);font-size:var(--font-size-sm)}.error{color:var(--color-danger)}.btn-danger{background:var(--color-danger);color:#fff}.btn-danger:hover{background:#dc2626}.btn-google{display:flex;align-items:center;justify-content:center;gap:var(--spacing-sm);background:#fff;color:#444;border:1px solid var(--border-color);font-weight:500}.btn-google:hover{background:#f8f8f8;border-color:#aaa}.btn-google svg{flex-shrink:0}.login-divider{display:flex;align-items:center;margin:var(--spacing-md) 0}.login-divider:before,.login-divider:after{content:"";flex:1;height:1px;background:var(--border-color)}.login-divider span{padding:0 var(--spacing-md);color:var(--text-muted);font-size:var(--font-size-xs)}.mypage-modal .mypage-content{width:480px;max-width:95vw;background:var(--bg-panel);border-radius:var(--radius-md);box-shadow:var(--shadow-lg)}.mypage-tabs{display:flex;gap:var(--spacing-xs);margin-bottom:var(--spacing-md);border-bottom:1px solid var(--border-color);padding-bottom:var(--spacing-sm)}.mypage-tab{padding:var(--spacing-xs) var(--spacing-md);font-size:var(--font-size-sm);color:var(--text-muted);border:none;background:none;cursor:pointer;border-radius:var(--radius-sm);transition:all var(--transition-fast)}.mypage-tab:hover{color:var(--text-primary);background:var(--bg-hover)}.mypage-tab.active{color:var(--color-primary);background:var(--color-primary-light);font-weight:500}.mypage-tab-content{padding:var(--spacing-sm) 0}.profile-email{display:flex;flex-direction:column;gap:var(--spacing-xs);padding:var(--spacing-sm);background:var(--bg-app);border-radius:var(--radius-sm);margin-bottom:var(--spacing-md)}.profile-email label{font-size:var(--font-size-xs);color:var(--text-muted)}.profile-email span{font-size:var(--font-size-sm);color:var(--text-primary);font-weight:500}.my-school-info{margin-bottom:var(--spacing-lg)}.my-school-card{background:var(--color-primary-light);border:1px solid var(--color-primary);border-radius:var(--radius-md);padding:var(--spacing-md)}.my-school-name{font-size:var(--font-size-lg);font-weight:600;color:var(--color-primary);margin-bottom:var(--spacing-sm)}.my-school-stats{display:flex;gap:var(--spacing-lg)}.stat-item{display:flex;align-items:baseline;gap:var(--spacing-xs)}.stat-value{font-size:var(--font-size-xl);font-weight:700;color:var(--text-primary)}.stat-label{font-size:var(--font-size-sm);color:var(--text-muted)}.no-school-info{padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-sm);color:var(--text-muted);text-align:center;font-size:var(--font-size-sm)}.school-ranking h4{font-size:var(--font-size-sm);color:var(--text-secondary);margin-bottom:var(--spacing-sm)}.ranking-list{border:1px solid var(--border-color);border-radius:var(--radius-sm);overflow:hidden}.ranking-item{display:flex;align-items:center;padding:var(--spacing-sm) var(--spacing-md);border-bottom:1px solid var(--border-color);font-size:var(--font-size-sm)}.ranking-item:last-child{border-bottom:none}.ranking-item.my-school{background:var(--color-primary-light)}.ranking-position{width:30px;font-weight:600;color:var(--text-muted)}.ranking-item:nth-child(1) .ranking-position{color:gold}.ranking-item:nth-child(2) .ranking-position{color:silver}.ranking-item:nth-child(3) .ranking-position{color:#cd7f32}.ranking-school{flex:1;color:var(--text-primary)}.ranking-count{font-weight:500;color:var(--color-primary)}.ranking-more{padding:var(--spacing-sm);text-align:center;font-size:var(--font-size-xs);color:var(--text-muted)}.school-registration-section{margin-top:var(--spacing-md);padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-sm);border:1px solid var(--border-color)}.school-registration-section h4{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-sm)}.current-school{margin-bottom:var(--spacing-md)}.school-badge{display:inline-block;padding:var(--spacing-xs) var(--spacing-sm);background:var(--color-primary);color:var(--text-inverse);border-radius:var(--radius-sm);font-size:var(--font-size-sm);font-weight:500}.school-registration-section select{width:100%;padding:var(--spacing-xs) var(--spacing-sm);border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:var(--font-size-sm)}.admin-section{padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-sm);border:1px solid var(--border-color)}.admin-section h4{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-sm)}.admin-warning{font-size:var(--font-size-xs);color:var(--color-danger);margin-bottom:var(--spacing-md)}.btn-danger{background:var(--color-danger);color:#fff!important}.btn-danger:hover{background:#c0392b}.toolbar-search{position:relative;margin-left:var(--spacing-md)}.search-input-wrapper{position:relative;display:flex;align-items:center}.search-input-wrapper .search-icon{position:absolute;left:8px;color:var(--text-muted);pointer-events:none}#location-search-input{width:220px;padding:6px 28px 6px 30px;border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-input);font-size:var(--font-size-sm);transition:all var(--transition-fast)}#location-search-input:focus{width:280px;border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}#location-search-input::placeholder{color:var(--text-muted)}.search-clear{position:absolute;right:6px;width:18px;height:18px;padding:0;background:var(--bg-hover);border-radius:50%;color:var(--text-muted);display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.search-clear:hover{background:var(--text-muted);color:var(--bg-panel)}.search-results{position:absolute;top:100%;right:0;width:350px;max-height:400px;overflow-y:auto;background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);margin-top:4px;z-index:1000}.search-result-item{padding:var(--spacing-sm) var(--spacing-md);cursor:pointer;border-bottom:1px solid var(--border-color);transition:background var(--transition-fast)}.search-result-item:last-child{border-bottom:none}.search-result-item:hover{background:var(--bg-hover)}.search-result-item.selected{background:var(--bg-selected)}.search-result-name{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary);margin-bottom:2px}.search-result-address{font-size:var(--font-size-xs);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-result-type{display:inline-block;font-size:10px;padding:1px 6px;background:var(--color-primary-light);color:var(--color-primary);border-radius:var(--radius-sm);margin-right:var(--spacing-xs)}.search-loading,.search-empty{padding:var(--spacing-md);text-align:center;color:var(--text-muted);font-size:var(--font-size-sm)}.search-loading:before{content:"검색 중..."}.search-empty:before{content:"검색 결과가 없습니다"}.raster-analysis-modal .modal-content,.raster-analysis-content{max-width:450px;background:var(--bg-panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);overflow:hidden}.raster-analysis-modal .modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color)}.raster-analysis-modal .modal-header h3{margin:0;font-size:var(--font-size-md);font-weight:600;color:var(--text-primary)}.raster-analysis-modal .modal-body{padding:var(--spacing-lg);max-height:60vh;overflow-y:auto}.raster-analysis-modal .modal-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.analysis-description{background:var(--bg-app);border-radius:var(--radius-md);padding:var(--spacing-md);margin-bottom:var(--spacing-lg)}.analysis-description p{margin:0;font-size:var(--font-size-sm);color:var(--text-secondary);line-height:1.5}.range-labels{display:flex;justify-content:space-between;font-size:var(--font-size-xs);color:var(--text-muted);margin-top:var(--spacing-xs)}.slope-legend{margin-top:var(--spacing-lg);padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-md)}.legend-title{font-size:var(--font-size-sm);font-weight:600;margin-bottom:var(--spacing-sm);color:var(--text-primary)}.legend-gradient{height:20px;border-radius:var(--radius-sm);margin-bottom:var(--spacing-xs)}.slope-gradient{background:linear-gradient(to right,#0f0,#80ff00,#ff0,#ff8000,red,maroon)}.legend-labels{display:flex;justify-content:space-between;font-size:var(--font-size-xs);color:var(--text-muted)}.aspect-legend{margin-top:var(--spacing-lg);padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-md)}.aspect-compass{position:relative;width:120px;height:120px;margin:var(--spacing-md) auto;border-radius:50%;background:conic-gradient(from 0deg,#d92626,#d9ac26,#80d926,#26d953,#26d9d9,#2653d9,#7f26d9,#d926ac,#d92626);border:2px solid var(--border-color)}.compass-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:40px;height:40px;background:var(--bg-panel);border-radius:50%;border:2px solid var(--border-color)}.compass-n,.compass-e,.compass-s,.compass-w{position:absolute;font-size:var(--font-size-xs);font-weight:600;color:var(--text-primary)}.compass-n{top:-20px;left:50%;transform:translate(-50%)}.compass-e{right:-15px;top:50%;transform:translateY(-50%)}.compass-s{bottom:-20px;left:50%;transform:translate(-50%)}.compass-w{left:-15px;top:50%;transform:translateY(-50%)}.contour-preview{margin-top:var(--spacing-lg);padding:var(--spacing-md);background:var(--bg-app);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:var(--spacing-sm)}.contour-preview span{font-size:var(--font-size-sm);color:var(--text-secondary)}.contour-line{height:2px;width:60px;border-radius:1px}.contour-line.major{height:3px;background:#8b4513}.contour-line.minor{background:sienna}.raster-analysis-legend{position:absolute;bottom:40px;right:10px;background:var(--bg-panel);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:var(--spacing-sm) var(--spacing-md);box-shadow:var(--shadow-md);z-index:100;min-width:140px;max-width:180px}.raster-legend-title{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-sm);padding-bottom:var(--spacing-xs);border-bottom:1px solid var(--border-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.raster-legend-content{display:flex;flex-direction:column;gap:var(--spacing-xs)}.raster-legend-labels{display:flex;justify-content:space-between;font-size:var(--font-size-xs);color:var(--text-muted)}.hillshade-gradient{height:16px;border-radius:2px;background:linear-gradient(to right,#000,#fff);border:1px solid var(--border-color)}.slope-legend-gradient{height:16px;border-radius:2px;background:linear-gradient(to right,green,#80c000,#ff0,#ff8000,red,maroon);border:1px solid var(--border-color)}.slope-legend-desc{display:flex;justify-content:space-between;font-size:var(--font-size-xs);margin-top:2px}.slope-legend-desc .gentle{color:#0a0}.slope-legend-desc .steep{color:#c00}.aspect-legend-compass{position:relative;width:80px;height:80px;margin:var(--spacing-sm) auto}.aspect-compass-ring{position:absolute;top:0;left:0;width:80px;height:80px;border-radius:50%;background:conic-gradient(from 0deg,#d92626,#d9ac26,#80d926,#26d953,#26d9d9,#2653d9,#7f26d9,#d926ac,#d92626);border:1px solid var(--border-color)}.aspect-compass-ring:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:30px;height:30px;background:var(--bg-panel);border-radius:50%;border:1px solid var(--border-color)}.aspect-compass-label{position:absolute;font-size:10px;font-weight:600;color:var(--text-primary);z-index:1}.aspect-compass-label.n{top:-16px;left:50%;transform:translate(-50%)}.aspect-compass-label.e{right:-12px;top:50%;transform:translateY(-50%)}.aspect-compass-label.s{bottom:-16px;left:50%;transform:translate(-50%)}.aspect-compass-label.w{left:-14px;top:50%;transform:translateY(-50%)}.aspect-legend-items{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-top:var(--spacing-sm)}.aspect-item{display:flex;align-items:center;gap:4px;font-size:10px;color:var(--text-secondary)}.aspect-color{width:12px;height:12px;border-radius:2px;border:1px solid var(--border-color);flex-shrink:0}
