:root{--color-bg:#f4f6f8;--color-surface:#fff;--color-border:#e0e4e8;--color-text:#1c2430;--color-text-muted:#66707c;--color-accent:#007aff;--color-ok:#2e7d32;--color-warn:#b26a00;--color-error:#c0392b;--color-warn-bg:#fbf3e0;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--radius:6px;--shadow:0 1px 4px #0000002e;--header-height:48px;--sidebar-width:380px;color:var(--color-text);font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:13px}html,body,#root{height:100%;margin:0;padding:0;overflow:hidden}.app-shell{flex-direction:column;height:100vh;display:flex}.app-header{height:var(--header-height);align-items:center;gap:var(--space-3);padding:0 var(--space-4);background:var(--color-surface);border-bottom:1px solid var(--color-border);box-shadow:var(--shadow);z-index:20;flex:none;display:flex}.app-title{font-size:15px;font-weight:700}.header-spacer{flex:auto}.panel-toggle{cursor:pointer;padding:var(--space-1) var(--space-2);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-muted);white-space:nowrap;border-radius:4px;font-size:12px}.panel-toggle.active{color:var(--color-accent);border-color:var(--color-accent);background:#f0f7ff}.duckdb-badge{color:var(--color-text-muted);background:#eef1f4;border-radius:999px;padding:2px 8px;font-size:12px}.duckdb-badge.ready{color:var(--color-ok)}.duckdb-badge.error{color:var(--color-error);cursor:help}.workspace{flex:auto;min-height:0;display:flex}.sidebar{width:var(--panel-w,var(--sidebar-width));background:var(--color-bg);flex-direction:column;flex:none;min-height:0;display:flex;position:relative}.sidebar-left{border-right:1px solid var(--color-border)}.sidebar-right{border-left:1px solid var(--color-border);padding:var(--space-3)}.resize-handle{cursor:col-resize;z-index:15;touch-action:none;width:6px;position:absolute;top:0;bottom:0}.resize-handle:hover{background:#007aff40}.sidebar-left .resize-handle{right:-3px}.sidebar-right .resize-handle{left:-3px}.map-view{flex:auto;min-width:0;position:relative}.map-view.drawing canvas{cursor:crosshair!important}.map-overlay{z-index:6;border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--space-2) var(--space-3);background:#fffffff5;position:absolute}.map-overlay-tl{top:var(--space-3);left:var(--space-3)}.map-overlay:has(.draw-toggle){padding:0}.attribution{z-index:5;background:#ffffffe6;padding:2px 4px;font-size:11px;position:absolute;bottom:0;right:0}.tabbed-panel{flex-direction:column;flex:auto;min-height:0;display:flex}.tab-bar{background:var(--color-surface);border-bottom:1px solid var(--color-border);flex:none;display:flex}.tab-button{padding:var(--space-2);cursor:pointer;color:var(--color-text-muted);background:0 0;border:none;border-bottom:2px solid #0000;flex:auto;font-size:13px}.tab-button.active{color:var(--color-text);border-bottom-color:var(--color-accent);font-weight:600}.tab-content{padding:var(--space-3);flex:auto;overflow:auto}.chat-placeholder h3{margin:0 0 var(--space-2)}.chat-placeholder p{color:var(--color-text-muted);line-height:1.5}h3{margin:0 0 var(--space-2);font-size:14px}.empty-state{color:var(--color-text-muted);line-height:1.5}code{word-break:break-all;background:#eef1f4;border-radius:3px;padding:1px 4px}.icon-btn{cursor:pointer;background:#eef1f4;border:none;border-radius:3px;flex:none;width:22px;height:22px;padding:0;font-size:13px;line-height:1}.icon-btn:hover:not(:disabled){background:#dde2e8}.icon-btn:disabled{opacity:.4;cursor:default}.icon-btn.danger:hover{color:var(--color-error);background:#f8d7da}.link-btn{color:var(--color-accent);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px}.file-upload .dropzone{border-radius:var(--radius);padding:var(--space-4) var(--space-2);text-align:center;color:var(--color-text-muted);cursor:pointer;border:2px dashed #bcc4cc;transition:border-color .15s,background-color .15s}.file-upload .dropzone:hover,.file-upload .dropzone.dragover{border-color:var(--color-accent);background:#f0f7ff}.file-upload .hint{margin-top:var(--space-1);color:#99a2ac;font-size:11px}.layer-panel{margin-top:var(--space-3)}.layer-panel-header{justify-content:space-between;align-items:center;display:flex}.history-buttons{gap:var(--space-1);display:flex}.layer-list{margin:var(--space-2) 0 0;padding:0;list-style:none}.layer-row{padding:var(--space-1) 0;border-bottom:1px solid var(--color-border)}.layer-row-main{align-items:center;gap:var(--space-1);display:flex}.swatch{border-radius:2px;flex:none;width:12px;height:12px}.layer-name{text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.layer-legend{margin:var(--space-1) 0 var(--space-1) 20px;color:var(--color-text-muted);font-size:11px}.legend-title{width:100%;font:inherit;color:var(--color-text);cursor:pointer;text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;align-items:center;gap:4px;margin-bottom:2px;padding:0;font-weight:600;display:flex;overflow:hidden}.legend-title:hover{color:var(--color-accent)}.legend-caret{color:var(--color-text-muted);flex:none;font-size:10px}.legend-row{align-items:center;gap:var(--space-1);line-height:1.4;display:flex}.legend-swatch{border:1px solid #00000026;border-radius:2px;flex:none;width:12px;height:12px}.legend-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.detail-fields{gap:var(--space-1) var(--space-3);margin:0 0 var(--space-3);grid-template-columns:max-content 1fr;font-size:13px;display:grid}.detail-fields dt{color:var(--color-text-muted);font-weight:600}.detail-fields dd{margin:0}.detail-preview-label{margin-bottom:var(--space-1);font-size:13px;font-weight:600}.detail-empty{color:var(--color-text-muted);font-size:12px;font-style:italic}.detail-error{color:var(--color-danger,#c0392b);font-size:12px}.attr-table-wrap{border:1px solid var(--color-border);border-radius:4px;max-height:320px;overflow:auto}.attr-table{border-collapse:collapse;width:max-content;min-width:100%;font-size:12px}.attr-table th,.attr-table td{border-bottom:1px solid var(--color-border);text-align:left;text-overflow:ellipsis;white-space:nowrap;max-width:200px;padding:4px 8px;overflow:hidden}.attr-table th{background:var(--color-surface);font-weight:600;position:sticky;top:0}.execution-log{margin:0;padding:0;font-size:12px;list-style:none}.execution-log li{border-bottom:1px solid var(--color-border);color:var(--color-text);word-break:break-all;padding:2px 0}.modal-overlay{z-index:50;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--color-surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--space-4);width:calc(100% - 32px);max-width:460px}.modal-wide{max-width:640px}.about-modal{max-width:520px}.about-lead{margin:0 0 var(--space-3)}.about-list{margin:0 0 var(--space-3);padding-left:1.2em;line-height:1.7}.about-list li{margin-bottom:var(--space-1)}.about-start{color:var(--color-text-muted);background:var(--color-bg);padding:var(--space-2);border-radius:4px;font-size:12px}.modal h3{margin-top:0}.modal p{color:var(--color-text);line-height:1.5}.radio-row{margin:var(--space-2) 0;display:block}.modal-actions{justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-4);display:flex}.modal-actions button{cursor:pointer;padding:var(--space-1) var(--space-3);border:1px solid var(--color-border);background:var(--color-surface);border-radius:4px}.modal-actions button.primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.draw-toggle{cursor:pointer;padding:var(--space-2) var(--space-3);color:var(--color-text);white-space:nowrap;background:0 0;border:none;font-size:13px}.draw-toggle:hover{color:var(--color-accent)}.map-overlay .draw-panel{width:200px}.draw-header{justify-content:space-between;align-items:center;display:flex}.map-overlay .draw-panel h3{margin:0}.map-overlay .draw-panel .field-help{font-size:10px}.draw-panel label{margin-top:var(--space-2);font-size:12px;font-weight:600;display:block}.draw-panel input{box-sizing:border-box;border:1px solid var(--color-border);border-radius:4px;width:100%;padding:4px 6px}.draw-tools{gap:var(--space-1);margin:var(--space-2) 0;flex-wrap:wrap;display:flex}.draw-tool{cursor:pointer;padding:var(--space-1) var(--space-2);border:1px solid var(--color-border);background:var(--color-surface);border-radius:4px;font-size:12px}.draw-tool.active{color:var(--color-accent);border-color:var(--color-accent);background:#f0f7ff}.draw-count{color:var(--color-text-muted);margin:var(--space-2) 0;font-size:12px}.draw-actions{gap:var(--space-2);margin-top:var(--space-3);display:flex}.draw-actions button{cursor:pointer;padding:var(--space-1) var(--space-3);border:1px solid var(--color-border);background:var(--color-surface);border-radius:4px}.draw-actions button.primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.draw-actions button:disabled{opacity:.5;cursor:default}.chat-panel{flex-direction:column;height:100%;min-height:0;display:flex}.chat-header{justify-content:space-between;align-items:center;display:flex}.chat-header-actions{align-items:center;gap:var(--space-2);display:flex}.chat-status{color:var(--color-text-muted);background:#eef1f4;border-radius:999px;padding:1px 6px;font-size:11px}.chat-status.is-running{color:var(--color-accent)}.message-list{margin:var(--space-2) 0;gap:var(--space-2);flex-direction:column;flex:auto;display:flex;overflow:auto}.message{border-radius:var(--radius);padding:var(--space-2);font-size:13px;line-height:1.5}.message-label{text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);margin-bottom:2px;font-size:10px;display:block}.message-user{color:#fff;background:#234b6e;align-self:flex-end;max-width:90%}.message-user .message-label{color:#cdd8e6}.message-assistant{background:var(--color-surface);border:1px solid var(--color-border)}.message-progress{border:none;border-left:2px solid var(--color-border);padding:2px 0 2px var(--space-2);color:var(--color-text-muted);background:0 0;border-radius:0}.message-notice{background:var(--color-warn-bg);border:1px solid #ecdca8}.message p{white-space:pre-wrap;margin:0}.message-markdown :is(h1,h2,h3){margin:var(--space-2) 0 var(--space-1);font-size:14px}.message-markdown table{border-collapse:collapse;font-size:12px}.message-markdown th,.message-markdown td{border:1px solid var(--color-border);padding:2px 6px}.message-markdown pre{padding:var(--space-2);background:#f3f5f7;border-radius:4px;overflow:auto}.message-spinner{color:var(--color-text-muted);font-size:12px}.prompt-form{flex:none}.prompt-form textarea{box-sizing:border-box;resize:vertical;width:100%;font-size:13px}.prompt-actions{margin-top:var(--space-1);justify-content:flex-end;display:flex}.prompt-actions button{cursor:pointer;padding:var(--space-1) var(--space-4);border:1px solid var(--color-accent);background:var(--color-accent);color:#fff;border-radius:4px}.prompt-actions button:disabled{opacity:.5;cursor:default}.prompt-disabled{color:var(--color-text-muted);margin:var(--space-2) 0 0;font-size:12px}.settings{position:relative}.secondary-button{cursor:pointer;padding:var(--space-1) var(--space-3);border:1px solid var(--color-border);background:var(--color-surface);border-radius:4px;font-size:13px}.settings-popover{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);width:300px;box-shadow:var(--shadow);padding:var(--space-3);z-index:30;gap:var(--space-1);flex-direction:column;display:flex;position:absolute;top:calc(100% + 6px);right:0}.settings-popover label{margin-top:var(--space-2);font-size:12px;font-weight:600}.settings-popover input{box-sizing:border-box;border:1px solid var(--color-border);border-radius:4px;width:100%;padding:4px 6px}.field-help{color:var(--color-text-muted);margin:2px 0;font-size:11px}.settings-actions{gap:var(--space-2);margin-top:var(--space-3);display:flex}.save-button{cursor:pointer;padding:var(--space-1) var(--space-3);border:1px solid var(--color-accent);background:var(--color-accent);color:#fff;border-radius:4px}.ghost-button{cursor:pointer;padding:var(--space-1) var(--space-3);border:1px solid var(--color-border);background:var(--color-surface);border-radius:4px}.ghost-button:disabled{opacity:.5;cursor:default}@media (width<=720px){.workspace{flex-direction:column}.sidebar{border-left:none;border-right:none;width:100%;height:40%}.sidebar-left{border-bottom:1px solid var(--color-border)}.sidebar-right{border-top:1px solid var(--color-border)}}
