:root{--sidebar-width: 56px;--panel-width: 320px;--infobar-height: 40px;--header-height: 48px;--glass-bg: rgba(255, 255, 255, .82);--glass-bg-strong: rgba(255, 255, 255, .92);--glass-border: rgba(255, 255, 255, .35);--glass-blur: 20px;--glass-shadow: 0 8px 32px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--glass-shadow-lg: 0 12px 48px rgba(0, 0, 0, .15), 0 4px 16px rgba(0, 0, 0, .08);--color-bg: #0a0e1a;--color-surface: var(--glass-bg);--color-surface-hover: rgba(255, 255, 255, .12);--color-surface-alt: rgba(255, 255, 255, .06);--color-sidebar: var(--glass-bg-strong);--color-sidebar-hover: rgba(0, 0, 0, .06);--color-sidebar-active: rgba(59, 130, 246, .12);--color-text: #1a1a2e;--color-text-secondary: #64748b;--color-text-muted: #94a3b8;--color-text-on-dark: rgba(255, 255, 255, .85);--color-border: rgba(0, 0, 0, .08);--color-border-light: rgba(0, 0, 0, .04);--color-accent: #3b82f6;--color-accent-hover: #2563eb;--color-accent-light: rgba(59, 130, 246, .1);--color-accent-glow: rgba(59, 130, 246, .25);--color-success: #22c55e;--color-success-light: rgba(34, 197, 94, .1);--color-warning: #f59e0b;--color-warning-light: rgba(245, 158, 11, .1);--color-danger: #ef4444;--color-danger-light: rgba(239, 68, 68, .1);--color-purple: #8b5cf6;--color-purple-light: rgba(139, 92, 246, .1);--color-cyan: #06b6d4;--color-cyan-light: rgba(6, 182, 212, .1);--color-biomass: #22c55e;--color-roads: #f59e0b;--color-buildings: #8b5cf6;--color-water: #3b82f6;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-xl: 20px;--radius-card: 24px;--radius-pill: 50px;--shadow-xs: 0 1px 2px rgba(0,0,0,.04);--shadow-card: var(--glass-shadow);--shadow-card-hover: 0 8px 24px rgba(0,0,0,.14);--shadow-panel: var(--glass-shadow-lg);--shadow-elevated: 0 16px 48px rgba(0,0,0,.18);--border-raised: 1px solid rgba(255, 255, 255, .5);--border-raised-bottom: 1px solid rgba(0, 0, 0, .08);--shadow-raised: inset 0 1px 0 rgba(255, 255, 255, .4), 0 1px 3px rgba(0, 0, 0, .08);--shadow-pressed: inset 0 1px 3px rgba(0, 0, 0, .1);--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", Roboto, sans-serif;--font-mono: "SF Mono", "Fira Code", "JetBrains Mono", "Consolas", monospace;--transition-fast: .15s ease;--transition-normal: .25s ease;--transition-slow: .35s ease}*{margin:0;padding:0;box-sizing:border-box}html,body{width:100%;height:100%;overflow:hidden;font-family:var(--font-sans);color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{width:100%;height:100%;position:relative}#app.app-hidden{visibility:hidden;pointer-events:none}#sidebar{position:fixed;top:50%;left:12px;transform:translateY(-50%);width:var(--sidebar-width);background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-card);box-shadow:var(--glass-shadow);display:flex;flex-direction:column;align-items:center;padding:8px 0;gap:2px;z-index:100}.sidebar-brand{width:40px;height:40px;display:flex;align-items:center;justify-content:center;margin-bottom:2px}.brand-icon{width:26px;height:26px;color:var(--color-accent)}.sidebar-divider{width:28px;height:1px;background:var(--color-border);margin:4px 0}.sidebar-btn{width:42px;height:42px;border:none;background:transparent;border-radius:var(--radius-md);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary);transition:all var(--transition-fast);position:relative}.sidebar-btn:hover{background:var(--color-sidebar-hover);color:var(--color-text)}.sidebar-btn.active{background:var(--color-sidebar-active);color:var(--color-accent)}.sidebar-btn.active:before{content:"";position:absolute;left:-1px;top:50%;transform:translateY(-50%);width:3px;height:20px;background:var(--color-accent);border-radius:0 3px 3px 0}.sidebar-btn svg{width:20px;height:20px;fill:currentColor;flex-shrink:0}.sidebar-label{display:none}.sidebar-spacer{flex:1}.sidebar-badge{position:absolute;top:6px;right:6px;width:7px;height:7px;background:var(--color-success);border-radius:50%;border:1.5px solid white;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}#content{width:100%;height:100%;position:relative;overflow:hidden}.loading-bar{position:fixed;top:0;left:0;width:100%;height:2px;z-index:9999;pointer-events:none;opacity:0;transition:opacity .2s ease}.loading-bar.active{opacity:1}.loading-bar:after{content:"";position:absolute;top:0;left:0;height:100%;width:40%;background:linear-gradient(90deg,transparent,var(--color-accent),transparent);animation:loading-bar-slide 1.2s ease-in-out infinite}@keyframes loading-bar-slide{0%{left:-40%}to{left:100%}}#app-header{position:fixed;top:12px;left:50%;transform:translate(-50%);height:var(--header-height);min-width:480px;max-width:720px;width:calc(100% - 160px);background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);border-radius:var(--radius-pill);box-shadow:var(--shadow-raised),var(--glass-shadow);display:flex;align-items:center;justify-content:space-between;padding:0 8px 0 16px;z-index:90}.header-left{display:flex;align-items:center;gap:10px;flex-shrink:0}.header-logo{flex-shrink:0}.header-title{font-size:15px;font-weight:700;letter-spacing:-.3px;background:linear-gradient(135deg,#60a5fa,#3b82f6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.header-divider{width:1px;height:18px;background:var(--color-border)}.header-view-name{font-size:13px;font-weight:500;color:var(--color-accent)}.header-center{flex:1;max-width:300px;margin:0 12px}.header-search{display:flex;align-items:center;gap:8px;background:#0000000a;border:1px solid var(--color-border);border-radius:var(--radius-pill);padding:0 14px;height:32px;transition:all var(--transition-fast);position:relative}.header-search:focus-within{border-color:var(--color-accent);background:#fff;box-shadow:0 0 0 3px var(--color-accent-glow)}.header-search-icon{width:14px;height:14px;fill:var(--color-text-muted);flex-shrink:0}.header-search input{flex:1;border:none;background:none;font-size:12px;font-family:var(--font-sans);color:var(--color-text);outline:none}.header-search input::placeholder{color:var(--color-text-muted)}.search-kbd{font-family:var(--font-sans);font-size:9px;font-weight:500;color:var(--color-text-muted);background:#0000000a;border:1px solid var(--color-border);border-radius:4px;padding:1px 5px;flex-shrink:0;display:none}.header-search:focus-within .search-kbd{display:inline-block}.search-dropdown{display:none;position:absolute;top:calc(100% + 8px);left:-80px;right:-80px;background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-lg);box-shadow:var(--glass-shadow-lg);z-index:200;max-height:360px;overflow-y:auto}.search-dropdown.open{display:block}.search-dropdown-hint{padding:12px 16px;font-size:12px;color:var(--color-text-muted);text-align:center}.search-result{display:flex;align-items:flex-start;gap:12px;padding:10px 16px;cursor:pointer;transition:background var(--transition-fast);border-bottom:1px solid var(--color-border-light)}.search-result:last-child{border-bottom:none}.search-result:hover,.search-result.active{background:var(--color-accent-light)}.search-result-icon{width:32px;height:32px;border-radius:var(--radius-sm);background:#0000000a;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.search-result-icon svg{width:16px;height:16px;fill:var(--color-text-secondary)}.search-result-text{flex:1;min-width:0}.search-result-name{font-size:13px;font-weight:500;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-result-detail{font-size:11px;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.search-result-coord{font-family:var(--font-mono);font-size:11px;color:var(--color-accent);flex-shrink:0;margin-top:3px}.search-loading{padding:16px;text-align:center;font-size:12px;color:var(--color-text-muted)}.search-loading-spinner{display:inline-block;width:16px;height:16px;border:2px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle;margin-right:8px}@keyframes spin{to{transform:rotate(360deg)}}.header-right{display:flex;align-items:center;gap:12px;flex-shrink:0}.header-status{display:none}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--color-text-muted)}.status-dot.online{background:var(--color-success)}#globe-viewport{position:absolute;top:0;right:0;bottom:0;left:0}#globe-viewport canvas{display:block;width:100%;height:100%}#layer-panel{position:fixed;top:80px;right:12px;width:var(--panel-width);max-height:calc(100vh - 140px);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);border-radius:var(--radius-card);box-shadow:var(--shadow-raised),var(--glass-shadow-lg);z-index:50;overflow-y:auto;transition:transform var(--transition-normal),opacity var(--transition-normal)}#layer-panel.panel-hidden{transform:translate(calc(var(--panel-width) + 24px));opacity:0;pointer-events:none}.panel-header{padding:14px 18px;font-size:14px;font-weight:600;border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;color:var(--color-text)}.layer-group{padding:6px 0}.layer-group-title{padding:6px 18px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;color:var(--color-text-muted)}.layer-item{display:flex;align-items:center;padding:8px 18px;gap:10px;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast);border-radius:var(--radius-sm);margin:0 6px}.layer-item:hover{background:var(--color-surface-hover);transform:translateY(-1px);box-shadow:var(--shadow-card-hover)}.layer-item:active{transform:translateY(0);box-shadow:var(--shadow-pressed)}.layer-icon{width:30px;height:30px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);background:currentColor;opacity:.12;position:relative}.layer-icon svg{width:14px;height:14px;fill:currentColor;position:absolute;opacity:1}.layer-name{flex:1;font-size:12px;font-weight:500;color:var(--color-text)}.layer-doc-link{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#3b82f61f;color:#60a5fa;font-size:10px;font-weight:700;text-decoration:none;flex-shrink:0;transition:background .15s,color .15s}.layer-doc-link:hover{background:#3b82f64d;color:#93c5fd}.layer-provider-row{padding:4px 18px 8px 58px}.provider-select{width:100%;padding:5px 28px 5px 10px;font-size:11px;font-family:var(--font-sans);font-weight:500;color:var(--color-text);background:#00000008;border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;outline:none;transition:border-color var(--transition-fast);-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='%2364748b'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center}.provider-select:hover{border-color:var(--color-accent)}.provider-select:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-glow)}.provider-description{font-size:10px;color:var(--color-text-muted);line-height:1.4;margin-top:4px;min-height:0}.toggle{position:relative;width:36px;height:20px;flex-shrink:0}.toggle input{opacity:.01;position:absolute;width:100%;height:100%;top:0;left:0;cursor:pointer;z-index:2;margin:0}.toggle-track{position:absolute;top:0;left:0;right:0;bottom:0;background:#0000001f;border-radius:10px;cursor:pointer;transition:background var(--transition-fast)}.toggle input:checked+.toggle-track{background:var(--color-accent)}.toggle-thumb{position:absolute;top:2px;left:2px;width:16px;height:16px;background:#fff;border-radius:50%;box-shadow:0 1px 3px #0003;transition:transform var(--transition-fast);pointer-events:none}.toggle input:checked~.toggle-thumb{transform:translate(16px)}.layer-source-row{display:flex;flex-wrap:wrap;gap:12px;padding:2px 18px 6px 58px}.source-description{width:100%;font-size:9px;color:var(--color-text-muted);opacity:.7;line-height:1.3;margin-top:-4px}.source-radio{display:flex;align-items:center;gap:4px;font-size:10px;font-weight:500;color:var(--color-text-muted);cursor:pointer}.source-radio input[type=radio]{width:12px;height:12px;margin:0;accent-color:var(--color-accent);cursor:pointer}.layer-sub-toggles{display:flex;flex-wrap:wrap;gap:8px;padding:2px 18px 6px 58px}.sub-toggle{display:flex;align-items:center;gap:4px;font-size:10px;font-weight:500;color:var(--color-text-muted);cursor:pointer}.sub-toggle input[type=checkbox]{width:12px;height:12px;margin:0;accent-color:var(--color-accent);cursor:pointer}#download-panel{position:fixed;bottom:64px;left:80px;width:340px;max-height:520px;display:flex;flex-direction:column;background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-card);box-shadow:var(--glass-shadow);z-index:50;overflow:hidden;transition:all var(--transition-normal)}#download-panel.minimized{width:auto;max-height:40px}#download-panel.hidden{display:none}.dl-header{padding:10px 16px;font-size:13px;font-weight:600;display:flex;align-items:center;gap:8px;cursor:pointer;border-bottom:1px solid var(--color-border);color:var(--color-text)}.dl-count{background:var(--color-accent);color:#fff;font-size:10px;font-weight:600;padding:2px 7px;border-radius:10px;min-width:20px;text-align:center}.dl-body{flex:1 1 auto;overflow-y:auto;min-height:0}.dl-list{padding:4px 0}.dl-cat-section{padding:6px 16px 8px;border-bottom:1px solid var(--color-border-light)}.dl-cat-section.dl-cat-empty{padding:4px 16px}.dl-cat-section.dl-cat-empty .dl-cat-items,.dl-cat-section.dl-cat-empty .dl-cat-bar{display:none}.dl-cat-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.dl-cat-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.dl-cat-count{font-size:10px;font-weight:600;padding:1px 6px;border-radius:8px;min-width:18px;text-align:center;color:#fff}.dl-cat-tiles .dl-cat-label{color:#3b82f6}.dl-cat-tiles .dl-cat-count{background:#3b82f6}.dl-cat-vectors .dl-cat-label{color:#22c55e}.dl-cat-vectors .dl-cat-count{background:#22c55e}.dl-cat-ml .dl-cat-label{color:#f59e0b}.dl-cat-ml .dl-cat-count{background:#f59e0b}.dl-cat-bar{width:100%;height:3px;background:var(--color-border-light);border-radius:2px;overflow:hidden;margin-bottom:4px}.dl-cat-bar-fill{height:100%;border-radius:2px;transition:width .5s ease;width:0%}.dl-cat-tiles .dl-cat-bar-fill{background:#3b82f6}.dl-cat-vectors .dl-cat-bar-fill{background:#22c55e}.dl-cat-ml .dl-cat-bar-fill{background:#f59e0b}.dl-cat-items{display:flex;flex-direction:column;gap:2px}.dl-item{padding:6px 0;font-size:12px;display:flex;flex-direction:column;gap:4px;border-bottom:1px solid var(--color-border-light)}.dl-item:last-child{border-bottom:none}.dl-item-header{display:flex;justify-content:space-between;align-items:center}.dl-item-source{color:var(--color-text-secondary);font-size:11px}.dl-item-status{font-size:11px;font-weight:600}.dl-item-status.active{color:var(--color-accent)}.dl-item-status.complete{color:var(--color-success)}.dl-item-status.error{color:var(--color-danger)}.dl-item-time{font-size:11px;color:var(--color-text-secondary);font-variant-numeric:tabular-nums}.dl-progress{width:100%;height:3px;background:var(--color-border-light);border-radius:2px;overflow:hidden}.dl-progress-bar{height:100%;border-radius:2px;transition:width .5s ease}.dl-progress-bar.error{background:var(--color-danger)}.dl-bar-tiles{background:#3b82f6}.dl-bar-vectors{background:#22c55e}.dl-bar-ml{background:#f59e0b}.dl-cat-stats{font-size:10px;color:var(--color-text-secondary);margin-left:auto;margin-right:8px;font-variant-numeric:tabular-nums}.dl-item-tile{font-size:10px;opacity:.5;font-variant-numeric:tabular-nums}.dl-history-section{border-top:1px solid var(--color-border);padding:6px 0}.dl-history-header{display:flex;align-items:center;gap:6px;padding:0 16px 4px}.dl-history-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-secondary)}.dl-history-count{font-size:10px;font-weight:600;padding:1px 6px;border-radius:8px;min-width:18px;text-align:center;color:#fff;background:var(--color-text-secondary)}.dl-history-list{max-height:160px;overflow-y:auto;padding:0 8px}.dl-hist-item{display:flex;align-items:center;gap:6px;padding:3px 8px;font-size:11px;border-radius:4px;transition:background .15s}.dl-hist-item:hover{background:#ffffff0a}.dl-hist-icon{font-size:10px;font-weight:700;width:14px;text-align:center;flex-shrink:0}.dl-hist-ok .dl-hist-icon{color:var(--color-success, #22c55e)}.dl-hist-err .dl-hist-icon{color:var(--color-danger, #ef4444)}.dl-hist-layer{font-weight:500;white-space:nowrap;flex-shrink:0}.dl-hist-tile{font-size:10px;opacity:.45;font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}.dl-hist-detail{font-size:10px;opacity:.55;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto;min-width:0}.dl-hist-time{font-size:10px;opacity:.5;font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0;margin-left:auto}.dl-hist-tiles:before,.dl-hist-vectors:before,.dl-hist-ml:before{content:"";width:6px;height:6px;border-radius:50%;flex-shrink:0}.dl-hist-tiles:before{background:#3b82f6}.dl-hist-vectors:before{background:#22c55e}.dl-hist-ml:before{background:#f59e0b}.dl-footer{flex-shrink:0;padding:8px 16px;font-size:11px;color:var(--color-text-secondary);border-top:1px solid var(--color-border);display:flex;justify-content:space-between;gap:8px}.layer-loading-overlay{position:fixed;bottom:60px;left:50%;transform:translate(-50%);min-width:280px;max-width:480px;background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-card, 12px);box-shadow:var(--glass-shadow);z-index:45;padding:8px 12px;display:flex;flex-direction:column;gap:4px;font-family:var(--font-mono);font-size:11px;transition:opacity .3s ease,transform .3s ease}.layer-loading-overlay.hidden{opacity:0;pointer-events:none;transform:translate(-50%) translateY(8px)}.llo-row{display:flex;align-items:center;gap:8px;position:relative;padding:4px 6px;border-radius:6px;overflow:hidden}.llo-bar-bg{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:6px;overflow:hidden;z-index:0}.llo-bar-fill{position:absolute;left:0;top:0;height:100%;border-radius:6px;transition:width .4s ease;opacity:.12}.llo-bar-fill.llo-tiles{background:#3b82f6}.llo-bar-fill.llo-vectors{background:#22c55e}.llo-bar-fill.llo-ml{background:#f59e0b}.llo-label{position:relative;z-index:1;font-weight:600;color:var(--color-text);white-space:nowrap}.llo-status{position:relative;z-index:1;color:var(--color-text-secondary);font-size:10px;white-space:nowrap;margin-left:auto}.llo-time{position:relative;z-index:1;color:var(--color-text-muted);font-size:10px;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:36px;text-align:right}.llo-spinner{position:relative;z-index:1;display:inline-block;width:10px;height:10px;border:2px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:llo-spin .8s linear infinite;flex-shrink:0}@keyframes llo-spin{to{transform:rotate(360deg)}}.llo-row.llo-active .llo-label{color:var(--color-accent)}.llo-row.llo-done .llo-label{color:var(--color-success)}.llo-row.llo-error .llo-label{color:var(--color-danger)}.llo-row.llo-done .llo-status{color:var(--color-success)}.llo-row.llo-error .llo-status{color:var(--color-danger)}.llo-error-msg{font-size:10px;color:var(--color-danger);padding:0 6px 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}#info-bar{position:fixed;bottom:12px;left:50%;transform:translate(-50%);height:var(--infobar-height);background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);border-radius:var(--radius-pill);box-shadow:var(--shadow-raised),var(--glass-shadow);color:var(--color-text);font-size:11px;font-family:var(--font-mono);display:flex;align-items:center;padding:0 20px;gap:16px;z-index:40;white-space:nowrap}.info-section{display:flex;align-items:center;gap:12px}.info-icon{width:14px;height:14px;fill:var(--color-text-muted);flex-shrink:0}.info-divider{width:1px;height:16px;background:var(--color-border);flex-shrink:0}.info-item{white-space:nowrap}.info-label{color:var(--color-text-muted);margin-right:3px;font-size:10px}.fly-mode-btn{display:flex;align-items:center;gap:4px;background:#0000000a;border:1px solid var(--color-border);border-radius:4px;padding:3px 10px;color:var(--color-text-muted);font-family:var(--font-mono);font-size:10px;font-weight:600;letter-spacing:.5px;cursor:pointer;transition:all var(--transition-fast)}.fly-mode-btn:hover{background:#00000014;color:var(--color-text)}.fly-mode-btn.active{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.info-loading{color:var(--color-accent, #4a90d9);font-size:10px;font-weight:600}.info-spinner{display:inline-block;width:10px;height:10px;border:2px solid var(--color-border);border-top-color:var(--color-accent, #4a90d9);border-radius:50%;animation:infobar-spin .8s linear infinite}@keyframes infobar-spin{to{transform:rotate(360deg)}}.controls-hint{display:flex;align-items:center;gap:4px;color:var(--color-text-muted);font-size:10px;font-family:var(--font-sans)}.controls-hint svg{fill:var(--color-text-muted)}#stats-view{position:absolute;top:var(--header-height);left:0;right:0;bottom:0;background:var(--color-bg);z-index:30;overflow-y:auto;padding:28px 32px;display:none}#stats-view.visible{display:block}.stats-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:24px}.stats-title{font-size:24px;font-weight:700;color:var(--color-text);letter-spacing:-.5px}.stats-subtitle{font-size:14px;color:var(--color-text-secondary);margin-top:4px}.stats-header-right{display:flex;align-items:center;gap:12px}.stats-filter{display:flex;align-items:center;gap:8px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:6px 12px;font-size:12px;font-weight:500;color:var(--color-text-secondary);cursor:pointer}.stats-filter svg{width:14px;height:14px;fill:currentColor}.stats-refresh-btn{background:var(--color-accent);color:#fff;border:none;border-radius:var(--radius-sm);padding:8px 16px;font-size:12px;font-weight:600;font-family:var(--font-sans);cursor:pointer;display:flex;align-items:center;gap:6px;transition:background var(--transition-fast)}.stats-refresh-btn:hover{background:var(--color-accent-hover)}.stats-refresh-btn svg{width:14px;height:14px;fill:currentColor}.stats-clear-btn{background:var(--color-danger);color:#fff;border:none;border-radius:var(--radius-sm);padding:8px 16px;font-size:13px;font-weight:500;cursor:pointer;display:flex;align-items:center;gap:6px;transition:background var(--transition-fast)}.stats-clear-btn:hover{background:#dc2626}.stats-clear-btn:disabled{opacity:.6;cursor:not-allowed}.stats-clear-btn svg{width:14px;height:14px;fill:currentColor}.stats-metrics{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:16px;margin-bottom:24px}.metric-card{background:var(--color-surface);border-radius:var(--radius-md);padding:20px;box-shadow:var(--shadow-card);border:1px solid var(--color-border-light);transition:box-shadow var(--transition-fast),transform var(--transition-fast);position:relative;overflow:hidden}.metric-card:hover{box-shadow:var(--shadow-card-hover);transform:translateY(-1px)}.metric-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--color-accent)}.metric-card.accent-green:before{background:var(--color-success)}.metric-card.accent-purple:before{background:var(--color-purple)}.metric-card.accent-orange:before{background:var(--color-warning)}.metric-card.accent-blue:before{background:var(--color-accent)}.metric-card.accent-cyan:before{background:var(--color-cyan)}.metric-card.accent-red:before{background:var(--color-danger)}.metric-card-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.metric-card-label{font-size:12px;font-weight:500;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px}.metric-card-icon{width:36px;height:36px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center}.metric-card-icon svg{width:18px;height:18px;fill:currentColor}.metric-card-icon.bg-blue{background:var(--color-accent-light);color:var(--color-accent)}.metric-card-icon.bg-green{background:var(--color-success-light);color:var(--color-success)}.metric-card-icon.bg-purple{background:var(--color-purple-light);color:var(--color-purple)}.metric-card-icon.bg-orange{background:var(--color-warning-light);color:var(--color-warning)}.metric-card-icon.bg-cyan{background:var(--color-cyan-light);color:var(--color-cyan)}.metric-card-icon.bg-red{background:var(--color-danger-light);color:var(--color-danger)}.metric-card-value{font-size:28px;font-weight:700;line-height:1;color:var(--color-text);letter-spacing:-.5px}.metric-card-sub{font-size:12px;color:var(--color-text-muted);margin-top:6px}.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:24px}@media(max-width:900px){.chart-grid{grid-template-columns:1fr}}.chart-card{background:var(--color-surface);border-radius:var(--radius-md);padding:24px;box-shadow:var(--shadow-card);border:1px solid var(--color-border-light)}.chart-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.chart-card-title{font-size:15px;font-weight:600;color:var(--color-text)}.chart-card-badge{font-size:11px;font-weight:500;color:var(--color-text-muted);background:var(--color-bg);padding:3px 10px;border-radius:12px}.chart-card canvas{width:100%!important;max-height:260px}.table-card{background:var(--color-surface);border-radius:var(--radius-md);box-shadow:var(--shadow-card);border:1px solid var(--color-border-light);overflow:hidden;margin-bottom:24px}.table-card-header{padding:16px 24px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--color-border)}.table-card-title{font-size:15px;font-weight:600;color:var(--color-text)}.recent-table{width:100%;border-collapse:collapse;font-size:12px}.recent-table th{text-align:left;padding:10px 24px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);background:var(--color-surface-alt);border-bottom:1px solid var(--color-border)}.recent-table td{padding:10px 24px;border-bottom:1px solid var(--color-border-light);color:var(--color-text)}.recent-table tr:last-child td{border-bottom:none}.recent-table tr:hover td{background:var(--color-surface-hover)}.status-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.status-badge.complete{background:var(--color-success-light);color:var(--color-success)}.status-badge.error{background:var(--color-danger-light);color:var(--color-danger)}.status-badge.skipped{background:var(--color-warning-light);color:var(--color-warning)}#upload-panel{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:460px;max-height:80vh;background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-card);box-shadow:var(--glass-shadow-lg);z-index:70;overflow-y:auto}.upload-panel .panel-header{display:flex;align-items:center;justify-content:space-between}.upload-close-btn{background:none;border:none;font-size:20px;color:var(--color-text-muted);cursor:pointer;padding:0 4px;line-height:1}.upload-close-btn:hover{color:var(--color-text)}.upload-drop-zone{margin:14px 18px;padding:28px 18px;border:2px dashed rgba(0,0,0,.12);border-radius:var(--radius-lg);text-align:center;transition:all var(--transition-fast);cursor:pointer}.upload-drop-zone.drag-over{border-color:var(--color-accent);background:var(--color-accent-light)}.upload-drop-zone p{font-size:13px;color:var(--color-text-secondary);margin-top:8px}.upload-hint{font-size:11px!important;color:var(--color-text-muted)!important;margin-top:4px!important}.upload-browse-btn{display:inline-block;margin-top:12px;padding:8px 20px;background:var(--color-accent);color:#fff;border-radius:var(--radius-sm);font-size:13px;font-weight:600;cursor:pointer;transition:background var(--transition-fast)}.upload-browse-btn:hover{background:var(--color-accent-hover)}.upload-progress-area{padding:0 18px}.upload-progress-item{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid var(--color-border-light)}.upload-filename{font-size:12px;font-weight:500;color:var(--color-text);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.upload-progress-bar{width:80px;height:4px;background:var(--color-border-light);border-radius:2px;overflow:hidden;flex-shrink:0}.upload-progress-fill{height:100%;background:var(--color-accent);border-radius:2px;transition:width var(--transition-fast)}.upload-status{font-size:11px;color:var(--color-text-muted);flex-shrink:0;width:50px;text-align:right}.upload-list{padding:0 18px 14px}.upload-empty{font-size:12px;color:var(--color-text-muted);text-align:center;padding:12px}.upload-list-item{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--color-border-light)}.upload-list-item:last-child{border-bottom:none}.upload-type-badge{font-size:9px;font-weight:700;text-transform:uppercase;padding:2px 6px;border-radius:4px;flex-shrink:0}.upload-type-badge.dem{background:var(--color-warning-light);color:var(--color-warning)}.upload-type-badge.vector{background:var(--color-purple-light);color:var(--color-purple)}.upload-type-badge.raster{background:var(--color-cyan-light);color:var(--color-cyan)}.upload-item-name{font-size:13px;color:var(--color-text);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.upload-delete-btn{background:none;border:none;font-size:16px;color:var(--color-text-muted);cursor:pointer;padding:0 4px;line-height:1;flex-shrink:0}.upload-delete-btn:hover{color:var(--color-danger)}.upload-item-actions{display:flex;align-items:center;gap:2px;flex-shrink:0}.upload-download-btn{background:none;border:none;color:var(--color-text-muted);cursor:pointer;padding:2px 4px;line-height:1;border-radius:4px}.upload-download-btn:hover{color:var(--color-accent);background:var(--color-surface-hover)}.upload-download-menu{background:var(--glass-bg-strong);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-md);box-shadow:var(--glass-shadow);padding:4px;display:flex;flex-direction:column;min-width:100px}.download-format-btn{background:none;border:none;padding:6px 12px;text-align:left;font-size:12px;color:var(--color-text);cursor:pointer;border-radius:4px}.download-format-btn:hover{background:var(--color-surface-hover);color:var(--color-accent)}.toast-container{position:fixed;top:calc(var(--header-height) + 12px);right:12px;z-index:20000;display:flex;flex-direction:column;gap:8px;pointer-events:none}.toast{pointer-events:auto;padding:10px 16px;border-radius:8px;font-size:13px;font-weight:500;max-width:340px;box-shadow:0 4px 16px #00000059;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);display:flex;align-items:center;gap:8px;animation:toast-in .3s ease-out}.toast.toast-error{background:#dc2626e6;color:#fff;border:1px solid rgba(248,113,113,.5)}.toast.toast-success{background:#16a34ae6;color:#fff;border:1px solid rgba(74,222,128,.5)}.toast.toast-info{background:#2563ebe6;color:#fff;border:1px solid rgba(96,165,250,.5)}.toast.toast-warning{background:#ca8a04e6;color:#fff;border:1px solid rgba(250,204,21,.5)}.toast.toast-out{animation:toast-out .3s ease-in forwards}@keyframes toast-in{0%{opacity:0;transform:translate(40px)}to{opacity:1;transform:translate(0)}}@keyframes toast-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(40px)}}#up42-panel{position:fixed;top:80px;right:12px;width:380px;max-height:calc(100vh - 140px);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);border-radius:var(--radius-card);box-shadow:var(--shadow-raised),var(--glass-shadow-lg);z-index:55;overflow-y:auto}.up42-tabs{display:flex;border-bottom:1px solid var(--color-border);padding:0 12px}.up42-tab{flex:1;padding:10px 0;border:none;background:none;font-family:var(--font-sans);font-size:12px;font-weight:600;color:var(--color-text-muted);cursor:pointer;border-bottom:2px solid transparent;transition:all var(--transition-fast);text-align:center}.up42-tab:hover{color:var(--color-text-secondary)}.up42-tab.active{color:var(--color-accent);border-bottom-color:var(--color-accent)}.up42-status{font-size:11px;font-weight:500;padding:2px 8px;border-radius:10px}.up42-status.connected{background:var(--color-success-light);color:var(--color-success)}.up42-status.disconnected{background:var(--color-warning-light);color:var(--color-warning)}.up42-search-form{padding:16px 20px;display:flex;flex-direction:column;gap:12px}.up42-field{display:flex;flex-direction:column;gap:4px}.up42-field-row{display:flex;gap:12px}.up42-label{font-size:11px;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px}.up42-input{padding:6px 10px;font-size:12px;font-family:var(--font-sans);color:var(--color-text);background:#0000000d;border:1px solid var(--color-border);border-radius:var(--radius-sm);outline:none;transition:border-color var(--transition-fast)}.up42-input:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px #3b82f61a}.up42-bbox-display{font-size:11px;font-family:var(--font-mono);color:var(--color-text-muted);padding:4px 0}.up42-bbox-display.has-value{color:var(--color-accent)}.up42-btn{border:none;border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:12px;font-weight:600;cursor:pointer;transition:all var(--transition-fast);display:inline-flex;align-items:center;justify-content:center;gap:6px}.up42-btn:disabled{opacity:.5;cursor:not-allowed}.up42-btn-primary{background:var(--color-accent);color:#fff;padding:8px 16px}.up42-btn-primary:hover:not(:disabled){background:var(--color-accent-hover)}.up42-btn-secondary{background:#0000000d;color:var(--color-text-secondary);border:1px solid var(--color-border);padding:6px 12px}.up42-btn-secondary:hover{border-color:var(--color-accent);color:var(--color-accent)}.up42-btn-small{padding:4px 10px;font-size:11px;background:#0000000d;color:var(--color-text-secondary);border:1px solid var(--color-border)}.up42-btn-small:hover{border-color:var(--color-accent);color:var(--color-accent)}.up42-btn-small.up42-btn-primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.up42-results{border-top:1px solid var(--color-border)}.up42-results-header{padding:10px 20px;font-size:12px;font-weight:600;color:var(--color-text-secondary);background:var(--color-surface-alt)}.up42-result-item{padding:12px 20px;border-bottom:1px solid var(--color-border-light);transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.up42-result-item:hover{background:var(--color-surface-hover);transform:translateY(-1px);box-shadow:var(--shadow-card-hover)}.up42-result-item:active{transform:translateY(0);box-shadow:var(--shadow-pressed)}.up42-result-main{display:flex;gap:12px;margin-bottom:8px}.up42-thumb{width:64px;height:64px;border-radius:var(--radius-sm);object-fit:cover;flex-shrink:0;background:#0000000d}.up42-thumb-placeholder{width:64px;height:64px;border-radius:var(--radius-sm);background:#0000000d;display:flex;align-items:center;justify-content:center;font-size:10px;color:var(--color-text-muted);flex-shrink:0}.up42-result-info{flex:1;min-width:0}.up42-result-id{font-size:12px;font-weight:600;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.up42-result-meta{display:flex;gap:12px;font-size:11px;color:var(--color-text-secondary);margin-top:4px}.up42-result-collection{font-size:10px;color:var(--color-text-muted);margin-top:2px}.up42-result-actions{display:flex;gap:8px}.up42-orders-header{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;font-size:13px;font-weight:600;color:var(--color-text);border-bottom:1px solid var(--color-border)}.up42-order-item{padding:12px 20px;border-bottom:1px solid var(--color-border-light);transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.up42-order-item:hover{background:var(--color-surface-hover);transform:translateY(-1px);box-shadow:var(--shadow-card-hover)}.up42-order-item:active{transform:translateY(0);box-shadow:var(--shadow-pressed)}.up42-order-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.up42-order-name{font-size:13px;font-weight:500;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;margin-right:8px}.up42-order-id{font-size:10px;font-family:var(--font-mono);color:var(--color-text-muted);margin-bottom:8px}.up42-asset-item{padding:12px 20px;border-bottom:1px solid var(--color-border-light);transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.up42-asset-item:hover{background:var(--color-surface-hover);transform:translateY(-1px);box-shadow:var(--shadow-card-hover)}.up42-asset-item:active{transform:translateY(0);box-shadow:var(--shadow-pressed)}.up42-asset-name{font-size:13px;font-weight:500;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.up42-asset-meta{display:flex;gap:16px;font-size:11px;color:var(--color-text-secondary);margin:4px 0 8px}.up42-empty{padding:24px 20px;text-align:center;font-size:12px;color:var(--color-text-muted)}.up42-error{padding:12px 20px;font-size:12px;color:var(--color-danger);background:var(--color-danger-light);border-radius:var(--radius-sm);margin:12px 20px}#settings-view{position:fixed;top:0;left:0;right:0;bottom:0;background:#fffffff5;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);z-index:80;overflow-y:auto;padding:80px 40px 40px calc(var(--sidebar-width) + 32px);display:none}#settings-view.visible{display:block}.settings-tabs{display:flex;gap:4px;margin-bottom:24px;background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border-radius:var(--radius-md);padding:4px;border:1px solid var(--glass-border);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);box-shadow:var(--shadow-raised);width:fit-content}.settings-tab{padding:8px 20px;font-size:13px;font-weight:500;color:var(--color-text-secondary);background:transparent;border:none;border-radius:var(--radius-sm);cursor:pointer;font-family:var(--font-sans);transition:all var(--transition-fast)}.settings-tab:hover{color:var(--color-text);background:var(--color-surface-hover)}.settings-tab.active{background:var(--color-accent);color:#fff}.settings-panel{display:none}.settings-panel.active{display:block}.settings-section-title{font-size:18px;font-weight:700;color:var(--color-text);margin-bottom:16px;letter-spacing:-.3px}.settings-section-sub{font-size:13px;color:var(--color-text-secondary);margin-bottom:20px}.db-tables-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;margin-bottom:24px}.db-table-card{background:var(--color-surface);border-radius:var(--radius-md);padding:16px;border:1px solid var(--color-border-light);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);cursor:pointer;transition:all var(--transition-fast);box-shadow:var(--shadow-raised),var(--shadow-card)}.db-table-card:hover{border-color:var(--color-accent);box-shadow:var(--shadow-card-hover);transform:translateY(-1px)}.db-table-card:active{transform:translateY(0);box-shadow:var(--shadow-pressed)}.db-table-card.active{border-color:var(--color-accent)}.db-table-card-name{font-size:13px;font-weight:600;color:var(--color-text);font-family:var(--font-mono);margin-bottom:8px}.db-table-card-stats{display:flex;gap:12px;font-size:11px;color:var(--color-text-muted)}.db-table-card-stats strong{color:var(--color-text-secondary)}.db-table-detail{background:var(--color-surface);border-radius:var(--radius-md);border:1px solid var(--color-border-light);overflow:hidden;margin-bottom:24px;box-shadow:var(--shadow-card)}.db-table-detail-header{padding:12px 20px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--color-border);background:var(--color-surface-alt)}.db-table-detail-title{font-size:14px;font-weight:600;color:var(--color-text);font-family:var(--font-mono)}.db-table-detail-close{background:none;border:none;color:var(--color-text-muted);cursor:pointer;font-size:18px;padding:4px 8px;border-radius:var(--radius-sm)}.db-table-detail-close:hover{background:var(--color-surface-hover);color:var(--color-text)}.db-table-detail-body{overflow-x:auto;max-height:400px;overflow-y:auto}.db-table-detail-body table{width:100%;border-collapse:collapse;font-size:11px}.db-table-detail-body th{text-align:left;padding:8px 14px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--color-text-muted);background:var(--color-surface-alt);border-bottom:1px solid var(--color-border);white-space:nowrap;position:sticky;top:0;z-index:1}.db-table-detail-body td{padding:6px 14px;border-bottom:1px solid var(--color-border-light);color:var(--color-text);max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:11px}.db-table-detail-body tr:hover td{background:var(--color-surface-hover)}.spaces-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.spaces-load-btn{background:var(--color-accent);color:#fff;border:none;border-radius:var(--radius-sm);padding:8px 16px;font-size:12px;font-weight:600;font-family:var(--font-sans);cursor:pointer;display:flex;align-items:center;gap:6px;transition:background var(--transition-fast)}.spaces-load-btn:hover{background:var(--color-accent-hover)}.spaces-load-btn:disabled{opacity:.6;cursor:not-allowed}.conn-category{margin-bottom:28px}.conn-category-header{font-size:14px;font-weight:700;color:var(--color-text);text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid var(--color-border)}.conn-category-badge{font-size:10px;font-weight:600;padding:2px 8px;border-radius:10px;margin-left:8px;text-transform:uppercase;letter-spacing:.3px}.conn-category-badge.imagery{background:var(--color-accent-light);color:var(--color-accent)}.conn-category-badge.terrain{background:var(--color-success-light);color:var(--color-success)}.conn-category-badge.canopy{background:var(--color-purple-light);color:var(--color-purple)}.conn-category-badge.vector{background:var(--color-warning-light);color:var(--color-warning)}.conn-category-badge.analysis{background:var(--color-cyan-light);color:var(--color-cyan)}.conn-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:12px}.conn-card{background:var(--color-surface);border-radius:var(--radius-md);padding:16px;border:1px solid var(--color-border-light);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);box-shadow:var(--shadow-raised),var(--shadow-card);transition:all var(--transition-fast)}.conn-card:hover{box-shadow:var(--shadow-card-hover);transform:translateY(-1px)}.conn-card:active{transform:translateY(0);box-shadow:var(--shadow-pressed)}.conn-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.conn-card-name{font-size:14px;font-weight:600;color:var(--color-text)}.conn-card-id{font-size:11px;color:var(--color-text-muted);font-family:var(--font-mono)}.conn-card-desc{font-size:12px;color:var(--color-text-secondary);margin-bottom:10px;line-height:1.5}.conn-card-url{display:flex;align-items:center;gap:8px;margin-bottom:10px}.conn-card-url input{flex:1;background:#0000000d;border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:6px 10px;font-size:11px;font-family:var(--font-mono);color:var(--color-text);outline:none}.conn-card-url input:focus{border-color:var(--color-accent)}.conn-card-actions{display:flex;align-items:center;gap:8px}.conn-card-actions button{background:var(--color-surface-alt);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:4px 12px;font-size:11px;font-weight:500;color:var(--color-text-secondary);cursor:pointer;font-family:var(--font-sans);transition:all var(--transition-fast)}.conn-card-actions button:hover{background:var(--color-surface-hover);color:var(--color-text)}.conn-card-actions button.save-btn{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.conn-card-actions button.save-btn:hover{background:var(--color-accent-hover)}.conn-card-actions button.delete-btn{color:var(--color-danger)}.conn-card-actions button.delete-btn:hover{background:var(--color-danger-light)}.conn-toggle{position:relative;width:36px;height:20px;display:inline-block}.conn-toggle input{opacity:0;width:0;height:0}.conn-toggle-slider{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--color-border);border-radius:20px;cursor:pointer;transition:background var(--transition-fast)}.conn-toggle-slider:before{content:"";position:absolute;width:16px;height:16px;left:2px;bottom:2px;background:#fff;border-radius:50%;transition:transform var(--transition-fast)}.conn-toggle input:checked+.conn-toggle-slider{background:var(--color-accent)}.conn-toggle input:checked+.conn-toggle-slider:before{transform:translate(16px)}.conn-add-form{background:var(--color-surface);border-radius:var(--radius-md);padding:20px;border:1px dashed var(--color-border);margin-top:20px}.conn-add-form h3{font-size:14px;font-weight:600;color:var(--color-text);margin-bottom:12px}.conn-add-form .form-row{display:flex;gap:12px;margin-bottom:10px}.conn-add-form input,.conn-add-form select,.conn-add-form textarea{background:#0000000d;border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:8px 12px;font-size:12px;color:var(--color-text);font-family:var(--font-sans);outline:none;flex:1}.conn-add-form textarea{font-family:var(--font-mono);min-height:60px;resize:vertical}.conn-add-form input:focus,.conn-add-form select:focus,.conn-add-form textarea:focus{border-color:var(--color-accent)}.conn-add-form .form-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.uploads-table-wrapper{background:var(--color-surface);border-radius:var(--radius-md);border:1px solid var(--color-border-light);overflow:hidden;box-shadow:var(--shadow-card)}.uploads-table{width:100%;border-collapse:collapse;font-size:12px}.uploads-table th{text-align:left;padding:10px 20px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted);background:var(--color-surface-alt);border-bottom:1px solid var(--color-border)}.uploads-table td{padding:10px 20px;border-bottom:1px solid var(--color-border-light);color:var(--color-text)}.uploads-table tr:last-child td{border-bottom:none}.uploads-table tr:hover td{background:var(--color-surface-hover)}.uploads-table .type-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:600;text-transform:uppercase}.type-badge.dem{background:var(--color-success-light);color:var(--color-success)}.type-badge.vector{background:var(--color-accent-light);color:var(--color-accent)}.type-badge.raster{background:var(--color-purple-light);color:var(--color-purple)}.upload-delete-btn{background:none;border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:4px 10px;font-size:11px;color:var(--color-danger);cursor:pointer;font-family:var(--font-sans);transition:all var(--transition-fast)}.upload-delete-btn:hover{background:var(--color-danger-light);border-color:var(--color-danger)}.conn-category-desc{font-size:12px;color:var(--color-text-muted);line-height:1.6;margin-bottom:16px;padding:10px 14px 10px 24px;background:var(--color-surface);border-radius:var(--radius-sm);position:relative}.conn-category-desc:before{content:"";position:absolute;left:10px;top:16px;width:7px;height:7px;border-radius:50%;background:var(--color-accent)}.conn-card-meta{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.conn-meta-tag{display:inline-block;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:500;background:var(--color-surface-alt);color:var(--color-text-secondary);border:1px solid var(--color-border-light)}.conn-meta-tag.coverage{background:var(--color-accent-light);color:var(--color-accent);border-color:transparent}.conn-card-usage{font-size:11px;color:var(--color-text-secondary);margin-bottom:8px;line-height:1.5;padding:6px 10px;background:#0000000d;border-radius:var(--radius-sm);border:1px solid var(--color-border-light)}.conn-card-urlinfo{font-size:10px;color:var(--color-text-muted);margin-bottom:8px;line-height:1.4;font-family:var(--font-mono);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.conn-card-attribution{font-size:10px;color:var(--color-text-muted);margin-bottom:8px;font-style:italic;line-height:1.4}.conn-key-badge{font-size:12px;margin-left:6px;vertical-align:middle}.spaces-total{font-size:13px;color:var(--color-text-secondary);margin-bottom:16px;padding:10px 16px;background:var(--color-surface);border-radius:var(--radius-sm);border:1px solid var(--color-border-light)}.spaces-group{margin-bottom:4px}.spaces-group-header{display:flex;align-items:center;gap:10px;padding:10px 16px;background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast)}.spaces-group-header:hover{background:var(--color-surface-hover)}.spaces-group-chevron{fill:var(--color-text-muted);transition:transform var(--transition-fast);flex-shrink:0}.spaces-group-header.expanded .spaces-group-chevron{transform:rotate(90deg)}.spaces-group-name{font-size:13px;font-weight:600;color:var(--color-text);min-width:180px}.spaces-group-stats{font-size:11px;color:var(--color-text-muted);white-space:nowrap}.spaces-group-stats strong{color:var(--color-text-secondary)}.spaces-group-bar{flex:1;height:6px;background:var(--color-border-light);border-radius:3px;overflow:hidden;min-width:60px}.spaces-group-bar-fill{height:100%;background:var(--color-accent);border-radius:3px;transition:width var(--transition-fast)}.spaces-group-detail{border:1px solid var(--color-border-light);border-top:none;border-radius:0 0 var(--radius-sm) var(--radius-sm);background:#0000000d;overflow-x:auto;max-height:300px;overflow-y:auto}.settings-loading,.settings-empty,.training-loading{text-align:center;padding:40px;color:var(--color-text-muted);font-size:13px}.training-header{margin-bottom:24px}.training-header h3{font-size:18px;font-weight:700;color:var(--color-text);margin-bottom:8px}.training-desc{font-size:12px;color:var(--color-text-secondary);line-height:1.6;margin-bottom:12px;max-width:700px}.training-region-info{display:flex;align-items:center;gap:12px;padding:8px 14px;background:var(--color-accent-light);border-radius:var(--radius-sm);margin-bottom:16px;max-width:fit-content}.training-region-label{font-size:11px;color:var(--color-accent);font-weight:500;font-family:var(--font-mono)}.training-btn-refresh-bounds{font-size:10px;padding:3px 10px}.training-btn{background:var(--color-surface-alt);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:6px 14px;font-size:12px;font-weight:600;color:var(--color-text-secondary);cursor:pointer;font-family:var(--font-sans);transition:all var(--transition-fast)}.training-btn:hover{background:var(--color-surface-hover);color:var(--color-text)}.training-btn:disabled{opacity:.5;cursor:not-allowed}.training-btn-all{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.training-btn-all:hover{background:var(--color-accent-hover)}.training-btn-run{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.training-btn-run:hover{background:var(--color-accent-hover)}.training-btn-save{background:transparent}.training-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:16px;margin-bottom:32px}.training-card{background:var(--color-surface);border-radius:var(--radius-md);padding:16px;border:1px solid var(--color-border-light);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);box-shadow:var(--shadow-raised),var(--shadow-card);transition:all var(--transition-fast)}.training-card:hover{box-shadow:var(--shadow-card-hover);transform:translateY(-1px)}.training-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.training-card-title{font-size:14px;font-weight:600;color:var(--color-text)}.training-model-badge{font-size:10px;font-weight:600;padding:2px 8px;border-radius:10px;background:var(--color-surface-alt);color:var(--color-text-secondary);border:1px solid var(--color-border-light);text-transform:uppercase;letter-spacing:.3px}.training-card-desc{font-size:12px;color:var(--color-text-secondary);line-height:1.5;margin-bottom:12px}.training-config{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:12px;padding:10px;background:#0000000d;border-radius:var(--radius-sm);border:1px solid var(--color-border-light)}.training-config-row{display:flex;align-items:center;gap:8px}.training-config-row label{font-size:11px;color:var(--color-text-muted);min-width:80px;white-space:nowrap}.training-config-row input{flex:1;background:#00000014;border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:4px 8px;font-size:11px;font-family:var(--font-mono);color:var(--color-text);outline:none;max-width:90px}.training-config-row input:focus{border-color:var(--color-accent)}.training-card-status{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}.training-onnx-status{font-size:11px;font-weight:600;padding:2px 10px;border-radius:10px}.training-onnx-ok{background:var(--color-success-light);color:var(--color-success)}.training-onnx-missing{background:var(--color-warning-light);color:var(--color-warning)}.training-trigger-badge{font-size:10px;padding:2px 8px;border-radius:10px;background:var(--color-surface-alt);color:var(--color-text-muted);border:1px solid var(--color-border-light)}.training-card-actions{display:flex;gap:8px}.training-progress{margin-top:12px;padding-top:12px;border-top:1px solid var(--color-border-light)}.training-progress-bar{width:100%;height:6px;background:var(--color-border-light);border-radius:3px;overflow:hidden;margin-bottom:6px}.training-progress-fill{height:100%;background:var(--color-accent);border-radius:3px;transition:width .3s ease;width:0%}.training-progress-text{font-size:11px;color:var(--color-text-secondary);font-family:var(--font-mono)}.training-history{margin-top:32px}.training-history h4{font-size:14px;font-weight:600;color:var(--color-text);margin-bottom:12px}.training-table{width:100%;border-collapse:collapse;background:var(--color-surface);border-radius:var(--radius-md);overflow:hidden;border:1px solid var(--color-border-light);font-size:12px}.training-table thead th{text-align:left;padding:10px 16px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--color-text-muted);background:var(--color-surface-alt);border-bottom:1px solid var(--color-border)}.training-table td{padding:8px 16px;border-bottom:1px solid var(--color-border-light);color:var(--color-text)}.training-table tr:last-child td{border-bottom:none}.training-table tr:hover td{background:var(--color-surface-hover)}.training-status{display:inline-block;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:600;text-transform:uppercase}.training-status-completed{background:var(--color-success-light);color:var(--color-success)}.training-status-running{background:var(--color-accent-light);color:var(--color-accent)}.training-status-failed{background:var(--color-danger-light);color:var(--color-danger)}.training-status-idle{background:var(--color-surface-alt);color:var(--color-text-muted)}.training-status-inactive{background:#f0f0f0;color:#888}.training-models,.training-models-empty{margin-top:24px}.training-models h4,.training-models-empty h4{font-size:15px;font-weight:600;margin-bottom:10px;color:#333}.training-btn-sm{padding:3px 8px;font-size:11px;border:1px solid #ccc;border-radius:4px;background:#fff;cursor:pointer;color:#555;transition:background .15s}.training-btn-sm:hover{background:#f0f0f0}.training-btn-danger{color:#d32f2f;border-color:#d32f2f44}.training-btn-danger:hover{background:#fce4ec}.tower-context-menu{position:fixed;z-index:10000;background:#141824f2;border:1px solid rgba(255,255,255,.12);border-radius:6px;padding:4px 0;min-width:140px;box-shadow:0 8px 24px #0006;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.tcm-header{padding:6px 12px 2px;font-size:11px;font-weight:600;color:#ffffffb3;text-transform:uppercase;letter-spacing:.5px}.tcm-coords{padding:0 12px 6px;font-size:10px;color:#fff6;font-family:monospace;border-bottom:1px solid rgba(255,255,255,.08)}.tcm-item{display:block;width:100%;padding:6px 12px;background:none;border:none;color:#fff;font-size:12px;text-align:left;cursor:pointer}.tcm-item:hover{background:#ffffff1a}.tcm-delete{color:#ef4444}.tcm-delete:hover{background:#ef444426}.pf-te-valid{color:#22c55e;font-weight:700;font-size:12px;min-width:14px;text-align:center}.pf-te-invalid-icon{color:#ef4444;font-weight:700;font-size:12px;min-width:14px;text-align:center}.pf-edit-hint{font-size:11px;color:#fff6;font-style:italic;padding:2px 0 6px}.pf-save-btn{background:#22c55e26!important;border-color:#22c55e4d!important;color:#22c55e!important}.pf-save-btn:hover{background:#22c55e40!important}.pf-edit-btn.active{background:#3b82f633!important;border-color:#3b82f666!important;color:#3b82f6!important}.cache-card{background:var(--color-surface);border-radius:var(--radius-md);padding:20px;border:1px solid var(--color-border-light);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);box-shadow:var(--shadow-raised),var(--shadow-card);margin-bottom:16px}.cache-card-title{font-size:14px;font-weight:600;color:var(--color-text);margin-bottom:14px}.cache-status-row{display:flex;align-items:center;gap:12px;margin-bottom:14px}.cache-toggle{position:relative;width:40px;height:22px;display:inline-block;flex-shrink:0}.cache-toggle input{opacity:0;width:0;height:0}.cache-toggle-slider{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--color-border);border-radius:22px;cursor:pointer;transition:background var(--transition-fast)}.cache-toggle-slider:before{content:"";position:absolute;width:18px;height:18px;left:2px;bottom:2px;background:#fff;border-radius:50%;transition:transform var(--transition-fast);box-shadow:0 1px 3px #00000026}.cache-toggle input:checked+.cache-toggle-slider{background:var(--color-accent)}.cache-toggle input:checked+.cache-toggle-slider:before{transform:translate(18px)}.cache-toggle-label{font-size:13px;font-weight:500;color:var(--color-text)}.cache-usage-row{display:flex;align-items:center;gap:12px;margin-bottom:10px}.cache-usage-text{font-size:12px;color:var(--color-text-secondary);font-family:var(--font-mono);white-space:nowrap;min-width:240px}.cache-usage-bar{flex:1;height:8px;background:var(--color-border-light);border-radius:4px;overflow:hidden;min-width:80px}.cache-usage-fill{height:100%;background:var(--color-accent);border-radius:4px;transition:width .3s ease}.cache-hits-row{font-size:12px;color:var(--color-text-muted);margin-bottom:14px;font-family:var(--font-mono)}.cache-actions-row{display:flex;gap:8px}.cache-btn{background:var(--color-surface-alt);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:6px 14px;font-size:12px;font-weight:500;color:var(--color-text-secondary);cursor:pointer;font-family:var(--font-sans);transition:all var(--transition-fast)}.cache-btn:hover{background:var(--color-surface-hover);color:var(--color-text)}.cache-btn-danger{color:var(--color-danger);border-color:#d32f2f4d}.cache-btn-danger:hover{background:var(--color-danger-light);border-color:var(--color-danger)}.cache-ttl-row{margin-bottom:14px}.cache-ttl-row:last-child{margin-bottom:0}.cache-ttl-label{display:block;font-size:12px;color:var(--color-text-secondary);margin-bottom:6px}.cache-ttl-control{display:flex;align-items:center;gap:12px}.cache-ttl-value{font-size:12px;font-weight:600;color:var(--color-text);font-family:var(--font-mono);min-width:70px;text-align:right}.cache-slider{flex:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:6px;border-radius:3px;outline:none;background:linear-gradient(to right,var(--color-accent) 0%,var(--color-accent) var(--pct, 50%),var(--color-border-light) var(--pct, 50%),var(--color-border-light) 100%)}.cache-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--color-accent);cursor:pointer;box-shadow:0 1px 4px #0003;border:2px solid white}.cache-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--color-accent);cursor:pointer;box-shadow:0 1px 4px #0003;border:2px solid white}.cache-breakdown-header,.cache-breakdown-row,.cache-breakdown-footer{display:grid;grid-template-columns:1fr 70px 80px 70px 60px;gap:8px;align-items:center;padding:6px 0}.cache-breakdown-header{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--color-text-muted);border-bottom:1px solid var(--color-border);padding-bottom:8px;margin-bottom:4px}.cache-breakdown-row{font-size:12px;border-bottom:1px solid var(--color-border-light)}.cache-breakdown-row:last-child{border-bottom:none}.cache-breakdown-footer{font-size:12px;font-weight:600;color:var(--color-text);border-top:1px solid var(--color-border);padding-top:8px;margin-top:4px}.cache-cat-name{color:var(--color-text);font-weight:500}.cache-cat-num{font-family:var(--font-mono);font-size:11px;color:var(--color-text-secondary);text-align:right}.cache-breakdown-loading,.cache-breakdown-empty{text-align:center;padding:20px;color:var(--color-text-muted);font-size:12px}.cache-btn-sm{padding:2px 8px;font-size:10px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:transparent;cursor:pointer;color:var(--color-text-muted);font-family:var(--font-sans);transition:all var(--transition-fast)}.cache-btn-sm:hover{background:var(--color-danger-light);color:var(--color-danger);border-color:var(--color-danger)}.login-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10000;display:none;align-items:center;justify-content:center;background:#080c18d9;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.login-overlay.visible{display:flex}.login-card{width:100%;max-width:380px;padding:40px 36px;text-align:center;background:var(--glass-bg-strong);border:1px solid var(--glass-border);border-radius:var(--radius-card);box-shadow:var(--glass-shadow-lg)}.login-logo{margin-bottom:20px}.login-logo-icon{width:48px;height:48px}.login-title{font-family:var(--font-sans);font-size:22px;font-weight:700;color:var(--color-text);margin:0 0 6px;letter-spacing:-.02em}.login-subtitle{font-family:var(--font-sans);font-size:13px;color:var(--color-text-muted);margin:0 0 28px}.login-form{margin-bottom:20px}.login-input-group{margin-bottom:14px}.login-input{width:100%;padding:11px 14px;font-family:var(--font-sans);font-size:13px;color:var(--color-text);background:#00000008;border:1px solid var(--color-border);border-radius:var(--radius-md);outline:none;transition:border-color var(--transition-fast),box-shadow var(--transition-fast);box-sizing:border-box}.login-input::placeholder{color:var(--color-text-muted)}.login-input:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-glow)}.login-input.shake{animation:shake .4s ease}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-6px)}75%{transform:translate(6px)}}.login-btn{width:100%;padding:11px 24px;font-family:var(--font-sans);font-size:13px;font-weight:600;color:#fff;background:var(--color-accent);border:none;border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast);display:flex;align-items:center;justify-content:center;gap:8px}.login-btn:hover:not(:disabled){background:var(--color-accent-hover)}.login-btn:disabled{opacity:.6;cursor:not-allowed}.login-btn-spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .6s linear infinite}.login-btn-spinner.hidden{display:none}.login-status{padding:20px 0}.login-status.hidden{display:none}.login-status-icon:before{content:"";display:block;width:44px;height:44px;margin:0 auto 14px;background:var(--color-accent-light);border-radius:50%;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%233b82f6'%3E%3Cpath d='M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:center;background-size:22px}.login-status-text{font-family:var(--font-sans);font-size:13px;color:var(--color-text-secondary);line-height:1.6;margin:0 0 16px}.login-status-text strong{color:var(--color-text)}.login-back-btn{font-family:var(--font-sans);font-size:12px;color:var(--color-accent);background:none;border:none;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.login-back-btn:hover{color:var(--color-accent-hover)}.login-error{font-family:var(--font-sans);font-size:12px;color:var(--color-danger);margin:8px 0 0;text-align:left}.login-footer{font-family:var(--font-sans);font-size:11px;color:var(--color-text-muted);margin:0}.login-footer.hidden{display:none}.user-menu{position:relative;display:flex;align-items:center}.user-avatar{width:30px;height:30px;border-radius:50%;background:var(--color-accent);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:box-shadow var(--transition-fast)}.user-avatar:hover{box-shadow:0 0 0 2px var(--color-accent-glow)}.user-avatar-letter{font-family:var(--font-sans);font-size:13px;font-weight:600;color:#fff;line-height:1}.user-dropdown{position:absolute;top:calc(100% + 8px);right:0;min-width:220px;background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-lg);box-shadow:var(--glass-shadow-lg);z-index:1000;overflow:hidden}.user-dropdown.hidden{display:none}.user-dropdown-header{padding:12px 16px}.user-dropdown-email{display:block;font-family:var(--font-sans);font-size:13px;font-weight:600;color:var(--color-text)}.user-dropdown-domain{display:block;font-family:var(--font-sans);font-size:11px;color:var(--color-text-muted);margin-top:2px}.user-dropdown-divider{height:1px;background:var(--color-border)}.user-dropdown-item{width:100%;display:flex;align-items:center;gap:8px;padding:10px 16px;font-family:var(--font-sans);font-size:13px;color:var(--color-text-secondary);background:none;border:none;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.user-dropdown-item:hover{background:var(--color-surface-hover);color:var(--color-danger)}.user-dropdown-item svg{flex-shrink:0}#project-panel{position:fixed;top:80px;right:12px;width:360px;max-height:calc(100vh - 140px);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);border-radius:var(--radius-card);box-shadow:var(--shadow-raised),var(--glass-shadow-lg);z-index:55;overflow-y:auto}.project-panel-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--color-border)}.project-panel-title{font-size:14px;font-weight:700;color:var(--color-text);display:flex;align-items:center;gap:8px}.project-new-btn{padding:6px 14px;font-size:12px;font-weight:600;font-family:var(--font-sans);color:#fff;background:var(--color-accent);border:none;border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast)}.project-new-btn:hover{background:var(--color-accent-hover)}.project-create-form{padding:16px 20px;border-bottom:1px solid var(--color-border);display:flex;flex-direction:column;gap:12px}.project-form-field{display:flex;flex-direction:column;gap:4px}.project-form-label{font-size:11px;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px}.project-form-input{padding:8px 12px;font-size:13px;font-family:var(--font-sans);color:var(--color-text);background:#ffffffb3;border:1px solid var(--color-border);border-radius:var(--radius-sm);outline:none;transition:border-color var(--transition-fast)}.project-form-input:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px #3b82f61a}.project-form-textarea{resize:vertical;min-height:40px}.project-select-methods{display:flex;gap:8px}.project-select-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:4px;padding:8px;font-size:11px;font-weight:600;font-family:var(--font-sans);color:var(--color-text-secondary);background:#0000000d;border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast)}.project-select-btn:hover{border-color:var(--color-accent);color:var(--color-accent)}.project-select-btn.active{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.project-bounds-display{padding:8px 12px;background:var(--color-surface-alt);border-radius:var(--radius-sm);font-size:12px;color:var(--color-accent);font-family:var(--font-mono)}.project-form-actions{display:flex;gap:8px;justify-content:flex-end}.project-form-cancel{padding:8px 16px;font-size:12px;font-weight:600;font-family:var(--font-sans);color:var(--color-text-secondary);background:none;border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast)}.project-form-cancel:hover{border-color:var(--color-text-muted)}.project-form-create{padding:8px 16px;font-size:12px;font-weight:600;font-family:var(--font-sans);color:#fff;background:var(--color-accent);border:none;border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast)}.project-form-create:hover:not(:disabled){background:var(--color-accent-hover)}.project-form-create:disabled{opacity:.5;cursor:not-allowed}.project-list{padding:8px 0}.project-empty{padding:32px 20px;text-align:center;font-size:13px;color:var(--color-text-muted)}.project-card{padding:12px 20px;border-bottom:1px solid var(--color-border-light);transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.project-card:hover{background:var(--color-surface-hover);transform:translateY(-1px);box-shadow:var(--shadow-card-hover)}.project-card:active{transform:translateY(0);box-shadow:var(--shadow-pressed)}.project-card:last-child{border-bottom:none}.project-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.project-card-name{font-size:13px;font-weight:600;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;margin-right:8px}.project-card-area{font-size:11px;font-family:var(--font-mono);color:var(--color-text-muted);flex-shrink:0}.project-card-meta{display:flex;gap:12px;font-size:11px;color:var(--color-text-secondary);margin-bottom:8px}.project-card-actions{display:flex;gap:6px}.project-action-btn{padding:4px 10px;font-size:11px;font-weight:600;font-family:var(--font-sans);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast);border:1px solid var(--color-border);background:#0000000d;color:var(--color-text-secondary)}.project-action-btn:hover{border-color:var(--color-accent);color:var(--color-accent)}.project-action-open{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.project-action-open:hover{background:var(--color-accent-hover);border-color:var(--color-accent-hover);color:#fff}.project-action-delete:hover{border-color:var(--color-danger);color:var(--color-danger)}.project-back-bar{padding:10px 20px;display:flex;flex-wrap:wrap;align-items:center;gap:10px;border-bottom:1px solid var(--color-border);background:#3b82f60f}.project-back-btn{display:flex;align-items:center;gap:6px;padding:6px 12px;font-size:12px;font-weight:600;font-family:var(--font-sans);color:var(--color-accent);background:none;border:1px solid var(--color-accent);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast)}.project-back-btn:hover{background:var(--color-accent);color:#fff}.project-active-name{font-size:12px;font-weight:600;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.project-tex-res{display:flex;align-items:center}.project-tex-res-label{font-size:11px;font-weight:600;color:var(--color-text-muted);display:flex;align-items:center;gap:6px;cursor:pointer}.project-tex-res-select{padding:3px 6px;font-size:11px;font-family:var(--font-mono, monospace);background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer}.project-ml-section{width:100%;margin-top:10px;padding-top:10px;border-top:1px solid var(--color-border-light);display:flex;flex-direction:column;gap:10px}.project-ml-btn{padding:7px 14px;font-size:12px;font-weight:600;font-family:var(--font-sans);color:#fff;background:linear-gradient(135deg,#8b5cf6,#6d28d9);border:none;border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast);align-self:flex-start}.project-ml-btn:hover{background:linear-gradient(135deg,#7c3aed,#5b21b6);box-shadow:0 2px 8px #8b5cf64d}.project-layer-toggles{display:flex;flex-wrap:wrap;gap:4px 12px}.project-layer-toggle{display:flex;align-items:center;gap:5px;font-size:11px;font-weight:500;color:var(--color-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none}.project-layer-toggle input[type=checkbox]{width:13px;height:13px;accent-color:var(--color-accent);cursor:pointer}.project-loading-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000011e0;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:opacity .4s ease}.project-loading-overlay.project-loading-fadeout{opacity:0;pointer-events:none}.project-loading-card{width:340px;background:var(--glass-bg, rgba(15,23,42,.9));border:1px solid var(--glass-border, rgba(255,255,255,.08));border-radius:16px;padding:28px 28px 24px;box-shadow:0 16px 48px #0006}.project-loading-header{display:flex;align-items:center;gap:14px;margin-bottom:20px}.project-loading-spinner{width:36px;height:36px;flex-shrink:0;border:3px solid rgba(96,165,250,.15);border-top-color:var(--color-accent, #3b82f6);border-radius:50%;animation:project-spin .8s linear infinite}.project-loading-title{font-size:15px;font-weight:700;color:var(--color-text, #e2e8f0);font-family:var(--font-sans);line-height:1.2}.project-loading-meta{font-size:12px;color:var(--color-text-muted, #94a3b8);font-family:var(--font-mono);margin-top:2px}.project-loading-progress{width:100%;height:4px;background:#ffffff0f;border-radius:2px;margin-bottom:12px;overflow:hidden}.project-loading-progress-bar{height:100%;width:0%;background:linear-gradient(90deg,var(--color-accent, #3b82f6),#60a5fa);border-radius:2px;transition:width .5s ease}.project-loading-status{font-size:12px;color:var(--color-text-secondary, #94a3b8);font-family:var(--font-sans);margin-bottom:16px}.project-loading-steps{display:flex;flex-direction:column;gap:6px}.pl-step{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--color-text-muted, #64748b);font-family:var(--font-sans);transition:color .2s}.pl-step-icon{width:16px;text-align:center;font-size:11px}.pl-step-active{color:var(--color-accent, #3b82f6)}.pl-step-active .pl-step-icon{animation:project-spin 1.2s linear infinite}.pl-step-done{color:#22c55e}.pl-step-warn{color:#f59e0b}@keyframes project-spin{to{transform:rotate(360deg)}}#pathfinding-panel{position:fixed;top:80px;left:72px;width:340px;max-height:calc(100vh - 140px);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);border-radius:var(--radius-card);box-shadow:var(--shadow-raised),var(--glass-shadow-lg);z-index:55;overflow-y:auto}.pf-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--color-border)}.pf-title{font-size:14px;font-weight:700;color:var(--color-text);display:flex;align-items:center;gap:8px}.pf-help-btn{width:22px;height:22px;display:flex;align-items:center;justify-content:center;color:var(--color-text-muted);border-radius:50%;transition:all var(--transition-fast);margin-left:auto}.pf-help-btn:hover{color:var(--color-accent);background:var(--color-surface-hover)}.pf-close-btn{width:24px;height:24px;border:none;background:none;color:var(--color-text-muted);font-size:18px;cursor:pointer;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.pf-close-btn:hover{background:var(--color-surface-hover);color:var(--color-text)}.pf-section{padding:12px 20px;border-bottom:1px solid var(--color-border-light)}.pf-label{font-size:11px;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px;display:block}.pf-tower-types{display:flex;gap:6px}.pf-tower-btn{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 6px;font-family:var(--font-sans);color:var(--color-text-secondary);background:#0000000d;border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast)}.pf-tower-btn:hover{border-color:var(--color-accent);transform:translateY(-1px);box-shadow:var(--shadow-card-hover)}.pf-tower-btn:active{transform:translateY(0);box-shadow:var(--shadow-pressed)}.pf-tower-btn.active{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.pf-tower-name{font-size:13px;font-weight:700}.pf-tower-detail{font-size:10px;opacity:.7}.pf-points{display:flex;flex-direction:column;gap:6px}.pf-point-row{display:flex;align-items:center;gap:8px}.pf-point-label{font-size:12px;font-weight:600;color:var(--color-text-secondary);width:40px}.pf-point-text{flex:1;font-size:12px;font-family:var(--font-mono);color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-point-btn{padding:4px 10px;font-size:11px;font-weight:600;font-family:var(--font-sans);color:var(--color-accent);background:none;border:1px solid var(--color-accent);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast)}.pf-point-btn:hover{background:var(--color-accent);color:#fff}.pf-layer-toggles{display:grid;grid-template-columns:1fr 1fr;gap:4px}.pf-layer-toggle{display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--radius-sm);cursor:pointer;font-size:12px;transition:background var(--transition-fast)}.pf-layer-toggle:hover{background:var(--color-surface-hover)}.pf-layer-toggle input[type=checkbox]{accent-color:var(--color-accent);width:14px;height:14px;flex-shrink:0}.pf-layer-icon{font-size:14px;width:18px;text-align:center;flex-shrink:0}.pf-layer-name{color:var(--color-text-secondary);font-weight:500}.pf-layer-toggle input:not(:checked)~.pf-layer-name{opacity:.5;text-decoration:line-through}.pf-weights{display:flex;flex-direction:column;gap:6px}.pf-weight-row{display:flex;align-items:center;gap:8px}.pf-weight-name{font-size:11px;color:var(--color-text-secondary);width:100px;flex-shrink:0}.pf-weight-slider{flex:1;height:4px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--color-border);border-radius:2px;outline:none}.pf-weight-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:var(--color-accent);cursor:pointer}.pf-weight-val{font-size:11px;font-family:var(--font-mono);color:var(--color-text-muted);width:32px;text-align:right;flex-shrink:0}.pf-actions{padding:12px 20px}.pf-run-btn{width:100%;padding:10px;font-size:13px;font-weight:600;font-family:var(--font-sans);color:#fff;background:var(--color-accent);border:none;border-radius:var(--radius-sm);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;transition:all var(--transition-fast)}.pf-run-btn:hover:not(:disabled){background:var(--color-accent-hover)}.pf-run-btn:disabled{opacity:.5;cursor:not-allowed}.pf-results{padding:12px 20px;border-top:1px solid var(--color-border-light)}.pf-result-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px}.pf-stat{display:flex;flex-direction:column;padding:8px 10px;background:var(--color-surface-alt);border-radius:var(--radius-sm)}.pf-stat span{font-size:10px;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.3px}.pf-stat strong{font-size:15px;font-weight:700;color:var(--color-text);margin-top:2px}.pf-status{padding:12px 20px;display:flex;flex-direction:column;gap:6px}.pf-progress-bar{height:4px;background:var(--color-border);border-radius:2px;overflow:hidden}.pf-progress-fill{height:100%;background:var(--color-accent);border-radius:2px;width:0%;transition:width .3s ease}.pf-status-text{font-size:11px;color:var(--color-text-muted)}.pf-algo-toggle{display:flex;gap:4px;margin-bottom:8px}.pf-algo-btn{flex:1;padding:7px 8px;font-size:12px;font-weight:600;font-family:var(--font-sans);color:var(--color-text-secondary);background:#0000000d;border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast);text-align:center}.pf-algo-btn:hover{border-color:var(--color-accent)}.pf-algo-btn.active{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.pf-algo-btn[data-algo=ml].active{background:#f59e0b;border-color:#f59e0b}.pf-ml-options{display:flex;flex-direction:column;gap:8px;padding:8px 0}.pf-ml-status{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--color-text-muted)}.pf-ml-dot{width:8px;height:8px;border-radius:50%;background:#666;flex-shrink:0}.pf-ml-dot-green{background:#22c55e}.pf-ml-dot-yellow{background:#f59e0b}.pf-ml-dot-red{background:#ef4444}.pf-ml-checkbox{font-size:12px;color:var(--color-text-secondary)}.pf-ml-checkbox label{display:flex;align-items:center;gap:6px;cursor:pointer}.pf-ml-checkbox input[type=checkbox]{accent-color:#f59e0b}.pf-stat-compare{border:1px solid rgba(245,158,11,.3);background:#f59e0b0d}.pf-route-list{max-height:200px;overflow-y:auto}.pf-route-item{display:flex;justify-content:space-between;align-items:center;padding:6px 8px;border-bottom:1px solid rgba(255,255,255,.08);cursor:pointer;transition:background .15s}.pf-route-item:hover{background:#ffffff0d}.pf-route-info{min-width:0;flex:1}.pf-route-name{font-size:12px;font-weight:500;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pf-route-meta{font-size:10px;opacity:.6;display:block}.pf-route-actions{display:flex;gap:4px;flex-shrink:0}.pf-route-actions button{background:none;border:none;color:inherit;cursor:pointer;font-size:12px;padding:2px 4px;opacity:.6;transition:opacity .15s}.pf-route-actions button:hover{opacity:1}.pf-route-empty{font-size:11px;opacity:.4;padding:8px;text-align:center}.pf-route-count{font-size:11px;opacity:.5}.pf-stat-alert{border:1px solid rgba(239,68,68,.3);background:#ef444414}.pf-stat-alert strong{color:#ef4444}.pf-data-section{background:#00000005}.pf-data-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px}.pf-data-item{display:flex;align-items:center;gap:5px;padding:4px 6px;border-radius:var(--radius-sm);font-size:11px}.pf-data-icon{width:14px;text-align:center;flex-shrink:0}.pf-data-name{flex:1;color:var(--color-text-secondary)}.pf-data-count{font-family:var(--font-mono);font-size:10px;color:var(--color-text-muted)}.pf-data-ok{background:#22c55e14}.pf-data-ok .pf-data-icon{color:#22c55e}.pf-data-missing{background:#ef44440f}.pf-data-missing .pf-data-icon{color:#ef4444}.pf-data-custom{grid-column:span 2;background:#9333ea0f}.pf-data-custom .pf-data-icon{color:#9333ea}.pf-data-loading,.pf-data-error{font-size:11px;color:var(--color-text-muted);padding:4px 0}.pf-prepare-btn{width:100%;padding:8px;margin-top:8px;font-size:12px;font-weight:600;font-family:var(--font-sans);color:#fff;background:#9333ea;border:none;border-radius:var(--radius-sm);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;transition:all var(--transition-fast)}.pf-prepare-btn:hover:not(:disabled){background:#7c3aed}.pf-prepare-btn:disabled{opacity:.6;cursor:not-allowed}.pf-prepare-log{max-height:160px;overflow-y:auto;margin-top:8px;padding:4px 0}.pf-log-entry{display:flex;align-items:flex-start;gap:6px;padding:3px 0;font-size:11px;line-height:1.4}.pf-log-icon{width:14px;text-align:center;flex-shrink:0}.pf-log-msg{color:var(--color-text-secondary)}.pf-log-ok .pf-log-icon{color:#22c55e}.pf-log-ok .pf-log-msg{color:var(--color-text)}.pf-log-cached .pf-log-icon{color:#3b82f6}.pf-log-progress .pf-log-icon{color:#f59e0b}.pf-log-error .pf-log-icon,.pf-log-error .pf-log-msg{color:#ef4444}.pf-data-used{margin-top:8px;padding:6px 0}.pf-data-used-title{font-size:10px;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.3px;margin-bottom:4px}.pf-data-used-grid{display:flex;flex-wrap:wrap;gap:4px}.pf-data-used-grid span{font-size:10px;padding:2px 6px;border-radius:3px}.pf-du-ok{background:#22c55e1a;color:#22c55e}.pf-du-empty{background:#ef444414;color:#ef4444}.pf-data-warn{font-size:10px;color:#f59e0b;margin-top:4px;padding:4px 6px;background:#f59e0b14;border-radius:var(--radius-sm)}.pf-tower-logs-btn{width:100%;padding:6px;margin-top:8px;font-size:11px;font-weight:500;font-family:var(--font-sans);color:var(--color-accent);background:#3b82f60f;border:1px solid rgba(59,130,246,.2);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast)}.pf-tower-logs-btn:hover{background:#3b82f61f}.pf-tower-logs{max-height:300px;overflow-y:auto;margin-top:8px}.pf-tower-log{padding:8px 8px 8px 20px;margin-bottom:6px;background:#00000008;border-radius:var(--radius-sm);position:relative}.pf-tower-log:before{content:"";position:absolute;left:7px;top:12px;width:6px;height:6px;border-radius:50%;background:var(--color-border)}.pf-tower-log-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.pf-tower-log-role{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:2px 6px;border-radius:3px}.pf-role-start{background:#22c55e26;color:#22c55e}.pf-role-end{background:#ef444426;color:#ef4444}.pf-role-intermediate{background:#3b82f626;color:#3b82f6}.pf-tower-log-pos{font-size:10px;font-family:var(--font-mono);color:var(--color-text-muted)}.pf-tower-log-reasons{margin:4px 0}.pf-tower-log-reason{font-size:11px;color:var(--color-text-secondary);padding:1px 0;line-height:1.4}.pf-tower-log-reason:before{content:"•";margin-right:4px;opacity:.5}.pf-tower-log-costs{margin:6px 0 4px}.pf-tower-cost-bar{display:flex;align-items:center;gap:4px;margin-bottom:2px}.pf-cost-label{font-size:9px;color:var(--color-text-muted);width:80px;flex-shrink:0}.pf-cost-fill-bg{flex:1;height:4px;background:#0000000d;border-radius:2px;overflow:hidden}.pf-cost-fill{height:100%;background:var(--color-accent);border-radius:2px;min-width:1px;transition:width .2s}.pf-cost-val{font-size:9px;font-family:var(--font-mono);color:var(--color-text-muted);width:28px;text-align:right;flex-shrink:0}.pf-tower-log-spans{font-size:10px;color:var(--color-text-muted);font-family:var(--font-mono);margin-top:2px}.pf-edit-section{margin-top:8px;padding:8px 0;border-top:1px solid var(--color-border-light)}.pf-edit-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.pf-edit-actions{display:flex;gap:4px}.pf-edit-btn{padding:4px 8px;font-size:10px;font-weight:600;font-family:var(--font-sans);color:var(--color-accent);background:#3b82f614;border:1px solid rgba(59,130,246,.2);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast)}.pf-edit-btn:hover{background:#3b82f626}.pf-edit-btn:disabled{opacity:.5;cursor:not-allowed}.pf-tower-list{max-height:200px;overflow-y:auto}.pf-tower-edit{display:flex;align-items:center;gap:4px;padding:4px 6px;margin-bottom:2px;border-radius:var(--radius-sm);font-size:11px;background:#00000008}.pf-tower-edit.pf-tower-invalid{background:#ef44440f}.pf-tower-edit.pf-tower-invalid .pf-te-role{background:#ef444426;color:#ef4444}.pf-te-role{width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;border-radius:50%;flex-shrink:0}.pf-te-start{background:#22c55e33;color:#22c55e}.pf-te-end{background:#ef444433;color:#ef4444}.pf-te-mid{background:#3b82f633;color:#3b82f6}.pf-te-pos{flex:1;font-family:var(--font-mono);font-size:10px;color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-te-height{width:48px;padding:2px 4px;font-size:11px;font-family:var(--font-mono);color:var(--color-text);background:#0000001a;border:1px solid var(--color-border);border-radius:3px;text-align:right}.pf-te-height:focus{border-color:var(--color-accent);outline:none}.pf-te-unit{font-size:9px;color:var(--color-text-muted);width:12px}.pf-te-move,.pf-te-del{width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px;background:none;border:none;color:var(--color-text-muted);cursor:pointer;border-radius:3px;transition:all var(--transition-fast);flex-shrink:0}.pf-te-move:hover{background:#3b82f626;color:#3b82f6}.pf-te-del:hover{background:#ef444426;color:#ef4444}.pf-edit-validation{margin-top:6px}.pf-val-issue{font-size:10px;color:#ef4444;padding:2px 6px;margin-bottom:2px;background:#ef44440f;border-radius:3px}.pf-val-ok{font-size:10px;color:#22c55e;padding:2px 6px;background:#22c55e0f;border-radius:3px}.pf-profile-section{margin-top:8px;padding:8px 0;border-top:1px solid var(--color-border-light)}.pf-profile-wrap{cursor:pointer;position:relative;border-radius:var(--radius-sm);border:1px solid var(--color-border);overflow:hidden;transition:border-color .15s}.pf-profile-wrap:hover{border-color:#fff3}.pf-profile-wrap:after{content:"Click to expand";position:absolute;top:4px;right:6px;font-size:8px;color:#ffffff4d;pointer-events:none;transition:color .15s}.pf-profile-wrap:hover:after{color:#fff9}#pf-profile-canvas{width:100%;height:160px;background:#00000026;display:block}.pf-profile-legend,.pf-profile-modal-legend{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:4px;font-size:9px}.pf-legend-terrain:before,.pf-legend-cable:before,.pf-legend-trees:before,.pf-legend-buildings:before,.pf-legend-water:before,.pf-legend-clearance:before,.pf-legend-towers:before,.pf-legend-roads:before{content:"";display:inline-block;width:10px;height:3px;border-radius:1px;margin-right:3px;vertical-align:middle}.pf-legend-terrain{color:#8b7765}.pf-legend-terrain:before{background:#8b7765}.pf-legend-cable{color:#3b82f6}.pf-legend-cable:before{background:#3b82f6}.pf-legend-trees{color:#22c55e}.pf-legend-trees:before{background:#22c55e}.pf-legend-buildings{color:#ef4444}.pf-legend-buildings:before{background:#ef4444}.pf-legend-water{color:#38bdf8}.pf-legend-water:before{background:#38bdf8}.pf-legend-clearance{color:#fb923c}.pf-legend-clearance:before{background:#fb923c;border-style:dashed}.pf-legend-towers{color:#f59e0b}.pf-legend-towers:before{background:#f59e0b;height:8px;width:3px;border-radius:1px}.pf-legend-roads{color:#9ca3af}.pf-legend-roads:before{background:#9ca3af;border-style:dashed}.pf-profile-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10000;background:#000000bf;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.pf-profile-modal{background:#14141ef2;border:1px solid rgba(255,255,255,.12);border-radius:12px;padding:16px;max-width:calc(100vw - 40px);max-height:calc(100vh - 40px);overflow:auto;box-shadow:0 20px 60px #0009}.pf-profile-modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.pf-profile-modal-title{font-size:14px;font-weight:600;color:#ffffffd9}.pf-profile-modal-actions{display:flex;gap:8px;align-items:center}.pf-profile-modal-btn{padding:4px 12px;font-size:11px;border-radius:6px;border:1px solid rgba(255,255,255,.15);background:#ffffff14;color:#fffc;cursor:pointer;transition:background .15s}.pf-profile-modal-btn:hover{background:#ffffff26}.pf-profile-modal-close{width:28px;height:28px;border-radius:50%;border:1px solid rgba(255,255,255,.15);background:#ffffff0d;color:#ffffffb3;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s}.pf-profile-modal-close:hover{background:#ef44444d}.pf-profile-modal-canvas{border-radius:8px;background:#0000004d;border:1px solid rgba(255,255,255,.08);display:block}.pf-profile-modal-legend{margin-top:10px;font-size:11px}.pf-export-section{margin-top:8px;padding:8px 0;border-top:1px solid var(--color-border-light)}.pf-export-buttons{display:flex;gap:4px}.pf-export-btn{flex:1;padding:6px 4px;font-size:10px;font-weight:600;font-family:var(--font-sans);color:var(--color-text-secondary);background:#0000000d;border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;text-align:center;transition:all var(--transition-fast)}.pf-export-btn:hover{border-color:var(--color-accent);color:var(--color-accent);background:#3b82f60f}.pf-toggle-fab{position:fixed;top:88px;left:72px;width:40px;height:40px;border-radius:50%;background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);box-shadow:var(--shadow-raised),var(--glass-shadow);color:var(--color-accent);cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:56;transition:all var(--transition-fast)}.pf-toggle-fab:hover{background:var(--color-accent-light);transform:scale(1.1);box-shadow:var(--shadow-card-hover)}.pf-toggle-fab.active{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.pf-toggle-fab.hidden{display:none}#tower-panel{position:fixed;top:72px;left:72px;width:300px;max-height:calc(100vh - 100px);overflow-y:auto;z-index:120;transition:opacity .2s,transform .2s}#tower-panel.hidden{display:none}.tower-panel-inner{background:#0a0e1ad9;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.08);border-radius:16px;padding:16px;display:flex;flex-direction:column;gap:12px}.tower-panel-header{display:flex;align-items:center;justify-content:space-between}.tower-panel-header h3{margin:0;font-size:14px;font-weight:600;color:#ffffffe6;letter-spacing:.3px}.tower-close-btn{background:none;border:none;color:#ffffff80;font-size:18px;cursor:pointer;padding:2px 6px;border-radius:6px;transition:color .15s,background .15s}.tower-close-btn:hover{color:#ffffffe6;background:#ffffff14}.tower-type-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.tower-type-card{background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:10px 6px;cursor:pointer;text-align:center;transition:all .15s;color:#ffffffb3}.tower-type-card:hover{background:#ffffff14;border-color:#ffffff26}.tower-type-card.active{background:#3b82f626;border-color:#3b82f680;color:#60a5fa}.tower-type-icon{width:24px;height:24px;margin:0 auto 4px}.tower-type-icon svg{width:100%;height:100%}.tower-type-label{font-size:13px;font-weight:600;margin-bottom:2px}.tower-type-detail{font-size:10px;opacity:.6}.tower-type-cost{font-size:10px;opacity:.5;margin-top:2px}.tower-place-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:10px;background:#3b82f626;border:1px solid rgba(59,130,246,.3);border-radius:10px;color:#60a5fa;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s}.tower-place-btn:hover{background:#3b82f640;border-color:#3b82f680}.tower-place-btn.active{background:#ef444426;border-color:#ef444466;color:#f87171}.tower-hints{display:flex;flex-direction:column;gap:4px;padding:8px;background:#ffffff08;border-radius:8px}.tower-hint{font-size:11px;color:#ffffff80;display:flex;align-items:center;gap:6px}.tower-hint kbd{display:inline-block;padding:1px 5px;background:#ffffff14;border:1px solid rgba(255,255,255,.12);border-radius:4px;font-size:10px;font-family:inherit;color:#ffffffb3;min-width:20px;text-align:center}.tower-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px}.tower-stat{background:#ffffff0a;border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:2px}.tower-stat-label{font-size:10px;color:#fff6;text-transform:uppercase;letter-spacing:.5px}.tower-stat-value{font-size:14px;font-weight:600;color:#ffffffe6}.tower-selected-info{background:#3b82f614;border:1px solid rgba(59,130,246,.2);border-radius:10px;padding:10px}.tower-selected-header{font-size:11px;font-weight:600;color:#60a5fa;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.tower-selected-detail{display:flex;flex-direction:column;gap:2px;font-size:11px;color:#fff9;margin-bottom:8px}.tower-delete-btn{display:flex;align-items:center;gap:6px;width:100%;padding:6px 10px;background:#ef44441a;border:1px solid rgba(239,68,68,.25);border-radius:6px;color:#f87171;font-size:12px;cursor:pointer;transition:all .15s}.tower-delete-btn:hover{background:#ef444433;border-color:#ef444466}.tower-actions{display:flex;flex-direction:column;gap:6px}.tower-action-btn{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;padding:8px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:8px;color:#ffffffb3;font-size:12px;cursor:pointer;transition:all .15s}.tower-action-btn:hover{background:#ffffff14;border-color:#ffffff26;color:#ffffffe6}.tower-action-danger:hover{background:#ef44441a;border-color:#ef44444d;color:#f87171}.tower-distance-label{position:fixed;z-index:1000;padding:3px 8px;border-radius:6px;font-size:12px;font-weight:600;pointer-events:none;white-space:nowrap;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0a0e1acc;border:1px solid rgba(255,255,255,.15)}#plugin-panel{position:fixed;top:80px;right:12px;width:380px;max-height:calc(100vh - 140px);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);border-radius:var(--radius-card);box-shadow:var(--shadow-raised),var(--glass-shadow-lg);z-index:55;overflow-y:auto;transition:transform var(--transition-normal),opacity var(--transition-normal);display:none}#plugin-panel.visible{display:block}.plugin-panel-header{padding:14px 18px;font-size:14px;font-weight:600;border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;color:var(--color-text);position:sticky;top:0;background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));z-index:1;border-radius:var(--radius-card) var(--radius-card) 0 0}.plugin-panel-header .panel-close{background:none;border:none;color:var(--color-text-muted);cursor:pointer;font-size:18px;padding:0 4px;line-height:1}.plugin-panel-header .panel-close:hover{color:var(--color-text)}.plugin-card{margin:8px 12px;padding:12px 14px;background:#ffffff80;border:1px solid var(--color-border-light);border-radius:var(--radius-md);transition:all var(--transition-fast)}.plugin-card:hover{background:#ffffffb3;box-shadow:var(--shadow-card-hover);transform:translateY(-1px)}.plugin-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.plugin-card-name{font-size:13px;font-weight:600;color:var(--color-text)}.plugin-card-version{font-size:10px;color:var(--color-text-muted);margin-left:6px}.plugin-badge{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;padding:2px 8px;border-radius:var(--radius-pill);line-height:1.4}.plugin-badge-segmentation{background:var(--color-accent-light);color:var(--color-accent)}.plugin-badge-detection{background:var(--color-success-light);color:var(--color-success)}.plugin-badge-simulation{background:var(--color-purple-light);color:var(--color-purple)}.plugin-badge-analysis{background:var(--color-warning-light);color:var(--color-warning)}.plugin-card-desc{font-size:11px;color:var(--color-text-secondary);line-height:1.4;margin-bottom:8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.plugin-metrics{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.plugin-metric{font-size:10px;color:var(--color-text-muted);background:var(--color-surface-alt);padding:2px 8px;border-radius:var(--radius-sm);white-space:nowrap}.plugin-metric strong{color:var(--color-text-secondary);font-weight:600}.plugin-actions{display:flex;gap:6px}.plugin-btn{font-size:11px;font-weight:500;font-family:var(--font-sans);padding:5px 12px;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:#fff;color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast)}.plugin-btn:hover{background:var(--color-surface-hover);color:var(--color-text);border-color:var(--color-accent)}.plugin-btn-primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.plugin-btn-primary:hover{background:var(--color-accent-hover)}.plugin-enabled-toggle{display:flex;align-items:center;gap:4px;font-size:10px;color:var(--color-text-muted)}.plugin-enabled-toggle input[type=checkbox]{width:12px;height:12px;accent-color:var(--color-accent);cursor:pointer}.plugin-new-btn{display:block;width:calc(100% - 24px);margin:12px;padding:10px;font-size:12px;font-weight:600;font-family:var(--font-sans);color:var(--color-accent);background:var(--color-accent-light);border:1px dashed var(--color-accent);border-radius:var(--radius-md);cursor:pointer;text-align:center;transition:all var(--transition-fast)}.plugin-new-btn:hover{background:var(--color-accent-glow)}#code-editor-panel{position:fixed;top:0;left:0;right:0;bottom:0;background:#080c18b3;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);z-index:90;display:none;padding:60px 32px 32px;overflow-y:auto}#code-editor-panel.visible{display:flex;flex-direction:column}.code-editor-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-shrink:0}.code-editor-title{display:flex;align-items:center;gap:10px}.code-editor-title h2{font-size:18px;font-weight:700;color:#fff;margin:0}.code-editor-title .plugin-badge{font-size:10px}.code-editor-actions{display:flex;gap:8px}.code-editor-btn{font-size:12px;font-weight:600;font-family:var(--font-sans);padding:8px 18px;border-radius:var(--radius-sm);border:1px solid rgba(255,255,255,.2);background:#ffffff1a;color:#fffc;cursor:pointer;transition:all var(--transition-fast)}.code-editor-btn:hover{background:#fff3;color:#fff}.code-editor-btn-primary{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.code-editor-btn-primary:hover{background:var(--color-accent-hover)}.code-editor-btn-close{background:transparent;border:none;color:#fff9;font-size:24px;cursor:pointer;padding:0 8px;line-height:1}.code-editor-btn-close:hover{color:#fff}.code-editor-body{display:flex;gap:16px;flex:1;min-height:0}.code-editor-code{flex:3;display:flex;flex-direction:column;min-width:0}.code-editor-code-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;color:#ffffff80;margin-bottom:6px}.code-container{position:relative;flex:1;min-height:400px;border-radius:var(--radius-md);overflow:hidden;border:1px solid rgba(255,255,255,.1)}.code-container textarea,.code-container pre{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:16px;font-family:var(--font-mono);font-size:13px;line-height:1.6;-moz-tab-size:4;tab-size:4;white-space:pre;overflow:auto;border:none;border-radius:var(--radius-md);box-sizing:border-box}.code-container textarea{background:transparent;color:transparent;caret-color:#fff;resize:none;z-index:2;outline:none;-webkit-text-fill-color:transparent}.code-container textarea::selection{background:#3b82f64d;-webkit-text-fill-color:transparent}.code-container pre{background:#1e1e2e;color:#cdd6f4;z-index:1;pointer-events:none}.code-container pre code{font-family:inherit;font-size:inherit;line-height:inherit}.code-readonly-badge{position:absolute;top:8px;right:8px;z-index:3;font-size:10px;font-weight:600;color:var(--color-warning);background:#f59e0b26;padding:2px 8px;border-radius:var(--radius-sm)}.code-editor-config{flex:1;min-width:240px;display:flex;flex-direction:column}.code-editor-config-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;color:#ffffff80;margin-bottom:6px}.config-fields{flex:1;background:#ffffff0f;border-radius:var(--radius-md);border:1px solid rgba(255,255,255,.1);padding:14px;overflow-y:auto}.config-field{margin-bottom:12px}.config-field:last-child{margin-bottom:0}.config-field label{display:block;font-size:10px;font-weight:600;color:#fff9;text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}.config-field input,.config-field select{width:100%;padding:6px 10px;font-size:12px;font-family:var(--font-mono);color:#fff;background:#ffffff14;border:1px solid rgba(255,255,255,.15);border-radius:var(--radius-sm);outline:none;box-sizing:border-box}.config-field input:focus,.config-field select:focus{border-color:var(--color-accent);box-shadow:0 0 0 2px var(--color-accent-glow)}.config-field input:disabled{opacity:.5;cursor:not-allowed}.config-deps{display:flex;flex-wrap:wrap;gap:4px}.config-dep-tag{font-size:10px;padding:2px 8px;border-radius:var(--radius-pill);background:#8b5cf626;color:#a78bfa}.code-editor-status{margin-top:12px;padding:8px 14px;background:#ffffff0f;border-radius:var(--radius-sm);font-size:11px;color:#ffffff80;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.code-editor-status-saved{color:var(--color-success)}.code-editor-status-modified{color:var(--color-warning)}.code-container pre .token.comment,.code-container pre .token.prolog,.code-container pre .token.doctype{color:#6c7086;font-style:italic}.code-container pre .token.keyword{color:#cba6f7}.code-container pre .token.builtin{color:#f38ba8}.code-container pre .token.string{color:#a6e3a1}.code-container pre .token.number,.code-container pre .token.boolean{color:#fab387}.code-container pre .token.operator{color:#89dceb}.code-container pre .token.punctuation{color:#9399b2}.code-container pre .token.function{color:#89b4fa}.code-container pre .token.class-name,.code-container pre .token.decorator{color:#f9e2af}.code-container pre .token.triple-quoted-string{color:#a6e3a1}#console-panel{position:fixed;bottom:60px;left:50%;transform:translate(-50%);width:640px;max-height:380px;background:var(--glass-bg-strong);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-md);box-shadow:var(--shadow-panel);color:var(--color-text);font-family:var(--font-mono);font-size:11px;z-index:39;display:flex;flex-direction:column;overflow:hidden;transition:opacity var(--transition-fast),transform var(--transition-fast)}#console-panel.hidden{display:none}.console-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--color-border);flex-shrink:0}.console-title{display:flex;align-items:center;gap:6px;font-weight:600;font-size:12px;color:var(--color-text)}.console-header-right{display:flex;align-items:center;gap:6px}.console-clear-btn{background:none;border:1px solid var(--color-border);border-radius:4px;color:var(--color-text-muted);font-family:var(--font-mono);font-size:10px;padding:2px 8px;cursor:pointer;transition:all var(--transition-fast)}.console-clear-btn:hover{color:var(--color-text);border-color:var(--color-text-muted)}.console-close-btn{background:none;border:none;color:var(--color-text-muted);font-size:18px;cursor:pointer;padding:0 4px;line-height:1;transition:color var(--transition-fast)}.console-close-btn:hover{color:var(--color-danger)}.console-body{overflow-y:auto;flex:1;min-height:0}.console-stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;padding:8px 12px;border-bottom:1px solid var(--color-border-light)}.console-stat{display:flex;flex-direction:column;padding:4px 0}.console-stat-wide{grid-column:1 / -1}.console-stat-label{font-size:9px;color:var(--color-text-muted);letter-spacing:.5px;text-transform:uppercase}.console-stat-value{font-size:11px;color:var(--color-text);font-weight:500}.console-layer-stats{padding:6px 12px;border-bottom:1px solid var(--color-border-light)}.console-layer-row{display:flex;align-items:center;gap:6px;padding:2px 0;font-size:10px}.console-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.console-dot-active{background:var(--color-accent);box-shadow:0 0 4px var(--color-accent)}.console-dot-idle{background:var(--color-text-muted);opacity:.5}.console-layer-name{color:var(--color-text-secondary);min-width:80px}.console-layer-val{color:var(--color-text-muted)}.console-log-header{font-size:10px;font-weight:600;color:var(--color-text-muted);padding:6px 12px 4px;letter-spacing:.5px;text-transform:uppercase}.console-log{max-height:160px;overflow-y:auto;padding:0 12px 8px}.console-log-entry{display:flex;align-items:baseline;gap:6px;padding:1px 0;font-size:10px;line-height:1.4}.console-log-icon{width:10px;text-align:center;flex-shrink:0;font-weight:700}.console-log-ok .console-log-icon{color:var(--color-success)}.console-log-err .console-log-icon{color:var(--color-danger)}.console-log-start .console-log-icon{color:var(--color-accent)}.console-log-time{color:var(--color-text-muted);flex-shrink:0;font-size:9px}.console-log-layer{color:var(--color-text-secondary);min-width:60px;flex-shrink:0}.console-log-tile{color:var(--color-text-muted);flex-shrink:0}.console-log-detail{color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.console-toggle-btn{display:flex;align-items:center;gap:4px;background:#0000000a;border:1px solid var(--color-border);border-radius:4px;padding:3px 8px;color:var(--color-text-muted);font-family:var(--font-mono);font-size:10px;font-weight:600;cursor:pointer;transition:all var(--transition-fast)}.console-toggle-btn:hover{background:#00000014;color:var(--color-text)}.console-toggle-btn.active{background:var(--color-accent-light);border-color:var(--color-accent);color:var(--color-accent)}.perf-stats{position:fixed;top:60px;left:60px;width:260px;background:#080c18eb;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);border-radius:10px;color:#ccc;font-family:SF Mono,Fira Code,monospace;font-size:11px;z-index:1100;overflow:hidden;pointer-events:auto;box-shadow:0 4px 20px #0006}.perf-stats.hidden{display:none}.perf-stats-header{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#8af;border-bottom:1px solid rgba(255,255,255,.06)}.perf-stats-close{cursor:pointer;opacity:.5;font-size:14px;line-height:1}.perf-stats-close:hover{opacity:1}.perf-fps-graph{display:block;width:100%;height:40px;border-bottom:1px solid rgba(255,255,255,.06)}.perf-stats-grid{padding:4px 0;max-height:320px;overflow-y:auto}.perf-stat-row{display:flex;justify-content:space-between;padding:2px 10px;line-height:1.4}.perf-stat-label{color:#888;flex-shrink:0;margin-right:8px}.perf-stat-value{color:#ddd;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.perf-stat-value.perf-green{color:#4ade80}.perf-stat-value.perf-yellow{color:#fbbf24}.perf-stat-value.perf-red{color:#ef4444}#polygon-data-panel{position:fixed;top:80px;right:16px;width:320px;max-height:calc(100vh - 140px);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-top:var(--border-raised);border-bottom:var(--border-raised-bottom);border-radius:var(--radius-card);box-shadow:var(--shadow-raised),var(--glass-shadow-lg);z-index:56;overflow-y:auto}.pgd-header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px 10px;border-bottom:1px solid var(--color-border)}.pgd-title{font-size:13px;font-weight:700;color:var(--color-text)}.pgd-close-btn{width:24px;height:24px;border:none;background:none;color:var(--color-text-muted);font-size:18px;cursor:pointer;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.pgd-close-btn:hover{background:var(--color-surface-hover);color:var(--color-text)}.pgd-section{padding:10px 18px;border-bottom:1px solid var(--color-border-light)}.pgd-draw-btn{width:100%;padding:10px 16px;background:var(--color-primary);color:#fff;border:none;border-radius:var(--radius-sm);font-size:13px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;transition:all var(--transition-fast)}.pgd-draw-btn:hover{background:var(--color-primary-hover)}.pgd-draw-btn.active{background:var(--color-accent);animation:pgd-pulse 1.5s ease-in-out infinite}@keyframes pgd-pulse{0%,to{opacity:1}50%{opacity:.7}}.pgd-hint{margin-top:8px;font-size:11px;color:var(--color-text-muted);line-height:1.4}.pgd-label{display:block;font-size:11px;font-weight:600;color:var(--color-text-secondary);margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px}.pgd-input{width:100%;padding:8px 12px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);font-size:13px;outline:none;transition:border-color var(--transition-fast);box-sizing:border-box}.pgd-input:focus{border-color:var(--color-primary)}.pgd-name-actions{display:flex;gap:8px;margin-top:10px}.pgd-btn{flex:1;padding:8px 12px;border:none;border-radius:var(--radius-sm);font-size:12px;font-weight:600;cursor:pointer;transition:all var(--transition-fast)}.pgd-btn-primary{background:var(--color-primary);color:#fff}.pgd-btn-primary:hover{background:var(--color-primary-hover)}.pgd-btn-secondary{background:var(--color-surface);color:var(--color-text-secondary);border:1px solid var(--color-border)}.pgd-btn-secondary:hover{background:var(--color-surface-hover)}.pgd-progress{height:4px;background:var(--color-surface);border-radius:2px;overflow:hidden;margin-bottom:8px}.pgd-progress-bar{height:100%;background:var(--color-primary);border-radius:2px;width:0%;transition:width .3s ease}.pgd-progress-text{font-size:11px;color:var(--color-text-muted)}.pgd-list-section{padding-bottom:4px}.pgd-list-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.pgd-list-title{font-size:11px;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px}.pgd-list-count{font-size:11px;color:var(--color-text-muted);background:var(--color-surface);padding:2px 8px;border-radius:10px}.pgd-list{max-height:240px;overflow-y:auto}.pgd-empty{padding:16px 0;text-align:center;font-size:12px;color:var(--color-text-muted)}.pgd-item{padding:10px 12px;background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:var(--radius-sm);margin-bottom:6px;cursor:pointer;transition:all var(--transition-fast)}.pgd-item:hover{background:var(--color-surface-hover);border-color:var(--color-primary)}.pgd-item-main{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.pgd-item-name{font-size:13px;font-weight:600;color:var(--color-text)}.pgd-item-meta{font-size:11px;color:var(--color-text-muted)}.pgd-item-stats{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:6px}.pgd-stat-chip{font-size:10px;color:var(--color-text-secondary);background:#3b82f61a;padding:2px 6px;border-radius:3px;border:1px solid rgba(59,130,246,.15)}.pgd-item-actions{display:flex;gap:4px;justify-content:flex-end}.pgd-item-toggle,.pgd-item-delete{width:24px;height:24px;border:none;background:none;color:var(--color-text-muted);font-size:14px;cursor:pointer;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.pgd-item-toggle:hover{background:#3b82f626;color:var(--color-primary)}.pgd-item-delete:hover{background:#ef444426;color:var(--color-error)}.pgd-detail{padding:12px 18px}.pgd-detail-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.pgd-detail-name{font-size:14px;font-weight:700;color:var(--color-text)}.pgd-stats-grid{display:flex;flex-direction:column;gap:1px}.pgd-stat-row{display:flex;justify-content:space-between;align-items:center;padding:5px 0}.pgd-stat-divider{border-top:1px solid var(--color-border-light);padding-top:8px;margin-top:4px}.pgd-stat-label{font-size:11px;color:var(--color-text-muted)}.pgd-stat-value{font-size:12px;font-weight:600;color:var(--color-text);font-variant-numeric:tabular-nums}.pgd-toggle-fab{position:fixed;bottom:80px;right:20px;width:44px;height:44px;border-radius:50%;border:none;background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);box-shadow:var(--shadow-raised);color:var(--color-text);cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:55;transition:all var(--transition-fast)}.pgd-toggle-fab:hover{transform:scale(1.08);box-shadow:var(--shadow-raised),0 0 12px #3b82f64d}.pgd-toggle-fab.active{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.pgd-scripts-header{display:flex;align-items:center;justify-content:space-between;margin-top:14px;padding-top:10px;border-top:1px solid var(--color-border-light);margin-bottom:8px}.pgd-btn-small{flex:none;padding:4px 10px;font-size:11px}.pgd-btn-accent{background:var(--color-accent, #10b981);color:#fff}.pgd-btn-accent:hover{filter:brightness(1.15)}.pgd-scripts-list{max-height:200px;overflow-y:auto}.pgd-script-item{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:var(--radius-sm);margin-bottom:4px;transition:all var(--transition-fast)}.pgd-script-item:hover{background:var(--color-surface-hover);border-color:var(--color-primary)}.pgd-script-info{display:flex;align-items:center;gap:6px;min-width:0}.pgd-script-name{font-size:12px;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pgd-script-badge{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;color:var(--color-accent, #10b981);background:#10b9811f;padding:1px 5px;border-radius:3px;white-space:nowrap}.pgd-script-actions{display:flex;gap:2px;flex-shrink:0}.pgd-script-run,.pgd-script-edit,.pgd-script-delete{width:24px;height:24px;border:none;background:none;color:var(--color-text-muted);font-size:13px;cursor:pointer;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.pgd-script-run:hover{background:#3b82f626;color:var(--color-primary)}.pgd-script-edit:hover{background:#f59e0b26;color:var(--color-warning, #f59e0b)}.pgd-script-delete:hover{background:#ef444426;color:var(--color-error)}.pgd-script-editor{margin-top:10px;padding-top:10px;border-top:1px solid var(--color-border-light)}.pgd-script-editor .pgd-input{margin-bottom:8px}.pgd-code-textarea{width:100%;min-height:200px;max-height:400px;padding:10px 12px;background:#1e1e2e;border:1px solid var(--color-border);border-radius:var(--radius-sm);color:#cdd6f4;font-family:var(--font-mono, "SF Mono", "Fira Code", monospace);font-size:12px;line-height:1.5;-moz-tab-size:4;tab-size:4;resize:vertical;outline:none;box-sizing:border-box;white-space:pre;overflow:auto}.pgd-code-textarea:focus{border-color:var(--color-primary);box-shadow:0 0 0 2px #3b82f626}.pgd-editor-actions{display:flex;gap:6px;margin-top:8px}.pgd-script-result{margin-top:10px;padding-top:10px;border-top:1px solid var(--color-border-light)}.pgd-script-output{background:#1e1e2e;color:#cdd6f4;padding:10px 12px;border-radius:var(--radius-sm);font-family:var(--font-mono, "SF Mono", "Fira Code", monospace);font-size:11px;line-height:1.5;max-height:300px;overflow:auto;white-space:pre-wrap;word-break:break-word;margin:0}.pgd-list::-webkit-scrollbar{width:4px}.pgd-list::-webkit-scrollbar-track{background:transparent}.pgd-list::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:2px}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--color-text-muted);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-text-secondary)}.hidden{display:none!important}
